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 803f878..b2ae4c6 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 @@ -1216,11 +1216,11 @@ public class Scanner implements IScanner, ITerminalSymbols { public void consumeStringLiteral() throws InvalidInputException { try { - boolean openDollarBrace = false; + int openDollarBrace = 0; // consume next character unicodeAsBackSlash = false; currentCharacter = source[currentPosition++]; - while (currentCharacter != '"' || openDollarBrace) { + while (currentCharacter != '"' || openDollarBrace>0) { /** ** in PHP \r and \n are valid in string literals *** */ if (currentCharacter == '\\') { int escapeSize = currentPosition; @@ -1242,11 +1242,11 @@ public class Scanner implements IScanner, ITerminalSymbols { } } } else if (currentCharacter == '$' && source[currentPosition] == '{') { - openDollarBrace = true; + openDollarBrace++; } else if (currentCharacter == '{' && source[currentPosition] == '$') { - openDollarBrace = true; + openDollarBrace++; } else if (currentCharacter == '}') { - openDollarBrace = false; + openDollarBrace--; } else if ((currentCharacter == '\r') || (currentCharacter == '\n')) { if (recordLineSeparator) { pushLineSeparator(); @@ -1846,17 +1846,25 @@ public class Scanner implements IScanner, ITerminalSymbols { return TokenNameINLINE_HTML; } } else { - phpMode = true; + boolean foundXML=false; + if (getNextChar('X','x')>=0) { + if (getNextChar('M','m')>=0) { + if (getNextChar('L','l')>=0) { + foundXML=true; + } + } + } + if (!foundXML) { + phpMode = true; + } if (phpShortTag) { fFillerToken = TokenNameECHO_INVISIBLE; } return TokenNameINLINE_HTML; } } else { - int test = getNextChar('H', 'h'); - if (test >= 0) { - test = getNextChar('P', 'p'); - if (test >= 0) { + if (getNextChar('H', 'h') >= 0) { + if (getNextChar('P', 'p') >= 0) { // no keyword ! @@ -3120,8 +3117,7 @@ public class Scanner implements IScanner, ITerminalSymbols { case 2: if ((data[++index] == 'o')) return TokenNamedo; - else - return TokenNameIdentifier; + return TokenNameIdentifier; // case 6 : // if ((data[++index] == 'e') // && (data[++index] == 'f') @@ -3139,11 +3135,9 @@ public class Scanner implements IScanner, ITerminalSymbols { if ((data[++index] == 'e') && (data[++index] == 'f') && (data[++index] == 'a') && (data[++index] == 'u') && (data[++index] == 'l') && (data[++index] == 't')) return TokenNamedefault; - else - return TokenNameIdentifier; - default: return TokenNameIdentifier; } + return TokenNameIdentifier; case 'e': // echo else exit elseif extends eval switch (length) { @@ -3156,16 +3150,14 @@ public class Scanner implements IScanner, ITerminalSymbols { return TokenNameexit; else if ((data[index] == 'v') && (data[++index] == 'a') && (data[++index] == 'l')) return TokenNameeval; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 5: // endif empty if ((data[++index] == 'n') && (data[++index] == 'd') && (data[++index] == 'i') && (data[++index] == 'f')) return TokenNameendif; if ((data[index] == 'm') && (data[++index] == 'p') && (data[++index] == 't') && (data[++index] == 'y')) return TokenNameempty; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 6: // endfor if ((data[++index] == 'n') && (data[++index] == 'd') && (data[++index] == 'f') && (data[++index] == 'o') @@ -3174,28 +3166,24 @@ public class Scanner implements IScanner, ITerminalSymbols { else if ((data[index] == 'l') && (data[++index] == 's') && (data[++index] == 'e') && (data[++index] == 'i') && (data[++index] == 'f')) return TokenNameelseif; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 7: if ((data[++index] == 'x') && (data[++index] == 't') && (data[++index] == 'e') && (data[++index] == 'n') && (data[++index] == 'd') && (data[++index] == 's')) return TokenNameextends; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 8: // endwhile if ((data[++index] == 'n') && (data[++index] == 'd') && (data[++index] == 'w') && (data[++index] == 'h') && (data[++index] == 'i') && (data[++index] == 'l') && (data[++index] == 'e')) return TokenNameendwhile; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 9: // endswitch if ((data[++index] == 'n') && (data[++index] == 'd') && (data[++index] == 's') && (data[++index] == 'w') && (data[++index] == 'i') && (data[++index] == 't') && (data[++index] == 'c') && (data[++index] == 'h')) return TokenNameendswitch; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 10: // enddeclare if ((data[++index] == 'n') && (data[++index] == 'd') && (data[++index] == 'd') && (data[++index] == 'e') @@ -3207,44 +3195,37 @@ public class Scanner implements IScanner, ITerminalSymbols { && (data[++index] == 'd') && (data[++index] == 'f') && (data[++index] == 'o') && (data[++index] == 'r') && (data[++index] == 'e') && (data[++index] == 'a') && (data[++index] == 'c') && (data[++index] == 'h')) return TokenNameendforeach; - else - return TokenNameIdentifier; - default: return TokenNameIdentifier; } + return TokenNameIdentifier; case 'f': // for false final function switch (length) { case 3: if ((data[++index] == 'o') && (data[++index] == 'r')) return TokenNamefor; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 5: // if ((data[++index] == 'a') && (data[++index] == 'l') // && (data[++index] == 's') && (data[++index] == 'e')) // return TokenNamefalse; if ((data[++index] == 'i') && (data[++index] == 'n') && (data[++index] == 'a') && (data[++index] == 'l')) return TokenNamefinal; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 7: // foreach if ((data[++index] == 'o') && (data[++index] == 'r') && (data[++index] == 'e') && (data[++index] == 'a') && (data[++index] == 'c') && (data[++index] == 'h')) return TokenNameforeach; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 8: // function if ((data[++index] == 'u') && (data[++index] == 'n') && (data[++index] == 'c') && (data[++index] == 't') && (data[++index] == 'i') && (data[++index] == 'o') && (data[++index] == 'n')) return TokenNamefunction; - else - return TokenNameIdentifier; - default: return TokenNameIdentifier; } + return TokenNameIdentifier; case 'g': // global if (length == 6) { @@ -3260,8 +3241,7 @@ public class Scanner implements IScanner, ITerminalSymbols { case 2: if (data[++index] == 'f') return TokenNameif; - else - return TokenNameIdentifier; + return TokenNameIdentifier; // case 3 : // if ((data[++index] == 'n') && (data[++index] == 't')) // return TokenNameint; @@ -3270,21 +3250,18 @@ public class Scanner implements IScanner, ITerminalSymbols { case 5: if ((data[++index] == 's') && (data[++index] == 's') && (data[++index] == 'e') && (data[++index] == 't')) return TokenNameisset; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 7: if ((data[++index] == 'n') && (data[++index] == 'c') && (data[++index] == 'l') && (data[++index] == 'u') && (data[++index] == 'd') && (data[++index] == 'e')) return TokenNameinclude; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 9: // interface if ((data[++index] == 'n') && (data[++index] == 't') && (data[++index] == 'e') && (data[++index] == 'r') && (data[++index] == 'f') && (data[++index] == 'a') && (data[++index] == 'c') && (data[++index] == 'e')) return TokenNameinterface; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 10: // instanceof if ((data[++index] == 'n') && (data[++index] == 's') && (data[++index] == 't') && (data[++index] == 'a') @@ -3295,18 +3272,15 @@ public class Scanner implements IScanner, ITerminalSymbols { && (data[++index] == 'm') && (data[++index] == 'e') && (data[++index] == 'n') && (data[++index] == 't') && (data[++index] == 's')) return TokenNameimplements; - else - return TokenNameIdentifier; + return TokenNameIdentifier; case 12: if ((data[++index] == 'n') && (data[++index] == 'c') && (data[++index] == 'l') && (data[++index] == 'u') && (data[++index] == 'd') && (data[++index] == 'e') && (data[++index] == '_') && (data[++index] == 'o') && (data[++index] == 'n') && (data[++index] == 'c') && (data[++index] == 'e')) return TokenNameinclude_once; - else - return TokenNameIdentifier; - default: return TokenNameIdentifier; } + return TokenNameIdentifier; case 'l': // list if (length == 4) { @@ -3321,17 +3295,15 @@ public class Scanner implements IScanner, ITerminalSymbols { case 3: if ((data[++index] == 'e') && (data[++index] == 'w')) return TokenNamenew; - else - return TokenNameIdentifier; + return TokenNameIdentifier; // case 4 : // if ((data[++index] == 'u') && (data[++index] == 'l') // && (data[++index] == 'l')) // return TokenNamenull; // else // return TokenNameIdentifier; - default: - return TokenNameIdentifier; } + return TokenNameIdentifier; case 'o': // or old_function if (length == 2) { @@ -3361,26 +3333,26 @@ public class Scanner implements IScanner, ITerminalSymbols { case 5: if ((data[++index] == 'r') && (data[++index] == 'i') && (data[++index] == 'n') && (data[++index] == 't')) { return TokenNameprint; - } else - return TokenNameIdentifier; + } + return TokenNameIdentifier; case 6: if ((data[++index] == 'u') && (data[++index] == 'b') && (data[++index] == 'l') && (data[++index] == 'i') && (data[++index] == 'c')) { return TokenNamepublic; - } else - return TokenNameIdentifier; + } + return TokenNameIdentifier; case 7: if ((data[++index] == 'r') && (data[++index] == 'i') && (data[++index] == 'v') && (data[++index] == 'a') && (data[++index] == 't') && (data[++index] == 'e')) { return TokenNameprivate; - } else - return TokenNameIdentifier; + } + return TokenNameIdentifier; case 9: if ((data[++index] == 'r') && (data[++index] == 'o') && (data[++index] == 't') && (data[++index] == 'e') && (data[++index] == 'c') && (data[++index] == 't') && (data[++index] == 'e') && (data[++index] == 'd')) { return TokenNameprotected; - } else - return TokenNameIdentifier; + } + return TokenNameIdentifier; } return TokenNameIdentifier; case 'r': @@ -3401,8 +3373,8 @@ public class Scanner implements IScanner, ITerminalSymbols { && (data[++index] == 'n') && (data[++index] == 'c') && (data[++index] == 'e')) { return TokenNamerequire_once; } - } else - return TokenNameIdentifier; + } + return TokenNameIdentifier; case 's': // self static switch switch (length) { @@ -3421,19 +3393,14 @@ public class Scanner implements IScanner, ITerminalSymbols { else if ((data[index] == 'w') && (data[++index] == 'i') && (data[++index] == 't') && (data[++index] == 'c') && (data[++index] == 'h')) return TokenNameswitch; - else - return TokenNameIdentifier; - default: - return TokenNameIdentifier; } + return TokenNameIdentifier; case 't': // try true throw switch (length) { case 3: if ((data[++index] == 'r') && (data[++index] == 'y')) return TokenNametry; - else - return TokenNameIdentifier; // case 4 : // if ((data[++index] == 'r') && (data[++index] == 'u') // && (data[++index] == 'e')) @@ -3443,55 +3410,41 @@ public class Scanner implements IScanner, ITerminalSymbols { case 5: if ((data[++index] == 'h') && (data[++index] == 'r') && (data[++index] == 'o') && (data[++index] == 'w')) return TokenNamethrow; - else - return TokenNameIdentifier; - default: - return TokenNameIdentifier; } + return TokenNameIdentifier; case 'u': // use unset switch (length) { case 3: if ((data[++index] == 's') && (data[++index] == 'e')) return TokenNameuse; - else - return TokenNameIdentifier; case 5: if ((data[++index] == 'n') && (data[++index] == 's') && (data[++index] == 'e') && (data[++index] == 't')) return TokenNameunset; - else - return TokenNameIdentifier; - default: - return TokenNameIdentifier; } + return TokenNameIdentifier; case 'v': // var switch (length) { case 3: if ((data[++index] == 'a') && (data[++index] == 'r')) return TokenNamevar; - else - return TokenNameIdentifier; - default: - return TokenNameIdentifier; } + return TokenNameIdentifier; case 'w': // while switch (length) { case 5: if ((data[++index] == 'h') && (data[++index] == 'i') && (data[++index] == 'l') && (data[++index] == 'e')) return TokenNamewhile; - else - return TokenNameIdentifier; // case 6:if ( (data[++index] =='i') && (data[++index]=='d') && // (data[++index]=='e') && (data[++index]=='f')&& // (data[++index]=='p')) // return TokenNamewidefp ; // else // return TokenNameIdentifier; - default: - return TokenNameIdentifier; } + return TokenNameIdentifier; case 'x': // xor switch (length) { @@ -3500,12 +3453,10 @@ public class Scanner implements IScanner, ITerminalSymbols { return TokenNamexor; else return TokenNameIdentifier; - default: - return TokenNameIdentifier; } - default: return TokenNameIdentifier; } + return TokenNameIdentifier; } public int scanNumber(boolean dotPrefix) throws InvalidInputException {