X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpparser/PHPParser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpparser/PHPParser.java index 5c79a17..010e977 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpparser/PHPParser.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpparser/PHPParser.java @@ -14,12 +14,12 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; -import java.util.Stack; 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; @@ -35,6 +35,7 @@ public class PHPParser extends PHPKeywords { public static final int ERROR = 2; public static final int WARNING = 1; public static final int INFO = 0; + private IFile fileToParse; private ArrayList phpList; @@ -61,6 +62,12 @@ public class PHPParser extends PHPKeywords { Long longNumber; Double doubleNumber; + + private String stringValue; + + /** Contains the current expression. */ + private StringBuffer expression; + private boolean phpMode; final static int TT_EOF = 0; @@ -191,6 +198,12 @@ public class PHPParser extends PHPKeywords { } } + /** + * This method will throw the SyntaxError. + * It will add the good lines and columns to the Error + * @param error the error message + * @throws SyntaxError the error raised + */ private void throwSyntaxError(String error) { if (str.length() < chIndx) { @@ -208,8 +221,13 @@ public class PHPParser extends PHPKeywords { throw new SyntaxError(rowCount, chIndx - columnCount + 1, str.substring(columnCount, eol), error); } + /** + * This method will throw the SyntaxError. + * It will add the good lines and columns to the Error + * @param error the error message + * @throws SyntaxError the error raised + */ private void throwSyntaxError(String error, int startRow) { - throw new SyntaxError(startRow, 0, " ", error); } @@ -752,27 +770,15 @@ public class PHPParser extends PHPKeywords { if (ch2 == '?') { ch2 = str.charAt(chIndx++); if (Character.isWhitespace(ch2)) { - // php start + // php start 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; @@ -881,73 +887,14 @@ public class PHPParser extends PHPKeywords { continue; } else if (ch == '"') { - // read string until end - boolean openString = true; - while (str.length() > chIndx) { - ch = str.charAt(chIndx++); - if (ch == '\\') { - if (str.length() > chIndx) { - ch = str.charAt(chIndx++); - } - } else if (ch == '"') { - openString = false; - break; - } else if (ch == '\n') { - rowCount++; - columnCount = chIndx; - } - } - if (openString) { - throwSyntaxError("Open string character '\"' at end of file."); - } - token = TT_INTERPOLATED_STRING; + getString('"',TT_INTERPOLATED_STRING,"Open string character '\"' at end of file."); return; } else if (ch == '\'') { - // read string until end - boolean openString = true; - int startRow = rowCount; - while (str.length() > chIndx) { - ch = str.charAt(chIndx++); - if (ch == '\\') { - if (str.length() > chIndx) { - ch = str.charAt(chIndx++); - } - } else if (ch == '\'') { - openString = false; - break; - } else if (ch == '\n') { - rowCount++; - columnCount = chIndx; - } - } - if (openString) { - throwSyntaxError("Open string character \"'\" at end of file.", startRow); - } - token = TT_STRING_CONSTANT; + getString('\'',TT_STRING_CONSTANT,"Open string character \"'\" at end of file."); return; } else if (ch == '`') { - // read string until end - boolean openString = true; - int startRow = rowCount; - while (str.length() > chIndx) { - ch = str.charAt(chIndx++); - if (ch == '\\') { - if (str.length() > chIndx) { - ch = str.charAt(chIndx++); - } - } else if (ch == '`') { - openString = false; - break; - } else if (ch == '\n') { - rowCount++; - columnCount = chIndx; - } - } - if (openString) { - throwSyntaxError("Open string character \"`\" at end of file.", startRow); - } + getString('`',TT_STRING_CONSTANT,"Open string character \"`\" at end of file."); setMarker("Other string delimiters prefered (found \"`\").", rowCount, PHPParser.INFO); - token = TT_STRING_CONSTANT; return; } @@ -1329,10 +1276,13 @@ public class PHPParser extends PHPKeywords { // } } + /** + * Get an identifier. + */ private void getIdentifier() { - StringBuffer ident = new StringBuffer(); - - ident.append(ch); + // StringBuffer ident = new StringBuffer(); + int startPosition = chIndx - 1; +// ident.append(ch); if (ch == '$') { getChar(); // attention recursive call: @@ -1344,21 +1294,33 @@ public class PHPParser extends PHPKeywords { } getChar(); + + //this will read the buffer until the next character is a forbidden character for identifier while ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || (ch == '_')) { - ident.append(ch); + // ident.append(ch); getChar(); } - identifier = ident.toString(); - chIndx--; + int endPosition = chIndx--; + int length = (--endPosition) - startPosition; + identifier = str.substring(startPosition, endPosition); + // System.out.println(identifier); + // determine if this identitfer is a keyword - // @todo improve this in future version + // @todo improve this in future version Integer i = (Integer) keywordMap.get(identifier.toLowerCase()); if (i != null) { token = i.intValue(); } } + /** + * Get a number. + * if it's a double the number will be stored in doubleNumber and the token will have the + * value {@link PHPParser#TT_DOUBLE_NUMBER}
+ * if it's a double the number will be stored in longNumber and the token will have the + * value {@link PHPParser#TT_INT_NUMBER} + */ private void getNumber() { StringBuffer inum = new StringBuffer(); char dFlag = ' '; @@ -1444,6 +1406,45 @@ public class PHPParser extends PHPKeywords { } } + /** + * Get a String. + * @param openChar the opening char ('\'', '"', '`') + * @param typeString the type of string {@link #TT_STRING_CONSTANT},{@link #TT_INTERPOLATED_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 == TT_STRING_CONSTANT) { + throwSyntaxError(errorMsg, startRow); + } else { + throwSyntaxError(errorMsg); + } + } + token = typeString; + stringValue = sBuffer.toString(); + } + public void htmlParserTester(String input) { int lineNumber = 1; int startLineNumber = 1; @@ -1468,7 +1469,7 @@ public class PHPParser extends PHPKeywords { if (ch2 == '?') { ch2 = input.charAt(i++); if (Character.isWhitespace(ch2)) { - // php start + // php start phpMode = true; phpFound = true; startIndex = i; @@ -1617,7 +1618,7 @@ public class PHPParser extends PHPKeywords { // String temp = ((PHPString)phpList.get(j)).getPHPString(); // int startIndx = temp.length()-10; // if (startIndx<0) { - // startIndx = 0; + // startIndx = 0; // } // System.out.println(temp.substring(startIndx)+"?>"); // } @@ -1626,7 +1627,7 @@ public class PHPParser extends PHPKeywords { // for(int j=0;j