diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java
index 2ee2234fb..d68c6c1af 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java
@@ -155,7 +155,7 @@ import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
import com.jpexs.decompiler.flash.tags.DefineText2Tag;
import com.jpexs.decompiler.flash.tags.DefineTextTag;
import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag;
-import com.jpexs.decompiler.flash.tags.DoABCDefineTag;
+import com.jpexs.decompiler.flash.tags.DoABC2Tag;
import com.jpexs.decompiler.flash.tags.DoABCTag;
import com.jpexs.decompiler.flash.tags.DoActionTag;
import com.jpexs.decompiler.flash.tags.DoInitActionTag;
@@ -1268,7 +1268,7 @@ public class SWFInputStream implements AutoCloseable {
case 24:
ret = new ProtectTag(sis, data);
break;
- //case 25: PathsArePostscript
+ //case 25: PathsArePostScript
case 26:
ret = new PlaceObject2Tag(sis, data);
break;
@@ -1297,7 +1297,7 @@ public class SWFInputStream implements AutoCloseable {
case 37:
ret = new DefineEditTextTag(sis, data);
break;
- //case 38: DefineVideo
+ //case 38: DefineMouseTarget (DefineVideo?)
case 39:
ret = new DefineSpriteTag(sis, level, data, parallel, skipUnusualTags);
break;
@@ -1316,14 +1316,14 @@ public class SWFInputStream implements AutoCloseable {
case 46:
ret = new DefineMorphShapeTag(sis, data);
break;
- //case 47: GenerateFrame
+ //case 47: FrameTag
case 48:
ret = new DefineFont2Tag(sis, data);
break;
- //case 49: GeneratorCommand
- //case 50: DefineCommandObject
+ //case 49: GenCommand
+ //case 50: DefineCommandObj
//case 51: CharacterSet
- //case 52: ExternalFont
+ //case 52: FontRef
//case 53: DefineFunction
//case 54: PlaceFunction
//case 55: GenTagObject
@@ -1392,9 +1392,10 @@ public class SWFInputStream implements AutoCloseable {
case 78:
ret = new DefineScalingGridTag(sis, data);
break;
- //case 79-81:
+ //case 79: DefineDeviceVideo
+ //case 80-81:
case 82:
- ret = new DoABCDefineTag(sis, data);
+ ret = new DoABC2Tag(sis, data);
break;
case 83:
ret = new DefineShape4Tag(sis, data, lazy);
@@ -1402,7 +1403,7 @@ public class SWFInputStream implements AutoCloseable {
case 84:
ret = new DefineMorphShape2Tag(sis, data);
break;
- //case 85:
+ //case 85: PlaceImagePrivate
case 86:
ret = new DefineSceneAndFrameLabelDataTag(sis, data);
break;
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java
index d3d5d869f..cb9f3624b 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java
@@ -1,2344 +1,2121 @@
-/* The following code was generated by JFlex 1.6.0 */
-
-/*
- * Copyright (C) 2010-2015 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.abc.avm2.parser.script;
-
-import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Stack;
-
-/**
- * This class is a scanner generated by
- * JFlex 1.6.0
- * from the specification file
- * C:/Projects/FFDec/jpexs-decompiler/libsrc/ffdec_lib/lexers/actionscript3_script.flex
- */
-public final class ActionScriptLexer {
-
- /**
- * This character denotes the end of file
- */
- public static final int YYEOF = -1;
-
- /**
- * initial size of the lookahead buffer
- */
- private static final int ZZ_BUFFERSIZE = 16384;
-
- /**
- * lexical states
- */
- public static final int YYINITIAL = 0;
-
- public static final int STRING = 2;
-
- public static final int CHARLITERAL = 4;
-
- public static final int XMLOPENTAG = 6;
-
- public static final int XMLOPENTAGATTRIB = 8;
-
- public static final int XMLINSTROPENTAG = 10;
-
- public static final int XMLINSTRATTRIB = 12;
-
- public static final int XMLCDATA = 14;
-
- public static final int XMLCOMMENT = 16;
-
- public static final int XML = 18;
-
- public static final int OIDENTIFIER = 20;
-
- /**
- * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
- * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
- * at the beginning of a line
- * l is of the form l = 2*k, k a non negative integer
- */
- private static final int ZZ_LEXSTATE[] = {
- 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7,
- 8, 8, 9, 9, 10, 10
- };
-
- /**
- * Translates characters to character classes
- */
- private static final String ZZ_CMAP_PACKED
- = "\11\0\1\13\1\2\1\113\1\3\1\1\22\0\1\13\1\14\1\33"
- + "\1\0\1\6\1\110\1\105\1\34\1\76\1\77\1\5\1\45\1\103"
- + "\1\15\1\11\1\4\1\35\3\41\4\42\2\21\1\17\1\102\1\12"
- + "\1\32\1\16\1\23\1\111\1\27\1\20\1\25\1\26\1\43\1\20"
- + "\2\10\1\74\4\10\1\75\5\10\1\30\3\10\1\37\2\10\1\24"
- + "\1\46\1\31\1\107\1\10\1\0\1\52\1\50\1\54\1\63\1\44"
- + "\1\40\1\73\1\66\1\61\1\10\1\53\1\64\1\71\1\57\1\56"
- + "\1\67\1\10\1\51\1\55\1\60\1\62\1\72\1\65\1\36\1\70"
- + "\1\10\1\100\1\106\1\101\1\104\6\0\1\113\41\0\1\47\2\0"
- + "\1\6\12\0\1\6\1\0\1\22\2\0\1\6\5\0\2\6\1\112"
- + "\24\6\1\0\37\6\1\0\u01ca\6\4\0\14\6\16\0\5\6\7\0"
- + "\1\6\1\0\1\6\21\0\160\7\5\6\1\0\2\6\2\0\4\6"
- + "\1\0\1\6\6\0\1\6\1\0\3\6\1\0\1\6\1\0\24\6"
- + "\1\0\123\6\1\0\213\6\1\0\5\7\2\0\246\6\1\0\46\6"
- + "\2\0\1\6\7\0\47\6\11\0\55\7\1\0\1\7\1\0\2\7"
- + "\1\0\2\7\1\0\1\7\10\0\33\6\5\0\3\6\35\0\13\7"
- + "\5\0\53\6\37\7\4\0\2\6\1\7\143\6\1\0\1\6\7\7"
- + "\2\0\6\7\2\6\2\7\1\0\4\7\2\6\12\7\3\6\2\0"
- + "\1\6\20\0\1\6\1\7\36\6\33\7\2\0\131\6\13\7\1\6"
- + "\16\0\12\7\41\6\11\7\2\6\4\0\1\6\5\0\26\6\4\7"
- + "\1\6\11\7\1\6\3\7\1\6\5\7\22\0\31\6\3\7\104\0"
- + "\23\6\61\0\40\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6"
- + "\2\7\2\0\12\7\1\0\20\6\3\7\1\0\10\6\2\0\2\6"
- + "\2\0\26\6\1\0\7\6\1\0\1\6\3\0\4\6\2\0\1\7"
- + "\1\6\7\7\2\0\2\7\2\0\3\7\1\6\10\0\1\7\4\0"
- + "\2\6\1\0\3\6\2\7\2\0\12\7\2\6\17\0\3\7\1\0"
- + "\6\6\4\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0"
- + "\2\6\1\0\2\6\2\0\1\7\1\0\5\7\4\0\2\7\2\0"
- + "\3\7\3\0\1\7\7\0\4\6\1\0\1\6\7\0\14\7\3\6"
- + "\1\7\13\0\3\7\1\0\11\6\1\0\3\6\1\0\26\6\1\0"
- + "\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\10\7\1\0"
- + "\3\7\1\0\3\7\2\0\1\6\17\0\2\6\2\7\2\0\12\7"
- + "\21\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0\7\6"
- + "\1\0\2\6\1\0\5\6\2\0\1\7\1\6\7\7\2\0\2\7"
- + "\2\0\3\7\10\0\2\7\4\0\2\6\1\0\3\6\2\7\2\0"
- + "\12\7\1\0\1\6\20\0\1\7\1\6\1\0\6\6\3\0\3\6"
- + "\1\0\4\6\3\0\2\6\1\0\1\6\1\0\2\6\3\0\2\6"
- + "\3\0\3\6\3\0\14\6\4\0\5\7\3\0\3\7\1\0\4\7"
- + "\2\0\1\6\6\0\1\7\16\0\12\7\20\0\4\7\1\0\10\6"
- + "\1\0\3\6\1\0\27\6\1\0\20\6\3\0\1\6\7\7\1\0"
- + "\3\7\1\0\4\7\7\0\2\7\1\0\2\6\6\0\2\6\2\7"
- + "\2\0\12\7\21\0\3\7\1\0\10\6\1\0\3\6\1\0\27\6"
- + "\1\0\12\6\1\0\5\6\2\0\1\7\1\6\7\7\1\0\3\7"
- + "\1\0\4\7\7\0\2\7\7\0\1\6\1\0\2\6\2\7\2\0"
- + "\12\7\1\0\2\6\16\0\3\7\1\0\10\6\1\0\3\6\1\0"
- + "\51\6\2\0\1\6\7\7\1\0\3\7\1\0\4\7\1\6\10\0"
- + "\1\7\10\0\2\6\2\7\2\0\12\7\12\0\6\6\2\0\2\7"
- + "\1\0\22\6\3\0\30\6\1\0\11\6\1\0\1\6\2\0\7\6"
- + "\3\0\1\7\4\0\6\7\1\0\1\7\1\0\10\7\6\0\12\7"
- + "\2\0\2\7\15\0\60\6\1\7\2\6\7\7\5\0\7\6\10\7"
- + "\1\0\12\7\47\0\2\6\1\0\1\6\2\0\2\6\1\0\1\6"
- + "\2\0\1\6\6\0\4\6\1\0\7\6\1\0\3\6\1\0\1\6"
- + "\1\0\1\6\2\0\2\6\1\0\4\6\1\7\2\6\6\7\1\0"
- + "\2\7\1\6\2\0\5\6\1\0\1\6\1\0\6\7\2\0\12\7"
- + "\2\0\4\6\40\0\1\6\27\0\2\7\6\0\12\7\13\0\1\7"
- + "\1\0\1\7\1\0\1\7\4\0\2\7\10\6\1\0\44\6\4\0"
- + "\24\7\1\0\2\7\5\6\13\7\1\0\44\7\11\0\1\7\71\0"
- + "\53\6\24\7\1\6\12\7\6\0\6\6\4\7\4\6\3\7\1\6"
- + "\3\7\2\6\7\7\3\6\4\7\15\6\14\7\1\6\17\7\2\0"
- + "\46\6\1\0\1\6\5\0\1\6\2\0\53\6\1\0\u014d\6\1\0"
- + "\4\6\2\0\7\6\1\0\1\6\1\0\4\6\2\0\51\6\1\0"
- + "\4\6\2\0\41\6\1\0\4\6\2\0\7\6\1\0\1\6\1\0"
- + "\4\6\2\0\17\6\1\0\71\6\1\0\4\6\2\0\103\6\2\0"
- + "\3\7\40\0\20\6\20\0\125\6\14\0\u026c\6\2\0\21\6\1\0"
- + "\32\6\5\0\113\6\3\0\3\7\10\6\7\0\15\6\1\0\4\6"
- + "\3\7\13\0\22\6\3\7\13\0\22\6\2\7\14\0\15\6\1\0"
- + "\3\6\1\0\2\7\14\0\64\6\40\7\3\0\1\6\4\0\1\6"
- + "\1\7\2\0\12\7\41\0\3\7\2\0\12\7\6\0\130\6\10\0"
- + "\51\6\1\7\1\6\5\0\106\6\12\0\37\6\1\0\14\7\4\0"
- + "\14\7\12\0\12\7\36\6\2\0\5\6\13\0\54\6\4\0\21\7"
- + "\7\6\2\7\6\0\12\7\46\0\27\6\5\7\4\0\65\6\12\7"
- + "\1\0\35\7\2\0\13\7\6\0\12\7\15\0\1\6\10\0\16\7"
- + "\102\0\5\7\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0"
- + "\3\7\36\6\15\7\2\6\12\7\54\6\16\7\14\0\44\6\24\7"
- + "\10\0\12\7\3\0\3\6\12\7\44\6\122\0\3\7\1\0\25\7"
- + "\4\6\1\7\4\6\3\7\2\6\1\0\2\7\6\0\300\6\66\7"
- + "\6\0\4\7\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6\2\0"
- + "\10\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\37\6\2\0"
- + "\65\6\1\0\7\6\1\0\1\6\3\0\3\6\1\0\7\6\3\0"
- + "\4\6\2\0\6\6\4\0\15\6\5\0\3\6\1\0\7\6\3\0"
- + "\14\0\2\0\32\0\1\113\1\113\25\0\2\7\23\0\1\7\33\0"
- + "\1\0\1\6\15\0\1\6\20\0\15\6\63\0\15\7\4\0\1\7"
- + "\3\0\14\7\21\0\1\6\4\0\1\6\2\0\12\6\1\0\1\6"
- + "\3\0\5\6\6\0\1\6\1\0\1\6\1\0\1\6\1\0\4\6"
- + "\1\0\13\6\2\0\4\6\5\0\5\6\4\0\1\6\21\0\43\7"
- + "\2\6\4\7\7\0\u0a70\0\57\6\1\0\57\6\1\0\205\6\6\0"
- + "\4\6\3\7\2\6\14\0\46\6\1\0\1\6\5\0\1\6\2\0"
- + "\70\6\7\0\1\6\17\0\1\7\27\6\11\0\7\6\1\0\7\6"
- + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6"
- + "\1\0\7\6\1\0\40\7\57\0\1\6\u01c0\0\21\0\4\0\2\6"
- + "\1\7\31\0\17\7\1\0\5\6\2\0\3\7\2\6\4\0\126\6"
- + "\2\0\2\7\2\0\3\6\1\0\132\6\1\0\4\6\5\0\51\6"
- + "\3\0\136\6\21\0\33\6\65\0\20\6\u0200\0\u19b6\6\112\0\u51cd\6"
- + "\63\0\u048d\6\103\0\56\6\2\0\u010d\6\3\0\20\6\12\7\2\6"
- + "\24\0\57\6\1\7\4\0\12\7\1\0\37\6\1\0\1\7\106\6"
- + "\14\7\45\0\11\6\2\0\147\6\2\0\4\6\1\0\36\6\2\0"
- + "\2\6\105\0\13\6\1\7\3\6\1\7\4\6\1\7\27\6\5\7"
- + "\30\0\64\6\14\0\2\7\62\6\21\7\13\0\12\7\6\0\22\7"
- + "\6\6\3\0\1\6\4\0\12\7\34\6\10\7\2\0\27\6\15\7"
- + "\14\0\35\6\3\0\4\7\57\6\16\7\16\0\1\6\12\7\6\0"
- + "\5\6\1\7\12\6\12\7\5\6\1\0\51\6\16\7\11\0\3\6"
- + "\1\7\10\6\2\7\2\0\12\7\6\0\27\6\3\0\1\6\3\7"
- + "\62\6\1\7\1\6\3\7\2\6\2\7\5\6\2\7\1\6\1\7"
- + "\1\6\30\0\3\6\2\0\13\6\5\7\2\0\3\6\2\7\12\0"
- + "\6\6\2\0\6\6\2\0\6\6\11\0\7\6\1\0\7\6\1\0"
- + "\53\6\1\0\4\6\4\0\2\6\132\0\43\6\10\7\1\0\2\7"
- + "\2\0\12\7\6\0\u2ba4\6\14\0\27\6\4\0\61\6\4\0\u1800\0"
- + "\u0900\0\u016e\6\2\0\152\6\46\0\7\6\14\0\5\6\5\0\1\6"
- + "\1\7\12\6\1\0\15\6\1\0\5\6\1\0\1\6\1\0\2\6"
- + "\1\0\2\6\1\0\154\6\41\0\u016b\6\22\0\100\6\2\0\66\6"
- + "\10\0\40\0\14\6\4\0\20\7\20\0\16\7\5\0\2\7\30\0"
- + "\3\7\40\0\5\6\1\0\207\6\23\0\12\7\7\0\32\6\4\0"
- + "\1\7\1\0\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0"
- + "\6\6\2\0\3\6\41\0\2\0\14\6\1\0\32\6\1\0\23\6"
- + "\1\0\2\6\1\0\17\6\2\0\16\6\42\0\173\6\105\0\65\7"
- + "\210\0\1\7\202\0\35\6\3\0\61\6\17\0\1\7\37\0\40\6"
- + "\20\0\21\6\1\7\10\6\1\7\5\0\46\6\5\7\5\0\36\6"
- + "\2\0\44\6\4\0\10\6\1\0\5\7\52\0\236\6\2\0\12\7"
- + "\126\0\50\6\10\0\64\6\234\0\u0137\6\11\0\26\6\12\0\10\6"
- + "\230\0\6\6\2\0\1\6\1\0\54\6\1\0\2\6\3\0\1\6"
- + "\2\0\27\6\12\0\27\6\11\0\37\6\141\0\26\6\12\0\32\6"
- + "\106\0\70\6\6\0\2\6\100\0\1\6\3\7\1\0\2\7\5\0"
- + "\4\7\4\6\1\0\3\6\1\0\33\6\4\0\3\7\4\0\1\7"
- + "\40\0\35\6\3\0\35\6\43\0\10\6\1\0\34\6\2\7\31\0"
- + "\66\6\12\0\26\6\12\0\23\6\15\0\22\6\156\0\111\6\u03b7\0"
- + "\3\7\65\6\17\7\37\0\12\7\17\0\4\7\55\6\13\7\25\0"
- + "\31\6\7\0\12\7\6\0\3\7\44\6\16\7\1\0\12\7\20\0"
- + "\43\6\1\7\2\0\1\6\11\0\3\7\60\6\16\7\4\6\13\0"
- + "\12\7\1\6\45\0\22\6\1\0\31\6\14\7\170\0\57\6\14\7"
- + "\5\0\12\7\7\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6"
- + "\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\7\7"
- + "\2\0\2\7\2\0\3\7\11\0\1\7\5\0\5\6\2\7\2\0"
- + "\7\7\3\0\5\7\u010b\0\60\6\24\7\2\6\1\0\1\6\10\0"
- + "\12\7\246\0\57\6\7\7\2\0\11\7\77\0\60\6\21\7\3\0"
- + "\1\6\13\0\12\7\46\0\53\6\15\7\10\0\12\7\u01d6\0\100\6"
- + "\12\7\25\0\1\6\u01c0\0\71\6\u0507\0\u0399\6\147\0\157\7\u0b91\0"
- + "\u042f\6\u33d1\0\u0239\6\7\0\37\6\1\0\12\7\146\0\36\6\2\0"
- + "\5\7\13\0\60\6\7\7\11\0\4\6\14\0\12\7\11\0\25\6"
- + "\5\0\23\6\u0370\0\105\6\13\0\1\6\56\7\20\0\4\7\15\6"
- + "\u4060\0\2\6\u0bfe\0\153\6\5\0\15\6\3\0\11\6\7\0\12\6"
- + "\3\0\2\7\u14c6\0\5\7\3\0\6\7\10\0\10\7\2\0\7\7"
- + "\36\0\4\7\224\0\3\7\u01bb\0\125\6\1\0\107\6\1\0\2\6"
- + "\2\0\1\6\2\0\2\6\2\0\4\6\1\0\14\6\1\0\1\6"
- + "\1\0\7\6\1\0\101\6\1\0\4\6\2\0\10\6\1\0\7\6"
- + "\1\0\34\6\1\0\4\6\1\0\5\6\1\0\1\6\3\0\7\6"
- + "\1\0\u0154\6\2\0\31\6\1\0\31\6\1\0\37\6\1\0\31\6"
- + "\1\0\37\6\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6"
- + "\1\0\31\6\1\0\10\6\2\0\62\7\u1000\0\305\6\13\0\7\7"
- + "\u0529\0\4\6\1\0\33\6\1\0\2\6\1\0\1\6\2\0\1\6"
- + "\1\0\12\6\1\0\4\6\1\0\1\6\1\0\1\6\6\0\1\6"
- + "\4\0\1\6\1\0\1\6\1\0\1\6\1\0\3\6\1\0\2\6"
- + "\1\0\1\6\2\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6"
- + "\1\0\1\6\1\0\2\6\1\0\1\6\2\0\4\6\1\0\7\6"
- + "\1\0\4\6\1\0\4\6\1\0\1\6\1\0\12\6\1\0\21\6"
- + "\5\0\3\6\1\0\5\6\1\0\21\6\u1144\0\ua6d7\6\51\0\u1035\6"
- + "\13\0\336\6\u3fe2\0\u021e\6\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u06ed\0"
- + "\360\7\uffff\0\uffff\0\ufe12\0";
-
- /**
- * Translates characters to character classes
- */
- private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
-
- /**
- * Translates DFA states to action switch labels.
- */
- private static final int[] ZZ_ACTION = zzUnpackAction();
-
- private static final String ZZ_ACTION_PACKED_0
- = "\13\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7"
- + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17"
- + "\1\20\1\21\1\22\1\23\1\15\2\6\1\24\1\25"
- + "\21\6\1\26\1\27\1\30\1\31\1\32\1\33\1\34"
- + "\1\35\1\36\1\37\1\40\1\41\1\42\2\43\1\44"
- + "\1\1\1\42\2\45\2\46\1\42\2\1\1\47\1\50"
- + "\1\1\1\51\2\1\1\52\1\1\1\53\2\42\2\54"
- + "\2\42\1\55\1\42\1\1\1\56\1\3\1\0\1\57"
- + "\1\60\1\61\1\62\1\63\1\64\1\65\1\66\1\67"
- + "\1\70\1\71\1\72\1\73\1\74\1\75\1\76\1\0"
- + "\1\77\1\63\1\100\1\0\2\100\7\6\1\101\1\102"
- + "\2\6\1\103\16\6\1\104\1\105\1\106\4\6\1\107"
- + "\13\6\1\110\1\111\1\112\1\113\1\114\1\115\1\116"
- + "\1\117\1\120\1\116\1\121\1\122\1\123\1\124\1\125"
- + "\1\126\1\116\1\127\1\0\1\130\1\0\1\131\1\0"
- + "\1\132\1\133\1\0\1\134\4\0\1\135\2\0\1\136"
- + "\4\137\2\3\2\0\1\140\1\141\1\142\1\143\1\144"
- + "\1\0\1\63\1\145\2\146\1\100\1\6\1\147\13\6"
- + "\1\150\4\6\1\151\4\6\1\152\6\6\1\153\12\6"
- + "\1\154\1\6\1\155\1\6\1\156\3\0\1\134\1\157"
- + "\1\160\1\0\1\161\2\0\1\162\1\163\1\164\1\0"
- + "\1\165\1\146\1\100\4\6\1\166\1\167\2\6\1\170"
- + "\12\6\1\171\1\172\1\6\1\173\11\6\1\174\5\6"
- + "\1\175\1\6\1\176\2\0\1\177\1\200\1\0\1\146"
- + "\1\100\1\201\1\202\2\6\1\203\1\6\1\204\1\205"
- + "\1\6\1\206\1\6\1\207\4\6\1\210\11\6\1\211"
- + "\5\6\1\0\1\146\1\100\3\6\1\212\1\6\1\213"
- + "\1\214\1\6\1\215\1\6\1\216\3\6\1\217\3\6"
- + "\1\220\4\6\1\221\1\6\1\0\1\146\1\100\1\222"
- + "\1\6\1\223\10\6\1\224\1\225\1\6\1\226\1\227"
- + "\1\6\1\0\1\146\1\100\1\230\1\231\1\232\3\6"
- + "\1\233\3\6\1\234\1\0\1\146\1\100\1\235\1\6"
- + "\1\236\1\6\1\237\1\240\1\241\1\146\1\100\1\242"
- + "\1\243\6\100";
-
- private static int[] zzUnpackAction() {
- int[] result = new int[446];
- int offset = 0;
- offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
- return result;
- }
-
- private static int zzUnpackAction(String packed, int offset, int[] result) {
- int i = 0; /* index in packed string */
-
- int j = offset; /* index in unpacked array */
-
- int l = packed.length();
- while (i < l) {
- int count = packed.charAt(i++);
- int value = packed.charAt(i++);
- do {
- result[j++] = value;
- } while (--count > 0);
- }
- return j;
- }
-
- /**
- * Translates a state to a row index in the transition table
- */
- private static final int[] ZZ_ROWMAP = zzUnpackRowMap();
-
- private static final String ZZ_ROWMAP_PACKED_0
- = "\0\0\0\114\0\230\0\344\0\u0130\0\u017c\0\u01c8\0\u0214"
- + "\0\u0260\0\u02ac\0\u02f8\0\u0344\0\u0390\0\u0344\0\u03dc\0\u0428"
- + "\0\u0474\0\u04c0\0\u050c\0\u0558\0\u05a4\0\u05f0\0\u063c\0\u0688"
- + "\0\u06d4\0\u0344\0\u0344\0\u0344\0\u0720\0\u0344\0\u0344\0\u076c"
- + "\0\u07b8\0\u0804\0\u0850\0\u0344\0\u089c\0\u08e8\0\u0934\0\u0980"
- + "\0\u09cc\0\u0a18\0\u0a64\0\u0ab0\0\u0afc\0\u0b48\0\u0b94\0\u0be0"
- + "\0\u0c2c\0\u0c78\0\u0cc4\0\u0d10\0\u0d5c\0\u0344\0\u0344\0\u0344"
- + "\0\u0344\0\u0344\0\u0344\0\u0344\0\u0da8\0\u0df4\0\u0e40\0\u0e8c"
- + "\0\u0344\0\u0ed8\0\u0f24\0\u0344\0\u0344\0\u0f70\0\u0fbc\0\u1008"
- + "\0\u0344\0\u1054\0\u0344\0\u10a0\0\u10ec\0\u1138\0\u0344\0\u0344"
- + "\0\u1184\0\u0344\0\u11d0\0\u121c\0\u0344\0\u1268\0\u0344\0\u0344"
- + "\0\u12b4\0\u1300\0\u0344\0\u134c\0\u1398\0\u0344\0\u13e4\0\u1430"
- + "\0\u0344\0\u147c\0\u14c8\0\u0344\0\u0344\0\u1514\0\u0344\0\u1560"
- + "\0\u0344\0\u15ac\0\u15f8\0\u0344\0\u0344\0\u1644\0\u0344\0\u0344"
- + "\0\u1690\0\u0344\0\u0344\0\u16dc\0\u1728\0\u1774\0\u17c0\0\u180c"
- + "\0\u1858\0\u18a4\0\u18f0\0\u193c\0\u1988\0\u19d4\0\u1a20\0\u1a6c"
- + "\0\u1ab8\0\u0344\0\u0344\0\u1b04\0\u1b50\0\u04c0\0\u1b9c\0\u1be8"
- + "\0\u1c34\0\u1c80\0\u1ccc\0\u1d18\0\u1d64\0\u1db0\0\u1dfc\0\u1e48"
- + "\0\u1e94\0\u1ee0\0\u1f2c\0\u1f78\0\u04c0\0\u04c0\0\u1fc4\0\u2010"
- + "\0\u205c\0\u20a8\0\u20f4\0\u04c0\0\u2140\0\u218c\0\u21d8\0\u2224"
- + "\0\u2270\0\u22bc\0\u2308\0\u2354\0\u23a0\0\u23ec\0\u2438\0\u0344"
- + "\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344"
- + "\0\u2484\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u24d0"
- + "\0\u0344\0\u1138\0\u0344\0\u1184\0\u0344\0\u11d0\0\u0344\0\u0344"
- + "\0\u1268\0\u251c\0\u2568\0\u25b4\0\u2600\0\u264c\0\u2698\0\u26e4"
- + "\0\u2730\0\u0344\0\u0344\0\u2484\0\u24d0\0\u277c\0\u27c8\0\u0344"
- + "\0\u2814\0\u2860\0\u0344\0\u0344\0\u0344\0\u28ac\0\u0344\0\u28f8"
- + "\0\u28f8\0\u0344\0\u2944\0\u180c\0\u2990\0\u29dc\0\u04c0\0\u2a28"
- + "\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u2ba4\0\u2bf0\0\u2c3c\0\u2c88"
- + "\0\u2cd4\0\u2d20\0\u04c0\0\u2d6c\0\u2db8\0\u2e04\0\u2e50\0\u04c0"
- + "\0\u2e9c\0\u2ee8\0\u2f34\0\u2f80\0\u04c0\0\u2fcc\0\u3018\0\u3064"
- + "\0\u30b0\0\u30fc\0\u3148\0\u04c0\0\u3194\0\u31e0\0\u322c\0\u3278"
- + "\0\u32c4\0\u3310\0\u335c\0\u33a8\0\u33f4\0\u3440\0\u04c0\0\u348c"
- + "\0\u04c0\0\u34d8\0\u04c0\0\u3524\0\u3570\0\u251c\0\u0344\0\u0344"
- + "\0\u0344\0\u35bc\0\u0344\0\u3608\0\u3654\0\u36a0\0\u0344\0\u0344"
- + "\0\u36ec\0\u0344\0\u3738\0\u3784\0\u37d0\0\u381c\0\u3868\0\u38b4"
- + "\0\u04c0\0\u04c0\0\u3900\0\u394c\0\u04c0\0\u3998\0\u39e4\0\u3a30"
- + "\0\u3a7c\0\u3ac8\0\u3b14\0\u3b60\0\u3bac\0\u3bf8\0\u3c44\0\u04c0"
- + "\0\u04c0\0\u3c90\0\u04c0\0\u3cdc\0\u3d28\0\u3d74\0\u3dc0\0\u3e0c"
- + "\0\u3e58\0\u3ea4\0\u3ef0\0\u3f3c\0\u04c0\0\u3f88\0\u3fd4\0\u4020"
- + "\0\u406c\0\u40b8\0\u04c0\0\u4104\0\u0344\0\u2484\0\u4150\0\u0344"
- + "\0\u0344\0\u419c\0\u41e8\0\u4234\0\u04c0\0\u4280\0\u42cc\0\u4318"
- + "\0\u04c0\0\u4364\0\u04c0\0\u04c0\0\u43b0\0\u04c0\0\u43fc\0\u04c0"
- + "\0\u4448\0\u4494\0\u44e0\0\u452c\0\u04c0\0\u4578\0\u45c4\0\u4610"
- + "\0\u465c\0\u46a8\0\u46f4\0\u4740\0\u478c\0\u47d8\0\u04c0\0\u4824"
- + "\0\u4870\0\u48bc\0\u4908\0\u4954\0\u49a0\0\u49ec\0\u4a38\0\u4a84"
- + "\0\u4ad0\0\u4b1c\0\u04c0\0\u4b68\0\u04c0\0\u04c0\0\u4bb4\0\u04c0"
- + "\0\u4c00\0\u04c0\0\u4c4c\0\u4c98\0\u4ce4\0\u04c0\0\u4d30\0\u4d7c"
- + "\0\u4dc8\0\u04c0\0\u4e14\0\u4e60\0\u4eac\0\u4ef8\0\u04c0\0\u4f44"
- + "\0\u4f90\0\u4fdc\0\u5028\0\u04c0\0\u5074\0\u04c0\0\u50c0\0\u510c"
- + "\0\u5158\0\u51a4\0\u51f0\0\u523c\0\u5288\0\u52d4\0\u04c0\0\u04c0"
- + "\0\u5320\0\u04c0\0\u04c0\0\u536c\0\u53b8\0\u5404\0\u5450\0\u04c0"
- + "\0\u04c0\0\u04c0\0\u549c\0\u54e8\0\u5534\0\u04c0\0\u5580\0\u55cc"
- + "\0\u5618\0\u04c0\0\u5664\0\u56b0\0\u56fc\0\u04c0\0\u5748\0\u04c0"
- + "\0\u5794\0\u04c0\0\u04c0\0\u0344\0\u0344\0\u57e0\0\u04c0\0\u04c0"
- + "\0\u582c\0\u5878\0\u58c4\0\u5910\0\u595c\0\u1774";
-
- private static int[] zzUnpackRowMap() {
- int[] result = new int[446];
- int offset = 0;
- offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
- return result;
- }
-
- private static int zzUnpackRowMap(String packed, int offset, int[] result) {
- int i = 0; /* index in packed string */
-
- int j = offset; /* index in unpacked array */
-
- int l = packed.length();
- while (i < l) {
- int high = packed.charAt(i++) << 16;
- result[j++] = high | packed.charAt(i++);
- }
- return j;
- }
-
- /**
- * The transition table of the DFA
- */
- private static final int[] ZZ_TRANS = zzUnpackTrans();
-
- private static final String ZZ_TRANS_PACKED_0
- = "\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\14"
- + "\1\22\1\23\1\24\1\17\1\25\1\26\1\27\1\30"
- + "\1\22\1\31\1\14\1\32\1\33\4\22\1\34\1\35"
- + "\1\36\1\37\1\40\2\22\1\41\2\31\1\22\1\42"
- + "\1\43\1\14\1\44\1\45\1\46\1\47\1\22\1\50"
- + "\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\22"
- + "\1\60\1\22\1\61\2\22\1\62\1\63\1\64\1\65"
- + "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"
- + "\1\76\1\77\1\100\1\101\1\22\1\14\1\102\1\103"
- + "\1\104\30\102\1\105\12\102\1\106\45\102\1\107\1\110"
- + "\1\111\31\107\1\105\11\107\1\106\45\107\1\14\1\112"
- + "\1\113\1\114\1\115\3\14\1\116\2\14\1\114\2\14"
- + "\1\117\2\116\4\14\4\116\5\14\3\116\2\14\2\116"
- + "\3\14\26\116\2\14\1\120\46\14\1\121\44\14\1\122"
- + "\14\14\1\112\1\113\1\114\4\14\1\123\2\14\1\114"
- + "\3\14\2\123\2\14\1\124\1\14\4\123\5\14\3\123"
- + "\2\14\2\123\3\14\26\123\2\14\1\125\46\14\1\126"
- + "\44\14\1\127\13\14\1\130\1\112\1\113\26\130\1\131"
- + "\63\130\1\132\1\133\12\130\1\134\77\130\1\112\1\113"
- + "\7\130\1\135\65\130\1\136\13\130\1\137\1\110\1\111"
- + "\43\137\1\140\1\141\44\137\116\0\1\16\114\0\1\17"
- + "\7\0\1\17\104\0\1\142\1\143\24\0\1\144\113\0"
- + "\1\145\67\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\26\22\14\0\1\22\12\0\1\146\1\147"
- + "\6\0\1\150\13\0\1\150\3\0\2\150\33\0\1\151"
- + "\25\0\1\152\1\0\1\153\4\0\2\152\4\0\4\152"
- + "\1\0\1\154\3\0\3\152\2\0\2\152\3\0\26\152"
- + "\2\0\1\155\45\0\1\156\76\0\1\157\14\0\1\160"
- + "\77\0\1\161\13\0\1\162\100\0\1\163\105\0\1\150"
- + "\7\0\1\31\13\0\1\31\3\0\2\31\2\164\101\0"
- + "\1\165\72\0\1\150\7\0\1\166\13\0\1\167\2\170"
- + "\1\0\1\171\1\172\2\164\55\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\2\22\1\173\3\22"
- + "\1\174\2\22\1\175\1\176\13\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\1\22\1\177"
- + "\6\22\3\0\2\22\1\200\11\22\1\201\11\22\14\0"
- + "\1\22\33\0\1\202\12\0\1\203\54\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\1\22\1\204"
- + "\24\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\7\22\1\205\3\0\26\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\5\22\1\206\20\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"
- + "\1\207\3\22\1\210\5\22\1\211\11\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"
- + "\1\212\3\0\10\22\1\213\1\22\1\214\2\22\1\215"
- + "\10\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\22\22\1\216\3\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\7\22\1\217\3\0\2\22\1\220\7\22\1\221\13\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\1\22\1\222\14\22\1\223\1\22"
- + "\1\224\5\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\3\22\1\225\4\22\3\0\5\22"
- + "\1\226\1\22\1\227\11\22\1\230\4\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\5\22\1\231\1\22\1\232\16\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"
- + "\1\233\3\0\6\22\1\234\11\22\1\235\5\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\11\22\1\236\4\22\1\237\7\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\1\22\1\240\1\241\7\22\1\242\13\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\2\22\1\243\3\22\1\244\17\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\7\22\1\245\3\0\26\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\7\22\1\246\16\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\2\22\1\247"
- + "\23\22\14\0\1\22\33\0\1\250\52\0\1\251\40\0"
- + "\1\252\53\0\1\253\37\0\1\254\113\0\1\255\61\0"
- + "\1\102\2\0\30\102\1\0\12\102\1\0\45\102\2\0"
- + "\1\104\111\0\1\256\3\0\27\256\1\257\1\260\1\256"
- + "\1\261\1\256\1\262\5\256\1\263\1\256\1\264\1\265"
- + "\5\256\1\266\1\267\1\256\1\270\30\256\1\0\1\107"
- + "\2\0\31\107\1\0\11\107\1\0\45\107\2\0\1\111"
- + "\113\0\1\113\114\0\1\114\7\0\1\114\116\0\1\271"
- + "\105\0\2\272\3\0\1\272\1\0\4\272\2\0\4\272"
- + "\1\0\1\273\2\0\10\272\3\0\26\272\16\0\1\274"
- + "\2\0\30\274\1\275\60\274\10\0\2\276\3\0\1\276"
- + "\1\0\4\276\2\0\4\276\1\0\1\277\2\0\10\276"
- + "\3\0\26\276\34\0\1\300\75\0\1\301\2\0\30\301"
- + "\1\302\1\303\57\301\31\0\1\304\64\0\1\133\126\0"
- + "\1\305\102\0\1\306\3\0\1\307\3\0\1\310\2\0"
- + "\2\307\2\0\1\311\1\0\4\307\5\0\3\307\2\0"
- + "\2\307\3\0\26\307\2\0\1\312\13\0\1\137\2\0"
- + "\43\137\2\0\44\137\1\313\3\0\32\313\1\314\1\313"
- + "\1\262\5\313\1\263\1\313\1\264\1\265\5\313\1\266"
- + "\1\267\1\313\1\315\27\313\1\316\1\0\1\142\1\317"
- + "\1\320\111\142\5\321\1\322\106\321\11\0\1\323\123\0"
- + "\1\150\13\0\1\150\3\0\2\150\2\164\57\0\2\152"
- + "\3\0\1\152\1\0\4\152\2\0\4\152\4\0\10\152"
- + "\3\0\26\152\50\0\1\324\113\0\1\325\77\0\1\326"
- + "\13\0\1\327\76\0\1\330\3\0\1\331\13\0\1\331"
- + "\3\0\2\331\2\0\1\330\100\0\1\332\72\0\1\150"
- + "\7\0\1\166\13\0\1\166\3\0\2\166\2\164\60\0"
- + "\1\150\7\0\1\166\13\0\1\167\3\0\1\171\1\172"
- + "\2\164\67\0\2\333\3\0\3\333\5\0\1\334\2\0"
- + "\5\333\3\0\1\333\1\0\1\333\1\0\1\333\6\0"
- + "\1\333\41\0\1\150\7\0\1\166\13\0\1\172\3\0"
- + "\2\172\2\164\60\0\1\150\7\0\1\166\13\0\1\335"
- + "\3\0\2\335\2\164\55\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\14\22\1\336\11\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\1\22\1\337\24\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\7\22\1\340\16\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\7\22\1\341"
- + "\16\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\10\22\1\342\15\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\4\22\1\343\21\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\5\22\1\344\20\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\7\22\1\345\3\0\26\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\10\22\1\346\15\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\5\22\1\347\2\22\1\350\15\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\7\22\1\351\16\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"
- + "\1\352\23\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\10\22\1\353\15\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\2\22\1\354\23\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\17\22\1\355\6\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\11\22"
- + "\1\356\14\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\7\22\1\357\3\0\26\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\15\22\1\360\10\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\10\22\1\361\10\22\1\362\4\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\14\22\1\363\11\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\12\22\1\364"
- + "\5\22\1\365\5\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\1\22\1\366"
- + "\7\22\1\367\14\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\17\22\1\370"
- + "\6\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\5\22\1\371\2\22\1\372"
- + "\15\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\17\22\1\373\6\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\7\22\1\374\3\0\26\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\13\22"
- + "\1\375\12\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\3\22\1\376\4\22\3\0\14\22"
- + "\1\377\11\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\7\22\1\u0100\16\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\10\22\1\u0101\15\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\11\22\1\u0102\14\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\6\22"
- + "\1\u0103\2\22\1\u0104\14\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\4\22"
- + "\1\u0105\21\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\1\u0106\25\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\1\22\1\u0107\24\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\11\22\1\u0108\14\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u0109"
- + "\15\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\3\22\1\u010a\4\22\3\0\26\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\25\22\1\u010b\14\0\1\22\21\0\2\u010c"
- + "\3\0\3\u010c\5\0\1\u010c\2\0\5\u010c\3\0\1\u010c"
- + "\1\0\1\u010c\1\0\1\u010c\6\0\1\u010c\50\0\2\u010d"
- + "\3\0\3\u010d\5\0\1\u010d\2\0\5\u010d\3\0\1\u010d"
- + "\1\0\1\u010d\1\0\1\u010d\6\0\1\u010d\30\0\1\u010e"
- + "\2\0\30\u010e\1\302\1\0\57\u010e\1\303\2\0\30\303"
- + "\1\u010f\60\303\16\0\1\u0110\113\0\1\u0111\105\0\1\u0112"
- + "\6\0\2\u0112\4\0\4\u0112\5\0\3\u0112\2\0\2\u0112"
- + "\3\0\26\u0112\2\0\1\u0113\23\0\2\307\3\0\1\307"
- + "\1\0\4\307\2\0\4\307\4\0\10\307\3\0\26\307"
- + "\33\0\1\u0114\6\0\1\u0115\77\0\1\u0116\6\0\2\u0116"
- + "\4\0\4\u0116\5\0\3\u0116\2\0\2\u0116\3\0\26\u0116"
- + "\2\0\1\u0117\62\0\1\u0118\46\0\1\320\111\0\5\321"
- + "\1\u0119\106\321\4\0\1\320\1\322\140\0\1\u011a\102\0"
- + "\1\331\13\0\1\331\3\0\2\331\71\0\2\u011b\3\0"
- + "\3\u011b\5\0\1\u011b\2\0\5\u011b\3\0\1\u011b\1\0"
- + "\1\u011b\1\0\1\u011b\6\0\1\u011b\41\0\1\150\7\0"
- + "\1\166\13\0\1\u011c\3\0\2\u011c\2\164\55\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\5\22"
- + "\1\u011d\20\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u011e\23\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\4\22\1\u011f\21\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"
- + "\1\u0120\3\0\26\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\16\22\1\u0121"
- + "\7\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\7\22\1\u0122\3\0\26\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\2\22\1\u0123\23\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\12\22"
- + "\1\u0124\13\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\7\22\1\u0125\3\0\26\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\4\22\1\u0126\21\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\5\22\1\u0127\2\22\1\u0128\15\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\5\22\1\u0129\20\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u012a"
- + "\15\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\7\22\1\u012b\3\0\26\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\10\22\1\u012c\15\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\1\22"
- + "\1\u012d\24\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\11\22\1\u012e\14\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\7\22\1\u012f\3\0\26\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\14\22\1\u0130\11\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\7\22\1\u0131\3\0\26\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\6\22\1\u0132\17\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\5\22\1\u0133\20\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\7\22\1\u0134\3\0"
- + "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\10\22\1\u0135\15\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\7\22\1\u0136\3\0\26\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\6\22"
- + "\1\u0137\5\22\1\u0138\11\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\7\22\1\u0139\3\0"
- + "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\2\22\1\u013a\23\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\7\22\1\u013b\3\0\26\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"
- + "\1\u013c\23\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\16\22\1\u013d\7\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\14\22\1\u013e\11\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\10\22\1\u013f\15\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\22\22"
- + "\1\u0140\3\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\3\22\1\u0141\22\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\14\22\1\u0142\11\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\13\22\1\u0143\12\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\11\22"
- + "\1\u0144\14\22\14\0\1\22\21\0\2\u0145\3\0\3\u0145"
- + "\5\0\1\u0145\2\0\5\u0145\3\0\1\u0145\1\0\1\u0145"
- + "\1\0\1\u0145\6\0\1\u0145\50\0\2\u0146\3\0\3\u0146"
- + "\5\0\1\u0146\2\0\5\u0146\3\0\1\u0146\1\0\1\u0146"
- + "\1\0\1\u0146\6\0\1\u0146\31\0\2\u0147\5\0\2\u0112"
- + "\1\0\1\u0147\1\0\1\u0112\1\u0148\4\u0112\2\0\4\u0112"
- + "\4\0\10\u0112\3\0\26\u0112\33\0\1\u0149\123\0\1\u014a"
- + "\76\0\2\u0116\3\0\1\u0116\1\0\4\u0116\2\0\4\u0116"
- + "\4\0\10\u0116\3\0\26\u0116\16\0\4\321\1\320\1\u0119"
- + "\106\321\20\0\2\u014b\3\0\3\u014b\5\0\1\u014b\2\0"
- + "\5\u014b\3\0\1\u014b\1\0\1\u014b\1\0\1\u014b\6\0"
- + "\1\u014b\41\0\1\150\7\0\1\166\13\0\1\u014c\3\0"
- + "\2\u014c\2\164\55\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\7\22\1\u014d\3\0\26\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\14\22\1\u014e\11\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u014f"
- + "\15\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\7\22\1\u0150\16\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\3\22\1\u0151\22\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\1\22\1\u0152\24\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\16\22\1\u0153"
- + "\7\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\10\22\1\u0154\15\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\11\22\1\u0155\14\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\5\22\1\u0156\20\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0157"
- + "\14\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\1\22\1\u0158\24\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\4\22\1\u0159\21\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\1\22\1\u015a\24\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\22\22\1\u015b"
- + "\3\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\5\22\1\u015c\20\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\15\22\1\u015d\10\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\6\22\1\u015e\17\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u015f"
- + "\23\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\1\22\1\u0160\24\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\1\22\1\u0161\24\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0162"
- + "\3\0\26\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\3\22\1\u0163\4\22\3\0\26\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\12\22\1\u0164\13\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\10\22\1\u0165\15\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\21\22"
- + "\1\u0166\4\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\7\22\1\u0167\3\0\26\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\7\22\1\u0168\3\0\26\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"
- + "\1\u0169\23\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u016a\23\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\11\22\1\u016b\14\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\7\22\1\u016c\16\22\14\0\1\22\2\0\2\u0147"
- + "\10\0\1\u0147\2\0\1\u0148\123\0\1\u016d\105\0\2\u016e"
- + "\3\0\3\u016e\5\0\1\u016e\2\0\5\u016e\3\0\1\u016e"
- + "\1\0\1\u016e\1\0\1\u016e\6\0\1\u016e\41\0\1\150"
- + "\7\0\1\166\13\0\1\u016f\3\0\2\u016f\2\164\55\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\14\22\1\u0170\11\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0171"
- + "\14\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\13\22\1\u0172\12\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\7\22\1\u0173\16\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\7\22\1\u0174\16\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u0175"
- + "\21\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\16\22\1\u0176\7\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\11\22\1\u0177\14\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0178"
- + "\3\0\26\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\17\22\1\u0179\6\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\3\22\1\u017a\4\22\3\0\26\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\7\22\1\u017b\16\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\3\22\1\u017c\4\22"
- + "\3\0\7\22\1\u017d\16\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\10\22"
- + "\1\u017e\15\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\21\22\1\u017f\4\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\11\22\1\u0180\14\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\14\22\1\u0181\11\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\7\22\1\u0182\3\0"
- + "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\11\22\1\u0183\14\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\4\22\1\u0184\21\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\10\22\1\u0185\15\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\23\22\1\u0186"
- + "\2\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\4\22\1\u0187\21\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\11\22\1\u0188\14\22\14\0\1\22\30\0"
- + "\1\u0189\104\0\2\u018a\3\0\3\u018a\5\0\1\u018a\2\0"
- + "\5\u018a\3\0\1\u018a\1\0\1\u018a\1\0\1\u018a\6\0"
- + "\1\u018a\41\0\1\150\7\0\1\166\13\0\1\u018b\3\0"
- + "\2\u018b\2\164\55\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\20\22\1\u018c\5\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\6\22\1\u018d\17\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\5\22"
- + "\1\u018e\20\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\12\22\1\u018f\13\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\13\22\1\u0190\12\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\2\22\1\u0191\23\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\4\22"
- + "\1\u0192\21\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u0193\23\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\10\22\3\0\2\22\1\u0194\23\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"
- + "\1\u0195\3\0\26\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\7\22\1\u0196"
- + "\16\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\10\22\1\u0197\15\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\4\22\1\u0198\21\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\10\22\1\u0199\15\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\7\22\1\u019a\3\0\26\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\7\22\1\u019b\3\0\26\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\10\22\1\u019c\15\22\14\0\1\22\31\0\1\u019d\103\0"
- + "\2\u019e\3\0\3\u019e\5\0\1\u019e\2\0\5\u019e\3\0"
- + "\1\u019e\1\0\1\u019e\1\0\1\u019e\6\0\1\u019e\41\0"
- + "\1\150\7\0\1\166\13\0\1\u019f\3\0\2\u019f\2\164"
- + "\55\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\7\22\1\u01a0\16\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\7\22\1\u01a1\3\0"
- + "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\7\22\1\u01a2\3\0\26\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\4\22\1\u01a3\21\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\7\22\1\u01a4\3\0"
- + "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\4\22\1\u01a5\21\22\14\0"
- + "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"
- + "\10\22\3\0\14\22\1\u01a6\11\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\7\22\1\u01a7\16\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\7\22\1\u01a8\3\0\26\22"
- + "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"
- + "\4\0\7\22\1\u01a9\3\0\26\22\14\0\1\22\7\0"
- + "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"
- + "\20\22\1\u01aa\5\22\14\0\1\22\30\0\1\u01ab\104\0"
- + "\2\u01ac\3\0\3\u01ac\5\0\1\u01ac\2\0\5\u01ac\3\0"
- + "\1\u01ac\1\0\1\u01ac\1\0\1\u01ac\6\0\1\u01ac\41\0"
- + "\1\150\7\0\1\166\13\0\1\u01ad\3\0\2\u01ad\2\164"
- + "\55\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"
- + "\1\u01ae\3\0\26\22\14\0\1\22\7\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\10\22\3\0\6\22\1\u01af"
- + "\17\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\7\22\1\u01b0\3\0\26\22\14\0\1\22"
- + "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"
- + "\3\0\10\22\1\u01b1\15\22\14\0\1\22\7\0\3\22"
- + "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\13\22"
- + "\1\u01b2\12\22\14\0\1\22\7\0\3\22\7\0\2\22"
- + "\3\0\4\22\4\0\10\22\3\0\13\22\1\u01b3\12\22"
- + "\14\0\1\22\25\0\1\u01b4\107\0\2\u01b5\3\0\3\u01b5"
- + "\5\0\1\u01b5\2\0\5\u01b5\3\0\1\u01b5\1\0\1\u01b5"
- + "\1\0\1\u01b5\6\0\1\u01b5\41\0\1\150\7\0\1\166"
- + "\13\0\1\u01b6\3\0\2\u01b6\2\164\55\0\3\22\7\0"
- + "\2\22\3\0\4\22\4\0\3\22\1\u01b7\4\22\3\0"
- + "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"
- + "\4\22\4\0\10\22\3\0\5\22\1\u01b8\20\22\14\0"
- + "\1\22\12\0\1\150\7\0\1\166\13\0\1\u01b9\3\0"
- + "\2\u01b9\2\164\60\0\1\150\7\0\1\166\13\0\1\u01ba"
- + "\3\0\2\u01ba\2\164\60\0\1\150\7\0\1\166\13\0"
- + "\1\u01bb\3\0\2\u01bb\2\164\60\0\1\150\7\0\1\166"
- + "\13\0\1\u01bc\3\0\2\u01bc\2\164\60\0\1\150\7\0"
- + "\1\166\13\0\1\u01bd\3\0\2\u01bd\2\164\60\0\1\150"
- + "\7\0\1\166\13\0\1\u01be\3\0\2\u01be\2\164\47\0";
-
- private static int[] zzUnpackTrans() {
- int[] result = new int[22952];
- int offset = 0;
- offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
- return result;
- }
-
- private static int zzUnpackTrans(String packed, int offset, int[] result) {
- int i = 0; /* index in packed string */
-
- int j = offset; /* index in unpacked array */
-
- int l = packed.length();
- while (i < l) {
- int count = packed.charAt(i++);
- int value = packed.charAt(i++);
- value--;
- do {
- result[j++] = value;
- } while (--count > 0);
- }
- return j;
- }
-
-
- /* error codes */
- private static final int ZZ_UNKNOWN_ERROR = 0;
-
- private static final int ZZ_NO_MATCH = 1;
-
- private static final int ZZ_PUSHBACK_2BIG = 2;
-
- /* error messages for the codes above */
- private static final String ZZ_ERROR_MSG[] = {
- "Unkown internal scanner error",
- "Error: could not match input",
- "Error: pushback value was too large"
- };
-
- /**
- * ZZ_ATTRIBUTE[aState] contains the attributes of state aState
- */
- private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute();
-
- private static final String ZZ_ATTRIBUTE_PACKED_0
- = "\13\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11"
- + "\4\1\1\11\21\1\7\11\4\1\1\11\2\1\2\11"
- + "\3\1\1\11\1\1\1\11\3\1\2\11\1\1\1\11"
- + "\2\1\1\11\1\1\2\11\2\1\1\11\2\1\1\11"
- + "\2\1\1\11\1\1\1\0\2\11\1\1\1\11\1\1"
- + "\1\11\2\1\2\11\1\1\2\11\1\1\2\11\1\0"
- + "\3\1\1\0\11\1\2\11\44\1\11\11\1\1\6\11"
- + "\1\1\1\11\1\0\1\11\1\0\1\11\1\0\2\11"
- + "\1\0\1\1\4\0\1\1\2\0\2\11\4\1\1\11"
- + "\2\0\3\11\1\1\1\11\1\0\1\1\1\11\61\1"
- + "\3\0\3\11\1\0\1\11\2\0\1\1\2\11\1\0"
- + "\1\11\52\1\1\11\2\0\2\11\1\0\42\1\1\0"
- + "\33\1\1\0\23\1\1\0\15\1\1\0\10\1\2\11"
- + "\11\1";
-
- private static int[] zzUnpackAttribute() {
- int[] result = new int[446];
- int offset = 0;
- offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
- return result;
- }
-
- private static int zzUnpackAttribute(String packed, int offset, int[] result) {
- int i = 0; /* index in packed string */
-
- int j = offset; /* index in unpacked array */
-
- int l = packed.length();
- while (i < l) {
- int count = packed.charAt(i++);
- int value = packed.charAt(i++);
- do {
- result[j++] = value;
- } while (--count > 0);
- }
- return j;
- }
-
- /**
- * the input device
- */
- private java.io.Reader zzReader;
-
- /**
- * the current state of the DFA
- */
- private int zzState;
-
- /**
- * the current lexical state
- */
- private int zzLexicalState = YYINITIAL;
-
- /**
- * this buffer contains the current text to be matched and is
- * the source of the yytext() string
- */
- private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
-
- /**
- * the textposition at the last accepting state
- */
- private int zzMarkedPos;
-
- /**
- * the current text position in the buffer
- */
- private int zzCurrentPos;
-
- /**
- * startRead marks the beginning of the yytext() string in the buffer
- */
- private int zzStartRead;
-
- /**
- * endRead marks the last character in the buffer, that has been read
- * from input
- */
- private int zzEndRead;
-
- /**
- * number of newlines encountered up to the start of the matched text
- */
- private int yyline;
-
- /**
- * the number of characters up to the start of the matched text
- */
- private int yychar;
-
- /**
- * the number of characters from the last newline up to the start of the
- * matched text
- */
- private int yycolumn;
-
- /**
- * zzAtBOL == true <=> the scanner is currently at the beginning of a line
- */
- private boolean zzAtBOL = true;
-
- /**
- * zzAtEOF == true <=> the scanner is at the EOF
- */
- private boolean zzAtEOF;
-
- /**
- * denotes if the user-EOF-code has already been executed
- */
- private boolean zzEOFDone;
-
- /**
- * The number of occupied positions in zzBuffer beyond zzEndRead.
- * When a lead/high surrogate has been read from the input stream
- * into the final zzBuffer position, this will have a value of 1;
- * otherwise, it will have a value of 0.
- */
- private int zzFinalHighSurrogate = 0;
-
- /* user code: */
- private String sourceCode;
-
- public ActionScriptLexer(String sourceCode) {
- this(new StringReader(sourceCode));
- this.sourceCode = sourceCode;
- }
-
- public void yypushbackstr(String s, int state) {
- sourceCode = s + sourceCode.substring(yychar + yylength());
- yyreset(new StringReader(sourceCode));
- yybegin(state);
- }
-
- public void yypushbackstr(String s) {
- yypushbackstr(s, YYINITIAL);
- }
-
- StringBuffer string = new StringBuffer();
-
- private static String xmlTagName = "";
-
- public int yychar() {
- return yychar;
- }
-
- private Stack pushedBack = new Stack<>();
-
- public int yyline() {
- return yyline + 1;
- }
-
- private List listeners = new ArrayList<>();
-
- public void addListener(LexListener listener) {
- listeners.add(listener);
- }
-
- public void removeListener(LexListener listener) {
- listeners.remove(listener);
- }
-
- public void informListenersLex(ParsedSymbol s) {
- for (LexListener l : listeners) {
- l.onLex(s);
- }
- }
-
- public void informListenersPushBack(ParsedSymbol s) {
- for (LexListener l : listeners) {
- l.onPushBack(s);
- }
- }
-
- public void pushback(ParsedSymbol symb) {
- pushedBack.push(symb);
- last = null;
- informListenersPushBack(symb);
- }
-
- ParsedSymbol last;
-
- public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException {
- ParsedSymbol ret = null;
- if (!pushedBack.isEmpty()) {
- ret = last = pushedBack.pop();
- } else {
- ret = last = yylex();
- }
- informListenersLex(ret);
- return ret;
- }
-
- /**
- * Creates a new scanner
- *
- * @param in the java.io.Reader to read input from.
- */
- public ActionScriptLexer(java.io.Reader in) {
- this.zzReader = in;
- }
-
- /**
- * Unpacks the compressed character translation table.
- *
- * @param packed the packed character translation table
- * @return the unpacked character translation table
- */
- private static char[] zzUnpackCMap(String packed) {
- char[] map = new char[0x110000];
- int i = 0; /* index in packed string */
-
- int j = 0; /* index in unpacked array */
-
- while (i < 3140) {
- int count = packed.charAt(i++);
- char value = packed.charAt(i++);
- do {
- map[j++] = value;
- } while (--count > 0);
- }
- return map;
- }
-
- /**
- * Refills the input buffer.
- *
- * @return false, iff there was new input.
- *
- * @exception java.io.IOException if any I/O-Error occurs
- */
- private boolean zzRefill() throws java.io.IOException {
-
- /* first: make room (if you can) */
- if (zzStartRead > 0) {
- zzEndRead += zzFinalHighSurrogate;
- zzFinalHighSurrogate = 0;
- System.arraycopy(zzBuffer, zzStartRead,
- zzBuffer, 0,
- zzEndRead - zzStartRead);
-
- /* translate stored positions */
- zzEndRead -= zzStartRead;
- zzCurrentPos -= zzStartRead;
- zzMarkedPos -= zzStartRead;
- zzStartRead = 0;
- }
-
- /* is the buffer big enough? */
- if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) {
- /* if not: blow it up */
- char newBuffer[] = new char[zzBuffer.length * 2];
- System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
- zzBuffer = newBuffer;
- zzEndRead += zzFinalHighSurrogate;
- zzFinalHighSurrogate = 0;
- }
-
- /* fill the buffer with new input */
- int requested = zzBuffer.length - zzEndRead;
- int totalRead = 0;
- while (totalRead < requested) {
- int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead);
- if (numRead == -1) {
- break;
- }
- totalRead += numRead;
- }
-
- if (totalRead > 0) {
- zzEndRead += totalRead;
- if (totalRead == requested) { /* possibly more input available */
-
- if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) {
- --zzEndRead;
- zzFinalHighSurrogate = 1;
- }
- }
- return false;
- }
-
- // totalRead = 0: End of stream
- return true;
- }
-
- /**
- * Closes the input stream.
- */
- public final void yyclose() throws java.io.IOException {
- zzAtEOF = true; /* indicate end of file */
-
- zzEndRead = zzStartRead; /* invalidate buffer */
-
- if (zzReader != null) {
- zzReader.close();
- }
- }
-
- /**
- * Resets the scanner to read from a new input stream.
- * Does not close the old reader.
- *
- * All internal variables are reset, the old input stream
- * cannot be reused (internal buffer is discarded and lost).
- * Lexical state is set to ZZ_INITIAL.
- *
- * Internal scan buffer is resized down to its initial length, if it has
- * grown.
- *
- * @param reader the new input stream
- */
- public final void yyreset(java.io.Reader reader) {
- zzReader = reader;
- zzAtBOL = true;
- zzAtEOF = false;
- zzEOFDone = false;
- zzEndRead = zzStartRead = 0;
- zzCurrentPos = zzMarkedPos = 0;
- zzFinalHighSurrogate = 0;
- yyline = yychar = yycolumn = 0;
- zzLexicalState = YYINITIAL;
- if (zzBuffer.length > ZZ_BUFFERSIZE) {
- zzBuffer = new char[ZZ_BUFFERSIZE];
- }
- }
-
- /**
- * Returns the current lexical state.
- */
- public final int yystate() {
- return zzLexicalState;
- }
-
- /**
- * Enters a new lexical state
- *
- * @param newState the new lexical state
- */
- public final void yybegin(int newState) {
- zzLexicalState = newState;
- }
-
- /**
- * Returns the text matched by the current regular expression.
- */
- public final String yytext() {
- return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);
- }
-
- /**
- * Returns the character at position pos from the
- * matched text.
- *
- * It is equivalent to yytext().charAt(pos), but faster
- *
- * @param pos the position of the character to fetch.
- * A value from 0 to yylength()-1.
- *
- * @return the character at position pos
- */
- public final char yycharat(int pos) {
- return zzBuffer[zzStartRead + pos];
- }
-
- /**
- * Returns the length of the matched text region.
- */
- public final int yylength() {
- return zzMarkedPos - zzStartRead;
- }
-
- /**
- * Reports an error that occured while scanning.
- *
- * In a wellformed scanner (no or only correct usage of
- * yypushback(int) and a match-all fallback rule) this method
- * will only be called with things that "Can't Possibly Happen".
- * If this method is called, something is seriously wrong
- * (e.g. a JFlex bug producing a faulty scanner etc.).
- *
- * Usual syntax/scanner level error handling should be done
- * in error fallback rules.
- *
- * @param errorCode the code of the errormessage to display
- */
- private void zzScanError(int errorCode) {
- String message;
- try {
- message = ZZ_ERROR_MSG[errorCode];
- } catch (ArrayIndexOutOfBoundsException e) {
- message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
- }
-
- throw new Error(message);
- }
-
- /**
- * Pushes the specified amount of characters back into the input stream.
- *
- * They will be read again by then next call of the scanning method
- *
- * @param number the number of characters to be read again.
- * This number must not be greater than yylength()!
- */
- public void yypushback(int number) {
- if (number > yylength()) {
- zzScanError(ZZ_PUSHBACK_2BIG);
- }
-
- zzMarkedPos -= number;
- }
-
- /**
- * Resumes scanning until the next regular expression is matched,
- * the end of input is encountered or an I/O-Error occurs.
- *
- * @return the next token
- * @exception java.io.IOException if any I/O-Error occurs
- */
- public ParsedSymbol yylex() throws java.io.IOException, AVM2ParseException {
- int zzInput;
- int zzAction;
-
- // cached fields:
- int zzCurrentPosL;
- int zzMarkedPosL;
- int zzEndReadL = zzEndRead;
- char[] zzBufferL = zzBuffer;
- char[] zzCMapL = ZZ_CMAP;
-
- int[] zzTransL = ZZ_TRANS;
- int[] zzRowMapL = ZZ_ROWMAP;
- int[] zzAttrL = ZZ_ATTRIBUTE;
-
- while (true) {
- zzMarkedPosL = zzMarkedPos;
-
- yychar += zzMarkedPosL - zzStartRead;
-
- zzAction = -1;
-
- zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
-
- zzState = ZZ_LEXSTATE[zzLexicalState];
-
- // set up zzAction for empty match case:
- int zzAttributes = zzAttrL[zzState];
- if ((zzAttributes & 1) == 1) {
- zzAction = zzState;
- }
-
- zzForAction:
- {
- while (true) {
-
- if (zzCurrentPosL < zzEndReadL) {
- zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
- zzCurrentPosL += Character.charCount(zzInput);
- } else if (zzAtEOF) {
- zzInput = YYEOF;
- break zzForAction;
- } else {
- // store back cached positions
- zzCurrentPos = zzCurrentPosL;
- zzMarkedPos = zzMarkedPosL;
- boolean eof = zzRefill();
- // get translated positions and possibly new buffer
- zzCurrentPosL = zzCurrentPos;
- zzMarkedPosL = zzMarkedPos;
- zzBufferL = zzBuffer;
- zzEndReadL = zzEndRead;
- if (eof) {
- zzInput = YYEOF;
- break zzForAction;
- } else {
- zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
- zzCurrentPosL += Character.charCount(zzInput);
- }
- }
- int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]];
- if (zzNext == -1) {
- break zzForAction;
- }
- zzState = zzNext;
-
- zzAttributes = zzAttrL[zzState];
- if ((zzAttributes & 1) == 1) {
- zzAction = zzState;
- zzMarkedPosL = zzCurrentPosL;
- if ((zzAttributes & 8) == 8) {
- break zzForAction;
- }
- }
-
- }
- }
-
- // store back cached position
- zzMarkedPos = zzMarkedPosL;
-
- switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
- case 1: {
- }
- case 164:
- break;
- case 2: {
- yyline++;
- }
- case 165:
- break;
- case 3: { /*ignore*/
-
- }
- case 166:
- break;
- case 4: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext());
- }
- case 167:
- break;
- case 5: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext());
- }
- case 168:
- break;
- case 6: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext());
- }
- case 169:
- break;
- case 7: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext());
- }
- case 170:
- break;
- case 8: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext());
- }
- case 171:
- break;
- case 9: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext());
- }
- case 172:
- break;
- case 10: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext());
- }
- case 173:
- break;
- case 11: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext());
- }
- case 174:
- break;
- case 12: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext());
- }
- case 175:
- break;
- case 13: {
- return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong((yytext())));
- }
- case 176:
- break;
- case 14: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext());
- }
- case 177:
- break;
- case 15: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext());
- }
- case 178:
- break;
- case 16: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext());
- }
- case 179:
- break;
- case 17: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext());
- }
- case 180:
- break;
- case 18: {
- string.setLength(0);
- yybegin(STRING);
- }
- case 181:
- break;
- case 19: {
- string.setLength(0);
- yybegin(CHARLITERAL);
- }
- case 182:
- break;
- case 20: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext());
- }
- case 183:
- break;
- case 21: {
- string.setLength(0);
- yybegin(OIDENTIFIER);
- }
- case 184:
- break;
- case 22: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext());
- }
- case 185:
- break;
- case 23: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext());
- }
- case 186:
- break;
- case 24: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext());
- }
- case 187:
- break;
- case 25: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext());
- }
- case 188:
- break;
- case 26: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext());
- }
- case 189:
- break;
- case 27: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext());
- }
- case 190:
- break;
- case 28: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext());
- }
- case 191:
- break;
- case 29: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext());
- }
- case 192:
- break;
- case 30: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext());
- }
- case 193:
- break;
- case 31: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext());
- }
- case 194:
- break;
- case 32: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext());
- }
- case 195:
- break;
- case 33: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext());
- }
- case 196:
- break;
- case 34: {
- string.append(yytext());
- }
- case 197:
- break;
- case 35: {
- yybegin(YYINITIAL);
- yyline++;
- }
- case 198:
- break;
- case 36: {
- yybegin(YYINITIAL);
- // length also includes the trailing quote
- return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString());
- }
- case 199:
- break;
- case 37: {
- yybegin(YYINITIAL);
- yyline++;
- }
- case 200:
- break;
- case 38: {
- string.append(yytext());
- yyline++;
- }
- case 201:
- break;
- case 39: {
- yybegin(XML);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 202:
- break;
- case 40: {
- yybegin(YYINITIAL);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 203:
- break;
- case 41: {
- yybegin(YYINITIAL);
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext());
- }
- case 204:
- break;
- case 42: {
- yybegin(YYINITIAL);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 205:
- break;
- case 43: {
- yybegin(YYINITIAL);
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext());
- }
- case 206:
- break;
- case 44: {
- string.append(yytext());
- yyline++;
- }
- case 207:
- break;
- case 45: {
- yybegin(YYINITIAL);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 208:
- break;
- case 46: {
- yybegin(YYINITIAL);
- // length also includes the trailing quote
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString());
- }
- case 209:
- break;
- case 47: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext());
- }
- case 210:
- break;
- case 48: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext());
- }
- case 211:
- break;
- case 49: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext());
- }
- case 212:
- break;
- case 50: {
- return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext());
- }
- case 213:
- break;
- case 51: {
- return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble((yytext())));
- }
- case 214:
- break;
- case 52: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext());
- }
- case 215:
- break;
- case 53: {
- yybegin(XMLOPENTAG);
- string.setLength(0);
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext());
- }
- case 216:
- break;
- case 54: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext());
- }
- case 217:
- break;
- case 55: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext());
- }
- case 218:
- break;
- case 56: {
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext());
- }
- case 219:
- break;
- case 57: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext());
- }
- case 220:
- break;
- case 58: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext());
- }
- case 221:
- break;
- case 59: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext());
- }
- case 222:
- break;
- case 60: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext());
- }
- case 223:
- break;
- case 61: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext());
- }
- case 224:
- break;
- case 62: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext());
- }
- case 225:
- break;
- case 63: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext());
- }
- case 226:
- break;
- case 64: {
- return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext(), 8));
- }
- case 227:
- break;
- case 65: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext());
- }
- case 228:
- break;
- case 66: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext());
- }
- case 229:
- break;
- case 67: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext());
- }
- case 230:
- break;
- case 68: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext());
- }
- case 231:
- break;
- case 69: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext());
- }
- case 232:
- break;
- case 70: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext());
- }
- case 233:
- break;
- case 71: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext());
- }
- case 234:
- break;
- case 72: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext());
- }
- case 235:
- break;
- case 73: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext());
- }
- case 236:
- break;
- case 74: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext());
- }
- case 237:
- break;
- case 75: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext());
- }
- case 238:
- break;
- case 76: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext());
- }
- case 239:
- break;
- case 77: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext());
- }
- case 240:
- break;
- case 78: { /* ignore illegal character escape */
-
- }
- case 241:
- break;
- case 79: {
- string.append('\"');
- }
- case 242:
- break;
- case 80: {
- string.append('\'');
- }
- case 243:
- break;
- case 81: {
- string.append('\f');
- }
- case 244:
- break;
- case 82: {
- string.append('\\');
- }
- case 245:
- break;
- case 83: {
- string.append('\b');
- }
- case 246:
- break;
- case 84: {
- string.append('\r');
- }
- case 247:
- break;
- case 85: {
- string.append('\n');
- }
- case 248:
- break;
- case 86: {
- string.append('\t');
- }
- case 249:
- break;
- case 87: {
- yybegin(XML);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 250:
- break;
- case 88: {
- yybegin(XMLOPENTAGATTRIB);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 251:
- break;
- case 89: {
- yybegin(XMLOPENTAG);
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
- }
- case 252:
- break;
- case 90: {
- yybegin(XMLINSTRATTRIB);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 253:
- break;
- case 91: {
- yybegin(XML);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_END, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 254:
- break;
- case 92: {
- yybegin(XMLINSTROPENTAG);
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
- }
- case 255:
- break;
- case 93: {
- yybegin(XMLOPENTAG);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 256:
- break;
- case 94: {
- yybegin(YYINITIAL);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 257:
- break;
- case 95: {
- throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1);
- }
- case 258:
- break;
- case 96: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext());
- }
- case 259:
- break;
- case 97: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext());
- }
- case 260:
- break;
- case 98: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext());
- }
- case 261:
- break;
- case 99: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext());
- }
- case 262:
- break;
- case 100: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext());
- }
- case 263:
- break;
- case 101: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext());
- }
- case 264:
- break;
- case 102: {
- return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext().substring(2), 16));
- }
- case 265:
- break;
- case 103: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext());
- }
- case 266:
- break;
- case 104: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext());
- }
- case 267:
- break;
- case 105: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext());
- }
- case 268:
- break;
- case 106: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext());
- }
- case 269:
- break;
- case 107: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext());
- }
- case 270:
- break;
- case 108: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext());
- }
- case 271:
- break;
- case 109: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext());
- }
- case 272:
- break;
- case 110: {
- return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext());
- }
- case 273:
- break;
- case 111: {
- string.append(yytext());
- yybegin(XML);
- String ret = string.toString();
- string.setLength(0);
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret);
- }
- case 274:
- break;
- case 112: {
- string.append(yytext());
- yybegin(XML);
- String ret = string.toString();
- string.setLength(0);
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
- }
- case 275:
- break;
- case 113: {
- yybegin(YYINITIAL);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 276:
- break;
- case 114: {
- yybegin(XMLINSTROPENTAG);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_BEGIN, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 277:
- break;
- case 115: {
- yybegin(YYINITIAL);
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRVARTAG_BEGIN, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 278:
- break;
- case 116: {
- string.append('\u00A7');
- }
- case 279:
- break;
- case 117: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext());
- }
- case 280:
- break;
- case 118: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext());
- }
- case 281:
- break;
- case 119: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext());
- }
- case 282:
- break;
- case 120: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext());
- }
- case 283:
- break;
- case 121: {
- return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext());
- }
- case 284:
- break;
- case 122: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext());
- }
- case 285:
- break;
- case 123: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext());
- }
- case 286:
- break;
- case 124: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext());
- }
- case 287:
- break;
- case 125: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext());
- }
- case 288:
- break;
- case 126: {
- char val = (char) Integer.parseInt(yytext().substring(2), 16);
- string.append(val);
- }
- case 289:
- break;
- case 127: {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext()));
- if (string.length() > 0) {
- pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
- string.setLength(0);
- }
- return lex();
- }
- case 290:
- break;
- case 128: {
- String ret = string.toString();
- string.setLength(0);
- string.append(yytext());
- yybegin(XMLCOMMENT);
- if (!ret.isEmpty()) {
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
- }
- }
- case 291:
- break;
- case 129: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext());
- }
- case 292:
- break;
- case 130: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext());
- }
- case 293:
- break;
- case 131: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext());
- }
- case 294:
- break;
- case 132: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext());
- }
- case 295:
- break;
- case 133: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext());
- }
- case 296:
- break;
- case 134: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext());
- }
- case 297:
- break;
- case 135: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext());
- }
- case 298:
- break;
- case 136: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext());
- }
- case 299:
- break;
- case 137: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext());
- }
- case 300:
- break;
- case 138: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext());
- }
- case 301:
- break;
- case 139: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext());
- }
- case 302:
- break;
- case 140: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext());
- }
- case 303:
- break;
- case 141: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext());
- }
- case 304:
- break;
- case 142: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext());
- }
- case 305:
- break;
- case 143: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext());
- }
- case 306:
- break;
- case 144: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext());
- }
- case 307:
- break;
- case 145: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext());
- }
- case 308:
- break;
- case 146: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext());
- }
- case 309:
- break;
- case 147: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext());
- }
- case 310:
- break;
- case 148: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext());
- }
- case 311:
- break;
- case 149: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext());
- }
- case 312:
- break;
- case 150: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext());
- }
- case 313:
- break;
- case 151: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext());
- }
- case 314:
- break;
- case 152: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext());
- }
- case 315:
- break;
- case 153: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext());
- }
- case 316:
- break;
- case 154: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext());
- }
- case 317:
- break;
- case 155: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext());
- }
- case 318:
- break;
- case 156: {
- return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext());
- }
- case 319:
- break;
- case 157: {
- return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext());
- }
- case 320:
- break;
- case 158: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext());
- }
- case 321:
- break;
- case 159: {
- return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext());
- }
- case 322:
- break;
- case 160: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext());
- }
- case 323:
- break;
- case 161: {
- String ret = string.toString();
- string.setLength(0);
- string.append(yytext());
- yybegin(XMLCDATA);
- if (!ret.isEmpty()) {
- return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
- }
- }
- case 324:
- break;
- case 162: {
- return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext());
- }
- case 325:
- break;
- case 163: {
- return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext());
- }
- case 326:
- break;
- default:
- if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
- zzAtEOF = true;
- {
- return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null);
- }
- } else {
- zzScanError(ZZ_NO_MATCH);
- }
- }
- }
- }
-}
+/* The following code was generated by JFlex 1.6.0 */
+
+/*
+ * Copyright (C) 2010-2015 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.abc.avm2.parser.script;
+import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+
+
+/**
+ * This class is a scanner generated by
+ * JFlex 1.6.0
+ * from the specification file D:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_script.flex
+ */
+public final class ActionScriptLexer {
+
+ /** This character denotes the end of file */
+ public static final int YYEOF = -1;
+
+ /** initial size of the lookahead buffer */
+ private static final int ZZ_BUFFERSIZE = 16384;
+
+ /** lexical states */
+ public static final int YYINITIAL = 0;
+ public static final int STRING = 2;
+ public static final int CHARLITERAL = 4;
+ public static final int XMLOPENTAG = 6;
+ public static final int XMLOPENTAGATTRIB = 8;
+ public static final int XMLINSTROPENTAG = 10;
+ public static final int XMLINSTRATTRIB = 12;
+ public static final int XMLCDATA = 14;
+ public static final int XMLCOMMENT = 16;
+ public static final int XML = 18;
+ public static final int OIDENTIFIER = 20;
+
+ /**
+ * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
+ * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+ * at the beginning of a line
+ * l is of the form l = 2*k, k a non negative integer
+ */
+ private static final int ZZ_LEXSTATE[] = {
+ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7,
+ 8, 8, 9, 9, 10, 10
+ };
+
+ /**
+ * Translates characters to character classes
+ */
+ private static final String ZZ_CMAP_PACKED =
+ "\11\0\1\13\1\2\1\113\1\3\1\1\22\0\1\13\1\14\1\33"+
+ "\1\0\1\6\1\110\1\105\1\34\1\76\1\77\1\5\1\45\1\103"+
+ "\1\15\1\11\1\4\1\35\3\41\4\42\2\21\1\17\1\102\1\12"+
+ "\1\32\1\16\1\23\1\111\1\27\1\20\1\25\1\26\1\43\1\20"+
+ "\2\10\1\74\4\10\1\75\5\10\1\30\3\10\1\37\2\10\1\24"+
+ "\1\46\1\31\1\107\1\10\1\0\1\52\1\50\1\54\1\63\1\44"+
+ "\1\40\1\73\1\66\1\61\1\10\1\53\1\64\1\71\1\57\1\56"+
+ "\1\67\1\10\1\51\1\55\1\60\1\62\1\72\1\65\1\36\1\70"+
+ "\1\10\1\100\1\106\1\101\1\104\6\0\1\113\41\0\1\47\2\0"+
+ "\1\6\12\0\1\6\1\0\1\22\2\0\1\6\5\0\2\6\1\112"+
+ "\24\6\1\0\37\6\1\0\u01ca\6\4\0\14\6\16\0\5\6\7\0"+
+ "\1\6\1\0\1\6\21\0\160\7\5\6\1\0\2\6\2\0\4\6"+
+ "\1\0\1\6\6\0\1\6\1\0\3\6\1\0\1\6\1\0\24\6"+
+ "\1\0\123\6\1\0\213\6\1\0\5\7\2\0\246\6\1\0\46\6"+
+ "\2\0\1\6\7\0\47\6\11\0\55\7\1\0\1\7\1\0\2\7"+
+ "\1\0\2\7\1\0\1\7\10\0\33\6\5\0\3\6\35\0\13\7"+
+ "\5\0\53\6\37\7\4\0\2\6\1\7\143\6\1\0\1\6\7\7"+
+ "\2\0\6\7\2\6\2\7\1\0\4\7\2\6\12\7\3\6\2\0"+
+ "\1\6\20\0\1\6\1\7\36\6\33\7\2\0\131\6\13\7\1\6"+
+ "\16\0\12\7\41\6\11\7\2\6\4\0\1\6\5\0\26\6\4\7"+
+ "\1\6\11\7\1\6\3\7\1\6\5\7\22\0\31\6\3\7\104\0"+
+ "\23\6\61\0\40\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6"+
+ "\2\7\2\0\12\7\1\0\20\6\3\7\1\0\10\6\2\0\2\6"+
+ "\2\0\26\6\1\0\7\6\1\0\1\6\3\0\4\6\2\0\1\7"+
+ "\1\6\7\7\2\0\2\7\2\0\3\7\1\6\10\0\1\7\4\0"+
+ "\2\6\1\0\3\6\2\7\2\0\12\7\2\6\17\0\3\7\1\0"+
+ "\6\6\4\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0"+
+ "\2\6\1\0\2\6\2\0\1\7\1\0\5\7\4\0\2\7\2\0"+
+ "\3\7\3\0\1\7\7\0\4\6\1\0\1\6\7\0\14\7\3\6"+
+ "\1\7\13\0\3\7\1\0\11\6\1\0\3\6\1\0\26\6\1\0"+
+ "\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\10\7\1\0"+
+ "\3\7\1\0\3\7\2\0\1\6\17\0\2\6\2\7\2\0\12\7"+
+ "\21\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0\7\6"+
+ "\1\0\2\6\1\0\5\6\2\0\1\7\1\6\7\7\2\0\2\7"+
+ "\2\0\3\7\10\0\2\7\4\0\2\6\1\0\3\6\2\7\2\0"+
+ "\12\7\1\0\1\6\20\0\1\7\1\6\1\0\6\6\3\0\3\6"+
+ "\1\0\4\6\3\0\2\6\1\0\1\6\1\0\2\6\3\0\2\6"+
+ "\3\0\3\6\3\0\14\6\4\0\5\7\3\0\3\7\1\0\4\7"+
+ "\2\0\1\6\6\0\1\7\16\0\12\7\20\0\4\7\1\0\10\6"+
+ "\1\0\3\6\1\0\27\6\1\0\20\6\3\0\1\6\7\7\1\0"+
+ "\3\7\1\0\4\7\7\0\2\7\1\0\2\6\6\0\2\6\2\7"+
+ "\2\0\12\7\21\0\3\7\1\0\10\6\1\0\3\6\1\0\27\6"+
+ "\1\0\12\6\1\0\5\6\2\0\1\7\1\6\7\7\1\0\3\7"+
+ "\1\0\4\7\7\0\2\7\7\0\1\6\1\0\2\6\2\7\2\0"+
+ "\12\7\1\0\2\6\16\0\3\7\1\0\10\6\1\0\3\6\1\0"+
+ "\51\6\2\0\1\6\7\7\1\0\3\7\1\0\4\7\1\6\10\0"+
+ "\1\7\10\0\2\6\2\7\2\0\12\7\12\0\6\6\2\0\2\7"+
+ "\1\0\22\6\3\0\30\6\1\0\11\6\1\0\1\6\2\0\7\6"+
+ "\3\0\1\7\4\0\6\7\1\0\1\7\1\0\10\7\6\0\12\7"+
+ "\2\0\2\7\15\0\60\6\1\7\2\6\7\7\5\0\7\6\10\7"+
+ "\1\0\12\7\47\0\2\6\1\0\1\6\2\0\2\6\1\0\1\6"+
+ "\2\0\1\6\6\0\4\6\1\0\7\6\1\0\3\6\1\0\1\6"+
+ "\1\0\1\6\2\0\2\6\1\0\4\6\1\7\2\6\6\7\1\0"+
+ "\2\7\1\6\2\0\5\6\1\0\1\6\1\0\6\7\2\0\12\7"+
+ "\2\0\4\6\40\0\1\6\27\0\2\7\6\0\12\7\13\0\1\7"+
+ "\1\0\1\7\1\0\1\7\4\0\2\7\10\6\1\0\44\6\4\0"+
+ "\24\7\1\0\2\7\5\6\13\7\1\0\44\7\11\0\1\7\71\0"+
+ "\53\6\24\7\1\6\12\7\6\0\6\6\4\7\4\6\3\7\1\6"+
+ "\3\7\2\6\7\7\3\6\4\7\15\6\14\7\1\6\17\7\2\0"+
+ "\46\6\1\0\1\6\5\0\1\6\2\0\53\6\1\0\u014d\6\1\0"+
+ "\4\6\2\0\7\6\1\0\1\6\1\0\4\6\2\0\51\6\1\0"+
+ "\4\6\2\0\41\6\1\0\4\6\2\0\7\6\1\0\1\6\1\0"+
+ "\4\6\2\0\17\6\1\0\71\6\1\0\4\6\2\0\103\6\2\0"+
+ "\3\7\40\0\20\6\20\0\125\6\14\0\u026c\6\2\0\21\6\1\0"+
+ "\32\6\5\0\113\6\3\0\3\7\10\6\7\0\15\6\1\0\4\6"+
+ "\3\7\13\0\22\6\3\7\13\0\22\6\2\7\14\0\15\6\1\0"+
+ "\3\6\1\0\2\7\14\0\64\6\40\7\3\0\1\6\4\0\1\6"+
+ "\1\7\2\0\12\7\41\0\3\7\2\0\12\7\6\0\130\6\10\0"+
+ "\51\6\1\7\1\6\5\0\106\6\12\0\37\6\1\0\14\7\4\0"+
+ "\14\7\12\0\12\7\36\6\2\0\5\6\13\0\54\6\4\0\21\7"+
+ "\7\6\2\7\6\0\12\7\46\0\27\6\5\7\4\0\65\6\12\7"+
+ "\1\0\35\7\2\0\13\7\6\0\12\7\15\0\1\6\10\0\16\7"+
+ "\102\0\5\7\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0"+
+ "\3\7\36\6\15\7\2\6\12\7\54\6\16\7\14\0\44\6\24\7"+
+ "\10\0\12\7\3\0\3\6\12\7\44\6\122\0\3\7\1\0\25\7"+
+ "\4\6\1\7\4\6\3\7\2\6\1\0\2\7\6\0\300\6\66\7"+
+ "\6\0\4\7\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6\2\0"+
+ "\10\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\37\6\2\0"+
+ "\65\6\1\0\7\6\1\0\1\6\3\0\3\6\1\0\7\6\3\0"+
+ "\4\6\2\0\6\6\4\0\15\6\5\0\3\6\1\0\7\6\3\0"+
+ "\14\0\2\0\32\0\1\113\1\113\25\0\2\7\23\0\1\7\33\0"+
+ "\1\0\1\6\15\0\1\6\20\0\15\6\63\0\15\7\4\0\1\7"+
+ "\3\0\14\7\21\0\1\6\4\0\1\6\2\0\12\6\1\0\1\6"+
+ "\3\0\5\6\6\0\1\6\1\0\1\6\1\0\1\6\1\0\4\6"+
+ "\1\0\13\6\2\0\4\6\5\0\5\6\4\0\1\6\21\0\43\7"+
+ "\2\6\4\7\7\0\u0a70\0\57\6\1\0\57\6\1\0\205\6\6\0"+
+ "\4\6\3\7\2\6\14\0\46\6\1\0\1\6\5\0\1\6\2\0"+
+ "\70\6\7\0\1\6\17\0\1\7\27\6\11\0\7\6\1\0\7\6"+
+ "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6"+
+ "\1\0\7\6\1\0\40\7\57\0\1\6\u01c0\0\21\0\4\0\2\6"+
+ "\1\7\31\0\17\7\1\0\5\6\2\0\3\7\2\6\4\0\126\6"+
+ "\2\0\2\7\2\0\3\6\1\0\132\6\1\0\4\6\5\0\51\6"+
+ "\3\0\136\6\21\0\33\6\65\0\20\6\u0200\0\u19b6\6\112\0\u51cd\6"+
+ "\63\0\u048d\6\103\0\56\6\2\0\u010d\6\3\0\20\6\12\7\2\6"+
+ "\24\0\57\6\1\7\4\0\12\7\1\0\37\6\1\0\1\7\106\6"+
+ "\14\7\45\0\11\6\2\0\147\6\2\0\4\6\1\0\36\6\2\0"+
+ "\2\6\105\0\13\6\1\7\3\6\1\7\4\6\1\7\27\6\5\7"+
+ "\30\0\64\6\14\0\2\7\62\6\21\7\13\0\12\7\6\0\22\7"+
+ "\6\6\3\0\1\6\4\0\12\7\34\6\10\7\2\0\27\6\15\7"+
+ "\14\0\35\6\3\0\4\7\57\6\16\7\16\0\1\6\12\7\6\0"+
+ "\5\6\1\7\12\6\12\7\5\6\1\0\51\6\16\7\11\0\3\6"+
+ "\1\7\10\6\2\7\2\0\12\7\6\0\27\6\3\0\1\6\3\7"+
+ "\62\6\1\7\1\6\3\7\2\6\2\7\5\6\2\7\1\6\1\7"+
+ "\1\6\30\0\3\6\2\0\13\6\5\7\2\0\3\6\2\7\12\0"+
+ "\6\6\2\0\6\6\2\0\6\6\11\0\7\6\1\0\7\6\1\0"+
+ "\53\6\1\0\4\6\4\0\2\6\132\0\43\6\10\7\1\0\2\7"+
+ "\2\0\12\7\6\0\u2ba4\6\14\0\27\6\4\0\61\6\4\0\u1800\0"+
+ "\u0900\0\u016e\6\2\0\152\6\46\0\7\6\14\0\5\6\5\0\1\6"+
+ "\1\7\12\6\1\0\15\6\1\0\5\6\1\0\1\6\1\0\2\6"+
+ "\1\0\2\6\1\0\154\6\41\0\u016b\6\22\0\100\6\2\0\66\6"+
+ "\10\0\40\0\14\6\4\0\20\7\20\0\16\7\5\0\2\7\30\0"+
+ "\3\7\40\0\5\6\1\0\207\6\23\0\12\7\7\0\32\6\4\0"+
+ "\1\7\1\0\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0"+
+ "\6\6\2\0\3\6\41\0\2\0\14\6\1\0\32\6\1\0\23\6"+
+ "\1\0\2\6\1\0\17\6\2\0\16\6\42\0\173\6\105\0\65\7"+
+ "\210\0\1\7\202\0\35\6\3\0\61\6\17\0\1\7\37\0\40\6"+
+ "\20\0\21\6\1\7\10\6\1\7\5\0\46\6\5\7\5\0\36\6"+
+ "\2\0\44\6\4\0\10\6\1\0\5\7\52\0\236\6\2\0\12\7"+
+ "\126\0\50\6\10\0\64\6\234\0\u0137\6\11\0\26\6\12\0\10\6"+
+ "\230\0\6\6\2\0\1\6\1\0\54\6\1\0\2\6\3\0\1\6"+
+ "\2\0\27\6\12\0\27\6\11\0\37\6\141\0\26\6\12\0\32\6"+
+ "\106\0\70\6\6\0\2\6\100\0\1\6\3\7\1\0\2\7\5\0"+
+ "\4\7\4\6\1\0\3\6\1\0\33\6\4\0\3\7\4\0\1\7"+
+ "\40\0\35\6\3\0\35\6\43\0\10\6\1\0\34\6\2\7\31\0"+
+ "\66\6\12\0\26\6\12\0\23\6\15\0\22\6\156\0\111\6\u03b7\0"+
+ "\3\7\65\6\17\7\37\0\12\7\17\0\4\7\55\6\13\7\25\0"+
+ "\31\6\7\0\12\7\6\0\3\7\44\6\16\7\1\0\12\7\20\0"+
+ "\43\6\1\7\2\0\1\6\11\0\3\7\60\6\16\7\4\6\13\0"+
+ "\12\7\1\6\45\0\22\6\1\0\31\6\14\7\170\0\57\6\14\7"+
+ "\5\0\12\7\7\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6"+
+ "\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\7\7"+
+ "\2\0\2\7\2\0\3\7\11\0\1\7\5\0\5\6\2\7\2\0"+
+ "\7\7\3\0\5\7\u010b\0\60\6\24\7\2\6\1\0\1\6\10\0"+
+ "\12\7\246\0\57\6\7\7\2\0\11\7\77\0\60\6\21\7\3\0"+
+ "\1\6\13\0\12\7\46\0\53\6\15\7\10\0\12\7\u01d6\0\100\6"+
+ "\12\7\25\0\1\6\u01c0\0\71\6\u0507\0\u0399\6\147\0\157\7\u0b91\0"+
+ "\u042f\6\u33d1\0\u0239\6\7\0\37\6\1\0\12\7\146\0\36\6\2\0"+
+ "\5\7\13\0\60\6\7\7\11\0\4\6\14\0\12\7\11\0\25\6"+
+ "\5\0\23\6\u0370\0\105\6\13\0\1\6\56\7\20\0\4\7\15\6"+
+ "\u4060\0\2\6\u0bfe\0\153\6\5\0\15\6\3\0\11\6\7\0\12\6"+
+ "\3\0\2\7\u14c6\0\5\7\3\0\6\7\10\0\10\7\2\0\7\7"+
+ "\36\0\4\7\224\0\3\7\u01bb\0\125\6\1\0\107\6\1\0\2\6"+
+ "\2\0\1\6\2\0\2\6\2\0\4\6\1\0\14\6\1\0\1\6"+
+ "\1\0\7\6\1\0\101\6\1\0\4\6\2\0\10\6\1\0\7\6"+
+ "\1\0\34\6\1\0\4\6\1\0\5\6\1\0\1\6\3\0\7\6"+
+ "\1\0\u0154\6\2\0\31\6\1\0\31\6\1\0\37\6\1\0\31\6"+
+ "\1\0\37\6\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6"+
+ "\1\0\31\6\1\0\10\6\2\0\62\7\u1000\0\305\6\13\0\7\7"+
+ "\u0529\0\4\6\1\0\33\6\1\0\2\6\1\0\1\6\2\0\1\6"+
+ "\1\0\12\6\1\0\4\6\1\0\1\6\1\0\1\6\6\0\1\6"+
+ "\4\0\1\6\1\0\1\6\1\0\1\6\1\0\3\6\1\0\2\6"+
+ "\1\0\1\6\2\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6"+
+ "\1\0\1\6\1\0\2\6\1\0\1\6\2\0\4\6\1\0\7\6"+
+ "\1\0\4\6\1\0\4\6\1\0\1\6\1\0\12\6\1\0\21\6"+
+ "\5\0\3\6\1\0\5\6\1\0\21\6\u1144\0\ua6d7\6\51\0\u1035\6"+
+ "\13\0\336\6\u3fe2\0\u021e\6\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u06ed\0"+
+ "\360\7\uffff\0\uffff\0\ufe12\0";
+
+ /**
+ * Translates characters to character classes
+ */
+ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
+
+ /**
+ * Translates DFA states to action switch labels.
+ */
+ private static final int [] ZZ_ACTION = zzUnpackAction();
+
+ private static final String ZZ_ACTION_PACKED_0 =
+ "\13\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7"+
+ "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17"+
+ "\1\20\1\21\1\22\1\23\1\15\2\6\1\24\1\25"+
+ "\21\6\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+
+ "\1\35\1\36\1\37\1\40\1\41\1\42\2\43\1\44"+
+ "\1\1\1\42\2\45\2\46\1\42\2\1\1\47\1\50"+
+ "\1\1\1\51\2\1\1\52\1\1\1\53\2\42\2\54"+
+ "\2\42\1\55\1\42\1\1\1\56\1\3\1\0\1\57"+
+ "\1\60\1\61\1\62\1\63\1\64\1\65\1\66\1\67"+
+ "\1\70\1\71\1\72\1\73\1\74\1\75\1\76\1\0"+
+ "\1\77\1\63\1\100\1\0\2\100\7\6\1\101\1\102"+
+ "\2\6\1\103\16\6\1\104\1\105\1\106\4\6\1\107"+
+ "\13\6\1\110\1\111\1\112\1\113\1\114\1\115\1\116"+
+ "\1\117\1\120\1\116\1\121\1\122\1\123\1\124\1\125"+
+ "\1\126\1\116\1\127\1\0\1\130\1\0\1\131\1\0"+
+ "\1\132\1\133\1\0\1\134\4\0\1\135\2\0\1\136"+
+ "\4\137\2\3\2\0\1\140\1\141\1\142\1\143\1\144"+
+ "\1\0\1\63\1\145\2\146\1\100\1\6\1\147\13\6"+
+ "\1\150\4\6\1\151\4\6\1\152\6\6\1\153\12\6"+
+ "\1\154\1\6\1\155\1\6\1\156\3\0\1\134\1\157"+
+ "\1\160\1\0\1\161\2\0\1\162\1\163\1\164\1\0"+
+ "\1\165\1\146\1\100\4\6\1\166\1\167\2\6\1\170"+
+ "\12\6\1\171\1\172\1\6\1\173\11\6\1\174\5\6"+
+ "\1\175\1\6\1\176\2\0\1\177\1\200\1\0\1\146"+
+ "\1\100\1\201\1\202\2\6\1\203\1\6\1\204\1\205"+
+ "\1\6\1\206\1\6\1\207\4\6\1\210\11\6\1\211"+
+ "\5\6\1\0\1\146\1\100\3\6\1\212\1\6\1\213"+
+ "\1\214\1\6\1\215\1\6\1\216\3\6\1\217\3\6"+
+ "\1\220\4\6\1\221\1\6\1\0\1\146\1\100\1\222"+
+ "\1\6\1\223\10\6\1\224\1\225\1\6\1\226\1\227"+
+ "\1\6\1\0\1\146\1\100\1\230\1\231\1\232\3\6"+
+ "\1\233\3\6\1\234\1\0\1\146\1\100\1\235\1\6"+
+ "\1\236\1\6\1\237\1\240\1\241\1\146\1\100\1\242"+
+ "\1\243\6\100";
+
+ private static int [] zzUnpackAction() {
+ int [] result = new int[446];
+ int offset = 0;
+ offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackAction(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int count = packed.charAt(i++);
+ int value = packed.charAt(i++);
+ do result[j++] = value; while (--count > 0);
+ }
+ return j;
+ }
+
+
+ /**
+ * Translates a state to a row index in the transition table
+ */
+ private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
+
+ private static final String ZZ_ROWMAP_PACKED_0 =
+ "\0\0\0\114\0\230\0\344\0\u0130\0\u017c\0\u01c8\0\u0214"+
+ "\0\u0260\0\u02ac\0\u02f8\0\u0344\0\u0390\0\u0344\0\u03dc\0\u0428"+
+ "\0\u0474\0\u04c0\0\u050c\0\u0558\0\u05a4\0\u05f0\0\u063c\0\u0688"+
+ "\0\u06d4\0\u0344\0\u0344\0\u0344\0\u0720\0\u0344\0\u0344\0\u076c"+
+ "\0\u07b8\0\u0804\0\u0850\0\u0344\0\u089c\0\u08e8\0\u0934\0\u0980"+
+ "\0\u09cc\0\u0a18\0\u0a64\0\u0ab0\0\u0afc\0\u0b48\0\u0b94\0\u0be0"+
+ "\0\u0c2c\0\u0c78\0\u0cc4\0\u0d10\0\u0d5c\0\u0344\0\u0344\0\u0344"+
+ "\0\u0344\0\u0344\0\u0344\0\u0344\0\u0da8\0\u0df4\0\u0e40\0\u0e8c"+
+ "\0\u0344\0\u0ed8\0\u0f24\0\u0344\0\u0344\0\u0f70\0\u0fbc\0\u1008"+
+ "\0\u0344\0\u1054\0\u0344\0\u10a0\0\u10ec\0\u1138\0\u0344\0\u0344"+
+ "\0\u1184\0\u0344\0\u11d0\0\u121c\0\u0344\0\u1268\0\u0344\0\u0344"+
+ "\0\u12b4\0\u1300\0\u0344\0\u134c\0\u1398\0\u0344\0\u13e4\0\u1430"+
+ "\0\u0344\0\u147c\0\u14c8\0\u0344\0\u0344\0\u1514\0\u0344\0\u1560"+
+ "\0\u0344\0\u15ac\0\u15f8\0\u0344\0\u0344\0\u1644\0\u0344\0\u0344"+
+ "\0\u1690\0\u0344\0\u0344\0\u16dc\0\u1728\0\u1774\0\u17c0\0\u180c"+
+ "\0\u1858\0\u18a4\0\u18f0\0\u193c\0\u1988\0\u19d4\0\u1a20\0\u1a6c"+
+ "\0\u1ab8\0\u0344\0\u0344\0\u1b04\0\u1b50\0\u04c0\0\u1b9c\0\u1be8"+
+ "\0\u1c34\0\u1c80\0\u1ccc\0\u1d18\0\u1d64\0\u1db0\0\u1dfc\0\u1e48"+
+ "\0\u1e94\0\u1ee0\0\u1f2c\0\u1f78\0\u04c0\0\u04c0\0\u1fc4\0\u2010"+
+ "\0\u205c\0\u20a8\0\u20f4\0\u04c0\0\u2140\0\u218c\0\u21d8\0\u2224"+
+ "\0\u2270\0\u22bc\0\u2308\0\u2354\0\u23a0\0\u23ec\0\u2438\0\u0344"+
+ "\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344"+
+ "\0\u2484\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u0344\0\u24d0"+
+ "\0\u0344\0\u1138\0\u0344\0\u1184\0\u0344\0\u11d0\0\u0344\0\u0344"+
+ "\0\u1268\0\u251c\0\u2568\0\u25b4\0\u2600\0\u264c\0\u2698\0\u26e4"+
+ "\0\u2730\0\u0344\0\u0344\0\u2484\0\u24d0\0\u277c\0\u27c8\0\u0344"+
+ "\0\u2814\0\u2860\0\u0344\0\u0344\0\u0344\0\u28ac\0\u0344\0\u28f8"+
+ "\0\u28f8\0\u0344\0\u2944\0\u180c\0\u2990\0\u29dc\0\u04c0\0\u2a28"+
+ "\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u2ba4\0\u2bf0\0\u2c3c\0\u2c88"+
+ "\0\u2cd4\0\u2d20\0\u04c0\0\u2d6c\0\u2db8\0\u2e04\0\u2e50\0\u04c0"+
+ "\0\u2e9c\0\u2ee8\0\u2f34\0\u2f80\0\u04c0\0\u2fcc\0\u3018\0\u3064"+
+ "\0\u30b0\0\u30fc\0\u3148\0\u04c0\0\u3194\0\u31e0\0\u322c\0\u3278"+
+ "\0\u32c4\0\u3310\0\u335c\0\u33a8\0\u33f4\0\u3440\0\u04c0\0\u348c"+
+ "\0\u04c0\0\u34d8\0\u04c0\0\u3524\0\u3570\0\u251c\0\u0344\0\u0344"+
+ "\0\u0344\0\u35bc\0\u0344\0\u3608\0\u3654\0\u36a0\0\u0344\0\u0344"+
+ "\0\u36ec\0\u0344\0\u3738\0\u3784\0\u37d0\0\u381c\0\u3868\0\u38b4"+
+ "\0\u04c0\0\u04c0\0\u3900\0\u394c\0\u04c0\0\u3998\0\u39e4\0\u3a30"+
+ "\0\u3a7c\0\u3ac8\0\u3b14\0\u3b60\0\u3bac\0\u3bf8\0\u3c44\0\u04c0"+
+ "\0\u04c0\0\u3c90\0\u04c0\0\u3cdc\0\u3d28\0\u3d74\0\u3dc0\0\u3e0c"+
+ "\0\u3e58\0\u3ea4\0\u3ef0\0\u3f3c\0\u04c0\0\u3f88\0\u3fd4\0\u4020"+
+ "\0\u406c\0\u40b8\0\u04c0\0\u4104\0\u0344\0\u2484\0\u4150\0\u0344"+
+ "\0\u0344\0\u419c\0\u41e8\0\u4234\0\u04c0\0\u4280\0\u42cc\0\u4318"+
+ "\0\u04c0\0\u4364\0\u04c0\0\u04c0\0\u43b0\0\u04c0\0\u43fc\0\u04c0"+
+ "\0\u4448\0\u4494\0\u44e0\0\u452c\0\u04c0\0\u4578\0\u45c4\0\u4610"+
+ "\0\u465c\0\u46a8\0\u46f4\0\u4740\0\u478c\0\u47d8\0\u04c0\0\u4824"+
+ "\0\u4870\0\u48bc\0\u4908\0\u4954\0\u49a0\0\u49ec\0\u4a38\0\u4a84"+
+ "\0\u4ad0\0\u4b1c\0\u04c0\0\u4b68\0\u04c0\0\u04c0\0\u4bb4\0\u04c0"+
+ "\0\u4c00\0\u04c0\0\u4c4c\0\u4c98\0\u4ce4\0\u04c0\0\u4d30\0\u4d7c"+
+ "\0\u4dc8\0\u04c0\0\u4e14\0\u4e60\0\u4eac\0\u4ef8\0\u04c0\0\u4f44"+
+ "\0\u4f90\0\u4fdc\0\u5028\0\u04c0\0\u5074\0\u04c0\0\u50c0\0\u510c"+
+ "\0\u5158\0\u51a4\0\u51f0\0\u523c\0\u5288\0\u52d4\0\u04c0\0\u04c0"+
+ "\0\u5320\0\u04c0\0\u04c0\0\u536c\0\u53b8\0\u5404\0\u5450\0\u04c0"+
+ "\0\u04c0\0\u04c0\0\u549c\0\u54e8\0\u5534\0\u04c0\0\u5580\0\u55cc"+
+ "\0\u5618\0\u04c0\0\u5664\0\u56b0\0\u56fc\0\u04c0\0\u5748\0\u04c0"+
+ "\0\u5794\0\u04c0\0\u04c0\0\u0344\0\u0344\0\u57e0\0\u04c0\0\u04c0"+
+ "\0\u582c\0\u5878\0\u58c4\0\u5910\0\u595c\0\u1774";
+
+ private static int [] zzUnpackRowMap() {
+ int [] result = new int[446];
+ int offset = 0;
+ offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackRowMap(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int high = packed.charAt(i++) << 16;
+ result[j++] = high | packed.charAt(i++);
+ }
+ return j;
+ }
+
+ /**
+ * The transition table of the DFA
+ */
+ private static final int [] ZZ_TRANS = zzUnpackTrans();
+
+ private static final String ZZ_TRANS_PACKED_0 =
+ "\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\14"+
+ "\1\22\1\23\1\24\1\17\1\25\1\26\1\27\1\30"+
+ "\1\22\1\31\1\14\1\32\1\33\4\22\1\34\1\35"+
+ "\1\36\1\37\1\40\2\22\1\41\2\31\1\22\1\42"+
+ "\1\43\1\14\1\44\1\45\1\46\1\47\1\22\1\50"+
+ "\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\22"+
+ "\1\60\1\22\1\61\2\22\1\62\1\63\1\64\1\65"+
+ "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+
+ "\1\76\1\77\1\100\1\101\1\22\1\14\1\102\1\103"+
+ "\1\104\30\102\1\105\12\102\1\106\45\102\1\107\1\110"+
+ "\1\111\31\107\1\105\11\107\1\106\45\107\1\14\1\112"+
+ "\1\113\1\114\1\115\3\14\1\116\2\14\1\114\2\14"+
+ "\1\117\2\116\4\14\4\116\5\14\3\116\2\14\2\116"+
+ "\3\14\26\116\2\14\1\120\46\14\1\121\44\14\1\122"+
+ "\14\14\1\112\1\113\1\114\4\14\1\123\2\14\1\114"+
+ "\3\14\2\123\2\14\1\124\1\14\4\123\5\14\3\123"+
+ "\2\14\2\123\3\14\26\123\2\14\1\125\46\14\1\126"+
+ "\44\14\1\127\13\14\1\130\1\112\1\113\26\130\1\131"+
+ "\63\130\1\132\1\133\12\130\1\134\77\130\1\112\1\113"+
+ "\7\130\1\135\65\130\1\136\13\130\1\137\1\110\1\111"+
+ "\43\137\1\140\1\141\44\137\116\0\1\16\114\0\1\17"+
+ "\7\0\1\17\104\0\1\142\1\143\24\0\1\144\113\0"+
+ "\1\145\67\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\26\22\14\0\1\22\12\0\1\146\1\147"+
+ "\6\0\1\150\13\0\1\150\3\0\2\150\33\0\1\151"+
+ "\25\0\1\152\1\0\1\153\4\0\2\152\4\0\4\152"+
+ "\1\0\1\154\3\0\3\152\2\0\2\152\3\0\26\152"+
+ "\2\0\1\155\45\0\1\156\76\0\1\157\14\0\1\160"+
+ "\77\0\1\161\13\0\1\162\100\0\1\163\105\0\1\150"+
+ "\7\0\1\31\13\0\1\31\3\0\2\31\2\164\101\0"+
+ "\1\165\72\0\1\150\7\0\1\166\13\0\1\167\2\170"+
+ "\1\0\1\171\1\172\2\164\55\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\2\22\1\173\3\22"+
+ "\1\174\2\22\1\175\1\176\13\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\1\22\1\177"+
+ "\6\22\3\0\2\22\1\200\11\22\1\201\11\22\14\0"+
+ "\1\22\33\0\1\202\12\0\1\203\54\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\1\22\1\204"+
+ "\24\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\7\22\1\205\3\0\26\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\5\22\1\206\20\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"+
+ "\1\207\3\22\1\210\5\22\1\211\11\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+
+ "\1\212\3\0\10\22\1\213\1\22\1\214\2\22\1\215"+
+ "\10\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\22\22\1\216\3\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\7\22\1\217\3\0\2\22\1\220\7\22\1\221\13\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\1\22\1\222\14\22\1\223\1\22"+
+ "\1\224\5\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\3\22\1\225\4\22\3\0\5\22"+
+ "\1\226\1\22\1\227\11\22\1\230\4\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\5\22\1\231\1\22\1\232\16\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+
+ "\1\233\3\0\6\22\1\234\11\22\1\235\5\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\11\22\1\236\4\22\1\237\7\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\1\22\1\240\1\241\7\22\1\242\13\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\2\22\1\243\3\22\1\244\17\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\7\22\1\245\3\0\26\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\7\22\1\246\16\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\2\22\1\247"+
+ "\23\22\14\0\1\22\33\0\1\250\52\0\1\251\40\0"+
+ "\1\252\53\0\1\253\37\0\1\254\113\0\1\255\61\0"+
+ "\1\102\2\0\30\102\1\0\12\102\1\0\45\102\2\0"+
+ "\1\104\111\0\1\256\3\0\27\256\1\257\1\260\1\256"+
+ "\1\261\1\256\1\262\5\256\1\263\1\256\1\264\1\265"+
+ "\5\256\1\266\1\267\1\256\1\270\30\256\1\0\1\107"+
+ "\2\0\31\107\1\0\11\107\1\0\45\107\2\0\1\111"+
+ "\113\0\1\113\114\0\1\114\7\0\1\114\116\0\1\271"+
+ "\105\0\2\272\3\0\1\272\1\0\4\272\2\0\4\272"+
+ "\1\0\1\273\2\0\10\272\3\0\26\272\16\0\1\274"+
+ "\2\0\30\274\1\275\60\274\10\0\2\276\3\0\1\276"+
+ "\1\0\4\276\2\0\4\276\1\0\1\277\2\0\10\276"+
+ "\3\0\26\276\34\0\1\300\75\0\1\301\2\0\30\301"+
+ "\1\302\1\303\57\301\31\0\1\304\64\0\1\133\126\0"+
+ "\1\305\102\0\1\306\3\0\1\307\3\0\1\310\2\0"+
+ "\2\307\2\0\1\311\1\0\4\307\5\0\3\307\2\0"+
+ "\2\307\3\0\26\307\2\0\1\312\13\0\1\137\2\0"+
+ "\43\137\2\0\44\137\1\313\3\0\32\313\1\314\1\313"+
+ "\1\262\5\313\1\263\1\313\1\264\1\265\5\313\1\266"+
+ "\1\267\1\313\1\315\27\313\1\316\1\0\1\142\1\317"+
+ "\1\320\111\142\5\321\1\322\106\321\11\0\1\323\123\0"+
+ "\1\150\13\0\1\150\3\0\2\150\2\164\57\0\2\152"+
+ "\3\0\1\152\1\0\4\152\2\0\4\152\4\0\10\152"+
+ "\3\0\26\152\50\0\1\324\113\0\1\325\77\0\1\326"+
+ "\13\0\1\327\76\0\1\330\3\0\1\331\13\0\1\331"+
+ "\3\0\2\331\2\0\1\330\100\0\1\332\72\0\1\150"+
+ "\7\0\1\166\13\0\1\166\3\0\2\166\2\164\60\0"+
+ "\1\150\7\0\1\166\13\0\1\167\3\0\1\171\1\172"+
+ "\2\164\67\0\2\333\3\0\3\333\5\0\1\334\2\0"+
+ "\5\333\3\0\1\333\1\0\1\333\1\0\1\333\6\0"+
+ "\1\333\41\0\1\150\7\0\1\166\13\0\1\172\3\0"+
+ "\2\172\2\164\60\0\1\150\7\0\1\166\13\0\1\335"+
+ "\3\0\2\335\2\164\55\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\14\22\1\336\11\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\1\22\1\337\24\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\7\22\1\340\16\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\7\22\1\341"+
+ "\16\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\10\22\1\342\15\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\4\22\1\343\21\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\5\22\1\344\20\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\7\22\1\345\3\0\26\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\10\22\1\346\15\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\5\22\1\347\2\22\1\350\15\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\7\22\1\351\16\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"+
+ "\1\352\23\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\10\22\1\353\15\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\2\22\1\354\23\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\17\22\1\355\6\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\11\22"+
+ "\1\356\14\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\7\22\1\357\3\0\26\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\15\22\1\360\10\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\10\22\1\361\10\22\1\362\4\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\14\22\1\363\11\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\12\22\1\364"+
+ "\5\22\1\365\5\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\1\22\1\366"+
+ "\7\22\1\367\14\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\17\22\1\370"+
+ "\6\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\5\22\1\371\2\22\1\372"+
+ "\15\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\17\22\1\373\6\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\7\22\1\374\3\0\26\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\13\22"+
+ "\1\375\12\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\3\22\1\376\4\22\3\0\14\22"+
+ "\1\377\11\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\7\22\1\u0100\16\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\10\22\1\u0101\15\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\11\22\1\u0102\14\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\6\22"+
+ "\1\u0103\2\22\1\u0104\14\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\4\22"+
+ "\1\u0105\21\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\1\u0106\25\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\1\22\1\u0107\24\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\11\22\1\u0108\14\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u0109"+
+ "\15\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\3\22\1\u010a\4\22\3\0\26\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\25\22\1\u010b\14\0\1\22\21\0\2\u010c"+
+ "\3\0\3\u010c\5\0\1\u010c\2\0\5\u010c\3\0\1\u010c"+
+ "\1\0\1\u010c\1\0\1\u010c\6\0\1\u010c\50\0\2\u010d"+
+ "\3\0\3\u010d\5\0\1\u010d\2\0\5\u010d\3\0\1\u010d"+
+ "\1\0\1\u010d\1\0\1\u010d\6\0\1\u010d\30\0\1\u010e"+
+ "\2\0\30\u010e\1\302\1\0\57\u010e\1\303\2\0\30\303"+
+ "\1\u010f\60\303\16\0\1\u0110\113\0\1\u0111\105\0\1\u0112"+
+ "\6\0\2\u0112\4\0\4\u0112\5\0\3\u0112\2\0\2\u0112"+
+ "\3\0\26\u0112\2\0\1\u0113\23\0\2\307\3\0\1\307"+
+ "\1\0\4\307\2\0\4\307\4\0\10\307\3\0\26\307"+
+ "\33\0\1\u0114\6\0\1\u0115\77\0\1\u0116\6\0\2\u0116"+
+ "\4\0\4\u0116\5\0\3\u0116\2\0\2\u0116\3\0\26\u0116"+
+ "\2\0\1\u0117\62\0\1\u0118\46\0\1\320\111\0\5\321"+
+ "\1\u0119\106\321\4\0\1\320\1\322\140\0\1\u011a\102\0"+
+ "\1\331\13\0\1\331\3\0\2\331\71\0\2\u011b\3\0"+
+ "\3\u011b\5\0\1\u011b\2\0\5\u011b\3\0\1\u011b\1\0"+
+ "\1\u011b\1\0\1\u011b\6\0\1\u011b\41\0\1\150\7\0"+
+ "\1\166\13\0\1\u011c\3\0\2\u011c\2\164\55\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\5\22"+
+ "\1\u011d\20\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\2\22\1\u011e\23\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\4\22\1\u011f\21\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+
+ "\1\u0120\3\0\26\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\16\22\1\u0121"+
+ "\7\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\7\22\1\u0122\3\0\26\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\2\22\1\u0123\23\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\12\22"+
+ "\1\u0124\13\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\7\22\1\u0125\3\0\26\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\4\22\1\u0126\21\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\5\22\1\u0127\2\22\1\u0128\15\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\5\22\1\u0129\20\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u012a"+
+ "\15\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\7\22\1\u012b\3\0\26\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\10\22\1\u012c\15\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\1\22"+
+ "\1\u012d\24\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\11\22\1\u012e\14\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\7\22\1\u012f\3\0\26\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\14\22\1\u0130\11\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\7\22\1\u0131\3\0\26\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\6\22\1\u0132\17\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\5\22\1\u0133\20\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\7\22\1\u0134\3\0"+
+ "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\10\22\1\u0135\15\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\7\22\1\u0136\3\0\26\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\6\22"+
+ "\1\u0137\5\22\1\u0138\11\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\7\22\1\u0139\3\0"+
+ "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\2\22\1\u013a\23\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\7\22\1\u013b\3\0\26\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"+
+ "\1\u013c\23\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\16\22\1\u013d\7\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\14\22\1\u013e\11\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\10\22\1\u013f\15\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\22\22"+
+ "\1\u0140\3\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\3\22\1\u0141\22\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\14\22\1\u0142\11\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\13\22\1\u0143\12\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\11\22"+
+ "\1\u0144\14\22\14\0\1\22\21\0\2\u0145\3\0\3\u0145"+
+ "\5\0\1\u0145\2\0\5\u0145\3\0\1\u0145\1\0\1\u0145"+
+ "\1\0\1\u0145\6\0\1\u0145\50\0\2\u0146\3\0\3\u0146"+
+ "\5\0\1\u0146\2\0\5\u0146\3\0\1\u0146\1\0\1\u0146"+
+ "\1\0\1\u0146\6\0\1\u0146\31\0\2\u0147\5\0\2\u0112"+
+ "\1\0\1\u0147\1\0\1\u0112\1\u0148\4\u0112\2\0\4\u0112"+
+ "\4\0\10\u0112\3\0\26\u0112\33\0\1\u0149\123\0\1\u014a"+
+ "\76\0\2\u0116\3\0\1\u0116\1\0\4\u0116\2\0\4\u0116"+
+ "\4\0\10\u0116\3\0\26\u0116\16\0\4\321\1\320\1\u0119"+
+ "\106\321\20\0\2\u014b\3\0\3\u014b\5\0\1\u014b\2\0"+
+ "\5\u014b\3\0\1\u014b\1\0\1\u014b\1\0\1\u014b\6\0"+
+ "\1\u014b\41\0\1\150\7\0\1\166\13\0\1\u014c\3\0"+
+ "\2\u014c\2\164\55\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\7\22\1\u014d\3\0\26\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\14\22\1\u014e\11\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u014f"+
+ "\15\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\7\22\1\u0150\16\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\3\22\1\u0151\22\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\1\22\1\u0152\24\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\16\22\1\u0153"+
+ "\7\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\10\22\1\u0154\15\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\11\22\1\u0155\14\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\5\22\1\u0156\20\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0157"+
+ "\14\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\1\22\1\u0158\24\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\4\22\1\u0159\21\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\1\22\1\u015a\24\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\22\22\1\u015b"+
+ "\3\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\5\22\1\u015c\20\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\15\22\1\u015d\10\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\6\22\1\u015e\17\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u015f"+
+ "\23\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\1\22\1\u0160\24\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\1\22\1\u0161\24\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0162"+
+ "\3\0\26\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\3\22\1\u0163\4\22\3\0\26\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\12\22\1\u0164\13\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\10\22\1\u0165\15\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\21\22"+
+ "\1\u0166\4\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\7\22\1\u0167\3\0\26\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\7\22\1\u0168\3\0\26\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\2\22"+
+ "\1\u0169\23\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\2\22\1\u016a\23\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\11\22\1\u016b\14\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\7\22\1\u016c\16\22\14\0\1\22\2\0\2\u0147"+
+ "\10\0\1\u0147\2\0\1\u0148\123\0\1\u016d\105\0\2\u016e"+
+ "\3\0\3\u016e\5\0\1\u016e\2\0\5\u016e\3\0\1\u016e"+
+ "\1\0\1\u016e\1\0\1\u016e\6\0\1\u016e\41\0\1\150"+
+ "\7\0\1\166\13\0\1\u016f\3\0\2\u016f\2\164\55\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\14\22\1\u0170\11\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0171"+
+ "\14\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\13\22\1\u0172\12\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\7\22\1\u0173\16\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\7\22\1\u0174\16\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u0175"+
+ "\21\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\16\22\1\u0176\7\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\11\22\1\u0177\14\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\7\22\1\u0178"+
+ "\3\0\26\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\17\22\1\u0179\6\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\3\22\1\u017a\4\22\3\0\26\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\7\22\1\u017b\16\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\3\22\1\u017c\4\22"+
+ "\3\0\7\22\1\u017d\16\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\10\22"+
+ "\1\u017e\15\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\21\22\1\u017f\4\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\11\22\1\u0180\14\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\14\22\1\u0181\11\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\7\22\1\u0182\3\0"+
+ "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\11\22\1\u0183\14\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\4\22\1\u0184\21\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\10\22\1\u0185\15\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\23\22\1\u0186"+
+ "\2\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\4\22\1\u0187\21\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\11\22\1\u0188\14\22\14\0\1\22\30\0"+
+ "\1\u0189\104\0\2\u018a\3\0\3\u018a\5\0\1\u018a\2\0"+
+ "\5\u018a\3\0\1\u018a\1\0\1\u018a\1\0\1\u018a\6\0"+
+ "\1\u018a\41\0\1\150\7\0\1\166\13\0\1\u018b\3\0"+
+ "\2\u018b\2\164\55\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\20\22\1\u018c\5\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\6\22\1\u018d\17\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\5\22"+
+ "\1\u018e\20\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\12\22\1\u018f\13\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\13\22\1\u0190\12\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\2\22\1\u0191\23\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\4\22"+
+ "\1\u0192\21\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\2\22\1\u0193\23\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\10\22\3\0\2\22\1\u0194\23\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+
+ "\1\u0195\3\0\26\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\7\22\1\u0196"+
+ "\16\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\10\22\1\u0197\15\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\4\22\1\u0198\21\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\10\22\1\u0199\15\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\7\22\1\u019a\3\0\26\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\7\22\1\u019b\3\0\26\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\10\22\1\u019c\15\22\14\0\1\22\31\0\1\u019d\103\0"+
+ "\2\u019e\3\0\3\u019e\5\0\1\u019e\2\0\5\u019e\3\0"+
+ "\1\u019e\1\0\1\u019e\1\0\1\u019e\6\0\1\u019e\41\0"+
+ "\1\150\7\0\1\166\13\0\1\u019f\3\0\2\u019f\2\164"+
+ "\55\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\7\22\1\u01a0\16\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\7\22\1\u01a1\3\0"+
+ "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\7\22\1\u01a2\3\0\26\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\4\22\1\u01a3\21\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\7\22\1\u01a4\3\0"+
+ "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\4\22\1\u01a5\21\22\14\0"+
+ "\1\22\7\0\3\22\7\0\2\22\3\0\4\22\4\0"+
+ "\10\22\3\0\14\22\1\u01a6\11\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\7\22\1\u01a7\16\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\7\22\1\u01a8\3\0\26\22"+
+ "\14\0\1\22\7\0\3\22\7\0\2\22\3\0\4\22"+
+ "\4\0\7\22\1\u01a9\3\0\26\22\14\0\1\22\7\0"+
+ "\3\22\7\0\2\22\3\0\4\22\4\0\10\22\3\0"+
+ "\20\22\1\u01aa\5\22\14\0\1\22\30\0\1\u01ab\104\0"+
+ "\2\u01ac\3\0\3\u01ac\5\0\1\u01ac\2\0\5\u01ac\3\0"+
+ "\1\u01ac\1\0\1\u01ac\1\0\1\u01ac\6\0\1\u01ac\41\0"+
+ "\1\150\7\0\1\166\13\0\1\u01ad\3\0\2\u01ad\2\164"+
+ "\55\0\3\22\7\0\2\22\3\0\4\22\4\0\7\22"+
+ "\1\u01ae\3\0\26\22\14\0\1\22\7\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\10\22\3\0\6\22\1\u01af"+
+ "\17\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\7\22\1\u01b0\3\0\26\22\14\0\1\22"+
+ "\7\0\3\22\7\0\2\22\3\0\4\22\4\0\10\22"+
+ "\3\0\10\22\1\u01b1\15\22\14\0\1\22\7\0\3\22"+
+ "\7\0\2\22\3\0\4\22\4\0\10\22\3\0\13\22"+
+ "\1\u01b2\12\22\14\0\1\22\7\0\3\22\7\0\2\22"+
+ "\3\0\4\22\4\0\10\22\3\0\13\22\1\u01b3\12\22"+
+ "\14\0\1\22\25\0\1\u01b4\107\0\2\u01b5\3\0\3\u01b5"+
+ "\5\0\1\u01b5\2\0\5\u01b5\3\0\1\u01b5\1\0\1\u01b5"+
+ "\1\0\1\u01b5\6\0\1\u01b5\41\0\1\150\7\0\1\166"+
+ "\13\0\1\u01b6\3\0\2\u01b6\2\164\55\0\3\22\7\0"+
+ "\2\22\3\0\4\22\4\0\3\22\1\u01b7\4\22\3\0"+
+ "\26\22\14\0\1\22\7\0\3\22\7\0\2\22\3\0"+
+ "\4\22\4\0\10\22\3\0\5\22\1\u01b8\20\22\14\0"+
+ "\1\22\12\0\1\150\7\0\1\166\13\0\1\u01b9\3\0"+
+ "\2\u01b9\2\164\60\0\1\150\7\0\1\166\13\0\1\u01ba"+
+ "\3\0\2\u01ba\2\164\60\0\1\150\7\0\1\166\13\0"+
+ "\1\u01bb\3\0\2\u01bb\2\164\60\0\1\150\7\0\1\166"+
+ "\13\0\1\u01bc\3\0\2\u01bc\2\164\60\0\1\150\7\0"+
+ "\1\166\13\0\1\u01bd\3\0\2\u01bd\2\164\60\0\1\150"+
+ "\7\0\1\166\13\0\1\u01be\3\0\2\u01be\2\164\47\0";
+
+ private static int [] zzUnpackTrans() {
+ int [] result = new int[22952];
+ int offset = 0;
+ offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackTrans(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int count = packed.charAt(i++);
+ int value = packed.charAt(i++);
+ value--;
+ do result[j++] = value; while (--count > 0);
+ }
+ return j;
+ }
+
+
+ /* error codes */
+ private static final int ZZ_UNKNOWN_ERROR = 0;
+ private static final int ZZ_NO_MATCH = 1;
+ private static final int ZZ_PUSHBACK_2BIG = 2;
+
+ /* error messages for the codes above */
+ private static final String ZZ_ERROR_MSG[] = {
+ "Unkown internal scanner error",
+ "Error: could not match input",
+ "Error: pushback value was too large"
+ };
+
+ /**
+ * ZZ_ATTRIBUTE[aState] contains the attributes of state aState
+ */
+ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
+
+ private static final String ZZ_ATTRIBUTE_PACKED_0 =
+ "\13\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11"+
+ "\4\1\1\11\21\1\7\11\4\1\1\11\2\1\2\11"+
+ "\3\1\1\11\1\1\1\11\3\1\2\11\1\1\1\11"+
+ "\2\1\1\11\1\1\2\11\2\1\1\11\2\1\1\11"+
+ "\2\1\1\11\1\1\1\0\2\11\1\1\1\11\1\1"+
+ "\1\11\2\1\2\11\1\1\2\11\1\1\2\11\1\0"+
+ "\3\1\1\0\11\1\2\11\44\1\11\11\1\1\6\11"+
+ "\1\1\1\11\1\0\1\11\1\0\1\11\1\0\2\11"+
+ "\1\0\1\1\4\0\1\1\2\0\2\11\4\1\1\11"+
+ "\2\0\3\11\1\1\1\11\1\0\1\1\1\11\61\1"+
+ "\3\0\3\11\1\0\1\11\2\0\1\1\2\11\1\0"+
+ "\1\11\52\1\1\11\2\0\2\11\1\0\42\1\1\0"+
+ "\33\1\1\0\23\1\1\0\15\1\1\0\10\1\2\11"+
+ "\11\1";
+
+ private static int [] zzUnpackAttribute() {
+ int [] result = new int[446];
+ int offset = 0;
+ offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackAttribute(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int count = packed.charAt(i++);
+ int value = packed.charAt(i++);
+ do result[j++] = value; while (--count > 0);
+ }
+ return j;
+ }
+
+ /** the input device */
+ private java.io.Reader zzReader;
+
+ /** the current state of the DFA */
+ private int zzState;
+
+ /** the current lexical state */
+ private int zzLexicalState = YYINITIAL;
+
+ /** this buffer contains the current text to be matched and is
+ the source of the yytext() string */
+ private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
+
+ /** the textposition at the last accepting state */
+ private int zzMarkedPos;
+
+ /** the current text position in the buffer */
+ private int zzCurrentPos;
+
+ /** startRead marks the beginning of the yytext() string in the buffer */
+ private int zzStartRead;
+
+ /** endRead marks the last character in the buffer, that has been read
+ from input */
+ private int zzEndRead;
+
+ /** number of newlines encountered up to the start of the matched text */
+ private int yyline;
+
+ /** the number of characters up to the start of the matched text */
+ private int yychar;
+
+ /**
+ * the number of characters from the last newline up to the start of the
+ * matched text
+ */
+ private int yycolumn;
+
+ /**
+ * zzAtBOL == true <=> the scanner is currently at the beginning of a line
+ */
+ private boolean zzAtBOL = true;
+
+ /** zzAtEOF == true <=> the scanner is at the EOF */
+ private boolean zzAtEOF;
+
+ /** denotes if the user-EOF-code has already been executed */
+ private boolean zzEOFDone;
+
+ /**
+ * The number of occupied positions in zzBuffer beyond zzEndRead.
+ * When a lead/high surrogate has been read from the input stream
+ * into the final zzBuffer position, this will have a value of 1;
+ * otherwise, it will have a value of 0.
+ */
+ private int zzFinalHighSurrogate = 0;
+
+ /* user code: */
+
+ private String sourceCode;
+
+ public ActionScriptLexer(String sourceCode){
+ this(new StringReader(sourceCode));
+ this.sourceCode = sourceCode;
+ }
+
+ public void yypushbackstr(String s, int state)
+ {
+ sourceCode = s + sourceCode.substring(yychar + yylength());
+ yyreset(new StringReader(sourceCode));
+ yybegin(state);
+ }
+
+ public void yypushbackstr(String s)
+ {
+ yypushbackstr(s, YYINITIAL);
+ }
+
+ StringBuffer string = new StringBuffer();
+
+ private static String xmlTagName = "";
+
+ public int yychar() {
+ return yychar;
+ }
+
+ private Stack pushedBack = new Stack<>();
+
+ public int yyline() {
+ return yyline + 1;
+ }
+
+ private List listeners=new ArrayList<>();
+
+ public void addListener(LexListener listener){
+ listeners.add(listener);
+ }
+
+ public void removeListener(LexListener listener){
+ listeners.remove(listener);
+ }
+
+ public void informListenersLex(ParsedSymbol s){
+ for(LexListener l:listeners){
+ l.onLex(s);
+ }
+ }
+
+ public void informListenersPushBack(ParsedSymbol s){
+ for(LexListener l:listeners){
+ l.onPushBack(s);
+ }
+ }
+
+ public void pushback(ParsedSymbol symb) {
+ pushedBack.push(symb);
+ last = null;
+ informListenersPushBack(symb);
+ }
+
+ ParsedSymbol last;
+ public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException{
+ ParsedSymbol ret = null;
+ if (!pushedBack.isEmpty()){
+ ret = last = pushedBack.pop();
+ } else {
+ ret = last = yylex();
+ }
+ informListenersLex(ret);
+ return ret;
+ }
+
+
+
+ /**
+ * Creates a new scanner
+ *
+ * @param in the java.io.Reader to read input from.
+ */
+ public ActionScriptLexer(java.io.Reader in) {
+ this.zzReader = in;
+ }
+
+
+ /**
+ * Unpacks the compressed character translation table.
+ *
+ * @param packed the packed character translation table
+ * @return the unpacked character translation table
+ */
+ private static char [] zzUnpackCMap(String packed) {
+ char [] map = new char[0x110000];
+ int i = 0; /* index in packed string */
+ int j = 0; /* index in unpacked array */
+ while (i < 3140) {
+ int count = packed.charAt(i++);
+ char value = packed.charAt(i++);
+ do map[j++] = value; while (--count > 0);
+ }
+ return map;
+ }
+
+
+ /**
+ * Refills the input buffer.
+ *
+ * @return false, iff there was new input.
+ *
+ * @exception java.io.IOException if any I/O-Error occurs
+ */
+ private boolean zzRefill() throws java.io.IOException {
+
+ /* first: make room (if you can) */
+ if (zzStartRead > 0) {
+ zzEndRead += zzFinalHighSurrogate;
+ zzFinalHighSurrogate = 0;
+ System.arraycopy(zzBuffer, zzStartRead,
+ zzBuffer, 0,
+ zzEndRead-zzStartRead);
+
+ /* translate stored positions */
+ zzEndRead-= zzStartRead;
+ zzCurrentPos-= zzStartRead;
+ zzMarkedPos-= zzStartRead;
+ zzStartRead = 0;
+ }
+
+ /* is the buffer big enough? */
+ if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) {
+ /* if not: blow it up */
+ char newBuffer[] = new char[zzBuffer.length*2];
+ System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
+ zzBuffer = newBuffer;
+ zzEndRead += zzFinalHighSurrogate;
+ zzFinalHighSurrogate = 0;
+ }
+
+ /* fill the buffer with new input */
+ int requested = zzBuffer.length - zzEndRead;
+ int totalRead = 0;
+ while (totalRead < requested) {
+ int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead);
+ if (numRead == -1) {
+ break;
+ }
+ totalRead += numRead;
+ }
+
+ if (totalRead > 0) {
+ zzEndRead += totalRead;
+ if (totalRead == requested) { /* possibly more input available */
+ if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) {
+ --zzEndRead;
+ zzFinalHighSurrogate = 1;
+ }
+ }
+ return false;
+ }
+
+ // totalRead = 0: End of stream
+ return true;
+ }
+
+
+ /**
+ * Closes the input stream.
+ */
+ public final void yyclose() throws java.io.IOException {
+ zzAtEOF = true; /* indicate end of file */
+ zzEndRead = zzStartRead; /* invalidate buffer */
+
+ if (zzReader != null)
+ zzReader.close();
+ }
+
+
+ /**
+ * Resets the scanner to read from a new input stream.
+ * Does not close the old reader.
+ *
+ * All internal variables are reset, the old input stream
+ * cannot be reused (internal buffer is discarded and lost).
+ * Lexical state is set to ZZ_INITIAL.
+ *
+ * Internal scan buffer is resized down to its initial length, if it has grown.
+ *
+ * @param reader the new input stream
+ */
+ public final void yyreset(java.io.Reader reader) {
+ zzReader = reader;
+ zzAtBOL = true;
+ zzAtEOF = false;
+ zzEOFDone = false;
+ zzEndRead = zzStartRead = 0;
+ zzCurrentPos = zzMarkedPos = 0;
+ zzFinalHighSurrogate = 0;
+ yyline = yychar = yycolumn = 0;
+ zzLexicalState = YYINITIAL;
+ if (zzBuffer.length > ZZ_BUFFERSIZE)
+ zzBuffer = new char[ZZ_BUFFERSIZE];
+ }
+
+
+ /**
+ * Returns the current lexical state.
+ */
+ public final int yystate() {
+ return zzLexicalState;
+ }
+
+
+ /**
+ * Enters a new lexical state
+ *
+ * @param newState the new lexical state
+ */
+ public final void yybegin(int newState) {
+ zzLexicalState = newState;
+ }
+
+
+ /**
+ * Returns the text matched by the current regular expression.
+ */
+ public final String yytext() {
+ return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
+ }
+
+
+ /**
+ * Returns the character at position pos from the
+ * matched text.
+ *
+ * It is equivalent to yytext().charAt(pos), but faster
+ *
+ * @param pos the position of the character to fetch.
+ * A value from 0 to yylength()-1.
+ *
+ * @return the character at position pos
+ */
+ public final char yycharat(int pos) {
+ return zzBuffer[zzStartRead+pos];
+ }
+
+
+ /**
+ * Returns the length of the matched text region.
+ */
+ public final int yylength() {
+ return zzMarkedPos-zzStartRead;
+ }
+
+
+ /**
+ * Reports an error that occured while scanning.
+ *
+ * In a wellformed scanner (no or only correct usage of
+ * yypushback(int) and a match-all fallback rule) this method
+ * will only be called with things that "Can't Possibly Happen".
+ * If this method is called, something is seriously wrong
+ * (e.g. a JFlex bug producing a faulty scanner etc.).
+ *
+ * Usual syntax/scanner level error handling should be done
+ * in error fallback rules.
+ *
+ * @param errorCode the code of the errormessage to display
+ */
+ private void zzScanError(int errorCode) {
+ String message;
+ try {
+ message = ZZ_ERROR_MSG[errorCode];
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+ }
+
+ throw new Error(message);
+ }
+
+
+ /**
+ * Pushes the specified amount of characters back into the input stream.
+ *
+ * They will be read again by then next call of the scanning method
+ *
+ * @param number the number of characters to be read again.
+ * This number must not be greater than yylength()!
+ */
+ public void yypushback(int number) {
+ if ( number > yylength() )
+ zzScanError(ZZ_PUSHBACK_2BIG);
+
+ zzMarkedPos -= number;
+ }
+
+
+ /**
+ * Resumes scanning until the next regular expression is matched,
+ * the end of input is encountered or an I/O-Error occurs.
+ *
+ * @return the next token
+ * @exception java.io.IOException if any I/O-Error occurs
+ */
+ public ParsedSymbol yylex() throws java.io.IOException, AVM2ParseException {
+ int zzInput;
+ int zzAction;
+
+ // cached fields:
+ int zzCurrentPosL;
+ int zzMarkedPosL;
+ int zzEndReadL = zzEndRead;
+ char [] zzBufferL = zzBuffer;
+ char [] zzCMapL = ZZ_CMAP;
+
+ int [] zzTransL = ZZ_TRANS;
+ int [] zzRowMapL = ZZ_ROWMAP;
+ int [] zzAttrL = ZZ_ATTRIBUTE;
+
+ while (true) {
+ zzMarkedPosL = zzMarkedPos;
+
+ yychar+= zzMarkedPosL-zzStartRead;
+
+ zzAction = -1;
+
+ zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+
+ zzState = ZZ_LEXSTATE[zzLexicalState];
+
+ // set up zzAction for empty match case:
+ int zzAttributes = zzAttrL[zzState];
+ if ( (zzAttributes & 1) == 1 ) {
+ zzAction = zzState;
+ }
+
+
+ zzForAction: {
+ while (true) {
+
+ if (zzCurrentPosL < zzEndReadL) {
+ zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
+ zzCurrentPosL += Character.charCount(zzInput);
+ }
+ else if (zzAtEOF) {
+ zzInput = YYEOF;
+ break zzForAction;
+ }
+ else {
+ // store back cached positions
+ zzCurrentPos = zzCurrentPosL;
+ zzMarkedPos = zzMarkedPosL;
+ boolean eof = zzRefill();
+ // get translated positions and possibly new buffer
+ zzCurrentPosL = zzCurrentPos;
+ zzMarkedPosL = zzMarkedPos;
+ zzBufferL = zzBuffer;
+ zzEndReadL = zzEndRead;
+ if (eof) {
+ zzInput = YYEOF;
+ break zzForAction;
+ }
+ else {
+ zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
+ zzCurrentPosL += Character.charCount(zzInput);
+ }
+ }
+ int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
+ if (zzNext == -1) break zzForAction;
+ zzState = zzNext;
+
+ zzAttributes = zzAttrL[zzState];
+ if ( (zzAttributes & 1) == 1 ) {
+ zzAction = zzState;
+ zzMarkedPosL = zzCurrentPosL;
+ if ( (zzAttributes & 8) == 8 ) break zzForAction;
+ }
+
+ }
+ }
+
+ // store back cached position
+ zzMarkedPos = zzMarkedPosL;
+
+ switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+ case 1:
+ {
+ }
+ case 164: break;
+ case 2:
+ { yyline++;
+ }
+ case 165: break;
+ case 3:
+ { /*ignore*/
+ }
+ case 166: break;
+ case 4:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext());
+ }
+ case 167: break;
+ case 5:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext());
+ }
+ case 168: break;
+ case 6:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext());
+ }
+ case 169: break;
+ case 7:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext());
+ }
+ case 170: break;
+ case 8:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext());
+ }
+ case 171: break;
+ case 9:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext());
+ }
+ case 172: break;
+ case 10:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext());
+ }
+ case 173: break;
+ case 11:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext());
+ }
+ case 174: break;
+ case 12:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext());
+ }
+ case 175: break;
+ case 13:
+ { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong((yytext())));
+ }
+ case 176: break;
+ case 14:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext());
+ }
+ case 177: break;
+ case 15:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext());
+ }
+ case 178: break;
+ case 16:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext());
+ }
+ case 179: break;
+ case 17:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext());
+ }
+ case 180: break;
+ case 18:
+ { string.setLength(0);
+ yybegin(STRING);
+ }
+ case 181: break;
+ case 19:
+ { string.setLength(0);
+ yybegin(CHARLITERAL);
+ }
+ case 182: break;
+ case 20:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext());
+ }
+ case 183: break;
+ case 21:
+ { string.setLength(0);
+ yybegin(OIDENTIFIER);
+ }
+ case 184: break;
+ case 22:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext());
+ }
+ case 185: break;
+ case 23:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext());
+ }
+ case 186: break;
+ case 24:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext());
+ }
+ case 187: break;
+ case 25:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext());
+ }
+ case 188: break;
+ case 26:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext());
+ }
+ case 189: break;
+ case 27:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext());
+ }
+ case 190: break;
+ case 28:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext());
+ }
+ case 191: break;
+ case 29:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext());
+ }
+ case 192: break;
+ case 30:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext());
+ }
+ case 193: break;
+ case 31:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext());
+ }
+ case 194: break;
+ case 32:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext());
+ }
+ case 195: break;
+ case 33:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext());
+ }
+ case 196: break;
+ case 34:
+ { string.append(yytext());
+ }
+ case 197: break;
+ case 35:
+ { yybegin(YYINITIAL); yyline++;
+ }
+ case 198: break;
+ case 36:
+ { yybegin(YYINITIAL);
+ // length also includes the trailing quote
+ return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString());
+ }
+ case 199: break;
+ case 37:
+ { yybegin(YYINITIAL); yyline++;
+ }
+ case 200: break;
+ case 38:
+ { string.append(yytext()); yyline++;
+ }
+ case 201: break;
+ case 39:
+ { yybegin(XML);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 202: break;
+ case 40:
+ { yybegin(YYINITIAL);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 203: break;
+ case 41:
+ { yybegin(YYINITIAL);
+ return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext());
+ }
+ case 204: break;
+ case 42:
+ { yybegin(YYINITIAL);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 205: break;
+ case 43:
+ { yybegin(YYINITIAL);
+ return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext());
+ }
+ case 206: break;
+ case 44:
+ { string.append(yytext()); yyline++;
+ }
+ case 207: break;
+ case 45:
+ { yybegin(YYINITIAL);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 208: break;
+ case 46:
+ { yybegin(YYINITIAL);
+ // length also includes the trailing quote
+ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString());
+ }
+ case 209: break;
+ case 47:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext());
+ }
+ case 210: break;
+ case 48:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext());
+ }
+ case 211: break;
+ case 49:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext());
+ }
+ case 212: break;
+ case 50:
+ { return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext());
+ }
+ case 213: break;
+ case 51:
+ { return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble((yytext())));
+ }
+ case 214: break;
+ case 52:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext());
+ }
+ case 215: break;
+ case 53:
+ { yybegin(XMLOPENTAG);
+ string.setLength(0);
+ return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext());
+ }
+ case 216: break;
+ case 54:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext());
+ }
+ case 217: break;
+ case 55:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext());
+ }
+ case 218: break;
+ case 56:
+ { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext());
+ }
+ case 219: break;
+ case 57:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext());
+ }
+ case 220: break;
+ case 58:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext());
+ }
+ case 221: break;
+ case 59:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext());
+ }
+ case 222: break;
+ case 60:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext());
+ }
+ case 223: break;
+ case 61:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext());
+ }
+ case 224: break;
+ case 62:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext());
+ }
+ case 225: break;
+ case 63:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext());
+ }
+ case 226: break;
+ case 64:
+ { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext(), 8));
+ }
+ case 227: break;
+ case 65:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext());
+ }
+ case 228: break;
+ case 66:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext());
+ }
+ case 229: break;
+ case 67:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext());
+ }
+ case 230: break;
+ case 68:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext());
+ }
+ case 231: break;
+ case 69:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext());
+ }
+ case 232: break;
+ case 70:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext());
+ }
+ case 233: break;
+ case 71:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext());
+ }
+ case 234: break;
+ case 72:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext());
+ }
+ case 235: break;
+ case 73:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext());
+ }
+ case 236: break;
+ case 74:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext());
+ }
+ case 237: break;
+ case 75:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext());
+ }
+ case 238: break;
+ case 76:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext());
+ }
+ case 239: break;
+ case 77:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext());
+ }
+ case 240: break;
+ case 78:
+ { /* ignore illegal character escape */
+ }
+ case 241: break;
+ case 79:
+ { string.append('\"');
+ }
+ case 242: break;
+ case 80:
+ { string.append('\'');
+ }
+ case 243: break;
+ case 81:
+ { string.append('\f');
+ }
+ case 244: break;
+ case 82:
+ { string.append('\\');
+ }
+ case 245: break;
+ case 83:
+ { string.append('\b');
+ }
+ case 246: break;
+ case 84:
+ { string.append('\r');
+ }
+ case 247: break;
+ case 85:
+ { string.append('\n');
+ }
+ case 248: break;
+ case 86:
+ { string.append('\t');
+ }
+ case 249: break;
+ case 87:
+ { yybegin(XML);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 250: break;
+ case 88:
+ { yybegin(XMLOPENTAGATTRIB);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 251: break;
+ case 89:
+ { yybegin(XMLOPENTAG);
+ return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
+ }
+ case 252: break;
+ case 90:
+ { yybegin(XMLINSTRATTRIB);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 253: break;
+ case 91:
+ { yybegin(XML);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_END, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 254: break;
+ case 92:
+ { yybegin(XMLINSTROPENTAG);
+ return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
+ }
+ case 255: break;
+ case 93:
+ { yybegin(XMLOPENTAG);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 256: break;
+ case 94:
+ { yybegin(YYINITIAL);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 257: break;
+ case 95:
+ { throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1);
+ }
+ case 258: break;
+ case 96:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext());
+ }
+ case 259: break;
+ case 97:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext());
+ }
+ case 260: break;
+ case 98:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext());
+ }
+ case 261: break;
+ case 99:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext());
+ }
+ case 262: break;
+ case 100:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext());
+ }
+ case 263: break;
+ case 101:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext());
+ }
+ case 264: break;
+ case 102:
+ { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext().substring(2), 16));
+ }
+ case 265: break;
+ case 103:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext());
+ }
+ case 266: break;
+ case 104:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext());
+ }
+ case 267: break;
+ case 105:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext());
+ }
+ case 268: break;
+ case 106:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext());
+ }
+ case 269: break;
+ case 107:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext());
+ }
+ case 270: break;
+ case 108:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext());
+ }
+ case 271: break;
+ case 109:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext());
+ }
+ case 272: break;
+ case 110:
+ { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext());
+ }
+ case 273: break;
+ case 111:
+ { string.append(yytext());
+ yybegin(XML);
+ String ret = string.toString();
+ string.setLength(0);
+ return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret);
+ }
+ case 274: break;
+ case 112:
+ { string.append(yytext());
+ yybegin(XML);
+ String ret = string.toString();
+ string.setLength(0);
+ return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
+ }
+ case 275: break;
+ case 113:
+ { yybegin(YYINITIAL);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 276: break;
+ case 114:
+ { yybegin(XMLINSTROPENTAG);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_BEGIN, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 277: break;
+ case 115:
+ { yybegin(YYINITIAL);
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRVARTAG_BEGIN, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 278: break;
+ case 116:
+ { string.append('\u00A7');
+ }
+ case 279: break;
+ case 117:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext());
+ }
+ case 280: break;
+ case 118:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext());
+ }
+ case 281: break;
+ case 119:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext());
+ }
+ case 282: break;
+ case 120:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext());
+ }
+ case 283: break;
+ case 121:
+ { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext());
+ }
+ case 284: break;
+ case 122:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext());
+ }
+ case 285: break;
+ case 123:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext());
+ }
+ case 286: break;
+ case 124:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext());
+ }
+ case 287: break;
+ case 125:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext());
+ }
+ case 288: break;
+ case 126:
+ { char val = (char) Integer.parseInt(yytext().substring(2), 16);
+ string.append(val);
+ }
+ case 289: break;
+ case 127:
+ { pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext()));
+ if (string.length() > 0){
+ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
+ string.setLength(0);
+ }
+ return lex();
+ }
+ case 290: break;
+ case 128:
+ { String ret = string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT);
+ if (!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
+ }
+ case 291: break;
+ case 129:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext());
+ }
+ case 292: break;
+ case 130:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext());
+ }
+ case 293: break;
+ case 131:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext());
+ }
+ case 294: break;
+ case 132:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext());
+ }
+ case 295: break;
+ case 133:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext());
+ }
+ case 296: break;
+ case 134:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext());
+ }
+ case 297: break;
+ case 135:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext());
+ }
+ case 298: break;
+ case 136:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext());
+ }
+ case 299: break;
+ case 137:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext());
+ }
+ case 300: break;
+ case 138:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext());
+ }
+ case 301: break;
+ case 139:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext());
+ }
+ case 302: break;
+ case 140:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext());
+ }
+ case 303: break;
+ case 141:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext());
+ }
+ case 304: break;
+ case 142:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext());
+ }
+ case 305: break;
+ case 143:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext());
+ }
+ case 306: break;
+ case 144:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext());
+ }
+ case 307: break;
+ case 145:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext());
+ }
+ case 308: break;
+ case 146:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext());
+ }
+ case 309: break;
+ case 147:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext());
+ }
+ case 310: break;
+ case 148:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext());
+ }
+ case 311: break;
+ case 149:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext());
+ }
+ case 312: break;
+ case 150:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext());
+ }
+ case 313: break;
+ case 151:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext());
+ }
+ case 314: break;
+ case 152:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext());
+ }
+ case 315: break;
+ case 153:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext());
+ }
+ case 316: break;
+ case 154:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext());
+ }
+ case 317: break;
+ case 155:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext());
+ }
+ case 318: break;
+ case 156:
+ { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext());
+ }
+ case 319: break;
+ case 157:
+ { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext());
+ }
+ case 320: break;
+ case 158:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext());
+ }
+ case 321: break;
+ case 159:
+ { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext());
+ }
+ case 322: break;
+ case 160:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext());
+ }
+ case 323: break;
+ case 161:
+ { String ret = string.toString(); string.setLength(0); string.append(yytext() ); yybegin(XMLCDATA);
+ if (!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
+ }
+ case 324: break;
+ case 162:
+ { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext());
+ }
+ case 325: break;
+ case 163:
+ { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext());
+ }
+ case 326: break;
+ default:
+ if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+ zzAtEOF = true;
+ {
+ return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null);
+ }
+ }
+ else {
+ zzScanError(ZZ_NO_MATCH);
+ }
+ }
+ }
+ }
+
+
+}
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABCDefineTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABC2Tag.java
similarity index 92%
rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABCDefineTag.java
rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABC2Tag.java
index e83689b84..3a9a6c23e 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABCDefineTag.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABC2Tag.java
@@ -39,11 +39,11 @@ import java.io.OutputStream;
*
* @author JPEXS
*/
-public class DoABCDefineTag extends Tag implements ABCContainerTag {
+public class DoABC2Tag extends Tag implements ABCContainerTag {
public static final int ID = 82;
- public static final String NAME = "DoABCDefine";
+ public static final String NAME = "DoABC2";
/**
* ActionScript 3 bytecodes
@@ -71,7 +71,7 @@ public class DoABCDefineTag extends Tag implements ABCContainerTag {
*
* @param swf
*/
- public DoABCDefineTag(SWF swf) {
+ public DoABC2Tag(SWF swf) {
super(swf, ID, NAME, null);
name = "New DoABC";
abc = new ABC(this);
@@ -84,7 +84,7 @@ public class DoABCDefineTag extends Tag implements ABCContainerTag {
* @param data
* @throws IOException
*/
- public DoABCDefineTag(SWFInputStream sis, ByteArrayRange data) throws IOException {
+ public DoABC2Tag(SWFInputStream sis, ByteArrayRange data) throws IOException {
super(sis.getSwf(), ID, NAME, data);
readData(sis, data, 0, false, false, false);
}
@@ -136,8 +136,8 @@ public class DoABCDefineTag extends Tag implements ABCContainerTag {
@Override
public int compareTo(ABCContainerTag o) {
- if (o instanceof DoABCDefineTag) {
- DoABCDefineTag n = (DoABCDefineTag) o;
+ if (o instanceof DoABC2Tag) {
+ DoABC2Tag n = (DoABC2Tag) o;
int lastCmp = name.compareTo(n.name);
return (lastCmp != 0 ? lastCmp
: name.compareTo(n.name));
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java
index a4009c108..0016ed560 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java
@@ -226,7 +226,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable {
addTagInfo(map, map2, DefineText2Tag.ID, DefineText2Tag.class, DefineText2Tag.NAME);
addTagInfo(map, map2, DefineTextTag.ID, DefineTextTag.class, DefineTextTag.NAME);
addTagInfo(map, map2, DefineVideoStreamTag.ID, DefineVideoStreamTag.class, DefineVideoStreamTag.NAME);
- addTagInfo(map, map2, DoABCDefineTag.ID, DoABCDefineTag.class, DoABCDefineTag.NAME);
+ addTagInfo(map, map2, DoABC2Tag.ID, DoABC2Tag.class, DoABC2Tag.NAME);
addTagInfo(map, map2, DoABCTag.ID, DoABCTag.class, DoABCTag.NAME);
addTagInfo(map, map2, DoActionTag.ID, DoActionTag.class, DoActionTag.NAME);
addTagInfo(map, map2, DoInitActionTag.ID, DoInitActionTag.class, DoInitActionTag.NAME);
@@ -330,7 +330,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable {
DefineText2Tag.ID,
DefineTextTag.ID,
DefineVideoStreamTag.ID,
- DoABCDefineTag.ID,
+ DoABC2Tag.ID,
DoABCTag.ID,
DoActionTag.ID,
DoInitActionTag.ID,
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java
index b15da3899..a2372b4f4 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java
@@ -66,6 +66,7 @@ public enum FLAVersion {
versionToPlayerMap.put(26, "FlashPlayer15.0");
versionToPlayerMap.put(27, "FlashPlayer16.0");
versionToPlayerMap.put(28, "FlashPlayer17.0");
+ versionToPlayerMap.put(29, "FlashPlayer18.0");
}
private FLAVersion(String shortName, String applicationName, String xflVersion, int maxSwfVersion) {
diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java
index 0e6e5c3cc..ab3aff734 100644
--- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java
+++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java
@@ -1,945 +1,945 @@
-/*
- * Copyright (C) 2010-2015 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;
-
-import com.jpexs.decompiler.flash.abc.ABC;
-import com.jpexs.decompiler.flash.configuration.Configuration;
-import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode;
-import com.jpexs.decompiler.flash.helpers.CodeFormatting;
-import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter;
-import com.jpexs.decompiler.flash.helpers.NulWriter;
-import com.jpexs.decompiler.flash.tags.DoABCDefineTag;
-import com.jpexs.decompiler.flash.tags.Tag;
-import com.jpexs.decompiler.graph.ScopeStack;
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-/**
- *
- * @author JPEXS
- */
-public class ActionScript3Test extends ActionScriptTestBase {
-
- private SWF swf;
-
- private int clsIndex;
-
- private ABC abc;
-
- @BeforeClass
- public void init() throws IOException, InterruptedException {
- //Main.initLogging(false);
- swf = new SWF(new BufferedInputStream(new FileInputStream("testdata/as3/as3.swf")), false);
- DoABCDefineTag tag = null;
- for (Tag t : swf.tags) {
- if (t instanceof DoABCDefineTag) {
- tag = (DoABCDefineTag) t;
- break;
- }
- }
- assertNotNull(tag);
- clsIndex = tag.getABC().findClassByName("classes.Test");
- assertTrue(clsIndex > -1);
- this.abc = tag.getABC();
- Configuration.autoDeobfuscate.set(false);
- Configuration.decompile.set(true);
- Configuration.registerNameFormat.set("_loc%d_");
- Configuration.showMethodBodyId.set(false);
- }
-
- private void decompileMethod(String methodName, String expectedResult, boolean isStatic) {
- int bodyIndex = abc.findMethodBodyByName(clsIndex, methodName);
- assertTrue(bodyIndex > -1);
- HighlightedTextWriter writer = null;
- try {
- abc.bodies.get(bodyIndex).convert(methodName, ScriptExportMode.AS, isStatic, -1/*FIX?*/, clsIndex, abc, null, abc.constants, abc.method_info, new ScopeStack(), false, new NulWriter(), new ArrayList<>(), abc.instance_info.get(clsIndex).instance_traits, true);
- writer = new HighlightedTextWriter(new CodeFormatting(), false);
- abc.bodies.get(bodyIndex).toString(methodName, ScriptExportMode.AS, abc, null, abc.constants, abc.method_info, writer, new ArrayList<>());
- } catch (InterruptedException ex) {
- fail();
- }
- String actualResult = cleanPCode(writer.toString());
- expectedResult = cleanPCode(expectedResult);
- assertEquals(actualResult, expectedResult);
- }
-
- @Test
- public void testHello() {
- decompileMethod("testHello", "trace(\"hello\");\r\n", false);
- }
-
- @Test
- public void testIncDec() {
- decompileMethod("testIncDec", "var a:* = 5;\r\n"
- + "var b:* = 0;\r\n"
- + "trace(\"++var\");\r\n"
- + "b = ++a;\r\n"
- + "trace(\"var++\");\r\n"
- + "b = a++;\r\n"
- + "trace(\"--var\");\r\n"
- + "b = --a;\r\n"
- + "trace(\"var--\");\r\n"
- + "b = a--;\r\n"
- + "var c:* = [1,2,3,4,5];\r\n"
- + "trace(\"++arr\");\r\n"
- + "b = ++c[2];\r\n"
- + "trace(\"arr++\");\r\n"
- + "b = c[2]++;\r\n"
- + "trace(\"--arr\");\r\n"
- + "b = --c[2];\r\n"
- + "trace(\"arr--\");\r\n"
- + "b = c[2]--;\r\n"
- + "var d:* = new TestClass1();\r\n"
- + "trace(\"++property\");\r\n"
- + "trace(++d.attrib);\r\n"
- + "trace(\"property++\");\r\n"
- + "trace(d.attrib++);\r\n"
- + "trace(\"--property\");\r\n"
- + "trace(--d.attrib);\r\n"
- + "trace(\"property--\");\r\n"
- + "trace(d.attrib--);\r\n"
- + "trace(\"arr[e++]\");\r\n"
- + "var chars:Array = new Array(36);\r\n"
- + "var index:uint = 0;\r\n"
- + "chars[index++] = 5;\r\n"
- + "trace(\"arr[++e]\");\r\n"
- + "chars[++index] = 5;\r\n", false);
- }
-
- @Test
- public void testDoWhile() {
- decompileMethod("testDoWhile", "var a:* = 8;\r\n"
- + "do\r\n"
- + "{\r\n"
- + "trace(\"a=\" + a);\r\n"
- + "a++;\r\n"
- + "}\r\n"
- + "while(a < 20);\r\n"
- + "\r\n", false);
- }
-
- @Test
- public void testInnerTry() {
- decompileMethod("testInnerTry", "try\r\n"
- + "{\r\n"
- + "try\r\n"
- + "{\r\n"
- + "trace(\"try body 1\");\r\n"
- + "}\r\n"
- + "catch(e:DefinitionError)\r\n"
- + "{\r\n"
- + "trace(\"catched DefinitionError\");\r\n"
- + "}\r\n"
- + "trace(\"after try 1\");\r\n"
- + "}\r\n"
- + "catch(e:Error)\r\n"
- + "{\r\n"
- + "trace(\"catched Error\");\r\n"
- + "}\r\n"
- + "finally\r\n"
- + "{\r\n"
- + "trace(\"finally block\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testWhileContinue() {
- decompileMethod("testWhileContinue", "var a:* = 5;\r\n"
- + "while(true)\r\n"
- + "{\r\n"
- + "if(a == 9)\r\n"
- + "{\r\n"
- + "if(a == 8)\r\n"
- + "{\r\n"
- + "continue;\r\n"
- + "}\r\n"
- + "if(a == 9)\r\n"
- + "{\r\n"
- + "break;\r\n"
- + "}\r\n"
- + "trace(\"hello 1\");\r\n"
- + "}\r\n"
- + "trace(\"hello2\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testPrecedence() {
- decompileMethod("testPrecedence", "var a:* = 0;\r\n"
- + "a = (5 + 6) * 7;\r\n"
- + "a = 5 * (2 + 3);\r\n"
- + "a = 5 + 6 * 7;\r\n"
- + "a = 5 * 2 + 2;\r\n"
- + "a = 5 * (25 % 3);\r\n"
- + "a = 5 % (24 * 307);\r\n"
- + "a = 1 / (2 / 3);\r\n"
- + "a = 1 / (2 * 3);\r\n"
- + "a = 1 * 2 * 3;\r\n"
- + "a = 1 * 2 / 3;\r\n"
- + "trace(\"a=\" + a);\r\n", false);
- }
-
- @Test
- public void testStrings() {
- decompileMethod("testStrings", "trace(\"hello\");\r\n"
- + "trace(\"quotes:\\\"hello!\\\"\");\r\n"
- + "trace(\"backslash: \\\\ \");\r\n"
- + "trace(\"single quotes: \\'hello!\\'\");\r\n"
- + "trace(\"new line \\r\\n hello!\");\r\n", false);
- }
-
- @Test
- public void testContinueLevels() {
- decompileMethod("testContinueLevels", "var b:* = undefined;\r\n"
- + "var c:* = undefined;\r\n"
- + "var d:* = undefined;\r\n"
- + "var e:* = undefined;\r\n"
- + "var a:* = 5;\r\n"
- + "loop3:\r\n"
- + "switch(a)\r\n"
- + "{\r\n"
- + "case 57 * a:\r\n"
- + "trace(\"fiftyseven multiply a\");\r\n"
- + "b = 0;\r\n"
- + "while(b < 50)\r\n"
- + "{\r\n"
- + "if(b == 10)\r\n"
- + "{\r\n"
- + "break;\r\n"
- + "}\r\n"
- + "if(b == 15)\r\n"
- + "{\r\n"
- + "break loop3;\r\n"
- + "}\r\n"
- + "b = b + 1;\r\n"
- + "}\r\n"
- + "break;\r\n"
- + "case 13:\r\n"
- + "trace(\"thirteen\");\r\n"
- + "case 14:\r\n"
- + "trace(\"fourteen\");\r\n"
- + "break;\r\n"
- + "case 89:\r\n"
- + "trace(\"eightynine\");\r\n"
- + "break;\r\n"
- + "default:\r\n"
- + "trace(\"default clause\");\r\n"
- + "}\r\n"
- + "loop1:\r\n"
- + "for(c = 0; c < 8; c = c + 1)\r\n"
- + "{\r\n"
- + "for(d = 0; d < 25; d++)\r\n"
- + "{\r\n"
- + "e = 0;\r\n"
- + "if(e < 50)\r\n"
- + "{\r\n"
- + "if(e == 9)\r\n"
- + "{\r\n"
- + "break;\r\n"
- + "}\r\n"
- + "if(e == 20)\r\n"
- + "{\r\n"
- + "continue loop1;\r\n"
- + "}\r\n"
- + "if(e != 8)\r\n"
- + "{\r\n"
- + "break loop1;\r\n"
- + "}\r\n"
- + "}\r\n"
- + "}\r\n"
- + "trace(\"hello\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testSwitchDefault() {
- decompileMethod("testSwitchDefault", "var a:* = 5;\r\n"
- + "switch(a)\r\n"
- + "{\r\n"
- + "case 57 * a:\r\n"
- + "trace(\"fiftyseven multiply a\");\r\n"
- + "break;\r\n"
- + "case 13:\r\n"
- + "trace(\"thirteen\");\r\n"
- + "case 14:\r\n"
- + "trace(\"fourteen\");\r\n"
- + "break;\r\n"
- + "case 89:\r\n"
- + "trace(\"eightynine\");\r\n"
- + "break;\r\n"
- + "default:\r\n"
- + "trace(\"default clause\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testMultipleCondition() {
- decompileMethod("testMultipleCondition", "var a:* = 5;\r\n"
- + "var b:* = 8;\r\n"
- + "var c:* = 9;\r\n"
- + "if((a <= 4 || b <= 8) && c == 7)\r\n"
- + "{\r\n"
- + "trace(\"onTrue\");\r\n"
- + "}\r\n"
- + "else\r\n"
- + "{\r\n"
- + "trace(\"onFalse\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testForBreak() {
- /*decompileMethod("testForBreak", "var a:* = 0;\r\n"
- + "while(a < 10)\r\n"
- + "{\r\n"
- + "if(a == 5)\r\n"
- + "{\r\n"
- + "break;\r\n"
- + "}\r\n"
- + "trace(\"hello:\" + a);\r\n"
- + "a++;\r\n"
- + "}\r\n", false);*/
- // Issue 842, recover for loops
- decompileMethod("testForBreak", "for(var a:* = 0; a < 10; a++)\r\n"
- + "{\r\n"
- + "if(a == 5)\r\n"
- + "{\r\n"
- + "break;\r\n"
- + "}\r\n"
- + "trace(\"hello:\" + a);\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testIf() {
- decompileMethod("testIf", "var a:* = 5;\r\n"
- + "if(a == 7)\r\n"
- + "{\r\n"
- + "trace(\"onTrue\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testIfElse() {
- decompileMethod("testIfElse", "var a:* = 5;\r\n"
- + "if(a == 7)\r\n"
- + "{\r\n"
- + "trace(\"onTrue\");\r\n"
- + "}\r\n"
- + "else\r\n"
- + "{\r\n"
- + "trace(\"onFalse\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testFor() {
- decompileMethod("testFor", "for(var a:* = 0; a < 10; a++)\r\n"
- + "{\r\n"
- + "trace(\"a=\" + a);\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testForContinue() {
- decompileMethod("testForContinue", "for(var a:* = 0; a < 10; a = a + 1)\r\n"
- + "{\r\n"
- + "if(a == 9)\r\n"
- + "{\r\n"
- + "if(a == 5)\r\n"
- + "{\r\n"
- + "trace(\"part1\");\r\n"
- + "continue;\r\n"
- + "}\r\n"
- + "trace(\"a=\" + a);\r\n"
- + "if(a == 7)\r\n"
- + "{\r\n"
- + "trace(\"part2\");\r\n"
- + "continue;\r\n"
- + "}\r\n"
- + "trace(\"part3\");\r\n"
- + "}\r\n"
- + "else\r\n"
- + "{\r\n"
- + "trace(\"part4\");\r\n"
- + "}\r\n"
- + "trace(\"part5\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testTry() {
- decompileMethod("testTry", "var i:int = 0;\r\n"
- + "i = 7;\r\n"
- + "try\r\n"
- + "{\r\n"
- + "trace(\"try body\");\r\n"
- + "}\r\n"
- + "catch(e:DefinitionError)\r\n"
- + "{\r\n"
- + "trace(\"catched DefinitionError\");\r\n"
- + "}\r\n"
- + "catch(e:Error)\r\n"
- + "{\r\n"
- + "trace(\"Error message:\" + e.message);\r\n"
- + "trace(\"Stacktrace:\" + e.getStackTrace());\r\n"
- + "}\r\n"
- + "finally\r\n"
- + "{\r\n"
- + "trace(\"Finally part\");\r\n"
- + "}\r\n"
- + "trace(\"end\");\r\n", false);
- }
-
- @Test
- public void testSwitch() {
- decompileMethod("testSwitch", "var a:* = 5;\r\n"
- + "switch(a)\r\n"
- + "{\r\n"
- + "case 57 * a:\r\n"
- + "trace(\"fiftyseven multiply a\");\r\n"
- + "break;\r\n"
- + "case 13:\r\n"
- + "trace(\"thirteen\");\r\n"
- + "case 14:\r\n"
- + "trace(\"fourteen\");\r\n"
- + "break;\r\n"
- + "case 89:\r\n"
- + "trace(\"eightynine\");\r\n"
- + "break;\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testTernarOperator() {
- decompileMethod("testTernarOperator", "var a:* = 5;\r\n"
- + "var b:* = 4;\r\n"
- + "var c:* = 4;\r\n"
- + "var d:* = 78;\r\n"
- + "var e:* = a == b?c == d?1:7:3;\r\n"
- + "trace(\"e=\" + e);\r\n", false);
- }
-
- @Test
- public void testInnerIf() {
- decompileMethod("testInnerIf", "var a:* = 5;\r\n"
- + "var b:* = 4;\r\n"
- + "if(a == 5)\r\n"
- + "{\r\n"
- + "if(b == 6)\r\n"
- + "{\r\n"
- + "trace(\"b==6\");\r\n"
- + "}\r\n"
- + "else\r\n"
- + "{\r\n"
- + "trace(\"b!=6\");\r\n"
- + "}\r\n"
- + "}\r\n"
- + "else if(b == 7)\r\n"
- + "{\r\n"
- + "trace(\"b==7\");\r\n"
- + "}\r\n"
- + "else\r\n"
- + "{\r\n"
- + "trace(\"b!=7\");\r\n"
- + "}\r\n"
- + "\r\n"
- + "trace(\"end\");\r\n", false);
- }
-
- @Test
- public void testVector() {
- decompileMethod("testVector", "var v:Vector. = new Vector.();\r\n"
- + "v.push(\"hello\");\r\n"
- + "v[0] = \"hi\";\r\n"
- + "v[5 * 8 - 39] = \"hi2\";\r\n"
- + "trace(v[0]);\r\n", false);
- }
-
- @Test
- public void testProperty() {
- decompileMethod("testProperty", "var d:* = new TestClass1();\r\n"
- + "var k:* = 7 + 8;\r\n"
- + "if(k == 15)\r\n"
- + "{\r\n"
- + "d.method(d.attrib * 5);\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testRest() {
- decompileMethod("testRest", "trace(\"firstRest:\" + restval[0]);\r\n"
- + "return firstp;\r\n", false);
- }
-
- @Test
- public void testParamNames() {
- decompileMethod("testParamNames", "return firstp + secondp + thirdp;\r\n", false);
- }
-
- @Test
- public void testForEach() {
- decompileMethod("testForEach", "var list:Array = null;\r\n"
- + "var item:* = undefined;\r\n"
- + "list = new Array();\r\n"
- + "list[0] = \"first\";\r\n"
- + "list[1] = \"second\";\r\n"
- + "list[2] = \"third\";\r\n"
- + "for each(item in list)\r\n"
- + "{\r\n"
- + "trace(\"item #\" + item);\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testForEachObjectArray() {
- decompileMethod("testForEachObjectArray", "var list:Array = null;\r\n"
- + "var test:Array = null;\r\n"
- + "list = new Array();\r\n"
- + "list[0] = \"first\";\r\n"
- + "list[1] = \"second\";\r\n"
- + "list[2] = \"third\";\r\n"
- + "test = new Array();\r\n"
- + "test[0] = 0;\r\n"
- + "for each(test[0] in list)\r\n"
- + "{\r\n"
- + "trace(\"item #\" + test[0]);\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testForEachObjectAttribute() {
- decompileMethod("testForEachObjectAttribute", "var list:Array = null;\r\n"
- + "list = new Array();\r\n"
- + "list[0] = \"first\";\r\n"
- + "list[1] = \"second\";\r\n"
- + "list[2] = \"third\";\r\n"
- + "for each(this.testPriv in list)\r\n"
- + "{\r\n"
- + "trace(\"item #\" + this.testPriv);\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testParamsCount() {
- decompileMethod("testParamsCount", "return firstp;\r\n", false);
- }
-
- @Test
- public void testInlineFunctions() {
- decompileMethod("testInlineFunctions", "var first:String = null;\r\n"
- + "first = \"value1\";\r\n"
- + "var traceParameter:Function = function(aParam:String):String\r\n"
- + "{\r\n"
- + "var second:String = null;\r\n"
- + "second = \"value2\";\r\n"
- + "second = second + \"cc\";\r\n"
- + "var traceParam2:Function = function(bParam:String):String\r\n"
- + "{\r\n"
- + "trace(bParam + \",\" + aParam);\r\n"
- + "return first + second + aParam + bParam;\r\n"
- + "};\r\n"
- + "trace(second);\r\n"
- + "traceParam2(aParam);\r\n"
- + "return first;\r\n"
- + "};\r\n"
- + "traceParameter(\"hello\");\r\n", false);
- }
-
- @Test
- public void testMissingDefault() {
- decompileMethod("testMissingDefault", "var jj:* = 1;\r\n"
- + "switch(jj)\r\n"
- + "{\r\n"
- + "case 1:\r\n"
- + "jj = 1;\r\n"
- + "break;\r\n"
- + "case 2:\r\n"
- + "jj = 2;\r\n"
- + "break;\r\n"
- + "default:\r\n"
- + "jj = 3;\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testChainedAssignments() {
- decompileMethod("testChainedAssignments", "var a:* = 0;\r\n"
- + "var b:* = 0;\r\n"
- + "var c:* = 0;\r\n"
- + "var d:* = 0;\r\n"
- + "d = c = b = a = 5;\r\n"
- + "var e:TestClass2 = TestClass2.createMe(\"test\");\r\n"
- + "e.attrib1 = e.attrib2 = e.attrib3 = this.getCounter();\r\n"
- + "this.traceIt(e.toString());\r\n", false);
- }
-
- @Test
- public void testFinallyZeroJump() {
- decompileMethod("testFinallyZeroJump", "var str:String = param1;\r\n"
- + "try\r\n"
- + "{\r\n"
- + "}\r\n"
- + "catch(e:Error)\r\n"
- + "{\r\n"
- + "trace(\"error is :\" + e.message);\r\n"
- + "}\r\n"
- + "finally\r\n"
- + "{\r\n"
- + "trace(\"hi \");\r\n"
- + "if(5 == 4)\r\n"
- + "{\r\n"
- + "return str;\r\n"
- + "}\r\n"
- + "return \"hu\" + str;\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testInnerFunctions() {
- decompileMethod("testInnerFunctions", "var s:int = 0;\r\n"
- + "var innerFunc:Function = function(b:String):*\r\n"
- + "{\r\n"
- + "trace(b);\r\n"
- + "};\r\n"
- + "var k:int = 5;\r\n"
- + "if(k == 6)\r\n"
- + "{\r\n"
- + "s = 8;\r\n"
- + "}\r\n"
- + "innerFunc(a);\r\n", false);
- }
-
- @Test
- public void testDeclarations() {
- decompileMethod("testDeclarations", "var vall:* = undefined;\r\n"
- + "var vstr:String = null;\r\n"
- + "var vint:* = 0;\r\n"
- + "var vuint:uint = 0;\r\n"
- + "var vclass:TestClass1 = null;\r\n"
- + "var vnumber:* = NaN;\r\n"
- + "var vobject:Object = null;\r\n"
- + "vall = 6;\r\n"
- + "vstr = \"hello\";\r\n"
- + "vuint = 7;\r\n"
- + "vint = -4;\r\n"
- + "vclass = new TestClass1();\r\n"
- + "vnumber = 0.5;\r\n"
- + "vnumber = 6;\r\n"
- + "vobject = vclass;\r\n", false);
- }
-
- @Test
- public void testForIn() {
- decompileMethod("testForIn", "var dic:Dictionary = null;\r\n"
- + "var item:Object = null;\r\n"
- + "for(item in dic)\r\n"
- + "{\r\n"
- + "trace(item);\r\n"
- + "}\r\n"
- + "for each(item in dic)\r\n"
- + "{\r\n"
- + "trace(item);\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testNames() {
- decompileMethod("testNames", "var ns:* = this.getNamespace();\r\n"
- + "var name:* = this.getName();\r\n"
- + "var a:* = ns::unnamespacedFunc();\r\n"
- + "var b:* = ns::[name];\r\n"
- + "trace(b.c);\r\n"
- + "var c:* = myInternal::neco;\r\n", false);
- }
-
- @Test
- public void testComplexExpressions() {
- decompileMethod("testComplexExpressions", "var i:* = 0;\r\n"
- + "var j:* = 0;\r\n"
- + "j = i = i + (i = i + i++);\r\n", false);
- }
-
- @Test
- public void testExpressions() {
- decompileMethod("testExpressions", "var arr:Array = null;\r\n"
- + "var i:* = 5;\r\n"
- + "var j:* = 5;\r\n"
- + "if((i = i = i / 2) == 1 || i == 2)\r\n"
- + "{\r\n"
- + "arguments.concat(i);\r\n"
- + "}\r\n"
- + "else if(i == 0)\r\n"
- + "{\r\n"
- + "i = j++;\r\n"
- + "}\r\n"
- + "else\r\n"
- + "{\r\n"
- + "arr[0]();\r\n"
- + "}\r\n"
- + "\r\n"
- + "return i == 0;\r\n", false);
- }
-
- @Test
- public void testArguments() {
- decompileMethod("testArguments", "return arguments[0];\r\n", false);
- }
-
- @Test
- public void testLogicalComputing() {
- decompileMethod("testLogicalComputing", "var b:* = false;\r\n"
- + "var i:* = 5;\r\n"
- + "var j:* = 7;\r\n"
- + "if(i > j)\r\n"
- + "{\r\n"
- + "j = 9;\r\n"
- + "b = true;\r\n"
- + "}\r\n"
- + "b = (i == 0 || i == 1) && j == 0;\r\n", false);
- }
-
- @Test
- public void testInc2() {
- decompileMethod("testInc2", "var a:* = [1];\r\n"
- + "a[this.getInt()]++;\r\n"
- + "var d:* = a[this.getInt()]++;\r\n"
- + "var e:* = ++a[this.getInt()];\r\n"
- + "var b:* = 1;\r\n"
- + "b++;\r\n"
- + "var c:* = 1;\r\n"
- + "b = c++;\r\n", false);
- }
-
- @Test
- public void testDecl2() {
- decompileMethod("testDecl2", "var k:* = 0;\r\n"
- + "var i:* = 5;\r\n"
- + "i = i + 7;\r\n"
- + "if(i == 5)\r\n"
- + "{\r\n"
- + "if(i < 8)\r\n"
- + "{\r\n"
- + "k = 6;\r\n"
- + "}\r\n"
- + "}\r\n"
- + "k = 7;\r\n", false);
- }
-
- @Test
- public void testChain2() {
- decompileMethod("testChain2", "var g:Array = null;\r\n"
- + "var h:* = false;\r\n"
- + "var extraLine:* = false;\r\n"
- + "var r:* = 7;\r\n"
- + "var t:* = 0;\r\n"
- + "t = this.getInt();\r\n"
- + "if(t + 1 < g.length)\r\n"
- + "{\r\n"
- + "t++;\r\n"
- + "h = true;\r\n"
- + "}\r\n"
- + "if(t >= 0)\r\n"
- + "{\r\n"
- + "trace(\"ch\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testDoWhile2() {
- decompileMethod("testDoWhile2", "var k:* = 5;\r\n"
- + "do\r\n"
- + "{\r\n"
- + "k++;\r\n"
- + "if(k == 7)\r\n"
- + "{\r\n"
- + "k = 5 * k;\r\n"
- + "}\r\n"
- + "else\r\n"
- + "{\r\n"
- + "k = 5 - k;\r\n"
- + "}\r\n"
- + "k--;\r\n"
- + "}\r\n"
- + "while(k < 9);\r\n"
- + "\r\n"
- + "return 2;\r\n", false);
- }
-
- @Test
- public void testWhileAnd() {
- decompileMethod("testWhileAnd", "var a:* = 5;\r\n"
- + "var b:* = 10;\r\n"
- + "while(a < 10 && b > 1)\r\n"
- + "{\r\n"
- + "a++;\r\n"
- + "b--;\r\n"
- + "}\r\n"
- + "a = 7;\r\n"
- + "b = 9;\r\n", false);
- }
-
- @Test
- public void testNamedAnonFunctions() {
- decompileMethod("testNamedAnonFunctions", "var test:* = new function testFunc(param1:*, param2:int, param3:Array):Boolean\r\n"
- + "{\r\n"
- + "return (param1 as TestClass2).attrib1 == 5;\r\n"
- + "};\r\n", false);
- }
-
- @Test
- public void testStringConcat() {
- decompileMethod("testStringConcat", "var k:* = 8;\r\n"
- + "this.traceIt(\"hello\" + 5 * 6);\r\n"
- + "this.traceIt(\"hello\" + (k - 1));\r\n"
- + "this.traceIt(\"hello\" + 5 + 6);\r\n", false);
- }
-
- @Test
- public void testWhileTry() {
- decompileMethod("testWhileTry", "while(true)\r\n"
- + "{\r\n"
- + "try\r\n"
- + "{\r\n"
- + "while(true)\r\n"
- + "{\r\n"
- + "trace(\"a\");\r\n"
- + "}\r\n"
- + "}\r\n"
- + "catch(e:EOFError)\r\n"
- + "{\r\n"
- + "continue;\r\n"
- + "}\r\n"
- + "catch(e:Error)\r\n"
- + "{\r\n"
- + "continue;\r\n"
- + "}\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testWhileTry2() {
- decompileMethod("testWhileTry2", "var j:* = undefined;\r\n"
- + "for(var i:* = 0; i < 100; i++)\r\n"
- + "{\r\n"
- + "try\r\n"
- + "{\r\n"
- + "for(j = 0; j < 20; j++)\r\n"
- + "{\r\n"
- + "trace(\"a\");\r\n"
- + "}\r\n"
- + "}\r\n"
- + "catch(e:EOFError)\r\n"
- + "{\r\n"
- + "continue;\r\n"
- + "}\r\n"
- + "catch(e:Error)\r\n"
- + "{\r\n"
- + "continue;\r\n"
- + "}\r\n"
- + "trace(\"after_try\");\r\n"
- + "}\r\n"
- + "trace(\"end\");\r\n", false);
- }
-
- @Test
- public void testTryReturn() {
- decompileMethod("testTryReturn", "var i:int = 0;\r\n"
- + "var b:Boolean = false;\r\n"
- + "try\r\n"
- + "{\r\n"
- + "i = 0;\r\n"
- + "b = true;\r\n"
- + "if(i > 0)\r\n"
- + "{\r\n"
- + "while(this.testDoWhile2())\r\n"
- + "{\r\n"
- + "if(b)\r\n"
- + "{\r\n"
- + "return 5;\r\n"
- + "}\r\n"
- + "}\r\n"
- + "}\r\n"
- + "i++;\r\n"
- + "return 2;\r\n"
- + "}\r\n"
- + "catch(e:Error)\r\n"
- + "{\r\n"
- + "}\r\n"
- + "return 4;\r\n", false);
- }
-
- @Test
- public void testVector2() {
- decompileMethod("testVector2", "var a:Vector.> = new Vector.>();\r\n"
- + "var b:Vector. = new [10,20,30];\r\n", false);
- }
-
- public void testFinallyOnly() {
- decompileMethod("testFinallyOnly", "var a:* = 5;\r\n"
- + "try\r\n"
- + "{\r\n"
- + "a = 9;\r\n"
- + "trace(\"intry\");\r\n"
- + "}\r\n"
- + "finally\r\n"
- + "{\r\n"
- + "trace(\"infinally\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testCatchFinally() {
- decompileMethod("testCatchFinally", "var a:* = 5;\r\n"
- + "try\r\n"
- + "{\r\n"
- + "a = 9;\r\n"
- + "trace(\"intry\");\r\n"
- + "}\r\n"
- + "catch(e:*)\r\n"
- + "{\r\n"
- + "trace(\"incatch\");\r\n"
- + "}\r\n"
- + "finally\r\n"
- + "{\r\n"
- + "trace(\"infinally\");\r\n"
- + "}\r\n", false);
- }
-
- @Test
- public void testOptionalParameters() {
- String methodName = "testOptionalParameters";
- int methodInfo = abc.findMethodInfoByName(clsIndex, methodName);
- int bodyIndex = abc.findMethodBodyByName(clsIndex, methodName);
- assertTrue(methodInfo > -1);
- assertTrue(bodyIndex > -1);
- HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false);
- abc.method_info.get(methodInfo).getParamStr(writer, abc.constants, abc.bodies.get(bodyIndex), abc, new ArrayList<>());
- String actualResult = writer.toString().replaceAll("[ \r\n]", "");
- String expectedResult = "p1:Event=null,p2:Number=1,p3:Number=-1,p4:Number=-1.1,p5:Number=-1.1,p6:String=\"a\"";
- expectedResult = expectedResult.replaceAll("[ \r\n]", "");
- assertEquals(actualResult, expectedResult);
- }
-}
+/*
+ * Copyright (C) 2010-2015 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;
+
+import com.jpexs.decompiler.flash.abc.ABC;
+import com.jpexs.decompiler.flash.configuration.Configuration;
+import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode;
+import com.jpexs.decompiler.flash.helpers.CodeFormatting;
+import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter;
+import com.jpexs.decompiler.flash.helpers.NulWriter;
+import com.jpexs.decompiler.flash.tags.DoABC2Tag;
+import com.jpexs.decompiler.flash.tags.Tag;
+import com.jpexs.decompiler.graph.ScopeStack;
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * @author JPEXS
+ */
+public class ActionScript3Test extends ActionScriptTestBase {
+
+ private SWF swf;
+
+ private int clsIndex;
+
+ private ABC abc;
+
+ @BeforeClass
+ public void init() throws IOException, InterruptedException {
+ //Main.initLogging(false);
+ swf = new SWF(new BufferedInputStream(new FileInputStream("testdata/as3/as3.swf")), false);
+ DoABC2Tag tag = null;
+ for (Tag t : swf.tags) {
+ if (t instanceof DoABC2Tag) {
+ tag = (DoABC2Tag) t;
+ break;
+ }
+ }
+ assertNotNull(tag);
+ clsIndex = tag.getABC().findClassByName("classes.Test");
+ assertTrue(clsIndex > -1);
+ this.abc = tag.getABC();
+ Configuration.autoDeobfuscate.set(false);
+ Configuration.decompile.set(true);
+ Configuration.registerNameFormat.set("_loc%d_");
+ Configuration.showMethodBodyId.set(false);
+ }
+
+ private void decompileMethod(String methodName, String expectedResult, boolean isStatic) {
+ int bodyIndex = abc.findMethodBodyByName(clsIndex, methodName);
+ assertTrue(bodyIndex > -1);
+ HighlightedTextWriter writer = null;
+ try {
+ abc.bodies.get(bodyIndex).convert(methodName, ScriptExportMode.AS, isStatic, -1/*FIX?*/, clsIndex, abc, null, abc.constants, abc.method_info, new ScopeStack(), false, new NulWriter(), new ArrayList<>(), abc.instance_info.get(clsIndex).instance_traits, true);
+ writer = new HighlightedTextWriter(new CodeFormatting(), false);
+ abc.bodies.get(bodyIndex).toString(methodName, ScriptExportMode.AS, abc, null, abc.constants, abc.method_info, writer, new ArrayList<>());
+ } catch (InterruptedException ex) {
+ fail();
+ }
+ String actualResult = cleanPCode(writer.toString());
+ expectedResult = cleanPCode(expectedResult);
+ assertEquals(actualResult, expectedResult);
+ }
+
+ @Test
+ public void testHello() {
+ decompileMethod("testHello", "trace(\"hello\");\r\n", false);
+ }
+
+ @Test
+ public void testIncDec() {
+ decompileMethod("testIncDec", "var a:* = 5;\r\n"
+ + "var b:* = 0;\r\n"
+ + "trace(\"++var\");\r\n"
+ + "b = ++a;\r\n"
+ + "trace(\"var++\");\r\n"
+ + "b = a++;\r\n"
+ + "trace(\"--var\");\r\n"
+ + "b = --a;\r\n"
+ + "trace(\"var--\");\r\n"
+ + "b = a--;\r\n"
+ + "var c:* = [1,2,3,4,5];\r\n"
+ + "trace(\"++arr\");\r\n"
+ + "b = ++c[2];\r\n"
+ + "trace(\"arr++\");\r\n"
+ + "b = c[2]++;\r\n"
+ + "trace(\"--arr\");\r\n"
+ + "b = --c[2];\r\n"
+ + "trace(\"arr--\");\r\n"
+ + "b = c[2]--;\r\n"
+ + "var d:* = new TestClass1();\r\n"
+ + "trace(\"++property\");\r\n"
+ + "trace(++d.attrib);\r\n"
+ + "trace(\"property++\");\r\n"
+ + "trace(d.attrib++);\r\n"
+ + "trace(\"--property\");\r\n"
+ + "trace(--d.attrib);\r\n"
+ + "trace(\"property--\");\r\n"
+ + "trace(d.attrib--);\r\n"
+ + "trace(\"arr[e++]\");\r\n"
+ + "var chars:Array = new Array(36);\r\n"
+ + "var index:uint = 0;\r\n"
+ + "chars[index++] = 5;\r\n"
+ + "trace(\"arr[++e]\");\r\n"
+ + "chars[++index] = 5;\r\n", false);
+ }
+
+ @Test
+ public void testDoWhile() {
+ decompileMethod("testDoWhile", "var a:* = 8;\r\n"
+ + "do\r\n"
+ + "{\r\n"
+ + "trace(\"a=\" + a);\r\n"
+ + "a++;\r\n"
+ + "}\r\n"
+ + "while(a < 20);\r\n"
+ + "\r\n", false);
+ }
+
+ @Test
+ public void testInnerTry() {
+ decompileMethod("testInnerTry", "try\r\n"
+ + "{\r\n"
+ + "try\r\n"
+ + "{\r\n"
+ + "trace(\"try body 1\");\r\n"
+ + "}\r\n"
+ + "catch(e:DefinitionError)\r\n"
+ + "{\r\n"
+ + "trace(\"catched DefinitionError\");\r\n"
+ + "}\r\n"
+ + "trace(\"after try 1\");\r\n"
+ + "}\r\n"
+ + "catch(e:Error)\r\n"
+ + "{\r\n"
+ + "trace(\"catched Error\");\r\n"
+ + "}\r\n"
+ + "finally\r\n"
+ + "{\r\n"
+ + "trace(\"finally block\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testWhileContinue() {
+ decompileMethod("testWhileContinue", "var a:* = 5;\r\n"
+ + "while(true)\r\n"
+ + "{\r\n"
+ + "if(a == 9)\r\n"
+ + "{\r\n"
+ + "if(a == 8)\r\n"
+ + "{\r\n"
+ + "continue;\r\n"
+ + "}\r\n"
+ + "if(a == 9)\r\n"
+ + "{\r\n"
+ + "break;\r\n"
+ + "}\r\n"
+ + "trace(\"hello 1\");\r\n"
+ + "}\r\n"
+ + "trace(\"hello2\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testPrecedence() {
+ decompileMethod("testPrecedence", "var a:* = 0;\r\n"
+ + "a = (5 + 6) * 7;\r\n"
+ + "a = 5 * (2 + 3);\r\n"
+ + "a = 5 + 6 * 7;\r\n"
+ + "a = 5 * 2 + 2;\r\n"
+ + "a = 5 * (25 % 3);\r\n"
+ + "a = 5 % (24 * 307);\r\n"
+ + "a = 1 / (2 / 3);\r\n"
+ + "a = 1 / (2 * 3);\r\n"
+ + "a = 1 * 2 * 3;\r\n"
+ + "a = 1 * 2 / 3;\r\n"
+ + "trace(\"a=\" + a);\r\n", false);
+ }
+
+ @Test
+ public void testStrings() {
+ decompileMethod("testStrings", "trace(\"hello\");\r\n"
+ + "trace(\"quotes:\\\"hello!\\\"\");\r\n"
+ + "trace(\"backslash: \\\\ \");\r\n"
+ + "trace(\"single quotes: \\'hello!\\'\");\r\n"
+ + "trace(\"new line \\r\\n hello!\");\r\n", false);
+ }
+
+ @Test
+ public void testContinueLevels() {
+ decompileMethod("testContinueLevels", "var b:* = undefined;\r\n"
+ + "var c:* = undefined;\r\n"
+ + "var d:* = undefined;\r\n"
+ + "var e:* = undefined;\r\n"
+ + "var a:* = 5;\r\n"
+ + "loop3:\r\n"
+ + "switch(a)\r\n"
+ + "{\r\n"
+ + "case 57 * a:\r\n"
+ + "trace(\"fiftyseven multiply a\");\r\n"
+ + "b = 0;\r\n"
+ + "while(b < 50)\r\n"
+ + "{\r\n"
+ + "if(b == 10)\r\n"
+ + "{\r\n"
+ + "break;\r\n"
+ + "}\r\n"
+ + "if(b == 15)\r\n"
+ + "{\r\n"
+ + "break loop3;\r\n"
+ + "}\r\n"
+ + "b = b + 1;\r\n"
+ + "}\r\n"
+ + "break;\r\n"
+ + "case 13:\r\n"
+ + "trace(\"thirteen\");\r\n"
+ + "case 14:\r\n"
+ + "trace(\"fourteen\");\r\n"
+ + "break;\r\n"
+ + "case 89:\r\n"
+ + "trace(\"eightynine\");\r\n"
+ + "break;\r\n"
+ + "default:\r\n"
+ + "trace(\"default clause\");\r\n"
+ + "}\r\n"
+ + "loop1:\r\n"
+ + "for(c = 0; c < 8; c = c + 1)\r\n"
+ + "{\r\n"
+ + "for(d = 0; d < 25; d++)\r\n"
+ + "{\r\n"
+ + "e = 0;\r\n"
+ + "if(e < 50)\r\n"
+ + "{\r\n"
+ + "if(e == 9)\r\n"
+ + "{\r\n"
+ + "break;\r\n"
+ + "}\r\n"
+ + "if(e == 20)\r\n"
+ + "{\r\n"
+ + "continue loop1;\r\n"
+ + "}\r\n"
+ + "if(e != 8)\r\n"
+ + "{\r\n"
+ + "break loop1;\r\n"
+ + "}\r\n"
+ + "}\r\n"
+ + "}\r\n"
+ + "trace(\"hello\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testSwitchDefault() {
+ decompileMethod("testSwitchDefault", "var a:* = 5;\r\n"
+ + "switch(a)\r\n"
+ + "{\r\n"
+ + "case 57 * a:\r\n"
+ + "trace(\"fiftyseven multiply a\");\r\n"
+ + "break;\r\n"
+ + "case 13:\r\n"
+ + "trace(\"thirteen\");\r\n"
+ + "case 14:\r\n"
+ + "trace(\"fourteen\");\r\n"
+ + "break;\r\n"
+ + "case 89:\r\n"
+ + "trace(\"eightynine\");\r\n"
+ + "break;\r\n"
+ + "default:\r\n"
+ + "trace(\"default clause\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testMultipleCondition() {
+ decompileMethod("testMultipleCondition", "var a:* = 5;\r\n"
+ + "var b:* = 8;\r\n"
+ + "var c:* = 9;\r\n"
+ + "if((a <= 4 || b <= 8) && c == 7)\r\n"
+ + "{\r\n"
+ + "trace(\"onTrue\");\r\n"
+ + "}\r\n"
+ + "else\r\n"
+ + "{\r\n"
+ + "trace(\"onFalse\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testForBreak() {
+ /*decompileMethod("testForBreak", "var a:* = 0;\r\n"
+ + "while(a < 10)\r\n"
+ + "{\r\n"
+ + "if(a == 5)\r\n"
+ + "{\r\n"
+ + "break;\r\n"
+ + "}\r\n"
+ + "trace(\"hello:\" + a);\r\n"
+ + "a++;\r\n"
+ + "}\r\n", false);*/
+ // Issue 842, recover for loops
+ decompileMethod("testForBreak", "for(var a:* = 0; a < 10; a++)\r\n"
+ + "{\r\n"
+ + "if(a == 5)\r\n"
+ + "{\r\n"
+ + "break;\r\n"
+ + "}\r\n"
+ + "trace(\"hello:\" + a);\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testIf() {
+ decompileMethod("testIf", "var a:* = 5;\r\n"
+ + "if(a == 7)\r\n"
+ + "{\r\n"
+ + "trace(\"onTrue\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testIfElse() {
+ decompileMethod("testIfElse", "var a:* = 5;\r\n"
+ + "if(a == 7)\r\n"
+ + "{\r\n"
+ + "trace(\"onTrue\");\r\n"
+ + "}\r\n"
+ + "else\r\n"
+ + "{\r\n"
+ + "trace(\"onFalse\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testFor() {
+ decompileMethod("testFor", "for(var a:* = 0; a < 10; a++)\r\n"
+ + "{\r\n"
+ + "trace(\"a=\" + a);\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testForContinue() {
+ decompileMethod("testForContinue", "for(var a:* = 0; a < 10; a = a + 1)\r\n"
+ + "{\r\n"
+ + "if(a == 9)\r\n"
+ + "{\r\n"
+ + "if(a == 5)\r\n"
+ + "{\r\n"
+ + "trace(\"part1\");\r\n"
+ + "continue;\r\n"
+ + "}\r\n"
+ + "trace(\"a=\" + a);\r\n"
+ + "if(a == 7)\r\n"
+ + "{\r\n"
+ + "trace(\"part2\");\r\n"
+ + "continue;\r\n"
+ + "}\r\n"
+ + "trace(\"part3\");\r\n"
+ + "}\r\n"
+ + "else\r\n"
+ + "{\r\n"
+ + "trace(\"part4\");\r\n"
+ + "}\r\n"
+ + "trace(\"part5\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testTry() {
+ decompileMethod("testTry", "var i:int = 0;\r\n"
+ + "i = 7;\r\n"
+ + "try\r\n"
+ + "{\r\n"
+ + "trace(\"try body\");\r\n"
+ + "}\r\n"
+ + "catch(e:DefinitionError)\r\n"
+ + "{\r\n"
+ + "trace(\"catched DefinitionError\");\r\n"
+ + "}\r\n"
+ + "catch(e:Error)\r\n"
+ + "{\r\n"
+ + "trace(\"Error message:\" + e.message);\r\n"
+ + "trace(\"Stacktrace:\" + e.getStackTrace());\r\n"
+ + "}\r\n"
+ + "finally\r\n"
+ + "{\r\n"
+ + "trace(\"Finally part\");\r\n"
+ + "}\r\n"
+ + "trace(\"end\");\r\n", false);
+ }
+
+ @Test
+ public void testSwitch() {
+ decompileMethod("testSwitch", "var a:* = 5;\r\n"
+ + "switch(a)\r\n"
+ + "{\r\n"
+ + "case 57 * a:\r\n"
+ + "trace(\"fiftyseven multiply a\");\r\n"
+ + "break;\r\n"
+ + "case 13:\r\n"
+ + "trace(\"thirteen\");\r\n"
+ + "case 14:\r\n"
+ + "trace(\"fourteen\");\r\n"
+ + "break;\r\n"
+ + "case 89:\r\n"
+ + "trace(\"eightynine\");\r\n"
+ + "break;\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testTernarOperator() {
+ decompileMethod("testTernarOperator", "var a:* = 5;\r\n"
+ + "var b:* = 4;\r\n"
+ + "var c:* = 4;\r\n"
+ + "var d:* = 78;\r\n"
+ + "var e:* = a == b?c == d?1:7:3;\r\n"
+ + "trace(\"e=\" + e);\r\n", false);
+ }
+
+ @Test
+ public void testInnerIf() {
+ decompileMethod("testInnerIf", "var a:* = 5;\r\n"
+ + "var b:* = 4;\r\n"
+ + "if(a == 5)\r\n"
+ + "{\r\n"
+ + "if(b == 6)\r\n"
+ + "{\r\n"
+ + "trace(\"b==6\");\r\n"
+ + "}\r\n"
+ + "else\r\n"
+ + "{\r\n"
+ + "trace(\"b!=6\");\r\n"
+ + "}\r\n"
+ + "}\r\n"
+ + "else if(b == 7)\r\n"
+ + "{\r\n"
+ + "trace(\"b==7\");\r\n"
+ + "}\r\n"
+ + "else\r\n"
+ + "{\r\n"
+ + "trace(\"b!=7\");\r\n"
+ + "}\r\n"
+ + "\r\n"
+ + "trace(\"end\");\r\n", false);
+ }
+
+ @Test
+ public void testVector() {
+ decompileMethod("testVector", "var v:Vector. = new Vector.();\r\n"
+ + "v.push(\"hello\");\r\n"
+ + "v[0] = \"hi\";\r\n"
+ + "v[5 * 8 - 39] = \"hi2\";\r\n"
+ + "trace(v[0]);\r\n", false);
+ }
+
+ @Test
+ public void testProperty() {
+ decompileMethod("testProperty", "var d:* = new TestClass1();\r\n"
+ + "var k:* = 7 + 8;\r\n"
+ + "if(k == 15)\r\n"
+ + "{\r\n"
+ + "d.method(d.attrib * 5);\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testRest() {
+ decompileMethod("testRest", "trace(\"firstRest:\" + restval[0]);\r\n"
+ + "return firstp;\r\n", false);
+ }
+
+ @Test
+ public void testParamNames() {
+ decompileMethod("testParamNames", "return firstp + secondp + thirdp;\r\n", false);
+ }
+
+ @Test
+ public void testForEach() {
+ decompileMethod("testForEach", "var list:Array = null;\r\n"
+ + "var item:* = undefined;\r\n"
+ + "list = new Array();\r\n"
+ + "list[0] = \"first\";\r\n"
+ + "list[1] = \"second\";\r\n"
+ + "list[2] = \"third\";\r\n"
+ + "for each(item in list)\r\n"
+ + "{\r\n"
+ + "trace(\"item #\" + item);\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testForEachObjectArray() {
+ decompileMethod("testForEachObjectArray", "var list:Array = null;\r\n"
+ + "var test:Array = null;\r\n"
+ + "list = new Array();\r\n"
+ + "list[0] = \"first\";\r\n"
+ + "list[1] = \"second\";\r\n"
+ + "list[2] = \"third\";\r\n"
+ + "test = new Array();\r\n"
+ + "test[0] = 0;\r\n"
+ + "for each(test[0] in list)\r\n"
+ + "{\r\n"
+ + "trace(\"item #\" + test[0]);\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testForEachObjectAttribute() {
+ decompileMethod("testForEachObjectAttribute", "var list:Array = null;\r\n"
+ + "list = new Array();\r\n"
+ + "list[0] = \"first\";\r\n"
+ + "list[1] = \"second\";\r\n"
+ + "list[2] = \"third\";\r\n"
+ + "for each(this.testPriv in list)\r\n"
+ + "{\r\n"
+ + "trace(\"item #\" + this.testPriv);\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testParamsCount() {
+ decompileMethod("testParamsCount", "return firstp;\r\n", false);
+ }
+
+ @Test
+ public void testInlineFunctions() {
+ decompileMethod("testInlineFunctions", "var first:String = null;\r\n"
+ + "first = \"value1\";\r\n"
+ + "var traceParameter:Function = function(aParam:String):String\r\n"
+ + "{\r\n"
+ + "var second:String = null;\r\n"
+ + "second = \"value2\";\r\n"
+ + "second = second + \"cc\";\r\n"
+ + "var traceParam2:Function = function(bParam:String):String\r\n"
+ + "{\r\n"
+ + "trace(bParam + \",\" + aParam);\r\n"
+ + "return first + second + aParam + bParam;\r\n"
+ + "};\r\n"
+ + "trace(second);\r\n"
+ + "traceParam2(aParam);\r\n"
+ + "return first;\r\n"
+ + "};\r\n"
+ + "traceParameter(\"hello\");\r\n", false);
+ }
+
+ @Test
+ public void testMissingDefault() {
+ decompileMethod("testMissingDefault", "var jj:* = 1;\r\n"
+ + "switch(jj)\r\n"
+ + "{\r\n"
+ + "case 1:\r\n"
+ + "jj = 1;\r\n"
+ + "break;\r\n"
+ + "case 2:\r\n"
+ + "jj = 2;\r\n"
+ + "break;\r\n"
+ + "default:\r\n"
+ + "jj = 3;\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testChainedAssignments() {
+ decompileMethod("testChainedAssignments", "var a:* = 0;\r\n"
+ + "var b:* = 0;\r\n"
+ + "var c:* = 0;\r\n"
+ + "var d:* = 0;\r\n"
+ + "d = c = b = a = 5;\r\n"
+ + "var e:TestClass2 = TestClass2.createMe(\"test\");\r\n"
+ + "e.attrib1 = e.attrib2 = e.attrib3 = this.getCounter();\r\n"
+ + "this.traceIt(e.toString());\r\n", false);
+ }
+
+ @Test
+ public void testFinallyZeroJump() {
+ decompileMethod("testFinallyZeroJump", "var str:String = param1;\r\n"
+ + "try\r\n"
+ + "{\r\n"
+ + "}\r\n"
+ + "catch(e:Error)\r\n"
+ + "{\r\n"
+ + "trace(\"error is :\" + e.message);\r\n"
+ + "}\r\n"
+ + "finally\r\n"
+ + "{\r\n"
+ + "trace(\"hi \");\r\n"
+ + "if(5 == 4)\r\n"
+ + "{\r\n"
+ + "return str;\r\n"
+ + "}\r\n"
+ + "return \"hu\" + str;\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testInnerFunctions() {
+ decompileMethod("testInnerFunctions", "var s:int = 0;\r\n"
+ + "var innerFunc:Function = function(b:String):*\r\n"
+ + "{\r\n"
+ + "trace(b);\r\n"
+ + "};\r\n"
+ + "var k:int = 5;\r\n"
+ + "if(k == 6)\r\n"
+ + "{\r\n"
+ + "s = 8;\r\n"
+ + "}\r\n"
+ + "innerFunc(a);\r\n", false);
+ }
+
+ @Test
+ public void testDeclarations() {
+ decompileMethod("testDeclarations", "var vall:* = undefined;\r\n"
+ + "var vstr:String = null;\r\n"
+ + "var vint:* = 0;\r\n"
+ + "var vuint:uint = 0;\r\n"
+ + "var vclass:TestClass1 = null;\r\n"
+ + "var vnumber:* = NaN;\r\n"
+ + "var vobject:Object = null;\r\n"
+ + "vall = 6;\r\n"
+ + "vstr = \"hello\";\r\n"
+ + "vuint = 7;\r\n"
+ + "vint = -4;\r\n"
+ + "vclass = new TestClass1();\r\n"
+ + "vnumber = 0.5;\r\n"
+ + "vnumber = 6;\r\n"
+ + "vobject = vclass;\r\n", false);
+ }
+
+ @Test
+ public void testForIn() {
+ decompileMethod("testForIn", "var dic:Dictionary = null;\r\n"
+ + "var item:Object = null;\r\n"
+ + "for(item in dic)\r\n"
+ + "{\r\n"
+ + "trace(item);\r\n"
+ + "}\r\n"
+ + "for each(item in dic)\r\n"
+ + "{\r\n"
+ + "trace(item);\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testNames() {
+ decompileMethod("testNames", "var ns:* = this.getNamespace();\r\n"
+ + "var name:* = this.getName();\r\n"
+ + "var a:* = ns::unnamespacedFunc();\r\n"
+ + "var b:* = ns::[name];\r\n"
+ + "trace(b.c);\r\n"
+ + "var c:* = myInternal::neco;\r\n", false);
+ }
+
+ @Test
+ public void testComplexExpressions() {
+ decompileMethod("testComplexExpressions", "var i:* = 0;\r\n"
+ + "var j:* = 0;\r\n"
+ + "j = i = i + (i = i + i++);\r\n", false);
+ }
+
+ @Test
+ public void testExpressions() {
+ decompileMethod("testExpressions", "var arr:Array = null;\r\n"
+ + "var i:* = 5;\r\n"
+ + "var j:* = 5;\r\n"
+ + "if((i = i = i / 2) == 1 || i == 2)\r\n"
+ + "{\r\n"
+ + "arguments.concat(i);\r\n"
+ + "}\r\n"
+ + "else if(i == 0)\r\n"
+ + "{\r\n"
+ + "i = j++;\r\n"
+ + "}\r\n"
+ + "else\r\n"
+ + "{\r\n"
+ + "arr[0]();\r\n"
+ + "}\r\n"
+ + "\r\n"
+ + "return i == 0;\r\n", false);
+ }
+
+ @Test
+ public void testArguments() {
+ decompileMethod("testArguments", "return arguments[0];\r\n", false);
+ }
+
+ @Test
+ public void testLogicalComputing() {
+ decompileMethod("testLogicalComputing", "var b:* = false;\r\n"
+ + "var i:* = 5;\r\n"
+ + "var j:* = 7;\r\n"
+ + "if(i > j)\r\n"
+ + "{\r\n"
+ + "j = 9;\r\n"
+ + "b = true;\r\n"
+ + "}\r\n"
+ + "b = (i == 0 || i == 1) && j == 0;\r\n", false);
+ }
+
+ @Test
+ public void testInc2() {
+ decompileMethod("testInc2", "var a:* = [1];\r\n"
+ + "a[this.getInt()]++;\r\n"
+ + "var d:* = a[this.getInt()]++;\r\n"
+ + "var e:* = ++a[this.getInt()];\r\n"
+ + "var b:* = 1;\r\n"
+ + "b++;\r\n"
+ + "var c:* = 1;\r\n"
+ + "b = c++;\r\n", false);
+ }
+
+ @Test
+ public void testDecl2() {
+ decompileMethod("testDecl2", "var k:* = 0;\r\n"
+ + "var i:* = 5;\r\n"
+ + "i = i + 7;\r\n"
+ + "if(i == 5)\r\n"
+ + "{\r\n"
+ + "if(i < 8)\r\n"
+ + "{\r\n"
+ + "k = 6;\r\n"
+ + "}\r\n"
+ + "}\r\n"
+ + "k = 7;\r\n", false);
+ }
+
+ @Test
+ public void testChain2() {
+ decompileMethod("testChain2", "var g:Array = null;\r\n"
+ + "var h:* = false;\r\n"
+ + "var extraLine:* = false;\r\n"
+ + "var r:* = 7;\r\n"
+ + "var t:* = 0;\r\n"
+ + "t = this.getInt();\r\n"
+ + "if(t + 1 < g.length)\r\n"
+ + "{\r\n"
+ + "t++;\r\n"
+ + "h = true;\r\n"
+ + "}\r\n"
+ + "if(t >= 0)\r\n"
+ + "{\r\n"
+ + "trace(\"ch\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testDoWhile2() {
+ decompileMethod("testDoWhile2", "var k:* = 5;\r\n"
+ + "do\r\n"
+ + "{\r\n"
+ + "k++;\r\n"
+ + "if(k == 7)\r\n"
+ + "{\r\n"
+ + "k = 5 * k;\r\n"
+ + "}\r\n"
+ + "else\r\n"
+ + "{\r\n"
+ + "k = 5 - k;\r\n"
+ + "}\r\n"
+ + "k--;\r\n"
+ + "}\r\n"
+ + "while(k < 9);\r\n"
+ + "\r\n"
+ + "return 2;\r\n", false);
+ }
+
+ @Test
+ public void testWhileAnd() {
+ decompileMethod("testWhileAnd", "var a:* = 5;\r\n"
+ + "var b:* = 10;\r\n"
+ + "while(a < 10 && b > 1)\r\n"
+ + "{\r\n"
+ + "a++;\r\n"
+ + "b--;\r\n"
+ + "}\r\n"
+ + "a = 7;\r\n"
+ + "b = 9;\r\n", false);
+ }
+
+ @Test
+ public void testNamedAnonFunctions() {
+ decompileMethod("testNamedAnonFunctions", "var test:* = new function testFunc(param1:*, param2:int, param3:Array):Boolean\r\n"
+ + "{\r\n"
+ + "return (param1 as TestClass2).attrib1 == 5;\r\n"
+ + "};\r\n", false);
+ }
+
+ @Test
+ public void testStringConcat() {
+ decompileMethod("testStringConcat", "var k:* = 8;\r\n"
+ + "this.traceIt(\"hello\" + 5 * 6);\r\n"
+ + "this.traceIt(\"hello\" + (k - 1));\r\n"
+ + "this.traceIt(\"hello\" + 5 + 6);\r\n", false);
+ }
+
+ @Test
+ public void testWhileTry() {
+ decompileMethod("testWhileTry", "while(true)\r\n"
+ + "{\r\n"
+ + "try\r\n"
+ + "{\r\n"
+ + "while(true)\r\n"
+ + "{\r\n"
+ + "trace(\"a\");\r\n"
+ + "}\r\n"
+ + "}\r\n"
+ + "catch(e:EOFError)\r\n"
+ + "{\r\n"
+ + "continue;\r\n"
+ + "}\r\n"
+ + "catch(e:Error)\r\n"
+ + "{\r\n"
+ + "continue;\r\n"
+ + "}\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testWhileTry2() {
+ decompileMethod("testWhileTry2", "var j:* = undefined;\r\n"
+ + "for(var i:* = 0; i < 100; i++)\r\n"
+ + "{\r\n"
+ + "try\r\n"
+ + "{\r\n"
+ + "for(j = 0; j < 20; j++)\r\n"
+ + "{\r\n"
+ + "trace(\"a\");\r\n"
+ + "}\r\n"
+ + "}\r\n"
+ + "catch(e:EOFError)\r\n"
+ + "{\r\n"
+ + "continue;\r\n"
+ + "}\r\n"
+ + "catch(e:Error)\r\n"
+ + "{\r\n"
+ + "continue;\r\n"
+ + "}\r\n"
+ + "trace(\"after_try\");\r\n"
+ + "}\r\n"
+ + "trace(\"end\");\r\n", false);
+ }
+
+ @Test
+ public void testTryReturn() {
+ decompileMethod("testTryReturn", "var i:int = 0;\r\n"
+ + "var b:Boolean = false;\r\n"
+ + "try\r\n"
+ + "{\r\n"
+ + "i = 0;\r\n"
+ + "b = true;\r\n"
+ + "if(i > 0)\r\n"
+ + "{\r\n"
+ + "while(this.testDoWhile2())\r\n"
+ + "{\r\n"
+ + "if(b)\r\n"
+ + "{\r\n"
+ + "return 5;\r\n"
+ + "}\r\n"
+ + "}\r\n"
+ + "}\r\n"
+ + "i++;\r\n"
+ + "return 2;\r\n"
+ + "}\r\n"
+ + "catch(e:Error)\r\n"
+ + "{\r\n"
+ + "}\r\n"
+ + "return 4;\r\n", false);
+ }
+
+ @Test
+ public void testVector2() {
+ decompileMethod("testVector2", "var a:Vector.> = new Vector.>();\r\n"
+ + "var b:Vector. = new [10,20,30];\r\n", false);
+ }
+
+ public void testFinallyOnly() {
+ decompileMethod("testFinallyOnly", "var a:* = 5;\r\n"
+ + "try\r\n"
+ + "{\r\n"
+ + "a = 9;\r\n"
+ + "trace(\"intry\");\r\n"
+ + "}\r\n"
+ + "finally\r\n"
+ + "{\r\n"
+ + "trace(\"infinally\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testCatchFinally() {
+ decompileMethod("testCatchFinally", "var a:* = 5;\r\n"
+ + "try\r\n"
+ + "{\r\n"
+ + "a = 9;\r\n"
+ + "trace(\"intry\");\r\n"
+ + "}\r\n"
+ + "catch(e:*)\r\n"
+ + "{\r\n"
+ + "trace(\"incatch\");\r\n"
+ + "}\r\n"
+ + "finally\r\n"
+ + "{\r\n"
+ + "trace(\"infinally\");\r\n"
+ + "}\r\n", false);
+ }
+
+ @Test
+ public void testOptionalParameters() {
+ String methodName = "testOptionalParameters";
+ int methodInfo = abc.findMethodInfoByName(clsIndex, methodName);
+ int bodyIndex = abc.findMethodBodyByName(clsIndex, methodName);
+ assertTrue(methodInfo > -1);
+ assertTrue(bodyIndex > -1);
+ HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false);
+ abc.method_info.get(methodInfo).getParamStr(writer, abc.constants, abc.bodies.get(bodyIndex), abc, new ArrayList<>());
+ String actualResult = writer.toString().replaceAll("[ \r\n]", "");
+ String expectedResult = "p1:Event=null,p2:Number=1,p3:Number=-1,p4:Number=-1.1,p5:Number=-1.1,p6:String=\"a\"";
+ expectedResult = expectedResult.replaceAll("[ \r\n]", "");
+ assertEquals(actualResult, expectedResult);
+ }
+}
diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2Generator.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2Generator.java
index 45866ab8d..6c9ef9425 100644
--- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2Generator.java
+++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2Generator.java
@@ -12,7 +12,8 @@
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library.
*/
+ * License along with this library.
+ */
package com.jpexs.decompiler.flash.generators;
import com.jpexs.decompiler.flash.SWF;
@@ -20,7 +21,7 @@ import com.jpexs.decompiler.flash.action.Action;
import com.jpexs.decompiler.flash.configuration.Configuration;
import com.jpexs.decompiler.flash.helpers.CodeFormatting;
import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter;
-import com.jpexs.decompiler.flash.tags.DoABCDefineTag;
+import com.jpexs.decompiler.flash.tags.DoABC2Tag;
import com.jpexs.decompiler.flash.tags.DoActionTag;
import com.jpexs.decompiler.flash.tags.ShowFrameTag;
import com.jpexs.decompiler.flash.tags.Tag;
@@ -40,7 +41,7 @@ public class AS2Generator {
public static void main(String[] args) throws Exception {
Configuration.autoDeobfuscate.set(false);
SWF swf = new SWF(new BufferedInputStream(new FileInputStream("testdata/as2/as2.swf")), false);
- DoABCDefineTag tag = null;
+ DoABC2Tag tag = null;
DoActionTag doa = null;
int frame = 0;
StringBuilder s = new StringBuilder();
diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java
index 2a6860881..677d755b9 100644
--- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java
+++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java
@@ -26,7 +26,7 @@ import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode;
import com.jpexs.decompiler.flash.helpers.CodeFormatting;
import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter;
import com.jpexs.decompiler.flash.helpers.NulWriter;
-import com.jpexs.decompiler.flash.tags.DoABCDefineTag;
+import com.jpexs.decompiler.flash.tags.DoABC2Tag;
import com.jpexs.decompiler.flash.tags.Tag;
import com.jpexs.decompiler.graph.ScopeStack;
import java.io.BufferedInputStream;
@@ -45,10 +45,10 @@ public class AS3Generator {
public static void main(String[] args) throws Exception {
Configuration.autoDeobfuscate.set(false);
SWF swf = new SWF(new BufferedInputStream(new FileInputStream("testdata/as3/as3.swf")), false);
- DoABCDefineTag tag = null;
+ DoABC2Tag tag = null;
for (Tag t : swf.tags) {
- if (t instanceof DoABCDefineTag) {
- tag = (DoABCDefineTag) t;
+ if (t instanceof DoABC2Tag) {
+ tag = (DoABC2Tag) t;
break;
}
}
diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagIdClassMap.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagIdClassMap.java
index e20869122..ca6b0b8ca 100644
--- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagIdClassMap.java
+++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagIdClassMap.java
@@ -1,205 +1,205 @@
-/*
- * Copyright (C) 2010-2015 JPEXS
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.jpexs.decompiler.flash.gui.tagtree;
-
-import com.jpexs.decompiler.flash.tags.CSMTextSettingsTag;
-import com.jpexs.decompiler.flash.tags.DebugIDTag;
-import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag;
-import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag;
-import com.jpexs.decompiler.flash.tags.DefineBitsJPEG3Tag;
-import com.jpexs.decompiler.flash.tags.DefineBitsJPEG4Tag;
-import com.jpexs.decompiler.flash.tags.DefineBitsLossless2Tag;
-import com.jpexs.decompiler.flash.tags.DefineBitsLosslessTag;
-import com.jpexs.decompiler.flash.tags.DefineBitsTag;
-import com.jpexs.decompiler.flash.tags.DefineButton2Tag;
-import com.jpexs.decompiler.flash.tags.DefineButtonCxformTag;
-import com.jpexs.decompiler.flash.tags.DefineButtonSoundTag;
-import com.jpexs.decompiler.flash.tags.DefineButtonTag;
-import com.jpexs.decompiler.flash.tags.DefineEditTextTag;
-import com.jpexs.decompiler.flash.tags.DefineFont2Tag;
-import com.jpexs.decompiler.flash.tags.DefineFont3Tag;
-import com.jpexs.decompiler.flash.tags.DefineFont4Tag;
-import com.jpexs.decompiler.flash.tags.DefineFontAlignZonesTag;
-import com.jpexs.decompiler.flash.tags.DefineFontInfo2Tag;
-import com.jpexs.decompiler.flash.tags.DefineFontInfoTag;
-import com.jpexs.decompiler.flash.tags.DefineFontNameTag;
-import com.jpexs.decompiler.flash.tags.DefineFontTag;
-import com.jpexs.decompiler.flash.tags.DefineMorphShape2Tag;
-import com.jpexs.decompiler.flash.tags.DefineMorphShapeTag;
-import com.jpexs.decompiler.flash.tags.DefineScalingGridTag;
-import com.jpexs.decompiler.flash.tags.DefineSceneAndFrameLabelDataTag;
-import com.jpexs.decompiler.flash.tags.DefineShape2Tag;
-import com.jpexs.decompiler.flash.tags.DefineShape3Tag;
-import com.jpexs.decompiler.flash.tags.DefineShape4Tag;
-import com.jpexs.decompiler.flash.tags.DefineShapeTag;
-import com.jpexs.decompiler.flash.tags.DefineSoundTag;
-import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
-import com.jpexs.decompiler.flash.tags.DefineText2Tag;
-import com.jpexs.decompiler.flash.tags.DefineTextTag;
-import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag;
-import com.jpexs.decompiler.flash.tags.DoABCDefineTag;
-import com.jpexs.decompiler.flash.tags.DoABCTag;
-import com.jpexs.decompiler.flash.tags.DoActionTag;
-import com.jpexs.decompiler.flash.tags.DoInitActionTag;
-import com.jpexs.decompiler.flash.tags.EnableDebugger2Tag;
-import com.jpexs.decompiler.flash.tags.EnableDebuggerTag;
-import com.jpexs.decompiler.flash.tags.EnableTelemetryTag;
-import com.jpexs.decompiler.flash.tags.EndTag;
-import com.jpexs.decompiler.flash.tags.ExportAssetsTag;
-import com.jpexs.decompiler.flash.tags.FileAttributesTag;
-import com.jpexs.decompiler.flash.tags.FrameLabelTag;
-import com.jpexs.decompiler.flash.tags.ImportAssets2Tag;
-import com.jpexs.decompiler.flash.tags.ImportAssetsTag;
-import com.jpexs.decompiler.flash.tags.JPEGTablesTag;
-import com.jpexs.decompiler.flash.tags.MetadataTag;
-import com.jpexs.decompiler.flash.tags.PlaceObject2Tag;
-import com.jpexs.decompiler.flash.tags.PlaceObject3Tag;
-import com.jpexs.decompiler.flash.tags.PlaceObject4Tag;
-import com.jpexs.decompiler.flash.tags.PlaceObjectTag;
-import com.jpexs.decompiler.flash.tags.ProductInfoTag;
-import com.jpexs.decompiler.flash.tags.ProtectTag;
-import com.jpexs.decompiler.flash.tags.RemoveObject2Tag;
-import com.jpexs.decompiler.flash.tags.RemoveObjectTag;
-import com.jpexs.decompiler.flash.tags.ScriptLimitsTag;
-import com.jpexs.decompiler.flash.tags.SetBackgroundColorTag;
-import com.jpexs.decompiler.flash.tags.SetTabIndexTag;
-import com.jpexs.decompiler.flash.tags.ShowFrameTag;
-import com.jpexs.decompiler.flash.tags.SoundStreamBlockTag;
-import com.jpexs.decompiler.flash.tags.SoundStreamHead2Tag;
-import com.jpexs.decompiler.flash.tags.SoundStreamHeadTag;
-import com.jpexs.decompiler.flash.tags.StartSound2Tag;
-import com.jpexs.decompiler.flash.tags.StartSoundTag;
-import com.jpexs.decompiler.flash.tags.SymbolClassTag;
-import com.jpexs.decompiler.flash.tags.VideoFrameTag;
-import com.jpexs.decompiler.flash.tags.gfx.DefineCompactedFont;
-import com.jpexs.decompiler.flash.tags.gfx.DefineExternalGradient;
-import com.jpexs.decompiler.flash.tags.gfx.DefineExternalImage;
-import com.jpexs.decompiler.flash.tags.gfx.DefineExternalImage2;
-import com.jpexs.decompiler.flash.tags.gfx.DefineExternalSound;
-import com.jpexs.decompiler.flash.tags.gfx.DefineExternalStreamSound;
-import com.jpexs.decompiler.flash.tags.gfx.DefineGradientMap;
-import com.jpexs.decompiler.flash.tags.gfx.DefineSubImage;
-import com.jpexs.decompiler.flash.tags.gfx.ExporterInfo;
-import com.jpexs.decompiler.flash.tags.gfx.FontTextureInfo;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *
- * @author JPEXS
- */
-public class TagIdClassMap {
-
- private static final Map> tagIdClassMap = new HashMap<>();
-
- private static final Map classTagIdMap = new HashMap<>();
-
- static {
- addTag(CSMTextSettingsTag.ID, CSMTextSettingsTag.class);
- addTag(DebugIDTag.ID, DebugIDTag.class);
- addTag(DefineBinaryDataTag.ID, DefineBinaryDataTag.class);
- addTag(DefineBitsJPEG2Tag.ID, DefineBitsJPEG2Tag.class);
- addTag(DefineBitsJPEG3Tag.ID, DefineBitsJPEG3Tag.class);
- addTag(DefineBitsJPEG4Tag.ID, DefineBitsJPEG4Tag.class);
- addTag(DefineBitsLossless2Tag.ID, DefineBitsLossless2Tag.class);
- addTag(DefineBitsLosslessTag.ID, DefineBitsLosslessTag.class);
- addTag(DefineBitsTag.ID, DefineBitsTag.class);
- addTag(DefineButton2Tag.ID, DefineButton2Tag.class);
- addTag(DefineButtonCxformTag.ID, DefineButtonCxformTag.class);
- addTag(DefineButtonSoundTag.ID, DefineButtonSoundTag.class);
- addTag(DefineButtonTag.ID, DefineButtonTag.class);
- addTag(DefineEditTextTag.ID, DefineEditTextTag.class);
- addTag(DefineFont2Tag.ID, DefineFont2Tag.class);
- addTag(DefineFont3Tag.ID, DefineFont3Tag.class);
- addTag(DefineFont4Tag.ID, DefineFont4Tag.class);
- addTag(DefineFontAlignZonesTag.ID, DefineFontAlignZonesTag.class);
- addTag(DefineFontInfo2Tag.ID, DefineFontInfo2Tag.class);
- addTag(DefineFontInfoTag.ID, DefineFontInfoTag.class);
- addTag(DefineFontNameTag.ID, DefineFontNameTag.class);
- addTag(DefineFontTag.ID, DefineFontTag.class);
- addTag(DefineMorphShape2Tag.ID, DefineMorphShape2Tag.class);
- addTag(DefineMorphShapeTag.ID, DefineMorphShapeTag.class);
- addTag(DefineScalingGridTag.ID, DefineScalingGridTag.class);
- addTag(DefineSceneAndFrameLabelDataTag.ID, DefineSceneAndFrameLabelDataTag.class);
- addTag(DefineShape2Tag.ID, DefineShape2Tag.class);
- addTag(DefineShape3Tag.ID, DefineShape3Tag.class);
- addTag(DefineShape4Tag.ID, DefineShape4Tag.class);
- addTag(DefineShapeTag.ID, DefineShapeTag.class);
- addTag(DefineSoundTag.ID, DefineSoundTag.class);
- addTag(DefineSpriteTag.ID, DefineSpriteTag.class);
- addTag(DefineText2Tag.ID, DefineText2Tag.class);
- addTag(DefineTextTag.ID, DefineTextTag.class);
- addTag(DefineVideoStreamTag.ID, DefineVideoStreamTag.class);
- addTag(DoABCDefineTag.ID, DoABCDefineTag.class);
- addTag(DoABCTag.ID, DoABCTag.class);
- addTag(DoActionTag.ID, DoActionTag.class);
- addTag(DoInitActionTag.ID, DoInitActionTag.class);
- addTag(EnableDebugger2Tag.ID, EnableDebugger2Tag.class);
- addTag(EnableDebuggerTag.ID, EnableDebuggerTag.class);
- addTag(EnableTelemetryTag.ID, EnableTelemetryTag.class);
- addTag(EndTag.ID, EndTag.class);
- addTag(ExportAssetsTag.ID, ExportAssetsTag.class);
- addTag(FileAttributesTag.ID, FileAttributesTag.class);
- addTag(FrameLabelTag.ID, FrameLabelTag.class);
- addTag(ImportAssets2Tag.ID, ImportAssets2Tag.class);
- addTag(ImportAssetsTag.ID, ImportAssetsTag.class);
- addTag(JPEGTablesTag.ID, JPEGTablesTag.class);
- addTag(MetadataTag.ID, MetadataTag.class);
- addTag(PlaceObject2Tag.ID, PlaceObject2Tag.class);
- addTag(PlaceObject3Tag.ID, PlaceObject3Tag.class);
- addTag(PlaceObject4Tag.ID, PlaceObject4Tag.class);
- addTag(PlaceObjectTag.ID, PlaceObjectTag.class);
- addTag(ProductInfoTag.ID, ProductInfoTag.class);
- addTag(ProtectTag.ID, ProtectTag.class);
- addTag(RemoveObject2Tag.ID, RemoveObject2Tag.class);
- addTag(RemoveObjectTag.ID, RemoveObjectTag.class);
- addTag(ScriptLimitsTag.ID, ScriptLimitsTag.class);
- addTag(SetBackgroundColorTag.ID, SetBackgroundColorTag.class);
- addTag(SetTabIndexTag.ID, SetTabIndexTag.class);
- addTag(ShowFrameTag.ID, ShowFrameTag.class);
- addTag(SoundStreamBlockTag.ID, SoundStreamBlockTag.class);
- addTag(SoundStreamHead2Tag.ID, SoundStreamHead2Tag.class);
- addTag(SoundStreamHeadTag.ID, SoundStreamHeadTag.class);
- addTag(StartSound2Tag.ID, StartSound2Tag.class);
- addTag(StartSoundTag.ID, StartSoundTag.class);
- addTag(SymbolClassTag.ID, SymbolClassTag.class);
- addTag(VideoFrameTag.ID, VideoFrameTag.class);
- addTag(DefineCompactedFont.ID, DefineCompactedFont.class);
- addTag(DefineExternalGradient.ID, DefineExternalGradient.class);
- addTag(DefineExternalImage.ID, DefineExternalImage.class);
- addTag(DefineExternalImage2.ID, DefineExternalImage2.class);
- addTag(DefineExternalSound.ID, DefineExternalSound.class);
- addTag(DefineExternalStreamSound.ID, DefineExternalStreamSound.class);
- addTag(DefineGradientMap.ID, DefineGradientMap.class);
- addTag(DefineSubImage.ID, DefineSubImage.class);
- addTag(ExporterInfo.ID, ExporterInfo.class);
- addTag(FontTextureInfo.ID, FontTextureInfo.class);
- }
-
- private static void addTag(int tagId, Class> cl) {
- tagIdClassMap.put(tagId, cl);
- classTagIdMap.put(cl, tagId);
- }
-
- public static Class> getClassByTagId(int tagId) {
- return tagIdClassMap.get(tagId);
- }
-
- public static Integer getTagIdByClass(Class cl) {
- return classTagIdMap.get(cl);
- }
-}
+/*
+ * Copyright (C) 2010-2015 JPEXS
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.jpexs.decompiler.flash.gui.tagtree;
+
+import com.jpexs.decompiler.flash.tags.CSMTextSettingsTag;
+import com.jpexs.decompiler.flash.tags.DebugIDTag;
+import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag;
+import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag;
+import com.jpexs.decompiler.flash.tags.DefineBitsJPEG3Tag;
+import com.jpexs.decompiler.flash.tags.DefineBitsJPEG4Tag;
+import com.jpexs.decompiler.flash.tags.DefineBitsLossless2Tag;
+import com.jpexs.decompiler.flash.tags.DefineBitsLosslessTag;
+import com.jpexs.decompiler.flash.tags.DefineBitsTag;
+import com.jpexs.decompiler.flash.tags.DefineButton2Tag;
+import com.jpexs.decompiler.flash.tags.DefineButtonCxformTag;
+import com.jpexs.decompiler.flash.tags.DefineButtonSoundTag;
+import com.jpexs.decompiler.flash.tags.DefineButtonTag;
+import com.jpexs.decompiler.flash.tags.DefineEditTextTag;
+import com.jpexs.decompiler.flash.tags.DefineFont2Tag;
+import com.jpexs.decompiler.flash.tags.DefineFont3Tag;
+import com.jpexs.decompiler.flash.tags.DefineFont4Tag;
+import com.jpexs.decompiler.flash.tags.DefineFontAlignZonesTag;
+import com.jpexs.decompiler.flash.tags.DefineFontInfo2Tag;
+import com.jpexs.decompiler.flash.tags.DefineFontInfoTag;
+import com.jpexs.decompiler.flash.tags.DefineFontNameTag;
+import com.jpexs.decompiler.flash.tags.DefineFontTag;
+import com.jpexs.decompiler.flash.tags.DefineMorphShape2Tag;
+import com.jpexs.decompiler.flash.tags.DefineMorphShapeTag;
+import com.jpexs.decompiler.flash.tags.DefineScalingGridTag;
+import com.jpexs.decompiler.flash.tags.DefineSceneAndFrameLabelDataTag;
+import com.jpexs.decompiler.flash.tags.DefineShape2Tag;
+import com.jpexs.decompiler.flash.tags.DefineShape3Tag;
+import com.jpexs.decompiler.flash.tags.DefineShape4Tag;
+import com.jpexs.decompiler.flash.tags.DefineShapeTag;
+import com.jpexs.decompiler.flash.tags.DefineSoundTag;
+import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
+import com.jpexs.decompiler.flash.tags.DefineText2Tag;
+import com.jpexs.decompiler.flash.tags.DefineTextTag;
+import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag;
+import com.jpexs.decompiler.flash.tags.DoABC2Tag;
+import com.jpexs.decompiler.flash.tags.DoABCTag;
+import com.jpexs.decompiler.flash.tags.DoActionTag;
+import com.jpexs.decompiler.flash.tags.DoInitActionTag;
+import com.jpexs.decompiler.flash.tags.EnableDebugger2Tag;
+import com.jpexs.decompiler.flash.tags.EnableDebuggerTag;
+import com.jpexs.decompiler.flash.tags.EnableTelemetryTag;
+import com.jpexs.decompiler.flash.tags.EndTag;
+import com.jpexs.decompiler.flash.tags.ExportAssetsTag;
+import com.jpexs.decompiler.flash.tags.FileAttributesTag;
+import com.jpexs.decompiler.flash.tags.FrameLabelTag;
+import com.jpexs.decompiler.flash.tags.ImportAssets2Tag;
+import com.jpexs.decompiler.flash.tags.ImportAssetsTag;
+import com.jpexs.decompiler.flash.tags.JPEGTablesTag;
+import com.jpexs.decompiler.flash.tags.MetadataTag;
+import com.jpexs.decompiler.flash.tags.PlaceObject2Tag;
+import com.jpexs.decompiler.flash.tags.PlaceObject3Tag;
+import com.jpexs.decompiler.flash.tags.PlaceObject4Tag;
+import com.jpexs.decompiler.flash.tags.PlaceObjectTag;
+import com.jpexs.decompiler.flash.tags.ProductInfoTag;
+import com.jpexs.decompiler.flash.tags.ProtectTag;
+import com.jpexs.decompiler.flash.tags.RemoveObject2Tag;
+import com.jpexs.decompiler.flash.tags.RemoveObjectTag;
+import com.jpexs.decompiler.flash.tags.ScriptLimitsTag;
+import com.jpexs.decompiler.flash.tags.SetBackgroundColorTag;
+import com.jpexs.decompiler.flash.tags.SetTabIndexTag;
+import com.jpexs.decompiler.flash.tags.ShowFrameTag;
+import com.jpexs.decompiler.flash.tags.SoundStreamBlockTag;
+import com.jpexs.decompiler.flash.tags.SoundStreamHead2Tag;
+import com.jpexs.decompiler.flash.tags.SoundStreamHeadTag;
+import com.jpexs.decompiler.flash.tags.StartSound2Tag;
+import com.jpexs.decompiler.flash.tags.StartSoundTag;
+import com.jpexs.decompiler.flash.tags.SymbolClassTag;
+import com.jpexs.decompiler.flash.tags.VideoFrameTag;
+import com.jpexs.decompiler.flash.tags.gfx.DefineCompactedFont;
+import com.jpexs.decompiler.flash.tags.gfx.DefineExternalGradient;
+import com.jpexs.decompiler.flash.tags.gfx.DefineExternalImage;
+import com.jpexs.decompiler.flash.tags.gfx.DefineExternalImage2;
+import com.jpexs.decompiler.flash.tags.gfx.DefineExternalSound;
+import com.jpexs.decompiler.flash.tags.gfx.DefineExternalStreamSound;
+import com.jpexs.decompiler.flash.tags.gfx.DefineGradientMap;
+import com.jpexs.decompiler.flash.tags.gfx.DefineSubImage;
+import com.jpexs.decompiler.flash.tags.gfx.ExporterInfo;
+import com.jpexs.decompiler.flash.tags.gfx.FontTextureInfo;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author JPEXS
+ */
+public class TagIdClassMap {
+
+ private static final Map> tagIdClassMap = new HashMap<>();
+
+ private static final Map classTagIdMap = new HashMap<>();
+
+ static {
+ addTag(CSMTextSettingsTag.ID, CSMTextSettingsTag.class);
+ addTag(DebugIDTag.ID, DebugIDTag.class);
+ addTag(DefineBinaryDataTag.ID, DefineBinaryDataTag.class);
+ addTag(DefineBitsJPEG2Tag.ID, DefineBitsJPEG2Tag.class);
+ addTag(DefineBitsJPEG3Tag.ID, DefineBitsJPEG3Tag.class);
+ addTag(DefineBitsJPEG4Tag.ID, DefineBitsJPEG4Tag.class);
+ addTag(DefineBitsLossless2Tag.ID, DefineBitsLossless2Tag.class);
+ addTag(DefineBitsLosslessTag.ID, DefineBitsLosslessTag.class);
+ addTag(DefineBitsTag.ID, DefineBitsTag.class);
+ addTag(DefineButton2Tag.ID, DefineButton2Tag.class);
+ addTag(DefineButtonCxformTag.ID, DefineButtonCxformTag.class);
+ addTag(DefineButtonSoundTag.ID, DefineButtonSoundTag.class);
+ addTag(DefineButtonTag.ID, DefineButtonTag.class);
+ addTag(DefineEditTextTag.ID, DefineEditTextTag.class);
+ addTag(DefineFont2Tag.ID, DefineFont2Tag.class);
+ addTag(DefineFont3Tag.ID, DefineFont3Tag.class);
+ addTag(DefineFont4Tag.ID, DefineFont4Tag.class);
+ addTag(DefineFontAlignZonesTag.ID, DefineFontAlignZonesTag.class);
+ addTag(DefineFontInfo2Tag.ID, DefineFontInfo2Tag.class);
+ addTag(DefineFontInfoTag.ID, DefineFontInfoTag.class);
+ addTag(DefineFontNameTag.ID, DefineFontNameTag.class);
+ addTag(DefineFontTag.ID, DefineFontTag.class);
+ addTag(DefineMorphShape2Tag.ID, DefineMorphShape2Tag.class);
+ addTag(DefineMorphShapeTag.ID, DefineMorphShapeTag.class);
+ addTag(DefineScalingGridTag.ID, DefineScalingGridTag.class);
+ addTag(DefineSceneAndFrameLabelDataTag.ID, DefineSceneAndFrameLabelDataTag.class);
+ addTag(DefineShape2Tag.ID, DefineShape2Tag.class);
+ addTag(DefineShape3Tag.ID, DefineShape3Tag.class);
+ addTag(DefineShape4Tag.ID, DefineShape4Tag.class);
+ addTag(DefineShapeTag.ID, DefineShapeTag.class);
+ addTag(DefineSoundTag.ID, DefineSoundTag.class);
+ addTag(DefineSpriteTag.ID, DefineSpriteTag.class);
+ addTag(DefineText2Tag.ID, DefineText2Tag.class);
+ addTag(DefineTextTag.ID, DefineTextTag.class);
+ addTag(DefineVideoStreamTag.ID, DefineVideoStreamTag.class);
+ addTag(DoABC2Tag.ID, DoABC2Tag.class);
+ addTag(DoABCTag.ID, DoABCTag.class);
+ addTag(DoActionTag.ID, DoActionTag.class);
+ addTag(DoInitActionTag.ID, DoInitActionTag.class);
+ addTag(EnableDebugger2Tag.ID, EnableDebugger2Tag.class);
+ addTag(EnableDebuggerTag.ID, EnableDebuggerTag.class);
+ addTag(EnableTelemetryTag.ID, EnableTelemetryTag.class);
+ addTag(EndTag.ID, EndTag.class);
+ addTag(ExportAssetsTag.ID, ExportAssetsTag.class);
+ addTag(FileAttributesTag.ID, FileAttributesTag.class);
+ addTag(FrameLabelTag.ID, FrameLabelTag.class);
+ addTag(ImportAssets2Tag.ID, ImportAssets2Tag.class);
+ addTag(ImportAssetsTag.ID, ImportAssetsTag.class);
+ addTag(JPEGTablesTag.ID, JPEGTablesTag.class);
+ addTag(MetadataTag.ID, MetadataTag.class);
+ addTag(PlaceObject2Tag.ID, PlaceObject2Tag.class);
+ addTag(PlaceObject3Tag.ID, PlaceObject3Tag.class);
+ addTag(PlaceObject4Tag.ID, PlaceObject4Tag.class);
+ addTag(PlaceObjectTag.ID, PlaceObjectTag.class);
+ addTag(ProductInfoTag.ID, ProductInfoTag.class);
+ addTag(ProtectTag.ID, ProtectTag.class);
+ addTag(RemoveObject2Tag.ID, RemoveObject2Tag.class);
+ addTag(RemoveObjectTag.ID, RemoveObjectTag.class);
+ addTag(ScriptLimitsTag.ID, ScriptLimitsTag.class);
+ addTag(SetBackgroundColorTag.ID, SetBackgroundColorTag.class);
+ addTag(SetTabIndexTag.ID, SetTabIndexTag.class);
+ addTag(ShowFrameTag.ID, ShowFrameTag.class);
+ addTag(SoundStreamBlockTag.ID, SoundStreamBlockTag.class);
+ addTag(SoundStreamHead2Tag.ID, SoundStreamHead2Tag.class);
+ addTag(SoundStreamHeadTag.ID, SoundStreamHeadTag.class);
+ addTag(StartSound2Tag.ID, StartSound2Tag.class);
+ addTag(StartSoundTag.ID, StartSoundTag.class);
+ addTag(SymbolClassTag.ID, SymbolClassTag.class);
+ addTag(VideoFrameTag.ID, VideoFrameTag.class);
+ addTag(DefineCompactedFont.ID, DefineCompactedFont.class);
+ addTag(DefineExternalGradient.ID, DefineExternalGradient.class);
+ addTag(DefineExternalImage.ID, DefineExternalImage.class);
+ addTag(DefineExternalImage2.ID, DefineExternalImage2.class);
+ addTag(DefineExternalSound.ID, DefineExternalSound.class);
+ addTag(DefineExternalStreamSound.ID, DefineExternalStreamSound.class);
+ addTag(DefineGradientMap.ID, DefineGradientMap.class);
+ addTag(DefineSubImage.ID, DefineSubImage.class);
+ addTag(ExporterInfo.ID, ExporterInfo.class);
+ addTag(FontTextureInfo.ID, FontTextureInfo.class);
+ }
+
+ private static void addTag(int tagId, Class> cl) {
+ tagIdClassMap.put(tagId, cl);
+ classTagIdMap.put(cl, tagId);
+ }
+
+ public static Class> getClassByTagId(int tagId) {
+ return tagIdClassMap.get(tagId);
+ }
+
+ public static Integer getTagIdByClass(Class cl) {
+ return classTagIdMap.get(cl);
+ }
+}
diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java
index b49aeccad..4a0dcc7c5 100644
--- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java
+++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java
@@ -1,654 +1,654 @@
-/*
- * Copyright (C) 2010-2015 JPEXS
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.jpexs.decompiler.flash.gui.tagtree;
-
-import com.jpexs.decompiler.flash.SWC;
-import com.jpexs.decompiler.flash.SWF;
-import com.jpexs.decompiler.flash.ZippedSWFBundle;
-import com.jpexs.decompiler.flash.abc.ScriptPack;
-import com.jpexs.decompiler.flash.gui.MainPanel;
-import com.jpexs.decompiler.flash.gui.TreeNodeType;
-import com.jpexs.decompiler.flash.gui.View;
-import com.jpexs.decompiler.flash.tags.CSMTextSettingsTag;
-import com.jpexs.decompiler.flash.tags.DebugIDTag;
-import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag;
-import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag;
-import com.jpexs.decompiler.flash.tags.DefineBitsJPEG3Tag;
-import com.jpexs.decompiler.flash.tags.DefineBitsJPEG4Tag;
-import com.jpexs.decompiler.flash.tags.DefineBitsLossless2Tag;
-import com.jpexs.decompiler.flash.tags.DefineBitsLosslessTag;
-import com.jpexs.decompiler.flash.tags.DefineBitsTag;
-import com.jpexs.decompiler.flash.tags.DefineButton2Tag;
-import com.jpexs.decompiler.flash.tags.DefineButtonCxformTag;
-import com.jpexs.decompiler.flash.tags.DefineButtonSoundTag;
-import com.jpexs.decompiler.flash.tags.DefineButtonTag;
-import com.jpexs.decompiler.flash.tags.DefineEditTextTag;
-import com.jpexs.decompiler.flash.tags.DefineFont2Tag;
-import com.jpexs.decompiler.flash.tags.DefineFont3Tag;
-import com.jpexs.decompiler.flash.tags.DefineFont4Tag;
-import com.jpexs.decompiler.flash.tags.DefineFontAlignZonesTag;
-import com.jpexs.decompiler.flash.tags.DefineFontInfo2Tag;
-import com.jpexs.decompiler.flash.tags.DefineFontInfoTag;
-import com.jpexs.decompiler.flash.tags.DefineFontNameTag;
-import com.jpexs.decompiler.flash.tags.DefineFontTag;
-import com.jpexs.decompiler.flash.tags.DefineMorphShape2Tag;
-import com.jpexs.decompiler.flash.tags.DefineMorphShapeTag;
-import com.jpexs.decompiler.flash.tags.DefineScalingGridTag;
-import com.jpexs.decompiler.flash.tags.DefineSceneAndFrameLabelDataTag;
-import com.jpexs.decompiler.flash.tags.DefineShape2Tag;
-import com.jpexs.decompiler.flash.tags.DefineShape3Tag;
-import com.jpexs.decompiler.flash.tags.DefineShape4Tag;
-import com.jpexs.decompiler.flash.tags.DefineShapeTag;
-import com.jpexs.decompiler.flash.tags.DefineSoundTag;
-import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
-import com.jpexs.decompiler.flash.tags.DefineText2Tag;
-import com.jpexs.decompiler.flash.tags.DefineTextTag;
-import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag;
-import com.jpexs.decompiler.flash.tags.DoABCDefineTag;
-import com.jpexs.decompiler.flash.tags.DoABCTag;
-import com.jpexs.decompiler.flash.tags.DoActionTag;
-import com.jpexs.decompiler.flash.tags.DoInitActionTag;
-import com.jpexs.decompiler.flash.tags.EnableDebugger2Tag;
-import com.jpexs.decompiler.flash.tags.EnableDebuggerTag;
-import com.jpexs.decompiler.flash.tags.EnableTelemetryTag;
-import com.jpexs.decompiler.flash.tags.ExportAssetsTag;
-import com.jpexs.decompiler.flash.tags.FileAttributesTag;
-import com.jpexs.decompiler.flash.tags.FrameLabelTag;
-import com.jpexs.decompiler.flash.tags.ImportAssets2Tag;
-import com.jpexs.decompiler.flash.tags.ImportAssetsTag;
-import com.jpexs.decompiler.flash.tags.JPEGTablesTag;
-import com.jpexs.decompiler.flash.tags.MetadataTag;
-import com.jpexs.decompiler.flash.tags.PlaceObject2Tag;
-import com.jpexs.decompiler.flash.tags.PlaceObject3Tag;
-import com.jpexs.decompiler.flash.tags.PlaceObject4Tag;
-import com.jpexs.decompiler.flash.tags.PlaceObjectTag;
-import com.jpexs.decompiler.flash.tags.ProductInfoTag;
-import com.jpexs.decompiler.flash.tags.ProtectTag;
-import com.jpexs.decompiler.flash.tags.RemoveObject2Tag;
-import com.jpexs.decompiler.flash.tags.RemoveObjectTag;
-import com.jpexs.decompiler.flash.tags.ScriptLimitsTag;
-import com.jpexs.decompiler.flash.tags.SetBackgroundColorTag;
-import com.jpexs.decompiler.flash.tags.SetTabIndexTag;
-import com.jpexs.decompiler.flash.tags.ShowFrameTag;
-import com.jpexs.decompiler.flash.tags.SoundStreamBlockTag;
-import com.jpexs.decompiler.flash.tags.SoundStreamHead2Tag;
-import com.jpexs.decompiler.flash.tags.SoundStreamHeadTag;
-import com.jpexs.decompiler.flash.tags.StartSound2Tag;
-import com.jpexs.decompiler.flash.tags.StartSoundTag;
-import com.jpexs.decompiler.flash.tags.SymbolClassTag;
-import com.jpexs.decompiler.flash.tags.Tag;
-import com.jpexs.decompiler.flash.tags.VideoFrameTag;
-import com.jpexs.decompiler.flash.tags.base.ASMSource;
-import com.jpexs.decompiler.flash.tags.base.ButtonTag;
-import com.jpexs.decompiler.flash.tags.base.FontTag;
-import com.jpexs.decompiler.flash.tags.base.ImageTag;
-import com.jpexs.decompiler.flash.tags.base.MorphShapeTag;
-import com.jpexs.decompiler.flash.tags.base.PlaceObjectTypeTag;
-import com.jpexs.decompiler.flash.tags.base.RemoveTag;
-import com.jpexs.decompiler.flash.tags.base.ShapeTag;
-import com.jpexs.decompiler.flash.tags.base.SymbolClassTypeTag;
-import com.jpexs.decompiler.flash.tags.base.TextTag;
-import com.jpexs.decompiler.flash.tags.gfx.DefineCompactedFont;
-import com.jpexs.decompiler.flash.timeline.AS2Package;
-import com.jpexs.decompiler.flash.timeline.AS3Package;
-import com.jpexs.decompiler.flash.timeline.Frame;
-import com.jpexs.decompiler.flash.timeline.FrameScript;
-import com.jpexs.decompiler.flash.timeline.TagScript;
-import com.jpexs.decompiler.flash.treeitems.AS3ClassTreeItem;
-import com.jpexs.decompiler.flash.treeitems.FolderItem;
-import com.jpexs.decompiler.flash.treeitems.HeaderItem;
-import com.jpexs.decompiler.flash.treeitems.SWFList;
-import com.jpexs.decompiler.flash.treeitems.TreeItem;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Font;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.swing.Icon;
-import javax.swing.JTree;
-import javax.swing.plaf.basic.BasicLabelUI;
-import javax.swing.plaf.basic.BasicTreeUI;
-import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.TreePath;
-import javax.swing.tree.TreeSelectionModel;
-
-/**
- *
- * @author JPEXS
- */
-public class TagTree extends JTree {
-
- public TagTreeContextMenu contextPopupMenu;
-
- private final MainPanel mainPanel;
-
- public class TagTreeCellRenderer extends DefaultTreeCellRenderer {
-
- private Font plainFont;
-
- private Font boldFont;
-
- private final Map icons;
-
- public TagTreeCellRenderer() {
- setUI(new BasicLabelUI());
- setOpaque(false);
- //setBackground(Color.green);
- setBackgroundNonSelectionColor(Color.white);
- //setBackgroundSelectionColor(Color.ORANGE);
-
- icons = new HashMap<>();
- for (TreeNodeType treeNodeType : TreeNodeType.values()) {
- if (treeNodeType != TreeNodeType.UNKNOWN && treeNodeType != TreeNodeType.SHOW_FRAME) {
- String tagTypeStr = treeNodeType.toString().toLowerCase().replace("_", "");
- icons.put(treeNodeType, View.getIcon(tagTypeStr + "16"));
- }
- }
- }
-
- @Override
- public Component getTreeCellRendererComponent(
- JTree tree,
- Object value,
- boolean sel,
- boolean expanded,
- boolean leaf,
- int row,
- boolean hasFocus) {
-
- TreeItem val = (TreeItem) value;
- if (!(val instanceof SWFList) && val.getSwf() == null) {
- // SWF was closed
- value = null;
- }
-
- super.getTreeCellRendererComponent(
- tree, value, sel,
- expanded, leaf, row,
- hasFocus);
- TreeNodeType type = getTreeNodeType(val);
-
- if (type == TreeNodeType.FOLDER && expanded) {
- type = TreeNodeType.FOLDER_OPEN;
- }
-
- if ((type == TreeNodeType.FOLDER || type == TreeNodeType.FOLDER_OPEN) && val instanceof FolderItem) {
- FolderItem si = (FolderItem) val;
- if (!TagTreeRoot.FOLDER_ROOT.equals(si.getName())) {
- String itemName = "folder" + si.getName();
- setIcon(View.getIcon(itemName.toLowerCase() + "16"));
- }
- } else {
- setIcon(icons.get(type));
- }
-
- /* boolean isModified = val instanceof Tag && ((Tag) val).isModified();
- if(val instanceof ScriptPack){
- ScriptPack sp=(ScriptPack)val;
- if(sp.abc.script_info.get(sp.scriptIndex).isModified()){
- isModified = true;
- }
- }*/
- boolean isModified = val.isModified();
- if (isModified) {
- if (boldFont == null) {
- Font font = getFont();
- boldFont = font.deriveFont(Font.BOLD);
- }
- } else {
- if (plainFont == null) {
- Font font = getFont();
- plainFont = font.deriveFont(Font.PLAIN);
- }
- }
- setFont(isModified ? boldFont : plainFont);
-
- return this;
- }
- }
-
- public TagTree(TagTreeModel treeModel, MainPanel mainPanel) {
- super(treeModel);
- this.mainPanel = mainPanel;
- setCellRenderer(new TagTreeCellRenderer());
- setRootVisible(false);
- setBackground(Color.white);
- setRowHeight(Math.max(getFont().getSize() + 5, 16));
- setLargeModel(true);
- setUI(new BasicTreeUI() {
- {
- setHashColor(Color.gray);
- }
- });
- }
-
- public void createContextMenu() {
- contextPopupMenu = new TagTreeContextMenu(this, mainPanel);
- }
-
- public static TreeNodeType getTreeNodeType(TreeItem t) {
-
- if (t instanceof TagScript) {
- t = ((TagScript) t).getTag();
- }
-
- if (t instanceof HeaderItem) {
- return TreeNodeType.HEADER;
- }
-
- if ((t instanceof DefineFontTag)
- || (t instanceof DefineFont2Tag)
- || (t instanceof DefineFont3Tag)
- || (t instanceof DefineFont4Tag)
- || (t instanceof DefineCompactedFont)) {
- return TreeNodeType.FONT;
- }
-
- // DefineText, DefineText2, DefineEditTextTag
- if (t instanceof TextTag) {
- return TreeNodeType.TEXT;
- }
-
- // DefineBits, DefineBitsJPEG2, DefineBitsJPEG3, DefineBitsJPEG4, DefineBitsLossless, DefineBitsLossless2
- if (t instanceof ImageTag) {
- return TreeNodeType.IMAGE;
- }
-
- // DefineShape, DefineShape2, DefineShape3, DefineShape4
- if (t instanceof ShapeTag) {
- return TreeNodeType.SHAPE;
- }
-
- // DefineMorphShape, DefineMorphShape2
- if (t instanceof MorphShapeTag) {
- return TreeNodeType.MORPH_SHAPE;
- }
-
- if (t instanceof DefineSpriteTag) {
- return TreeNodeType.SPRITE;
- }
-
- // DefineButton, DefineButton2
- if (t instanceof ButtonTag) {
- return TreeNodeType.BUTTON;
- }
-
- if (t instanceof DefineVideoStreamTag) {
- return TreeNodeType.MOVIE;
- }
-
- if ((t instanceof DefineSoundTag) || (t instanceof SoundStreamHeadTag) || (t instanceof SoundStreamHead2Tag)) {
- return TreeNodeType.SOUND;
- }
-
- if (t instanceof DefineBinaryDataTag) {
- return TreeNodeType.BINARY_DATA;
- }
-
- if (t instanceof ASMSource) {
- return TreeNodeType.AS;
- }
-
- if (t instanceof ScriptPack) {
- return TreeNodeType.AS;
- }
-
- if (t instanceof AS2Package) {
- return TreeNodeType.PACKAGE;
- }
-
- if (t instanceof AS3Package) {
- return TreeNodeType.PACKAGE;
- }
-
- if ((t instanceof Frame)
- || (t instanceof FrameScript)) {
- return TreeNodeType.FRAME;
- }
-
- if (t instanceof ShowFrameTag) {
- return TreeNodeType.SHOW_FRAME;
- }
-
- if (t instanceof SWF) {
- return TreeNodeType.FLASH;
- }
-
- if (t instanceof SWFList) {
- SWFList slist = (SWFList) t;
- if (slist.isBundle()) {
- if (slist.bundle.getClass() == ZippedSWFBundle.class) {
- return TreeNodeType.BUNDLE_ZIP;
- } else if (slist.bundle.getClass() == SWC.class) {
- return TreeNodeType.BUNDLE_SWC;
- } else {
- return TreeNodeType.BUNDLE_BINARY;
- }
- }
- }
-
- if (t instanceof SetBackgroundColorTag) {
- return TreeNodeType.SET_BACKGROUNDCOLOR;
- }
- if (t instanceof FileAttributesTag) {
- return TreeNodeType.FILE_ATTRIBUTES;
- }
- if (t instanceof MetadataTag) {
- return TreeNodeType.METADATA;
- }
- if (t instanceof PlaceObjectTypeTag) {
- return TreeNodeType.PLACE_OBJECT;
- }
- if (t instanceof RemoveTag) {
- return TreeNodeType.REMOVE_OBJECT;
- }
- if (t instanceof Tag) {
- return TreeNodeType.OTHER_TAG;
- }
-
- if (t instanceof FolderItem) {
- return TreeNodeType.FOLDER;
- }
-
- return TreeNodeType.FOLDER;
- }
-
- public List getSwfFolderItemNestedTagIds(String folderName, boolean gfx) {
- List ret = null;
- switch (folderName) {
- case TagTreeModel.FOLDER_SHAPES:
- ret = Arrays.asList(DefineShapeTag.ID, DefineShape2Tag.ID, DefineShape3Tag.ID, DefineShape4Tag.ID);
- break;
- case TagTreeModel.FOLDER_MORPHSHAPES:
- ret = Arrays.asList(DefineMorphShapeTag.ID, DefineMorphShape2Tag.ID);
- break;
- case TagTreeModel.FOLDER_SPRITES:
- ret = Arrays.asList(DefineSpriteTag.ID);
- break;
- case TagTreeModel.FOLDER_TEXTS:
- ret = Arrays.asList(DefineTextTag.ID, DefineText2Tag.ID, DefineEditTextTag.ID);
- break;
- case TagTreeModel.FOLDER_IMAGES:
- ret = Arrays.asList(DefineBitsTag.ID, DefineBitsJPEG2Tag.ID, DefineBitsJPEG3Tag.ID, DefineBitsJPEG4Tag.ID, DefineBitsLosslessTag.ID, DefineBitsLossless2Tag.ID);
- break;
- case TagTreeModel.FOLDER_MOVIES:
- ret = Arrays.asList(DefineVideoStreamTag.ID);
- break;
- case TagTreeModel.FOLDER_SOUNDS:
- ret = Arrays.asList(DefineSoundTag.ID);
- break;
- case TagTreeModel.FOLDER_BUTTONS:
- ret = Arrays.asList(DefineButtonTag.ID, DefineButton2Tag.ID);
- break;
- case TagTreeModel.FOLDER_FONTS:
- if (gfx) {
- ret = Arrays.asList(DefineFontTag.ID, DefineFont2Tag.ID, DefineFont3Tag.ID, DefineFont4Tag.ID, DefineCompactedFont.ID);
- } else {
- ret = Arrays.asList(DefineFontTag.ID, DefineFont2Tag.ID, DefineFont3Tag.ID, DefineFont4Tag.ID);
- }
- break;
- case TagTreeModel.FOLDER_BINARY_DATA:
- ret = Arrays.asList(DefineBinaryDataTag.ID);
- break;
- case TagTreeModel.FOLDER_FRAMES:
- ret = new ArrayList<>();
- break;
- case TagTreeModel.FOLDER_OTHERS:
- ret = Arrays.asList(
- //CSMTextSettingsTag.ID,
- DebugIDTag.ID,
- //DefineButtonCxformTag.ID, DefineButtonSoundTag.ID,
- //DefineFontAlignZonesTag.ID, DefineFontInfoTag.ID, DefineFontInfo2Tag.ID, DefineFontNameTag.ID,
- /*DefineScalingGridTag.ID,*/ DefineSceneAndFrameLabelDataTag.ID,
- DoABCDefineTag.ID, DoABCTag.ID, DoActionTag.ID, DoInitActionTag.ID,
- EnableDebuggerTag.ID, EnableDebugger2Tag.ID, EnableTelemetryTag.ID,
- ExportAssetsTag.ID, FileAttributesTag.ID, ImportAssetsTag.ID, ImportAssets2Tag.ID,
- JPEGTablesTag.ID, MetadataTag.ID, ProductInfoTag.ID, ProtectTag.ID, ScriptLimitsTag.ID,
- SetBackgroundColorTag.ID, SetTabIndexTag.ID, SymbolClassTag.ID);
- break;
- }
-
- return ret;
- }
-
- public List getNestedTagIds(Tag obj) {
- if (obj instanceof DefineSpriteTag) {
- return Arrays.asList(PlaceObjectTag.ID, PlaceObject2Tag.ID, PlaceObject3Tag.ID, PlaceObject4Tag.ID,
- RemoveObjectTag.ID, RemoveObject2Tag.ID, ShowFrameTag.ID, FrameLabelTag.ID,
- StartSoundTag.ID, StartSound2Tag.ID, VideoFrameTag.ID,
- SoundStreamBlockTag.ID, SoundStreamHeadTag.ID, SoundStreamHead2Tag.ID,
- DefineScalingGridTag.ID);
- }
- if (obj instanceof FontTag) {
- return Arrays.asList(DefineFontNameTag.ID, DefineFontAlignZonesTag.ID, DefineFontInfoTag.ID, DefineFontInfo2Tag.ID);
- }
- if (obj instanceof TextTag) {
- return Arrays.asList(CSMTextSettingsTag.ID);
- }
- if (obj instanceof DefineButtonTag) {
- return Arrays.asList(DefineButtonCxformTag.ID, DefineButtonSoundTag.ID, DefineScalingGridTag.ID);
- }
- if (obj instanceof DefineButton2Tag) {
- return Arrays.asList(DefineButtonSoundTag.ID, DefineScalingGridTag.ID);
- }
- return null;
- }
-
- public boolean hasExportableNodes() {
- return !getSelection(mainPanel.getCurrentSwf()).isEmpty();
- }
-
- public void getAllSubs(JTree tree, TreeItem o, List ret) {
- TagTreeModel tm = (TagTreeModel) tree.getModel();
- for (TreeItem c : tm.getAllChildren(o)) {
- ret.add(c);
- getAllSubs(tree, c, ret);
- }
- }
-
- public List getAllSelected(TagTree tree) {
- TreeSelectionModel tsm = tree.getSelectionModel();
- TreePath[] tps = tsm.getSelectionPaths();
- List ret = new ArrayList<>();
- if (tps == null) {
- return ret;
- }
-
- for (TreePath tp : tps) {
- TreeItem treeNode = (TreeItem) tp.getLastPathComponent();
- ret.add(treeNode);
- getAllSubs(tree, treeNode, ret);
- }
- return ret;
- }
-
- public List getSelected(JTree tree) {
- if (!mainPanel.folderPreviewPanel.selectedItems.isEmpty()) {
- return new ArrayList<>(mainPanel.folderPreviewPanel.selectedItems.values());
- }
- TreeSelectionModel tsm = tree.getSelectionModel();
- TreePath[] tps = tsm.getSelectionPaths();
- List ret = new ArrayList<>();
- if (tps == null) {
- return ret;
- }
-
- for (TreePath tp : tps) {
- TreeItem treeNode = (TreeItem) tp.getLastPathComponent();
- ret.add(treeNode);
- }
- return ret;
- }
-
- public List getSelection(SWF swf) {
- List sel;
- if (mainPanel.folderPreviewPanel.selectedItems.isEmpty()) {
- sel = getAllSelected(this);
- } else {
- sel = new ArrayList<>(mainPanel.folderPreviewPanel.selectedItems.values());
- }
- return getSelection(swf, sel);
- }
-
- public List getSelection(SWF swf, List sel) {
- List ret = new ArrayList<>();
- for (TreeItem d : sel) {
- if (d instanceof SWFList) {
- continue;
- }
- if (d.getSwf() != swf) {
- continue;
- }
-
- if (d instanceof TagScript) {
- Tag tag = ((TagScript) d).getTag();
- if (tag instanceof DoActionTag || tag instanceof DoInitActionTag) {
- d = tag;
- }
- }
-
- if (d instanceof Tag || d instanceof ASMSource) {
- TreeNodeType nodeType = TagTree.getTreeNodeType(d);
- if (nodeType == TreeNodeType.IMAGE) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.SHAPE) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.MORPH_SHAPE) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.BUTTON) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.AS) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.MOVIE) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.SOUND) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.BINARY_DATA) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.TEXT) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.FONT) {
- ret.add(d);
- }
- if (nodeType == TreeNodeType.OTHER_TAG) {
- if (d instanceof SymbolClassTypeTag) {
- ret.add(d);
- }
- }
- }
-
- if (d instanceof Frame) {
- ret.add(d);
- }
- if (d instanceof ScriptPack) {
- ret.add(d);
- }
- }
- return ret;
- }
-
- public List getTagsWithType(List list, TreeNodeType type) {
- List ret = new ArrayList<>();
- for (AS3ClassTreeItem item : list) {
- TreeNodeType ttype = getTreeNodeType(item);
- if (type == ttype) {
- ret.add(item);
- }
- }
- return ret;
- }
-
- public TreeItem getCurrentTreeItem() {
- if (!mainPanel.folderPreviewPanel.selectedItems.isEmpty()) {
- return mainPanel.folderPreviewPanel.selectedItems.entrySet().iterator().next().getValue();
- }
-
- TreeItem item = (TreeItem) getLastSelectedPathComponent();
- return item;
- }
-
- public void updateSwfs(SWF[] swfs) {
- TagTreeModel ttm = getModel();
- if (ttm != null) {
- List> expandedNodes = View.getExpandedNodes(this);
- ttm.updateSwf(null); // todo: honfika: update only the changed swfs, but there was an exception when i tried it
- View.expandTreeNodes(this, expandedNodes);
- }
- }
-
- @Override
- public TagTreeModel getModel() {
- return (TagTreeModel) super.getModel();
- }
-
- public void expandRoot() {
- TagTreeModel ttm = getModel();
- TreeItem root = ttm.getRoot();
- expandPath(new TreePath(new Object[]{root}));
- }
-
- public void expandFirstLevelNodes() {
- TagTreeModel ttm = getModel();
- TreeItem root = ttm.getRoot();
- int childCount = ttm.getChildCount(root);
- for (int i = 0; i < childCount; i++) {
- expandPath(new TreePath(new Object[]{root, ttm.getChild(root, i)}));
- }
- }
-
- public String getSelectionPathString() {
- StringBuilder sb = new StringBuilder();
- TreePath path = getSelectionPath();
- if (path != null) {
- boolean first = true;
- for (Object p : path.getPath()) {
- if (!first) {
- sb.append("|");
- }
-
- first = false;
- sb.append(p.toString());
- }
- }
-
- return sb.toString();
- }
-
- public void setSelectionPathString(String pathStr) {
- if (pathStr != null && pathStr.length() > 0) {
- String[] path = pathStr.split("\\|");
-
- TreePath tp = View.getTreePathByPathStrings(this, Arrays.asList(path));
- if (tp != null) {
- // the current view is the Resources view, otherwise tp is null
- mainPanel.setTagTreeSelectedNode((TreeItem) tp.getLastPathComponent());
- }
- }
- }
-}
+/*
+ * Copyright (C) 2010-2015 JPEXS
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.jpexs.decompiler.flash.gui.tagtree;
+
+import com.jpexs.decompiler.flash.SWC;
+import com.jpexs.decompiler.flash.SWF;
+import com.jpexs.decompiler.flash.ZippedSWFBundle;
+import com.jpexs.decompiler.flash.abc.ScriptPack;
+import com.jpexs.decompiler.flash.gui.MainPanel;
+import com.jpexs.decompiler.flash.gui.TreeNodeType;
+import com.jpexs.decompiler.flash.gui.View;
+import com.jpexs.decompiler.flash.tags.CSMTextSettingsTag;
+import com.jpexs.decompiler.flash.tags.DebugIDTag;
+import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag;
+import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag;
+import com.jpexs.decompiler.flash.tags.DefineBitsJPEG3Tag;
+import com.jpexs.decompiler.flash.tags.DefineBitsJPEG4Tag;
+import com.jpexs.decompiler.flash.tags.DefineBitsLossless2Tag;
+import com.jpexs.decompiler.flash.tags.DefineBitsLosslessTag;
+import com.jpexs.decompiler.flash.tags.DefineBitsTag;
+import com.jpexs.decompiler.flash.tags.DefineButton2Tag;
+import com.jpexs.decompiler.flash.tags.DefineButtonCxformTag;
+import com.jpexs.decompiler.flash.tags.DefineButtonSoundTag;
+import com.jpexs.decompiler.flash.tags.DefineButtonTag;
+import com.jpexs.decompiler.flash.tags.DefineEditTextTag;
+import com.jpexs.decompiler.flash.tags.DefineFont2Tag;
+import com.jpexs.decompiler.flash.tags.DefineFont3Tag;
+import com.jpexs.decompiler.flash.tags.DefineFont4Tag;
+import com.jpexs.decompiler.flash.tags.DefineFontAlignZonesTag;
+import com.jpexs.decompiler.flash.tags.DefineFontInfo2Tag;
+import com.jpexs.decompiler.flash.tags.DefineFontInfoTag;
+import com.jpexs.decompiler.flash.tags.DefineFontNameTag;
+import com.jpexs.decompiler.flash.tags.DefineFontTag;
+import com.jpexs.decompiler.flash.tags.DefineMorphShape2Tag;
+import com.jpexs.decompiler.flash.tags.DefineMorphShapeTag;
+import com.jpexs.decompiler.flash.tags.DefineScalingGridTag;
+import com.jpexs.decompiler.flash.tags.DefineSceneAndFrameLabelDataTag;
+import com.jpexs.decompiler.flash.tags.DefineShape2Tag;
+import com.jpexs.decompiler.flash.tags.DefineShape3Tag;
+import com.jpexs.decompiler.flash.tags.DefineShape4Tag;
+import com.jpexs.decompiler.flash.tags.DefineShapeTag;
+import com.jpexs.decompiler.flash.tags.DefineSoundTag;
+import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
+import com.jpexs.decompiler.flash.tags.DefineText2Tag;
+import com.jpexs.decompiler.flash.tags.DefineTextTag;
+import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag;
+import com.jpexs.decompiler.flash.tags.DoABC2Tag;
+import com.jpexs.decompiler.flash.tags.DoABCTag;
+import com.jpexs.decompiler.flash.tags.DoActionTag;
+import com.jpexs.decompiler.flash.tags.DoInitActionTag;
+import com.jpexs.decompiler.flash.tags.EnableDebugger2Tag;
+import com.jpexs.decompiler.flash.tags.EnableDebuggerTag;
+import com.jpexs.decompiler.flash.tags.EnableTelemetryTag;
+import com.jpexs.decompiler.flash.tags.ExportAssetsTag;
+import com.jpexs.decompiler.flash.tags.FileAttributesTag;
+import com.jpexs.decompiler.flash.tags.FrameLabelTag;
+import com.jpexs.decompiler.flash.tags.ImportAssets2Tag;
+import com.jpexs.decompiler.flash.tags.ImportAssetsTag;
+import com.jpexs.decompiler.flash.tags.JPEGTablesTag;
+import com.jpexs.decompiler.flash.tags.MetadataTag;
+import com.jpexs.decompiler.flash.tags.PlaceObject2Tag;
+import com.jpexs.decompiler.flash.tags.PlaceObject3Tag;
+import com.jpexs.decompiler.flash.tags.PlaceObject4Tag;
+import com.jpexs.decompiler.flash.tags.PlaceObjectTag;
+import com.jpexs.decompiler.flash.tags.ProductInfoTag;
+import com.jpexs.decompiler.flash.tags.ProtectTag;
+import com.jpexs.decompiler.flash.tags.RemoveObject2Tag;
+import com.jpexs.decompiler.flash.tags.RemoveObjectTag;
+import com.jpexs.decompiler.flash.tags.ScriptLimitsTag;
+import com.jpexs.decompiler.flash.tags.SetBackgroundColorTag;
+import com.jpexs.decompiler.flash.tags.SetTabIndexTag;
+import com.jpexs.decompiler.flash.tags.ShowFrameTag;
+import com.jpexs.decompiler.flash.tags.SoundStreamBlockTag;
+import com.jpexs.decompiler.flash.tags.SoundStreamHead2Tag;
+import com.jpexs.decompiler.flash.tags.SoundStreamHeadTag;
+import com.jpexs.decompiler.flash.tags.StartSound2Tag;
+import com.jpexs.decompiler.flash.tags.StartSoundTag;
+import com.jpexs.decompiler.flash.tags.SymbolClassTag;
+import com.jpexs.decompiler.flash.tags.Tag;
+import com.jpexs.decompiler.flash.tags.VideoFrameTag;
+import com.jpexs.decompiler.flash.tags.base.ASMSource;
+import com.jpexs.decompiler.flash.tags.base.ButtonTag;
+import com.jpexs.decompiler.flash.tags.base.FontTag;
+import com.jpexs.decompiler.flash.tags.base.ImageTag;
+import com.jpexs.decompiler.flash.tags.base.MorphShapeTag;
+import com.jpexs.decompiler.flash.tags.base.PlaceObjectTypeTag;
+import com.jpexs.decompiler.flash.tags.base.RemoveTag;
+import com.jpexs.decompiler.flash.tags.base.ShapeTag;
+import com.jpexs.decompiler.flash.tags.base.SymbolClassTypeTag;
+import com.jpexs.decompiler.flash.tags.base.TextTag;
+import com.jpexs.decompiler.flash.tags.gfx.DefineCompactedFont;
+import com.jpexs.decompiler.flash.timeline.AS2Package;
+import com.jpexs.decompiler.flash.timeline.AS3Package;
+import com.jpexs.decompiler.flash.timeline.Frame;
+import com.jpexs.decompiler.flash.timeline.FrameScript;
+import com.jpexs.decompiler.flash.timeline.TagScript;
+import com.jpexs.decompiler.flash.treeitems.AS3ClassTreeItem;
+import com.jpexs.decompiler.flash.treeitems.FolderItem;
+import com.jpexs.decompiler.flash.treeitems.HeaderItem;
+import com.jpexs.decompiler.flash.treeitems.SWFList;
+import com.jpexs.decompiler.flash.treeitems.TreeItem;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Font;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.swing.Icon;
+import javax.swing.JTree;
+import javax.swing.plaf.basic.BasicLabelUI;
+import javax.swing.plaf.basic.BasicTreeUI;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+/**
+ *
+ * @author JPEXS
+ */
+public class TagTree extends JTree {
+
+ public TagTreeContextMenu contextPopupMenu;
+
+ private final MainPanel mainPanel;
+
+ public class TagTreeCellRenderer extends DefaultTreeCellRenderer {
+
+ private Font plainFont;
+
+ private Font boldFont;
+
+ private final Map icons;
+
+ public TagTreeCellRenderer() {
+ setUI(new BasicLabelUI());
+ setOpaque(false);
+ //setBackground(Color.green);
+ setBackgroundNonSelectionColor(Color.white);
+ //setBackgroundSelectionColor(Color.ORANGE);
+
+ icons = new HashMap<>();
+ for (TreeNodeType treeNodeType : TreeNodeType.values()) {
+ if (treeNodeType != TreeNodeType.UNKNOWN && treeNodeType != TreeNodeType.SHOW_FRAME) {
+ String tagTypeStr = treeNodeType.toString().toLowerCase().replace("_", "");
+ icons.put(treeNodeType, View.getIcon(tagTypeStr + "16"));
+ }
+ }
+ }
+
+ @Override
+ public Component getTreeCellRendererComponent(
+ JTree tree,
+ Object value,
+ boolean sel,
+ boolean expanded,
+ boolean leaf,
+ int row,
+ boolean hasFocus) {
+
+ TreeItem val = (TreeItem) value;
+ if (!(val instanceof SWFList) && val.getSwf() == null) {
+ // SWF was closed
+ value = null;
+ }
+
+ super.getTreeCellRendererComponent(
+ tree, value, sel,
+ expanded, leaf, row,
+ hasFocus);
+ TreeNodeType type = getTreeNodeType(val);
+
+ if (type == TreeNodeType.FOLDER && expanded) {
+ type = TreeNodeType.FOLDER_OPEN;
+ }
+
+ if ((type == TreeNodeType.FOLDER || type == TreeNodeType.FOLDER_OPEN) && val instanceof FolderItem) {
+ FolderItem si = (FolderItem) val;
+ if (!TagTreeRoot.FOLDER_ROOT.equals(si.getName())) {
+ String itemName = "folder" + si.getName();
+ setIcon(View.getIcon(itemName.toLowerCase() + "16"));
+ }
+ } else {
+ setIcon(icons.get(type));
+ }
+
+ /* boolean isModified = val instanceof Tag && ((Tag) val).isModified();
+ if(val instanceof ScriptPack){
+ ScriptPack sp=(ScriptPack)val;
+ if(sp.abc.script_info.get(sp.scriptIndex).isModified()){
+ isModified = true;
+ }
+ }*/
+ boolean isModified = val.isModified();
+ if (isModified) {
+ if (boldFont == null) {
+ Font font = getFont();
+ boldFont = font.deriveFont(Font.BOLD);
+ }
+ } else {
+ if (plainFont == null) {
+ Font font = getFont();
+ plainFont = font.deriveFont(Font.PLAIN);
+ }
+ }
+ setFont(isModified ? boldFont : plainFont);
+
+ return this;
+ }
+ }
+
+ public TagTree(TagTreeModel treeModel, MainPanel mainPanel) {
+ super(treeModel);
+ this.mainPanel = mainPanel;
+ setCellRenderer(new TagTreeCellRenderer());
+ setRootVisible(false);
+ setBackground(Color.white);
+ setRowHeight(Math.max(getFont().getSize() + 5, 16));
+ setLargeModel(true);
+ setUI(new BasicTreeUI() {
+ {
+ setHashColor(Color.gray);
+ }
+ });
+ }
+
+ public void createContextMenu() {
+ contextPopupMenu = new TagTreeContextMenu(this, mainPanel);
+ }
+
+ public static TreeNodeType getTreeNodeType(TreeItem t) {
+
+ if (t instanceof TagScript) {
+ t = ((TagScript) t).getTag();
+ }
+
+ if (t instanceof HeaderItem) {
+ return TreeNodeType.HEADER;
+ }
+
+ if ((t instanceof DefineFontTag)
+ || (t instanceof DefineFont2Tag)
+ || (t instanceof DefineFont3Tag)
+ || (t instanceof DefineFont4Tag)
+ || (t instanceof DefineCompactedFont)) {
+ return TreeNodeType.FONT;
+ }
+
+ // DefineText, DefineText2, DefineEditTextTag
+ if (t instanceof TextTag) {
+ return TreeNodeType.TEXT;
+ }
+
+ // DefineBits, DefineBitsJPEG2, DefineBitsJPEG3, DefineBitsJPEG4, DefineBitsLossless, DefineBitsLossless2
+ if (t instanceof ImageTag) {
+ return TreeNodeType.IMAGE;
+ }
+
+ // DefineShape, DefineShape2, DefineShape3, DefineShape4
+ if (t instanceof ShapeTag) {
+ return TreeNodeType.SHAPE;
+ }
+
+ // DefineMorphShape, DefineMorphShape2
+ if (t instanceof MorphShapeTag) {
+ return TreeNodeType.MORPH_SHAPE;
+ }
+
+ if (t instanceof DefineSpriteTag) {
+ return TreeNodeType.SPRITE;
+ }
+
+ // DefineButton, DefineButton2
+ if (t instanceof ButtonTag) {
+ return TreeNodeType.BUTTON;
+ }
+
+ if (t instanceof DefineVideoStreamTag) {
+ return TreeNodeType.MOVIE;
+ }
+
+ if ((t instanceof DefineSoundTag) || (t instanceof SoundStreamHeadTag) || (t instanceof SoundStreamHead2Tag)) {
+ return TreeNodeType.SOUND;
+ }
+
+ if (t instanceof DefineBinaryDataTag) {
+ return TreeNodeType.BINARY_DATA;
+ }
+
+ if (t instanceof ASMSource) {
+ return TreeNodeType.AS;
+ }
+
+ if (t instanceof ScriptPack) {
+ return TreeNodeType.AS;
+ }
+
+ if (t instanceof AS2Package) {
+ return TreeNodeType.PACKAGE;
+ }
+
+ if (t instanceof AS3Package) {
+ return TreeNodeType.PACKAGE;
+ }
+
+ if ((t instanceof Frame)
+ || (t instanceof FrameScript)) {
+ return TreeNodeType.FRAME;
+ }
+
+ if (t instanceof ShowFrameTag) {
+ return TreeNodeType.SHOW_FRAME;
+ }
+
+ if (t instanceof SWF) {
+ return TreeNodeType.FLASH;
+ }
+
+ if (t instanceof SWFList) {
+ SWFList slist = (SWFList) t;
+ if (slist.isBundle()) {
+ if (slist.bundle.getClass() == ZippedSWFBundle.class) {
+ return TreeNodeType.BUNDLE_ZIP;
+ } else if (slist.bundle.getClass() == SWC.class) {
+ return TreeNodeType.BUNDLE_SWC;
+ } else {
+ return TreeNodeType.BUNDLE_BINARY;
+ }
+ }
+ }
+
+ if (t instanceof SetBackgroundColorTag) {
+ return TreeNodeType.SET_BACKGROUNDCOLOR;
+ }
+ if (t instanceof FileAttributesTag) {
+ return TreeNodeType.FILE_ATTRIBUTES;
+ }
+ if (t instanceof MetadataTag) {
+ return TreeNodeType.METADATA;
+ }
+ if (t instanceof PlaceObjectTypeTag) {
+ return TreeNodeType.PLACE_OBJECT;
+ }
+ if (t instanceof RemoveTag) {
+ return TreeNodeType.REMOVE_OBJECT;
+ }
+ if (t instanceof Tag) {
+ return TreeNodeType.OTHER_TAG;
+ }
+
+ if (t instanceof FolderItem) {
+ return TreeNodeType.FOLDER;
+ }
+
+ return TreeNodeType.FOLDER;
+ }
+
+ public List getSwfFolderItemNestedTagIds(String folderName, boolean gfx) {
+ List ret = null;
+ switch (folderName) {
+ case TagTreeModel.FOLDER_SHAPES:
+ ret = Arrays.asList(DefineShapeTag.ID, DefineShape2Tag.ID, DefineShape3Tag.ID, DefineShape4Tag.ID);
+ break;
+ case TagTreeModel.FOLDER_MORPHSHAPES:
+ ret = Arrays.asList(DefineMorphShapeTag.ID, DefineMorphShape2Tag.ID);
+ break;
+ case TagTreeModel.FOLDER_SPRITES:
+ ret = Arrays.asList(DefineSpriteTag.ID);
+ break;
+ case TagTreeModel.FOLDER_TEXTS:
+ ret = Arrays.asList(DefineTextTag.ID, DefineText2Tag.ID, DefineEditTextTag.ID);
+ break;
+ case TagTreeModel.FOLDER_IMAGES:
+ ret = Arrays.asList(DefineBitsTag.ID, DefineBitsJPEG2Tag.ID, DefineBitsJPEG3Tag.ID, DefineBitsJPEG4Tag.ID, DefineBitsLosslessTag.ID, DefineBitsLossless2Tag.ID);
+ break;
+ case TagTreeModel.FOLDER_MOVIES:
+ ret = Arrays.asList(DefineVideoStreamTag.ID);
+ break;
+ case TagTreeModel.FOLDER_SOUNDS:
+ ret = Arrays.asList(DefineSoundTag.ID);
+ break;
+ case TagTreeModel.FOLDER_BUTTONS:
+ ret = Arrays.asList(DefineButtonTag.ID, DefineButton2Tag.ID);
+ break;
+ case TagTreeModel.FOLDER_FONTS:
+ if (gfx) {
+ ret = Arrays.asList(DefineFontTag.ID, DefineFont2Tag.ID, DefineFont3Tag.ID, DefineFont4Tag.ID, DefineCompactedFont.ID);
+ } else {
+ ret = Arrays.asList(DefineFontTag.ID, DefineFont2Tag.ID, DefineFont3Tag.ID, DefineFont4Tag.ID);
+ }
+ break;
+ case TagTreeModel.FOLDER_BINARY_DATA:
+ ret = Arrays.asList(DefineBinaryDataTag.ID);
+ break;
+ case TagTreeModel.FOLDER_FRAMES:
+ ret = new ArrayList<>();
+ break;
+ case TagTreeModel.FOLDER_OTHERS:
+ ret = Arrays.asList(
+ //CSMTextSettingsTag.ID,
+ DebugIDTag.ID,
+ //DefineButtonCxformTag.ID, DefineButtonSoundTag.ID,
+ //DefineFontAlignZonesTag.ID, DefineFontInfoTag.ID, DefineFontInfo2Tag.ID, DefineFontNameTag.ID,
+ /*DefineScalingGridTag.ID,*/ DefineSceneAndFrameLabelDataTag.ID,
+ DoABC2Tag.ID, DoABCTag.ID, DoActionTag.ID, DoInitActionTag.ID,
+ EnableDebuggerTag.ID, EnableDebugger2Tag.ID, EnableTelemetryTag.ID,
+ ExportAssetsTag.ID, FileAttributesTag.ID, ImportAssetsTag.ID, ImportAssets2Tag.ID,
+ JPEGTablesTag.ID, MetadataTag.ID, ProductInfoTag.ID, ProtectTag.ID, ScriptLimitsTag.ID,
+ SetBackgroundColorTag.ID, SetTabIndexTag.ID, SymbolClassTag.ID);
+ break;
+ }
+
+ return ret;
+ }
+
+ public List getNestedTagIds(Tag obj) {
+ if (obj instanceof DefineSpriteTag) {
+ return Arrays.asList(PlaceObjectTag.ID, PlaceObject2Tag.ID, PlaceObject3Tag.ID, PlaceObject4Tag.ID,
+ RemoveObjectTag.ID, RemoveObject2Tag.ID, ShowFrameTag.ID, FrameLabelTag.ID,
+ StartSoundTag.ID, StartSound2Tag.ID, VideoFrameTag.ID,
+ SoundStreamBlockTag.ID, SoundStreamHeadTag.ID, SoundStreamHead2Tag.ID,
+ DefineScalingGridTag.ID);
+ }
+ if (obj instanceof FontTag) {
+ return Arrays.asList(DefineFontNameTag.ID, DefineFontAlignZonesTag.ID, DefineFontInfoTag.ID, DefineFontInfo2Tag.ID);
+ }
+ if (obj instanceof TextTag) {
+ return Arrays.asList(CSMTextSettingsTag.ID);
+ }
+ if (obj instanceof DefineButtonTag) {
+ return Arrays.asList(DefineButtonCxformTag.ID, DefineButtonSoundTag.ID, DefineScalingGridTag.ID);
+ }
+ if (obj instanceof DefineButton2Tag) {
+ return Arrays.asList(DefineButtonSoundTag.ID, DefineScalingGridTag.ID);
+ }
+ return null;
+ }
+
+ public boolean hasExportableNodes() {
+ return !getSelection(mainPanel.getCurrentSwf()).isEmpty();
+ }
+
+ public void getAllSubs(JTree tree, TreeItem o, List ret) {
+ TagTreeModel tm = (TagTreeModel) tree.getModel();
+ for (TreeItem c : tm.getAllChildren(o)) {
+ ret.add(c);
+ getAllSubs(tree, c, ret);
+ }
+ }
+
+ public List getAllSelected(TagTree tree) {
+ TreeSelectionModel tsm = tree.getSelectionModel();
+ TreePath[] tps = tsm.getSelectionPaths();
+ List ret = new ArrayList<>();
+ if (tps == null) {
+ return ret;
+ }
+
+ for (TreePath tp : tps) {
+ TreeItem treeNode = (TreeItem) tp.getLastPathComponent();
+ ret.add(treeNode);
+ getAllSubs(tree, treeNode, ret);
+ }
+ return ret;
+ }
+
+ public List getSelected(JTree tree) {
+ if (!mainPanel.folderPreviewPanel.selectedItems.isEmpty()) {
+ return new ArrayList<>(mainPanel.folderPreviewPanel.selectedItems.values());
+ }
+ TreeSelectionModel tsm = tree.getSelectionModel();
+ TreePath[] tps = tsm.getSelectionPaths();
+ List ret = new ArrayList<>();
+ if (tps == null) {
+ return ret;
+ }
+
+ for (TreePath tp : tps) {
+ TreeItem treeNode = (TreeItem) tp.getLastPathComponent();
+ ret.add(treeNode);
+ }
+ return ret;
+ }
+
+ public List getSelection(SWF swf) {
+ List sel;
+ if (mainPanel.folderPreviewPanel.selectedItems.isEmpty()) {
+ sel = getAllSelected(this);
+ } else {
+ sel = new ArrayList<>(mainPanel.folderPreviewPanel.selectedItems.values());
+ }
+ return getSelection(swf, sel);
+ }
+
+ public List getSelection(SWF swf, List sel) {
+ List ret = new ArrayList<>();
+ for (TreeItem d : sel) {
+ if (d instanceof SWFList) {
+ continue;
+ }
+ if (d.getSwf() != swf) {
+ continue;
+ }
+
+ if (d instanceof TagScript) {
+ Tag tag = ((TagScript) d).getTag();
+ if (tag instanceof DoActionTag || tag instanceof DoInitActionTag) {
+ d = tag;
+ }
+ }
+
+ if (d instanceof Tag || d instanceof ASMSource) {
+ TreeNodeType nodeType = TagTree.getTreeNodeType(d);
+ if (nodeType == TreeNodeType.IMAGE) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.SHAPE) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.MORPH_SHAPE) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.BUTTON) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.AS) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.MOVIE) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.SOUND) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.BINARY_DATA) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.TEXT) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.FONT) {
+ ret.add(d);
+ }
+ if (nodeType == TreeNodeType.OTHER_TAG) {
+ if (d instanceof SymbolClassTypeTag) {
+ ret.add(d);
+ }
+ }
+ }
+
+ if (d instanceof Frame) {
+ ret.add(d);
+ }
+ if (d instanceof ScriptPack) {
+ ret.add(d);
+ }
+ }
+ return ret;
+ }
+
+ public List getTagsWithType(List list, TreeNodeType type) {
+ List ret = new ArrayList<>();
+ for (AS3ClassTreeItem item : list) {
+ TreeNodeType ttype = getTreeNodeType(item);
+ if (type == ttype) {
+ ret.add(item);
+ }
+ }
+ return ret;
+ }
+
+ public TreeItem getCurrentTreeItem() {
+ if (!mainPanel.folderPreviewPanel.selectedItems.isEmpty()) {
+ return mainPanel.folderPreviewPanel.selectedItems.entrySet().iterator().next().getValue();
+ }
+
+ TreeItem item = (TreeItem) getLastSelectedPathComponent();
+ return item;
+ }
+
+ public void updateSwfs(SWF[] swfs) {
+ TagTreeModel ttm = getModel();
+ if (ttm != null) {
+ List> expandedNodes = View.getExpandedNodes(this);
+ ttm.updateSwf(null); // todo: honfika: update only the changed swfs, but there was an exception when i tried it
+ View.expandTreeNodes(this, expandedNodes);
+ }
+ }
+
+ @Override
+ public TagTreeModel getModel() {
+ return (TagTreeModel) super.getModel();
+ }
+
+ public void expandRoot() {
+ TagTreeModel ttm = getModel();
+ TreeItem root = ttm.getRoot();
+ expandPath(new TreePath(new Object[]{root}));
+ }
+
+ public void expandFirstLevelNodes() {
+ TagTreeModel ttm = getModel();
+ TreeItem root = ttm.getRoot();
+ int childCount = ttm.getChildCount(root);
+ for (int i = 0; i < childCount; i++) {
+ expandPath(new TreePath(new Object[]{root, ttm.getChild(root, i)}));
+ }
+ }
+
+ public String getSelectionPathString() {
+ StringBuilder sb = new StringBuilder();
+ TreePath path = getSelectionPath();
+ if (path != null) {
+ boolean first = true;
+ for (Object p : path.getPath()) {
+ if (!first) {
+ sb.append("|");
+ }
+
+ first = false;
+ sb.append(p.toString());
+ }
+ }
+
+ return sb.toString();
+ }
+
+ public void setSelectionPathString(String pathStr) {
+ if (pathStr != null && pathStr.length() > 0) {
+ String[] path = pathStr.split("\\|");
+
+ TreePath tp = View.getTreePathByPathStrings(this, Arrays.asList(path));
+ if (tp != null) {
+ // the current view is the Resources view, otherwise tp is null
+ mainPanel.setTagTreeSelectedNode((TreeItem) tp.getLastPathComponent());
+ }
+ }
+ }
+}