X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java index ce16744..a1e5351 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java @@ -27,8 +27,7 @@ public class Scanner implements IScanner, ITerminalSymbols { * stream - currentPosition-1 gives the sourceEnd position into the stream */ // 1.4 feature -// private boolean assertMode; - + // private boolean assertMode; public boolean useAssertAsAnIndentifier = false; // flag indicating if processed source contains occurrences of keyword assert @@ -40,9 +39,13 @@ public class Scanner implements IScanner, ITerminalSymbols { public boolean phpMode = false; - public boolean phpExpressionTag = false; - - // public Stack encapsedStringStack = null; + /** + * This token is set to TokenNameecho if a short tag block begins (i.e. >?= ... ) + * Directly after the "=" character the getNextToken() method returns TokenNameINLINE_HTML + * In the next call to the getNextToken() method the value of fFillerToken (==TokenNameecho) is returned + * + */ + int fFillerToken = TokenNameEOF; public char currentCharacter; @@ -199,6 +202,7 @@ public class Scanner implements IScanner, ITerminalSymbols { ObviousIdentCharNatures['"'] = C_SEPARATOR; ObviousIdentCharNatures['\''] = C_SEPARATOR; } + static final char[] initCharArray = new char[] { '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000' }; static final int TableSize = 30, InternalTableSize = 6; @@ -285,10 +289,11 @@ public class Scanner implements IScanner, ITerminalSymbols { */ public static boolean isPHPIdentOrVarStart(char ch) { if (ch < MAX_OBVIOUS) { - return ObviousIdentCharNatures[ch]==C_LETTER || ObviousIdentCharNatures[ch]==C_DOLLAR; + return ObviousIdentCharNatures[ch] == C_LETTER || ObviousIdentCharNatures[ch] == C_DOLLAR; } return false; - //return Character.isLetter(ch) || (ch == '$') || (ch == '_') || (0x7F <= ch && ch <= 0xFF); + // return Character.isLetter(ch) || (ch == '$') || (ch == '_') || (0x7F <= + // ch && ch <= 0xFF); } /** @@ -299,10 +304,11 @@ public class Scanner implements IScanner, ITerminalSymbols { */ public static boolean isPHPIdentifierStart(char ch) { if (ch < MAX_OBVIOUS) { - return ObviousIdentCharNatures[ch]==C_LETTER; + return ObviousIdentCharNatures[ch] == C_LETTER; } return false; -// return Character.isLetter(ch) || (ch == '_') || (0x7F <= ch && ch <= 0xFF); + // return Character.isLetter(ch) || (ch == '_') || (0x7F <= ch && ch <= + // 0xFF); } /** @@ -311,15 +317,16 @@ public class Scanner implements IScanner, ITerminalSymbols { */ public static boolean isPHPIdentifierPart(char ch) { if (ch < MAX_OBVIOUS) { - return ObviousIdentCharNatures[ch]==C_LETTER || ObviousIdentCharNatures[ch]==C_DIGIT; + return ObviousIdentCharNatures[ch] == C_LETTER || ObviousIdentCharNatures[ch] == C_DIGIT; } return false; -// return Character.isLetterOrDigit(ch) || (ch == '_') || (0x7F <= ch && ch <= 0xFF); + // return Character.isLetterOrDigit(ch) || (ch == '_') || (0x7F <= ch && ch + // <= 0xFF); } public static boolean isSQLIdentifierPart(char ch) { if (ch < MAX_OBVIOUS) { - return ObviousIdentCharNatures[ch]==C_LETTER || ObviousIdentCharNatures[ch]==C_DIGIT; + return ObviousIdentCharNatures[ch] == C_LETTER || ObviousIdentCharNatures[ch] == C_DIGIT; } return false; } @@ -424,7 +431,7 @@ public class Scanner implements IScanner, ITerminalSymbols { return false; } for (int i = 0; i < word.length; i++) { - if (word[i]!=source[startPosition+i]){ + if (word[i] != source[startPosition + i]) { return false; } } @@ -901,8 +908,9 @@ public class Scanner implements IScanner, ITerminalSymbols { do { currentCharacter = source[currentPosition++]; } while (currentCharacter == ' ' || currentCharacter == '\t'); - while (ObviousIdentCharNatures[currentCharacter]==C_LETTER) { - // while((currentCharacter >= 'a' && currentCharacter <= 'z') || (currentCharacter >= 'A' && currentCharacter <= 'Z')) { + while (ObviousIdentCharNatures[currentCharacter] == C_LETTER) { + // while((currentCharacter >= 'a' && currentCharacter <= 'z') || + // (currentCharacter >= 'A' && currentCharacter <= 'Z')) { buf.append(currentCharacter); currentCharacter = source[currentPosition++]; } @@ -1284,11 +1292,15 @@ public class Scanner implements IScanner, ITerminalSymbols { } public int getNextToken() throws InvalidInputException { - phpExpressionTag = false; if (!phpMode) { return getInlinedHTMLToken(currentPosition); - } - if (phpMode) { + } else { + if (fFillerToken != TokenNameEOF) { + int tempToken; + tempToken = fFillerToken; + fFillerToken = TokenNameEOF; + return tempToken; + } this.wasAcr = false; if (diet) { jumpOverMethodBody(); @@ -1947,6 +1959,7 @@ public class Scanner implements IScanner, ITerminalSymbols { * @throws InvalidInputException */ private int getInlinedHTMLToken(int start) throws InvalidInputException { + boolean phpShortTag = false; // true, if source.length) { currentPosition = source.length; return TokenNameEOF; @@ -1961,23 +1974,27 @@ public class Scanner implements IScanner, ITerminalSymbols { if ((currentCharacter != 'P') && (currentCharacter != 'p')) { if (currentCharacter != '=') { // = 0) { test = getNextChar('P', 'p'); @@ -2018,10 +2035,11 @@ public class Scanner implements IScanner, ITerminalSymbols { } /** + * check if the PHP is only in this line (for CodeFormatter) + * * @return */ private int lookAheadLinePHPTag() { - // check if the PHP is only in this line (for CodeFormatter) int currentPositionInLine = currentPosition; char previousCharInLine = ' '; char currentCharInLine = ' '; @@ -2441,7 +2459,7 @@ public class Scanner implements IScanner, ITerminalSymbols { break; } default: - if (isPHPIdentOrVarStart(currentCharacter) ) { + if (isPHPIdentOrVarStart(currentCharacter)) { try { scanIdentifierOrKeyword((currentCharacter == '$')); } catch (InvalidInputException ex) { @@ -2449,8 +2467,8 @@ public class Scanner implements IScanner, ITerminalSymbols { ; break; } - if ( ObviousIdentCharNatures[currentCharacter]==C_DIGIT) { -// if (Character.isDigit(currentCharacter)) { + if (ObviousIdentCharNatures[currentCharacter] == C_DIGIT) { + // if (Character.isDigit(currentCharacter)) { try { scanNumber(false); } catch (InvalidInputException ex) { @@ -3528,8 +3546,14 @@ public class Scanner implements IScanner, ITerminalSymbols { } else return TokenNameIdentifier; case 's': - // static switch + // self static switch switch (length) { + // case 4: + // if ((data[++index] == 'e') && (data[++index] == 'l') && (data[++index] + // == 'f')) { + // return TokenNameself; + // } + // return TokenNameIdentifier; case 6: if (data[++index] == 't') if ((data[++index] == 'a') && (data[++index] == 't') && (data[++index] == 'i') && (data[++index] == 'c')) { @@ -3823,6 +3847,7 @@ public class Scanner implements IScanner, ITerminalSymbols { initialPosition = currentPosition = 0; containsAssertKeyword = false; withoutUnicodeBuffer = new char[this.source.length]; + fFillerToken = TokenNameEOF; // encapsedStringStack = new Stack(); } @@ -3957,6 +3982,8 @@ public class Scanner implements IScanner, ITerminalSymbols { return "require_once"; //$NON-NLS-1$ case TokenNamereturn: return "return"; //$NON-NLS-1$ + // case TokenNameself: + // return "self"; //$NON-NLS-1$ case TokenNamestatic: return "static"; //$NON-NLS-1$ case TokenNameswitch: @@ -3985,10 +4012,10 @@ public class Scanner implements IScanner, ITerminalSymbols { return "StringInterpolated(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$ case TokenNameEncapsedString0: return "`"; //$NON-NLS-1$ - // case TokenNameEncapsedString1: - // return "\'"; //$NON-NLS-1$ - // case TokenNameEncapsedString2: - // return "\""; //$NON-NLS-1$ + // case TokenNameEncapsedString1: + // return "\'"; //$NON-NLS-1$ + // case TokenNameEncapsedString2: + // return "\""; //$NON-NLS-1$ case TokenNameSTRING: return "STRING_DQ(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$ case TokenNameHEREDOC: @@ -4163,7 +4190,7 @@ public class Scanner implements IScanner, ITerminalSymbols { this.tokenizeWhiteSpace = tokenizeWhiteSpace; this.tokenizeStrings = tokenizeStrings; this.checkNonExternalizedStringLiterals = checkNonExternalizedStringLiterals; -// this.assertMode = assertMode; + // this.assertMode = assertMode; // this.encapsedStringStack = null; this.taskTags = taskTags; this.taskPriorities = taskPriorities; @@ -4337,8 +4364,8 @@ public class Scanner implements IScanner, ITerminalSymbols { continue nextTag; if ((sc = src[i + t]) != (tc = tag[t])) { // case sensitive check if (this.isTaskCaseSensitive || (Character.toLowerCase(sc) != Character.toLowerCase(tc))) { // case - // insensitive - // check + // insensitive + // check continue nextTag; } }