X-Git-Url: http://git.phpeclipse.com 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 1c603b6..2fa0115 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java @@ -12,25 +12,34 @@ Contributors: Klaus Hartlage - www.eclipseproject.de **********************************************************************/ +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; import org.eclipse.jface.text.IDocumentPartitioner; +import org.eclipse.jface.text.ILineTracker; import org.eclipse.jface.text.rules.DefaultPartitioner; -import org.eclipse.jface.text.rules.RuleBasedPartitioner; import org.eclipse.ui.editors.text.FileDocumentProvider; -import net.sourceforge.phpeclipse.phpeditor.php.PHPPartitionScanner; +import org.eclipse.ui.part.FileEditorInput; /** - * The JavaDocumentProvider provides the IDocuments used by java editors. + * The PHPDocumentProvider provides the IDocuments used by java editors. */ 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[] { - PHPPartitionScanner.PHP, -// PHPPartitionScanner.HTML, - PHPPartitionScanner.HTML_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 static PHPPartitionScanner fgScanner = null; @@ -44,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); } @@ -59,11 +98,48 @@ 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. + * + * @param element the element serving as blue print + * @return a line tracker based on the same line delimiters as the element's document + */ + public ILineTracker createLineTracker(Object element) { + return new DefaultLineTracker(); + } }