The parser will now recognize mixed case in php tag <?Php for example
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / phpparser / PHPParser.java
index 110dd8f..ad5173d 100644 (file)
@@ -61,7 +61,11 @@ public class PHPParser extends PHPKeywords {
   Long longNumber;
   Double doubleNumber;
 
-  String stringValue;
+  private String stringValue;
+
+  /** Contains the current expression. */
+  private StringBuffer expression;
+
   private boolean phpMode;
 
   final static int TT_EOF = 0;
@@ -757,23 +761,11 @@ public class PHPParser extends PHPKeywords {
                 phpMode = true;
                 phpFound = true;
                 break;
-              } else if (ch2 == 'p') {
-                ch2 = str.charAt(chIndx++);
-                if (ch2 == 'h') {
-                  ch2 = str.charAt(chIndx++);
-                  if (ch2 == 'p') {
-                    phpMode = true;
-                    phpFound = true;
-                    break;
-                  }
-                  chIndx--;
-                }
-                chIndx--;
-              } else if (ch2 == 'P') {
+              } else if (ch2 == 'p' || ch2 == 'P') {
                 ch2 = str.charAt(chIndx++);
-                if (ch2 == 'H') {
+                if (ch2 == 'h' || ch2 == 'H') {
                   ch2 = str.charAt(chIndx++);
-                  if (ch2 == 'P') {
+                  if (ch2 == 'p' || ch2 == 'P') {
                     phpMode = true;
                     phpFound = true;
                     break;
@@ -1767,9 +1759,9 @@ public class PHPParser extends PHPKeywords {
     return outlineInfo;
   }
 
-  private void parseDeclarations(PHPOutlineInfo outlineInfo, PHPClassDeclaration current, boolean goBack) {
+  private void parseDeclarations(PHPOutlineInfo outlineInfo, PHPSegmentWithChildren current, boolean goBack) {
     //   PHPClassDeclaration current = (PHPClassDeclaration) stack.peek();
-    PHPClassDeclaration temp;
+    PHPSegmentWithChildren temp;
     int counter = 0;
     String oldIdentifier;
     IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
@@ -1813,8 +1805,10 @@ public class PHPParser extends PHPKeywords {
           }
           if (token == TT_IDENTIFIER && store.getBoolean(PHPeclipsePlugin.PHP_OUTLINE_FUNC)) {
             outlineInfo.addVariable(identifier);
-            current.add(new PHPFunctionDeclaration(current, identifier, chIndx - identifier.length()));
+            temp = new PHPFunctionDeclaration(current, identifier, chIndx - identifier.length());
+            current.add(temp);
             getNextToken();
+            parseDeclarations(outlineInfo, temp, true);
           }
         } else if (token == TT_class) {
           getNextToken();
@@ -1824,6 +1818,8 @@ public class PHPParser extends PHPKeywords {
             current.add(temp);
             //        stack.push(temp);
             getNextToken();
+
+            //skip tokens for classname, extends and others until we have the opening '{'
             while (token != TT_LISTOPEN && token != TT_EOF && token != TT_UNDEFINED) {
               getNextToken();
             }
@@ -1839,6 +1835,11 @@ public class PHPParser extends PHPKeywords {
           if (counter == 0 && goBack) {
             return;
           }
+        } else if (token == TT_require || token == TT_require_once || token == TT_include || token == TT_include_once) {
+          expression();
+          outlineInfo.addVariable(identifier);
+          current.add(new PHPReqIncDeclaration(current, identifier, chIndx - identifier.length(),expression.toString()));
+          getNextToken();
         } else {
           getNextToken();
         }
@@ -2671,6 +2672,14 @@ public class PHPParser extends PHPKeywords {
   }
 
   private void expression() throws CoreException {
+    //todo: find a better way to get the expression
+    expression = new StringBuffer();
+    for (int i = chIndx;i<str.length();i++) {
+      if (str.charAt(i) == ';') {
+        break;
+      }
+      expression.append(str.charAt(i));
+    }
     //    if (token == TT_STRING_CONSTANT || token == TT_INTERPOLATED_STRING) {
     //      getNextToken();
     //    } else {