From: khartlage Date: Wed, 9 Apr 2003 16:49:48 +0000 (+0000) Subject: Prepared for multiple Partitioners X-Git-Url: http://secure.phpeclipse.com?hp=efe3ab216e7abbbccbc71139d8e75689027e613c Prepared for multiple Partitioners --- diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java index 4db485f..2fa0115 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java @@ -15,6 +15,7 @@ Contributors: import net.sourceforge.phpeclipse.phpeditor.php.IPHPPartitionScannerConstants; import net.sourceforge.phpeclipse.phpeditor.php.PHPPartitionScanner; +import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.DefaultLineTracker; import org.eclipse.jface.text.IDocument; @@ -22,6 +23,7 @@ import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.jface.text.ILineTracker; import org.eclipse.jface.text.rules.DefaultPartitioner; import org.eclipse.ui.editors.text.FileDocumentProvider; +import org.eclipse.ui.part.FileEditorInput; /** * The PHPDocumentProvider provides the IDocuments used by java editors. @@ -30,13 +32,14 @@ import org.eclipse.ui.editors.text.FileDocumentProvider; public class PHPDocumentProvider extends FileDocumentProvider { // private final static String[] TYPES= new String[] { PHPPartitionScanner.PHP, PHPPartitionScanner.JAVA_DOC, PHPPartitionScanner.JAVA_MULTILINE_COMMENT }; - private final static String[] TYPES = new String[] { - IPHPPartitionScannerConstants.PHP, - IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT, - IPHPPartitionScannerConstants.HTML, - IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT, - IPHPPartitionScannerConstants.JAVASCRIPT, - IPHPPartitionScannerConstants.CSS}; + private final static String[] TYPES = + new String[] { + IPHPPartitionScannerConstants.PHP, + IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT, + IPHPPartitionScannerConstants.HTML, + IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT, + IPHPPartitionScannerConstants.JAVASCRIPT, + IPHPPartitionScannerConstants.CSS }; private static PHPPartitionScanner fgScanner = null; @@ -50,7 +53,37 @@ public class PHPDocumentProvider extends FileDocumentProvider { protected IDocument createDocument(Object element) throws CoreException { IDocument document = super.createDocument(element); if (document != null) { - IDocumentPartitioner partitioner = createPHPPartitioner(); + // int fileType = 0; // PHP + IDocumentPartitioner partitioner = null; + if (element instanceof FileEditorInput) { + IFile file = (IFile) ((FileEditorInput) element).getAdapter(IFile.class); + String filename = file.getLocation().toString(); + String extension = filename.substring(filename.lastIndexOf("."), filename.length()); + // System.out.println(extension); + if (extension.equalsIgnoreCase(".html") || extension.equalsIgnoreCase(".htm")) { + // html + partitioner = createHTMLPartitioner(); + } else if (extension.equalsIgnoreCase(".xml")) { + // xml + partitioner = createXMLPartitioner(); + } else if (extension.equalsIgnoreCase(".js")) { + // javascript + partitioner = createJavaScriptPartitioner(); + } else if (extension.equalsIgnoreCase(".css")) { + // cascading style sheets + partitioner = createCSSPartitioner(); + } else if (extension.equalsIgnoreCase(".tpl")) { + // smarty ? + partitioner = createSmartyPartitioner(); + } else if (extension.equalsIgnoreCase(".inc")) { + // php include files ? + partitioner = createIncludePartitioner(); + } + } + + if (partitioner == null) { + partitioner = createPHPPartitioner(); + } document.setDocumentPartitioner(partitioner); partitioner.connect(document); } @@ -65,14 +98,40 @@ public class PHPDocumentProvider extends FileDocumentProvider { } /** - * Return a scanner for creating java partitions. + * Return a partitioner for .html files. + */ + private IDocumentPartitioner createHTMLPartitioner() { + return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); + } + + private IDocumentPartitioner createXMLPartitioner() { + return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); + } + + private IDocumentPartitioner createJavaScriptPartitioner() { + return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); + } + + private IDocumentPartitioner createCSSPartitioner() { + return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); + } + + private IDocumentPartitioner createSmartyPartitioner() { + return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); + } + + private IDocumentPartitioner createIncludePartitioner() { + return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); + } + /** + * Return a scanner for creating php partitions. */ private PHPPartitionScanner getPHPPartitionScanner() { if (fgScanner == null) fgScanner = new PHPPartitionScanner(); return fgScanner; } - + /** * Creates a line tracker working with the same line delimiters as the document * of the given element. Assumes the element to be managed by this document provider.