Prepared for multiple Partitioners
authorkhartlage <khartlage>
Wed, 9 Apr 2003 16:49:48 +0000 (16:49 +0000)
committerkhartlage <khartlage>
Wed, 9 Apr 2003 16:49:48 +0000 (16:49 +0000)
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java

index 4db485f..2fa0115 100644 (file)
@@ -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.