}
if (token == TokenNameif || token == TokenNameswitch || token == TokenNamefor || token == TokenNamewhile
|| token == TokenNamedo || token == TokenNameforeach || token == TokenNamecontinue || token == TokenNamebreak
- || token == TokenNamereturn || token == TokenNameexit || token == TokenNameecho || token == TokenNameglobal
- || token == TokenNamestatic || token == TokenNameunset || token == TokenNamefunction || token == TokenNamedeclare
- || token == TokenNametry || token == TokenNamecatch || token == TokenNamethrow || token == TokenNamefinal
- || token == TokenNameabstract || token == TokenNameclass || token == TokenNameinterface) {
+ || token == TokenNamereturn || token == TokenNameexit || token == TokenNameecho || token == TokenNameECHO_INVISIBLE
+ || token == TokenNameglobal || token == TokenNamestatic || token == TokenNameunset || token == TokenNamefunction
+ || token == TokenNamedeclare || token == TokenNametry || token == TokenNamecatch || token == TokenNamethrow
+ || token == TokenNamefinal || token == TokenNameabstract || token == TokenNameclass || token == TokenNameinterface) {
break;
}
// System.out.println(scanner.toStringAction(token));
getNextToken();
}
return statement;
+ } else if (token == TokenNameECHO_INVISIBLE) {
+ // 0-length token directly after PHP short tag <?=
+ getNextToken();
+ expressionList();
+ if (token == TokenNameSEMICOLON) {
+ getNextToken();
+ if (token != TokenNameINLINE_HTML) {
+ // TODO should this become a configurable warning?
+ reportSyntaxError("Probably '?>' expected after PHP short tag expression (only the first expression will be echoed).");
+ }
+ } else {
+ if (token != TokenNameINLINE_HTML) {
+ throwSyntaxError("';' expected after PHP short tag '<?=' expression.");
+ }
+ getNextToken();
+ }
+ return statement;
} else if (token == TokenNameINLINE_HTML) {
getNextToken();
return statement;
if (token == TokenNameCOLON || token == TokenNameSEMICOLON) {
getNextToken();
if (token == TokenNameRBRACE) {
- // empty case; assumes that the '}' token belongs to the wrapping switch statement - #1371992
+ // empty case; assumes that the '}' token belongs to the wrapping
+ // switch statement - #1371992
break;
}
if (token == TokenNamecase || token == TokenNamedefault) {
if (token == TokenNameCOLON || token == TokenNameSEMICOLON) {
getNextToken();
if (token == TokenNameRBRACE) {
- // empty default case; ; assumes that the '}' token belongs to the wrapping switch statement - #1371992
+ // empty default case; ; assumes that the '}' token belongs to the
+ // wrapping switch statement - #1371992
break;
}
if (token != TokenNamecase) {
}
getNextToken();
} else if (token == TokenNameLBRACKET) {
- // To remove "ref = null;" here, is probably better than the patch commented in #1368081 - axelcl
+ // To remove "ref = null;" here, is probably better than the patch
+ // commented in #1368081 - axelcl
getNextToken();
if (token != TokenNameRBRACKET) {
expr();
} else {
if (fFillerToken != TokenNameEOF) {
int tempToken;
+ startPosition = currentPosition;
tempToken = fFillerToken;
fFillerToken = TokenNameEOF;
return tempToken;
try {
while (true) {
withoutUnicodePtr = 0;
- // start with a new token
- char encapsedChar = ' ';
- // if (!encapsedStringStack.isEmpty()) {
- // encapsedChar = ((Character)
- // encapsedStringStack.peek()).charValue();
- // }
- // if (encapsedChar != '$' && encapsedChar != ' ') {
- // currentCharacter = source[currentPosition++];
- // if (currentCharacter == encapsedChar) {
- // switch (currentCharacter) {
- // case '`':
- // return TokenNameEncapsedString0;
- // case '\'':
- // return TokenNameEncapsedString1;
- // case '"':
- // return TokenNameEncapsedString2;
- // }
- // }
- // while (currentCharacter != encapsedChar) {
- // /** ** in PHP \r and \n are valid in string literals *** */
- // switch (currentCharacter) {
- // case '\\':
- // int escapeSize = currentPosition;
- // boolean backSlashAsUnicodeInString = unicodeAsBackSlash;
- // //scanEscapeCharacter make a side effect on this value and
- // // we need the previous value few lines down this one
- // scanDoubleQuotedEscapeCharacter();
- // escapeSize = currentPosition - escapeSize;
- // if (withoutUnicodePtr == 0) {
- // //buffer all the entries that have been left aside....
- // withoutUnicodePtr = currentPosition - escapeSize - 1 -
- // startPosition;
- // System.arraycopy(source, startPosition, withoutUnicodeBuffer, 1,
- // withoutUnicodePtr);
- // withoutUnicodeBuffer[++withoutUnicodePtr] = currentCharacter;
- // } else { //overwrite the / in the buffer
- // withoutUnicodeBuffer[withoutUnicodePtr] = currentCharacter;
- // if (backSlashAsUnicodeInString) { //there are TWO \ in
- // withoutUnicodePtr--;
- // }
- // }
- // break;
- // case '\r':
- // case '\n':
- // if (recordLineSeparator) {
- // pushLineSeparator();
- // }
- // break;
- // case '$':
- // if (isPHPIdentifierStart(source[currentPosition]) ||
- // source[currentPosition] == '{') {
- // currentPosition--;
- // encapsedStringStack.push(new Character('$'));
- // return TokenNameSTRING;
- // }
- // break;
- // case '{':
- // if (source[currentPosition] == '$') { // CURLY_OPEN
- // currentPosition--;
- // encapsedStringStack.push(new Character('$'));
- // return TokenNameSTRING;
- // }
- // }
- // // consume next character
- // unicodeAsBackSlash = false;
- // currentCharacter = source[currentPosition++];
- // if (withoutUnicodePtr != 0) {
- // withoutUnicodeBuffer[++withoutUnicodePtr] = currentCharacter;
- // }
- // // }
- // } // end while
- // currentPosition--;
- // return TokenNameSTRING;
- // }
// ---------Consume white space and handles startPosition---------
int whiteStart = currentPosition;
startPosition = currentPosition;
currentCharacter = source[currentPosition++];
- // if (encapsedChar == '$') {
- // switch (currentCharacter) {
- // case '\\':
- // currentCharacter = source[currentPosition++];
- // return TokenNameSTRING;
- // case '{':
- // if (encapsedChar == '$') {
- // if (getNextChar('$'))
- // return TokenNameLBRACE_DOLLAR;
- // }
- // return TokenNameLBRACE;
- // case '}':
- // return TokenNameRBRACE;
- // case '[':
- // return TokenNameLBRACKET;
- // case ']':
- // return TokenNameRBRACKET;
- // case '\'':
- // if (tokenizeStrings) {
- // consumeStringConstant();
- // return TokenNameStringSingleQuote;
- // }
- // return TokenNameEncapsedString1;
- // case '"':
- // return TokenNameEncapsedString2;
- // case '`':
- // if (tokenizeStrings) {
- // consumeStringInterpolated();
- // return TokenNameStringInterpolated;
- // }
- // return TokenNameEncapsedString0;
- // case '-':
- // if (getNextChar('>'))
- // return TokenNameMINUS_GREATER;
- // return TokenNameSTRING;
- // default:
- // if (currentCharacter == '$') {
- // int oldPosition = currentPosition;
- // try {
- // currentCharacter = source[currentPosition++];
- // if (currentCharacter == '{') {
- // return TokenNameDOLLAR_LBRACE;
- // }
- // if (isPHPIdentifierStart(currentCharacter)) {
- // return scanIdentifierOrKeyword(true);
- // } else {
- // currentPosition = oldPosition;
- // return TokenNameSTRING;
- // }
- // } catch (IndexOutOfBoundsException e) {
- // currentPosition = oldPosition;
- // return TokenNameSTRING;
- // }
- // }
- // if (isPHPIdentifierStart(currentCharacter))
- // return scanIdentifierOrKeyword(false);
- // if (Character.isDigit(currentCharacter))
- // return scanNumber(false);
- // return TokenNameERROR;
- // }
- // }
- // boolean isWhiteSpace;
while ((currentCharacter == ' ') || Character.isWhitespace(currentCharacter)) {
startPosition = currentPosition;
currentCharacter = source[currentPosition++];
- // if (((currentCharacter = source[currentPosition++]) == '\\')
- // && (source[currentPosition] == 'u')) {
- // isWhiteSpace = jumpOverUnicodeWhiteSpace();
- // } else {
if ((currentCharacter == '\r') || (currentCharacter == '\n')) {
checkNonExternalizeString();
if (recordLineSeparator) {
currentLine = null;
}
}
- // isWhiteSpace = (currentCharacter == ' ')
- // || Character.isWhitespace(currentCharacter);
- // }
}
if (tokenizeWhiteSpace && (whiteStart != currentPosition - 1)) {
// reposition scanner in case we are interested by spaces as tokens
if (lookAheadLinePHPTag() == TokenNameINLINE_HTML) {
phpMode = true;
if (phpShortTag) {
- fFillerToken = TokenNameecho;
+ fFillerToken = TokenNameECHO_INVISIBLE;
}
return TokenNameINLINE_HTML;
}
} else {
phpMode = true;
if (phpShortTag) {
- fFillerToken = TokenNameecho;
+ fFillerToken = TokenNameECHO_INVISIBLE;
}
return TokenNameINLINE_HTML;
}
// //$NON-NLS-1$
case TokenNameINLINE_HTML:
return "Inline-HTML(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ case TokenNameECHO_INVISIBLE:
+ //0-length token
+ return "";
case TokenNameIdentifier:
return "Identifier(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
case TokenNameVariable: