removed the $ in the name of the variables
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / parser / Parser.java
index 61fd6d7..11b48d9 100644 (file)
@@ -10,36 +10,23 @@ Contributors:
 **********************************************************************/
 package net.sourceforge.phpdt.internal.compiler.parser;
 
-import java.text.MessageFormat;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Hashtable;
 
 import net.sourceforge.phpdt.core.compiler.*;
-import net.sourceforge.phpdt.internal.compiler.parser.*;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-import net.sourceforge.phpeclipse.actions.PHPStartApacheAction;
 import net.sourceforge.phpeclipse.phpeditor.PHPString;
-import net.sourceforge.phpeclipse.phpeditor.php.PHPKeywords;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.ui.texteditor.MarkerUtilities;
+import test.PHPParserSuperclass;
 
-public class Parser extends PHPKeywords implements ITerminalSymbols {
-  // strings for external parser call
-  private static final String PARSE_ERROR_STRING = "Parse error"; //$NON-NLS-1$
-  private static final String PARSE_WARNING_STRING = "Warning"; //$NON-NLS-1$
+public class Parser extends PHPParserSuperclass implements ITerminalSymbols {
 
-  public static final int ERROR = 2;
-  public static final int WARNING = 1;
-  public static final int INFO = 0;
-
-  public static final boolean DEBUG = false;
-  //scanner token 
+  //scanner token
   public Scanner scanner;
 
   private IFile fileToParse;
@@ -48,11 +35,11 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
   private int currentPHPString;
   private boolean phpEnd;
 
-  private static HashMap keywordMap = null;
+  // private static HashMap keywordMap = null;
   private String str;
 
   // current character
-//  char ch;
+  //  char ch;
   // current token
   int token;
 
@@ -72,7 +59,7 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
   private String stringValue;
 
   /** Contains the current expression. */
- // private StringBuffer expression;
+  // private StringBuffer expression;
 
   private boolean phpMode;
 
@@ -151,6 +138,19 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
   //   final static int TokenNameNOT_EQUAL_EQUAL = 158;
   //   final static int TokenNameOR = 159;
   //  final static int TokenNameAT = 153; // @
+
+  public Parser() {
+  }
+
+  public void setFileToParse(IFile fileToParse) {
+    this.currentPHPString = 0;
+    this.fileToParse = fileToParse;
+    this.phpList = null;
+    this.str = "";
+    this.token = TokenNameEOF;
+    this.phpEnd = false;
+    this.initializeScanner();
+  }
   /**
    *  Class Constructor.
    *
@@ -159,20 +159,20 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
    *@see
    */
   public Parser(IFile fileToParse) {
-    if (keywordMap == null) {
-      keywordMap = new HashMap();
-      for (int i = 0; i < PHP_KEYWORS.length; i++) {
-        keywordMap.put(PHP_KEYWORS[i], new Integer(PHP_KEYWORD_TOKEN[i]));
-      }
-    }
+    //    if (keywordMap == null) {
+    //      keywordMap = new HashMap();
+    //      for (int i = 0; i < PHP_KEYWORS.length; i++) {
+    //        keywordMap.put(PHP_KEYWORS[i], new Integer(PHP_KEYWORD_TOKEN[i]));
+    //      }
+    //    }
     this.currentPHPString = 0;
     this.fileToParse = fileToParse;
     this.phpList = null;
     this.str = "";
     this.token = TokenNameEOF;
-//    this.chIndx = 0;
-//    this.rowCount = 1;
-//    this.columnCount = 0;
+    //    this.chIndx = 0;
+    //    this.rowCount = 1;
+    //    this.columnCount = 0;
     this.phpEnd = false;
     //   getNextToken();
 
@@ -194,36 +194,6 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
     setMarker(fileToParse, message, charStart, charEnd, errorLevel);
   }
 
-  public static void setMarker(
-    IFile file,
-    String message,
-    int charStart,
-    int charEnd,
-    int errorLevel)
-    throws CoreException {
-    if (file != null) {
-      Hashtable attributes = new Hashtable();
-      MarkerUtilities.setMessage(attributes, message);
-      switch (errorLevel) {
-        case ERROR :
-          attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
-          break;
-        case WARNING :
-          attributes.put(
-            IMarker.SEVERITY,
-            new Integer(IMarker.SEVERITY_WARNING));
-          break;
-        case INFO :
-          attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO));
-          break;
-      }
-      MarkerUtilities.setCharStart(attributes, charStart);
-      MarkerUtilities.setCharEnd(attributes, charEnd);
-      // setLineNumber(attributes, lineNumber);
-      MarkerUtilities.createMarker(file, attributes, IMarker.PROBLEM);
-    }
-  }
-
   /**
    * This method will throw the SyntaxError.
    * It will add the good lines and columns to the Error
@@ -232,28 +202,24 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
    */
   private void throwSyntaxError(String error) {
 
-//    if (str.length() < chIndx) {
-//      chIndx--;
-//    }
-//    // read until end-of-line
-//    int eol = chIndx;
-//    while (str.length() > eol) {
-//      ch = str.charAt(eol++);
-//      if (ch == '\n') {
-//        eol--;
-//        break;
-//      }
-//    }
-//    throw new SyntaxError(
-//      rowCount,
-//      chIndx - columnCount + 1,
-//      str.substring(columnCount, eol),
-//      error);
-    throw new SyntaxError(
-      1,
-      1,
-      "",
-      error);
+    //    if (str.length() < chIndx) {
+    //      chIndx--;
+    //    }
+    //    // read until end-of-line
+    //    int eol = chIndx;
+    //    while (str.length() > eol) {
+    //      ch = str.charAt(eol++);
+    //      if (ch == '\n') {
+    //        eol--;
+    //        break;
+    //      }
+    //    }
+    //    throw new SyntaxError(
+    //      rowCount,
+    //      chIndx - columnCount + 1,
+    //      str.substring(columnCount, eol),
+    //      error);
+    throw new SyntaxError(1, 1, "", error);
   }
 
   /**
@@ -271,18 +237,18 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
    *
    *@see
    */
-//  private void getChar() {
-//    if (str.length() > chIndx) {
-//      ch = str.charAt(chIndx++);
-//
-//      return;
-//    }
-//
-//    chIndx = str.length() + 1;
-//    ch = ' ';
-//    //  token = TokenNameEOF;
-//    phpEnd = true;
-//  }
+  //  private void getChar() {
+  //    if (str.length() > chIndx) {
+  //      ch = str.charAt(chIndx++);
+  //
+  //      return;
+  //    }
+  //
+  //    chIndx = str.length() + 1;
+  //    ch = ' ';
+  //    //  token = TokenNameEOF;
+  //    phpEnd = true;
+  //  }
 
   /**
    * gets the next token from input
@@ -290,7 +256,7 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
   private void getNextToken() throws CoreException {
     try {
       token = scanner.getNextToken();
-      if (DEBUG) {
+      if (Scanner.DEBUG) {
         int currentEndPosition = scanner.getCurrentTokenEndPosition();
         int currentStartPosition = scanner.getCurrentTokenStartPosition();
 
@@ -921,137 +887,137 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
    * if it's a <code>double</code> the number will be stored in <code>longNumber</code> and the token will have the
    * value {@link Parser#TokenNameINT_NUMBER}
    */
-//  private void getNumber() {
-//    StringBuffer inum = new StringBuffer();
-//    char dFlag = ' ';
-//    int numFormat = 10;
-//
-//    // save first digit
-//    char firstCh = ch;
-//    inum.append(ch);
-//
-//    getChar();
-//    // determine number conversions:
-//    if (firstCh == '0') {
-//      switch (ch) {
-//        case 'b' :
-//          numFormat = 2;
-//          getChar();
-//          break;
-//        case 'B' :
-//          numFormat = 2;
-//          getChar();
-//          break;
-//        case 'o' :
-//          numFormat = 8;
-//          getChar();
-//          break;
-//        case 'O' :
-//          numFormat = 8;
-//          getChar();
-//          break;
-//        case 'x' :
-//          numFormat = 16;
-//          getChar();
-//          break;
-//        case 'X' :
-//          numFormat = 16;
-//          getChar();
-//          break;
-//      }
-//    }
-//
-//    if (numFormat == 16) {
-//      while ((ch >= '0' && ch <= '9')
-//        || (ch >= 'a' && ch <= 'f')
-//        || (ch >= 'A' && ch <= 'F')) {
-//        inum.append(ch);
-//        getChar();
-//      }
-//    } else {
-//      while ((ch >= '0' && ch <= '9')
-//        || (ch == '.')
-//        || (ch == 'E')
-//        || (ch == 'e')) {
-//        if ((ch == '.') || (ch == 'E') || (ch == 'e')) {
-//          if (ch == '.' && dFlag != ' ') {
-//            break;
-//          }
-//          if ((dFlag == 'E') || (dFlag == 'e')) {
-//            break;
-//          }
-//          dFlag = ch;
-//          inum.append(ch);
-//          getChar();
-//          if ((ch == '-') || (ch == '+')) {
-//            inum.append(ch);
-//            getChar();
-//          }
-//        } else {
-//          inum.append(ch);
-//          getChar();
-//        }
-//      }
-//    }
-//    chIndx--;
-//
-//    try {
-//      if (dFlag != ' ') {
-//        doubleNumber = new Double(inum.toString());
-//        token = TokenNameDoubleLiteral;
-//        return;
-//      } else {
-//        longNumber = Long.valueOf(inum.toString(), numFormat);
-//        token = TokenNameIntegerLiteral;
-//        return;
-//      }
-//
-//    } catch (Throwable e) {
-//      throwSyntaxError("Number format error: " + inum.toString());
-//    }
-//  }
-//
-//  /**
-//   * Get a String.
-//   * @param openChar the opening char ('\'', '"', '`')
-//   * @param typeString the type of string {@link #TokenNameSTRING_CONSTANT},{@link #TokenNameINTERPOLATED_STRING}
-//   * @param errorMsg the error message in case of parse error in the string
-//   */
-//  private void getString(
-//    final char openChar,
-//    final int typeString,
-//    final String errorMsg) {
-//    StringBuffer sBuffer = new StringBuffer();
-//    boolean openString = true;
-//    int startRow = rowCount;
-//    while (str.length() > chIndx) {
-//      ch = str.charAt(chIndx++);
-//      if (ch == '\\') {
-//        sBuffer.append(ch);
-//        if (str.length() > chIndx) {
-//          ch = str.charAt(chIndx++);
-//          sBuffer.append(ch);
-//        }
-//      } else if (ch == openChar) {
-//        openString = false;
-//        break;
-//      } else if (ch == '\n') {
-//        rowCount++;
-//        columnCount = chIndx;
-//      } else {
-//        sBuffer.append(ch);
-//      }
-//    }
-//    if (openString) {
-//      if (typeString == TokenNameStringConstant) {
-//        throwSyntaxError(errorMsg, startRow);
-//      } else {
-//        throwSyntaxError(errorMsg);
-//      }
-//    }
-//    token = typeString;
-//    stringValue = sBuffer.toString();
-//  }
+  //  private void getNumber() {
+  //    StringBuffer inum = new StringBuffer();
+  //    char dFlag = ' ';
+  //    int numFormat = 10;
+  //
+  //    // save first digit
+  //    char firstCh = ch;
+  //    inum.append(ch);
+  //
+  //    getChar();
+  //    // determine number conversions:
+  //    if (firstCh == '0') {
+  //      switch (ch) {
+  //        case 'b' :
+  //          numFormat = 2;
+  //          getChar();
+  //          break;
+  //        case 'B' :
+  //          numFormat = 2;
+  //          getChar();
+  //          break;
+  //        case 'o' :
+  //          numFormat = 8;
+  //          getChar();
+  //          break;
+  //        case 'O' :
+  //          numFormat = 8;
+  //          getChar();
+  //          break;
+  //        case 'x' :
+  //          numFormat = 16;
+  //          getChar();
+  //          break;
+  //        case 'X' :
+  //          numFormat = 16;
+  //          getChar();
+  //          break;
+  //      }
+  //    }
+  //
+  //    if (numFormat == 16) {
+  //      while ((ch >= '0' && ch <= '9')
+  //        || (ch >= 'a' && ch <= 'f')
+  //        || (ch >= 'A' && ch <= 'F')) {
+  //        inum.append(ch);
+  //        getChar();
+  //      }
+  //    } else {
+  //      while ((ch >= '0' && ch <= '9')
+  //        || (ch == '.')
+  //        || (ch == 'E')
+  //        || (ch == 'e')) {
+  //        if ((ch == '.') || (ch == 'E') || (ch == 'e')) {
+  //          if (ch == '.' && dFlag != ' ') {
+  //            break;
+  //          }
+  //          if ((dFlag == 'E') || (dFlag == 'e')) {
+  //            break;
+  //          }
+  //          dFlag = ch;
+  //          inum.append(ch);
+  //          getChar();
+  //          if ((ch == '-') || (ch == '+')) {
+  //            inum.append(ch);
+  //            getChar();
+  //          }
+  //        } else {
+  //          inum.append(ch);
+  //          getChar();
+  //        }
+  //      }
+  //    }
+  //    chIndx--;
+  //
+  //    try {
+  //      if (dFlag != ' ') {
+  //        doubleNumber = new Double(inum.toString());
+  //        token = TokenNameDoubleLiteral;
+  //        return;
+  //      } else {
+  //        longNumber = Long.valueOf(inum.toString(), numFormat);
+  //        token = TokenNameIntegerLiteral;
+  //        return;
+  //      }
+  //
+  //    } catch (Throwable e) {
+  //      throwSyntaxError("Number format error: " + inum.toString());
+  //    }
+  //  }
+  //
+  //  /**
+  //   * Get a String.
+  //   * @param openChar the opening char ('\'', '"', '`')
+  //   * @param typeString the type of string {@link #TokenNameSTRING_CONSTANT},{@link #TokenNameINTERPOLATED_STRING}
+  //   * @param errorMsg the error message in case of parse error in the string
+  //   */
+  //  private void getString(
+  //    final char openChar,
+  //    final int typeString,
+  //    final String errorMsg) {
+  //    StringBuffer sBuffer = new StringBuffer();
+  //    boolean openString = true;
+  //    int startRow = rowCount;
+  //    while (str.length() > chIndx) {
+  //      ch = str.charAt(chIndx++);
+  //      if (ch == '\\') {
+  //        sBuffer.append(ch);
+  //        if (str.length() > chIndx) {
+  //          ch = str.charAt(chIndx++);
+  //          sBuffer.append(ch);
+  //        }
+  //      } else if (ch == openChar) {
+  //        openString = false;
+  //        break;
+  //      } else if (ch == '\n') {
+  //        rowCount++;
+  //        columnCount = chIndx;
+  //      } else {
+  //        sBuffer.append(ch);
+  //      }
+  //    }
+  //    if (openString) {
+  //      if (typeString == TokenNameStringConstant) {
+  //        throwSyntaxError(errorMsg, startRow);
+  //      } else {
+  //        throwSyntaxError(errorMsg);
+  //      }
+  //    }
+  //    token = typeString;
+  //    stringValue = sBuffer.toString();
+  //  }
 
   //   public void htmlParserTester(String input) {
   //           int lineNumber = 1;
@@ -1271,9 +1237,9 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
       }
     }
     this.token = TokenNameEOF;
-//    this.chIndx = 0;
-//    this.rowCount = rowCount;
-//    this.columnCount = 0;
+    //    this.chIndx = 0;
+    //    this.rowCount = rowCount;
+    //    this.columnCount = 0;
     this.phpEnd = false;
     this.phpMode = true;
     scanner.setSource(s.toCharArray());
@@ -1284,7 +1250,13 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
         if (token != TokenNameEOF && token != TokenNameERROR) {
           statementList();
         }
-        if (token != TokenNameEOF && token != TokenNameERROR) {
+        if (token != TokenNameEOF) {
+          if (token == TokenNameERROR) {
+            throwSyntaxError(
+              "Scanner error (Found unknown token: "
+                + scanner.toStringAction(token)
+                + ")");
+          }
           if (token == TokenNameRPAREN) {
             throwSyntaxError("Too many closing ')'; end-of-file not reached.");
           }
@@ -1343,9 +1315,9 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
   public void parse(String s) throws CoreException {
     this.str = s;
     this.token = TokenNameEOF;
-//    this.chIndx = 0;
-//    this.rowCount = 1;
-//    this.columnCount = 0;
+    //    this.chIndx = 0;
+    //    this.rowCount = 1;
+    //    this.columnCount = 0;
     this.phpEnd = false;
     this.phpMode = false;
     /* scanner initialization */
@@ -1357,7 +1329,13 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
         if (token != TokenNameEOF && token != TokenNameERROR) {
           statementList();
         }
-        if (token != TokenNameEOF && token != TokenNameERROR) {
+        if (token != TokenNameEOF) {
+          if (token == TokenNameERROR) {
+            throwSyntaxError(
+              "Scanner error (Found unknown token: "
+                + scanner.toStringAction(token)
+                + ")");
+          }
           if (token == TokenNameRPAREN) {
             throwSyntaxError("Too many closing ')'; end-of-file not reached.");
           }
@@ -1422,9 +1400,9 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
 
     this.str = s;
     this.token = TokenNameEOF;
-//    this.chIndx = 0;
-//    this.rowCount = 1;
-//    this.columnCount = 0;
+    //    this.chIndx = 0;
+    //    this.rowCount = 1;
+    //    this.columnCount = 0;
     this.phpEnd = false;
     this.phpMode = false;
     scanner.setSource(s.toCharArray());
@@ -1446,7 +1424,7 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
     //   PHPClassDeclaration current = (PHPClassDeclaration) stack.peek();
     PHPSegmentWithChildren temp;
     int counter = 0;
-    
+
     IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
     try {
       while (token != TokenNameEOF && token != TokenNameERROR) {
@@ -1459,11 +1437,12 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
           if (token == TokenNameVariable
             && store.getBoolean(PHPeclipsePlugin.PHP_OUTLINE_VAR)) {
             ident = scanner.getCurrentIdentifierSource();
-            String variableName = new String(ident);
+            //substring(1) added because PHPVarDeclaration doesn't need the $ anymore
+            String variableName = new String(ident).substring(1);
             outlineInfo.addVariable(variableName);
             getNextToken();
             if (token != TokenNameSEMICOLON) {
-              
+
               getNextToken();
               ident = scanner.getCurrentTokenSource();
               if (token > TokenNameKEYWORD) {
@@ -1574,12 +1553,12 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
             || token == TokenNamerequire_once
             || token == TokenNameinclude
             || token == TokenNameinclude_once) {
-          ident =   scanner.getCurrentTokenSource(); 
-         
+          ident = scanner.getCurrentTokenSource();
+
           getNextToken();
           int startPosition = scanner.getCurrentTokenStartPosition();
           expression();
-          char[] expr =   scanner.getCurrentTokenSource(startPosition); 
+          char[] expr = scanner.getCurrentTokenSource(startPosition);
           outlineInfo.addVariable(new String(ident));
           current.add(new PHPReqIncDeclaration(current, new String(ident),
           //    chIndx - ident.length,
@@ -2001,6 +1980,10 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
         }
       }
     } else {
+      if (token > TokenNameKEYWORD) {
+        throwSyntaxError(
+          "Don't use keyword for class declaration [" + token + "].");
+      }
       throwSyntaxError("Class name expected after keyword 'class'.");
     }
   }
@@ -2092,6 +2075,12 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
       } else {
         getNextToken();
       }
+    } else {
+      if (token > TokenNameKEYWORD) {
+        throwSyntaxError(
+          "Don't use keyword for function declaration [" + token + "].");
+      }
+      throwSyntaxError("Function name expected after keyword 'function'.");
     }
   }
   //
@@ -2446,14 +2435,14 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
 
   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));
-//    }
-    
+    //    expression = new StringBuffer();
+    //    for (int i = chIndx; i < str.length(); i++) {
+    //      if (str.charAt(i) == ';') {
+    //        break;
+    //      }
+    //      expression.append(str.charAt(i));
+    //    }
+
     //    if (token == TokenNameSTRING_CONSTANT || token == TokenNameINTERPOLATED_STRING) {
     //      getNextToken();
     //    } else {
@@ -2820,26 +2809,26 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
     unaryExpression();
   }
 
-  private void typeName() throws CoreException {
-    //'string' 'unset' 'array' 'object'
-    //'bool' 'boolean'
-    //'real' 'double' 'float'
-    //'int' 'integer'
-    String identifier = "";
-    if (token == TokenNameIdentifier) {
-      char[] ident = scanner.getCurrentIdentifierSource();
-      identifier = new String(ident);
-      String str = identifier.toLowerCase();
-      getNextToken();
-      for (int i = 0; i < PHP_TYPES.length; i++) {
-        if (PHP_TYPES[i].equals(str)) {
-          return;
-        }
-      }
-    }
-    throwSyntaxError(
-      "Expected type cast '( <type-name> )'; Got '" + identifier + "'.");
-  }
+  //  private void typeName() throws CoreException {
+  //    //'string' 'unset' 'array' 'object'
+  //    //'bool' 'boolean'
+  //    //'real' 'double' 'float'
+  //    //'int' 'integer'
+  //    String identifier = "";
+  //    if (token == TokenNameIdentifier) {
+  //      char[] ident = scanner.getCurrentIdentifierSource();
+  //      identifier = new String(ident);
+  //      String str = identifier.toLowerCase();
+  //      getNextToken();
+  //      for (int i = 0; i < PHP_TYPES.length; i++) {
+  //        if (PHP_TYPES[i].equals(str)) {
+  //          return;
+  //        }
+  //      }
+  //    }
+  //    throwSyntaxError(
+  //      "Expected type cast '( <type-name> )'; Got '" + identifier + "'.");
+  //  }
 
   private void assignExpression() throws CoreException {
     castExpression();
@@ -3190,97 +3179,4 @@ public class Parser extends PHPKeywords implements ITerminalSymbols {
     }
   }
 
-  /**
-   * Call the php parse command ( php -l -f &lt;filename&gt; )
-   * and create markers according to the external parser output
-   */
-  public static void phpExternalParse(IFile file) {
-    //IFile file = (IFile) resource;
-    IPath path = file.getFullPath();
-    IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
-    String filename = file.getLocation().toString();
-
-    String[] arguments = { filename };
-    MessageFormat form =
-      new MessageFormat(store.getString(PHPeclipsePlugin.EXTERNAL_PARSER_PREF));
-    String command = form.format(arguments);
-
-    String parserResult =
-      PHPStartApacheAction.getParserOutput(command, "External parser: ");
-
-    try {
-      // parse the buffer to find the errors and warnings
-      createMarkers(parserResult, file);
-    } catch (CoreException e) {
-    }
-  }
-
-  /**
-   * Create markers according to the external parser output
-   */
-  private static void createMarkers(String output, IFile file)
-    throws CoreException {
-    // delete all markers
-    file.deleteMarkers(IMarker.PROBLEM, false, 0);
-
-    int indx = 0;
-    int brIndx = 0;
-    boolean flag = true;
-    while ((brIndx = output.indexOf("<br />", indx)) != -1) {
-      // newer php error output (tested with 4.2.3)
-      scanLine(output, file, indx, brIndx);
-      indx = brIndx + 6;
-      flag = false;
-    }
-    if (flag) {
-      while ((brIndx = output.indexOf("<br>", indx)) != -1) {
-        // older php error output (tested with 4.2.3)
-        scanLine(output, file, indx, brIndx);
-        indx = brIndx + 4;
-      }
-    }
-  }
-
-  private static void scanLine(String output, IFile file, int indx, int brIndx)
-    throws CoreException {
-    String current;
-    String outLineNumberString;
-    StringBuffer lineNumberBuffer = new StringBuffer(10);
-    char ch;
-    current = output.substring(indx, brIndx);
-
-    if (current.indexOf(PARSE_WARNING_STRING) != -1
-      || current.indexOf(PARSE_ERROR_STRING) != -1) {
-      int onLine = current.indexOf("on line <b>");
-      if (onLine != -1) {
-        lineNumberBuffer.delete(0, lineNumberBuffer.length());
-        for (int i = onLine; i < current.length(); i++) {
-          ch = current.charAt(i);
-          if ('0' <= ch && '9' >= ch) {
-            lineNumberBuffer.append(ch);
-          }
-        }
-
-        int lineNumber = Integer.parseInt(lineNumberBuffer.toString());
-
-        Hashtable attributes = new Hashtable();
-
-        current = current.replaceAll("\n", "");
-        current = current.replaceAll("<b>", "");
-        current = current.replaceAll("</b>", "");
-        MarkerUtilities.setMessage(attributes, current);
-
-        if (current.indexOf(PARSE_ERROR_STRING) != -1)
-          attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
-        else if (current.indexOf(PARSE_WARNING_STRING) != -1)
-          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(file, attributes, IMarker.PROBLEM);
-      }
-    }
-  }
 }
\ No newline at end of file