improved php parser
authorkhartlage <khartlage>
Sun, 24 Nov 2002 14:52:45 +0000 (14:52 +0000)
committerkhartlage <khartlage>
Sun, 24 Nov 2002 14:52:45 +0000 (14:52 +0000)
net.sourceforge.phpeclipse/src/junit/sourceforge/phpeclipse/PHPParserTestCase.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPParser.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPParserAction.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPString.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPKeywords.java

index 400365a..94f940e 100644 (file)
@@ -29,7 +29,8 @@ public class PHPParserTestCase extends TestCase {
    */
   public void testPHPParser() {
     checkHTML("<?php phpinfo(); ?>");
-    
+    checkHTML("<?php phpinfo()?>");
+    checkHTML("<?php phpinfo(); ?> foo <?php phpinfo(); ?>");
     checkPHP("if (isset($test)) { } elseif (isset($lang)) { }");
     checkPHP("require_once(\"mainfile.php\");  ");
     checkPHP("if (eregi(\"footer.php\",$PHP_SELF)) {\n" + "Header(\"Location: index.php\");\n" + "die();\n" + "}\n");
index a6f236e..98ce451 100644 (file)
@@ -771,6 +771,7 @@ public class PHPParser extends PHPKeywords {
     boolean phpFound = false;
 
     phpList = new ArrayList();
+    currentPHPString = 0;
 
     try {
       int i = 0;
index 6882db1..dd34221 100644 (file)
@@ -41,8 +41,8 @@ public class PHPParserAction extends TextEditorAction {
   //   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 final String ERROR = "error"; //$NON-NLS-1$
+ // private static final String WARNING = "warning"; //$NON-NLS-1$
 
   private static PHPParserAction instance = new PHPParserAction();
 
@@ -120,19 +120,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;
@@ -157,11 +157,7 @@ public class PHPParserAction extends TextEditorAction {
   //  }
 
   protected void parse(InputStream iStream) {
-    boolean lineCommentMode = false;
-    boolean multiLineCommentMode = false;
-    boolean stringMode = false;
 
-    //   ArrayList phpList = new ArrayList();
     StringBuffer buf = new StringBuffer();
     int c0;
     try {
@@ -172,136 +168,8 @@ public class PHPParserAction extends TextEditorAction {
       return;
     }
     String input = buf.toString();
-    int lineNumber = 1;
-    int startLineNumber = 1;
-    int startIndex = 0;
-    char ch;
-    char ch2;
-    boolean phpMode = false;
-    boolean phpFound = false;
-
-    try {
-      int i = 0;
-      while (i < input.length()) {
-        ch = input.charAt(i++);
-        if (ch == '\n') {
-          lineNumber++;
-        }
-        if ( (! phpMode) && ch == '<') {
-          ch2 = input.charAt(i++);
-          if (ch2 == '?') {
-            ch2 = input.charAt(i++);
-            if (Character.isWhitespace(ch2)) {
-              // php start 
-              phpMode = true;
-              phpFound = true;
-              startIndex = i;
-              startLineNumber = lineNumber;
-              continue;
-            } else if (ch2 == 'p') {
-              ch2 = input.charAt(i++);
-              if (ch2 == 'h') {
-                ch2 = input.charAt(i++);
-                if (ch2 == 'p') {
-                  phpMode = true;
-                  phpFound = true;
-                  startIndex = i;
-                  startLineNumber = lineNumber;
-                  continue;
-                }
-                i--;
-              }
-              i--;
-            } else if (ch2 == 'P') {
-              ch2 = input.charAt(i++);
-              if (ch2 == 'H') {
-                ch2 = input.charAt(i++);
-                if (ch2 == 'P') {
-                  phpMode = true;
-                  phpFound = true;
-                  startIndex = i;
-                  startLineNumber = lineNumber;
-                  continue;
-                }
-                i--;
-              }
-              i--;
-            }
-            i--;
-          }
-          i--;
-        }
-
-        if (phpMode) {
-          buf.append(ch);
-          if (lineCommentMode && (ch == '\n')) {
-            lineCommentMode = false;
-            // read until end of line
-          } else if ((!stringMode) && (ch == '#')) {
-            // read until end of line
-            lineCommentMode = true;
-            continue;
-          } else if ((!stringMode) && (!multiLineCommentMode) && (ch == '/')) {
-            ch2 = input.charAt(i++);
-            if (ch2 == '/') {
-              lineCommentMode = true;
-              continue;
-            } else if (ch2 == '*') {
-              multiLineCommentMode = true;
-              continue;
-            } else {
-              i--;
-            }
-          } else if (ch == '*' && multiLineCommentMode) {
-            ch2 = input.charAt(i++);
-            if (ch2 == '/') {
-              multiLineCommentMode = false;
-              continue;
-            } else {
-              i--;
-            }
-          } else if (ch == '\\' && stringMode) {
-            ch2 = input.charAt(i++);
-            if (ch2 == '"') {
-              continue;
-            } else {
-              i--;
-            }
-          } else if ((!lineCommentMode) && (!multiLineCommentMode) && (ch == '"')) {
-            if (stringMode) {
-              stringMode = false;
-            } else {
-              stringMode = true;
-            }
-            continue;
-          }
-          if (lineCommentMode || multiLineCommentMode || stringMode) {
-            continue;
-          }
-
-          if (ch == '?') {
-            ch2 = input.charAt(i++);
-            if (ch2 == '>') {
-              // php end
-              phpMode = false;
-              //             phpList.add(input.substring(startIndex, i-2));
-              try {
-                PHPParser parser = new PHPParser();
-                parser.start(input.substring(startIndex, i - 2), startLineNumber);
-              } catch (SyntaxError err) {
-                setMarker(err.getMessage(), err.getLine());
-              }
-              continue;
-            }
-            i--;
-          }
-        } else {
-        }
-      }
-      if (!phpFound) {
-        setMarker("No PHP source code found.", lineNumber);
-      }
-    } catch (CoreException e) {
-    }
+    
+      PHPParser parser = new PHPParser(fileToParse);
+      parser.htmlParse(input);
   }
 }
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPString.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPString.java
new file mode 100644 (file)
index 0000000..2c4ce70
--- /dev/null
@@ -0,0 +1,23 @@
+package net.sourceforge.phpeclipse.phpeditor;
+
+/**
+ * 
+ * @author khartlage
+ */
+public class PHPString {
+  private String phpString;
+  private int lineNumber;
+  
+  public PHPString(String phpString, int lineNumber) {
+    this.phpString = phpString;
+    this.lineNumber = lineNumber;
+  }
+  
+  public String getPHPString() {
+    return phpString;
+  }
+    
+  public int getLineNumber() {
+    return lineNumber;
+  }
+}
index 8e6409b..ce19628 100644 (file)
@@ -51,7 +51,9 @@ public class PHPKeywords {
     //  "empty",
     //  "array",
     //   "isset",
-    "echo", "var", "as", "print", "unset", "exit", "die", "and", "or", "xor", "list", 
+    "echo", "var", "as", "print", "unset", 
+    // "exit", "die", 
+    "and", "or", "xor", "list", 
     "null", "false", "true" };
 
   public final static String[] PHP_TYPES =
@@ -95,8 +97,8 @@ public class PHPKeywords {
   public final static int TT_as = 1035;
   public final static int TT_print = 1036;
   public final static int TT_unset = 1037;
-  public final static int TT_exit = 1038;
-  public final static int TT_die = 1039;
+ //  public final static int TT_exit = 1038;
+ // public final static int TT_die = 1039;
   public final static int TT_and = 1040;
   public final static int TT_or = 1041;
   public final static int TT_xor = 1042;
@@ -140,6 +142,8 @@ public class PHPKeywords {
     // TT_empty,
     //  TT_array,
     //   TT_isset,
-    TT_echo, TT_var, TT_as, TT_print, TT_unset, TT_exit, TT_die, TT_and, TT_or, TT_xor, TT_list, 
+    TT_echo, TT_var, TT_as, TT_print, TT_unset, 
+    //TT_exit, TT_die, 
+    TT_and, TT_or, TT_xor, TT_list, 
     TT_null, TT_false, TT_true };
 }