lot of fixes about offsets
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / PHPDocumentProvider.java
index cfd23d7..2fa0115 100644 (file)
@@ -12,13 +12,18 @@ 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.ui.editors.text.FileDocumentProvider;
+import org.eclipse.ui.part.FileEditorInput;
 
 /** 
  * The PHPDocumentProvider provides the IDocuments used by java editors.
@@ -27,10 +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[] { 
-    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();
+  }
 }