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;
}
}
} 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();
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) {
// <?PHP <?php
if (ignorePHPOneLiner) {
if (lookAheadLinePHPTag() == TokenNameINLINE_HTML) {
// as
if ((data[++index] == 's')) {
return TokenNameas;
- } else {
- return TokenNameIdentifier;
}
+ return TokenNameIdentifier;
case 3:
// and
if ((data[++index] == 'n') && (data[++index] == 'd')) {
return TokenNameand;
- } else {
- return TokenNameIdentifier;
}
+ return TokenNameIdentifier;
case 5:
// array
if ((data[++index] == 'r') && (data[++index] == 'r') && (data[++index] == 'a') && (data[++index] == 'y'))
return TokenNamearray;
- else
- return TokenNameIdentifier;
+ return TokenNameIdentifier;
case 8:
if ((data[++index] == 'b') && (data[++index] == 's') && (data[++index] == 't') && (data[++index] == 'r')
&& (data[++index] == 'a') && (data[++index] == 'c') && (data[++index] == 't'))
return TokenNameabstract;
- else
- return TokenNameIdentifier;
- default:
return TokenNameIdentifier;
}
+ return TokenNameIdentifier;
case 'b':
// break
switch (length) {
case 5:
if ((data[++index] == 'r') && (data[++index] == 'e') && (data[++index] == 'a') && (data[++index] == 'k'))
return TokenNamebreak;
- else
- return TokenNameIdentifier;
- default:
return TokenNameIdentifier;
}
+ return TokenNameIdentifier;
case 'c':
// case catch class clone const continue
switch (length) {
case 4:
if ((data[++index] == 'a') && (data[++index] == 's') && (data[++index] == 'e'))
return TokenNamecase;
- else
- return TokenNameIdentifier;
+ return TokenNameIdentifier;
case 5:
if ((data[++index] == 'a') && (data[++index] == 't') && (data[++index] == 'c') && (data[++index] == 'h'))
return TokenNamecatch;
index = 0;
if ((data[++index] == 'o') && (data[++index] == 'n') && (data[++index] == 's') && (data[++index] == 't'))
return TokenNameconst;
- else
- return TokenNameIdentifier;
+ return TokenNameIdentifier;
case 8:
if ((data[++index] == 'o') && (data[++index] == 'n') && (data[++index] == 't') && (data[++index] == 'i')
&& (data[++index] == 'n') && (data[++index] == 'u') && (data[++index] == 'e'))
return TokenNamecontinue;
- else
- return TokenNameIdentifier;
- default:
return TokenNameIdentifier;
}
+ return TokenNameIdentifier;
case 'd':
// declare default do die
// TODO delete define ==> no keyword !
case 2:
if ((data[++index] == 'o'))
return TokenNamedo;
- else
- return TokenNameIdentifier;
+ return TokenNameIdentifier;
// case 6 :
// if ((data[++index] == 'e')
// && (data[++index] == 'f')
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) {
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')
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')
&& (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) {
case 2:
if (data[++index] == 'f')
return TokenNameif;
- else
- return TokenNameIdentifier;
+ return TokenNameIdentifier;
// case 3 :
// if ((data[++index] == 'n') && (data[++index] == 't'))
// return TokenNameint;
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')
&& (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) {
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) {
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':
&& (data[++index] == 'n') && (data[++index] == 'c') && (data[++index] == 'e')) {
return TokenNamerequire_once;
}
- } else
- return TokenNameIdentifier;
+ }
+ return TokenNameIdentifier;
case 's':
// self static switch
switch (length) {
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'))
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) {
return TokenNamexor;
else
return TokenNameIdentifier;
- default:
- return TokenNameIdentifier;
}
- default:
return TokenNameIdentifier;
}
+ return TokenNameIdentifier;
}
public int scanNumber(boolean dotPrefix) throws InvalidInputException {