improved/refactored php syntax parser
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / PHPParserAction.java
index dd34221..515f19f 100644 (file)
@@ -15,20 +15,18 @@ Contributors:
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Hashtable;
 import java.util.List;
 
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import net.sourceforge.phpeclipse.phpeditor.phpparser.PHPParser;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.Position;
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.texteditor.ITextEditor;
-import org.eclipse.ui.texteditor.MarkerUtilities;
 import org.eclipse.ui.texteditor.TextEditorAction;
 
 /**
@@ -36,14 +34,6 @@ import org.eclipse.ui.texteditor.TextEditorAction;
  */
 public class PHPParserAction extends TextEditorAction {
 
-  //   public static final String EXE = "exe"; //$NON-NLS-1$
-  //   public static final String WINEXE = "winexe"; //$NON-NLS-1$
-  //   public static final String LIBRARY = "library"; //$NON-NLS-1$
-  //   public static final String MODULE = "module"; //$NON-NLS-1$
-
- // private static final String ERROR = "error"; //$NON-NLS-1$
- // private static final String WARNING = "warning"; //$NON-NLS-1$
-
   private static PHPParserAction instance = new PHPParserAction();
 
   protected IFile fileToParse;
@@ -73,27 +63,22 @@ public class PHPParserAction extends TextEditorAction {
         // should throw an exception
         return;
       }
-      // first delete all the previous markers
-      fileToParse.deleteMarkers(IMarker.PROBLEM, false, 0);
-      //IDocument document = getTextEditor().getDocumentProvider().getDocument(null);
-      //String text = document.get();
-
-      //  String text = 
-      // parse(document);
-      try {
-        InputStream iStream = fileToParse.getContents();
-        //        int c = iStream.read();
-        parse(iStream);
-        iStream.close();
-      } catch (IOException e) {
+      IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+      if (store.getString(PHPeclipsePlugin.PHP_PARSER_DEFAULT).equals(PHPeclipsePlugin.PHP_INTERNAL_PARSER)) {
+        // first delete all the previous markers
+        fileToParse.deleteMarkers(IMarker.PROBLEM, false, 0);
+
+        try {
+          InputStream iStream = fileToParse.getContents();
+          //        int c = iStream.read();
+          parse(iStream);
+          iStream.close();
+        } catch (IOException e) {
+        }
+      } else {
+        PHPParser.phpExternalParse(fileToParse);
       }
 
-      //      String message = "Test error";
-      //      int lineNumber = 1;
-      //
-      //      // create marker for the error
-      //
-      //      setMarker(message, lineNumber, fileToParse);
     } catch (CoreException e) {
     }
 
@@ -120,19 +105,19 @@ public class PHPParserAction extends TextEditorAction {
   /**
    * Create marker for the parse error
    */
-//  protected void setMarker(String message, int lineNumber) throws CoreException {
-//
-//    Hashtable attributes = new Hashtable();
-//    MarkerUtilities.setMessage(attributes, message);
-//    if (message.startsWith(ERROR))
-//      attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
-//    else if (message.startsWith(WARNING))
-//      attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_WARNING));
-//    else
-//      attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO));
-//    MarkerUtilities.setLineNumber(attributes, lineNumber);
-//    MarkerUtilities.createMarker(fileToParse, attributes, IMarker.PROBLEM);
-//  }
+  //  protected void setMarker(String message, int lineNumber) throws CoreException {
+  //
+  //    Hashtable attributes = new Hashtable();
+  //    MarkerUtilities.setMessage(attributes, message);
+  //    if (message.startsWith(ERROR))
+  //      attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
+  //    else if (message.startsWith(WARNING))
+  //      attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_WARNING));
+  //    else
+  //      attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO));
+  //    MarkerUtilities.setLineNumber(attributes, lineNumber);
+  //    MarkerUtilities.createMarker(fileToParse, attributes, IMarker.PROBLEM);
+  //  }
 
   //  private String getIdentifier(InputStream iStream, int c) {
   //    //    int i = 0;
@@ -158,9 +143,9 @@ public class PHPParserAction extends TextEditorAction {
 
   protected void parse(InputStream iStream) {
 
-    StringBuffer buf = new StringBuffer();
+    StringBuffer buf = new StringBuffer(); 
     int c0;
-    try {
+    try { 
       while ((c0 = iStream.read()) != (-1)) {
         buf.append((char) c0);
       }
@@ -168,8 +153,11 @@ public class PHPParserAction extends TextEditorAction {
       return;
     }
     String input = buf.toString();
-    
-      PHPParser parser = new PHPParser(fileToParse);
-      parser.htmlParse(input);
+
+    PHPParser parser = new PHPParser(fileToParse);
+    try {
+      parser.parse(input);
+    } catch (CoreException e) {
+    }
   }
 }
\ No newline at end of file