AS3 highlighter.

Refactoring of highligter.
This commit is contained in:
Jindra Petřík
2025-05-29 09:14:15 +02:00
parent bbeeef4fc5
commit 90d975d69c
23 changed files with 3780 additions and 568 deletions

View File

@@ -18,10 +18,10 @@ All notable changes to this project will be documented in this file.
- "Show detail" context menu item for items in folder preview
- [#1682] AS2 - Adding class by context menu on packages
- Simple editor - detection of english color name (based on CSS names)
- AS1/2 - highlight variable definition and all its instances on cursor place
- AS1/2/3 - highlight variable definition and all its instances on cursor place
(also in edit mode)
- AS1/2 - underline errors in the code (also in edit mode)
- AS1/2 - highlight variables and errors on scrollbar
- AS1/2/3 - underline errors in the code (also in edit mode)
- AS1/2/3 - highlight variables and errors on scrollbar
### Changed
- AS1/2 - Single DoAction tag inside frame is now displayed directly as frame node

View File

@@ -81,6 +81,8 @@ import com.jpexs.decompiler.flash.abc.types.Float4;
private static String xmlTagName = "";
private int startPos = -1;
public int yychar() {
return yychar;
}
@@ -249,144 +251,147 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
<YYINITIAL> {
/* keywords */
"break" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); }
"case" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); }
"continue" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); }
"default" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); }
"do" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); }
"while" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); }
"else" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); }
"for" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); }
"each" { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext()); }
"in" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); }
"if" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); }
"return" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); }
"super" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); }
"switch" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); }
"throw" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); }
"try" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); }
"catch" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); }
"finally" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); }
"while" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); }
"with" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); }
"dynamic" { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext()); }
"internal" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); }
"override" { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext()); }
"private" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); }
"protected" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); }
"public" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); }
"static" { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext()); }
"class" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); }
"const" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); }
"extends" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); }
"function" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); }
"get" { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext()); }
"implements" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); }
"interface" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); }
"namespace" { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext()); }
"package" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); }
"set" { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext()); }
"var" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); }
"import" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); }
"use" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); }
"false" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); }
"null" { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); }
"this" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); }
"true" { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); }
"undefined" { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); }
"Infinity" { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); }
"NaN" { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); }
"final" { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext()); }
"native" { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext()); }
"break" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); }
"case" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); }
"continue" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); }
"default" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); }
"do" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.DO, yytext()); }
"while" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); }
"else" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); }
"for" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); }
"each" { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext()); }
"in" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IN, yytext()); }
"if" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IF, yytext()); }
"return" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); }
"super" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); }
"switch" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); }
"throw" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); }
"try" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); }
"catch" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); }
"finally" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); }
"while" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); }
"with" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); }
"dynamic" { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext()); }
"internal" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); }
"override" { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext()); }
"private" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); }
"protected" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); }
"public" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); }
"static" { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext()); }
"class" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); }
"const" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); }
"extends" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); }
"function" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); }
"get" { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.GET, yytext()); }
"implements" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); }
"interface" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); }
"namespace" { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext()); }
"package" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); }
"set" { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.SET, yytext()); }
"var" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); }
"import" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); }
"use" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.USE, yytext()); }
"false" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); }
"null" { return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); }
"this" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); }
"true" { return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); }
"undefined" { return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); }
"Infinity" { return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); }
"NaN" { return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); }
"final" { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext()); }
"native" { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext()); }
{VerbatimString} {
String verbatimString = yytext();
verbatimString = verbatimString.substring(2, verbatimString.length() - 1);
return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, verbatimString); }
return new ParsedSymbol(yychar(), SymbolGroup.STRING, SymbolType.STRING, verbatimString); }
/* operators */
"(" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); }
")" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); }
"{" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); }
"}" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); }
"[" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); }
"]" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); }
";" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); }
"," { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); }
"..." { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); }
"." { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); }
"=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); }
">" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); }
"<" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); }
"!" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); }
"~" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); }
"?." { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NULL_DOT, yytext()); }
"??" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NULL_COALESCE, yytext()); }
"?" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); }
":" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); }
"===" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); }
"==" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); }
"<=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); }
">=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); }
"!==" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); }
"!=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); }
"&&=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_AND, yytext()); }
"&&" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); }
"||=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_OR, yytext()); }
"||" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); }
"++" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); }
"--" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); }
"+" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); }
"-" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); }
"*" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); }
"/" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); }
"&" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); }
"|" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); }
"^" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); }
"%" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); }
"<<" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); }
">>" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); }
">>>" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); }
"+=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); }
"-=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); }
"*=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); }
"/=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); }
"&=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); }
"|=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); }
"^=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); }
"%=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); }
"<<=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); }
">>=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); }
">>>=" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); }
"as" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); }
"delete" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); }
"instanceof" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); }
"is" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); }
"::" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); }
"new" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); }
"typeof" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); }
"void" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); }
"@" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); }
".(" { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); }
".." { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); }
"(" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); }
")" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); }
"{" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); }
"}" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); }
"[" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); }
"]" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); }
";" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); }
"," { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); }
"..." { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.REST, yytext()); }
"." { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); }
"=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); }
">" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); }
"<" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); }
"!" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); }
"~" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); }
"?." { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NULL_DOT, yytext()); }
"??" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NULL_COALESCE, yytext()); }
"?" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); }
":" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); }
"===" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); }
"==" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); }
"<=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); }
">=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); }
"!==" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); }
"!=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); }
"&&=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_AND, yytext()); }
"&&" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.AND, yytext()); }
"||=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_OR, yytext()); }
"||" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.OR, yytext()); }
"++" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); }
"--" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); }
"+" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); }
"-" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); }
"*" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); }
"/" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); }
"&" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); }
"|" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); }
"^" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); }
"%" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); }
"<<" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); }
">>" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); }
">>>" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); }
"+=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); }
"-=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); }
"*=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); }
"/=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); }
"&=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); }
"|=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); }
"^=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); }
"%=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); }
"<<=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); }
">>=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); }
">>>=" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); }
"as" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.AS, yytext()); }
"delete" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); }
"instanceof" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); }
"is" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.IS, yytext()); }
"::" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); }
"new" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); }
"typeof" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); }
"void" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); }
"@" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); }
".(" { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); }
".." { return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); }
/* string literal */
\" {
startPos = yychar();
string.setLength(0);
yybegin(STRING);
}
{Preprocessor} {
return new ParsedSymbol(SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2));
return new ParsedSymbol(yychar(), SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2));
}
"\u00A7" {
startPos = yychar();
string.setLength(0);
yybegin(OIDENTIFIER);
}
/* character literal */
\' {
startPos = yychar();
string.setLength(0);
yybegin(CHARLITERAL);
}
@@ -399,50 +404,50 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
ival = ival.substring(0, ival.length() - 1);
}
try{
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(ival));
return new ParsedSymbol(yychar(), SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(ival));
} catch(NumberFormatException nfe){
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(ival));
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(ival));
}
}
{HexIntegerLiteral} {
try {
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext().substring(2), 16));
return new ParsedSymbol(yychar(), SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext().substring(2), 16));
} catch (NumberFormatException nfe) {
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext().substring(2), 16).doubleValue());
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext().substring(2), 16).doubleValue());
}
}
{OctIntegerLiteral} {
try {
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext(), 8));
return new ParsedSymbol(yychar(), SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext(), 8));
} catch (NumberFormatException nfe) {
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext(), 8).doubleValue());
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext(), 8).doubleValue());
}
}
{DoubleLiteral} {
String dval = yytext();
if (dval.endsWith("m")) {
dval = dval.substring(0, dval.length() - 1);
return new ParsedSymbol(SymbolGroup.DECIMAL, SymbolType.DECIMAL, new Decimal128(dval));
return new ParsedSymbol(yychar(), SymbolGroup.DECIMAL, SymbolType.DECIMAL, new Decimal128(dval));
}
if (dval.endsWith("f")) {
dval = dval.substring(0, dval.length() - 1);
return new ParsedSymbol(SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(dval));
return new ParsedSymbol(yychar(), SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(dval));
}
if (dval.endsWith("d")) {
dval = dval.substring(0, dval.length() - 1);
}
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(dval));
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(dval));
}
{FloatLiteral} {
String fval = yytext();
if (fval.endsWith("f")) {
fval = fval.substring(0, fval.length() - 1);
}
return new ParsedSymbol(SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(fval));
return new ParsedSymbol(yychar(), SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(fval));
}
{Float4Literal} {
@@ -456,22 +461,23 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
}
fvalues[i] = Float.parseFloat(fval);
}
return new ParsedSymbol(SymbolGroup.FLOAT4, SymbolType.FLOAT4, new Float4(fvalues));
return new ParsedSymbol(yychar(), SymbolGroup.FLOAT4, SymbolType.FLOAT4, new Float4(fvalues));
}
/* comments */
{Comment} { yyline += count(yytext(),"\n"); }
{LineTerminator} {
yyline++;
if (enableWhiteSpace) { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
if (enableWhiteSpace) { return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
}
/* whitespace */
{WhiteSpace} { if (enableWhiteSpace) { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); } }
{TypeNameSpec} { return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); }
{WhiteSpace} { if (enableWhiteSpace) { return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); } }
{TypeNameSpec} { return new ParsedSymbol(yychar(), SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); }
{XmlOpenTagStart} {
startPos = yychar();
yybegin(XMLOPENTAG);
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext());
}
{XmlCommentStart} {
string.setLength(0); string.append(yytext() ); yybegin(XMLCOMMENTALONE);
@@ -479,20 +485,20 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
{XmlCDataStart} {
string.setLength(0); string.append(yytext() ); yybegin(XMLCDATAALONE);
}
"<{" { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); }
"<{" { return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); }
/* identifiers */
{Identifier} { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); }
{Identifier} { return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); }
/* regexp */
{RegExp} { return new ParsedSymbol(SymbolGroup.REGEXP, SymbolType.REGEXP, yytext()); }
{NamespaceSuffix} { return new ParsedSymbol(SymbolGroup.NAMESPACESUFFIX, SymbolType.NAMESPACESUFFIX, Integer.parseInt(yytext().substring(1))); }
{RegExp} { return new ParsedSymbol(yychar(), SymbolGroup.REGEXP, SymbolType.REGEXP, yytext()); }
{NamespaceSuffix} { return new ParsedSymbol(yychar(), SymbolGroup.NAMESPACESUFFIX, SymbolType.NAMESPACESUFFIX, Integer.parseInt(yytext().substring(1))); }
}
<XMLCLOSETAGFINISH> {
">" {
yybegin(XML);
pushback(new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -505,36 +511,36 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
<XMLOPENTAG> {
{XmlAttribute} {
yybegin(XMLOPENTAGATTRIB);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
}
"{" {
yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
}
{XmlOpenTagEnd} {
yybegin(XML);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
}
{XmlOpenTagClose} {
yybegin(XML);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -548,15 +554,15 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
<XMLOPENTAGATTRIB> {
\"{XmlDQuoteStringChar}*\" {
yybegin(XMLOPENTAG);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
}
\'{XmlSQuoteStringChar}*\' {
yybegin(XMLOPENTAG);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE_SINGLEQUOTED, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE_SINGLEQUOTED, yytext());
}
"{" {
yybegin(YYINITIAL);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext());
}
}
@@ -567,7 +573,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
string.append(yytext());
String tos = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR, tos);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_INSTR, tos);
}
{LineTerminator} { string.append(yytext()); yyline++;}
[^] { string.append(yytext()); }
@@ -579,7 +585,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
yybegin(XML);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_CDATA, ret);
}
{LineTerminator} { string.append(yytext()); yyline++;}
[^] { string.append(yytext()); }
@@ -591,7 +597,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
yybegin(YYINITIAL);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_CDATA, ret);
}
{LineTerminator} { string.append(yytext()); yyline++;}
[^] { string.append(yytext()); }
@@ -603,7 +609,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
yybegin(XML);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
}
{LineTerminator} { string.append(yytext()); yyline++;}
[^] { string.append(yytext());}
@@ -615,7 +621,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
yybegin(YYINITIAL);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
return new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
}
{LineTerminator} { string.append(yytext()); yyline++;}
[^] { string.append(yytext());}
@@ -624,7 +630,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
<XML> {
{XmlCDataStart} {
String ret = string.toString(); string.setLength(0); string.append(yytext() ); yybegin(XMLCDATA);
if (!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
if (!ret.isEmpty()) return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_TEXT, ret);
}
{XmlInstrStart} {
yybegin(XMLINSTR);
@@ -632,27 +638,27 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
String tos = string.toString();
string.setLength(0);
string.append(yytext());
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, tos);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_TEXT, tos);
}
string.append(yytext());
}
{XmlCommentStart} {
String ret = string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT);
if (!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
if (!ret.isEmpty()) return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_TEXT, ret);
}
{XmlOpenTagStart} {
yybegin(XMLOPENTAG);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
}
{XmlCloseTag} {
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -660,27 +666,27 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
"<{" {
yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
}
"</{" {
yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
}
"{" {
yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -694,7 +700,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
yybegin(YYINITIAL);
repeatNum = 1;
// length also includes the trailing quote
return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString());
return new ParsedSymbol(startPos, SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString());
}
{OIdentifierCharacter} { for(int r=0;r<repeatNum;r++) string.append(yytext()); repeatNum = 1;}
@@ -725,7 +731,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
// length also includes the trailing quote
String tos = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, tos);
return new ParsedSymbol(startPos, SymbolGroup.STRING, SymbolType.STRING, tos);
}
{StringCharacter}+ { string.append(yytext()); }
@@ -754,7 +760,7 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
\' {
yybegin(YYINITIAL);
// length also includes the trailing quote
return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString());
return new ParsedSymbol(startPos, SymbolGroup.STRING, SymbolType.STRING, string.toString());
}
{SingleCharacter}+ { string.append(yytext()); }
@@ -781,4 +787,4 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
/* error fallback */
[^] { }
<<EOF>> { return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null); }
<<EOF>> { return new ParsedSymbol(yychar(), SymbolGroup.EOF, SymbolType.EOF, null); }

View File

@@ -34,4 +34,15 @@ public class AVM2ParseException extends ParseException {
public AVM2ParseException(String text, long line) {
super(text, line);
}
/**
* Constructor.
*
* @param text Text
* @param line Line
* @param position Position
*/
public AVM2ParseException(String text, long line, long position) {
super(text, line, position);
}
}

View File

@@ -266,12 +266,12 @@ public class ActionScript3Parser {
s = lex();
} while (s.type == SymbolType.COMMA);
if (s.type == SymbolType.USHIFT_RIGHT) {
s = new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN);
s = new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.GREATER_THAN);
lexer.pushback(s);
lexer.pushback(s);
}
if (s.type == SymbolType.SHIFT_RIGHT) {
s = new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN);
s = new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.GREATER_THAN);
lexer.pushback(s);
}
expected(s, lexer.yyline(), SymbolType.GREATER_THAN);
@@ -442,8 +442,8 @@ public class ActionScript3Parser {
if (s.type == SymbolType.BRACKET_OPEN) {
lexer.pushback(s);
if (attrBracket) {
lexer.pushback(new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, "@"));
lexer.pushback(new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, "."));
lexer.pushback(new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, "@"));
lexer.pushback(new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.DOT, "."));
}
ret = member(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, ret, registerVars, inFunction, inMethod, variables, abc);
} else {
@@ -2609,7 +2609,7 @@ public class ActionScript3Parser {
if (!abc.hasFloat4Support()) {
//parse again as method call
lexer.yypushbackstr(lexer.yytext().substring("float4".length()));
lexer.pushback(new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, "float4"));
lexer.pushback(new ParsedSymbol(-1, SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, "float4"));
ret = name(allOpenedNamespaces, thisType, pkg, needsActivation, false, openedNamespaces, registerVars, inFunction, inMethod, variables, importedClasses, abc);
} else {
ret = new Float4ValueAVM2Item(null, null, (Float4) s.value);
@@ -2653,7 +2653,7 @@ public class ActionScript3Parser {
s = lex();
if (s.type == SymbolType.XML_STARTTAG_BEGIN) {
lexer.yypushbackstr(s.value.toString().substring(1), ActionScriptLexer.YYINITIAL);
s = new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN);
s = new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.LOWER_THAN);
}
if (s.type == SymbolType.FUNCTION) {
s = lexer.lex();

View File

@@ -1,16 +1,18 @@
/* The following code was generated by JFlex 1.6.0 */
/*
* Copyright (C) 2010-2025 JPEXS, All rights reserved.
*
* Copyright (C) 2010-2016 JPEXS, All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
@@ -1099,6 +1101,8 @@ public final class ActionScriptLexer {
private static String xmlTagName = "";
private int startPos = -1;
public int yychar() {
return yychar;
}
@@ -1470,47 +1474,47 @@ public final class ActionScriptLexer {
case 186: break;
case 2:
{ yyline++;
if (enableWhiteSpace) { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
if (enableWhiteSpace) { return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
}
case 187: break;
case 3:
{ if (enableWhiteSpace) { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
{ if (enableWhiteSpace) { return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
}
case 188: break;
case 4:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext());
}
case 189: break;
case 5:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext());
}
case 190: break;
case 6:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext());
}
case 191: break;
case 7:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DOT, yytext());
}
case 192: break;
case 8:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext());
}
case 193: break;
case 9:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NOT, yytext());
}
case 194: break;
case 10:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.MINUS, yytext());
}
case 195: break;
case 11:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext());
}
case 196: break;
case 12:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.COLON, yytext());
}
case 197: break;
case 13:
@@ -1519,94 +1523,97 @@ public final class ActionScriptLexer {
ival = ival.substring(0, ival.length() - 1);
}
try{
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(ival));
return new ParsedSymbol(yychar(), SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(ival));
} catch(NumberFormatException nfe){
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(ival));
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(ival));
}
}
case 198: break;
case 14:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext());
}
case 199: break;
case 15:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext());
}
case 200: break;
case 16:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext());
}
case 201: break;
case 17:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext());
}
case 202: break;
case 18:
{ string.setLength(0);
{ startPos = yychar();
string.setLength(0);
yybegin(STRING);
}
case 203: break;
case 19:
{ string.setLength(0);
{ startPos = yychar();
string.setLength(0);
yybegin(CHARLITERAL);
}
case 204: break;
case 20:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext());
}
case 205: break;
case 21:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.COMMA, yytext());
}
case 206: break;
case 22:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext());
}
case 207: break;
case 23:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.PLUS, yytext());
}
case 208: break;
case 24:
{ string.setLength(0);
{ startPos = yychar();
string.setLength(0);
yybegin(OIDENTIFIER);
}
case 209: break;
case 25:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext());
}
case 210: break;
case 26:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext());
}
case 211: break;
case 27:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext());
}
case 212: break;
case 28:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext());
}
case 213: break;
case 29:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext());
}
case 214: break;
case 30:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BITAND, yytext());
}
case 215: break;
case 31:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BITOR, yytext());
}
case 216: break;
case 32:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.XOR, yytext());
}
case 217: break;
case 33:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.MODULO, yytext());
}
case 218: break;
case 34:
@@ -1622,7 +1629,7 @@ public final class ActionScriptLexer {
// length also includes the trailing quote
String tos = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, tos);
return new ParsedSymbol(startPos, SymbolGroup.STRING, SymbolType.STRING, tos);
}
case 221: break;
case 37:
@@ -1632,7 +1639,7 @@ public final class ActionScriptLexer {
case 38:
{ yybegin(YYINITIAL);
// length also includes the trailing quote
return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString());
return new ParsedSymbol(startPos, SymbolGroup.STRING, SymbolType.STRING, string.toString());
}
case 223: break;
case 39:
@@ -1641,9 +1648,9 @@ public final class ActionScriptLexer {
case 224: break;
case 40:
{ yybegin(XML);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1651,9 +1658,9 @@ public final class ActionScriptLexer {
case 225: break;
case 41:
{ yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1661,9 +1668,9 @@ public final class ActionScriptLexer {
case 226: break;
case 42:
{ yybegin(XML);
pushback(new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1671,7 +1678,7 @@ public final class ActionScriptLexer {
case 227: break;
case 43:
{ yybegin(YYINITIAL);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext());
}
case 228: break;
case 44:
@@ -1680,9 +1687,9 @@ public final class ActionScriptLexer {
case 229: break;
case 45:
{ yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1696,7 +1703,7 @@ public final class ActionScriptLexer {
{ yybegin(YYINITIAL);
repeatNum = 1;
// length also includes the trailing quote
return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString());
return new ParsedSymbol(startPos, SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString());
}
case 232: break;
case 48:
@@ -1704,81 +1711,82 @@ public final class ActionScriptLexer {
}
case 233: break;
case 49:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext());
}
case 234: break;
case 50:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext());
}
case 235: break;
case 51:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext());
}
case 236: break;
case 52:
{ return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext());
}
case 237: break;
case 53:
{ String dval = yytext();
if (dval.endsWith("m")) {
dval = dval.substring(0, dval.length() - 1);
return new ParsedSymbol(SymbolGroup.DECIMAL, SymbolType.DECIMAL, new Decimal128(dval));
return new ParsedSymbol(yychar(), SymbolGroup.DECIMAL, SymbolType.DECIMAL, new Decimal128(dval));
}
if (dval.endsWith("f")) {
dval = dval.substring(0, dval.length() - 1);
return new ParsedSymbol(SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(dval));
return new ParsedSymbol(yychar(), SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(dval));
}
if (dval.endsWith("d")) {
dval = dval.substring(0, dval.length() - 1);
}
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(dval));
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(dval));
}
case 238: break;
case 54:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.FILTER, yytext());
}
case 239: break;
case 55:
{ yybegin(XMLOPENTAG);
{ startPos = yychar();
yybegin(XMLOPENTAG);
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext());
}
case 240: break;
case 56:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext());
}
case 241: break;
case 57:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext());
}
case 242: break;
case 58:
{ return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext());
}
case 243: break;
case 59:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext());
}
case 244: break;
case 60:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext());
}
case 245: break;
case 61:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext());
}
case 246: break;
case 62:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext());
}
case 247: break;
case 63:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext());
}
case 248: break;
case 64:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext());
}
case 249: break;
case 65:
@@ -1786,84 +1794,84 @@ public final class ActionScriptLexer {
if (fval.endsWith("f")) {
fval = fval.substring(0, fval.length() - 1);
}
return new ParsedSymbol(SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(fval));
return new ParsedSymbol(yychar(), SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(fval));
}
case 250: break;
case 66:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NULL_DOT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NULL_DOT, yytext());
}
case 251: break;
case 67:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NULL_COALESCE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NULL_COALESCE, yytext());
}
case 252: break;
case 68:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext());
}
case 253: break;
case 69:
{ try {
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext(), 8));
return new ParsedSymbol(yychar(), SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext(), 8));
} catch (NumberFormatException nfe) {
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext(), 8).doubleValue());
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext(), 8).doubleValue());
}
}
case 254: break;
case 70:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.DO, yytext());
}
case 255: break;
case 71:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.AS, yytext());
}
case 256: break;
case 72:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext());
}
case 257: break;
case 73:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext());
}
case 258: break;
case 74:
{ return new ParsedSymbol(SymbolGroup.NAMESPACESUFFIX, SymbolType.NAMESPACESUFFIX, Integer.parseInt(yytext().substring(1)));
{ return new ParsedSymbol(yychar(), SymbolGroup.NAMESPACESUFFIX, SymbolType.NAMESPACESUFFIX, Integer.parseInt(yytext().substring(1)));
}
case 259: break;
case 75:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IF, yytext());
}
case 260: break;
case 76:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.IS, yytext());
}
case 261: break;
case 77:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IN, yytext());
}
case 262: break;
case 78:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext());
}
case 263: break;
case 79:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.AND, yytext());
}
case 264: break;
case 80:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext());
}
case 265: break;
case 81:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.OR, yytext());
}
case 266: break;
case 82:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext());
}
case 267: break;
case 83:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext());
}
case 268: break;
case 84:
@@ -1904,9 +1912,9 @@ public final class ActionScriptLexer {
case 277: break;
case 93:
{ yybegin(XML);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1914,9 +1922,9 @@ public final class ActionScriptLexer {
case 278: break;
case 94:
{ yybegin(XMLOPENTAGATTRIB);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1924,12 +1932,12 @@ public final class ActionScriptLexer {
case 279: break;
case 95:
{ yybegin(XMLOPENTAG);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
}
case 280: break;
case 96:
{ yybegin(XMLOPENTAG);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE_SINGLEQUOTED, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE_SINGLEQUOTED, yytext());
}
case 281: break;
case 97:
@@ -1937,14 +1945,14 @@ public final class ActionScriptLexer {
string.append(yytext());
String tos = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR, tos);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_INSTR, tos);
}
case 282: break;
case 98:
{ yybegin(XMLOPENTAG);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1952,9 +1960,9 @@ public final class ActionScriptLexer {
case 283: break;
case 99:
{ yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1993,90 +2001,90 @@ public final class ActionScriptLexer {
}
case 292: break;
case 108:
{ return new ParsedSymbol(SymbolGroup.REGEXP, SymbolType.REGEXP, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.REGEXP, SymbolType.REGEXP, yytext());
}
case 293: break;
case 109:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.REST, yytext());
}
case 294: break;
case 110:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext());
}
case 295: break;
case 111:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext());
}
case 296: break;
case 112:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext());
}
case 297: break;
case 113:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext());
}
case 298: break;
case 114:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext());
}
case 299: break;
case 115:
{ try {
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext().substring(2), 16));
return new ParsedSymbol(yychar(), SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext().substring(2), 16));
} catch (NumberFormatException nfe) {
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext().substring(2), 16).doubleValue());
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext().substring(2), 16).doubleValue());
}
}
case 300: break;
case 116:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.USE, yytext());
}
case 301: break;
case 117:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FOR, yytext());
}
case 302: break;
case 118:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.TRY, yytext());
}
case 303: break;
case 119:
{ return new ParsedSymbol(SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2));
{ return new ParsedSymbol(yychar(), SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2));
}
case 304: break;
case 120:
{ String verbatimString = yytext();
verbatimString = verbatimString.substring(2, verbatimString.length() - 1);
return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, verbatimString);
return new ParsedSymbol(yychar(), SymbolGroup.STRING, SymbolType.STRING, verbatimString);
}
case 305: break;
case 121:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.SET, yytext());
}
case 306: break;
case 122:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NEW, yytext());
}
case 307: break;
case 123:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.VAR, yytext());
}
case 308: break;
case 124:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.GET, yytext());
}
case 309: break;
case 125:
{ return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext());
}
case 310: break;
case 126:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_AND, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_AND, yytext());
}
case 311: break;
case 127:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_OR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_OR, yytext());
}
case 312: break;
case 128:
@@ -2084,7 +2092,7 @@ public final class ActionScriptLexer {
yybegin(XML);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_CDATA, ret);
}
case 313: break;
case 129:
@@ -2092,14 +2100,14 @@ public final class ActionScriptLexer {
yybegin(XML);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
}
case 314: break;
case 130:
{ yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -2111,7 +2119,7 @@ public final class ActionScriptLexer {
String tos = string.toString();
string.setLength(0);
string.append(yytext());
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, tos);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_TEXT, tos);
}
string.append(yytext());
}
@@ -2121,7 +2129,7 @@ public final class ActionScriptLexer {
yybegin(YYINITIAL);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_CDATA, ret);
}
case 317: break;
case 133:
@@ -2129,7 +2137,7 @@ public final class ActionScriptLexer {
yybegin(YYINITIAL);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
return new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
}
case 318: break;
case 134:
@@ -2137,39 +2145,39 @@ public final class ActionScriptLexer {
}
case 319: break;
case 135:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext());
}
case 320: break;
case 136:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CASE, yytext());
}
case 321: break;
case 137:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.TRUE, yytext());
}
case 322: break;
case 138:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.THIS, yytext());
}
case 323: break;
case 139:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.ELSE, yytext());
}
case 324: break;
case 140:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext());
}
case 325: break;
case 141:
{ return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext());
}
case 326: break;
case 142:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.WITH, yytext());
}
case 327: break;
case 143:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.VOID, yytext());
}
case 328: break;
case 144:
@@ -2178,9 +2186,9 @@ public final class ActionScriptLexer {
}
case 329: break;
case 145:
{ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext()));
{ pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -2188,7 +2196,7 @@ public final class ActionScriptLexer {
case 330: break;
case 146:
{ String ret = string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT);
if (!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
if (!ret.isEmpty()) return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_TEXT, ret);
}
case 331: break;
case 147:
@@ -2201,115 +2209,115 @@ public final class ActionScriptLexer {
}
case 333: break;
case 149:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CLASS, yytext());
}
case 334: break;
case 150:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CONST, yytext());
}
case 335: break;
case 151:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CATCH, yytext());
}
case 336: break;
case 152:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FALSE, yytext());
}
case 337: break;
case 153:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext());
}
case 338: break;
case 154:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.THROW, yytext());
}
case 339: break;
case 155:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.BREAK, yytext());
}
case 340: break;
case 156:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.SUPER, yytext());
}
case 341: break;
case 157:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.WHILE, yytext());
}
case 342: break;
case 158:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DELETE, yytext());
}
case 343: break;
case 159:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext());
}
case 344: break;
case 160:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.RETURN, yytext());
}
case 345: break;
case 161:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext());
}
case 346: break;
case 162:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext());
}
case 347: break;
case 163:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext());
}
case 348: break;
case 164:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext());
}
case 349: break;
case 165:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext());
}
case 350: break;
case 166:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext());
}
case 351: break;
case 167:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext());
}
case 352: break;
case 168:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext());
}
case 353: break;
case 169:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext());
}
case 354: break;
case 170:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext());
}
case 355: break;
case 171:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext());
}
case 356: break;
case 172:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext());
}
case 357: break;
case 173:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext());
}
case 358: break;
case 174:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext());
}
case 359: break;
case 175:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext());
}
case 360: break;
case 176:
{ return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext());
}
case 361: break;
case 177:
@@ -2317,32 +2325,32 @@ public final class ActionScriptLexer {
}
case 362: break;
case 178:
{ return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext());
}
case 363: break;
case 179:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext());
}
case 364: break;
case 180:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext());
}
case 365: break;
case 181:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext());
}
case 366: break;
case 182:
{ String ret = string.toString(); string.setLength(0); string.append(yytext() ); yybegin(XMLCDATA);
if (!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
if (!ret.isEmpty()) return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_TEXT, ret);
}
case 367: break;
case 183:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext());
}
case 368: break;
case 184:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext());
}
case 369: break;
case 185:
@@ -2356,14 +2364,14 @@ public final class ActionScriptLexer {
}
fvalues[i] = Float.parseFloat(fval);
}
return new ParsedSymbol(SymbolGroup.FLOAT4, SymbolType.FLOAT4, new Float4(fvalues));
return new ParsedSymbol(yychar(), SymbolGroup.FLOAT4, SymbolType.FLOAT4, new Float4(fvalues));
}
case 370: break;
default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
{
return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null);
return new ParsedSymbol(yychar(), SymbolGroup.EOF, SymbolType.EOF, null);
}
}
else {

View File

@@ -37,13 +37,20 @@ public class ParsedSymbol {
* Type
*/
public SymbolType type;
/**
* Position in source text
*/
public int position;
/**
* Constructor.
* @param position Position
* @param group Group
* @param type Type
*/
public ParsedSymbol(SymbolGroup group, SymbolType type) {
public ParsedSymbol(int position, SymbolGroup group, SymbolType type) {
this.position = position;
this.group = group;
this.type = type;
this.value = null;
@@ -51,11 +58,13 @@ public class ParsedSymbol {
/**
* Constructor.
* @param position Position
* @param group Group
* @param type Type
* @param value Value
*/
public ParsedSymbol(SymbolGroup group, SymbolType type, Object value) {
public ParsedSymbol(int position, SymbolGroup group, SymbolType type, Object value) {
this.position = position;
this.group = group;
this.type = type;
this.value = value;

View File

@@ -14,21 +14,26 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.action.parser.script;
import com.jpexs.decompiler.flash.simpleparser.Variable;
import com.jpexs.decompiler.flash.simpleparser.SimpleParseException;
import com.jpexs.decompiler.flash.simpleparser.Type;
import com.jpexs.decompiler.flash.simpleparser.Scope;
import com.jpexs.decompiler.flash.simpleparser.CatchScope;
import com.jpexs.decompiler.flash.simpleparser.ClassScope;
import com.jpexs.decompiler.flash.simpleparser.VariableOrScope;
import com.jpexs.decompiler.flash.simpleparser.FunctionScope;
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.action.parser.ActionParseException;
import com.jpexs.decompiler.flash.action.parser.script.ActionScriptLexer;
import com.jpexs.decompiler.flash.action.parser.script.LexBufferer;
import com.jpexs.decompiler.flash.action.parser.script.ParsedSymbol;
import com.jpexs.decompiler.flash.action.parser.script.SymbolGroup;
import com.jpexs.decompiler.flash.action.parser.script.SymbolType;
import com.jpexs.decompiler.flash.simpleparser.SimpleParser;
import com.jpexs.decompiler.flash.types.CLIPACTIONRECORD;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.helpers.CancellableWorker;
import com.jpexs.helpers.Reference;
import java.io.IOException;
import java.io.StringReader;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
@@ -40,25 +45,25 @@ import java.util.Map;
*
* @author JPEXS
*/
public class ActionScript2VariableParser {
public class ActionScript2SimpleParser implements SimpleParser {
/**
* Swf version
*/
private final int swfVersion;
/**
* Constructor
*
* @param swf Swf
*/
public ActionScript2VariableParser(SWF swf) {
public ActionScript2SimpleParser(SWF swf) {
this.swfVersion = swf.version;
}
private final boolean debugMode = false;
private void commands(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, int forinlevel, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private void commands(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, int forinlevel, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (debugMode) {
System.out.println("commands:");
}
@@ -70,7 +75,7 @@ public class ActionScript2VariableParser {
}
}
private String type(List<ActionVariableParseException> errors, boolean definition, List<VariableOrScope> variables) throws IOException, InterruptedException, ActionParseException {
private String type(List<SimpleParseException> errors, boolean definition, List<VariableOrScope> variables) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol s = lex();
if (!expectedIdentifier(errors, s, lexer.yyline())) {
return null;
@@ -96,7 +101,7 @@ public class ActionScript2VariableParser {
return ret;
}
private boolean expected(List<ActionVariableParseException> errors, ParsedSymbol symb, int line, Object... expected) throws IOException {
private boolean expected(List<SimpleParseException> errors, ParsedSymbol symb, int line, Object... expected) throws IOException {
boolean found = false;
for (Object t : expected) {
if (symb.type == t) {
@@ -116,13 +121,13 @@ public class ActionScript2VariableParser {
expStr += e;
first = false;
}
errors.add(new ActionVariableParseException("" + expStr + " expected but " + symb.type + " found", line, symb.position));
errors.add(new SimpleParseException("" + expStr + " expected but " + symb.type + " found", line, symb.position));
return false;
}
return true;
}
private ParsedSymbol expectedType(List<ActionVariableParseException> errors, Object... type) throws IOException, InterruptedException, ActionParseException {
private ParsedSymbol expectedType(List<SimpleParseException> errors, Object... type) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol symb = lex();
if (!expected(errors, symb, lexer.yyline(), type)) {
return null;
@@ -130,7 +135,7 @@ public class ActionScript2VariableParser {
return symb;
}
private ParsedSymbol lex() throws IOException, InterruptedException, ActionParseException {
private ParsedSymbol lex() throws IOException, InterruptedException, SimpleParseException, ActionParseException, ActionParseException {
if (CancellableWorker.isInterrupted()) {
throw new InterruptedException();
}
@@ -141,7 +146,7 @@ public class ActionScript2VariableParser {
return ret;
}
private List<GraphTargetItem> call(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private List<GraphTargetItem> call(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
List<GraphTargetItem> ret = new ArrayList<>();
ParsedSymbol s = lex();
while (s.type != SymbolType.PARENT_CLOSE) {
@@ -155,7 +160,7 @@ public class ActionScript2VariableParser {
return ret;
}
private void function(List<ActionVariableParseException> errors, boolean withBody, String functionName, int functionNamePosition, boolean isMethod, List<VariableOrScope> variables, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private void function(List<SimpleParseException> errors, boolean withBody, String functionName, int functionNamePosition, boolean isMethod, List<VariableOrScope> variables, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol s;
expectedType(errors, SymbolType.PARENT_OPEN);
s = lex();
@@ -205,7 +210,7 @@ public class ActionScript2VariableParser {
variables.add(new FunctionScope(subvariables));
}
private boolean traits(List<ActionVariableParseException> errors, boolean isInterface, String className, List<VariableOrScope> variables, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean traits(List<SimpleParseException> errors, boolean isInterface, String className, List<VariableOrScope> variables, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol s;
@@ -263,7 +268,7 @@ public class ActionScript2VariableParser {
return true;
}
private boolean expressionCommands(List<ActionVariableParseException> errors, ParsedSymbol s, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean expressionCommands(List<SimpleParseException> errors, ParsedSymbol s, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (debugMode) {
System.out.println("expressionCommands:");
}
@@ -383,7 +388,7 @@ public class ActionScript2VariableParser {
} else if (s.value.equals("POST")) {
//empty
} else {
errors.add(new ActionVariableParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline(), s.position));
errors.add(new SimpleParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline(), s.position));
}
} else {
lexer.pushback(s);
@@ -481,7 +486,7 @@ public class ActionScript2VariableParser {
} else if (s.value.equals("GET")) {
//empty
} else {
errors.add(new ActionVariableParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline(), s.position));
errors.add(new SimpleParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline(), s.position));
}
} else {
lexer.pushback(s);
@@ -674,20 +679,20 @@ public class ActionScript2VariableParser {
SymbolType.NUMBER_OP, SymbolType.STRING_OP);
}
private boolean expectedIdentifier(List<ActionVariableParseException> errors, ParsedSymbol s, int line, Object... exceptions) throws IOException {
private boolean expectedIdentifier(List<SimpleParseException> errors, ParsedSymbol s, int line, Object... exceptions) throws IOException {
for (Object ex : exceptions) {
if (s.isType(ex)) {
return true;
}
}
if (!isIdentifier(s)) {
errors.add(new ActionVariableParseException(SymbolType.IDENTIFIER + " expected but " + s.type + " found", line, s.position));
errors.add(new SimpleParseException(SymbolType.IDENTIFIER + " expected but " + s.type + " found", line, s.position));
return false;
}
return true;
}
private boolean command(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, int forinlevel, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean command(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, int forinlevel, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
LexBufferer buf = new LexBufferer();
lexer.addListener(buf);
if (debugMode) {
@@ -791,7 +796,7 @@ public class ActionScript2VariableParser {
break;
case FUNCTION:
s = lexer.lex();
if (expectedIdentifier(errors, s, lexer.yyline())) {
if (expectedIdentifier(errors, s, lexer.yyline())) {
function(errors, true, s.value.toString(), s.position, false, variables, inTellTarget, hasEval);
}
break;
@@ -1004,7 +1009,7 @@ public class ActionScript2VariableParser {
ret = true;
break;
default:
errors.add(new ActionVariableParseException("Unknown directive: #" + s.value, lexer.yyline(), s.position));
errors.add(new SimpleParseException("Unknown directive: #" + s.value, lexer.yyline(), s.position));
}
break;
default:
@@ -1023,11 +1028,11 @@ public class ActionScript2VariableParser {
if ((s != null) && (s.type != SymbolType.SEMICOLON)) {
lexer.pushback(s);
}
return ret;
}
private boolean expression(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, boolean allowComma, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean expression(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, boolean allowComma, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (debugMode) {
System.out.println("expression:");
}
@@ -1049,7 +1054,7 @@ public class ActionScript2VariableParser {
return true;
}
private ParsedSymbol peekLex() throws IOException, InterruptedException, ActionParseException {
private ParsedSymbol peekLex() throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol lookahead = lex();
lexer.pushback(lookahead);
return lookahead;
@@ -1082,7 +1087,7 @@ public class ActionScript2VariableParser {
return s.type.getPrecedence();
}
private boolean expression1(List<ActionVariableParseException> errors, boolean lhs, int min_precedence, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean expression1(List<SimpleParseException> errors, boolean lhs, int min_precedence, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol op;
boolean rhs;
ParsedSymbol lookahead = peekLex();
@@ -1185,7 +1190,7 @@ public class ActionScript2VariableParser {
return lhs;
}
private int brackets(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private int brackets(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol s = lex();
int arrCnt = 0;
if (s.type == SymbolType.BRACKET_OPEN) {
@@ -1209,7 +1214,7 @@ public class ActionScript2VariableParser {
return arrCnt;
}
private boolean handleVariable(List<ActionVariableParseException> errors, ParsedSymbol s, boolean ret, List<VariableOrScope> variables, Reference<Boolean> allowMemberOrCall, boolean inFunction, boolean inMethod, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean handleVariable(List<SimpleParseException> errors, ParsedSymbol s, boolean ret, List<VariableOrScope> variables, Reference<Boolean> allowMemberOrCall, boolean inFunction, boolean inMethod, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (s.value.equals("not")) {
expressionPrimary(errors, inFunction, inMethod, inTellTarget, false, variables, true, hasEval);
ret = true;
@@ -1256,7 +1261,7 @@ public class ActionScript2VariableParser {
return ret;
}
private boolean expressionPrimary(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, boolean allowCall, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean expressionPrimary(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, boolean allowCall, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (debugMode) {
System.out.println("primary:");
}
@@ -1303,7 +1308,7 @@ public class ActionScript2VariableParser {
//errors.add(new ActionVariableParseException("Compiling §§" + s.value + " is not available, sorry", lexer.yyline()));
break;
default:
errors.add(new ActionVariableParseException("Unknown preprocessor instruction: §§" + s.value, lexer.yyline(), s.position));
errors.add(new SimpleParseException("Unknown preprocessor instruction: §§" + s.value, lexer.yyline(), s.position));
}
expectedType(errors, SymbolType.PARENT_CLOSE);
@@ -1415,7 +1420,7 @@ public class ActionScript2VariableParser {
case PARENT_OPEN:
boolean pexpr = expression(errors, inFunction, inMethod, inTellTarget, true, variables, true, hasEval);
if (!pexpr) {
errors.add(new ActionVariableParseException("Expression expected", lexer.yyline(), s.position));
errors.add(new SimpleParseException("Expression expected", lexer.yyline(), s.position));
}
expectedType(errors, SymbolType.PARENT_CLOSE);
allowMemberOrCall = true;
@@ -1490,7 +1495,7 @@ public class ActionScript2VariableParser {
return ret;
}
private boolean memberOrCall(List<ActionVariableParseException> errors, boolean ret, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, boolean allowCall, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean memberOrCall(List<SimpleParseException> errors, boolean ret, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, boolean allowCall, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol op = lex();
while (op.isType(SymbolType.PARENT_OPEN, SymbolType.BRACKET_OPEN, SymbolType.DOT)) {
if (op.type == SymbolType.PARENT_OPEN) {
@@ -1531,108 +1536,106 @@ public class ActionScript2VariableParser {
private ActionScriptLexer lexer = null;
/**
* Convert a string to a high-level model.
*
* @param str The string to convert
* @throws ActionParseException On parse error
* @throws IOException On I/O error
* @throws InterruptedException On interrupt
*/
@Override
public void parse(
String str,
String str,
Map<Integer, List<Integer>> definitionPosToReferences,
Map<Integer, Integer> referenceToDefinition,
List<ActionVariableParseException> errors
) throws ActionParseException, IOException, InterruptedException {
lexer = new ActionScriptLexer(new StringReader(str));
if (swfVersion >= ActionScriptLexer.SWF_VERSION_CASE_SENSITIVE) {
lexer.setCaseSensitiveIdentifiers(true);
}
ParsedSymbol symb = lexer.lex();
boolean inOnHandler = false;
if (symb.type == SymbolType.IDENTIFIER && ("on".equals(symb.value) || "onClipEvent".equals(symb.value))) {
expectedType(errors, SymbolType.PARENT_OPEN);
symb = lexer.lex();
boolean condEmpty = true;
while (symb.type == SymbolType.IDENTIFIER) {
condEmpty = false;
switch ((String) symb.value) {
case "press":
break;
case "release":
break;
case "releaseOutside":
break;
case "rollOver":
break;
case "rollOut":
break;
case "dragOut":
break;
case "dragOver":
break;
case "keyPress":
symb = lexer.lex();
expected(errors, symb, lexer.yyline(), SymbolType.STRING);
Integer key = CLIPACTIONRECORD.stringToKey((String) symb.value);
if (key == null) {
errors.add(new ActionVariableParseException("Invalid key", lexer.yyline(), symb.position));
}
break;
case "keyUp":
break;
case "keyDown":
break;
case "mouseUp":
break;
case "mouseDown":
break;
case "mouseMove":
break;
case "unload":
break;
case "enterFrame":
break;
case "load":
break;
case "data":
break;
default:
errors.add(new ActionVariableParseException("Unrecognized event type", lexer.yyline(), symb.position));
}
symb = lexer.lex();
if (symb.type == SymbolType.PARENT_CLOSE) {
break;
}
expected(errors, symb, lexer.yyline(), SymbolType.COMMA);
symb = lexer.lex();
List<SimpleParseException> errors
) throws SimpleParseException, IOException, InterruptedException {
try {
lexer = new ActionScriptLexer(new StringReader(str));
if (swfVersion >= ActionScriptLexer.SWF_VERSION_CASE_SENSITIVE) {
lexer.setCaseSensitiveIdentifiers(true);
}
expected(errors, symb, lexer.yyline(), SymbolType.PARENT_CLOSE);
if (condEmpty) {
errors.add(new ActionVariableParseException("condition must be non empty", lexer.yyline(), symb.position));
ParsedSymbol symb = lexer.lex();
boolean inOnHandler = false;
if (symb.type == SymbolType.IDENTIFIER && ("on".equals(symb.value) || "onClipEvent".equals(symb.value))) {
expectedType(errors, SymbolType.PARENT_OPEN);
symb = lexer.lex();
boolean condEmpty = true;
while (symb.type == SymbolType.IDENTIFIER) {
condEmpty = false;
switch ((String) symb.value) {
case "press":
break;
case "release":
break;
case "releaseOutside":
break;
case "rollOver":
break;
case "rollOut":
break;
case "dragOut":
break;
case "dragOver":
break;
case "keyPress":
symb = lexer.lex();
expected(errors, symb, lexer.yyline(), SymbolType.STRING);
Integer key = CLIPACTIONRECORD.stringToKey((String) symb.value);
if (key == null) {
errors.add(new SimpleParseException("Invalid key", lexer.yyline(), symb.position));
}
break;
case "keyUp":
break;
case "keyDown":
break;
case "mouseUp":
break;
case "mouseDown":
break;
case "mouseMove":
break;
case "unload":
break;
case "enterFrame":
break;
case "load":
break;
case "data":
break;
default:
errors.add(new SimpleParseException("Unrecognized event type", lexer.yyline(), symb.position));
}
symb = lexer.lex();
if (symb.type == SymbolType.PARENT_CLOSE) {
break;
}
expected(errors, symb, lexer.yyline(), SymbolType.COMMA);
symb = lexer.lex();
}
expected(errors, symb, lexer.yyline(), SymbolType.PARENT_CLOSE);
if (condEmpty) {
errors.add(new SimpleParseException("condition must be non empty", lexer.yyline(), symb.position));
}
expectedType(errors, SymbolType.CURLY_OPEN);
inOnHandler = true;
} else {
lexer.pushback(symb);
}
expectedType(errors, SymbolType.CURLY_OPEN);
inOnHandler = true;
} else {
lexer.pushback(symb);
}
List<VariableOrScope> vars = new ArrayList<>();
Reference<Boolean> hasEval = new Reference<>(false);
commands(errors, false, false, 0, false, vars, hasEval);
Map<String, Integer> varNameToDefinitionPosition = new LinkedHashMap<>();
List<VariableOrScope> vars = new ArrayList<>();
Reference<Boolean> hasEval = new Reference<>(false);
commands(errors, false, false, 0, false, vars, hasEval);
Map<String, Integer> varNameToDefinitionPosition = new LinkedHashMap<>();
parseVariablesList(new ArrayList<>(), vars, definitionPosToReferences, referenceToDefinition, varNameToDefinitionPosition);
parseVariablesList(new ArrayList<>(), vars, definitionPosToReferences, referenceToDefinition, varNameToDefinitionPosition);
if (inOnHandler) {
expectedType(errors, SymbolType.CURLY_CLOSE);
}
if (inOnHandler) {
expectedType(errors, SymbolType.CURLY_CLOSE);
}
if (lexer.lex().type != SymbolType.EOF) {
errors.add(new ActionVariableParseException("Parsing finished before end of the file", lexer.yyline(), lexer.yychar()));
if (lexer.lex().type != SymbolType.EOF) {
errors.add(new SimpleParseException("Parsing finished before end of the file", lexer.yyline(), lexer.yychar()));
}
} catch (ActionParseException ex) {
errors.add(new SimpleParseException(ex.getMessage(), ex.line, ex.position));
}
}
@@ -1699,19 +1702,19 @@ public class ActionScript2VariableParser {
}
}
private void versionRequired(List<ActionVariableParseException> errors, ParsedSymbol s, int min) throws ActionParseException {
private void versionRequired(List<SimpleParseException> errors, ParsedSymbol s, int min) throws SimpleParseException {
versionRequired(errors, s.value.toString(), min, Integer.MAX_VALUE, s.position);
}
private void versionRequired(List<ActionVariableParseException> errors, String type, int min, int max, long position) throws ActionParseException {
private void versionRequired(List<SimpleParseException> errors, String type, int min, int max, long position) throws SimpleParseException {
if (min == max && swfVersion != min) {
errors.add(new ActionVariableParseException(type + " requires SWF version " + min, lexer.yyline(), position));
errors.add(new SimpleParseException(type + " requires SWF version " + min, lexer.yyline(), position));
}
if (swfVersion < min) {
errors.add(new ActionVariableParseException(type + " requires at least SWF version " + min, lexer.yyline(), position));
errors.add(new SimpleParseException(type + " requires at least SWF version " + min, lexer.yyline(), position));
}
if (swfVersion > max) {
errors.add(new ActionVariableParseException(type + " requires SWF version lower than " + max, lexer.yyline(), position));
errors.add(new SimpleParseException(type + " requires SWF version lower than " + max, lexer.yyline(), position));
}
}
}

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import java.util.ArrayList;
import java.util.List;

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import java.util.ArrayList;
import java.util.List;

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import java.util.ArrayList;
import java.util.List;

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import java.util.List;

View File

@@ -14,23 +14,23 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import com.jpexs.decompiler.flash.ParseException;
/**
* Exception for action parsing errors
* Exception for Simple parsing errors
*
* @author JPEXS
*/
public class ActionVariableParseException extends ParseException {
public class SimpleParseException extends ParseException {
/**
* Constructs a new parse exception.
* @param text Text of the exception
* @param line Line number where the exception occurred
*/
public ActionVariableParseException(String text, long line) {
public SimpleParseException(String text, long line) {
super(text, line);
}
@@ -40,7 +40,7 @@ public class ActionVariableParseException extends ParseException {
* @param line Line number where the exception occurred
* @param position Position where the exception occured
*/
public ActionVariableParseException(String text, long line, long position) {
public SimpleParseException(String text, long line, long position) {
super(text, line, position);
}
}

View File

@@ -0,0 +1,46 @@
/*
* Copyright (C) 2010-2025 JPEXS, All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.simpleparser;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
*
* @author JPEXS
*/
public interface SimpleParser {
/**
* Parses document.
*
* @param str The string to convert
* @param definitionPosToReferences Definition position to references
* @param referenceToDefinition Reference to definition
* @param errors Errors
* @throws SimpleParseException On parse error
* @throws IOException On I/O error
* @throws InterruptedException On interrupt
*/
public void parse(
String str,
Map<Integer, List<Integer>> definitionPosToReferences,
Map<Integer, Integer> referenceToDefinition,
List<SimpleParseException> errors
) throws SimpleParseException, IOException, InterruptedException;
}

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
/**
*

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
/**
*

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
/**
*

View File

@@ -27,6 +27,7 @@ import com.jpexs.decompiler.flash.abc.ScriptPack;
import com.jpexs.decompiler.flash.abc.avm2.AVM2Code;
import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction;
import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instructions;
import com.jpexs.decompiler.flash.abc.avm2.parser.script.ActionScript3SimpleParser;
import com.jpexs.decompiler.flash.abc.types.ABCException;
import com.jpexs.decompiler.flash.abc.types.MethodBody;
import com.jpexs.decompiler.flash.abc.types.MethodInfo;
@@ -65,6 +66,7 @@ import com.jpexs.decompiler.flash.gui.View;
import com.jpexs.decompiler.flash.gui.ViewMessages;
import com.jpexs.decompiler.flash.gui.controls.JPersistentSplitPane;
import com.jpexs.decompiler.flash.gui.editor.LinkHandler;
import com.jpexs.decompiler.flash.gui.editor.VariableMarker;
import com.jpexs.decompiler.flash.gui.tagtree.AbstractTagTree;
import com.jpexs.decompiler.flash.gui.tagtree.AbstractTagTreeModel;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
@@ -140,6 +142,7 @@ import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.text.Highlighter;
import javax.swing.tree.TreePath;
import jsyntaxpane.DefaultSyntaxKit;
import jsyntaxpane.Token;
import jsyntaxpane.TokenType;
@@ -249,6 +252,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
libraryComboBox.setSelectedIndex(SWF.LIBRARY_FLASH);
}
this.abc = abc;
decompiledTextArea.setParser(new ActionScript3SimpleParser(abc));
setDecompiledEditMode(false);
navigator.setAbc(abc);
updateLinksLabel();
@@ -993,8 +997,8 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
popupMenu.add(simplifyExpressionsMenuItem);
//popupMenu.add(removeObfuscatedDeclarationsMenuItem);
return popupMenu;
}
return popupMenu;
}
};
deobfuscateOptionsButton.setToolTipText(AppStrings.translate("button.deobfuscate_options"));
deobfuscateOptionsButton.setMargin(new Insets(0, 0, 0, 0));
@@ -1021,7 +1025,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
JPanel libraryAndLinkPanel = new JPanel(new FlowLayout());
JToggleButton linkButton = new JToggleButton(View.getIcon("link16"));
LinkDialog linkDialog = new LinkDialog(mainPanel, linkButton);
libraryComboBox = new JComboBox<>();
@@ -1047,8 +1051,8 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
libraryAndLinkPanel.add(linksLabel);
linkButton.setToolTipText(AppStrings.translate("button.abc.linkedSwfs.hint"));
linkButton.setToolTipText(AppStrings.translate("button.abc.linkedSwfs.hint"));
linkDialog.addSaveListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@@ -1153,6 +1157,8 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
//decLabel.setBorder(new BevelBorder(BevelBorder.RAISED));
decompiledTextArea.changeContentType("text/actionscript3");
DefaultSyntaxKit kit = (DefaultSyntaxKit) decompiledTextArea.getEditorKit();
kit.installComponent(decompiledTextArea, VariableMarker.class.getName());
decompiledTextArea.setFont(Configuration.getSourceFont());
View.addEditorAction(decompiledTextArea, new AbstractAction() {
@@ -1757,7 +1763,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
TreeItem sel = mainPanel.getCurrentTree().getCurrentTreeItem();
if ((sel instanceof ScriptPack) && (sel != pack)) {
mainPanel.replaceItemPin(pack, sel);
}
}
}
reload();
mainPanel.clearEditingStatus();
@@ -1819,7 +1825,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
} else {
toggleButton.setSelected(Configuration.autoDeobfuscate.get());
}
}
}
private void simplifyExpressionsMenuItemActionPerformed(ActionEvent evt) {
JCheckBoxMenuItem menuItem = (JCheckBoxMenuItem) evt.getSource();
@@ -2110,13 +2116,13 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
flexLabel.setVisible(useFlex && !value);
editDecompiledButton.setEnabled(!value);
}
public void setScript(ScriptPack scriptPack) {
setDecompiledEditMode(false);
detailPanel.setEditMode(false);
detailPanel.setEditMode(false);
detailPanel.methodTraitPanel.methodCodePanel.clear();
decompiledTextArea.setNoTrait();
decompiledTextArea.setNoTrait();
setAbc(scriptPack.abc);
decompiledTextArea.setScript(scriptPack, true);
decompiledTextArea.setScript(scriptPack, true);
}
}

View File

@@ -60,8 +60,6 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import jsyntaxpane.SyntaxDocument;
import jsyntaxpane.Token;
import jsyntaxpane.TokenType;
@@ -101,8 +99,8 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL
public synchronized boolean isScriptLoaded() {
return scriptLoaded;
}
}
public void addScriptListener(Runnable l) {
scriptListeners.add(l);
}
@@ -882,18 +880,17 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL
public void setScript(ScriptPack scriptLeaf, boolean force) {
View.checkAccess();
if (setSourceWorker != null) {
setSourceWorker.cancel(true);
setSourceWorker = null;
}
synchronized (this) {
scriptLoaded = false;
}
if (!force && this.script == scriptLeaf) {
if (!force && this.script == scriptLeaf) {
synchronized (this) {
scriptLoaded = true;
}
@@ -1004,8 +1001,6 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL
abcPanel.brokenHintPanel.setVisible(false);
}
setText(hilightedCode);
if (highlightedText.getClassHighlights().size() > 0) {
try {
@@ -1018,7 +1013,7 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL
}
}
scriptLoaded = true;
scriptLoaded = true;
fireScript();
}
@@ -1079,9 +1074,9 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL
}
setCaretPosition(position);
}
@Override
public synchronized void setCaretPosition(int position) {
super.setCaretPosition(position);
}
}
}

View File

@@ -16,9 +16,11 @@
*/
package com.jpexs.decompiler.flash.gui.action;
import com.jpexs.decompiler.flash.gui.editor.VariableMarker;
import com.jpexs.decompiler.flash.DisassemblyListener;
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.ValueTooLargeException;
import com.jpexs.decompiler.flash.abc.avm2.parser.script.ActionScript3SimpleParser;
import com.jpexs.decompiler.flash.action.Action;
import com.jpexs.decompiler.flash.action.ActionGraph;
import com.jpexs.decompiler.flash.action.ActionList;
@@ -29,6 +31,7 @@ import com.jpexs.decompiler.flash.action.parser.pcode.ASMParsedSymbol;
import com.jpexs.decompiler.flash.action.parser.pcode.ASMParser;
import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer;
import com.jpexs.decompiler.flash.action.parser.script.ActionScript2Parser;
import com.jpexs.decompiler.flash.action.parser.script.ActionScript2SimpleParser;
import com.jpexs.decompiler.flash.action.parser.script.ActionScriptLexer;
import com.jpexs.decompiler.flash.action.parser.script.ParsedSymbol;
import com.jpexs.decompiler.flash.action.parser.script.SymbolType;
@@ -637,7 +640,7 @@ public class ActionPanel extends JPanel implements SearchListener<ScriptSearchRe
editor.setShowMarkers(true);
decompiledEditor.setShowMarkers(Configuration.decompile.get());
decompiledEditor.setSwf(asm.getSwf());
decompiledEditor.setParser(new ActionScript2SimpleParser(asm.getSwf()));
lastASM = asm;
lastCode = actions;
lastDecompiled = decompiledText;
@@ -1033,7 +1036,7 @@ public class ActionPanel extends JPanel implements SearchListener<ScriptSearchRe
decompiledEditor.setFont(Configuration.getSourceFont());
decompiledEditor.changeContentType("text/actionscript");
DefaultSyntaxKit kit = (DefaultSyntaxKit) decompiledEditor.getEditorKit();
kit.installComponent(decompiledEditor, ActionVariableMarker.class.getName());
kit.installComponent(decompiledEditor, VariableMarker.class.getName());
editor.addCaretListener(new CaretListener() {
@Override

View File

@@ -80,7 +80,6 @@ public class DebuggableEditorPane extends LineMarkedEditorPane implements BreakP
private boolean showMarkers = true;
private WeakReference<SWF> swfRef = new WeakReference(null);
public DebuggableEditorPane() {
@@ -91,14 +90,6 @@ public class DebuggableEditorPane extends LineMarkedEditorPane implements BreakP
BREAKPOINT_MARKER = new LineMarker(FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT);
}
}
public void setSwf(SWF swf) {
this.swfRef = new WeakReference<>(swf);
}
public SWF getSwf() {
return swfRef.get();
}
public synchronized void setScriptName(String scriptName, String breakPointScriptName) {
this.scriptName = scriptName;

View File

@@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.gui.editor;
import com.jpexs.decompiler.flash.configuration.Configuration;
import com.jpexs.decompiler.flash.gui.AppStrings;
import com.jpexs.decompiler.flash.simpleparser.SimpleParser;
import com.jpexs.helpers.Reference;
import java.awt.Color;
import java.awt.Cursor;
@@ -80,7 +81,9 @@ public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHan
private LinkHandler linkHandler = this;
private Point lastCursorPos = new Point(0, 0);
private SimpleParser parser;
public static class LineMarker implements Comparable<LineMarker> {
private final Color bgColor;
@@ -147,6 +150,15 @@ public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHan
}
}
public SimpleParser getParser() {
return parser;
}
public void setParser(SimpleParser parser) {
this.parser = parser;
}
private Map<Integer, SortedSet<LineMarker>> lineMarkers = Collections.synchronizedMap(new HashMap<Integer, SortedSet<LineMarker>>());
public void setLineMarkers(Map<Integer, SortedSet<LineMarker>> colorMarkers) {

View File

@@ -14,18 +14,10 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.decompiler.flash.gui.action;
package com.jpexs.decompiler.flash.gui.editor;
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.action.parser.ActionParseException;
import com.jpexs.decompiler.flash.action.parser.script.variables.ActionScript2VariableParser;
import com.jpexs.decompiler.flash.action.parser.script.variables.ActionVariableParseException;
import com.jpexs.decompiler.flash.gui.editor.DebuggableEditorPane;
import com.jpexs.decompiler.flash.gui.editor.LineMarkedEditorPane;
import com.jpexs.decompiler.flash.gui.editor.LinkHandler;
import com.jpexs.decompiler.flash.gui.editor.ScrollbarOverlay;
import com.jpexs.decompiler.flash.gui.editor.TrackRectSubstanceScrollbarUI;
import com.jpexs.decompiler.flash.gui.editor.WavyUnderLinePainter;
import com.jpexs.decompiler.flash.simpleparser.SimpleParseException;
import com.jpexs.decompiler.flash.simpleparser.SimpleParser;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseEvent;
@@ -41,7 +33,6 @@ import java.util.Map;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JEditorPane;
import javax.swing.JLayer;
@@ -69,9 +60,9 @@ import jsyntaxpane.util.Configuration;
import org.pushingpixels.substance.internal.ui.SubstanceScrollBarUI;
/**
* This class highlights Variable tokens of ActionScript 1/2
* This class highlights Variable and error tokens.
*/
public class ActionVariableMarker implements SyntaxComponent, CaretListener, PropertyChangeListener, DocumentListener, LinkHandler {
public class VariableMarker implements SyntaxComponent, CaretListener, PropertyChangeListener, DocumentListener, LinkHandler {
public static final String DEFAULT_TOKENTYPES = "IDENTIFIER, KEYWORD, REGEX";
public static final String PROPERTY_COLOR = "ActionVariableMarker.Color";
@@ -88,8 +79,6 @@ public class ActionVariableMarker implements SyntaxComponent, CaretListener, Pro
private Markers.SimpleMarker errorMarker;
private Status status;
private Map<Integer, String> errors = new LinkedHashMap<>();
private boolean errorsShown = false;
public static final long ERROR_DELAY = 2000;
private Timer errorsTimer;
@@ -109,7 +98,7 @@ public class ActionVariableMarker implements SyntaxComponent, CaretListener, Pro
/**
* Constructs a new Token highlighter
*/
public ActionVariableMarker() {
public VariableMarker() {
}
@Override
@@ -145,7 +134,6 @@ public class ActionVariableMarker implements SyntaxComponent, CaretListener, Pro
public void removeErrorMarkers() {
Markers.removeMarkers(pane, errorMarker);
errorsShown = false;
scrollbarOverlay.removeMarkers(SCROLLBAR_ERROR_COLOR);
}
@@ -206,7 +194,6 @@ public class ActionVariableMarker implements SyntaxComponent, CaretListener, Pro
}
layer.repaint();
doc.readUnlock();
errorsShown = true;
}
/**
@@ -348,7 +335,7 @@ public class ActionVariableMarker implements SyntaxComponent, CaretListener, Pro
scrollPane.getVerticalScrollBar().setUI(originalScrollBarUI);
}
private static final Logger LOG = Logger.getLogger(ActionVariableMarker.class.getName());
private static final Logger LOG = Logger.getLogger(VariableMarker.class.getName());
@Override
public void propertyChange(PropertyChangeEvent evt) {
@@ -373,30 +360,28 @@ public class ActionVariableMarker implements SyntaxComponent, CaretListener, Pro
String fullText = sDoc.getText(0, sDoc.getLength());
SWF swf = null;
if (pane instanceof DebuggableEditorPane) {
DebuggableEditorPane dpane = (DebuggableEditorPane) pane;
swf = dpane.getSwf();
if (!(pane instanceof LineMarkedEditorPane)) {
return;
}
if (swf == null) {
SimpleParser parser = ((LineMarkedEditorPane) pane).getParser();
if (parser == null) {
return;
}
Map<Integer, List<Integer>> newDefinitionPosToReferences = new LinkedHashMap<>();
Map<Integer, Integer> newReferenceToDefinition = new LinkedHashMap<>();
ActionScript2VariableParser varParser = new ActionScript2VariableParser(swf);
List<ActionVariableParseException> newErrors = new ArrayList<>();
varParser.parse(fullText, newDefinitionPosToReferences, newReferenceToDefinition, newErrors);
List<SimpleParseException> newErrors = new ArrayList<>();
parser.parse(fullText, newDefinitionPosToReferences, newReferenceToDefinition, newErrors);
definitionPosToReferences = newDefinitionPosToReferences;
referenceToDefinition = newReferenceToDefinition;
for (ActionVariableParseException ex : newErrors) {
for (SimpleParseException ex : newErrors) {
errors.put((int) ex.position, ex.getMessage());
}
} catch (BadLocationException | IOException | InterruptedException ex) {
definitionPosToReferences.clear();
referenceToDefinition.clear();
//ex.printStackTrace();
} catch (ActionParseException ex) {
} catch (SimpleParseException ex) {
definitionPosToReferences.clear();
referenceToDefinition.clear();
errors.put((int) ex.position, ex.getMessage());