From 9d3d6c518f11d297d19c1d1a7def55122e48b72f Mon Sep 17 00:00:00 2001 From: khartlage Date: Wed, 9 Apr 2003 16:49:48 +0000 Subject: [PATCH] Prepared for multiple Partitioners --- .../phpeclipse/phpeditor/PHPDocumentProvider.java | 79 +++++++++++++++++--- 1 files changed, 69 insertions(+), 10 deletions(-) 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. -- 1.7.1