diff --git a/.gitignore b/.gitignore index 9ac98523f..6f4ef8cae 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ *.conflict~ *.identcache *.recompiled.swf +*(Selective Sync Conflict* run_test_*.swf Thumbs.db /build/ diff --git a/.travis.yml b/.travis.yml index aab666a7b..aff5c2248 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: java -jdk: [oraclejdk8] -dist: trusty +jdk: [oraclejdk9] +#dist: trusty addons: apt: packages: diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e0ce3c25..d43646863 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,40 @@ # Change Log All notable changes to this project will be documented in this file. +## [12.0.0] - 2021-01-12 +### Added +- Java 9+ support +- Chinese translation updated +- Enable bulk replace for single typed tags +- Option to use logging configuration file (ffdec home / logging.properties) + +### Removed +- Due to Java9+ limited support of reflection, following features were removed: +- Automatic detection of installed fonts changes (on font editation) - FFDec needs to be restarted to font changes to take effect +- Using kerning pairs of installed fonts +- Support for installing java in FFDec windows installer + +### Changed +- Making internal flash viewer a default viewer + move FP option switch to Advanced settings / others +- Increased scrolling speed in folder preview +- Changed /bin/bash to /usr/bin/env bash +- Building does not require Naashorn - uses Beanshell instead +- Use object.§§slot[index] syntax instead of /* UnknownSlot */ comment when slot cannot be determined (AS3) +- Show §§findproperty when neccessary (AS3) + +### Fixed +- Scaling - Distorted images/canvas on Hi-dpi monitors for Java 9 and later +- Radial gradients focal point reading/writing +- Correct AS/P-code matching in editor for AS3 after using deobfuscation +- Correct line matching in debugger of AS3 after using deobfuscation +- Concurrent access while in debugger +- Correct body index for script initializer in P-code debugging +- #1550 TTF export - correctly handle duplicate unicode codes +- #1548 correctly handle empty generated file names +- #1379 AS3 - better handling local registers postincrement/decrement +- Better unresolved if handling +- Escaping in P-code Graphviz exporter (Problems with graphs containing backslash strings) + ## [11.3.0] - 2020-04-25 ### Added - Possibility to open SWF files using open on Mac diff --git a/antlib/bsh-2.0b6.jar b/antlib/bsh-2.0b6.jar new file mode 100644 index 000000000..29d71a9d5 Binary files /dev/null and b/antlib/bsh-2.0b6.jar differ diff --git a/build.xml b/build.xml index e222cc45b..900277343 100644 --- a/build.xml +++ b/build.xml @@ -1,5 +1,5 @@ - + Builds project FFDec @@ -14,7 +14,7 @@ - + @@ -65,9 +65,9 @@ - @@ -80,7 +80,7 @@ - + @@ -131,7 +131,7 @@ - + @@ -145,9 +145,9 @@ - + - + @@ -263,12 +263,12 @@ - @@ -323,7 +323,7 @@ - #!/bin/bash $(dirname "$${BASH_SOURCE[0]}")/../Resources/${app.script} "$$@" + #!/usr/bin/env bash $(dirname "$${BASH_SOURCE[0]}")/../Resources/${app.script} "$$@" @@ -405,6 +405,7 @@ ${max.heap.size.percent} -Djava.net.preferIPv4Stack=true -Djna.nosys=true + -Dsun.java2d.uiScale=1.0 graphics/splash2.bmp @@ -428,14 +429,14 @@ - - - + + + - - - + + + @@ -667,6 +668,7 @@ + diff --git a/git_eol_normalization.sh b/git_eol_normalization.sh index 8120dfee8..26db8ae2c 100755 --- a/git_eol_normalization.sh +++ b/git_eol_normalization.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -e git add . -u git commit -m "Saving files before refreshing line endings" @@ -6,4 +6,4 @@ git rm --cached -r . git reset --hard git add . set +e -git commit -m "Normalize all the line endings" \ No newline at end of file +git commit -m "Normalize all the line endings" diff --git a/installer.nsi b/installer.nsi index 9df8adea5..3b292c657 100644 --- a/installer.nsi +++ b/installer.nsi @@ -14,7 +14,7 @@ !define APP_URL "https://github.com/jindrapetrik/jpexs-decompiler" !define APP_PUBLISHER "JPEXS" !define APP_NAME "JPEXS Free Flash Decompiler" - !define JRE_VERSION "1.8" +; !define JRE_VERSION "1.8" !endif Unicode true @@ -29,7 +29,7 @@ Unicode true SetCompressor /SOLID lzma !include "StrFunc.nsh" ${StrLoc} -!include "nsis_plugins\JREDyna_Inetc.nsh" +;!include "nsis_plugins\JREDyna_Inetc.nsh" ;Old not working ;!define FLASH_URL "http://download.macromedia.com/pub/flashplayer/current/support/install_flash_player_ax.exe" @@ -292,7 +292,7 @@ IntOp ${Var} $0 - $1 !insertmacro MUI_PAGE_LICENSE "resources/license.txt" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY - !insertmacro CUSTOM_PAGE_JREINFO + ;!insertmacro CUSTOM_PAGE_JREINFO !insertmacro CUSTOM_PAGE_FLASHINFO var SMDir @@ -680,7 +680,7 @@ Section "FFDec" SecDummy ;Create un1installer WriteUninstaller "$INSTDIR\Uninstall.exe" - call DownloadAndInstallJREIfNecessary + ;call DownloadAndInstallJREIfNecessary call DownloadAndInstallFlashIfNecessary SectionEnd diff --git a/libsrc/ffdec_lib/antlib/bsh-2.0b6.jar b/libsrc/ffdec_lib/antlib/bsh-2.0b6.jar new file mode 100644 index 000000000..29d71a9d5 Binary files /dev/null and b/libsrc/ffdec_lib/antlib/bsh-2.0b6.jar differ diff --git a/libsrc/ffdec_lib/build.xml b/libsrc/ffdec_lib/build.xml index 48e3f6ee9..9659d259b 100644 --- a/libsrc/ffdec_lib/build.xml +++ b/libsrc/ffdec_lib/build.xml @@ -11,7 +11,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -84,7 +84,7 @@ - + @@ -99,11 +99,11 @@ - + - + @@ -205,12 +206,12 @@ - @@ -284,16 +285,12 @@ - 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 1680cf7a2..a7dd20d14 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java @@ -675,12 +675,7 @@ public class SWFInputStream implements AutoCloseable { newDumpLevel(name, "FIXED8"); int afterPoint = readEx(); int beforePoint = readSI8Internal(); - float ret; - if (beforePoint < 0) { - ret = beforePoint - ((float) afterPoint) / 256; - } else { - ret = beforePoint + ((float) afterPoint) / 256; - } + float ret = beforePoint + ((float) afterPoint) / 256; endDumpLevel(ret); return ret; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java index df8dbbec6..73e2eba6e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java @@ -312,9 +312,9 @@ public class SWFOutputStream extends OutputStream { * @throws IOException */ public void writeFIXED8(float value) throws IOException { - final int divisor = 1 << 8; - int beforePoint = (int) value; - int afterPoint = Math.abs((int) (value * divisor)) % divisor; + int valueInt = (int) (value * (1 << 8)); + int beforePoint = (int) valueInt >> 8; + int afterPoint = (int) valueInt % (1 << 8); writeUI8(afterPoint); writeSI8(beforePoint); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java index 101098758..8fdf45acc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.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.abc; import com.jpexs.decompiler.flash.SWF; @@ -576,7 +577,7 @@ public class ScriptPack extends AS3ClassTreeItem { int scriptInitBody = abc.findBodyIndex(abc.script_info.get(scriptIndex).init_index); if (!bodyToIdentifier.containsKey(scriptInitBody)) { - bodyToIdentifier.put(scriptInitBody, "abc:" + abcIndex + ",script:" + scriptIndex + ",class:-1,trait:-3,method:" + abc.script_info.get(scriptIndex).init_index); + bodyToIdentifier.put(scriptInitBody, "abc:" + abcIndex + ",script:" + scriptIndex + ",class:-1,trait:-3,method:" + abc.script_info.get(scriptIndex).init_index + ",body:" + scriptInitBody); } String pkg = path.packageStr.toString(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 2600d6842..1d048900c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -2937,4 +2937,10 @@ public class AVM2Code implements Cloneable { throw new RuntimeException(); } } + + public void markVirtualAddresses() { + for (AVM2Instruction ins : code) { + ins.setVirtualAddress(ins.getAddress()); + } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java index f1420e948..a29e5b64d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java @@ -63,6 +63,8 @@ public class AVM2Instruction implements Cloneable, GraphSourceItem { private String file; + private long virtualAddress = -1; + @Override public long getFileOffset() { return -1; @@ -70,6 +72,9 @@ public class AVM2Instruction implements Cloneable, GraphSourceItem { @Override public long getLineOffset() { + if (virtualAddress > -1) { + return virtualAddress; + } return getAddress(); } @@ -530,4 +535,13 @@ public class AVM2Instruction implements Cloneable, GraphSourceItem { body.setModified(); } + @Override + public long getVirtualAddress() { + return virtualAddress; + } + + @Override + public void setVirtualAddress(long virtualAddress) { + this.virtualAddress = virtualAddress; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIIns.java index 4f0a3d597..cab47621c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIIns.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.abc.avm2.instructions.localregs; import com.jpexs.decompiler.flash.abc.AVM2LocalData; @@ -23,6 +24,8 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.DecLocalAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.PostDecrementAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.SubtractAVM2Item; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.ecma.NotCompileTime; @@ -54,7 +57,20 @@ public class DecLocalIIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int regId = ins.operands[0]; - output.add(new DecLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + boolean isPostDec = false; + if (!stack.isEmpty()) { + GraphTargetItem stackTop = stack.peek(); + if (stackTop instanceof LocalRegAVM2Item) { + if (regId == ((LocalRegAVM2Item) stackTop).regIndex) { + stack.pop(); + stack.push(new PostDecrementAVM2Item(ins, localData.lineStartInstruction, stackTop)); + isPostDec = true; + } + } + } + if (!isPostDec) { + output.add(new DecLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + } if (localData.localRegs.containsKey(regId)) { localData.localRegs.put(regId, new SubtractAVM2Item(ins, localData.lineStartInstruction, localData.localRegs.get(regId), new IntegerValueAVM2Item(ins, localData.lineStartInstruction, 1L))); } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIns.java index fce7ff632..57abe0704 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIns.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.abc.avm2.instructions.localregs; import com.jpexs.decompiler.flash.abc.AVM2LocalData; @@ -23,6 +24,8 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.DecLocalAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.PostDecrementAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.SubtractAVM2Item; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.ecma.NotCompileTime; @@ -54,7 +57,20 @@ public class DecLocalIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int regId = ins.operands[0]; - output.add(new DecLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + boolean isPostDec = false; + if (!stack.isEmpty()) { + GraphTargetItem stackTop = stack.peek(); + if (stackTop instanceof LocalRegAVM2Item) { + if (regId == ((LocalRegAVM2Item) stackTop).regIndex) { + stack.pop(); + stack.push(new PostDecrementAVM2Item(ins, localData.lineStartInstruction, stackTop)); + isPostDec = true; + } + } + } + if (!isPostDec) { + output.add(new DecLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + } if (localData.localRegs.containsKey(regId)) { localData.localRegs.put(regId, new SubtractAVM2Item(ins, localData.lineStartInstruction, localData.localRegs.get(regId), new IntegerValueAVM2Item(ins, localData.lineStartInstruction, 1L))); } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIIns.java index 4256dc51f..ef697dcbe 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIIns.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.abc.avm2.instructions.localregs; import com.jpexs.decompiler.flash.abc.AVM2LocalData; @@ -23,6 +24,8 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.IncLocalAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.PostIncrementAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.AddAVM2Item; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.ecma.NotCompileTime; @@ -54,11 +57,22 @@ public class IncLocalIIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int regId = ins.operands[0]; - output.add(new IncLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + boolean isPostInc = false; + if (!stack.isEmpty()) { + GraphTargetItem stackTop = stack.peek(); + if (stackTop instanceof LocalRegAVM2Item) { + if (regId == ((LocalRegAVM2Item) stackTop).regIndex) { + stack.pop(); + stack.push(new PostIncrementAVM2Item(ins, localData.lineStartInstruction, stackTop)); + isPostInc = true; + } + } + } + if (!isPostInc) { + output.add(new IncLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + } if (localData.localRegs.containsKey(regId)) { localData.localRegs.put(regId, new AddAVM2Item(ins, localData.lineStartInstruction, localData.localRegs.get(regId), new IntegerValueAVM2Item(ins, localData.lineStartInstruction, 1L))); - } else { - //localRegs.put(regIndex, new AddAVM2Item(ins, localData.lineStartInstruction, null, new IntegerValueAVM2Item(ins, localData.lineStartInstruction, new Long(1)))); } if (!localData.localRegAssignmentIps.containsKey(regId)) { localData.localRegAssignmentIps.put(regId, 0); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java index 70b4121aa..0ff39a48e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.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.abc.avm2.instructions.localregs; import com.jpexs.decompiler.flash.abc.AVM2LocalData; @@ -23,6 +24,8 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.IncLocalAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.PostIncrementAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.AddAVM2Item; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.ecma.NotCompileTime; @@ -54,7 +57,20 @@ public class IncLocalIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int regId = ins.operands[0]; - output.add(new IncLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + boolean isPostInc = false; + if (!stack.isEmpty()) { + GraphTargetItem stackTop = stack.peek(); + if (stackTop instanceof LocalRegAVM2Item) { + if (regId == ((LocalRegAVM2Item) stackTop).regIndex) { + stack.pop(); + stack.push(new PostIncrementAVM2Item(ins, localData.lineStartInstruction, stackTop)); + isPostInc = true; + } + } + } + if (!isPostInc) { + output.add(new IncLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + } if (localData.localRegs.containsKey(regId)) { localData.localRegs.put(regId, new AddAVM2Item(ins, localData.lineStartInstruction, localData.localRegs.get(regId), new IntegerValueAVM2Item(ins, localData.lineStartInstruction, 1L))); } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java index 0af5b3cb3..fb3787fec 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.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.abc.avm2.instructions.other; import com.jpexs.decompiler.flash.abc.ABC; @@ -60,7 +61,7 @@ public class GetGlobalSlotIns extends InstructionDefinition { } } - stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, slotname)); + stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, obj, slotIndex, slotname)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java index 925b2fcc2..1ed21788a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.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.abc.avm2.instructions.other; import com.jpexs.decompiler.flash.abc.ABC; @@ -47,8 +48,8 @@ public class GetSlotIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int slotIndex = ins.operands[0]; - GraphTargetItem obj = stack.pop(); //scope - obj = obj.getThroughRegister(); + GraphTargetItem objinreg = stack.pop(); //scope + GraphTargetItem obj = objinreg.getThroughRegister(); Multiname slotname = null; if (obj instanceof ExceptionAVM2Item) { slotname = localData.getConstants().getMultiname(((ExceptionAVM2Item) obj).exception.name_index); @@ -79,7 +80,7 @@ public class GetSlotIns extends InstructionDefinition { } } - stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, slotname)); + stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, objinreg, slotIndex, slotname)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java index 968a254b7..e847ccf32 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.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.abc.avm2.instructions.other; import com.jpexs.decompiler.flash.abc.ABC; @@ -162,7 +163,7 @@ public class SetSlotIns extends InstructionDefinition implements SetTypeIns { } } - output.add(new SetSlotAVM2Item(ins, localData.lineStartInstruction, obj, slotname, value)); + output.add(new SetSlotAVM2Item(ins, localData.lineStartInstruction, obj, objnoreg, slotIndex, slotname, value)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java index 3116f4909..1d4f80538 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -46,6 +48,11 @@ public class AlchemyLoadAVM2Item extends AVM2Item { this.size = size; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(ofs); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("l").append(type).append(size).append("("); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java index 03106fac3..ffbc9b8ea 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -45,6 +47,14 @@ public class AlchemyStoreAVM2Item extends AVM2Item { this.size = size; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(ofs); + if (value != null) { + visitor.visit(value); + } + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("s").append(type).append(size).append("("); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java index 0a41dbcf0..d5c7007ef 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -44,6 +46,12 @@ public class ApplyTypeAVM2Item extends AVM2Item { this.object = object; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visitAll(params); + } + @Override public int hashCode() { int hash = 3; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java index 20536a7d7..aedf7d02f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java @@ -12,13 +12,15 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.Callable; import com.jpexs.decompiler.graph.model.LocalData; @@ -142,6 +144,13 @@ public class CallAVM2Item extends AVM2Item { this.arguments = arguments; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(receiver); + visitor.visit(function); + visitor.visitAll(arguments); + } + @Override public Object getResult() { if (!isCompileTime()) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java index f4c65d7a6..4f48c4fed 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java @@ -12,12 +12,14 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -41,6 +43,12 @@ public class CallMethodAVM2Item extends AVM2Item { this.arguments = arguments; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(receiver); + visitor.visitAll(arguments); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { receiver.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java index 957b642c5..58c284cad 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -50,6 +52,13 @@ public class CallPropertyAVM2Item extends AVM2Item { this.isVoid = isVoid; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(receiver); + visitor.visit(propertyName); + visitor.visitAll(arguments); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { formatProperty(writer, receiver, propertyName, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java index 5bd6ffd12..2429d47a1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java @@ -12,12 +12,14 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -41,6 +43,12 @@ public class CallStaticAVM2Item extends AVM2Item { this.arguments = arguments; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(receiver); + visitor.visitAll(arguments); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { receiver.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java index b4f5daa66..7ef55c86a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java @@ -12,12 +12,14 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -44,6 +46,13 @@ public class CallSuperAVM2Item extends AVM2Item { this.isVoid = isVoid; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(receiver); + visitor.visit(multiname); + visitor.visitAll(arguments); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { if (!receiver.toString().equals("this") && !(receiver instanceof FindPropertyAVM2Item)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java index dcbacd9d1..57fa58fbf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -25,6 +26,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -44,6 +46,14 @@ public class CoerceAVM2Item extends AVM2Item { this.typeObj = typeObj; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(typeObj); + if (value != null) { + visitor.visit(value); + } + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { //return hilight("(" + type + ")", highlight)+ diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java index db5596e24..a4a26d463 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java @@ -12,12 +12,14 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -37,6 +39,12 @@ public class ConstructAVM2Item extends AVM2Item { this.args = args; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visitAll(args); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { if (object instanceof NewFunctionAVM2Item) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java index 3df1eedfe..01578c000 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java @@ -12,12 +12,14 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -41,12 +43,18 @@ public class ConstructPropAVM2Item extends AVM2Item { this.args = args; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(propertyName); + visitor.visitAll(args); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("new "); - int idx = writer.getLength(); - object.toString(writer, localData); - if (idx < writer.getLength()) { + if (!(object instanceof FindPropertyAVM2Item)) { + object.toString(writer, localData); writer.append("."); } propertyName.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java index 42cda7f63..c8d106afe 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -43,6 +45,12 @@ public class ConstructSuperAVM2Item extends AVM2Item { this.args = args; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visitAll(args); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { if (!object.toString().equals("this")) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java index a28d379bb..2d6d77c71 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java @@ -12,13 +12,15 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.model.LocalData; import java.util.Set; @@ -35,6 +37,14 @@ public class ConvertAVM2Item extends AVM2Item { this.type = type; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(type); + if (value != null) { + visitor.visit(value); + } + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { type.toString(writer, localData).append("("); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java index ff715a720..d57db9ac0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -39,6 +41,11 @@ public class DefaultXMLNamespace extends AVM2Item { this.ns = ns; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(ns); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("default xml namespace = "); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java index 07e40dbe2..2a0354507 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java @@ -12,12 +12,14 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -34,6 +36,11 @@ public class FilteredCheckAVM2Item extends AVM2Item { this.object = object; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { return object.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java index b2ea80c56..1a22814d7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java @@ -12,12 +12,14 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -35,7 +37,15 @@ public class FindPropertyAVM2Item extends AVM2Item { } @Override - public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(propertyName); + } + + @Override + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + writer.append("§§findproperty("); + propertyName.appendTo(writer, localData); + writer.append(")"); return writer; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java index f1d9302a0..2aed5e7af 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -70,6 +72,16 @@ public class FullMultinameAVM2Item extends AVM2Item { this.resolvedMultinameName = resolvedMultinameName; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + if (name != null) { + visitor.visit(name); + } + if (namespace != null) { + visitor.visit(namespace); + } + } + public boolean isRuntime() { return (name != null) || (namespace != null); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java index 185c827cb..895b6195f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -49,6 +51,11 @@ public class GetDescendantsAVM2Item extends AVM2Item { this.openedNamespaces = openedNamespaces; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + } + public GetDescendantsAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, GraphTargetItem multiname) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); this.object = object; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java index b69b7768b..20ea3129f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -27,6 +28,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SimpleValue; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; @@ -44,6 +46,12 @@ public class GetPropertyAVM2Item extends AVM2Item { public GraphTargetItem propertyName; + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(propertyName); + } + @Override public boolean isConvertedCompileTime(Set dependencies) { if (object != null && object.isCompileTime() && (propertyName instanceof FullMultinameAVM2Item) && (((FullMultinameAVM2Item) propertyName).name != null) && (((FullMultinameAVM2Item) propertyName).name.isCompileTime()) && "constructor".equals(((FullMultinameAVM2Item) propertyName).name.getResult())) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java index 426bf753c..76174bebc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java @@ -12,13 +12,15 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -32,31 +34,40 @@ public class GetSlotAVM2Item extends AVM2Item { public GraphTargetItem scope; - public GetSlotAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scope, Multiname slotName) { + public GraphTargetItem slotObject; + + public int slotIndex; + + public GetSlotAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scope, GraphTargetItem slotObject, int slotIndex, Multiname slotName) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); this.slotName = slotName; this.scope = scope; + this.slotObject = slotObject; + this.slotIndex = slotIndex; } @Override - public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { - if (slotName == null) { - return writer.append("/*UnknownSlot*/"); - } - - getSrcData().localName = getNameAsStr(localData); - return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true)); + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(scope); + visitor.visit(slotObject); } - public String getNameAsStr(LocalData localData) { + @Override + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + String name = getNameAsStr(localData); + getSrcData().localName = name; + return writer.append(name); + } + + public String getNameAsStr(LocalData localData) throws InterruptedException { + if (slotName == null) { + return slotObject.toString(localData) + ".§§slot[" + slotIndex + "]"; + } return slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true); } - public GraphTextWriter getName(GraphTextWriter writer, LocalData localData) { - if (slotName == null) { - return writer.append("/*UnknownSlot*/"); - } - return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true)); + public GraphTextWriter getName(GraphTextWriter writer, LocalData localData) throws InterruptedException { + return writer.append(getNameAsStr(localData)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java index e8e670878..d40a2bebe 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java @@ -12,12 +12,14 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -37,12 +39,17 @@ public class GetSuperAVM2Item extends AVM2Item { this.propertyName = propertyName; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(propertyName); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { if (!object.toString().equals("this")) { - int length = writer.getLength(); - object.toString(writer, localData); - if (writer.getLength() > length) { + if (!(object instanceof FindPropertyAVM2Item)) { + object.toString(writer, localData); writer.append("."); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java index 3f6804eb5..857ae00ec 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -42,6 +44,12 @@ public class HasNextAVM2Item extends AVM2Item { this.obj = obj; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(index); + visitor.visit(obj); + } + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { if ((index instanceof LocalRegAVM2Item) && (obj instanceof LocalRegAVM2Item)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java index f7b94b8e2..03d68caf5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -42,6 +44,12 @@ public class InAVM2Item extends AVM2Item { this.collection = collection; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(collection); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { object.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java index f2defd57e..84479b4ac 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; @@ -20,6 +21,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.clauses.DeclarationAVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -35,6 +37,13 @@ public class InitPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, A public DeclarationAVM2Item declaration; + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(propertyName); + visitor.visit(value); + } + @Override public DeclarationAVM2Item getDeclaration() { return declaration; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitVectorAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitVectorAVM2Item.java index 8f9235e15..c5130973a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitVectorAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitVectorAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -29,6 +30,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -63,6 +65,12 @@ public class InitVectorAVM2Item extends AVM2Item { return NamespaceItem.getCpoolSetIndex(abc, openedNamespaces); } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(subtype); + visitor.visitAll(arguments); + } + public InitVectorAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem subtype, List arguments) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); this.subtype = subtype; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java index d966505c3..ea6af25fd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java @@ -12,11 +12,13 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.decompiler.graph.model.TernarOpItem; @@ -34,6 +36,14 @@ public class NameValuePair extends AVM2Item { this.name = name; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(name); + if (value != null) { + visitor.visit(value); + } + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { name.toStringString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java index f5a3bacdc..674c5c6f9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -43,6 +45,11 @@ public class NewArrayAVM2Item extends AVM2Item { this.values = values; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(values); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("["); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java index de962852f..8edca926c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -25,6 +26,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -47,6 +49,13 @@ public class NewObjectAVM2Item extends AVM2Item { this.pairs = pairs; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + for (NameValuePair p : pairs) { + visitor.visit(p); + } + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { boolean singleLine = pairs.size() < 2; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java index 7535b5b91..a0e80ba2c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -42,6 +44,12 @@ public class NextNameAVM2Item extends AVM2Item { this.obj = obj; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(index); + visitor.visit(obj); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("§§nextname"); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java index 9675fa2a8..212da2108 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -42,6 +44,12 @@ public class NextValueAVM2Item extends AVM2Item { this.obj = obj; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(index); + visitor.visit(obj); + } + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSourceMerge(localData, generator, obj, index, ins(AVM2Instructions.NextValue)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java index 45ddd4252..8d06793f3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -40,6 +42,11 @@ public class PostDecrementAVM2Item extends AVM2Item implements AssignmentAVM2Ite this.object = object; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { object.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java index 503ad9a22..6b5f808e8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -40,6 +42,11 @@ public class PostIncrementAVM2Item extends AVM2Item implements AssignmentAVM2Ite this.object = object; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { object.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java index c33193a78..af90a537d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -42,7 +43,7 @@ public class SetGlobalSlotAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - writer.append("setglobalslot"); + writer.append("§§setglobalslot"); writer.spaceBeforeCallParenthesies(2); writer.append("("); writer.append(slotId).append(","); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java index 3f05a4b08..9e5b166ab 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -26,6 +27,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -58,6 +60,13 @@ public class SetPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, As return value.getFirstPart(); } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(propertyName); + visitor.visit(value); + } + public SetPropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, GraphTargetItem propertyName, GraphTargetItem value) { super(instruction, lineStartIns, PRECEDENCE_ASSIGMENT); this.object = object; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java index ea2fde3da..541ba030a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -37,6 +39,16 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign public DeclarationAVM2Item declaration; + public GraphTargetItem slotObject; + + public int slotIndex; + + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(scope); + visitor.visit(slotObject); + } + @Override public DeclarationAVM2Item getDeclaration() { return declaration; @@ -47,10 +59,12 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign this.declaration = declaration; } - public SetSlotAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scope, Multiname slotName, GraphTargetItem value) { + public SetSlotAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scope, GraphTargetItem slotObject, int slotIndex, Multiname slotName, GraphTargetItem value) { super(instruction, lineStartIns, PRECEDENCE_ASSIGMENT, value); this.slotName = slotName; this.scope = scope; + this.slotObject = slotObject; + this.slotIndex = slotIndex; } @Override @@ -60,7 +74,7 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - getSrcData().localName = slotName == null ? "/*UnknownSlot*/" : slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true); + getSrcData().localName = getNameAsStr(localData); if (getSrcData().localName.equals(value.toString(localData))) { //assigning parameters to activation reg return writer; @@ -73,20 +87,20 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign return value.toString(writer, localData); } - public String getNameAsStr(LocalData localData) { - return slotName == null ? "/*UnknownSlot*/" : slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true); + public String getNameAsStr(LocalData localData) throws InterruptedException { + if (slotName == null) { + return slotObject.toString(localData) + ".§§slot[" + slotIndex + "]"; + } + return slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true); } - public GraphTextWriter getName(GraphTextWriter writer, LocalData localData) { - if (slotName == null) { - return writer.append("/*UnknownSlot*/"); - } - return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames, false, true)); + public GraphTextWriter getName(GraphTextWriter writer, LocalData localData) throws InterruptedException { + return writer.append(getNameAsStr(localData)); } @Override public GraphTargetItem getObject() { - return new GetSlotAVM2Item(getInstruction(), getLineStartIns(), scope, slotName); + return new GetSlotAVM2Item(getInstruction(), getLineStartIns(), scope, slotObject, slotIndex, slotName); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java index 95eb920f2..6b92b9c9c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java @@ -12,13 +12,15 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -32,6 +34,15 @@ public class SetSuperAVM2Item extends AVM2Item { public FullMultinameAVM2Item propertyName; + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(propertyName); + if (value != null) { + visitor.visit(value); + } + } + @Override public GraphPart getFirstPart() { return value.getFirstPart(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java index 950ed6dcf..fd5df44e3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -46,6 +48,12 @@ public class WithAVM2Item extends AVM2Item { this.items = items; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(scope); + visitor.visitAll(items); + } + public WithAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scope) { super(instruction, lineStartIns, NOPRECEDENCE); this.scope = scope; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java index 76e191eb4..abc8e735b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java @@ -12,12 +12,14 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -34,6 +36,11 @@ public class WithEndAVM2Item extends AVM2Item { this.scope = scope; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(scope); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.endBlock(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java index 7b774a325..7aa8f57e1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.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.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -20,6 +21,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -38,6 +40,11 @@ public class WithObjectAVM2Item extends AVM2Item { this.scope = scope; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(scope); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java index c5a98d452..4cc91a65b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java @@ -12,13 +12,15 @@ * 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.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -36,6 +38,11 @@ public class XMLAVM2Item extends AVM2Item { this.parts = parts; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(parts); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { for (GraphTargetItem part : parts) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java index c98a02943..dcb692ded 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.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.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; @@ -26,6 +27,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.HighlightData; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -45,6 +47,12 @@ public class DeclarationAVM2Item extends AVM2Item { this.assignment = assignment; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(type); + visitor.visit(assignment); + } + public DeclarationAVM2Item(GraphTargetItem assignment) { this(assignment, null); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java index 26275ea8e..4c55161c8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java @@ -12,13 +12,15 @@ * 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.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -38,6 +40,12 @@ public class FilterAVM2Item extends AVM2Item { this.collection = collection; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(expression); + visitor.visit(collection); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { collection.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java index 91cd67d76..0103fa282 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.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.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -25,6 +26,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; @@ -55,6 +57,12 @@ public class ForEachInAVM2Item extends LoopItem implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(expression); + visitor.visitAll(commands); + } + public ForEachInAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, Loop loop, InAVM2Item expression, List commands) { super(instruction, lineStartIns, loop); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java index da0c084a1..7736f9b38 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.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.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -27,6 +28,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; @@ -57,6 +59,12 @@ public class ForInAVM2Item extends LoopItem implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(expression); + visitor.visitAll(commands); + } + public ForInAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, Loop loop, InAVM2Item expression, List commands) { super(instruction, lineStartIns, loop); if (!commands.isEmpty()) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java index 73db94c1c..b97c041d9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.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.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -29,6 +30,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.ContinueItem; @@ -69,6 +71,24 @@ public class TryAVM2Item extends AVM2Item implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + if (tryCommands != null) { + visitor.visitAll(tryCommands); + } + for (List c : catchVariables) { + for (AssignableAVM2Item ai : c) { + visitor.visit(ai); + } + } + for (List c : catchCommands) { + visitor.visitAll(c); + } + if (finallyCommands != null) { + visitor.visitAll(finallyCommands); + } + } + public TryAVM2Item(List tryCommands, List catchExceptions, List> catchCommands, List finallyCommands, String finCatchName) { super(null, null, NOPRECEDENCE); this.tryCommands = tryCommands; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java index e49fe9f08..1d171f00c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.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.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -27,6 +28,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -51,6 +53,12 @@ public class DeletePropertyAVM2Item extends AVM2Item { this.line = line; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(propertyName); + } + public DeletePropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, GraphTargetItem propertyName) { super(instruction, lineStartIns, PRECEDENCE_UNARY); this.object = object; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/methodinfo_parser/MethodInfoParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/methodinfo_parser/MethodInfoParser.java index 1845d9d0e..14fc955a3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/methodinfo_parser/MethodInfoParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/methodinfo_parser/MethodInfoParser.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.abc.methodinfo_parser; import com.jpexs.decompiler.flash.abc.ABC; @@ -176,7 +177,7 @@ public class MethodInfoParser { if (symb.type == ParsedSymbol.TYPE_COLON) { ParsedSymbol symbType = lexer.yylex(); if (symbType.type == ParsedSymbol.TYPE_STAR) { - paramTypes.add(new Long(0)); + paramTypes.add((Long)0L); } else if (symbType.type == ParsedSymbol.TYPE_MULTINAME) { paramTypes.add((Long) symbType.value); } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java index ef49c63a0..69bb4298b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.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.abc.types; import com.jpexs.decompiler.flash.SWFInputStream; @@ -384,6 +385,7 @@ public final class MethodBody implements Cloneable { public MethodBody convertMethodBody(ConvertData convertData, String path, boolean isStatic, int scriptIndex, int classIndex, ABC abc, Trait trait, ScopeStack scopeStack, boolean isStaticInitializer, List fullyQualifiedNames, List initTraits) throws InterruptedException { MethodBody body = clone(); AVM2Code code = body.getCode(); + code.markVirtualAddresses(); code.fixJumps(path, body); if (convertData.deobfuscationMode != 0) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java index dc6bb24c0..80e27fcb6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.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.abc.types; import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; @@ -63,11 +64,11 @@ public class Multiname { public int namespace_index; - public final int namespace_set_index; + public /*final JAVA 9*/ int namespace_set_index; - public final int qname_index; //for TypeName + public /*final JAVA 9*/ int qname_index; //for TypeName - public final int[] params; //for TypeName + public /*final JAVA 9*/ int[] params; //for TypeName @Internal public boolean deleted; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java index c69e7894c..3adb18044 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java @@ -127,6 +127,8 @@ public abstract class Action implements GraphSourceItem { private long address; + private long virtualAddress = -1; + @Override public long getLineOffset() { return fileOffset; @@ -1232,4 +1234,14 @@ public abstract class Action implements GraphSourceItem { public String getFile() { return null; } + + @Override + public long getVirtualAddress() { + return virtualAddress; + } + + @Override + public void setVirtualAddress(long virtualAddress) { + this.virtualAddress = virtualAddress; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java index a64db6f10..f849e9393 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -44,8 +45,8 @@ public class CallFunctionActionItem extends ActionItem { public GraphTargetItem calculatedFunction; @Override - public List getAllSubItems() { - return arguments; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(arguments); } public CallFunctionActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem functionName, List arguments) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java index 980fd2eca..e646734c8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -43,11 +44,9 @@ public class CallMethodActionItem extends ActionItem { public List arguments; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.addAll(arguments); - ret.add(scriptObject); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(arguments); + visitor.visit(scriptObject); } public CallMethodActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scriptObject, GraphTargetItem methodName, List arguments) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CastOpActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CastOpActionItem.java index f1b383793..30533024e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CastOpActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CastOpActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -38,11 +40,9 @@ public class CastOpActionItem extends ActionItem { public GraphTargetItem object; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(constructor); - ret.add(object); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(constructor); + visitor.visit(object); } public CastOpActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem constructor, GraphTargetItem object) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CloneSpriteActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CloneSpriteActionItem.java index 5126ba5fa..330ecae81 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CloneSpriteActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CloneSpriteActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -40,12 +42,9 @@ public class CloneSpriteActionItem extends ActionItem { public GraphTargetItem depth; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(target); - ret.add(source); - ret.add(depth); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(source); + visitor.visit(depth); } public CloneSpriteActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem source, GraphTargetItem target, GraphTargetItem depth) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DecrementActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DecrementActionItem.java index 27d580d14..9ea371258 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DecrementActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DecrementActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -37,10 +39,8 @@ public class DecrementActionItem extends ActionItem { public GraphTargetItem object; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(object); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); } public DecrementActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java index 3cc2f0e78..ba4a3b48e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.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.action.model; import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; @@ -25,6 +26,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -41,13 +43,11 @@ public class DefineLocalActionItem extends ActionItem implements SetTypeActionIt private int tempRegister = -1; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(name); + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(name); if (value != null) { - ret.add(value); + visitor.visit(value); } - return ret; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DeleteActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DeleteActionItem.java index d959881fa..2e05aa300 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DeleteActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DeleteActionItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -41,11 +42,9 @@ public class DeleteActionItem extends ActionItem { public GraphTargetItem propertyName; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(object); - ret.add(propertyName); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(propertyName); } public DeleteActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, GraphTargetItem propertyName) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumerateActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumerateActionItem.java index 36e75977e..10652d48f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumerateActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumerateActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -37,10 +39,8 @@ public class EnumerateActionItem extends ActionItem { public GraphTargetItem object; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(object); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); } public EnumerateActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumeratedValueActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumeratedValueActionItem.java index e264bf6ab..f6bee22c8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumeratedValueActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumeratedValueActionItem.java @@ -10,6 +10,7 @@ import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; import static com.jpexs.decompiler.graph.GraphTargetItem.PRECEDENCE_PRIMARY; import static com.jpexs.decompiler.graph.GraphTargetItem.toSourceMerge; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BranchStackResistant; import com.jpexs.decompiler.graph.model.LocalData; @@ -23,9 +24,8 @@ import java.util.List; public class EnumeratedValueActionItem extends ActionItem implements BranchStackResistant { @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + } public EnumeratedValueActionItem() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumerationAssignmentValueActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumerationAssignmentValueActionItem.java index 33bb1a1ff..a1278fb4e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumerationAssignmentValueActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/EnumerationAssignmentValueActionItem.java @@ -10,6 +10,7 @@ import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; import static com.jpexs.decompiler.graph.GraphTargetItem.PRECEDENCE_PRIMARY; import static com.jpexs.decompiler.graph.GraphTargetItem.toSourceMerge; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BranchStackResistant; import com.jpexs.decompiler.graph.model.LocalData; @@ -23,9 +24,8 @@ import java.util.List; public class EnumerationAssignmentValueActionItem extends ActionItem { @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + } public EnumerationAssignmentValueActionItem() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FSCommand2ActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FSCommand2ActionItem.java index 00e06ec5d..b005fc158 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FSCommand2ActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FSCommand2ActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -41,11 +43,9 @@ public class FSCommand2ActionItem extends ActionItem { public GraphTargetItem command; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.addAll(arguments); - ret.add(command); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(arguments); + visitor.visit(command); } public FSCommand2ActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem command, List arguments) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java index 227756a0b..7dcf0d39f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java @@ -33,6 +33,7 @@ import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.helpers.Helper; @@ -80,10 +81,8 @@ public class FunctionActionItem extends ActionItem { public static final int REGISTER_GLOBAL = 6; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.addAll(actions); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(actions); } public FunctionActionItem() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java index e008ed166..76a06da9b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.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.action.model; import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -40,10 +42,9 @@ public class GetMemberActionItem extends ActionItem { public final GraphTargetItem memberName; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(object); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(memberName); } public GetMemberActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, GraphTargetItem memberName) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetPropertyActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetPropertyActionItem.java index 83ac0badc..9289376f3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetPropertyActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetPropertyActionItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -41,10 +42,8 @@ public class GetPropertyActionItem extends ActionItem { public int propertyIndex; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(target); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(target); } public GetPropertyActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem target, int propertyIndex) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java index a5b5c6f0e..946ae9fec 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -40,11 +42,9 @@ public class GetURL2ActionItem extends ActionItem { public int sendVarsMethod; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(urlString); - ret.add(targetString); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(urlString); + visitor.visit(targetString); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java index d0836653d..8a0dd5608 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -54,10 +55,8 @@ public class GetVariableActionItem extends ActionItem { } @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(name); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(name); } public GetVariableActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem value) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java index e14d36a3c..44cf1ceab 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -24,6 +25,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -44,10 +46,8 @@ public class GotoFrame2ActionItem extends ActionItem { public int sceneBias; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(frame); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(frame); } public GotoFrame2ActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem frame, boolean sceneBiasFlag, boolean playFlag, int sceneBias) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/IncrementActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/IncrementActionItem.java index 52cd82a94..195a620cd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/IncrementActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/IncrementActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -37,10 +39,8 @@ public class IncrementActionItem extends ActionItem { public GraphTargetItem object; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(object); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); } public IncrementActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/InitArrayActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/InitArrayActionItem.java index 491acdd71..ca8bcb53f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/InitArrayActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/InitArrayActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -36,10 +38,8 @@ public class InitArrayActionItem extends ActionItem { public List values; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.addAll(values); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(values); } public InitArrayActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, List values) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/InitObjectActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/InitObjectActionItem.java index 20a354c54..162378250 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/InitObjectActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/InitObjectActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.decompiler.graph.model.TernarOpItem; @@ -40,11 +42,9 @@ public class InitObjectActionItem extends ActionItem { public List values; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.addAll(names); - ret.addAll(values); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(names); + visitor.visitAll(values); } public InitObjectActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, List names, List values) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java index 90ae616bd..459621654 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -39,11 +41,9 @@ public class LoadMovieActionItem extends ActionItem { private final int method; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(urlString); - ret.add(targetString); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(urlString); + visitor.visit(targetString); } public LoadMovieActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem urlString, GraphTargetItem targetString, int method) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java index cac81e694..6e18da7f1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -41,11 +43,9 @@ public class LoadMovieNumActionItem extends ActionItem { private final int method; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(urlString); - ret.add(num); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(urlString); + visitor.visit(num); } public LoadMovieNumActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem urlString, GraphTargetItem num, int method) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java index 5cf92aef5..48448bb36 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -39,11 +41,9 @@ public class LoadVariablesActionItem extends ActionItem { private final int method; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(urlString); - ret.add(targetString); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(urlString); + visitor.visit(targetString); } public LoadVariablesActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem urlString, GraphTargetItem targetString, int method) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java index 739042361..37c035455 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -41,11 +43,9 @@ public class LoadVariablesNumActionItem extends ActionItem { private final int method; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(urlString); - ret.add(num); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(urlString); + visitor.visit(num); } public LoadVariablesNumActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem urlString, GraphTargetItem num, int method) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/MBStringExtractActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/MBStringExtractActionItem.java index 12d26322d..aa3f09e47 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/MBStringExtractActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/MBStringExtractActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -39,12 +41,10 @@ public class MBStringExtractActionItem extends ActionItem { public GraphTargetItem count; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(value); - ret.add(index); - ret.add(count); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(value); + visitor.visit(index); + visitor.visit(count); } public MBStringExtractActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem value, GraphTargetItem index, GraphTargetItem count) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NewMethodActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NewMethodActionItem.java index 6453c77a2..8503cd897 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NewMethodActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NewMethodActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -41,11 +43,9 @@ public class NewMethodActionItem extends ActionItem { public List arguments; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(scriptObject); - ret.addAll(arguments); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(scriptObject); + visitor.visitAll(arguments); } public NewMethodActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scriptObject, GraphTargetItem methodName, List arguments) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NewObjectActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NewObjectActionItem.java index b7383caab..6e2b28aba 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NewObjectActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NewObjectActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -38,11 +40,9 @@ public class NewObjectActionItem extends ActionItem { public List arguments; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(objectName); - ret.addAll(arguments); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(objectName); + visitor.visitAll(arguments); } public NewObjectActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem objectName, List arguments) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PostDecrementActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PostDecrementActionItem.java index 5f5283766..73fda9490 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PostDecrementActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PostDecrementActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -30,6 +31,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -46,10 +48,8 @@ public class PostDecrementActionItem extends ActionItem implements SetTypeAction private int tempRegister = -1; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(object); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); } public PostDecrementActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PostIncrementActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PostIncrementActionItem.java index d4ddf7a4b..a291af298 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PostIncrementActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PostIncrementActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -30,6 +31,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -46,10 +48,8 @@ public class PostIncrementActionItem extends ActionItem implements SetTypeAction private int tempRegister = -1; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(object); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); } public PostIncrementActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java index 5ed5e9214..124a7375a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -39,11 +41,9 @@ public class PrintActionItem extends ActionItem { private final GraphTargetItem boundingBox; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(target); - ret.add(boundingBox); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(target); + visitor.visit(boundingBox); } public PrintActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem target, GraphTargetItem boundingBox) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java index e740cb250..364d0559c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -39,11 +41,9 @@ public class PrintAsBitmapActionItem extends ActionItem { private final GraphTargetItem boundingBox; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(target); - ret.add(boundingBox); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(target); + visitor.visit(boundingBox); } public PrintAsBitmapActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem target, GraphTargetItem boundingBox) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java index eb1615351..89927f59d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -39,11 +41,9 @@ public class PrintAsBitmapNumActionItem extends ActionItem { private final GraphTargetItem boundingBox; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(num); - ret.add(boundingBox); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(num); + visitor.visit(boundingBox); } public PrintAsBitmapNumActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem num, GraphTargetItem boundingBox) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java index dc41d0f7f..32f1af449 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -39,11 +41,9 @@ public class PrintNumActionItem extends ActionItem { private final GraphTargetItem boundingBox; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(num); - ret.add(boundingBox); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(num); + visitor.visit(boundingBox); } public PrintNumActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem num, GraphTargetItem boundingBox) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java index 2fcdac32b..d529545e6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.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.action.model; import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; @@ -28,6 +29,7 @@ import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -46,11 +48,10 @@ public class SetMemberActionItem extends ActionItem implements SetTypeActionItem private int tempRegister = -1; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(object); - ret.add(value); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(object); + visitor.visit(objectName); + visitor.visit(value); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java index d4f934876..2a40e9577 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java @@ -12,12 +12,14 @@ * 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.action.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -59,8 +61,8 @@ public class TemporaryRegister extends ActionItem { } @Override - public List getAllSubItems() { - return value.getAllSubItems(); + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(value); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java index 3685c64bc..0acfd7f54 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -36,10 +38,8 @@ public class UnLoadMovieActionItem extends ActionItem { private final GraphTargetItem targetString; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(targetString); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(targetString); } public UnLoadMovieActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem targetString) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java index 458f54870..fc99ed3c7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.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.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -25,6 +26,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -39,10 +41,8 @@ public class UnLoadMovieNumActionItem extends ActionItem { private final GraphTargetItem num; @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(num); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(num); } public UnLoadMovieNumActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem num) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java index deb356b04..a8ce45990 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java @@ -101,7 +101,7 @@ public class ActionWaitForFrame extends Action implements ActionStore { @Override public void translate(boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) throws InterruptedException { - GraphTargetItem frameTi = new DirectValueActionItem(null, null, 0, new Long(frame), new ArrayList<>()); + GraphTargetItem frameTi = new DirectValueActionItem(null, null, 0, (Long)((long)frame), new ArrayList<>()); List body = ActionGraph.translateViaGraph(insideDoInitAction, regNames, variables, functions, skipped, SWF.DEFAULT_VERSION, staticOperation, path); output.add(new IfFrameLoadedActionItem(frameTi, body, this, lineStartAction)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index 5f656617e..407a9933d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -69,92 +69,97 @@ public final class Configuration { @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") - public static final ConfigurationItem openMultipleFiles = null; + public static ConfigurationItem openMultipleFiles = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") - public static final ConfigurationItem decompile = null; + public static ConfigurationItem decompile = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("decompilation") - public static final ConfigurationItem parallelSpeedUp = null; + public static ConfigurationItem parallelSpeedUp = null; @ConfigurationDefaultInt(10) @ConfigurationCategory("decompilation") - private static final ConfigurationItem parallelSpeedUpThreadCount = null; + private static ConfigurationItem parallelSpeedUpThreadCount = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem autoDeobfuscate = null; + public static ConfigurationItem autoDeobfuscate = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("") - public static final ConfigurationItem cacheOnDisk = null; + public static ConfigurationItem cacheOnDisk = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("") - public static final ConfigurationItem cacheImages = null; + public static ConfigurationItem cacheImages = null; + /* @ConfigurationDefaultBoolean(false) @ConfigurationCategory("display") - public static final ConfigurationItem internalFlashViewer = null; + public static ConfigurationItem internalFlashViewer = null; + */ + @ConfigurationDefaultBoolean(false) + @ConfigurationInternal + public static ConfigurationItem useAdobeFlashPlayerForPreviews = null; @ConfigurationDefaultInt(1000) @ConfigurationCategory("display") - public static final ConfigurationItem setMovieDelay = null; + public static ConfigurationItem setMovieDelay = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("display") - public static final ConfigurationItem dumpView = null; + public static ConfigurationItem dumpView = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("display") - public static final ConfigurationItem useHexColorFormat = null; + public static ConfigurationItem useHexColorFormat = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("display") - public static final ConfigurationItem showOldTextDuringTextEditing = null; + public static ConfigurationItem showOldTextDuringTextEditing = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("ui") - public static final ConfigurationItem gotoMainClassOnStartup = null; + public static ConfigurationItem gotoMainClassOnStartup = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem autoRenameIdentifiers = null; + public static ConfigurationItem autoRenameIdentifiers = null; @ConfigurationDefaultBoolean(false) - public static final ConfigurationItem offeredAssociation = null; + public static ConfigurationItem offeredAssociation = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem decimalAddress = null; + public static ConfigurationItem decimalAddress = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem showAllAddresses = null; + public static ConfigurationItem showAllAddresses = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("display") - public static final ConfigurationItem useFrameCache = null; + public static ConfigurationItem useFrameCache = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") - public static final ConfigurationItem useRibbonInterface = null; + public static ConfigurationItem useRibbonInterface = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("export") - public static final ConfigurationItem overwriteExistingFiles = null; + public static ConfigurationItem overwriteExistingFiles = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("export") - public static final ConfigurationItem openFolderAfterFlaExport = null; + public static ConfigurationItem openFolderAfterFlaExport = null; @ConfigurationCategory("export") - public static final ConfigurationItem overrideTextExportFileName = null; + public static ConfigurationItem overrideTextExportFileName = null; @ConfigurationDefaultBoolean(false) - public static final ConfigurationItem useDetailedLogging = null; + public static ConfigurationItem useDetailedLogging = null; /** * Debug mode = throwing an error when comparing original file and @@ -162,56 +167,56 @@ public final class Configuration { */ @ConfigurationDefaultBoolean(false) @ConfigurationInternal - public static final ConfigurationItem _debugMode = null; + public static ConfigurationItem _debugMode = null; @ConfigurationDefaultBoolean(false) @ConfigurationInternal - public static final ConfigurationItem _showDebugMenu = null; + public static ConfigurationItem _showDebugMenu = null; /** * Turn off resolving constants in ActionScript 2 */ @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") - public static final ConfigurationItem resolveConstants = null; + public static ConfigurationItem resolveConstants = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") @ConfigurationInternal - public static final ConfigurationItem showFileOffsetInPcodeHex = null; + public static ConfigurationItem showFileOffsetInPcodeHex = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") @ConfigurationInternal - public static final ConfigurationItem showOriginalBytesInPcodeHex = null; + public static ConfigurationItem showOriginalBytesInPcodeHex = null; /** * Limit of code subs (for obfuscated code) */ @ConfigurationDefaultInt(500) @ConfigurationCategory("limit") - public static final ConfigurationItem sublimiter = null; + public static ConfigurationItem sublimiter = null; /** * Total export timeout in seconds */ @ConfigurationDefaultInt(30 * 60) @ConfigurationCategory("limit") - public static final ConfigurationItem exportTimeout = null; + public static ConfigurationItem exportTimeout = null; /** * Decompilation timeout in seconds for a single file */ @ConfigurationDefaultInt(5 * 60) @ConfigurationCategory("limit") - public static final ConfigurationItem decompilationTimeoutFile = null; + public static ConfigurationItem decompilationTimeoutFile = null; /** * AS1/2 deobfuscator execution limit (max number of instructions processed) */ @ConfigurationDefaultInt(10000) @ConfigurationCategory("limit") - public static final ConfigurationItem as12DeobfuscatorExecutionLimit = null; + public static ConfigurationItem as12DeobfuscatorExecutionLimit = null; /** * Using parameter names in decompiling may cause problems because official @@ -219,430 +224,430 @@ public final class Configuration { */ @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem paramNamesEnable = null; + public static ConfigurationItem paramNamesEnable = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") - public static final ConfigurationItem displayFileName = null; + public static ConfigurationItem displayFileName = null; @ConfigurationDefaultBoolean(false) @ConfigurationInternal - public static final ConfigurationItem _debugCopy = null; + public static ConfigurationItem _debugCopy = null; @ConfigurationDefaultBoolean(false) - public static final ConfigurationItem dumpTags = null; + public static ConfigurationItem dumpTags = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("export") - public static final ConfigurationItem setFFDecVersionInExportedFont = null; + public static ConfigurationItem setFFDecVersionInExportedFont = null; @ConfigurationDefaultInt(60) @ConfigurationCategory("limit") - public static final ConfigurationItem decompilationTimeoutSingleMethod = null; + public static ConfigurationItem decompilationTimeoutSingleMethod = null; @ConfigurationDefaultInt(1) - public static final ConfigurationItem lastRenameType = null; + public static ConfigurationItem lastRenameType = null; @ConfigurationDefaultString(".") @ConfigurationDirectory - public static final ConfigurationItem lastSaveDir = null; + public static ConfigurationItem lastSaveDir = null; @ConfigurationDefaultString(".") @ConfigurationDirectory - public static final ConfigurationItem lastOpenDir = null; + public static ConfigurationItem lastOpenDir = null; @ConfigurationDefaultString(".") @ConfigurationDirectory - public static final ConfigurationItem lastExportDir = null; + public static ConfigurationItem lastExportDir = null; @ConfigurationDefaultString("en") @ConfigurationCategory("ui") - public static final ConfigurationItem locale = null; + public static ConfigurationItem locale = null; @ConfigurationDefaultString("_loc%d_") @ConfigurationCategory("script") - public static final ConfigurationItem registerNameFormat = null; + public static ConfigurationItem registerNameFormat = null; @ConfigurationDefaultInt(15) - public static final ConfigurationItem maxRecentFileCount = null; + public static ConfigurationItem maxRecentFileCount = null; - public static final ConfigurationItem recentFiles = null; + public static ConfigurationItem recentFiles = null; - public static final ConfigurationItem> fontPairingMap = null; + public static ConfigurationItem> fontPairingMap = null; - public static final ConfigurationItem> swfSpecificConfigs = null; + public static ConfigurationItem> swfSpecificConfigs = null; @ConfigurationDefaultCalendar(0) - public static final ConfigurationItem lastUpdatesCheckDate = null; + public static ConfigurationItem lastUpdatesCheckDate = null; @ConfigurationDefaultInt(1000) @ConfigurationName("gui.window.width") - public static final ConfigurationItem guiWindowWidth = null; + public static ConfigurationItem guiWindowWidth = null; @ConfigurationDefaultInt(700) @ConfigurationName("gui.window.height") - public static final ConfigurationItem guiWindowHeight = null; + public static ConfigurationItem guiWindowHeight = null; @ConfigurationDefaultBoolean(false) @ConfigurationName("gui.window.maximized.horizontal") - public static final ConfigurationItem guiWindowMaximizedHorizontal = null; + public static ConfigurationItem guiWindowMaximizedHorizontal = null; @ConfigurationDefaultBoolean(false) @ConfigurationName("gui.window.maximized.vertical") - public static final ConfigurationItem guiWindowMaximizedVertical = null; + public static ConfigurationItem guiWindowMaximizedVertical = null; @ConfigurationDefaultDouble(1) @ConfigurationCategory("display") @ConfigurationName("gui.fontSizeMultiplier") - public static final ConfigurationItem guiFontSizeMultiplier = null; + public static ConfigurationItem guiFontSizeMultiplier = null; // font used in AS1/2/3 source area, P-Code area, Define Text area and in Metadata area @ConfigurationDefaultString("Monospaced-Plain-12") @ConfigurationCategory("display") @ConfigurationName("gui.sourceFont") - public static final ConfigurationItem sourceFontString = null; + public static ConfigurationItem sourceFontString = null; @ConfigurationDefaultDouble(0.5) @ConfigurationName("gui.avm2.splitPane.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiAvm2SplitPaneDividerLocationPercent = null; + public static ConfigurationItem guiAvm2SplitPaneDividerLocationPercent = null; @ConfigurationDefaultDouble(0.5) @ConfigurationName("gui.actionSplitPane.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiActionSplitPaneDividerLocationPercent = null; + public static ConfigurationItem guiActionSplitPaneDividerLocationPercent = null; @ConfigurationDefaultDouble(0.5) @ConfigurationName("gui.previewSplitPane.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiPreviewSplitPaneDividerLocationPercent = null; + public static ConfigurationItem guiPreviewSplitPaneDividerLocationPercent = null; @ConfigurationDefaultDouble(0.3333333333) @ConfigurationName("gui.splitPane1.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiSplitPane1DividerLocationPercent = null; + public static ConfigurationItem guiSplitPane1DividerLocationPercent = null; @ConfigurationDefaultDouble(0.6) @ConfigurationName("gui.splitPane2.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiSplitPane2DividerLocationPercent = null; + public static ConfigurationItem guiSplitPane2DividerLocationPercent = null; @ConfigurationDefaultDouble(0.5) @ConfigurationName("gui.timeLineSplitPane.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiTimeLineSplitPaneDividerLocationPercent = null; + public static ConfigurationItem guiTimeLineSplitPaneDividerLocationPercent = null; @ConfigurationDefaultDouble(0.6) @ConfigurationName("gui.dump.splitPane.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiDumpSplitPaneDividerLocationPercent = null; + public static ConfigurationItem guiDumpSplitPaneDividerLocationPercent = null; @ConfigurationDefaultString("com.jpexs.decompiler.flash.gui.OceanicSkin") @ConfigurationName("gui.skin") @ConfigurationCategory("ui") - public static final ConfigurationItem guiSkin = null; + public static ConfigurationItem guiSkin = null; @ConfigurationDefaultInt(3) @ConfigurationCategory("export") - public static final ConfigurationItem saveAsExeScaleMode = null; + public static ConfigurationItem saveAsExeScaleMode = null; @ConfigurationCategory("export") - public static final ConfigurationItem exeExportMode = null; + public static ConfigurationItem exeExportMode = null; @ConfigurationDefaultInt(1024 * 1024/*1MiB*/) @ConfigurationCategory("limit") - public static final ConfigurationItem syntaxHighlightLimit = null; + public static ConfigurationItem syntaxHighlightLimit = null; - public static final ConfigurationItem guiFontPreviewSampleText = null; + public static ConfigurationItem guiFontPreviewSampleText = null; @ConfigurationName("gui.fontPreviewWindow.width") - public static final ConfigurationItem guiFontPreviewWidth = null; + public static ConfigurationItem guiFontPreviewWidth = null; @ConfigurationName("gui.fontPreviewWindow.height") - public static final ConfigurationItem guiFontPreviewHeight = null; + public static ConfigurationItem guiFontPreviewHeight = null; @ConfigurationName("gui.fontPreviewWindow.posX") - public static final ConfigurationItem guiFontPreviewPosX = null; + public static ConfigurationItem guiFontPreviewPosX = null; @ConfigurationName("gui.fontPreviewWindow.posY") - public static final ConfigurationItem guiFontPreviewPosY = null; + public static ConfigurationItem guiFontPreviewPosY = null; @ConfigurationDefaultInt(3) @ConfigurationName("formatting.indent.size") @ConfigurationCategory("format") - public static final ConfigurationItem indentSize = null; + public static ConfigurationItem indentSize = null; @ConfigurationDefaultBoolean(false) @ConfigurationName("formatting.indent.useTabs") @ConfigurationCategory("format") - public static final ConfigurationItem indentUseTabs = null; + public static ConfigurationItem indentUseTabs = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("format") - public static final ConfigurationItem beginBlockOnNewLine = null; + public static ConfigurationItem beginBlockOnNewLine = null; @ConfigurationDefaultInt(1000 * 60 * 60 * 24) @ConfigurationCategory("update") @ConfigurationName("check.updates.delay") - public static final ConfigurationItem checkForUpdatesDelay = null; + public static ConfigurationItem checkForUpdatesDelay = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("update") @ConfigurationName("check.updates.stable") - public static final ConfigurationItem checkForUpdatesStable = null; + public static ConfigurationItem checkForUpdatesStable = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("update") @ConfigurationName("check.updates.nightly") - public static final ConfigurationItem checkForUpdatesNightly = null; + public static ConfigurationItem checkForUpdatesNightly = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("update") @ConfigurationName("check.updates.enabled") - public static final ConfigurationItem checkForUpdatesAuto = null; + public static ConfigurationItem checkForUpdatesAuto = null; @ConfigurationCategory("update") - public static final ConfigurationItem updateProxyAddress = null; + public static ConfigurationItem updateProxyAddress = null; @ConfigurationDefaultString("") @ConfigurationName("export.formats") - public static final ConfigurationItem lastSelectedExportFormats = null; + public static ConfigurationItem lastSelectedExportFormats = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("export") - public static final ConfigurationItem textExportSingleFile = null; + public static ConfigurationItem textExportSingleFile = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("export") - public static final ConfigurationItem scriptExportSingleFile = null; + public static ConfigurationItem scriptExportSingleFile = null; @ConfigurationDefaultString("--- SEPARATOR ---") @ConfigurationCategory("export") - public static final ConfigurationItem textExportSingleFileSeparator = null; + public static ConfigurationItem textExportSingleFileSeparator = null; @ConfigurationDefaultString("--- RECORDSEPARATOR ---") @ConfigurationCategory("export") - public static final ConfigurationItem textExportSingleFileRecordSeparator = null; + public static ConfigurationItem textExportSingleFileRecordSeparator = null; @ConfigurationCategory("import") - public static final ConfigurationItem textImportResizeTextBoundsMode = null; + public static ConfigurationItem textImportResizeTextBoundsMode = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("import") - public static final ConfigurationItem resetLetterSpacingOnTextImport = null; + public static ConfigurationItem resetLetterSpacingOnTextImport = null; @ConfigurationDefaultBoolean(true) @ConfigurationName("warning.experimental.as12edit") @ConfigurationCategory("script") - public static final ConfigurationItem warningExperimentalAS12Edit = null; + public static ConfigurationItem warningExperimentalAS12Edit = null; @ConfigurationDefaultBoolean(true) @ConfigurationName("warning.experimental.as3edit") @ConfigurationCategory("script") - public static final ConfigurationItem warningExperimentalAS3Edit = null; + public static ConfigurationItem warningExperimentalAS3Edit = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") - public static final ConfigurationItem showCodeSavedMessage = null; + public static ConfigurationItem showCodeSavedMessage = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") - public static final ConfigurationItem showTraitSavedMessage = null; + public static ConfigurationItem showTraitSavedMessage = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("export") - public static final ConfigurationItem packJavaScripts = null; + public static ConfigurationItem packJavaScripts = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("export") - public static final ConfigurationItem textExportExportFontFace = null; + public static ConfigurationItem textExportExportFontFace = null; @ConfigurationDefaultInt(128) - public static final ConfigurationItem lzmaFastBytes = null; + public static ConfigurationItem lzmaFastBytes = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem showMethodBodyId = null; + public static ConfigurationItem showMethodBodyId = null; @ConfigurationDefaultDouble(1.0) @ConfigurationName("export.zoom") - public static final ConfigurationItem lastSelectedExportZoom = null; + public static ConfigurationItem lastSelectedExportZoom = null; - public static final ConfigurationItem pluginPath = null; + public static ConfigurationItem pluginPath = null; @ConfigurationDefaultInt(55556) @ConfigurationCategory("script") - public static final ConfigurationItem debuggerPort = null; + public static ConfigurationItem debuggerPort = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem randomDebuggerPackage = null; + public static ConfigurationItem randomDebuggerPackage = null; @ConfigurationDefaultBoolean(true) - public static final ConfigurationItem displayDebuggerInfo = null; + public static ConfigurationItem displayDebuggerInfo = null; @ConfigurationDefaultString("debugConsole") - public static final ConfigurationItem lastDebuggerReplaceFunction = null; + public static ConfigurationItem lastDebuggerReplaceFunction = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") - public static final ConfigurationItem getLocalNamesFromDebugInfo = null; + public static ConfigurationItem getLocalNamesFromDebugInfo = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("ui") - public static final ConfigurationItem tagTreeShowEmptyFolders = null; + public static ConfigurationItem tagTreeShowEmptyFolders = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("ui") - public static final ConfigurationItem autoLoadEmbeddedSwfs = null; + public static ConfigurationItem autoLoadEmbeddedSwfs = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") - public static final ConfigurationItem showCloseConfirmation = null; + public static ConfigurationItem showCloseConfirmation = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("ui") - public static final ConfigurationItem editorMode = null; + public static ConfigurationItem editorMode = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("ui") - public static final ConfigurationItem autoSaveTagModifications = null; + public static ConfigurationItem autoSaveTagModifications = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") - public static final ConfigurationItem saveSessionOnExit = null; + public static ConfigurationItem saveSessionOnExit = null; - public static final ConfigurationItem lastSessionFiles = null; + public static ConfigurationItem lastSessionFiles = null; - public static final ConfigurationItem lastSessionFileTitles = null; + public static ConfigurationItem lastSessionFileTitles = null; - public static final ConfigurationItem lastSessionSelection = null; + public static ConfigurationItem lastSessionSelection = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") - public static final ConfigurationItem loopMedia = null; + public static ConfigurationItem loopMedia = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") - public static final ConfigurationItem allowOnlyOneInstance = null; + public static ConfigurationItem allowOnlyOneInstance = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem ignoreCLikePackages = null; + public static ConfigurationItem ignoreCLikePackages = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem smartNumberFormatting = null; + public static ConfigurationItem smartNumberFormatting = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem enableScriptInitializerDisplay = null; + public static ConfigurationItem enableScriptInitializerDisplay = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("ui") - public static final ConfigurationItem autoOpenLoadedSWFs = null; + public static ConfigurationItem autoOpenLoadedSWFs = null; @ConfigurationDefaultString("") @ConfigurationCategory("paths") @ConfigurationFile - public static final ConfigurationItem playerLocation = null; + public static ConfigurationItem playerLocation = null; @ConfigurationDefaultString("") @ConfigurationCategory("paths") @ConfigurationFile - public static final ConfigurationItem playerDebugLocation = null; + public static ConfigurationItem playerDebugLocation = null; @ConfigurationDefaultString("") @ConfigurationCategory("paths") @ConfigurationFile(".*\\.swc$") - public static final ConfigurationItem playerLibLocation = null; + public static ConfigurationItem playerLibLocation = null; @ConfigurationDefaultString("") @ConfigurationCategory("paths") @ConfigurationDirectory - public static final ConfigurationItem flexSdkLocation = null; + public static ConfigurationItem flexSdkLocation = null; @ConfigurationDefaultDouble(0.7) @ConfigurationName("gui.avm2.splitPane.vars.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiAvm2VarsSplitPaneDividerLocationPercent = null; + public static ConfigurationItem guiAvm2VarsSplitPaneDividerLocationPercent = null; @ConfigurationDefaultDouble(0.7) @ConfigurationName("gui.action.splitPane.vars.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiActionVarsSplitPaneDividerLocationPercent = null; + public static ConfigurationItem guiActionVarsSplitPaneDividerLocationPercent = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") - public static final ConfigurationItem debugHalt = null; + public static ConfigurationItem debugHalt = null; @ConfigurationDefaultBoolean(true) @ConfigurationName("warning.svgImport") @ConfigurationCategory("import") - public static final ConfigurationItem warningSvgImport = null; + public static ConfigurationItem warningSvgImport = null; @ConfigurationDefaultBoolean(true) @ConfigurationName("warning.hexViewNotUpToDate") @ConfigurationCategory("import") - public static final ConfigurationItem warningHexViewNotUpToDate = null; + public static ConfigurationItem warningHexViewNotUpToDate = null; @ConfigurationDefaultBoolean(false) @ConfigurationName("shapeImport.useNonSmoothedFill") @ConfigurationCategory("import") - public static final ConfigurationItem shapeImportUseNonSmoothedFill = null; + public static ConfigurationItem shapeImportUseNonSmoothedFill = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("display") @ConfigurationName("internalFlashViewer.execute.as12") - public static final ConfigurationItem internalFlashViewerExecuteAs12 = null; + public static ConfigurationItem internalFlashViewerExecuteAs12 = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem displayDupInstructions = null; + public static ConfigurationItem displayDupInstructions = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") - public static final ConfigurationItem useRegExprLiteral = null; + public static ConfigurationItem useRegExprLiteral = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") - public static final ConfigurationItem handleSkinPartsAutomatically = null; + public static ConfigurationItem handleSkinPartsAutomatically = null; @ConfigurationDefaultBoolean(false) //@ConfigurationCategory("script") @ConfigurationInternal - public static final ConfigurationItem _ignoreAdditionalFlexClasses = null; + public static ConfigurationItem _ignoreAdditionalFlexClasses = null; @ConfigurationDefaultBoolean(false) //@ConfigurationCategory("script") @ConfigurationInternal - public static final ConfigurationItem _enableFlexExport = null; + public static ConfigurationItem _enableFlexExport = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem simplifyExpressions = null; + public static ConfigurationItem simplifyExpressions = null; @ConfigurationDefaultBoolean(false) @ConfigurationInternal - public static final ConfigurationItem hwAcceleratedGraphics = null; + public static ConfigurationItem hwAcceleratedGraphics = null; @ConfigurationDefaultDouble(0.85) @ConfigurationName("gui.avm2.splitPane.docs.dividerLocationPercent") @ConfigurationInternal - public static final ConfigurationItem guiAvm2DocsSplitPaneDividerLocationPercent = null; + public static ConfigurationItem guiAvm2DocsSplitPaneDividerLocationPercent = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") - public static final ConfigurationItem useFlexAs3Compiler = null; + public static ConfigurationItem useFlexAs3Compiler = null; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") - public static final ConfigurationItem showSetAdvanceValuesMessage = null; + public static ConfigurationItem showSetAdvanceValuesMessage = null; @ConfigurationDefaultString("") @ConfigurationCategory("paths") @ConfigurationFile - public static final ConfigurationItem graphVizDotLocation = null; + public static ConfigurationItem graphVizDotLocation = null; private enum OSId { WINDOWS, OSX, UNIX @@ -865,10 +870,12 @@ public final class Configuration { for (Entry entry : getConfigurationFields().entrySet()) { String name = entry.getKey(); Field field = entry.getValue(); + /* Unsupported in java 9+ // remove final modifier from field Field modifiersField = field.getClass().getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); + */ Object defaultValue = getDefaultValue(field); Object value = null; @@ -888,7 +895,7 @@ public final class Configuration { field.set(null, new ConfigurationItem(name, defaultValue)); } } - } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException ex) { + } catch (IllegalArgumentException | IllegalAccessException | SecurityException ex) { // Reflection exceptions. This should never happen throw new Error(ex.getMessage()); } catch (IOException ex) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java index 95da8dcf9..e2639a812 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.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.exporters; import com.google.typography.font.sfntly.Font; @@ -46,7 +47,9 @@ import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -175,15 +178,20 @@ public class FontExporter { f.setDescender(value); } - int glyphCount = 0; - for (int i = 0; i < shapes.size(); i++) { - - //if there are more glyphs for one char (in some weird fonts), use the last glyph + List reallyExportedGlyphs = new ArrayList<>(); + Set processedCharacters = new HashSet<>(); + //if there are more glyphs for one char (in some weird fonts), use the last glyph + for (int i = shapes.size() - 1; i >= 0; i--) { char c = t.glyphToChar(i); - while (i + 1 < shapes.size() && t.glyphToChar(i + 1) == c) { - i++; + if (!processedCharacters.contains((Character) c)) { + reallyExportedGlyphs.add(0, (Integer) i); + processedCharacters.add((Character) c); } - + } + int glyphCount = 0; + for (Integer ii : reallyExportedGlyphs) { + int i = (int) ii; + char c = t.glyphToChar(i); SHAPE s = shapes.get(i); final List contours = new ArrayList<>(); PathExporter seb = new PathExporter(swf, s, null) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/amf/amf3/Amf3Exporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/amf/amf3/Amf3Exporter.java index 832c31763..a3219324d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/amf/amf3/Amf3Exporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/amf/amf3/Amf3Exporter.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.exporters.amf.amf3; import com.jpexs.decompiler.flash.amf.amf3.WithSubValues; @@ -164,7 +165,7 @@ public class Amf3Exporter { if (serData == null) { ret.append(indent(level + 1)).append("\"serialized\": unknown").append(newLine); } else { - ret.append(indent(level + 1)).append("\"serialized\": \"").append(javax.xml.bind.DatatypeConverter.printHexBinary(serData)).append("\",").append(newLine); + ret.append(indent(level + 1)).append("\"serialized\": \"").append(Helper.byteArrayToHex(serData)).append("\",").append(newLine); if (!ot.getSerializedMembers().isEmpty()) { ret.append(indent(level + 1)).append("\"unserializedMembers\": {").append(newLine); { @@ -289,7 +290,7 @@ public class Amf3Exporter { return "{" + newLine + indent(level + 1) + "\"type\": \"ByteArray\"," + newLine + addId - + indent(level + 1) + "\"value\": \"" + javax.xml.bind.DatatypeConverter.printHexBinary(data) + "\"" + newLine + + indent(level + 1) + "\"value\": \"" + Helper.byteArrayToHex(data) + "\"" + newLine + indent(level) + "}"; } else if (object instanceof DateType) { DateType dt = (DateType) object; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java index 1d575dd8a..466b75160 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java @@ -131,6 +131,7 @@ public class PcodeGraphVizExporter { } } String labelStr = blkCodeBuilder.toString(); + labelStr = labelStr.replace("\\", "\\\\"); labelStr = labelStr.replace("\"", "\\\""); labelStr = labelStr.replace("\r\n", "\\l"); String partBlockName = getBlockName(graphSource, part); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/FontHelper.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/FontHelper.java index c0626f8e1..3e77cb84b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/FontHelper.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/FontHelper.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.helpers; import java.awt.Canvas; @@ -43,10 +44,11 @@ import java.util.Map; */ public class FontHelper { + /*NOT AVAILABLE SINCE JAVA9+ private static Object getFontManager() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class clFmFactory = Class.forName("sun.font.FontManagerFactory"); return clFmFactory.getDeclaredMethod("getInstance").invoke(null); - } + }*/ /** * Gets all available fonts in the system @@ -57,6 +59,7 @@ public class FontHelper { Map> ret = new HashMap<>(); Font[] fonts = null; + /*Refreshing list of installed fonts - reflection access NOT AVAILABLE SINCE JAVA9+ try { Object fm = getFontManager(); @@ -84,7 +87,7 @@ public class FontHelper { } catch (Throwable ex) { // ignore } - + */ if (fonts == null) { fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); } @@ -166,7 +169,8 @@ public class FontHelper { * @return */ public static List getFontKerningPairs(Font font, int size) { - File fontFile = getFontFile(font); + //NOT AVAILABLE IN java9+ + /*File fontFile = getFontFile(font); if (fontFile != null && fontFile.getName().toLowerCase().endsWith(".ttf")) { KerningLoader k = new KerningLoader(); try { @@ -187,7 +191,8 @@ public class FontHelper { ret.addAll(getFontKerningPairsOneChar(availableChars, font, c1)); } - return ret; + return ret;*/ + return new ArrayList<>(); } public static float getFontAdvance(Font font, char ch) { @@ -289,9 +294,10 @@ public class FontHelper { } } - private static Object getFont2d(Font f) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + //NOT AVAILABLE IN java9+ + /*private static Object getFont2d(Font f) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Object fm = getFontManager(); - return Class.forName("sun.font.FontManager").getDeclaredMethod("findFont2D", String.class, int.class, int.class).invoke(fm, f.getFontName(), f.getStyle(), 2/*LOGICAL_FALLBACK*/); + return Class.forName("sun.font.FontManager").getDeclaredMethod("findFont2D", String.class, int.class, int.class).invoke(fm, f.getFontName(), f.getStyle(), 2/*LOGICAL_FALLBACK*//*); } public static File getFontFile(Font f) { @@ -305,7 +311,7 @@ public class FontHelper { } catch (Throwable e) { return null; } - } + }*/ private static Map getFontGlyphToCharMap(Font f) { Map ret = new HashMap<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java index 14608dd59..41b6417f4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.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.helpers; import com.jpexs.decompiler.flash.configuration.Configuration; @@ -201,7 +202,12 @@ public class HighlightedTextWriter extends GraphTextWriter { HighlightData ndata = new HighlightData(); ndata.merge(itemPos.data); ndata.merge(data); - ndata.offset = src.getAddress() + pos; + long virtualAddress = src.getVirtualAddress(); + if (virtualAddress != -1) { + ndata.offset = virtualAddress + pos; + } else { + ndata.offset = src.getAddress() + pos; + } ndata.fileOffset = src.getFileOffset(); if (itemPos.startLineItem != null) { ndata.firstLineOffset = itemPos.startLineItem.getLineOffset(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SwfXmlImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SwfXmlImporter.java index b289fc995..e68d2d41e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SwfXmlImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SwfXmlImporter.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.importers; import com.jpexs.decompiler.flash.SWF; @@ -174,25 +175,25 @@ public class SwfXmlImporter { } private static void setFieldValue(Field field, Object obj, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException { - Field modifiersField = Field.class.getDeclaredField("modifiers"); + /* Unsupported in java 9+ Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); //Remove final attribute temporary (For example Multiname.namespace_set_index int originalModifiers = field.getModifiers(); if ((originalModifiers & Modifier.FINAL) > 0) { modifiersField.setInt(field, originalModifiers & ~Modifier.FINAL); - } + } field.setAccessible(true); int newModifiers = field.getModifiers(); - +*/ field.set(obj, value); - //Put final back in + /* //Put final back in if (originalModifiers != newModifiers) { modifiersField.setInt(field, originalModifiers); - } + }*/ } private void processElement(Element element, Object obj, SWF swf, Tag tag) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/amf/amf3/Amf3Importer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/amf/amf3/Amf3Importer.java index 07c9f9077..c24402c94 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/amf/amf3/Amf3Importer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/amf/amf3/Amf3Importer.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.importers.amf.amf3; import com.jpexs.decompiler.flash.amf.amf3.ListMap; @@ -29,6 +30,7 @@ import com.jpexs.decompiler.flash.amf.amf3.types.VectorObjectType; import com.jpexs.decompiler.flash.amf.amf3.types.VectorUIntType; import com.jpexs.decompiler.flash.amf.amf3.types.XmlDocType; import com.jpexs.decompiler.flash.amf.amf3.types.XmlType; +import com.jpexs.helpers.Helper; import java.io.IOException; import java.io.StringReader; import java.text.ParseException; @@ -418,7 +420,7 @@ public class Amf3Importer { break; case "ByteArray": try { - resultObject = new ByteArrayType(javax.xml.bind.DatatypeConverter.parseHexBinary(typedObject.getString("value"))); + resultObject = new ByteArrayType(Helper.hexToByteArray(typedObject.getString("value"))); } catch (IllegalArgumentException iex) { throw new Amf3ParseException("Invalid hex byte sequence", lexer.yyline()); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_zh.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_zh.properties index c7442ac7b..b4a33d569 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_zh.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_zh.properties @@ -13,6 +13,30 @@ # You should have received a copy of the GNU Lesser General Public # License along with this library. -trait.scriptinitializer = \u521d\u59cb\u5316\u811a\u672c -trait.instanceinitializer = \u521d\u59cb\u5316\u5b9e\u4f8b -trait.classinitializer = \u521d\u59cb\u5316\u7c7b +decompilationError = \u53cd\u7f16\u8bd1\u51fa\u9519 +decompilationError.timeout = \u5230\u8fbe\u8d85\u65f6\u9650\u5236 ({0}) +decompilationError.timeout.description = \u7531\u4e8e\u8d85\u65f6\u672a\u53cd\u7f16\u8bd1 +decompilationError.obfuscated = \u4ee3\u7801\u53ef\u80fd\u88ab\u52a0\u5bc6 +decompilationError.errorType = \u9519\u8bef\u7c7b\u578b +decompilationError.error.description = \u7531\u4e8e\u9519\u8bef\u672a\u53cd\u7f16\u8bd1 +decompilationError.actionCount = \u811a\u672c\u6570: +decompilationError.instructionCount = \u6307\u4ee4\u6570: + +decompilation.skipped = \u8df3\u8fc7\u53cd\u7f16\u8bd1 +decompilation.unsupported = \u4e0d\u53d7\u53cd\u7f16\u8bd1\u5668\u652f\u6301 +decompilerMark = \u53cd\u7f16\u8bd1\u6807\u8bb0 + +#example: 1 hour and 2 minutes +timeFormat.and = \u0020 +timeFormat.hour = \u65f6 +timeFormat.hours = \u65f6 +timeFormat.minute = \u5206 +timeFormat.minutes = \u5206 +timeFormat.second = \u79d2 +timeFormat.seconds = \u79d2 + +fontNotFound = \u65e0\u6cd5\u627e\u5230id\u4e3a%fontId%\u7684\u5b57\u4f53. + +trait.scriptinitializer = \u811a\u672c\u521d\u59cb\u5316\u5668 +trait.instanceinitializer = \u5b9e\u4f8b\u521d\u59cb\u5316\u5668 +trait.classinitializer = \u7c7b\u521d\u59cb\u5316\u5668 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS3_zh.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS3_zh.properties new file mode 100644 index 000000000..45b4dcc8b --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS3_zh.properties @@ -0,0 +1,1462 @@ +# Copyright (C) 2010-2016 JPEXS, All rights reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 3.0 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. + +#String for whole list generation +ui.list.heading = AVM2 \u6307\u4ee4\u5217\u8868 +ui.list.pageTitle = AVM2 \u6307\u4ee4\u5217\u8868 +ui.list.documentTitle = AVM2 \u6307\u4ee4\u5217\u8868 +ui.list.pageDescription = \u6240\u6709\u5df2\u77e5\u7684 AS3 - AVM2 \u6307\u4ee4\u53ca\u5176\u64cd\u4f5c\u6570\u548c\u5806\u6808\u503c\u7684\u5217\u8868 + +#various strings in UI: +ui.unknown = ??? +ui.stack = \u5806\u6808:\u0020 +ui.stack.before = ...,\u0020 +ui.stack.before.empty = ... +ui.stack.to = \u0020\u279e\u0020 +ui.flags = \u6807\u8bb0:\u0020 +ui.description = \u63cf\u8ff0:\u0020 +ui.filter.hide = \u9690\u85cf:\u0020 +ui.filter.byname = \u6309\u540d\u79f0\u67e5\u627e:\u0020 +ui.filter.order = \u6392\u5e8f:\u0020 +ui.filter.order.code = \u4ee3\u7801 +ui.filter.order.name = \u540d\u79f0 + + +#----------------------- Flags of the instructions +instructionFlag.undocumented = Undocumented +instructionFlag.unknownStack = Unknown stack +instructionFlag.es4NumericsMinor = ES4 numerics (ABC minor 17) +instructionFlag.floatMajor = Float values (ABC major 47) +instructionFlag.unknownOperands = Unknown operands +instructionFlag.noFlashPlayer = Not in standard Flash Player +instructionFlag.deprecated = Deprecated +instructionFlag.domainMemory = Domain memory operation + +#----------------------- Operand types +operandType.multinameIndex = Multiname index +operandType.multinameIndex.description = Index into multiname constant pool +operandType.multinameIndex.name = multinameIndex +operandType.multinameIndex.uiName = multiname + +operandType.argCount = Number of arguments +operandType.argCount.description = Number of following arguments +operandType.argCount.name = argCount +operandType.argCount.uiName = uint + + +operandType.methodIndex = Method index +operandType.methodIndex.description = Index of method in the ABC +operandType.methodIndex.name = methodIndex +operandType.methodIndex.uiName = methodIndex + +operandType.stringIndex = String index +operandType.stringIndex.description = Index into string values constant pool +operandType.stringIndex.name = stringIndex +operandType.stringIndex.uiName = string + + +operandType.debugType = Debug type +operandType.debugType.description = Type of debug information. Currently only value of 1 is used. +operandType.debugType.name = debugType +operandType.debugType.uiName = debugType + + +operandType.registerIndex = Register index +operandType.registerIndex.description = Index of a local register (0-255) +operandType.registerIndex.name = registerIndex +operandType.registerIndex.uiName = uint + +operandType.linenum = Line number +operandType.linenum.description = Line number of file +operandType.linenum.name = linenum +operandType.linenum.uiName = linenum + + +#similar as registerIndex, but U30 instead of U8 +operandType.localRegIndex = Register index +operandType.localRegIndex.description = Index of a local register +operandType.localRegIndex.name = localRegIndex +operandType.localRegIndex.uiName = uint + + +operandType.slotIndex = Slot index +operandType.slotIndex.description = Index of the slot on an object +operandType.slotIndex.name = slotIndex +operandType.slotIndex.uiName = slotIndex + +operandType.scopeIndex = Scope stack index +operandType.scopeIndex.description = Index in the scope stack +operandType.scopeIndex.name = scopeIndex +operandType.scopeIndex.uiName = scopeIndex + +operandType.offset = Offset +operandType.offset.description = Offset to other location +operandType.offset.name = offset +operandType.offset.uiName = labelName + +operandType.exceptionIndex = Exception index +operandType.exceptionIndex.description = Index of exception in current method info +operandType.exceptionIndex.name = exceptionIndex +operandType.exceptionIndex.uiName = exceptionIndex + + +operandType.classIndex = Class index +operandType.classIndex.description = Index of class in ABC +operandType.classIndex.name = classIndex +operandType.classIndex.uiName = classIndex + +operandType.intIndex = Int index +operandType.intIndex.description = Index into integer values constant pool +operandType.intIndex.name = intIndex +operandType.intIndex.uiName = int + +operandType.uintIndex = UInt index +operandType.uintIndex.description = Index into unsigned integer values constant pool +operandType.uintIndex.name = uintIndex +operandType.uintIndex.uiName = uint + + +operandType.doubleIndex = Double index +operandType.doubleIndex.description = Index into double precision floating point values constant pool +operandType.doubleIndex.name = doubleIndex +operandType.doubleIndex.uiName = double + +operandType.decimalIndex = Decimal index +operandType.decimalIndex.description = Index into decimal values (128bit floating point) constant pool +operandType.decimalIndex.name = decimalIndex +operandType.decimalIndex.uiName = decimal + +operandType.caseBaseoffset = Base offset +operandType.caseBaseoffset.description = Base offset of lookupswitch triggered when no value matches +operandType.caseBaseoffset.name = offset +operandType.caseBaseoffset.uiName = labelName + +operandType.numberContext = Number context (ES4) +operandType.numberContext.description = \u4f7f\u7528 EcmaScript 4 \u6570\u503c\u65f6\u8ba1\u7b97\u7684\u4e0a\u4e0b\u6587 (ABC minorVersion 17).\nBits 0-2 type,3-5 rounding type, 6-12 precision.\nType: 0=number,1=decimal,2=double,3=int,4=uint\nRounding: 0=ceiling,1=up,2=half_up,3=half_even,4=half_down,5=down,6=floor\nPrecision:0-34 +operandType.numberContext.name = numberContext +operandType.numberContext.uiName = uint + +operandType.dispatchId = Dispatch id +operandType.dispatchId.description = Id of the method dispatch +operandType.dispatchId.name = dispatchId +operandType.dispatchId.uiName = uint + +operandType.floatIndex = Float index +operandType.floatIndex.description = Index into float values constant pool +operandType.floatIndex.name = floatIndex +operandType.floatIndex.uiName = float + +operandType.float4Index = Float4 index +operandType.float4Index.description = Index into float4 values constant pool +operandType.float4Index.name = float4Index +operandType.float4Index.uiName = float4 + +operandType.namespaceIndex = Namespace index +operandType.namespaceIndex = Index into namespace constant pool +operandType.namespaceIndex.name = namespaceIndex +operandType.namespaceIndex.uiName = namespace + + +#----------------------- Instructions + +instruction.bkpt.shortDescription = Breakpoint +instruction.bkpt.description = Breakpoint when debugging +instruction.bkpt.stackBefore = +instruction.bkpt.stackAfter = +instruction.bkpt.operands = + +instruction.nop.shortDescription = No operation +instruction.nop.description = Does nothing +instruction.nop.stackBefore = +instruction.nop.stackAfter = +instruction.nop.operands = + +instruction.throw.shortDescription = Throw exception +instruction.throw.description = Pops value off the stack and throws it +instruction.throw.stackBefore = value +instruction.throw.stackAfter = +instruction.throw.operands = + +instruction.getsuper.shortDescription = Get parent class property +instruction.getsuper.description = +instruction.getsuper.stackBefore = obj, [ns], [name] +instruction.getsuper.stackAfter = value +instruction.getsuper.operands = parentClassMultiname + +instruction.setsuper.shortDescription = Set parent class property +instruction.setsuper.description = +instruction.setsuper.stackBefore = obj, [ns], [name], value +instruction.setsuper.stackAfter = +instruction.setsuper.operands = parentClassMultiname + +instruction.dxns.shortDescription = Set default XML namespace +instruction.dxns.description = +instruction.dxns.stackBefore = +instruction.dxns.stackAfter = +instruction.dxns.operands = uriString + +instruction.dxnslate.shortDescription = Set default XML namespace at runtime +instruction.dxnslate.description = +instruction.dxnslate.stackBefore = uriValue +instruction.dxnslate.stackAfter = +instruction.dxnslate.operands = + +instruction.kill.shortDescription = Kill local register +instruction.kill.description = +instruction.kill.stackBefore = +instruction.kill.stackAfter = +instruction.kill.operands = killedRegister + +instruction.label.shortDescription = Target of a branch +instruction.label.description = Just a mark that this is target of following branch +instruction.label.stackBefore = +instruction.label.stackAfter = +instruction.label.operands = + +instruction.lf32x4.shortDescription = Load 32bit float4 +instruction.lf32x4.description = +instruction.lf32x4.stackBefore = address +instruction.lf32x4.stackAfter = float4Value +instruction.lf32x4.operands = + +instruction.sf32x4.shortDescription = Store 32bit float4 +instruction.sf32x4.description = +instruction.sf32x4.stackBefore = float4Value, address +instruction.sf32x4.stackAfter = +instruction.sf32x4.operands = + +instruction.ifnlt.shortDescription = Branch if not lower than +instruction.ifnlt.description = +instruction.ifnlt.stackBefore = value1, value2 +instruction.ifnlt.stackAfter = +instruction.ifnlt.operands = branchTarget + +instruction.ifnle.shortDescription = Branch if not lower or equal +instruction.ifnle.description = +instruction.ifnle.stackBefore = value1, value2 +instruction.ifnle.stackAfter = +instruction.ifnle.operands = branchTarget + +instruction.ifngt.shortDescription = Branch if not greater than +instruction.ifngt.description = +instruction.ifngt.stackBefore = value1, value2 +instruction.ifngt.stackAfter = +instruction.ifngt.operands = branchTarget + +instruction.ifnge.shortDescription = Branch if not greater ot equal +instruction.ifnge.description = +instruction.ifnge.stackBefore = value1, value2 +instruction.ifnge.stackAfter = +instruction.ifnge.operands = branchTarget + +instruction.jump.shortDescription = Jump to location +instruction.jump.description = +instruction.jump.stackBefore = +instruction.jump.stackAfter = +instruction.jump.operands = location + +instruction.iftrue.shortDescription = Branch if true +instruction.iftrue.description = +instruction.iftrue.stackBefore = value +instruction.iftrue.stackAfter = +instruction.iftrue.operands = branchTarget + +instruction.iffalse.shortDescription = Branch if false +instruction.iffalse.description = +instruction.iffalse.stackBefore = value +instruction.iffalse.stackAfter = +instruction.iffalse.operands = branchTarget + +instruction.ifeq.shortDescription = Branch if equal +instruction.ifeq.description = +instruction.ifeq.stackBefore = value1, value2 +instruction.ifeq.stackAfter = +instruction.ifeq.operands = branchTarget + +instruction.ifne.shortDescription = Branch if not equal +instruction.ifne.description = +instruction.ifne.stackBefore = value1, value2 +instruction.ifne.stackAfter = +instruction.ifne.operands = branchTarget + +instruction.iflt.shortDescription = Branch if lower than +instruction.iflt.description = +instruction.iflt.stackBefore = value1, value2 +instruction.iflt.stackAfter = +instruction.iflt.operands = branchTarget + +instruction.ifle.shortDescription = Branch if lower or equal +instruction.ifle.description = +instruction.ifle.stackBefore = value1, value2 +instruction.ifle.stackAfter = +instruction.ifle.operands = branchTarget + +instruction.ifgt.shortDescription = Branch if greater than +instruction.ifgt.description = +instruction.ifgt.stackBefore = value1, value2 +instruction.ifgt.stackAfter = +instruction.ifgt.operands = branchTarget + +instruction.ifge.shortDescription = Branch if greater or equal +instruction.ifge.description = +instruction.ifge.stackBefore = value1, value2 +instruction.ifge.stackAfter = +instruction.ifge.operands = branchTarget + +instruction.ifstricteq.shortDescription = Branch if strict equal +instruction.ifstricteq.description = +instruction.ifstricteq.stackBefore = value1, value2 +instruction.ifstricteq.stackAfter = +instruction.ifstricteq.operands = branchTarget + +instruction.ifstrictne.shortDescription = Branch if not strict equal +instruction.ifstrictne.description = +instruction.ifstrictne.stackBefore = value1, value2 +instruction.ifstrictne.stackAfter = +instruction.ifstrictne.operands = branchTarget + +instruction.lookupswitch.shortDescription = Branch based on index +instruction.lookupswitch.description = +instruction.lookupswitch.stackBefore = index +instruction.lookupswitch.stackAfter = +instruction.lookupswitch.operands = defaultTarget, caseCount, case0Target, case1Target, ... + +instruction.pushwith.shortDescription = Push with onto scope stack +instruction.pushwith.description = +instruction.pushwith.stackBefore = withScope +instruction.pushwith.stackAfter = +instruction.pushwith.operands = + +instruction.popscope.shortDescription = Pop from scope stack and discard value +instruction.popscope.description = +instruction.popscope.stackBefore = +instruction.popscope.stackAfter = +instruction.popscope.operands = + +instruction.nextname.shortDescription = Get name of next property +instruction.nextname.description = +instruction.nextname.stackBefore = obj, index +instruction.nextname.stackAfter = name +instruction.nextname.operands = + +instruction.hasnext.shortDescription = Check if the object has more properties +instruction.hasnext.description = +instruction.hasnext.stackBefore = obj, currentIndex +instruction.hasnext.stackAfter = nextIndex +instruction.hasnext.operands = + +instruction.pushnull.shortDescription = Push null value on stack +instruction.pushnull.description = +instruction.pushnull.stackBefore = +instruction.pushnull.stackAfter = null +instruction.pushnull.operands = + +instruction.pushundefined.shortDescription = Push undefined value on stack +instruction.pushundefined.description = +instruction.pushundefined.stackBefore = +instruction.pushundefined.stackAfter = undefined +instruction.pushundefined.operands = + +instruction.pushfloat.shortDescription = Push float value on stack +instruction.pushfloat.description = +instruction.pushfloat.stackBefore = +instruction.pushfloat.stackAfter = floatValue +instruction.pushfloat.operands = float + +instruction.nextvalue.shortDescription = Get value of next property +instruction.nextvalue.description = +instruction.nextvalue.stackBefore = obj, index +instruction.nextvalue.stackAfter = value +instruction.nextvalue.operands = + +instruction.pushbyte.shortDescription = Push byte value on stack +instruction.pushbyte.description = +instruction.pushbyte.stackBefore = +instruction.pushbyte.stackAfter = byteValue +instruction.pushbyte.operands = value + +instruction.pushshort.shortDescription = Push short value on stack +instruction.pushshort.description = +instruction.pushshort.stackBefore = +instruction.pushshort.stackAfter = shortValue +instruction.pushshort.operands = value + +instruction.pushtrue.shortDescription = Push true on stack +instruction.pushtrue.description = +instruction.pushtrue.stackBefore = +instruction.pushtrue.stackAfter = true +instruction.pushtrue.operands = + +instruction.pushfalse.shortDescription = Push false on stack +instruction.pushfalse.description = +instruction.pushfalse.stackBefore = +instruction.pushfalse.stackAfter = false +instruction.pushfalse.operands = + +instruction.pushnan.shortDescription = Push NaN value on stack +instruction.pushnan.description = +instruction.pushnan.stackBefore = +instruction.pushnan.stackAfter = NaN +instruction.pushnan.operands = + +instruction.pop.shortDescription = Pop top value from stack +instruction.pop.description = +instruction.pop.stackBefore = value +instruction.pop.stackAfter = +instruction.pop.operands = + +instruction.dup.shortDescription = Duplicate value on stack +instruction.dup.description = +instruction.dup.stackBefore = value +instruction.dup.stackAfter = value, value +instruction.dup.operands = + +instruction.swap.shortDescription = Swap two values on top of the stack +instruction.swap.description = +instruction.swap.stackBefore = value1, value2 +instruction.swap.stackAfter = value2, value1 +instruction.swap.operands = + +instruction.pushstring.shortDescription = Push string value on the stack +instruction.pushstring.description = +instruction.pushstring.stackBefore = +instruction.pushstring.stackAfter = stringValue +instruction.pushstring.operands = value + +instruction.pushint.shortDescription = Push integer value on the stack +instruction.pushint.description = +instruction.pushint.stackBefore = +instruction.pushint.stackAfter = intValue +instruction.pushint.operands = value + +instruction.pushuint.shortDescription = Push unsigned integer value on the stack +instruction.pushuint.description = +instruction.pushuint.stackBefore = +instruction.pushuint.stackAfter = uintValue +instruction.pushuint.operands = value + +instruction.pushdouble.shortDescription = Push double precision value on the stack +instruction.pushdouble.description = +instruction.pushdouble.stackBefore = +instruction.pushdouble.stackAfter = doubleValue +instruction.pushdouble.operands = value + +instruction.pushscope.shortDescription = Push object on the scope stack +instruction.pushscope.description = +instruction.pushscope.stackBefore = obj +instruction.pushscope.stackAfter = +instruction.pushscope.operands = + +instruction.pushnamespace.shortDescription = Push namespace on the stack +instruction.pushnamespace.description = +instruction.pushnamespace.stackBefore = +instruction.pushnamespace.stackAfter = namespace +instruction.pushnamespace.operands = value + +instruction.hasnext2.shortDescription = Check if the object has more properties (register based) +instruction.hasnext2.description = +instruction.hasnext2.stackBefore = +instruction.hasnext2.stackAfter = boolValue +instruction.hasnext2.operands = objectReg, indexReg + +instruction.pushdecimal.shortDescription = Push decimal value on the stack +instruction.pushdecimal.description = +instruction.pushdecimal.stackBefore = +instruction.pushdecimal.stackAfter = decimalValue +instruction.pushdecimal.operands = value + +#Undocumented: +instruction.pushdnan.shortDescription = Push decimal NaN value on the stack +instruction.pushdnan.description = +#instruction.pushdnan.stackBefore = +#instruction.pushdnan.stackAfter = +instruction.pushdnan.operands = + +instruction.li8.shortDescription = Load 8bit integer value +instruction.li8.description = +instruction.li8.stackBefore = address +instruction.li8.stackAfter = int8Value +instruction.li8.operands = + +instruction.li16.shortDescription = Load 16bit integer value +instruction.li16.description = +instruction.li16.stackBefore = address +instruction.li16.stackAfter = int16Value +instruction.li16.operands = + +instruction.li32.shortDescription = Load 32bit integer value +instruction.li32.description = +instruction.li32.stackBefore = address +instruction.li32.stackAfter = int32Value +instruction.li32.operands = + +instruction.lf32.shortDescription = Load 32bit float value +instruction.lf32.description = +instruction.lf32.stackBefore = address +instruction.lf32.stackAfter = float32Value +instruction.lf32.operands = + +instruction.lf64.shortDescription = Load 64bit float value +instruction.lf64.description = +instruction.lf64.stackBefore = address +instruction.lf64.stackAfter = float64Value +instruction.lf64.operands = + +instruction.si8.shortDescription = Store 8bit integer value +instruction.si8.description = +instruction.si8.stackBefore = value, address +instruction.si8.stackAfter = +instruction.si8.operands = + +instruction.si16.shortDescription = Store 16bit integer value +instruction.si16.description = +instruction.si16.stackBefore = value, address +instruction.si16.stackAfter = +instruction.si16.operands = + +instruction.si32.shortDescription = Store 32bit integer value +instruction.si32.description = +instruction.si32.stackBefore = value, address +instruction.si32.stackAfter = +instruction.si32.operands = + +instruction.sf32.shortDescription = Store 32bit float value +instruction.sf32.description = +instruction.sf32.stackBefore = value, address +instruction.sf32.stackAfter = +instruction.sf32.operands = + +instruction.sf64.shortDescription = Store 64bit float value +instruction.sf64.description = +instruction.sf64.stackBefore = value, address +instruction.sf64.stackAfter = +instruction.sf64.operands = + +instruction.newfunction.shortDescription = Create new Function object +instruction.newfunction.description = +instruction.newfunction.stackBefore = +instruction.newfunction.stackAfter = function +instruction.newfunction.operands = method + +instruction.call.shortDescription = Call function on the stack +instruction.call.description = +instruction.call.stackBefore = function, this, arg1, ..., argN +instruction.call.stackAfter = value +instruction.call.operands = argCount + +instruction.construct.shortDescription = Call constructor function on the stack +instruction.construct.description = +instruction.construct.stackBefore = function, arg1, ..., argN +instruction.construct.stackAfter = value +instruction.construct.operands = argCount + +instruction.callmethod.shortDescription = Call method of object by dispatch id +instruction.callmethod.description = +instruction.callmethod.stackBefore = this, arg1, ..., argN +instruction.callmethod.stackAfter = value +instruction.callmethod.operands = method, argCount + +instruction.callstatic.shortDescription = Call method by method id in ABC file +instruction.callstatic.description = +instruction.callstatic.stackBefore = this, arg1, ..., argN +instruction.callstatic.stackAfter = value +instruction.callstatic.operands = method, argCount + +instruction.callsuper.shortDescription = Call method on parent class +instruction.callsuper.description = +instruction.callsuper.stackBefore = obj, [ns], [name], arg1, ..., argN +instruction.callsuper.stackAfter = value +instruction.callsuper.operands = methodName, argCount + +instruction.callproperty.shortDescription = Call property +instruction.callproperty.description = +instruction.callproperty.stackBefore = obj, [ns], [name], arg1, ..., argN +instruction.callproperty.stackAfter = value +instruction.callproperty.operands = property, argCount + +instruction.returnvoid.shortDescription = Return from a method +instruction.returnvoid.description = +instruction.returnvoid.stackBefore = +instruction.returnvoid.stackAfter = +instruction.returnvoid.operands = + +instruction.returnvalue.shortDescription = Return value from a method +instruction.returnvalue.description = +instruction.returnvalue.stackBefore = value +instruction.returnvalue.stackAfter = +instruction.returnvalue.operands = + +instruction.constructsuper.shortDescription = Call parent constructor of an object +instruction.constructsuper.description = +instruction.constructsuper.stackBefore = obj, arg1, ..., argN +instruction.constructsuper.stackAfter = +instruction.constructsuper.operands = argCount + +instruction.constructprop.shortDescription = Construct a property of an object +instruction.constructprop.description = +instruction.constructprop.stackBefore = obj, [ns], [name], arg1, ..., argN +instruction.constructprop.stackAfter = value +instruction.constructprop.operands = property, argCount + +#Undocumented: +instruction.callsuperid.shortDescription = Call super id +instruction.callsuperid.description = +#instruction.callsuperid.stackBefore = +#instruction.callsuperid.stackAfter = +#instruction.callsuperid.operands = + +instruction.callproplex.shortDescription = Call property with null as this +instruction.callproplex.description = +instruction.callproplex.stackBefore = obj, [ns], [name], arg1, ..., argN +instruction.callproplex.stackAfter = value +instruction.callproplex.operands = property, argCount + +#Undocumented: +instruction.callinterface.shortDescription = Call interface +instruction.callinterface.description = +#instruction.callinterface.stackBefore = +#instruction.callinterface.stackAfter = +instruction.callinterface.operands = interface, argCount + + +instruction.callsupervoid.shortDescription = Call method on parent class, discard return value +instruction.callsupervoid.description = +instruction.callsupervoid.stackBefore = obj, [ns], [name], arg1, ..., argN +instruction.callsupervoid.stackAfter = +instruction.callsupervoid.operands = methodName, argCount + + +instruction.callpropvoid.shortDescription = Call property, discard return value +instruction.callpropvoid.description = +instruction.callpropvoid.stackBefore = obj, [ns], [name], arg1, ..., argN +instruction.callpropvoid.stackAfter = +instruction.callpropvoid.operands = property, argCount + +instruction.sxi1.shortDescription = Sign extend 1bit value to 32bits +instruction.sxi1.description = +instruction.sxi1.stackBefore = value +instruction.sxi1.stackAfter = valueExtended +instruction.sxi1.operands = + +instruction.sxi8.shortDescription = Sign extend 8bit value to 32bits +instruction.sxi8.description = +instruction.sxi8.stackBefore = value +instruction.sxi8.stackAfter = valueExtended +instruction.sxi8.operands = + +instruction.sxi16.shortDescription = Sign extend 16bit value to 32bits +instruction.sxi16.description = +instruction.sxi16.stackBefore = value +instruction.sxi16.stackAfter = valueExtended +instruction.sxi16.operands = + +instruction.applytype.shortDescription = Apply type parameters +instruction.applytype.description = \u5c06\u53c2\u6570\u7c7b\u578b\u5e94\u7528\u4e8e\u57fa\u672c\u7c7b\u578b. \u4f8b\u5982\uff0c\u5f53 Vector \u5728\u8fd0\u884c\u65f6\u89e3\u6790\u65f6. String \u662f\u53c2\u6570, Vector \u662f\u57fa\u7c7b. +instruction.applytype.stackBefore = baseType, typeParam1, ..., typeParamN +instruction.applytype.stackAfter = baseType +instruction.applytype.operands = typeParamCount + +instruction.pushfloat4.shortDescription = Push float4 value on the stack +instruction.pushfloat4.description = +instruction.pushfloat4.stackBefore = +instruction.pushfloat4.stackAfter = float4Value +instruction.pushfloat4.operands = float4 + +instruction.newobject.shortDescription = Creates new object +instruction.newobject.description = +instruction.newobject.stackBefore = name1, value1, name2, value2, ..., nameN, valueN +instruction.newobject.stackAfter = newObject +instruction.newobject.operands = propertyCount + +instruction.newarray.shortDescription = Creates new array +instruction.newarray.description = +instruction.newarray.stackBefore = value1, value2, ..., valueN +instruction.newarray.stackAfter = newArray +instruction.newarray.operands = valueCount + +instruction.newactivation.shortDescription = Creates new activation object +instruction.newactivation.description = +instruction.newactivation.stackBefore = +instruction.newactivation.stackAfter = newActivation +instruction.newactivation.operands = + +instruction.newclass.shortDescription = Creates new class +instruction.newclass.description = +instruction.newclass.stackBefore = baseType +instruction.newclass.stackAfter = newClass +instruction.newclass.operands = class + +instruction.getdescendants.shortDescription = Get descendants +instruction.getdescendants.description = +instruction.getdescendants.stackBefore = obj, [ns], [name] +instruction.getdescendants.stackAfter = value +instruction.getdescendants.operands = operand1 + +instruction.newcatch.shortDescription = Create new catch scope +instruction.newcatch.description = +instruction.newcatch.stackBefore = +instruction.newcatch.stackAfter = catchScope +instruction.newcatch.operands = exception + +#Undocumented: +instruction.deldescendants.shortDescription = Delete descendants +instruction.deldescendants.description = +#instruction.deldescendants.stackBefore = +#instruction.deldescendants.stackAfter = +instruction.deldescendants.operands = + +#Undocumented: +instruction.findpropglobal.shortDescription = Search property in global scope +instruction.findpropglobal.description = +instruction.findpropglobal.stackBefore = [ns], [name] +instruction.findpropglobal.stackAfter = obj +instruction.findpropglobal.operands = property + +instruction.findpropstrict.shortDescription = Search property in scope stack, error when not found +instruction.findpropstrict.description = +instruction.findpropstrict.stackBefore = [ns], [name] +instruction.findpropstrict.stackAfter = obj +instruction.findpropstrict.operands = property + +instruction.findproperty.shortDescription = Search property in scope stack, top object when not found +instruction.findproperty.description = +instruction.findproperty.stackBefore = [ns], [name] +instruction.findproperty.stackAfter = obj +instruction.findproperty.operands = property + +#Undocumented: +instruction.finddef.shortDescription = Search script level definition +instruction.finddef.description = +instruction.finddef.stackBefore = [ns], [name] +instruction.finddef.stackAfter = obj +instruction.finddef.operands = property + +instruction.getlex.shortDescription = Find and get property +instruction.getlex.description = +instruction.getlex.stackBefore = +instruction.getlex.stackAfter = obj +instruction.getlex.operands = property + +instruction.setproperty.shortDescription = Set property +instruction.setproperty.description = +instruction.setproperty.stackBefore = obj, [ns], [name], value +instruction.setproperty.stackAfter = +instruction.setproperty.operands = property + +instruction.getlocal.shortDescription = Get local register value +instruction.getlocal.description = +instruction.getlocal.stackBefore = +instruction.getlocal.stackAfter = value +instruction.getlocal.operands = localRegIndex + +instruction.setlocal.shortDescription = Set local register value +instruction.setlocal.description = +instruction.setlocal.stackBefore = value +instruction.setlocal.stackAfter = +instruction.setlocal.operands = localRegIndex + +instruction.getglobalscope.shortDescription = Get global scope +instruction.getglobalscope.description = +instruction.getglobalscope.stackBefore = +instruction.getglobalscope.stackAfter = obj +instruction.getglobalscope.operands = + +instruction.getscopeobject.shortDescription = Get scope object +instruction.getscopeobject.description = +instruction.getscopeobject.stackBefore = +instruction.getscopeobject.stackAfter = obj +instruction.getscopeobject.operands = scopeIndex + +instruction.getproperty.shortDescription = Get property +instruction.getproperty.description = +instruction.getproperty.stackBefore = obj, [ns], [name] +instruction.getproperty.stackAfter = value +instruction.getproperty.operands = property + +instruction.getouterscope.shortDescription = Get scope object on all levels +instruction.getouterscope.description = +instruction.getouterscope.stackBefore = +instruction.getouterscope.stackAfter = obj +instruction.getouterscope.operands = allLevelScopeIndex + +instruction.initproperty.shortDescription = Initialize property +instruction.initproperty.description = +instruction.initproperty.stackBefore = obj, [ns], [name], value +instruction.initproperty.stackAfter = +instruction.initproperty.operands = property + +#Undocumented: +instruction.setpropertylate.shortDescription = Set property (stack based) +instruction.setpropertylate.description = +#instruction.setpropertylate.stackBefore = +#instruction.setpropertylate.stackAfter = +#instruction.setpropertylate.operands = + +instruction.deleteproperty.shortDescription = Delete property +instruction.deleteproperty.description = +instruction.deleteproperty.stackBefore = obj, [ns], [name] +instruction.deleteproperty.stackAfter = boolResult +instruction.deleteproperty.operands = property + +#Undocumented: +instruction.deletepropertylate.shortDescription = Delete property (stack based) +instruction.deletepropertylate.description = +#instruction.deletepropertylate.stackBefore = +#instruction.deletepropertylate.stackAfter = +instruction.deletepropertylate.operands = + +instruction.getslot.shortDescription = Get value of a slot +instruction.getslot.description = +instruction.getslot.stackBefore = obj +instruction.getslot.stackAfter = value +instruction.getslot.operands = slotIndex + +instruction.setslot.shortDescription = Set value of a slot +instruction.setslot.description = +instruction.setslot.stackBefore = obj, value +instruction.setslot.stackAfter = +instruction.setslot.operands = slotIndex + +instruction.getglobalslot.shortDescription = Get value of slot on global scope +instruction.getglobalslot.description = +instruction.getglobalslot.stackBefore = +instruction.getglobalslot.stackAfter = value +instruction.getglobalslot.operands = slotIndex + +instruction.setglobalslot.shortDescription = Set value of slot on global scope +instruction.setglobalslot.description = +instruction.setglobalslot.stackBefore = value +instruction.setglobalslot.stackAfter = +instruction.setglobalslot.operands = slotIndex + +instruction.convert_s.shortDescription = Convert value to string +instruction.convert_s.description = +instruction.convert_s.stackBefore = value +instruction.convert_s.stackAfter = stringValue +instruction.convert_s.operands = + +instruction.esc_xelem.shortDescription = Escape XML element +instruction.esc_xelem.description = +instruction.esc_xelem.stackBefore = value +instruction.esc_xelem.stackAfter = stringValue +instruction.esc_xelem.operands = + +instruction.esc_xattr.shortDescription = Escape XML attribute +instruction.esc_xattr.description = +instruction.esc_xattr.stackBefore = value +instruction.esc_xattr.stackAfter = stringValue +instruction.esc_xattr.operands = + +instruction.convert_i.shortDescription = Convert value to integer +instruction.convert_i.description = +instruction.convert_i.stackBefore = value +instruction.convert_i.stackAfter = intValue +instruction.convert_i.operands = + +instruction.convert_u.shortDescription = Convert value to unsigned integer +instruction.convert_u.description = +instruction.convert_u.stackBefore = value +instruction.convert_u.stackAfter = uintValue +instruction.convert_u.operands = + +instruction.convert_d.shortDescription = Convert value to double +instruction.convert_d.description = +instruction.convert_d.stackBefore = value +instruction.convert_d.stackAfter = doubleValue +instruction.convert_d.operands = + +instruction.convert_b.shortDescription = Convert value to boolean +instruction.convert_b.description = +instruction.convert_b.stackBefore = value +instruction.convert_b.stackAfter = booleanValue +instruction.convert_b.operands = + +instruction.convert_o.shortDescription = Convert value to Object +instruction.convert_o.description = +instruction.convert_o.stackBefore = value +instruction.convert_o.stackAfter = value +instruction.convert_o.operands = + +instruction.checkfilter.shortDescription = Check that object can have filter operation applied +instruction.checkfilter.description = +instruction.checkfilter.stackBefore = value +instruction.checkfilter.stackAfter = value +instruction.checkfilter.operands = + +instruction.convert_m.shortDescription = Convert value to decimal +instruction.convert_m.description = +instruction.convert_m.stackBefore = value +instruction.convert_m.stackAfter = decimalValue +instruction.convert_m.operands = + +instruction.convert_m_p.shortDescription = Convert value to decimal with number context +instruction.convert_m_p.description = +instruction.convert_m_p.stackBefore = value +instruction.convert_m_p.stackAfter = decimalValue +instruction.convert_m_p.operands = numberContext + +instruction.convert_f.shortDescription = Convert value to float +instruction.convert_f.description = +instruction.convert_f.stackBefore = value +instruction.convert_f.stackAfter = floatValue +instruction.convert_f.operands = + +instruction.convert_f4.shortDescription = Convert value to float4 +instruction.convert_f4.description = +instruction.convert_f4.stackBefore = value +instruction.convert_f4.stackAfter = float4Value +instruction.convert_f4.operands = + +instruction.coerce.shortDescription = Coerce value to specified type +instruction.coerce.description = +instruction.coerce.stackBefore = value +instruction.coerce.stackAfter = coercedValue +instruction.coerce.operands = type + +instruction.coerce_b.shortDescription = Coerce value to boolean +instruction.coerce_b.description = +instruction.coerce_b.stackBefore = value +instruction.coerce_b.stackAfter = booleanValue +instruction.coerce_b.operands = +instruction.coerce_b.deprecated = Use convert_b instead + +instruction.coerce_a.shortDescription = Coerce value to any type +instruction.coerce_a.description = +instruction.coerce_a.stackBefore = value +instruction.coerce_a.stackAfter = value +instruction.coerce_a.operands = + +instruction.coerce_i.shortDescription = Coerce value to integer +instruction.coerce_i.description = +instruction.coerce_i.stackBefore = value +instruction.coerce_i.stackAfter = intValue +instruction.coerce_i.operands = +instruction.coerce_i.deprecated = Use convert_i instead + +instruction.coerce_d.shortDescription = Coerce value to double +instruction.coerce_d.description = +instruction.coerce_d.stackBefore = value +instruction.coerce_d.stackAfter = doubleValue +instruction.coerce_d.operands = +instruction.coerce_d.deprecated = Use convert_d instead + +instruction.coerce_s.shortDescription = Coerce value to string +instruction.coerce_s.description = +instruction.coerce_s.stackBefore = value +instruction.coerce_s.stackAfter = stringValue +instruction.coerce_s.operands = + +instruction.astype.shortDescription = Return same value or null if not specified type +instruction.astype.description = +instruction.astype.stackBefore = value +instruction.astype.stackAfter = value +instruction.astype.operands = type + +instruction.astypelate.shortDescription = Return same value or null if not specified type (stack based) +instruction.astypelate.description = +instruction.astypelate.stackBefore = value, type +instruction.astypelate.stackAfter = value +instruction.astypelate.operands = + +instruction.coerce_u.shortDescription = Coerce value to unsigned integer +instruction.coerce_u.description = +instruction.coerce_u.stackBefore = value +instruction.coerce_u.stackAfter = uintValue +instruction.coerce_u.operands = + +instruction.coerce_o.shortDescription = Coerce value to Object +instruction.coerce_o.description = +instruction.coerce_o.stackBefore = value +instruction.coerce_o.stackAfter = value +instruction.coerce_o.operands = + +instruction.negate_p.shortDescription = Negate value using number context +instruction.negate_p.description = +instruction.negate_p.stackBefore = value +instruction.negate_p.stackAfter = -value +instruction.negate_p.operands = operand1 + +instruction.negate.shortDescription = Negate value +instruction.negate.description = +instruction.negate.stackBefore = value +instruction.negate.stackAfter = -value +instruction.negate.operands = + +instruction.increment.shortDescription = Increment value +instruction.increment.description = +instruction.increment.stackBefore = value +instruction.increment.stackAfter = incrementedValue +instruction.increment.operands = + +instruction.inclocal.shortDescription = Increment local register +instruction.inclocal.description = +instruction.inclocal.stackBefore = +instruction.inclocal.stackAfter = +instruction.inclocal.operands = localRegister + +instruction.decrement.shortDescription = Decrement value +instruction.decrement.description = +instruction.decrement.stackBefore = value +instruction.decrement.stackAfter = decrementedValue +instruction.decrement.operands = + +instruction.declocal.shortDescription = Decrement local register +instruction.declocal.description = +instruction.declocal.stackBefore = +instruction.declocal.stackAfter = +instruction.declocal.operands = localRegister + +instruction.typeof.shortDescription = Get name of value type +instruction.typeof.description = +instruction.typeof.stackBefore = value +instruction.typeof.stackAfter = typeName +instruction.typeof.operands = + +instruction.not.shortDescription = Boolean negate +instruction.not.description = +instruction.not.stackBefore = value +instruction.not.stackAfter = !value +instruction.not.operands = + +instruction.bitnot.shortDescription = Bitwise negate +instruction.bitnot.description = +instruction.bitnot.stackBefore = value +instruction.bitnot.stackAfter = ~value +instruction.bitnot.operands = + +#Undocumented: +instruction.concat.shortDescription = Concat +instruction.concat.description = +#instruction.concat.stackBefore = +#instruction.concat.stackAfter = +#instruction.concat.operands = + +#Undocumented: +instruction.add_d.shortDescription = Add_d +instruction.add_d.description = +#instruction.add_d.stackBefore = +#instruction.add_d.stackAfter = +#instruction.add_d.operands = + +instruction.increment_p.shortDescription = Increment value using number context +instruction.increment_p.description = +instruction.increment_p.stackBefore = value +instruction.increment_p.stackAfter = incrementedValue +instruction.increment_p.operands = numberContext + +instruction.inclocal_p.shortDescription = Increment local register using number context +instruction.inclocal_p.description = +instruction.inclocal_p.stackBefore = +instruction.inclocal_p.stackAfter = +instruction.inclocal_p.operands = numberContext, localRegister + +instruction.decrement_p.shortDescription = Decrement value using number context +instruction.decrement_p.description = +instruction.decrement_p.stackBefore = value +instruction.decrement_p.stackAfter = decrementedValue +instruction.decrement_p.operands = numberContext + +instruction.declocal_p.shortDescription = Decrement local register using number context +instruction.declocal_p.description = +instruction.declocal_p.stackBefore = +instruction.declocal_p.stackAfter = +instruction.declocal_p.operands = numberContext, localRegister + +instruction.add.shortDescription = Add two values +instruction.add.description = +instruction.add.stackBefore = value1, value2 +instruction.add.stackAfter = value3 +instruction.add.operands = + +instruction.subtract.shortDescription = Subtract two values +instruction.subtract.description = +instruction.subtract.stackBefore = value1, value2 +instruction.subtract.stackAfter = value3 +instruction.subtract.operands = + +instruction.multiply.shortDescription = Multiply two values +instruction.multiply.description = +instruction.multiply.stackBefore = value1, value2 +instruction.multiply.stackAfter = value3 +instruction.multiply.operands = + +instruction.divide.shortDescription = Divide two values +instruction.divide.description = +instruction.divide.stackBefore = value1, value2 +instruction.divide.stackAfter = value3 +instruction.divide.operands = + +instruction.modulo.shortDescription = Modulo divide two values +instruction.modulo.description = +instruction.modulo.stackBefore = value1, value2 +instruction.modulo.stackAfter = value3 +instruction.modulo.operands = + +instruction.lshift.shortDescription = Bitwise left shift +instruction.lshift.description = +instruction.lshift.stackBefore = value1, value2 +instruction.lshift.stackAfter = value3 +instruction.lshift.operands = + +instruction.rshift.shortDescription = Bitwise right shift +instruction.rshift.description = +instruction.rshift.stackBefore = value1, value2 +instruction.rshift.stackAfter = value3 +instruction.rshift.operands = + +instruction.urshift.shortDescription = Unsigned bitwise right shift +instruction.urshift.description = +instruction.urshift.stackBefore = value1, value2 +instruction.urshift.stackAfter = value3 +instruction.urshift.operands = + +instruction.bitand.shortDescription = Bitwise and +instruction.bitand.description = +instruction.bitand.stackBefore = value1, value2 +instruction.bitand.stackAfter = value3 +instruction.bitand.operands = + +instruction.bitor.shortDescription = Bitwise or +instruction.bitor.description = +instruction.bitor.stackBefore = value1, value2 +instruction.bitor.stackAfter = value3 +instruction.bitor.operands = + +instruction.bitxor.shortDescription = Bitwise xor +instruction.bitxor.description = +instruction.bitxor.stackBefore = value1, value2 +instruction.bitxor.stackAfter = value3 +instruction.bitxor.operands = + +instruction.equals.shortDescription = Compare two values +instruction.equals.description = +instruction.equals.stackBefore = value1, value2 +instruction.equals.stackAfter = booleanResult +instruction.equals.operands = + +instruction.strictequals.shortDescription = Strict compare two values +instruction.strictequals.description = +instruction.strictequals.stackBefore = value1, value2 +instruction.strictequals.stackAfter = booleanResult +instruction.strictequals.operands = + +instruction.lessthan.shortDescription = Check that value is less than other value +instruction.lessthan.description = +instruction.lessthan.stackBefore = value1, value2 +instruction.lessthan.stackAfter = booleanResult +instruction.lessthan.operands = + +instruction.lessequals.shortDescription = Check that value is less or equal than other value +instruction.lessequals.description = +instruction.lessequals.stackBefore = value1, value2 +instruction.lessequals.stackAfter = booleanResult +instruction.lessequals.operands = booleanResult + +instruction.greaterthan.shortDescription = Check that value is greater or equal than other value +instruction.greaterthan.description = +instruction.greaterthan.stackBefore = value1, value2 +instruction.greaterthan.stackAfter = booleanResult +instruction.greaterthan.operands = + +instruction.greaterequals.shortDescription = Check that value is greater or equal than other value +instruction.greaterequals.description = +instruction.greaterequals.stackBefore = value1, value2 +instruction.greaterequals.stackAfter = booleanResult +instruction.greaterequals.operands = + +instruction.instanceof.shortDescription = Check that type exists in object prototype chain +instruction.instanceof.description = +instruction.instanceof.stackBefore = value, type +instruction.instanceof.stackAfter = booleanResult +instruction.instanceof.operands = + +instruction.istype.shortDescription = Check that object is of specified type +instruction.istype.description = +instruction.istype.stackBefore = value +instruction.istype.stackAfter = booleanResult +instruction.istype.operands = type + +instruction.istypelate.shortDescription = Check that object is of specified type (stack based) +instruction.istypelate.description = +instruction.istypelate.stackBefore = value, type +instruction.istypelate.stackAfter = booleanResult +instruction.istypelate.operands = + +instruction.in.shortDescription = Check that object has named property +instruction.in.description = +instruction.in.stackBefore = name, obj +instruction.in.stackAfter = booleanResult +instruction.in.operands = + +instruction.add_p.shortDescription = Add two values using number context +instruction.add_p.description = +instruction.add_p.stackBefore = value1, value2 +instruction.add_p.stackAfter = value3 +instruction.add_p.operands = numberContext + +instruction.subtract_p.shortDescription = Subtract two values using number context +instruction.subtract_p.description = +instruction.subtract_p.stackBefore = value1, value2 +instruction.subtract_p.stackAfter = value3 +instruction.subtract_p.operands = numberContext + +instruction.multiply_p.shortDescription = Multiply two values using number context +instruction.multiply_p.description = +instruction.multiply_p.stackBefore = value1, value2 +instruction.multiply_p.stackAfter = value3 +instruction.multiply_p.operands = numberContext + +instruction.divide_p.shortDescription = Divide two values using number context +instruction.divide_p.description = +instruction.divide_p.stackBefore = value1, value2 +instruction.divide_p.stackAfter = value3 +instruction.divide_p.operands = numberContext + +instruction.modulo_p.shortDescription = Modulo divide two values using number context +instruction.modulo_p.description = +instruction.modulo_p.stackBefore = value1, value2 +instruction.modulo_p.stackAfter = value3 +instruction.modulo_p.operands = numberContext + +instruction.increment_i.shortDescription = Increment integer value +instruction.increment_i.description = +instruction.increment_i.stackBefore = value +instruction.increment_i.stackAfter = incrementedValue +instruction.increment_i.operands = + +instruction.decrement_i.shortDescription = Decrement integer value +instruction.decrement_i.description = +instruction.decrement_i.stackBefore = value +instruction.decrement_i.stackAfter = decrementedValue +instruction.decrement_i.operands = + +instruction.inclocal_i.shortDescription = Increment local register integer value +instruction.inclocal_i.description = +instruction.inclocal_i.stackBefore = +instruction.inclocal_i.stackAfter = +instruction.inclocal_i.operands = localRegister + +instruction.declocal_i.shortDescription = Decrement local register integer value +instruction.declocal_i.description = +instruction.declocal_i.stackBefore = +instruction.declocal_i.stackAfter = +instruction.declocal_i.operands = localRegister + +instruction.negate_i.shortDescription = Negate integer value +instruction.negate_i.description = +instruction.negate_i.stackBefore = value +instruction.negate_i.stackAfter = -value +instruction.negate_i.operands = + +instruction.add_i.shortDescription = Add two integer values +instruction.add_i.description = +instruction.add_i.stackBefore = value1, value2 +instruction.add_i.stackAfter = value3 +instruction.add_i.operands = + +instruction.subtract_i.shortDescription = Subtract two integer values +instruction.subtract_i.description = +instruction.subtract_i.stackBefore = value1, value2 +instruction.subtract_i.stackAfter = value3 +instruction.subtract_i.operands = + +instruction.multiply_i.shortDescription = Multiply two integer values +instruction.multiply_i.description = +instruction.multiply_i.stackBefore = value1, value2 +instruction.multiply_i.stackAfter = value3 +instruction.multiply_i.operands = + +instruction.getlocal_0.shortDescription = Get local register 0 +instruction.getlocal_0.description = +instruction.getlocal_0.stackBefore = +instruction.getlocal_0.stackAfter = value +instruction.getlocal_0.operands = + +instruction.getlocal_1.shortDescription = Get local register 1 +instruction.getlocal_1.description = +instruction.getlocal_1.stackBefore = +instruction.getlocal_1.stackAfter = value +instruction.getlocal_1.operands = + +instruction.getlocal_2.shortDescription = Get local register 2 +instruction.getlocal_2.description = +instruction.getlocal_2.stackBefore = +instruction.getlocal_2.stackAfter = value +instruction.getlocal_2.operands = + +instruction.getlocal_3.shortDescription = Get local register 3 +instruction.getlocal_3.description = +instruction.getlocal_3.stackBefore = +instruction.getlocal_3.stackAfter = value +instruction.getlocal_3.operands = + +instruction.setlocal_0.shortDescription = Set local register 0 +instruction.setlocal_0.description = +instruction.setlocal_0.stackBefore = value +instruction.setlocal_0.stackAfter = +instruction.setlocal_0.operands = + +instruction.setlocal_1.shortDescription = Set local register 1 +instruction.setlocal_1.description = +instruction.setlocal_1.stackBefore = value +instruction.setlocal_1.stackAfter = +instruction.setlocal_1.operands = + +instruction.setlocal_2.shortDescription = Set local register 2 +instruction.setlocal_2.description = +instruction.setlocal_2.stackBefore = value +instruction.setlocal_2.stackAfter = +instruction.setlocal_2.operands = + +instruction.setlocal_3.shortDescription = Set local register 3 +instruction.setlocal_3.description = +instruction.setlocal_3.stackBefore = value +instruction.setlocal_3.stackAfter = +instruction.setlocal_3.operands = + +#Undocumented: +instruction.invalid.shortDescription = Invalid +instruction.invalid.description = +#instruction.invalid.stackBefore = +#instruction.invalid.stackAfter = +#instruction.invalid.operands = + +#Undocumented: +instruction.abs_jump.shortDescription = Absolute jump +instruction.abs_jump.description = +#instruction.abs_jump.stackBefore = +#instruction.abs_jump.stackAfter = +#instruction.abs_jump.operands = + +instruction.debug.shortDescription = Debugging info +instruction.debug.description = +instruction.debug.stackBefore = +instruction.debug.stackAfter = +instruction.debug.operands = debugType, regName, localRegister, extra + +instruction.debugline.shortDescription = Debugging line number info +instruction.debugline.description = +instruction.debugline.stackBefore = +instruction.debugline.stackAfter = +instruction.debugline.operands = lineNumber + +instruction.debugfile.shortDescription = Debugging file info +instruction.debugfile.description = +instruction.debugfile.stackBefore = +instruction.debugfile.stackAfter = +instruction.debugfile.operands = fileName + +instruction.bkptline.shortDescription = Breakpoint on line +instruction.bkptline.description = +instruction.bkptline.stackBefore = +instruction.bkptline.stackAfter = +instruction.bkptline.operands = lineNumber + +#Undocumented: +instruction.timestamp.shortDescription = Timestamp +instruction.timestamp.description = +instruction.timestamp.stackBefore = +instruction.timestamp.stackAfter = +instruction.timestamp.operands = + +#Undocumented: +instruction.verifypass.shortDescription = Verify pass +instruction.verifypass.description = +#instruction.verifypass.stackBefore = +#instruction.verifypass.stackAfter = +#instruction.verifypass.operands = + +#Undocumented: +instruction.alloc.shortDescription = Alloc +instruction.alloc.description = +#instruction.alloc.stackBefore = +#instruction.alloc.stackAfter = +#instruction.alloc.operands = + +#Undocumented: +instruction.mark.shortDescription = Mark +instruction.mark.description = +#instruction.mark.stackBefore = +#instruction.mark.stackAfter = +#instruction.mark.operands = + +#Undocumented: +instruction.wb.shortDescription = Wb +instruction.wb.description = +#instruction.wb.stackBefore = +#instruction.wb.stackAfter = +#instruction.wb.operands = + +#Undocumented: +instruction.prologue.shortDescription = Prologue +instruction.prologue.description = +#instruction.prologue.stackBefore = +#instruction.prologue.stackAfter = +#instruction.prologue.operands = + +#Undocumented: +instruction.sendenter.shortDescription = Send enter +instruction.sendenter.description = +#instruction.sendenter.stackBefore = +#instruction.sendenter.stackAfter = +#instruction.sendenter.operands = + +#Undocumented: +instruction.doubletoatom.shortDescription = Double to atom +instruction.doubletoatom.description = +#instruction.doubletoatom.stackBefore = +#instruction.doubletoatom.stackAfter = +#instruction.doubletoatom.operands = + +#Undocumented: +instruction.sweep.shortDescription = Sweep +instruction.sweep.description = +#instruction.sweep.stackBefore = +#instruction.sweep.stackAfter = +#instruction.sweep.operands = + +#Undocumented: +instruction.codegenop.shortDescription = CodeGenOp +instruction.codegenop.description = +#instruction.codegenop.stackBefore = +#instruction.codegenop.stackAfter = +#instruction.codegenop.operands = + +#Undocumented: +instruction.verifyop.shortDescription = VerifyOp +instruction.verifyop.description = +#instruction.verifyop.stackBefore = +#instruction.verifyop.stackAfter = +#instruction.verifyop.operands = + +#Undocumented: +instruction.decode.shortDescription = Decode +instruction.decode.description = +#instruction.decode.stackBefore = +#instruction.decode.stackAfter = +#instruction.decode.operands = + + +instruction.unplus.shortDescription = Unary plus - coerce to numeric +instruction.unplus.description = +instruction.unplus.stackBefore = value +instruction.unplus.stackAfter = value +instruction.unplus.operands = + +instruction.pushconstant.shortDescription = Push constant value on stack +instruction.pushconstant.description = +#instruction.pushconstant.stackBefore = +#instruction.pushconstant.stackAfter = +instruction.pushconstant.operands = value \ No newline at end of file diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS3other_zh.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS3other_zh.properties new file mode 100644 index 000000000..5f07a2a35 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS3other_zh.properties @@ -0,0 +1,91 @@ +# Copyright (C) 2010-2016 JPEXS, All rights reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 3.0 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. +ui.list.heading = AVM2 p-code +ui.list.pageTitle = AVM2 p-code +ui.list.documentTitle = AVM2 p-code +ui.list.pageDescription = p-code \u8bbe\u7f6e\u5217\u8868 + + +name.QName = \u9650\u5b9a\u540d +name.QNameA = \u5c5e\u6027\u9650\u5b9a\u540d +name.RTQName = \u8fd0\u884c\u65f6\u9650\u5b9a\u540d +name.RTQNameA = \u5c5e\u6027\u7684\u8fd0\u884c\u65f6\u9650\u5b9a\u540d +name.RTQNameL = \u8fd0\u884c\u65f6\u9650\u5b9a\u540d\u5ef6\u8fdf +name.RTQNameLA = \u5c5e\u6027\u7684\u8fd0\u884c\u65f6\u9650\u5b9a\u540d\u5ef6\u8fdf +name.Multiname = \u591a\u4e2a\u547d\u540d\u7a7a\u95f4\u540d\u79f0 +name.MultinameA = \u5c5e\u6027\u7684\u591a\u4e2a\u547d\u540d\u7a7a\u95f4\u540d\u79f0 +name.MultinameL = \u591a\u4e2a\u547d\u540d\u7a7a\u95f4\u540d\u79f0\u5ef6\u8fdf +name.MultinameLA = \u5c5e\u6027\u7684\u591a\u4e2a\u547d\u540d\u7a7a\u95f4\u540d\u79f0\u5ef6\u8fdf +name.TypeName = \u7c7b\u578b\u540d\u79f0 + +namespacekind.Namespace = \u547d\u540d\u7a7a\u95f4 +namespacekind.PrivateNamespace = \u79c1\u6709\u547d\u540d\u7a7a\u95f4 +namespacekind.PackageNamespace = \u5305\u547d\u540d\u7a7a\u95f4 +namespacekind.PackageInternalNs = \u5305\u5185\u90e8\u547d\u540d\u7a7a\u95f4 +namespacekind.ProtectedNamespace = \u53d7\u4fdd\u62a4\u7684\u547d\u540d\u7a7a\u95f4 +namespacekind.ExplicitNamespace = \u663e\u5f0f\u547d\u540d\u7a7a\u95f4 +namespacekind.StaticProtectedNs = \u9759\u6001\u4fdd\u62a4\u547d\u540d\u7a7a\u95f4 + +trait = Trait +#types: +trait.method = type\u65b9\u6cd5\u7684\u7279\u5f81 +trait.slot = type\u69fd\u7684\u7279\u5f81 +trait.const = const\u7c7b\u578b\u7684\u7279\u5f81 +trait.setter = type\u8bbe\u7f6e\u5668\u7684\u7279\u5f81 +trait.getter = type\u83b7\u53d6\u5668\u7684\u7279\u5f81 +trait.class = type\u7c7b\u7684\u7279\u5f81 +trait.function = type\u51fd\u6570\u7684\u7279\u5f81 + +trait.metadata = \u5143\u6570\u636e +trait.metadata.item = \u4e00\u4e2a\u5143\u6570\u636e\u9879 +trait.metadata.end = \u5143\u6570\u636e\u7ed3\u5c3e + +trait.flag = \u7279\u5f81\u6807\u8bb0 +trait.flag.METADATA = \u9644\u52a0\u5143\u6570\u636e\u7684\u7279\u5f81 +trait.flag.FINAL = if final\u7684\u7279\u5f81 +trait.flag.OVERRIDE = \u8986\u76d6\u7236\u9879\u7684\u7279\u5f81 + +#method/getter/setter +trait.dispid = \u6d3e\u9063 id +#slot/const/class/function +trait.slotid = \u63d2\u69fd id + +method = \u65b9\u6cd5 +method.name = \u65b9\u6cd5\u540d\u79f0 +method.flag = \u65b9\u6cd5\u6807\u8bb0 +method.flag.NEED_ARGUMENTS = \u5728\u5bc4\u5b58\u5668method_info.param_count+1\u4e2d\u521b\u5efa"\u53c2\u6570"\u5bf9\u8c61 +method.flag.NEED_ACTIVATION = \u6b64\u65b9\u6cd5\u4f7f\u7528newactivation\u6307\u4ee4 +method.flag.NEED_REST = \u5728\u5bc4\u5b58\u5668method_info.param_count+1\u4e2d\u521b\u5efa\u5269\u4f59\u53c2\u6570\u6570\u7ec4 +method.flag.HAS_OPTIONAL = \u6b64\u65b9\u6cd5\u5177\u6709\u53ef\u9009\u53c2\u6570 +method.flag.IGNORE_REST = \u5ffd\u7565\u5176\u4ed6 +method.flag.EXPLICIT = \u663e\u5f0f +method.flag.SETSDXNS = \u6b64\u65b9\u6cd5\u4f7f\u7528dxns\u6216dxnslate\u6307\u4ee4 +method.flag.HAS_PARAMNAMES = \u6b64\u65b9\u6cd5\u5728method_info\u4e2d\u5177\u6709\u53c2\u6570\u540d\u79f0 +method.param = \u53c2\u6570\u7c7b\u578b +method.paramname = \u53c2\u6570\u540d\u79f0 +method.optional = \u53ef\u9009\u53c2\u6570\u7684\u9ed8\u8ba4\u503c +method.returns = \u65b9\u6cd5\u7684\u8fd4\u56de\u7c7b\u578b +method.body = \u65b9\u6cd5\u4e3b\u4f53 +method.body.maxstack = \u6267\u884c\u70b9\u7684\u6700\u5927\u5806\u6808\u69fd\u6570 +method.body.localcount = \u6700\u9ad8\u7f16\u53f7\u7684\u672c\u5730\u5bc4\u5b58\u5668\u7684\u7d22\u5f15\u503c+1 +method.body.initscopedepth = \u53ef\u8bbf\u95ee\u7684\u6700\u5c0f\u6df1\u5ea6\u8303\u56f4(\u4e0e\u6700\u5927\u6df1\u5ea6\u8303\u56f4\u6709\u5173) +method.body.maxscopedepth = \u53ef\u8bbf\u95ee\u7684\u6700\u5927\u6df1\u5ea6\u8303\u56f4 +method.body.try = \u5f02\u5e38\u5757 +method.body.try.from = \u4ece\u5df2\u6fc0\u6d3b\u5f02\u5e38\u7684\u4f4d\u7f6e\u5f00\u59cb +method.body.try.to = \u5728\u5df2\u7981\u7528\u5f02\u5e38\u7684\u4f4d\u7f6e\u540e\u7ed3\u675f +method.body.try.target = \u5982\u679c\u629b\u51fa\u6b64\u7c7b\u578b\u7684\u5f02\u5e38\uff0c\u63a7\u5236\u53f0\u5e94\u8be5\u8df3\u8f6c\u5230\u7684\u4f4d\u7f6e +method.body.try.type = \u6355\u83b7\u7684\u5f02\u5e38\u7c7b\u578b +method.body.try.name = \u5f02\u5e38\u7684\u5bf9\u8c61\u540d\u79f0 +method.body.code = \u65b9\u6cd5\u4e3b\u4f53\u4ee3\u7801 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java index 770d83a4c..e7b09d667 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java @@ -301,7 +301,6 @@ public abstract class FontTag extends DrawableTag implements AloneTag { return "Arial"; } - //First font return installedFontsByFamily.keySet().iterator().next(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java index 6ca70db83..f0f6390c1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java @@ -153,6 +153,8 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.stream.XMLStreamException; import javax.xml.transform.OutputKeys; @@ -169,7 +171,6 @@ import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; -import org.xml.sax.helpers.XMLReaderFactory; /** * @@ -3840,7 +3841,8 @@ public class XFLConverter { XMLReader parser; try { SAXParserFactory factory = SAXParserFactory.newInstance(); - parser = XMLReaderFactory.createXMLReader(); + SAXParser sparser = factory.newSAXParser(); + parser = sparser.getXMLReader(); parser.setContentHandler(tparser); parser.setErrorHandler(tparser); html = "\n" @@ -3853,7 +3855,7 @@ public class XFLConverter { System.out.println(html); System.err.println(tparser.result); } - } catch (SAXException | IOException e) { + } catch (SAXException | IOException| ParserConfigurationException e) { logger.log(Level.SEVERE, "Error while converting HTML", e); } return tparser.result.toString(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/AbstractGraphTargetVisitor.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/AbstractGraphTargetVisitor.java new file mode 100644 index 000000000..cb8faa5e5 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/AbstractGraphTargetVisitor.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2010-2018 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.graph; + +import java.util.Collection; + +/** + * + * @author JPEXS + */ +public abstract class AbstractGraphTargetVisitor implements GraphTargetVisitorInterface { + + @Override + public abstract void visit(GraphTargetItem item); + + @Override + public final void visitAll(Collection items) { + for (GraphTargetItem item : items) { + visit(item); + } + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java index 7db0bb9c9..a6ffa1f82 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -2065,7 +2065,8 @@ public class Graph { isIf = false; stack.push(new OrItem(null, localData.lineStartInstruction, leftSide, rightSide)); } else { - //:-( + stack.push(prevExpr); //push it back + //Still unstructured } } else { isIf = false; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSourceItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSourceItem.java index 66bf74294..1feb9f7b9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSourceItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSourceItem.java @@ -59,4 +59,20 @@ public interface GraphSourceItem extends Serializable, Cloneable { public String getFile(); public abstract int getBytesLength(); + + /** + * Gets virtual address. A virtual adress can be used for storing original + * address before applying deobfuscation + * + * @return + */ + public long getVirtualAddress(); + + /** + * Sets virtual address. A virtual adress can be used for storing original + * address before applying deobfuscation + * + * @param virtualAddress + */ + public void setVirtualAddress(long virtualAddress); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java index b36624132..ec0cce224 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.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.graph; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -42,6 +43,7 @@ import com.jpexs.decompiler.graph.model.NotItem; import com.jpexs.decompiler.graph.model.TrueItem; import java.io.Serializable; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -498,12 +500,48 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { public List getAllSubItems() { List ret = new ArrayList<>(); - if (value != null) { - ret.add(value); - } + visit(new AbstractGraphTargetVisitor() { + @Override + public void visit(GraphTargetItem item) { + if (item != null) { + ret.add(item); + } + } + }); return ret; } + public Set getAllSubItemsRecursively() { + Set ret = new HashSet<>(); + visitRecursively(new AbstractGraphTargetVisitor() { + @Override + public void visit(GraphTargetItem item) { + ret.add(item); + } + }); + return ret; + } + + public final void visitRecursively(GraphTargetVisitorInterface visitor) { + Set visitedItems = new HashSet<>(); + visit(new AbstractGraphTargetVisitor() { + @Override + public void visit(GraphTargetItem item) { + if (item != null && !visitedItems.contains(item)) { + visitedItems.add(item); + visitor.visit(item); + item.visit(this); + } + } + }); + } + + public void visit(GraphTargetVisitorInterface visitor) { + if (value != null) { + visitor.visit(value); + } + } + public abstract GraphTargetItem returnType(); @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetVisitorInterface.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetVisitorInterface.java new file mode 100644 index 000000000..90fd1fb79 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetVisitorInterface.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2010-2018 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.graph; + +import java.util.Collection; + +/** + * + * @author JPEXS + */ +public interface GraphTargetVisitorInterface { + + public void visit(GraphTargetItem item); + + public void visitAll(Collection items); +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java index 4273bb441..7fc85d641 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BinaryOpItem.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.graph.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -20,6 +21,7 @@ import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -208,10 +210,8 @@ public abstract class BinaryOpItem extends GraphTargetItem implements BinaryOp { } @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(getLeftSide()); - ret.add(getRightSide()); - return ret; + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(getLeftSide()); + visitor.visit(getRightSide()); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BlockItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BlockItem.java index 992d6baa3..3a0c66ee6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BlockItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BlockItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import java.util.List; @@ -38,6 +40,11 @@ public class BlockItem extends GraphTargetItem { this.commands = commands; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(commands); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.startBlock(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java index 40a1bee3b..c5264b6d5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -20,6 +21,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import java.util.List; @@ -37,6 +39,11 @@ public class CommaExpressionItem extends GraphTargetItem { this.commands = commands; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visitAll(commands); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { boolean first = true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DoWhileItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DoWhileItem.java index 66e1c8ad4..7451eebdb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DoWhileItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DoWhileItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; @@ -58,6 +60,16 @@ public class DoWhileItem extends LoopItem implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + if (commands != null) { + visitor.visitAll(commands); + } + if (expression != null) { + visitor.visitAll(expression); + } + } + public DoWhileItem(GraphSourceItem src, GraphSourceItem lineStartIns, Loop loop, List commands, List expression) { super(src, lineStartIns, loop); this.expression = expression; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/ForItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/ForItem.java index 9eea6f242..4de1e69db 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/ForItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/ForItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; @@ -60,6 +62,20 @@ public class ForItem extends LoopItem implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + if (firstCommands != null) { + visitor.visitAll(firstCommands); + } + visitor.visit(expression); + if (commands != null) { + visitor.visitAll(commands); + } + if (finalCommands != null) { + visitor.visitAll(finalCommands); + } + } + public ForItem(GraphSourceItem src, GraphSourceItem lineStartIns, Loop loop, List firstCommands, GraphTargetItem expression, List finalCommands, List commands) { super(src, lineStartIns, loop); this.firstCommands = firstCommands; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java index 4981db246..8aa048ef2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; @@ -60,6 +62,17 @@ public class IfItem extends GraphTargetItem implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(expression); + if (onTrue != null) { + visitor.visitAll(onTrue); + } + if (onFalse != null) { + visitor.visitAll(onFalse); + } + } + public IfItem(GraphSourceItem src, GraphSourceItem lineStartIns, GraphTargetItem expression, List onTrue, List onFalse) { super(src, lineStartIns, NOPRECEDENCE); this.expression = expression; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/SwitchItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/SwitchItem.java index 7ae14163a..2e96951e2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/SwitchItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/SwitchItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; @@ -52,6 +54,15 @@ public class SwitchItem extends LoopItem implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(switchedObject); + visitor.visitAll(caseValues); + for (List c : caseCommands) { + visitor.visitAll(c); + } + } + public SwitchItem(GraphSourceItem instruction, GraphSourceItem lineStartIns, Loop loop, GraphTargetItem switchedObject, List caseValues, List> caseCommands, List valuesMapping) { super(instruction, lineStartIns, loop); this.switchedObject = switchedObject; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java index 4ae47fddf..f69f2fd2b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -20,6 +21,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -42,6 +44,12 @@ public class TernarOpItem extends GraphTargetItem { this.onFalse = onFalse; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + visitor.visit(onTrue); + visitor.visit(onFalse); + } + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { expression.toString(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/WhileItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/WhileItem.java index 1921ce989..6d25875a2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/WhileItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/WhileItem.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.graph.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -23,6 +24,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; @@ -53,6 +55,16 @@ public class WhileItem extends LoopItem implements Block { return ret; } + @Override + public void visit(GraphTargetVisitorInterface visitor) { + if (expression != null) { + visitor.visitAll(expression); + } + if (commands != null) { + visitor.visitAll(commands); + } + } + public WhileItem(GraphSourceItem src, GraphSourceItem lineStartIns, Loop loop, List expression, List commands) { super(src, lineStartIns, loop); this.expression = expression; diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/Helper.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/Helper.java index 79da0ba6a..f9b628848 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/Helper.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/Helper.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.helpers; import com.jpexs.decompiler.flash.AppResources; @@ -50,6 +51,7 @@ import java.net.URLConnection; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Base64; import java.util.BitSet; import java.util.Collection; import java.util.HashMap; @@ -60,7 +62,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.xml.bind.DatatypeConverter; /** * Class with helper method @@ -842,13 +843,15 @@ public class Helper { } } - char lastChar = sb.charAt(sb.length() - 1); - if (lastChar == ' ') { - sb.setLength(sb.length() - 1); - sb.append("%20"); - } else if (lastChar == '.') { - sb.setLength(sb.length() - 1); - sb.append("%2E"); + if (sb.length() > 0) { + char lastChar = sb.charAt(sb.length() - 1); + if (lastChar == ' ') { + sb.setLength(sb.length() - 1); + sb.append("%20"); + } else if (lastChar == '.') { + sb.setLength(sb.length() - 1); + sb.append("%2E"); + } } str = sb.toString(); @@ -884,11 +887,7 @@ public class Helper { } try { f.setAccessible(true); - - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); - + Object v = f.get(obj); if (v != null) { try { @@ -911,7 +910,7 @@ public class Helper { f.set(obj, null); } - } catch (UnsupportedOperationException | SecurityException | IllegalArgumentException | IllegalAccessException | NoSuchFieldException ex) { + } catch (UnsupportedOperationException | SecurityException | IllegalArgumentException | IllegalAccessException ex) { throw new Error(ex); } } @@ -1423,11 +1422,11 @@ public class Helper { } public static String byteArrayToBase64String(byte[] data) { - return DatatypeConverter.printBase64Binary(data); + return Base64.getEncoder().encodeToString(data); } public static byte[] base64StringToByteArray(String base64) { - return DatatypeConverter.parseBase64Binary(base64); + return Base64.getDecoder().decode(base64); } /** diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/resource/Swf2Exe.bin b/libsrc/ffdec_lib/src/com/jpexs/helpers/resource/Swf2Exe.bin index 54688ce22..94dbb3b34 100644 Binary files a/libsrc/ffdec_lib/src/com/jpexs/helpers/resource/Swf2Exe.bin and b/libsrc/ffdec_lib/src/com/jpexs/helpers/resource/Swf2Exe.bin differ diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/SwfXmlExportImportTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/SwfXmlExportImportTest.java index e9f21e843..08ee00481 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/SwfXmlExportImportTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/SwfXmlExportImportTest.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; import com.jpexs.decompiler.flash.abc.NotSameException; @@ -83,7 +84,7 @@ public class SwfXmlExportImportTest extends FileTestBase { } } - @Test(dataProvider = "provideFiles") + @Test(dataProvider = "provideFiles", enabled = false) public void testExportImportXml(String filePath) { try { File f = new File(filePath); diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/defaultsyntaxkit/config_zh.properties b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/defaultsyntaxkit/config_zh.properties index 35962b10f..f22adbb19 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/defaultsyntaxkit/config_zh.properties +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/defaultsyntaxkit/config_zh.properties @@ -12,18 +12,18 @@ Action.goto-line.ToolTip = \u8df3\u8f6c\u5230\u884c\u53f7 Action.indent.MenuText = \u7f29\u8fdb Action.unindent.MenuText = \u53cd\u7f29\u8fdb Action.undo.MenuText = \u64a4\u9500 -Action.redo.MenuText = \u6062\u590d +Action.redo.MenuText = \u91cd\u505a Action.delete-lines.MenuText = \u5220\u9664\u884c -Action.dup-lines-up.MenuText = Duplicate Lines \u4ee5\u4e0a -Action.dup-lines-down.MenuText = Duplicate Lines \u4ee5\u4e0b -Action.toggle-lines.MenuText = \u5207\u6362\u884c\u53f7 -Action.show-abbs.MenuText = \u663e\u793a\u7f29\u7565 -Action.show-abbs.ToolTip = \u663e\u793a\u7f29\u7565 +Action.dup-lines-up.MenuText = \u590d\u5236\u4e0a\u4e00\u884c +Action.dup-lines-down.MenuText = \u590d\u5236\u4e0a\u4e00\u884c +Action.toggle-lines.MenuText = \u663e\u793a\u884c\u53f7 +Action.show-abbs.MenuText = \u663e\u793a\u7f29\u5199 +Action.show-abbs.ToolTip = \u663e\u793a\u7f29\u5199 Action.complete-word.MenuText = \u81ea\u52a8\u5b8c\u6210 Action.jump-to-pair.MenuText = \u8df3\u8f6c\u5230\u914d\u5bf9 -Action.toggle-comments.MenuText = \u5207\u6362\u6ce8\u91ca +Action.toggle-comments.MenuText = \u6ce8\u91ca\u4ee3\u7801 -# !!!! FFDec translators - please do not edit anything below this line !!! +# !!!! FFDec translators - \u8bf7\u52ff\u4fee\u6539\u5206\u5272\u7ebf\u4e0b\u65b9\u7684\u4efb\u4f55\u5185\u5bb9 !!! #========================================================================== Components = jsyntaxpane.components.PairsMarker, \ diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/syntaxkits/flasm3syntaxkit/config_zh.properties b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/syntaxkits/flasm3syntaxkit/config_zh.properties index 1a6406c04..918653225 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/syntaxkits/flasm3syntaxkit/config_zh.properties +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/syntaxkits/flasm3syntaxkit/config_zh.properties @@ -1,7 +1,7 @@ -Action.combo-completion.MenuText = \u83b7\u53d6\u4e00\u4e2a\u6307\u4ee4 -Action.toggle-token-marker.MenuText = \u5207\u6362\u6807\u8bb0\u5236\u4f5c +Action.combo-completion.MenuText = \u9009\u62e9\u4e00\u4e2a\u6307\u4ee4 +Action.toggle-token-marker.MenuText = \u5207\u6362Token\u6807\u8bb0 -# !!!! FFDec translators - please do not edit anything below this line !!! +# !!!! FFDec translators - \u8bf7\u52ff\u4fee\u6539\u5206\u5272\u7ebf\u4e0b\u65b9\u7684\u4efb\u4f55\u5185\u5bb9 !!! #========================================================================== # diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/syntaxkits/flasmsyntaxkit/config_zh.properties b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/syntaxkits/flasmsyntaxkit/config_zh.properties index 0185f31fa..4d5a16303 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/syntaxkits/flasmsyntaxkit/config_zh.properties +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/META-INF/services/jsyntaxpane/syntaxkits/flasmsyntaxkit/config_zh.properties @@ -1,6 +1,6 @@ -Action.toggle-token-marker.MenuText = \u5207\u6362\u6807\u8bb0\u5236\u4f5c +Action.toggle-token-marker.MenuText = \u5207\u6362Token\u6807\u8bb0 -# !!!! FFDec translators - please do not edit anything below this line !!! +# !!!! FFDec translators - \u8bf7\u52ff\u4fee\u6539\u5206\u5272\u7ebf\u4e0b\u65b9\u7684\u4efb\u4f55\u5185\u5bb9 !!! #========================================================================== # diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle_zh.properties b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle_zh.properties index 53f7b2506..0a46f3eb6 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle_zh.properties +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle_zh.properties @@ -1,25 +1,25 @@ -SyntaxTester.title = JSyntaxPane \u68c0\u6d4b -SyntaxTester.lblCaretPos.text = \u63d2\u5165\u4f4d\u7f6e -SyntaxTester.lblToken.text = \u6807\u8bb0\u4e0b\u9762\u5149\u6807 +SyntaxTester.title = JSyntaxPane \u6d4b\u8bd5 +SyntaxTester.lblCaretPos.text = \u5149\u6807\u4f4d\u7f6e +SyntaxTester.lblToken.text = \u5149\u6807\u4e0b\u7684Token SyntaxTester.jEdtTest.contentType = -NO_TOKEN_AT_CURSOR = \u65e0\u6807\u8bb0\u5728\u5149\u6807\u5904 +NO_TOKEN_AT_CURSOR = \u5149\u6807\u5904\u6ca1\u6709Token HTMLPreviewFrame.title = HTML \u9884\u89c8 HTMLPreviewFrame.jEdtHtml.contentType = text/html -QuickFindDialog.jChkWrap.text = \u5305 +QuickFindDialog.jChkWrap.text = \u6362\u884c QuickFindDialog.jChkRegExp.text = \u6b63\u5219\u8868\u8fbe\u5f0f QuickFindDialog.jChkIgnoreCase.text = \u5ffd\u7565\u5927\u5c0f\u5199 QuickFindDialog.jLabel1.text = \u5feb\u901f\u67e5\u627e -QuickFindDialog.NotFound = \u672a\u627e\u5230 +QuickFindDialog.NotFound = \u67e5\u627e\u65e0\u7ed3\u679c ReplaceDialog.jChkRegex.text = \u6b63\u5219\u8868\u8fbe\u5f0f ReplaceDialog.jChkIgnoreCase.text = \u5ffd\u7565\u5927\u5c0f\u5199 ReplaceDialog.jLblReplace.text = \u66ff\u6362 ReplaceDialog.jTglHighlight.text = \u9ad8\u4eae ReplaceDialog.jBtnReplaceAll.text = \u66ff\u6362\u5168\u90e8 ReplaceDialog.jBtnPrev.text = \u4e0a\u4e00\u4e2a -ReplaceDialog.jChkWrap.toolTipText = \u6362\u5230\u4e00\u5f00\u59cb\u8fbe\u5230\u7ed3\u5c3e\u65f6 -ReplaceDialog.jChkWrap.text = \u73af\u7ed5 -ReplaceDialog.title = \u67e5\u627e\u548c\u66ff\u6362 +ReplaceDialog.jChkWrap.toolTipText = \u67e5\u627e\u5230\u5e95\u65f6\u81ea\u52a8\u8df3\u5230\u9876\u90e8 +ReplaceDialog.jChkWrap.text = \u5faa\u73af +ReplaceDialog.title = \u67e5\u627e\u5e76\u66ff\u6362 ReplaceDialog.jBtnNext.text = \u4e0b\u4e00\u4e2a ReplaceDialog.jLblFind.text = \u67e5\u627e ReplaceDialog.jBtnReplace.text = \u66ff\u6362 @@ -27,13 +27,13 @@ ShowAbbsDialog.title = \u7f29\u5199 GotoLineDialog.title = \u8f6c\u5230\u884c GotoLineDialog.jBtnOk.text = \u8f6c\u5230 -DocumentSearchData.SearchStringNotFound = \u641c\u7d22\u5b57\u7b26\u4e32 {0} \u672a\u627e\u5230 +DocumentSearchData.SearchStringNotFound = \u627e\u4e0d\u5230"{0}" DocumentSearchData.Find = \u67e5\u627e -ScriptAction.NoScriptConfigured = \u52a8\u4f5c\u5df2\u914d\u7f6e\u4e86\u811a\u672c\u51fd\u6570 -ScriptAction.ErrorInScript = \u811a\u672c\u9519\u8bef -ScriptAction.NoScriptFoundIn = \u6ca1\u6709\u811a\u672c\u4e2d\u627e\u5230: -ScriptRunnerAction.ErrorExecutingScript = \u6267\u884c\u811a\u672c\u9519\u8bef:\\n -ScriptRunnerAction.ScriptError = \u811a\u672c\u9519\u8bef -ScriptRunnerAction.ScriptEngineNotFound = \u811a\u672c\u5f15\u64ce [{0}] \u672a\u627e\u5230\u3002\u7981\u7528\u6b64\u52a8\u4f5c\u5417\uff1f -ShowAbbsAction.NoAbbsForType = \u6b64\u5185\u5bb9\u7c7b\u578b\u6ca1\u6709\u7f29\u5199\u5b58\u5728 +ScriptAction.NoScriptConfigured = \u64cd\u4f5c\u672a\u914d\u7f6e\u811a\u672c\u51fd\u6570 +ScriptAction.ErrorInScript = \u811a\u672c\u4e2d\u51fa\u73b0\u9519\u8bef +ScriptAction.NoScriptFoundIn = \u627e\u4e0d\u5230\u811a\u672c: +ScriptRunnerAction.ErrorExecutingScript = \u6267\u884c\u811a\u672c\u65f6\u51fa\u9519:\\n +ScriptRunnerAction.ScriptError = \u811a\u672c\u51fa\u9519 +ScriptRunnerAction.ScriptEngineNotFound = \u627e\u4e0d\u5230[{0}]\u811a\u672c\u5f15\u64ce.\u8981\u7981\u7528\u6b64\u52a8\u4f5c\u5417\uff1f +ShowAbbsAction.NoAbbsForType = \u6b64\u5185\u5bb9\u7c7b\u578b\u4e0d\u5b58\u5728\u7f29\u5199 diff --git a/nsis_locales/SimpChinese.nsh b/nsis_locales/SimpChinese.nsh index 97b7db342..b3693ef5b 100644 --- a/nsis_locales/SimpChinese.nsh +++ b/nsis_locales/SimpChinese.nsh @@ -1,61 +1,63 @@ !define LANG "SIMPCHINESE" ; Must be the lang name define by NSIS -!insertmacro LANG_STRING STRING_SWC_NOTFOUND "有关 Adobe 的 PlayerGlobal.SWC 网页没有找到。也许您的防火墙阻止访问或者您有使一些代理。您可以在高级设置以后设置路径SWC文件。" +!insertmacro LANG_STRING STRING_SWC_NOTFOUND "在Adobe网页上找不到PlayerGlobal.SWC,也许防火墙阻止了访问或启用了某些代理,您可以稍后在高级设置中设置SWC文件的路径。" !insertmacro LANG_STRING STRING_SAVED_TO "保存到" !insertmacro LANG_STRING STRING_EXISTS_SKIP_DOWNLOAD "已经存在,跳过下载" !insertmacro LANG_STRING STRING_STARTING_DOWNLOAD "开始下载" !insertmacro LANG_STRING STRING_DESKTOP_SHORTCUT "桌面快捷方式" !insertmacro LANG_STRING STRING_ADD_CONTEXT_MENU "添加到右键菜单" -!insertmacro LANG_STRING STRING_SECTION_APP "应用程序 GUI 和库" -!insertmacro LANG_STRING STRING_SECTION_SWC "从 Adobe 网站下载 Flash 播放器库 - 用于 ActionScript 以及其他功能" -!insertmacro LANG_STRING STRING_SECTION_CONTEXT_MENU "添加 FFDec 在 Windows 资源管理器关联 SWF 和 GPX 文件上下文菜单。" -!insertmacro LANG_STRING STRING_SECTION_SHORTCUT "在创建桌面快捷方式链接" +!insertmacro LANG_STRING STRING_SECTION_APP "应用程序GUI和库" +!insertmacro LANG_STRING STRING_SECTION_SWC "从Adobe网站下载FlashPlayer库-对于ActionScript直接编辑和其他功能很有用" +!insertmacro LANG_STRING STRING_SECTION_CONTEXT_MENU "将FFDec添加到Windows资源管理器中的SWF和GFX文件的右键菜单中。" +!insertmacro LANG_STRING STRING_SECTION_SHORTCUT "在桌面上创建快捷方式" !insertmacro LANG_STRING STRING_UNINST_USER "删除用户配置" !insertmacro LANG_STRING STRING_HELP_US "帮助我们" -!insertmacro LANG_STRING STRING_HELP_US_FREE "FFDec 反编译器是自由和开放源码项目。如果你想支持我们,你可以告诉别人我们的反编译。使用分享链接到我们的网页,谢谢。" -!insertmacro LANG_STRING STRING_HELP_US_DONATE "如果你想表达对我的工作的开发和支持,我们也接受赞赏和捐赠。" -!insertmacro LANG_STRING STRING_HELP_US_MORE "点击这里查看更多信息:" -!insertmacro LANG_STRING STRING_HELP_US_DOYOU "你知不知道你可以帮助我们?" -!insertmacro LANG_STRING STRING_HELP_US_BUTTON "帮助我们!" -!insertmacro LANG_STRING STRING_SWC "下载 PlayerGlobal.swc" -!insertmacro LANG_STRING STRING_SWC_CHECK "检查 Adobe 网站最新的 Playerglobal.swc 文件" +!insertmacro LANG_STRING STRING_HELP_US_FREE "本反编译器是完全免费并且开源的,如果想支持我们,可以向别人介绍我们的反编译器,分享我们的页面链接,谢谢。" +!insertmacro LANG_STRING STRING_HELP_US_DONATE "如果您想表达对作者投入的时间和资源的感谢,我们也接受感谢与捐赠。" +!insertmacro LANG_STRING STRING_HELP_US_MORE "单击此处以获取更多信息:" +!insertmacro LANG_STRING STRING_HELP_US_DOYOU "您知道您可以为我们提供帮助吗?" +!insertmacro LANG_STRING STRING_HELP_US_BUTTON "帮助我们!" +!insertmacro LANG_STRING STRING_SWC "下载PlayerGlobal.swc" +!insertmacro LANG_STRING STRING_SWC_CHECK "正在Adobe网站上检查最新的PlayerGlobal.swc文件" ;Flash ActiveX: -!insertmacro LANG_STRING STRING_FLASH_AX_REQUIRED_TITLE "需要 Flash Player ActiveX 控件" -!insertmacro LANG_STRING STRING_FLASH_AX_REQUIRED "该应用程序需要 Flash ActiveX 控件" -!insertmacro LANG_STRING STRING_FLASH_AX_WILLINSTALL "该应用程序需要安装 Flash ActiveX 控件。这将下载并安装作为安装的一部分。" -!insertmacro LANG_STRING STRING_FLASH_AX_ALREADYINSTALLED "Flash ActiveX 已安装" -!insertmacro LANG_STRING STRING_FLASH_AX_MISSING "结果: Flash ActiveX 缺失。" -!insertmacro LANG_STRING STRING_FLASH_AX_WILLDOWNLOAD "下载 Flash 大约" +!insertmacro LANG_STRING STRING_FLASH_AX_REQUIRED_TITLE "需要Flash Player ActiveX控件" +!insertmacro LANG_STRING STRING_FLASH_AX_REQUIRED "此应用程序需要Flash ActiveX控件" +!insertmacro LANG_STRING STRING_FLASH_AX_WILLINSTALL "此应用程序需要安装Flash ActiveX控件,将在安装过程中下载并安装。" +!insertmacro LANG_STRING STRING_FLASH_AX_ALREADYINSTALLED "已安装Flash ActiveX" +!insertmacro LANG_STRING STRING_FLASH_AX_MISSING "结果:缺少Flash ActiveX。" +!insertmacro LANG_STRING STRING_FLASH_AX_WILLDOWNLOAD "即将下载Flash" !insertmacro LANG_STRING STRING_FLASH_AX_DOWNRESULT "下载结果 = " -!insertmacro LANG_STRING STRING_FLASH_AX_CANNOTDOWNLOAD "无法下载 Flash ActiveX。您可以稍后手动下载或使用我们自己的 Flash 浏览器。" -!insertmacro LANG_STRING STRING_FLASH_AX_LAUNCHSETUP "启动 Flash 设置" -!insertmacro LANG_STRING STRING_FLASH_AX_INTERRUPTED "Flash 的设置已发生非正常中断 - 返回代码" -!insertmacro LANG_STRING STRING_FLASH_AX_SETUPOUTCOME "检查 Flash 设置结果" -!insertmacro LANG_STRING STRING_FLASH_AX_UNABLEFINDAFTER "找不到 Flash ActiveX,即使 Flash 安装成功" -!insertmacro LANG_STRING STRING_FLASH_AX_UNABLEINSTALL "无法安装 Flash ActiveX。您可以稍后手动下载或使用我们自己的 Flash 浏览器。" -!insertmacro LANG_STRING STRING_FLASH_AX_SETUPFINISHED "Flash 安装完成" +!insertmacro LANG_STRING STRING_FLASH_AX_CANNOTDOWNLOAD "无法下载Flash ActiveX,您可以稍后手动下载或使用我们自己的Flash查看器。" +!insertmacro LANG_STRING STRING_FLASH_AX_LAUNCHSETUP "启动Flash安装" +!insertmacro LANG_STRING STRING_FLASH_AX_INTERRUPTED "FLASH设置已异常中断-返回代码" +!insertmacro LANG_STRING STRING_FLASH_AX_SETUPOUTCOME "检查Flash安装的结果" +!insertmacro LANG_STRING STRING_FLASH_AX_UNABLEFINDAFTER "即使Flash安装成功,也无法找到Flash ActiveX" +!insertmacro LANG_STRING STRING_FLASH_AX_UNABLEINSTALL "无法安装Flash ActiveX,您可以稍后自行下载它或使用我们的Flash查看器。" +!insertmacro LANG_STRING STRING_FLASH_AX_SETUPFINISHED "Flash安装完成" !insertmacro LANG_STRING STRING_FLASH_AX_DETECTING "检测 Flash ActiveX" ;JRE: -!insertmacro LANG_STRING STRING_JRE_REQUIRED_TITLE "需要安装 JRE" -!insertmacro LANG_STRING STRING_JRE_REQUIRED "该应用程序需要 Java ${JRE_VERSION} 或更高" -!insertmacro LANG_STRING STRING_JRE_REQUIRED_INFO "该应用程序需要安装 Java 运行环境。这将下载并安装作为安装的一部分。" -!insertmacro LANG_STRING STRING_JRE_UPDATEREQUIRED_TITLE "JRE 需要更新" -!insertmacro LANG_STRING STRING_JRE_UPDATEREQUIRED "该应用程序需要 Java ${JRE_VERSION} 或更高" -!insertmacro LANG_STRING STRING_JRE_UPDATEREQUIRED_INFO "该应用程序需要一个较新的 Java 运行环境的版本。这将下载并安装作为安装的一部分。" -!insertmacro LANG_STRING STRING_JRE_DETECTVERSION "检测 JRE 版本" -!insertmacro LANG_STRING STRING_JRE_DETECTCOMPLETE "JRE 版本检测完成 - 结果 = " -!insertmacro LANG_STRING STRING_JRE_DETECTCOMPLETE_OLD "发现旧的 JRE" -!insertmacro LANG_STRING STRING_JRE_DETECTCOMPLETE_NO "没有找到 JRE" -!insertmacro LANG_STRING STRING_JRE_DETECTCOMPARE_1 "版本比较 " +!insertmacro LANG_STRING STRING_JRE_REQUIRED_TITLE "需要安装JRE" +!insertmacro LANG_STRING STRING_JRE_REQUIRED "此应用程序需要Java ${JRE_VERSION}或更高版本" +!insertmacro LANG_STRING STRING_JRE_REQUIRED_INFO "此应用程序需要安装Java Runtime Environment,将在安装过程中下载并安装。" +!insertmacro LANG_STRING STRING_JRE_UPDATEREQUIRED_TITLE "需要更新JRE" +!insertmacro LANG_STRING STRING_JRE_UPDATEREQUIRED "此应用程序需要Java ${JRE_VERSION}或更高版本" +!insertmacro LANG_STRING STRING_JRE_UPDATEREQUIRED_INFO "此应用程序需要Java Runtime Environment的更新版本,它将作为安装的一部分下载并安装。" +!insertmacro LANG_STRING STRING_JRE_DETECTVERSION "检测JRE版本" +!insertmacro LANG_STRING STRING_JRE_DETECTCOMPLETE "JRE版本检测完成-结果 = " +!insertmacro LANG_STRING STRING_JRE_DETECTCOMPLETE_OLD "发现旧的JRE" +!insertmacro LANG_STRING STRING_JRE_DETECTCOMPLETE_NO "没有找到JRE" +!insertmacro LANG_STRING STRING_JRE_DETECTCOMPARE_1 "比较版本 " !insertmacro LANG_STRING STRING_JRE_DETECTCOMPARE_2 " 到 " !insertmacro LANG_STRING STRING_JRE_DETECTCOMPARE_3 " 结果在 " -!insertmacro LANG_STRING STRING_JRE_WILLDOWNLOAD "大约下载 JRE " +!insertmacro LANG_STRING STRING_JRE_WILLDOWNLOAD "即将下载JRE" !insertmacro LANG_STRING STRING_JRE_DOWNRESULT "下载结果 = " -!insertmacro LANG_STRING STRING_JRE_CANNOTDOWNLOAD "无法下载 Java。您可以稍后手动下载。" -!insertmacro LANG_STRING STRING_JRE_LAUNCHSETUP "启动 JRE 设置" -!insertmacro LANG_STRING STRING_JRE_SETUPFINISHED "JRE 安装完成" -!insertmacro LANG_STRING STRING_JRE_INTERRUPTED "JRE 安装已发生非正常中断 - 返回代码 " -!insertmacro LANG_STRING STRING_JRE_SETUPOUTCOME "检查 JRE 安装结果" -!insertmacro LANG_STRING STRING_JRE_UNABLEFINDAFTER "无法找到上面的 JRE ${JRE_VERSION} 版本, 即使 JRE 安装成功" -!insertmacro LANG_STRING STRING_JRE_UNABLEINSTALL "无法安装 Java。您可以在以后手动安装。" +!insertmacro LANG_STRING STRING_JRE_CANNOTDOWNLOAD "无法下载Java,您可以稍后可以自行下载。" +!insertmacro LANG_STRING STRING_JRE_LAUNCHSETUP "启动JRE安装" +!insertmacro LANG_STRING STRING_JRE_SETUPFINISHED "JRE安装完成" +!insertmacro LANG_STRING STRING_JRE_INTERRUPTED "JRE安装已异常中断-返回码" +!insertmacro LANG_STRING STRING_JRE_SETUPOUTCOME "检查JRE安装结果" +!insertmacro LANG_STRING STRING_JRE_UNABLEFINDAFTER "即使JRE安装成功,也无法找到版本高于${JRE_VERSION}的JRE" +!insertmacro LANG_STRING STRING_JRE_UNABLEINSTALL "无法安装Java,您可以稍后自行安装。" + +;!insertmacro LANG_STRING STRING_ "" diff --git a/resources/ffdec.bat b/resources/ffdec.bat index 73c00f562..251b40c29 100644 --- a/resources/ffdec.bat +++ b/resources/ffdec.bat @@ -1,2 +1,2 @@ @echo off -java -Xmx1024m -Djna.nosys=true -jar "%~dp0\ffdec.jar" %* \ No newline at end of file +java -Xmx1024m -Djna.nosys=true -Dsun.java2d.uiScale=1.0 -jar "%~dp0\ffdec.jar" %* \ No newline at end of file diff --git a/resources/ffdec.sh b/resources/ffdec.sh index 320c19135..11ea7e8c0 100644 --- a/resources/ffdec.sh +++ b/resources/ffdec.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Based on Freerapid Downloader startup script - created by Petris 2009 # FFDec requires Oracle Java 8 @@ -67,7 +67,7 @@ fi popd > /dev/null -args=(-Djava.net.preferIPv4Stack=true -Xmx$MEMORY -jar $JAR_FILE "$@") +args=(-Djava.net.preferIPv4Stack=true -Dsun.java2d.uiScale=1.0 -Xmx$MEMORY -jar $JAR_FILE "$@") if [ "`uname`" = "Darwin" ]; then args=(-Xdock:name=FFDec -Xdock:icon=icon.png "${args[@]}") diff --git a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java index 140fc80d6..d53955b93 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java +++ b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java @@ -59,6 +59,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; @@ -330,7 +331,7 @@ public class DebuggerHandler implements DebugConnectionListener { private InBreakReason breakReason; - private final List breakListeners = new ArrayList<>(); + private final List breakListeners = new CopyOnWriteArrayList<>(); private final List traceListeners = new ArrayList<>(); diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index af64fbc66..a9ae5e3d8 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -77,6 +77,7 @@ import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; @@ -106,6 +107,7 @@ import java.util.logging.FileHandler; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Level; +import java.util.logging.LogManager; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; import java.util.regex.Matcher; @@ -2357,6 +2359,16 @@ public class Main { } public static void initLogging(boolean debug) { + File loggingFile = new File(Configuration.getFFDecHome() + "/logging.properties"); + if (loggingFile.exists()) { //use manual configuration file + final LogManager logManager = LogManager.getLogManager(); + try { + logManager.readConfiguration(new FileInputStream(loggingFile)); + return; + } catch (IOException ex) { + //ignore + } + } try { Logger logger = Logger.getLogger(""); logger.setLevel(Configuration.logLevel); diff --git a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java index de08c62d6..4fab04a11 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java @@ -99,10 +99,9 @@ public abstract class MainFrameMenu implements MenuBuilder { protected final Map menuActions = new HashMap<>(); - public boolean isInternalFlashViewerSelected() { + /*public boolean isInternalFlashViewerSelected() { return isMenuChecked("/settings/internalViewer"); //miInternalViewer.isSelected(); - } - + }*/ private final boolean externalFlashPlayerUnavailable; public MainFrameMenu(MainFrame mainFrame, boolean externalFlashPlayerUnavailable) { @@ -648,14 +647,14 @@ public abstract class MainFrameMenu implements MenuBuilder { } } - protected void internalViewerSwitchActionPerformed(ActionEvent evt) { + /*protected void internalViewerSwitchActionPerformed(ActionEvent evt) { AbstractButton button = (AbstractButton) evt.getSource(); boolean selected = button.isSelected(); Configuration.internalFlashViewer.set(selected); mainFrame.getPanel().reload(true); } - + */ protected void simplifyExpressionsActionPerformed(ActionEvent evt) { AbstractButton button = (AbstractButton) evt.getSource(); boolean selected = button.isSelected(); @@ -935,7 +934,7 @@ public abstract class MainFrameMenu implements MenuBuilder { addToggleMenuItem("/settings/autoDeobfuscation", translate("menu.settings.autodeobfuscation"), null, null, this::autoDeobfuscationActionPerformed, 0, null); addToggleMenuItem("/settings/simplifyExpressions", translate("menu.settings.simplifyExpressions"), null, null, this::simplifyExpressionsActionPerformed, 0, null); - addToggleMenuItem("/settings/internalViewer", translate("menu.settings.internalflashviewer"), null, null, this::internalViewerSwitchActionPerformed, 0, null); + //addToggleMenuItem("/settings/internalViewer", translate("menu.settings.internalflashviewer"), null, null, this::internalViewerSwitchActionPerformed, 0, null); addToggleMenuItem("/settings/parallelSpeedUp", translate("menu.settings.parallelspeedup"), null, null, this::parallelSpeedUpActionPerformed, 0, null); addToggleMenuItem("/settings/disableDecompilation", translate("menu.settings.disabledecompilation"), null, null, this::disableDecompilationActionPerformed, 0, null); //addToggleMenuItem("/settings/cacheOnDisk", translate("menu.settings.cacheOnDisk"), null, null, this::cacheOnDiskActionPerformed, 0, null); @@ -976,11 +975,11 @@ public abstract class MainFrameMenu implements MenuBuilder { setMenuChecked("/settings/simplifyExpressions", newValue); }); - setMenuChecked("/settings/internalViewer", Configuration.internalFlashViewer.get() || externalFlashPlayerUnavailable); + /*setMenuChecked("/settings/internalViewer", Configuration.internalFlashViewer.get() || externalFlashPlayerUnavailable); Configuration.internalFlashViewer.addListener(configListenerInternalFlashViewer = (Boolean newValue) -> { setMenuChecked("/settings/internalViewer", newValue || externalFlashPlayerUnavailable); }); - + */ setMenuChecked("/settings/parallelSpeedUp", Configuration.parallelSpeedUp.get()); Configuration.parallelSpeedUp.addListener(configListenerParallelSpeedUp = (Boolean newValue) -> { setMenuChecked("/settings/parallelSpeedUp", newValue); @@ -1178,7 +1177,7 @@ public abstract class MainFrameMenu implements MenuBuilder { Configuration.autoDeobfuscate.removeListener(configListenerAutoDeobfuscate); Configuration.simplifyExpressions.removeListener(configListenerSimplifyExpressions); - Configuration.internalFlashViewer.removeListener(configListenerInternalFlashViewer); + //Configuration.internalFlashViewer.removeListener(configListenerInternalFlashViewer); Configuration.parallelSpeedUp.removeListener(configListenerParallelSpeedUp); Configuration.decompile.removeListener(configListenerDecompile); //Configuration.cacheOnDisk.removeListener(configListenerCacheOnDisk); diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index c5ffcb93e..c47032faf 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -424,7 +424,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se private JPanel createFolderPreviewCard() { JPanel folderPreviewCard = new JPanel(new BorderLayout()); folderPreviewPanel = new FolderPreviewPanel(this, new ArrayList<>()); - folderPreviewCard.add(new JScrollPane(folderPreviewPanel), BorderLayout.CENTER); + final JScrollPane jScrollPane = new JScrollPane(folderPreviewPanel); + jScrollPane.getVerticalScrollBar().setUnitIncrement(20); + folderPreviewCard.add(jScrollPane, BorderLayout.CENTER); return folderPreviewCard; } @@ -2751,100 +2753,107 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void replaceButtonActionPerformed(ActionEvent evt) { - TreeItem item = tagTree.getCurrentTreeItem(); - if (item == null) { + List items = tagTree.getSelected(); + if (items.size() == 0) { return; } + TreeItem ti0 = items.get(0); + File file = null; + if (ti0 instanceof DefineSoundTag) { + file = showImportFileChooser("filter.sounds|*.mp3;*.wav|filter.sounds.mp3|*.mp3|filter.sounds.wav|*.wav"); + } + if (ti0 instanceof ImageTag) { + file = showImportFileChooser("filter.images|*.jpg;*.jpeg;*.gif;*.png;*.bmp"); + } + if (ti0 instanceof ShapeTag) { + file = showImportFileChooser("filter.images|*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.svg"); + } + if (ti0 instanceof DefineBinaryDataTag) { + file = showImportFileChooser(""); + } + for (TreeItem ti : items) { + doReplaceAction(ti, file); + } + } + private void doReplaceAction(TreeItem item, File selectedFile) { + if (selectedFile == null) return; if (item instanceof DefineSoundTag) { - File selectedFile = showImportFileChooser("filter.sounds|*.mp3;*.wav|filter.sounds.mp3|*.mp3|filter.sounds.wav|*.wav"); - if (selectedFile != null) { - File selfile = Helper.fixDialogFile(selectedFile); - DefineSoundTag ds = (DefineSoundTag) item; - int soundFormat = SoundFormat.FORMAT_UNCOMPRESSED_LITTLE_ENDIAN; - if (selfile.getName().toLowerCase(Locale.ENGLISH).endsWith(".mp3")) { - soundFormat = SoundFormat.FORMAT_MP3; - } + File selfile = Helper.fixDialogFile(selectedFile); + DefineSoundTag ds = (DefineSoundTag) item; + int soundFormat = SoundFormat.FORMAT_UNCOMPRESSED_LITTLE_ENDIAN; + if (selfile.getName().toLowerCase(Locale.ENGLISH).endsWith(".mp3")) { + soundFormat = SoundFormat.FORMAT_MP3; + } - boolean ok = false; - try { - ok = ds.setSound(new FileInputStream(selfile), soundFormat); - ds.getSwf().clearSoundCache(); - } catch (IOException ex) { - //ignore - } + boolean ok = false; + try { + ok = ds.setSound(new FileInputStream(selfile), soundFormat); + ds.getSwf().clearSoundCache(); + } catch (IOException ex) { + //ignore + } - if (!ok) { - View.showMessageDialog(null, translate("error.sound.invalid"), translate("error"), JOptionPane.ERROR_MESSAGE); - } else { - reload(true); - } + if (!ok) { + View.showMessageDialog(null, translate("error.sound.invalid"), translate("error"), JOptionPane.ERROR_MESSAGE); + } else { + reload(true); } } if (item instanceof ImageTag) { ImageTag it = (ImageTag) item; if (it.importSupported()) { - File selectedFile = showImportFileChooser("filter.images|*.jpg;*.jpeg;*.gif;*.png;*.bmp"); - if (selectedFile != null) { - File selfile = Helper.fixDialogFile(selectedFile); - byte[] data = Helper.readFile(selfile.getAbsolutePath()); - try { - Tag newTag = new ImageImporter().importImage(it, data); - SWF swf = it.getSwf(); - if (newTag != null) { - refreshTree(swf); - setTagTreeSelectedNode(newTag); - } - swf.clearImageCache(); - } catch (IOException ex) { - logger.log(Level.SEVERE, "Invalid image", ex); - View.showMessageDialog(null, translate("error.image.invalid"), translate("error"), JOptionPane.ERROR_MESSAGE); - } - - reload(true); - } - } - } - if (item instanceof ShapeTag) { - ShapeTag st = (ShapeTag) item; - String filter = "filter.images|*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.svg"; - File selectedFile = showImportFileChooser(filter); - if (selectedFile != null) { File selfile = Helper.fixDialogFile(selectedFile); - byte[] data = null; - String svgText = null; - if (".svg".equals(Path.getExtension(selfile))) { - svgText = Helper.readTextFile(selfile.getAbsolutePath()); - showSvgImportWarning(); - } else { - data = Helper.readFile(selfile.getAbsolutePath()); - } + byte[] data = Helper.readFile(selfile.getAbsolutePath()); try { - Tag newTag = svgText != null ? new SvgImporter().importSvg(st, svgText) : new ShapeImporter().importImage(st, data); - SWF swf = st.getSwf(); + Tag newTag = new ImageImporter().importImage(it, data); + SWF swf = it.getSwf(); if (newTag != null) { refreshTree(swf); setTagTreeSelectedNode(newTag); } - swf.clearImageCache(); } catch (IOException ex) { logger.log(Level.SEVERE, "Invalid image", ex); View.showMessageDialog(null, translate("error.image.invalid"), translate("error"), JOptionPane.ERROR_MESSAGE); } + reload(true); } } + if (item instanceof ShapeTag) { + ShapeTag st = (ShapeTag) item; + File selfile = Helper.fixDialogFile(selectedFile); + byte[] data = null; + String svgText = null; + if (".svg".equals(Path.getExtension(selfile))) { + svgText = Helper.readTextFile(selfile.getAbsolutePath()); + showSvgImportWarning(); + } else { + data = Helper.readFile(selfile.getAbsolutePath()); + } + try { + Tag newTag = svgText != null ? new SvgImporter().importSvg(st, svgText) : new ShapeImporter().importImage(st, data); + SWF swf = st.getSwf(); + if (newTag != null) { + refreshTree(swf); + setTagTreeSelectedNode(newTag); + } + + swf.clearImageCache(); + } catch (IOException ex) { + logger.log(Level.SEVERE, "Invalid image", ex); + View.showMessageDialog(null, translate("error.image.invalid"), translate("error"), JOptionPane.ERROR_MESSAGE); + } + reload(true); + } if (item instanceof DefineBinaryDataTag) { DefineBinaryDataTag bt = (DefineBinaryDataTag) item; - File selectedFile = showImportFileChooser(""); - if (selectedFile != null) { - File selfile = Helper.fixDialogFile(selectedFile); - byte[] data = Helper.readFile(selfile.getAbsolutePath()); - new BinaryDataImporter().importData(bt, data); - refreshTree(bt.getSwf()); - reload(true); - } + File selfile = Helper.fixDialogFile(selectedFile); + byte[] data = Helper.readFile(selfile.getAbsolutePath()); + new BinaryDataImporter().importData(bt, data); + refreshTree(bt.getSwf()); + reload(true); } } @@ -3109,8 +3118,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } } - public boolean isInternalFlashViewerSelected() { - return mainMenu.isInternalFlashViewerSelected(); + public boolean isAdobeFlashPlayerEnabled() { + return Configuration.useAdobeFlashPlayerForPreviews.get(); } public static final int VIEW_RESOURCES = 0; @@ -3293,7 +3302,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se previewPanel.showEmpty(); return; } - boolean internalViewer = isInternalFlashViewerSelected(); + boolean internalViewer = !isAdobeFlashPlayerEnabled(); if (treeItem instanceof SWF) { SWF swf = (SWF) treeItem; if (internalViewer) { @@ -3413,7 +3422,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se previewPanel.setImageReplaceButtonVisible(false, false); - boolean internalViewer = isInternalFlashViewerSelected(); + boolean internalViewer = !isAdobeFlashPlayerEnabled(); if (treeItem instanceof ScriptPack) { final ScriptPack scriptLeaf = (ScriptPack) treeItem; diff --git a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java index bdf82887a..aae01c9fe 100644 --- a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java @@ -467,7 +467,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel } private void showFontPage(FontTag fontTag) { - if (mainPanel.isInternalFlashViewerSelected() /*|| ft instanceof GFxDefineCompactedFont*/) { + if (!mainPanel.isAdobeFlashPlayerEnabled() /*|| ft instanceof GFxDefineCompactedFont*/) { showImagePanel(MainPanel.makeTimelined(fontTag), fontTag.getSwf(), fontPageNum); } } @@ -485,7 +485,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel } public void showTextPanel(TextTag textTag) { - if (mainPanel.isInternalFlashViewerSelected() /*|| ft instanceof GFxDefineCompactedFont*/) { + if (!mainPanel.isAdobeFlashPlayerEnabled() /*|| ft instanceof GFxDefineCompactedFont*/) { showImagePanel(MainPanel.makeTimelined(textTag), textTag.getSwf(), 0); } @@ -560,6 +560,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel public void showGenericTagPanel(Tag tag) { showCardLeft(GENERIC_TAG_CARD); genericEditButton.setVisible(!tag.isReadOnly()); + genericEditButton.setEnabled(true); genericSaveButton.setVisible(false); genericCancelButton.setVisible(false); genericTagPanel.setEditMode(false, tag); @@ -635,7 +636,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel swf.saveTo(fos, false); } //Inject Loader - if (swf.isAS3() && Configuration.autoOpenLoadedSWFs.get() && !Configuration.internalFlashViewer.get() && !DebuggerTools.hasDebugger(swf)) { + if (swf.isAS3() && Configuration.autoOpenLoadedSWFs.get() && Configuration.useAdobeFlashPlayerForPreviews.get() && !DebuggerTools.hasDebugger(swf)) { SWF instrSWF; try (InputStream fis = new BufferedInputStream(new FileInputStream(tempFile))) { instrSWF = new SWF(fis, false, false); @@ -731,7 +732,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel FontTag fontTag = fontPanel.getFontTag(); int pageCount = getFontPageCount(fontTag); fontPageNum = (fontPageNum + pageCount - 1) % pageCount; - if (mainPanel.isInternalFlashViewerSelected() /*|| ft instanceof GFxDefineCompactedFont*/) { + if (!mainPanel.isAdobeFlashPlayerEnabled() /*|| ft instanceof GFxDefineCompactedFont*/) { imagePanel.setTimelined(MainPanel.makeTimelined(fontTag, fontPageNum), fontTag.getSwf(), 0); } } @@ -740,7 +741,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel FontTag fontTag = fontPanel.getFontTag(); int pageCount = getFontPageCount(fontTag); fontPageNum = (fontPageNum + 1) % pageCount; - if (mainPanel.isInternalFlashViewerSelected() /*|| ft instanceof GFxDefineCompactedFont*/) { + if (!mainPanel.isAdobeFlashPlayerEnabled() /*|| ft instanceof GFxDefineCompactedFont*/) { imagePanel.setTimelined(MainPanel.makeTimelined(fontTag, fontPageNum), fontTag.getSwf(), 0); } } diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AboutDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/AboutDialog_zh.properties index 2d279497a..1ac7285ca 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/AboutDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/AboutDialog_zh.properties @@ -13,12 +13,15 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -version = \u7248\u672c -by = \u5f00\u53d1\u4f5c\u8005 +version = Version: +by = By: button.ok = \u786e\u5b9a dialog.title = \u5173\u4e8e contributors = \u8d21\u732e\u8005: #In the translation, replace "english" with target language name -translation.author.label = \u4e2d\u6587\u7ffb\u8bd1: +translation.author.label = \u4e2d\u6587\u7ffb\u8bd1\uff1a #In the translation, insert your name here -translation.author = \u5927\u773c\u4ed4~\u65ed\uff08\u5b89\u5b89\uff09, \u738b\u6668\u65ed +translation.author = \u6653\u4e4b\u8f66,\u5b89\u5b89,\u738b\u6668\u65ed +developers = \u5f00\u53d1: +developers.others = \u4ee5\u53caGitHub\u4e0eGoogleCode\u7684\u5176\u4ed6\u4eba +translators = \u7ffb\u8bd1\u8005: diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties index 3b72e9329..c462b8998 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties @@ -447,10 +447,35 @@ config.description.gui.fontSizeMultiplier = Font size multiplier config.name.graphVizDotLocation = 5) GraphViz Dot executable path config.description.graphVizDotLocation = Path to dot.exe (or similar for linux) of GraphViz application for displaying Graphs. -#Do not translate the Font Styles (Plain... etc.) +#Do not translate the Font Styles which is in the parenthesis:(Plain,Bold,Italic,BoldItalic) config.name.gui.sourceFont = Source font style config.description.gui.sourceFont = FontName-FontStyle(Plain,Bold,Italic,BoldItalic)-FontSize #after 11.1.0 config.name.as12DeobfuscatorExecutionLimit = AS1/2 deobfuscator execution limit -config.description.as12DeobfuscatorExecutionLimit = Maximum number of instructions processed during AS1/2 execution deobfuscation \ No newline at end of file +config.description.as12DeobfuscatorExecutionLimit = Maximum number of instructions processed during AS1/2 execution deobfuscation + +#option that ignore in 8.0.1 and other versions +config.name.showOriginalBytesInPcodeHex = (Internal) Show original bytes +config.description.showOriginalBytesInPcodeHex = show Original Bytes In Pcode Hex + +config.name.showFileOffsetInPcodeHex = (Internal) Show file offset +config.description.showFileOffsetInPcodeHex = show File Offset In Pcode Hex + +config.name._enableFlexExport = (Internal) enableFlexExport +config.description.enableFlexExport = enable Flex Export + +config.name._ignoreAdditionalFlexClasses = (Internal) ignoreAdditionalFlexClasses +config.description.ignoreAdditionalFlexClasses = ignore Additional Flex Classes + +config.name.hwAcceleratedGraphics = (Internal) hwAcceleratedGraphics +config.description.hwAcceleratedGraphics = hw Accelerated Graphics + +config.name.gui.avm2.splitPane.docs.dividerLocationPercent = (Internal) splitPanedocsdividerLocationPercent +config.description.gui.avm2.splitPane.docs.dividerLocationPercent = splitPane docs divider Location Percent + +config.name.gui.dump.splitPane.dividerLocationPercent = (Internal) dumpsplitPanedividerLocationPercent +config.description.gui.dump.splitPane.dividerLocationPercent = dump splitPane divider Location Percent + +config.name.useAdobeFlashPlayerForPreviews = (Deprecated) Use Adobe Flash player for preview of objects +config.description.useAdobeFlashPlayerForPreviews = Use Adobe Flash player for preview of objects. WARNING: FlashPlayer was discontinued on 2021-01-12 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_zh.properties index 7dcbc63c2..a89e2c061 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_zh.properties @@ -14,421 +14,465 @@ # along with this program. If not, see . advancedSettings.dialog.title = \u9ad8\u7ea7\u8bbe\u7f6e -advancedSettings.restartConfirmation = \u60a8\u5fc5\u987b\u91cd\u65b0\u542f\u52a8\u8be5\u7a0b\u5e8f\u7684\u4e00\u4e9b\u4fee\u6539\u624d\u80fd\u751f\u6548\u3002\u4f60\u60f3\u73b0\u5728\u91cd\u65b0\u542f\u52a8\u5417\uff1f +advancedSettings.restartConfirmation = \u60a8\u5fc5\u987b\u91cd\u542f\u7a0b\u5e8f\u4ee5\u4f7f\u4fee\u6539\u7684\u8bbe\u7f6e\u751f\u6548\uff0c\u8981\u7acb\u523b\u91cd\u542f\u7a0b\u5e8f\u5417\uff1f advancedSettings.columns.name = \u540d\u79f0 advancedSettings.columns.value = \u503c advancedSettings.columns.description = \u63cf\u8ff0 -default = default +default = \u9ed8\u8ba4 -config.group.name.export = \u5bfc\u5165 -config.group.description.export = \u5bfc\u5165\u914d\u7f6e +config.group.name.export = \u5bfc\u51fa +config.group.description.export = \u5bfc\u51fa\u76f8\u5173\u8bbe\u7f6e config.group.name.script = \u811a\u672c -config.group.description.script = ActionScript \u53cd\u7f16\u8bd1\u5173\u8054 +config.group.description.script = \u4ee3\u7801\u53cd\u7f16\u8bd1\u76f8\u5173 config.group.name.update = \u66f4\u65b0 -config.group.description.update = \u68c0\u67e5\u66f4\u65b0 +config.group.description.update = \u8f6f\u4ef6\u66f4\u65b0\u68c0\u67e5 -config.group.name.format = \u683c\u5f0f\u5316 -config.group.description.format = ActionScript \u4ee3\u7801\u683c\u5f0f\u5316 +config.group.name.format = \u6392\u7248 +config.group.description.format = \u4ee3\u7801\u663e\u793a\u7684\u76f8\u5173\u8bbe\u7f6e -config.group.name.limit = \u8303\u56f4 -config.group.description.limit = \u9488\u5bf9\u6df7\u6dc6\u4ee3\u7801\uff0c\u53cd\u7f16\u8bd1\u7b49\u9650\u5236\u7b49\u3002 +config.group.name.limit = \u9650\u5236 +config.group.description.limit = \u6df7\u6dc6\u4ee3\u7801\u7b49\u7684\u53cd\u7f16\u8bd1\u9650\u5236\u76f8\u5173 config.group.name.ui = \u754c\u9762 -config.group.description.ui = \u7528\u6237\u754c\u9762\u914d\u7f6e +config.group.description.ui = \u7528\u6237\u754c\u9762\u8bbe\u7f6e -config.group.name.debug = \u8c03\u8bd5 -config.group.description.debug = \u8c03\u8bd5\u8bbe\u7f6e +config.group.name.debug = Debug +config.group.description.debug = \u8c03\u8bd5\u76f8\u5173\u7684\u8bbe\u7f6e config.group.name.display = \u663e\u793a -config.group.description.display = Flash \u5bf9\u8c61\u663e\u793a\u7b49\u3002 +config.group.description.display = Flash\u7b49\u5bf9\u8c61\u663e\u793a\u76f8\u5173 config.group.name.decompilation = \u53cd\u7f16\u8bd1 config.group.description.decompilation = \u5168\u5c40\u53cd\u7f16\u8bd1\u76f8\u5173\u7684\u529f\u80fd config.group.name.other = \u5176\u5b83 -config.group.description.other = \u5176\u5b83\u672a\u5206\u7c7b\u914d\u7f6e +config.group.description.other = \u5176\u5b83\u672a\u5206\u7c7b\u7684\u8bbe\u7f6e config.name.openMultipleFiles = \u6253\u5f00\u591a\u4e2a\u6587\u4ef6 -config.description.openMultipleFiles = \u5141\u8bb8\u540c\u65f6\u5728\u4e00\u4e2a\u7a97\u53e3\u4e2d\u6253\u5f00\u591a\u4e2a\u6587\u4ef6 +config.description.openMultipleFiles = \u5141\u8bb8\u5728\u4e00\u4e2a\u7a97\u53e3\u4e2d\u540c\u65f6\u6253\u5f00\u591a\u4e2a\u6587\u4ef6 -config.name.decompile = \u663e\u793a ActionScript \u6e90 -config.description.decompile = \u60a8\u53ef\u4ee5\u7981\u7528 AS \u53cd\u7f16\u8bd1\uff0c\u90a3\u4e48\u53ea\u6709 P-\u4ee3\u7801\u663e\u793a +config.name.decompile = \u663e\u793aAS\u6e90\u4ee3\u7801 +config.description.decompile = \u60a8\u53ef\u4ee5\u7981\u7528AS\u53cd\u7f16\u8bd1\uff0c\u53ea\u663e\u793aP-code -config.name.dumpView = \u8f6c\u50a8\u67e5\u770b +config.name.dumpView = \u8f6c\u50a8\u89c6\u56fe config.description.dumpView = \u67e5\u770b\u539f\u59cb\u6570\u636e\u8f6c\u50a8 config.name.useHexColorFormat = \u5341\u516d\u8fdb\u5236\u989c\u8272\u683c\u5f0f config.description.useHexColorFormat = \u663e\u793a\u5341\u516d\u8fdb\u5236\u683c\u5f0f\u989c\u8272 -config.name.parallelSpeedUp = \u5e76\u884c\u52a0\u901f -config.description.parallelSpeedUp = \u5e76\u884c\u53ef\u4ee5\u52a0\u5feb\u7f16\u8bd1 +config.name.parallelSpeedUp = \u591a\u7ebf\u7a0b\u52a0\u901f +config.description.parallelSpeedUp = \u4ec5\u53ef\u52a0\u5feb\u53cd\u7f16\u8bd1\u901f\u5ea6\uff0c\u90e8\u5206\u5355\u7ebf\u7a0b\u529f\u80fd\u53ef\u80fd\u4f1a\u51fa\u73b0\u95ee\u9898 config.name.parallelSpeedUpThreadCount = \u7ebf\u7a0b\u6570 -config.description.parallelSpeedUpThreadCount = \u7528\u4e8e\u5e76\u884c\u52a0\u901f\u7ebf\u7a0b\u6570 +config.description.parallelSpeedUpThreadCount = \u591a\u7ebf\u7a0b\u52a0\u901f\u7684\u7ebf\u7a0b\u6570\u91cf config.name.autoDeobfuscate = \u81ea\u52a8\u53cd\u6df7\u6dc6 -config.description.autoDeobfuscate = \u6709\u5173 ActionScript \u53cd\u7f16\u8bd1\u524d\u7684\u6bcf\u4e2a\u6587\u4ef6\u6267\u884c\u53cd\u6df7\u6dc6 +config.description.autoDeobfuscate = \u5728\u53cd\u7f16\u8bd1ActionScript\u4e4b\u524d\uff0c\u5bf9\u6bcf\u4e2a\u6587\u4ef6\u8fd0\u884c\u53cd\u6df7\u6dc6 -config.name.cacheOnDisk = \u5728\u78c1\u76d8\u4e0a\u4f7f\u7528\u7f13\u5b58 -config.description.cacheOnDisk = \u7f13\u5b58\u5df2\u7ecf\u90e8\u5206\u53cd\u7f16\u8bd1\u5728\u786c\u76d8\u9a71\u52a8\u5668\u800c\u4e0d\u662f\u5185\u5b58 +config.name.cacheOnDisk = \u786c\u76d8\u7f13\u5b58 +config.description.cacheOnDisk = \u4e0d\u5360\u7528\u5185\u5b58\uff0c\u800c\u5728\u786c\u76d8\u9a71\u52a8\u5668\u4e0a\u7f13\u5b58\u5df2\u7ecf\u53cd\u7f16\u8bd1\u7684\u90e8\u5206 -config.name.internalFlashViewer = \u4f7f\u7528\u81ea\u5df1\u7684 Flash \u6d4f\u89c8\u5668 -config.description.internalFlashViewer = \u4f7f\u7528 JPEXS Flash \u6d4f\u89c8\u5668\uff0c\u800c\u4e0d\u662f\u6807\u51c6\u7684 Flash \u64ad\u653e\u5668\u7528\u4e8e Flash \u90e8\u4ef6\u663e\u793a +config.name.internalFlashViewer = \u4f7f\u7528\u5185\u90e8Flash Player +config.description.internalFlashViewer = \u4f7f\u7528JPEXS Flash Viewer\u6765\u663e\u793aFlash\u63a7\u4ef6 -config.name.gotoMainClassOnStartup = \u5728\u542f\u52a8\u65f6\u8f6c\u5230\u4e3b\u7c7b (AS3) -config.description.gotoMainClassOnStartup = \u6253\u5f00\u6587\u6863\u7c7b AS3 \u6587\u4ef6\u65f6\u5bfc\u822a\u5230 SWF \u4e0a +config.name.gotoMainClassOnStartup = \u542f\u52a8\u65f6\u8f6c\u5230\u4e3b\u7c7b (AS3) +config.description.gotoMainClassOnStartup = \u5728SWF\u6253\u5f00\u65f6\u8f6c\u5230\u5230AS3\u6587\u4ef6\u7684\u6587\u6863\u7c7b config.name.autoRenameIdentifiers = \u81ea\u52a8\u91cd\u547d\u540d\u6807\u8bc6\u7b26 -config.description.autoRenameIdentifiers = \u81ea\u52a8\u91cd\u547d\u540d SWF \u52a0\u8f7d\u65e0\u6548\u6807\u8bc6\u7b26 +config.description.autoRenameIdentifiers = \u5728SWF\u52a0\u8f7d\u65f6\u81ea\u52a8\u91cd\u547d\u540d\u65e0\u6548\u6807\u8bc6\u7b26 -config.name.offeredAssociation = \uff08\u5185\u90e8\uff09\u5173\u8054 SWF \u6587\u4ef6\u663e\u793a -config.description.offeredAssociation = \u6709\u5173\u6587\u4ef6\u5173\u8054\u5bf9\u8bdd\u6846\u5df2\u7ecf\u663e\u793a +config.name.offeredAssociation = (\u5185\u90e8)\u5173\u8054SWF\u6587\u4ef6\u663e\u793a +config.description.offeredAssociation = \u5df2\u7ecf\u663e\u793a\u6709\u5173\u6587\u4ef6\u5173\u8054\u7684\u5bf9\u8bdd\u6846 config.name.decimalAddress = \u4f7f\u7528\u5341\u8fdb\u5236\u5730\u5740 config.description.decimalAddress = \u4f7f\u7528\u5341\u8fdb\u5236\u5730\u5740\u800c\u4e0d\u662f\u5341\u516d\u8fdb\u5236 config.name.showAllAddresses = \u663e\u793a\u6240\u6709\u5730\u5740 -config.description.showAllAddresses = \u663e\u793a\u6240\u6709\u52a8\u4f5c\u6307\u4ee4\u5730\u5740 +config.description.showAllAddresses = \u663e\u793a\u6240\u6709AS\u5730\u5740 config.name.useFrameCache = \u4f7f\u7528\u5e27\u7f13\u5b58 -config.description.useFrameCache = \u518d\u6b21\u6e32\u67d3\u4e4b\u524d\u5e27\u7f13\u5b58 +config.description.useFrameCache = \u5728\u518d\u6b21\u6e32\u67d3\u4e4b\u524d\u7f13\u5b58\u5e27 config.name.useRibbonInterface = \u529f\u80fd\u533a\u754c\u9762 -config.description.useRibbonInterface = \u53d6\u6d88\u9009\u4e2d\u4f7f\u7528\u7ecf\u5178\u7684\u754c\u9762\u800c\u65e0\u9700\u5e26\u72b6\u83dc\u5355 +config.description.useRibbonInterface = \u5173\u95ed\u4ee5\u4f7f\u7528\u4e0d\u5e26\u529f\u80fd\u533a\u83dc\u5355\u7684\u7ecf\u5178\u754c\u9762 -config.name.openFolderAfterFlaExport = \u6587\u4ef6\u5bfc\u51fa\u540e\u6253\u5f00\u6587\u4ef6\u5939 -config.description.openFolderAfterFlaExport = \u5bfc\u51fa FLA \u6587\u4ef6\u540e\u663e\u793a\u8f93\u51fa\u76ee\u5f55 +config.name.openFolderAfterFlaExport = FLA\u5bfc\u51fa\u540e\u6253\u5f00\u6587\u4ef6\u5939 +config.description.openFolderAfterFlaExport = \u5bfc\u51faFLA\u6587\u4ef6\u540e\u663e\u793a\u8f93\u51fa\u76ee\u5f55 -config.name.useDetailedLogging = FFDec \u8be6\u7ec6\u65e5\u5fd7\u8bb0\u5f55 -config.description.useDetailedLogging = \u65e5\u5fd7\u8be6\u7ec6\u7684\u9519\u8bef\u4fe1\u606f\u548c\u4fe1\u606f\u7528\u4e8e FFDec \u8c03\u8bd5 +config.name.useDetailedLogging = FFDec\u8be6\u7ec6\u65e5\u5fd7\u8bb0\u5f55 +config.description.useDetailedLogging = \u8bb0\u5f55\u8be6\u7ec6\u7684\u9519\u8bef\u6d88\u606f\u548c\u4fe1\u606f\u4ee5\u8c03\u8bd5FFDec -config.name._debugMode = FFDec \u5728\u8c03\u8bd5\u6a21\u5f0f -config.description._debugMode = FFDec \u8c03\u8bd5\u6a21\u5f0f\u3002\u6253\u5f00\u8c03\u8bd5\u83dc\u5355\u3002\u6709\u4ec0\u4e48\u597d\u7684\u8c03\u8bd5\u529f\u80fd +config.name._debugMode = FFDec\u8c03\u8bd5\u6a21\u5f0f +config.description._debugMode = \u8fdb\u5165\u8c03\u8bd5FFDec\u7684\u6a21\u5f0f\uff0c\u5e76\u6253\u5f00\u8c03\u8bd5\u83dc\u5355\u3002\u8fd9\u4e0eSWF\u8c03\u8bd5\u529f\u80fd\u65e0\u5173\u3002 -config.name.resolveConstants = \u5728 1/2 P-\u4ee3\u7801\u89e3\u51b3\u5e38\u6570 -config.description.resolveConstants = \u5173\u95ed\u6b64\u529f\u80fd\uff0c\u4ee5\u663e\u793aP-\u4ee3\u7801\u7a97\u53e3'\u5e38\u91cf'\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u503c +config.name.resolveConstants = \u89e3\u6790AS1/2 p-code\u4e2d\u7684\u5e38\u91cf +config.description.resolveConstants = \u5173\u95ed\u6b64\u9009\u9879\u53ef\u5728P-code\u7a97\u53e3\u4e2d\u663e\u793a" constantxx"\u800c\u4e0d\u662f\u5b9e\u9645\u503c -config.name.sublimiter = \u4ee3\u7801\u66ff\u8865\u6781\u9650 -config.description.sublimiter = \u4ee3\u7801\u7528\u4e8e\u66ff\u8865\u6df7\u6dc6\u4ee3\u7801\u7684\u9650\u5236\u3002 +config.name.sublimiter = \u5b50\u4ee3\u7801\u9650\u5236 +config.description.sublimiter = \u6df7\u6dc6\u4ee3\u7801\u7684\u5b50\u4ee3\u7801\u9650\u5236\u3002 -config.name.exportTimeout = \u5bfc\u51fa\u8d85\u65f6\uff08\u79d2\uff09 -config.description.exportTimeout = \u5bfc\u51fa\u8fbe\u5230\u6b64\u65f6\u95f4\u540e\u53cd\u7f16\u8bd1\u5668\u5c06\u505c\u6b62 +config.name.exportTimeout = \u5bfc\u51fa\u8d85\u65f6(\u79d2) +config.description.exportTimeout = \u5230\u8fbe\u6b64\u65f6\u95f4\u540e\uff0c\u53cd\u7f16\u8bd1\u5668\u5c06\u505c\u6b62\u5bfc\u51fa -config.name.decompilationTimeoutFile = \u5355\u4e2a\u6587\u4ef6\u53cd\u7f16\u8bd1\u8d85\u65f6\uff08\u79d2\uff09 -config.description.decompilationTimeoutFile = \u5728\u4e00\u4e2a\u6587\u4ef6\u8fbe\u5230\u6b64\u65f6\u95f4\u540e\u53cd\u7f16\u8bd1\u5668\u5c06\u505c\u6b62\u52a8\u4f5c\u7f16\u8bd1 +config.name.decompilationTimeoutFile = \u5355\u6587\u4ef6\u53cd\u7f16\u8bd1\u8d85\u65f6(\u79d2) +config.description.decompilationTimeoutFile = \u8fbe\u5230\u8fd9\u4e2a\u65f6\u95f4\u540e\uff0c\u8f6f\u4ef6\u5c06\u505c\u6b62AS\u7684\u53cd\u7f16\u8bd1 -config.name.paramNamesEnable = \u5728 AS3 \u542f\u7528\u53c2\u6570\u540d\u79f0 -config.description.paramNamesEnable = \u5728\u53cd\u7f16\u8bd1\u4f7f\u7528\u7684\u53c2\u6570\u540d\u79f0\u53ef\u80fd\u4f1a\u56e0\u5b98\u65b9\u7684\u7a0b\u5e8f\u5982 Flash CS5.5 \u63d2\u5165\u9519\u8bef\u7684\u53c2\u6570\u540d\u79f0\u7d22\u5f15\u95ee\u9898 +config.name.paramNamesEnable = \u5728AS3\u542f\u7528\u53c2\u6570\u540d\u79f0 +config.description.paramNamesEnable = \u5728\u53cd\u7f16\u8bd1\u4e2d\u4f7f\u7528\u53c2\u6570\u540d\u79f0\u53ef\u80fd\u4f1a\u5bfc\u81f4\u95ee\u9898\uff0c\u56e0\u4e3aFlash CS 5.5\u7b49\u5b98\u65b9\u7a0b\u5e8f\u4f1a\u63d2\u5165\u9519\u8bef\u7684\u53c2\u6570\u540d\u79f0\u7d22\u5f15 -config.name.displayFileName = \u5728\u6807\u9898\u663e\u793a SWF \u540d\u79f0 -config.description.displayFileName = \u5728\u7a97\u53e3\u6807\u9898\u663e\u793a SWF \u6587\u4ef6/URL \u540d\u79f0\uff08\u7136\u540e\u4f60\u53ef\u4ee5\u622a\u56fe\uff09 +config.name.displayFileName = \u5728\u6807\u9898\u663e\u793aSWF\u540d\u79f0 +config.description.displayFileName = \u5728\u7a97\u53e3\u6807\u9898\u4e2d\u663e\u793aSWF\u6587\u4ef6/URL\u540d\u79f0(\u7136\u540e\u53ef\u4ee5\u8fdb\u884c\u5c4f\u5e55\u622a\u56fe) -config.name._debugCopy = FFDec \u8c03\u8bd5\u91cd\u65b0\u7f16\u8bd1 -config.description._debugCopy = \u8bd5\u56fe\u518d\u6b21\u7f16\u8bd1 SWF \u6587\u4ef6\uff0c\u4ee5\u786e\u4fdd\u5b83\u4ea7\u751f\u76f8\u540c\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\u3002\u4ec5\u7528\u4e8e FFDec \u8c03\u8bd5\uff01 +config.name._debugCopy = FFDec\u8c03\u8bd5\u91cd\u7f16\u8bd1 +config.description._debugCopy = \u5c1d\u8bd5\u5728\u6253\u5f00\u540e\u7acb\u5373\u518d\u6b21\u7f16\u8bd1SWF\u6587\u4ef6\uff0c\u4ee5\u786e\u4fdd\u5b83\u751f\u6210\u76f8\u540c\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u4ec5\u7528\u4e8e\u8c03\u8bd5FFDec\uff01 config.name.dumpTags = \u8f6c\u50a8\u6807\u7b7e\u5230\u63a7\u5236\u53f0 -config.description.dumpTags = \u5728\u8bfb\u53d6 SWF \u6587\u4ef6\u8f6c\u50a8\u6807\u7b7e\u5230\u63a7\u5236\u53f0 +config.description.dumpTags = \u5728\u8bfb\u53d6SWF\u6587\u4ef6\u65f6\u5c06\u6807\u7b7e\u8f6c\u50a8\u5230\u63a7\u5236\u53f0 -config.name.decompilationTimeoutSingleMethod = AS3: \u5355\u4e00\u65b9\u6cd5\u7f16\u8bd1\u8d85\u65f6\uff08\u79d2\uff09 -config.description.decompilationTimeoutSingleMethod = \u5728\u4e00\u4e2a\u65b9\u6cd5\u8fbe\u5230\u6b64\u65f6\u95f4\u540e\u53cd\u7f16\u8bd1\u5668\u5c06\u505c\u6b62\u52a8\u4f5c\u7f16\u8bd1 +config.name.decompilationTimeoutSingleMethod = AS3:\u5355\u65b9\u6cd5\u53cd\u7f16\u8bd1\u8d85\u65f6(\u79d2) +config.description.decompilationTimeoutSingleMethod = \u5728\u67d0\u4e2a\u65b9\u6cd5\u8fbe\u5230\u6b64\u65f6\u95f4\u540e\uff0c\u8f6f\u4ef6\u5c06\u505c\u6b62AS\u53cd\u7f16\u8bd1 -config.name.lastRenameType = \uff08\u5185\u90e8\uff09\u4e0a\u6b21\u91cd\u547d\u540d\u7c7b\u578b -config.description.lastRenameType = \u6700\u540e\u7684\u91cd\u547d\u540d\u6807\u8bc6\u7b26\u7c7b\u578b +config.name.lastRenameType = (\u5185\u90e8)\u4e0a\u6b21\u91cd\u547d\u540d\u7c7b\u578b +config.description.lastRenameType = \u4e0a\u6b21\u4f7f\u7528\u7684\u91cd\u547d\u540d\u6807\u8bc6\u7b26\u7c7b\u578b -config.name.lastSaveDir = \uff08\u5185\u90e8\uff09\u6700\u540e\u4fdd\u5b58\u76ee\u5f55 -config.description.lastSaveDir = \u6700\u8fd1\u4e00\u6b21\u4f7f\u7528\u7684\u4fdd\u5b58\u76ee\u5f55 +config.name.lastSaveDir = (\u5185\u90e8)\u4e0a\u6b21\u4fdd\u5b58\u76ee\u5f55 +config.description.lastSaveDir = \u4e0a\u6b21\u4f7f\u7528\u7684\u4fdd\u5b58\u76ee\u5f55 -config.name.lastOpenDir = \uff08\u5185\u90e8\uff09\u6700\u540e\u6253\u5f00\u76ee\u5f55 -config.description.lastOpenDir = \u6700\u540e\u4f7f\u7528\u7684\u6253\u5f00\u76ee\u5f55 +config.name.lastOpenDir = (\u5185\u90e8)\u4e0a\u6b21\u6253\u5f00\u76ee\u5f55 +config.description.lastOpenDir = \u4e0a\u6b21\u4f7f\u7528\u7684\u6253\u5f00\u76ee\u5f55 -config.name.lastExportDir = \uff08\u5185\u90e8\uff09\u6700\u540e\u5bfc\u51fa\u76ee\u5f55 -config.description.lastExportDir = \u6700\u8fd1\u4e00\u6b21\u4f7f\u7528\u7684\u5bfc\u51fa\u76ee\u5f55 +config.name.lastExportDir = (\u5185\u90e8)\u4e0a\u6b21\u5bfc\u51fa\u76ee\u5f55 +config.description.lastExportDir = \u4e0a\u6b21\u4f7f\u7528\u7684\u5bfc\u51fa\u76ee\u5f55 config.name.locale = \u8bed\u8a00 -config.description.locale = \u533a\u57df\u8bbe\u7f6e\u6807\u8bc6\u7b26 +config.description.locale = \u8bed\u8a00\u73af\u5883\u6807\u8bc6\u7b26 config.name.registerNameFormat = \u5bc4\u5b58\u5668\u53d8\u91cf\u683c\u5f0f -config.description.registerNameFormat = \u5c40\u90e8\u5bc4\u5b58\u5668\u53d8\u91cf\u540d\u7684\u683c\u5f0f\u3002\u4f7f\u7528 %d \u5bc4\u5b58\u5668\u53f7\u3002 +config.description.registerNameFormat = \u672c\u5730\u5bc4\u5b58\u5668\u53d8\u91cf\u540d\u79f0\u7684\u683c\u5f0f\u3002 \u4f7f\u7528%d\u4f5c\u4e3a\u5bc4\u5b58\u5668\u53f7\u3002 -config.name.maxRecentFileCount = \u6700\u5927\u6700\u8fd1\u7edf\u8ba1 -config.description.maxRecentFileCount = \u8fd1\u671f\u6700\u5927\u6587\u4ef6\u6570\u91cf +config.name.maxRecentFileCount = \u6700\u8fd1\u6587\u4ef6\u6700\u5927\u6570\u91cf +config.description.maxRecentFileCount = \u6700\u8fd1\u6587\u4ef6\u7684\u6700\u5927\u6570\u91cf -config.name.recentFiles = \uff08\u5185\u90e8\uff09\u6700\u8fd1\u7684\u6587\u4ef6 +config.name.recentFiles = (\u5185\u90e8)\u6700\u8fd1\u7684\u6587\u4ef6 config.description.recentFiles = \u6700\u8fd1\u6253\u5f00\u7684\u6587\u4ef6 -config.name.fontPairingMap = \uff08\u5185\u90e8\uff09\u5b57\u4f53\u914d\u5bf9\u5bfc\u5165 +config.name.fontPairingMap = (\u5185\u90e8)\u5b57\u4f53\u914d\u5bf9\u5bfc\u5165 config.description.fontPairingMap = \u5b57\u4f53\u914d\u5bf9\u5bfc\u5165\u65b0\u7684\u5b57\u7b26 -config.name.lastUpdatesCheckDate = \uff08\u5185\u90e8\uff09\u6700\u8fd1\u66f4\u65b0\u68c0\u67e5\u65e5\u671f -config.description.lastUpdatesCheckDate = \u4e0a\u6b21\u670d\u52a1\u5668\u4e0b\u8f7d\u66f4\u65b0\u68c0\u67e5\u7684\u65e5\u671f +config.name.lastUpdatesCheckDate = (\u5185\u90e8)\u6700\u8fd1\u66f4\u65b0\u68c0\u67e5\u65e5\u671f +config.description.lastUpdatesCheckDate = \u4e0a\u6b21\u4ece\u670d\u52a1\u5668\u68c0\u67e5\u66f4\u65b0\u7684\u65e5\u671f -config.name.gui.window.width = \uff08\u5185\u90e8\uff09\u6700\u540e\u4e00\u4e2a\u7a97\u53e3\u5bbd\u5ea6 +config.name.gui.window.width = (\u5185\u90e8)\u4e0a\u6b21\u7a97\u53e3\u5bbd\u5ea6 config.description.gui.window.width = \u6700\u540e\u4fdd\u5b58\u7684\u7a97\u53e3\u5bbd\u5ea6 -config.name.gui.window.height = \uff08\u5185\u90e8\uff09\u6700\u540e\u4e00\u4e2a\u7a97\u53e3\u7684\u9ad8\u5ea6 +config.name.gui.window.height = (\u5185\u90e8)\u4e0a\u6b21\u7a97\u53e3\u9ad8\u5ea6 config.description.gui.window.height = \u6700\u540e\u4fdd\u5b58\u7684\u7a97\u53e3\u9ad8\u5ea6 -config.name.gui.window.maximized.horizontal = \uff08\u5185\u90e8\uff09\u7a97\u53e3\u6a2a\u5411\u6700\u5927\u5316 +config.name.gui.window.maximized.horizontal = (\u5185\u90e8)\u7a97\u53e3\u6700\u5927\u5316\u5bbd\u5ea6 config.description.gui.window.maximized.horizontal = \u6700\u540e\u7a97\u53e3\u72b6\u6001 - \u6a2a\u5411\u6700\u5927\u5316 -config.name.gui.window.maximized.vertical = \uff08\u5185\u90e8\uff09\u7a97\u53e3\u6700\u5927\u5316\u9ad8\u5ea6 +config.name.gui.window.maximized.vertical = (\u5185\u90e8)\u7a97\u53e3\u6700\u5927\u5316\u9ad8\u5ea6 config.description.gui.window.maximized.vertical = \u6700\u540e\u7a97\u53e3\u72b6\u6001 - \u5782\u76f4\u6700\u5927\u5316 -config.name.gui.avm2.splitPane.dividerLocationPercent = \uff08\u5185\u90e8\uff09 AS3 \u5206\u79bb\u5668\u4f4d\u7f6e +config.name.gui.avm2.splitPane.dividerLocationPercent = (\u5185\u90e8)AS3\u5206\u79bb\u5668\u4f4d\u7f6e config.description.gui.avm2.splitPane.dividerLocationPercent = -config.name.gui.actionSplitPane.dividerLocationPercent = \uff08\u5185\u90e8\uff09 AS1/2 \u5206\u79bb\u5668\u4f4d\u7f6e +config.name.gui.actionSplitPane.dividerLocationPercent = (\u5185\u90e8)AS1/2\u5206\u79bb\u5668\u4f4d\u7f6e config.description.gui.actionSplitPane.dividerLocationPercent = -config.name.gui.previewSplitPane.dividerLocationPercent = \uff08\u5185\u90e8\uff09\u9884\u89c8\u5206\u79bb\u5668\u4f4d\u7f6e +config.name.gui.previewSplitPane.dividerLocationPercent = (\u5185\u90e8)\u9884\u89c8\u5206\u79bb\u5668\u4f4d\u7f6e config.description.gui.previewSplitPane.dividerLocationPercent = -config.name.gui.splitPane1.dividerLocationPercent = \uff08\u5185\u90e8\uff09\u5206\u79bb\u5668\u4f4d\u7f6e 1 +config.name.gui.splitPane1.dividerLocationPercent = (\u5185\u90e8)\u5206\u79bb\u5668\u4f4d\u7f6e1 config.description.gui.splitPane1.dividerLocationPercent = -config.name.gui.splitPane2.dividerLocationPercent = \uff08\u5185\u90e8\uff09\u5206\u79bb\u5668\u4f4d\u7f6e 2 +config.name.gui.splitPane2.dividerLocationPercent = (\u5185\u90e8)\u5206\u79bb\u5668\u4f4d\u7f6e2 config.description.gui.splitPane2.dividerLocationPercent = -config.name.saveAsExeScaleMode = \u4fdd\u5b58\u4e3a EXE \u7f29\u653e\u6a21\u5f0f -config.description.saveAsExeScaleMode = EXE \u5bfc\u51fa\u7f29\u653e\u6a21\u5f0f +config.name.saveAsExeScaleMode = \u53e6\u5b58\u4e3aEXE\u7684\u7f29\u653e\u6a21\u5f0f +config.description.saveAsExeScaleMode = EXE\u5bfc\u51fa\u7684\u7f29\u653e\u6a21\u5f0f -config.name.syntaxHighlightLimit = \u8bed\u6cd5\u9ad8\u4eae\u6700\u591a\u5b57\u7b26\u6570 -config.description.syntaxHighlightLimit = \u8fd0\u884c\u7684\u8bed\u6cd5\u9ad8\u4eae\u6700\u5927\u5b57\u7b26\u6570 +config.name.syntaxHighlightLimit = Syntax hilight\u6700\u5927\u5b57\u7b26 +config.description.syntaxHighlightLimit = \u8fd0\u884c\u7684Syntax hilight\u6700\u5927\u5b57\u7b26\u6570 -config.name.guiFontPreviewSampleText = \uff08\u5185\u90e8\uff09\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u793a\u4f8b\u6587\u672c +config.name.guiFontPreviewSampleText = (\u5185\u90e8)\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u793a\u4f8b\u6587\u672c config.description.guiFontPreviewSampleText = \u6700\u540e\u5b57\u4f53\u9884\u89c8\u793a\u4f8b\u6587\u672c\u5217\u8868\u7d22\u5f15 -config.name.gui.fontPreviewWindow.width = \uff08\u5185\u90e8\uff09\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u7a97\u53e3\u7684\u5bbd\u5ea6 +config.name.gui.fontPreviewWindow.width = (\u5185\u90e8)\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u7a97\u53e3\u5bbd\u5ea6 config.description.gui.fontPreviewWindow.width = -config.name.gui.fontPreviewWindow.height = \u5185\u90e8\uff09\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u7a97\u53e3\u7684\u9ad8\u5ea6 +config.name.gui.fontPreviewWindow.height = \u5185\u90e8)\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u7a97\u53e3\u9ad8\u5ea6 config.description.gui.fontPreviewWindow.height = -config.name.gui.fontPreviewWindow.posX = \uff08\u5185\u90e8\uff09\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u7a97\u53e3 X +config.name.gui.fontPreviewWindow.posX = (\u5185\u90e8)\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u7a97\u53e3X config.description.gui.fontPreviewWindow.posX = -config.name.gui.fontPreviewWindow.posY = \uff08\u5185\u90e8\uff09\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u7a97\u53e3 Y +config.name.gui.fontPreviewWindow.posY = (\u5185\u90e8)\u4e0a\u6b21\u5b57\u4f53\u9884\u89c8\u7a97\u53e3Y config.description.gui.fontPreviewWindow.posY = -config.name.formatting.indent.size = \u5b57\u7b26\u6bcf\u7f29\u8fdb -config.description.formatting.indent.size = \u7528\u4e8e\u53f7\u7801\u7a7a\u683c\uff08\u6216\u5236\u8868\u7b26\uff09\u4e00\u4e2a\u7f29\u8fdb +config.name.formatting.indent.size = \u6bcf\u4e2a\u7f29\u8fdb\u7684\u5b57\u7b26\u6570 +config.description.formatting.indent.size = \u4e00\u4e2a\u7f29\u8fdb\u7684\u7a7a\u683c(\u6216\u5236\u8868\u7b26)\u6570 -config.name.formatting.indent.useTabs = \u7f29\u8fdb\u6807\u7b7e -config.description.formatting.indent.useTabs = \u6807\u7b7e\u7684\u4f7f\u7528\uff0c\u800c\u4e0d\u662f\u7f29\u8fdb\u7a7a\u95f4 +config.name.formatting.indent.useTabs = \u5236\u8868\u7b26\u7f29\u8fdb +config.description.formatting.indent.useTabs = \u4f7f\u7528\u5236\u8868\u7b26\u800c\u4e0d\u662f\u7a7a\u683c\u8fdb\u884c\u7f29\u8fdb config.name.beginBlockOnNewLine = \u65b0\u884c\u5927\u62ec\u53f7 -config.description.beginBlockOnNewLine = \u5728\u65b0\u884c\u4e0a\u5f00\u59cb\u5757\u4f7f\u7528\u5927\u62ec\u53f7 +config.description.beginBlockOnNewLine = \u5728\u65b0\u884c\u7684\u5757\u5f00\u59cb\u65f6\u4f7f\u7528\u5927\u62ec\u53f7 config.name.check.updates.delay = \u66f4\u65b0\u68c0\u67e5\u5ef6\u8fdf -config.description.check.updates.delay = \u5728\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u66f4\u65b0\u81ea\u52a8\u68c0\u67e5\u4e4b\u95f4\u6700\u5c0f\u65f6\u95f4\u95f4\u9694 +config.description.check.updates.delay = \u8f6f\u4ef6\u542f\u52a8\u4e0e\u66f4\u65b0\u81ea\u52a8\u68c0\u67e5\u4e4b\u95f4\u7684\u6700\u77ed\u65f6\u95f4 -config.name.check.updates.stable = \u68c0\u67e5\u7a33\u5b9a\u7248\u672c -config.description.check.updates.stable = \u68c0\u67e5\u7a33\u5b9a\u7684\u7248\u672c\u66f4\u65b0 +config.name.check.updates.stable = \u7a33\u5b9a\u7248\u672c +config.description.check.updates.stable = \u68c0\u67e5\u7a33\u5b9a\u7248\u672c\u66f4\u65b0 -config.name.check.updates.nightly = \u68c0\u67e5\u665a\u95f4\u7248\u672c -config.description.check.updates.nightly = \u68c0\u67e5\u665a\u95f4\u7248\u672c\u66f4\u65b0 +config.name.check.updates.nightly = \u6d4b\u8bd5\u7248\u672c +config.description.check.updates.nightly = \u68c0\u67e5\u6d4b\u8bd5\u7248\u672c\u66f4\u65b0 config.name.check.updates.enabled = \u542f\u7528\u66f4\u65b0\u68c0\u67e5 config.description.check.updates.enabled = \u5728\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u65f6\u81ea\u52a8\u68c0\u67e5\u66f4\u65b0 -config.name.export.formats = \uff08\u5185\u90e8\uff09\u5bfc\u51fa\u683c\u5f0f -config.description.export.formats = \u6700\u8fd1\u4e00\u6b21\u4f7f\u7528\u5bfc\u51fa\u683c\u5f0f +config.name.export.formats = (\u5185\u90e8)\u5bfc\u51fa\u683c\u5f0f +config.description.export.formats = \u4e0a\u6b21\u4f7f\u7528\u7684\u5bfc\u51fa\u683c\u5f0f -config.name.textExportSingleFile = \u5bfc\u51fa\u6587\u672c\u5230\u5355\u4e2a\u6587\u4ef6 -config.description.textExportSingleFile = \u5bfc\u51fa\u7684\u6587\u672c\u5230\u4e00\u4e2a\u6587\u4ef6\u800c\u4e0d\u662f\u591a\u4e2a +config.name.textExportSingleFile = \u5c06\u6587\u672c\u5bfc\u51fa\u5230\u5355\u6587\u4ef6 +config.description.textExportSingleFile = \u5c06\u6587\u672c\u5bfc\u51fa\u5230\u4e00\u4e2a\u6587\u4ef6\u800c\u4e0d\u662f\u591a\u4e2a\u6587\u4ef6 -config.name.textExportSingleFileSeparator = \u5728\u4e00\u4e2a\u6587\u4ef6\u6587\u672c\u5bfc\u51fa\u6587\u672c\u7684\u5206\u9694\u7b26 -config.description.textExportSingleFileSeparator = \u6587\u672c\u4e2d\u7684\u5355\u4e2a\u6587\u4ef6\u6587\u672c\u5bfc\u51fa\u6587\u672c\u4e4b\u95f4\u63d2\u5165 +config.name.textExportSingleFileSeparator = \u5355\u6587\u4ef6\u5bfc\u51fa\u6587\u672c\u7684\u5206\u9694\u7b26 +config.description.textExportSingleFileSeparator = \u5355\u6587\u4ef6\u6587\u672c\u5bfc\u51fa\u4e2d\u5206\u5272\u5404\u6587\u672c\u7684\u5206\u9694\u7b26 -config.name.textExportSingleFileRecordSeparator = \u5728\u4e00\u4e2a\u6587\u4ef6\u4e2d\u7684\u6587\u672c\u5bfc\u51fa\u8bb0\u5f55\u5206\u9694\u7b26 -config.description.textExportSingleFileRecordSeparator = \u6587\u672c\u4e2d\u7684\u5355\u4e2a\u6587\u4ef6\u6587\u672c\u5bfc\u51fa\u6587\u672c\u8bb0\u5f55\u4e4b\u95f4\u63d2\u5165 +config.name.textExportSingleFileRecordSeparator = \u5355\u6587\u4ef6\u5bfc\u51fa\u6587\u672c\u7684\u8bb0\u5f55\u5206\u9694\u7b26 +config.description.textExportSingleFileRecordSeparator = \u5355\u6587\u4ef6\u6587\u672c\u5bfc\u51fa\u4e2d\u63d2\u5165\u6587\u672c\u8bb0\u5f55\u4e4b\u95f4\u7684\u6587\u672c -config.name.warning.experimental.as12edit = \u5728 AS1/2 \u53ef\u76f4\u63a5\u7f16\u8f91\u8b66\u544a -config.description.warning.experimental.as12edit = \u5728 AS1/2 \u5b9e\u9a8c\u7248\u76f4\u63a5\u663e\u793a\u8b66\u544a +config.name.warning.experimental.as12edit = AS1/2\u76f4\u63a5\u7f16\u8f91\u8b66\u544a +config.description.warning.experimental.as12edit = \u5728AS1/2\u76f4\u63a5\u7f16\u8f91\u65f6\u663e\u793a\u5b9e\u9a8c\u6027\u8b66\u544a -config.name.warning.experimental.as3edit = \u5728 AS3 \u76f4\u63a5\u7f16\u8f91\u8b66\u544a -config.description.warning.experimental.as3edit = \u5728 AS3 \u5b9e\u9a8c\u7248\u672c\u76f4\u63a5\u663e\u793a\u8b66\u544a +config.name.warning.experimental.as3edit = AS3\u76f4\u63a5\u7f16\u8f91\u8b66\u544a +config.description.warning.experimental.as3edit = \u5728AS3\u76f4\u63a5\u7f16\u8f91\u65f6\u663e\u793a\u5b9e\u9a8c\u6027\u8b66\u544a -config.name.packJavaScripts = JavaScripts \u7ec4\u4ef6 -config.description.packJavaScripts = \u5728\u753b\u5e03\u5bfc\u51fa\u521b\u5efa\u7684\u811a\u672c\u6267\u884c JavaScript \u6253\u5305\u673a\u3002 +config.name.packJavaScripts = \u6253\u5305JavaScript +config.description.packJavaScripts = \u5bf9\u4f7f\u7528Canvas Export\u521b\u5efa\u7684\u811a\u672c\u8fd0\u884cJS\u6253\u5305\u5668\u3002 -config.name.textExportExportFontFace = \u5728 SVG \u5bfc\u51fa\u4f7f\u7528\u5b57\u4f53\u9762 -config.description.textExportExportFontFace = \u5728SVG\u5d4c\u5165\u5b57\u4f53\u6587\u4ef6\u4f7f\u7528\u5b57\u4f53\u9762\u800c\u4e0d\u662f\u5f62\u72b6 +config.name.textExportExportFontFace = \u5728SVG\u5bfc\u51fa\u4e2d\u4f7f\u7528font-face +config.description.textExportExportFontFace = \u4f7f\u7528font-face\u800c\u4e0d\u662f\u5f62\u72b6\u5c06\u5b57\u4f53\u6587\u4ef6\u5d4c\u5165SVG -config.name.lzmaFastBytes = LZMA\u5feb\u901f\u5b57\u8282\uff08\u6709\u6548\u503c\uff1a5-255\uff09 -config.description.lzmaFastBytes = LZMA \u7f16\u7801\u5668\u5feb\u901f\u5b57\u8282\u53c2\u6570 +config.name.lzmaFastBytes = LZMA\u5feb\u901f\u5b57\u8282(\u6709\u6548\u503c:5-255) +config.description.lzmaFastBytes = LZMA\u7f16\u7801\u5668\u7684\u5feb\u901f\u5b57\u8282\u53c2\u6570 config.name.pluginPath = \u63d2\u4ef6\u8def\u5f84 config.description.pluginPath = - -config.name.showMethodBodyId = \u663e\u793a\u65b9\u6cd5 ID -config.description.showMethodBodyId = \u663e\u793a\u65b9\u6cd5\u4e3b\u4f53\u7684\u547d\u4ee4\u884c\u5bfc\u5165 ID +config.name.showMethodBodyId = \u663e\u793a\u65b9\u6cd5\u4e3b\u4f53id +config.description.showMethodBodyId = \u663e\u793a\u7528\u4e8e\u547d\u4ee4\u884c\u5bfc\u5165\u7684\u65b9\u6cd5\u4e3b\u4f53\u7684id -config.name.export.zoom = \uff08\u5185\u90e8\uff09\u5bfc\u51fa\u7f29\u653e -config.description.export.zoom = \u6700\u8fd1\u4e00\u6b21\u4f7f\u7528\u7f29\u653e\u5bfc\u51fa +config.name.export.zoom = (\u5185\u90e8)\u5bfc\u51fa\u7f29\u653e +config.description.export.zoom = \u4e0a\u6b21\u4f7f\u7528\u7684\u5bfc\u51fa\u7f29\u653e config.name.debuggerPort = \u8c03\u8bd5\u7aef\u53e3 -config.description.debuggerPort = \u7aef\u53e3\u7528\u4e8e\u8c03\u8bd5\u63a5\u53e3 +config.description.debuggerPort = \u7528\u4e8esocket\u8c03\u8bd5\u7684\u7aef\u53e3 -config.name.displayDebuggerInfo = \uff08\u5185\u90e8\uff09\u663e\u793a\u8c03\u8bd5\u4fe1\u606f -config.description.displayDebuggerInfo = \u5207\u6362\u4e4b\u524d\u663e\u793a\u7684\u4fe1\u606f\u8c03\u8bd5 +config.name.displayDebuggerInfo = (\u5185\u90e8)\u663e\u793a\u8c03\u8bd5\u5668\u4fe1\u606f +config.description.displayDebuggerInfo = \u5728\u5207\u6362\u8c03\u8bd5\u5668\u4e4b\u524d\u663e\u793a\u6709\u5173\u8c03\u8bd5\u5668\u7684\u4fe1\u606f config.name.randomDebuggerPackage = \u4f7f\u7528\u968f\u673a\u8c03\u8bd5\u5305\u540d -config.description.randomDebuggerPackage = \u8fd9\u5c06\u4f7f\u7528\u968f\u673a\u5b57\u7b26\u4e32\u91cd\u547d\u540d\u8c03\u8bd5\u5305\uff0c\u8fd9\u4f7f\u5f97\u8c03\u8bd5\u5668\u66f4\u96be\u901a\u8fc7 ActionScript \u6765\u68c0\u6d4b\u5b58\u5728 +config.description.randomDebuggerPackage = \u8fd9\u4f1a\u5c06Debugger\u5305\u91cd\u547d\u540d\u4e3a\u968f\u673a\u5b57\u7b26\u4e32\uff0c\u8fd9\u4f7f\u5f97AS\u5f88\u96be\u68c0\u6d4b\u5230\u8c03\u8bd5\u5668\u7684\u5b58\u5728 -config.name.lastDebuggerReplaceFunction = \uff08\u5185\u90e8\uff09\u6700\u540e\u4e00\u6b21\u9009\u62e9\u7684\u8ddf\u8e2a\u7f6e\u6362 -config.description.lastDebuggerReplaceFunction = \u9009\u62e9\u8fd9\u662f\u6700\u540e\u4e00\u4e2a\u51fd\u6570\u7684\u540d\u79f0\u7528\u8c03\u8bd5\u5668\u4ee3\u66ff\u8ddf\u8e2a\u529f\u80fd +config.name.lastDebuggerReplaceFunction = (\u5185\u90e8)\u6700\u540e\u4e00\u6b21\u9009\u62e9\u7684trace\u66ff\u6362 +config.description.lastDebuggerReplaceFunction = \u5728\u7528\u8c03\u8bd5\u5668\u66ff\u6362\u8ddf\u8e2a\u529f\u80fd\u4e2d\u6700\u540e\u9009\u62e9\u7684\u51fd\u6570\u540d\u79f0 -config.name.getLocalNamesFromDebugInfo = AS3: \u4ece\u8c03\u8bd5\u4fe1\u606f\u83b7\u5f97\u672c\u5730\u5bc4\u5b58\u5668\u540d -config.description.getLocalNamesFromDebugInfo = \u5982\u679c\u8c03\u8bd5\u4fe1\u606f\u5b58\u5728\uff0c\u91cd\u547d\u540d\u4ece_loc_x_\u5230\u5b9e\u540d\u5c40\u90e8\u5bc4\u5b58\u5668\u3002\u8fd9\u53ef\u80fd\u662f\u56e0\u4e3a\u4e00\u4e9b\u6df7\u6dc6\u5668\u4f7f\u7528\u65e0\u6548\u7684\u5bc4\u5b58\u5668\u540d\u6709\u88ab\u5173\u95ed\u3002 +config.name.getLocalNamesFromDebugInfo = AS3:\u4ece\u8c03\u8bd5\u4fe1\u606f\u83b7\u53d6\u672c\u5730\u5bc4\u5b58\u5668\u540d\u79f0 +config.description.getLocalNamesFromDebugInfo = \u5982\u679c\u5b58\u5728\u8c03\u8bd5\u4fe1\u606f\uff0c\u5219\u5c06\u672c\u5730\u5bc4\u5b58\u5668\u4ece_loc_x_\u91cd\u547d\u540d\u4e3a\u771f\u5b9e\u540d\u79f0\u3002 \u7531\u4e8e\u67d0\u4e9b\u6df7\u6dc6\u5668\u5728\u90a3\u91cc\u4f7f\u7528\u4e86\u65e0\u6548\u7684\u5bc4\u5b58\u5668\u540d\u79f0\uff0c\u56e0\u6b64\u53ef\u4ee5\u5c06\u5176\u5173\u95ed\u3002 config.name.tagTreeShowEmptyFolders = \u663e\u793a\u7a7a\u6587\u4ef6\u5939 -config.description.tagTreeShowEmptyFolders = \u5728\u6807\u7b7e\u6811\u663e\u793a\u7a7a\u6587\u4ef6\u5939 +config.description.tagTreeShowEmptyFolders = \u5728\u6807\u7b7e\u6811\u4e2d\u663e\u793a\u7a7a\u6587\u4ef6\u5939 -config.name.autoLoadEmbeddedSwfs = \u81ea\u52a8\u8f7d\u5165\u5d4c\u5165\u7684 SWF \u6587\u4ef6 -config.description.autoLoadEmbeddedSwfs = \u4ece\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u81ea\u52a8\u52a0\u8f7d\u6765\u81ea\u5b9a\u4e49\u5d4c\u5165\u7684 SWF \u6587\u4ef6 +config.name.autoLoadEmbeddedSwfs = \u81ea\u52a8\u8f7d\u5165\u5d4c\u5165\u7684SWF +config.description.autoLoadEmbeddedSwfs = \u4eceDefineBinaryData\u6807\u7b7e\u81ea\u52a8\u52a0\u8f7d\u5d4c\u5165\u5f0fSWF config.name.overrideTextExportFileName = \u8986\u76d6\u6587\u672c\u5bfc\u51fa\u6587\u4ef6\u540d -config.description.overrideTextExportFileName = \u60a8\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5bfc\u51fa\u7684\u6587\u672c\u7684\u6587\u4ef6\u540d\u3002\u4f7f\u7528 {filename} \u5360\u4f4d\u7b26\u4ee5\u4f7f\u7528\u5f53\u524dSWF\u7684\u6587\u4ef6\u540d\u3002 +config.description.overrideTextExportFileName = \u60a8\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5bfc\u51fa\u6587\u672c\u7684\u6587\u4ef6\u540d\u3002 \u4f7f\u7528{filename}\u5360\u4f4d\u7b26\u53ef\u4ee5\u4f7f\u7528\u5f53\u524dSWF\u6587\u4ef6\u540d\u3002 config.name.showOldTextDuringTextEditing = \u5728\u6587\u672c\u7f16\u8f91\u4e2d\u663e\u793a\u65e7\u6587\u672c config.description.showOldTextDuringTextEditing = \u5728\u9884\u89c8\u533a\u57df\u663e\u793a\u7070\u8272\u6587\u672c\u6807\u8bb0\u7684\u539f\u59cb\u6587\u672c config.group.name.import = \u5bfc\u5165 -config.group.description.import = \u5bfc\u5165\u914d\u7f6e +config.group.description.import = \u5bfc\u5165\u76f8\u5173\u8bbe\u7f6e config.name.textImportResizeTextBoundsMode = \u6587\u672c\u8fb9\u754c\u8c03\u6574\u6a21\u5f0f -config.description.textImportResizeTextBoundsMode = \u6587\u672c\u8fb9\u754c\u7684\u6587\u672c\u7f16\u8f91\u540e\u8c03\u6574\u6a21\u5f0f +config.description.textImportResizeTextBoundsMode = \u6587\u672c\u7f16\u8f91\u540e\uff0c\u6587\u672c\u8fb9\u754c\u7684\u8c03\u6574\u6a21\u5f0f\u3002 -config.name.showCloseConfirmation = \u518d\u6b21\u663e\u793a SWF \u5173\u95ed\u786e\u8ba4 -config.description.showCloseConfirmation = \u518d\u6b21\u663e\u793a\u4fee\u6539\u8fc7\u7684 SWF \u6587\u4ef6\u5173\u95ed\u786e\u8ba4 +config.name.showCloseConfirmation = \u663e\u793a\u5df2\u4fee\u6539SWF\u5173\u95ed\u786e\u8ba4 +config.description.showCloseConfirmation = \u518d\u6b21\u663e\u793a\u5df2\u4fee\u6539\u6587\u4ef6\u7684SWF\u5173\u95ed\u786e\u8ba4 -config.name.showCodeSavedMessage = \u518d\u6b21\u663e\u793a\u4ee3\u7801\u4fdd\u5b58\u7684\u4fe1\u606f -config.description.showCodeSavedMessage = \u518d\u6b21\u663e\u793a\u4ee3\u7801\u4fdd\u5b58\u7684\u4fe1\u606f +config.name.showCodeSavedMessage = \u518d\u6b21\u663e\u793a\u4ee3\u7801\u4fdd\u5b58\u4fe1\u606f +config.description.showCodeSavedMessage = \u518d\u6b21\u663e\u793a\u5df2\u4fdd\u5b58\u4ee3\u7801\u7684\u4fe1\u606f -config.name.showTraitSavedMessage = \u518d\u6b21\u663e\u793a\u4fdd\u5b58\u7684\u7279\u6027\u4fe1\u606f -config.description.showTraitSavedMessage = \u518d\u6b21\u663e\u793a\u4fdd\u5b58\u7684\u7279\u6027\u4fe1\u606f +config.name.showTraitSavedMessage = \u518d\u6b21\u663e\u793a\u7279\u5f81\u4fdd\u5b58\u4fe1\u606f +config.description.showTraitSavedMessage = \u518d\u6b21\u663e\u793a\u5df2\u4fdd\u5b58\u7684\u7279\u5f81\u4fe1\u606f -config.name.updateProxyAddress = HTTP \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\u68c0\u67e5\u66f4\u65b0 -config.description.updateProxyAddress = HTTP \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\u68c0\u67e5\u66f4\u65b0\u3002\u683c\u5f0f\uff1aexample.com:8080 +config.name.updateProxyAddress = \u7528\u4e8e\u68c0\u67e5\u66f4\u65b0\u7684Http\u4ee3\u7406\u5730\u5740 +config.description.updateProxyAddress = \u7528\u4e8e\u68c0\u67e5\u66f4\u65b0\u7684Http\u4ee3\u7406\u5730\u5740\u3002 \u683c\u5f0f:example.com:8080 config.name.editorMode = \u7f16\u8f91\u6a21\u5f0f -config.description.editorMode = \u8bf7\u5728\u9009\u62e9\u6587\u672c\u6216\u811a\u672c\u8282\u70b9\u6587\u672c\u533a\u57df\u81ea\u52a8\u7f16\u8f91 +config.description.editorMode = \u9009\u62e9\u6587\u672c\u6216\u811a\u672c\u65f6\uff0c\u4f7f\u6587\u672c\u533a\u57df\u53ef\u81ea\u52a8\u8fdb\u5165\u7f16\u8f91\u72b6\u6001 -config.name.autoSaveTagModifications = \u81ea\u52a8\u4fdd\u5b58\u4fee\u6539\u4ee3\u7801 -config.description.autoSaveTagModifications = \u5f53\u60a8\u5728\u6811\u4e2d\u9009\u62e9\u4e00\u4e2a\u65b0\u7684\u6807\u7b7e\u4fdd\u5b58\u66f4\u6539 +config.name.autoSaveTagModifications = \u81ea\u52a8\u4fdd\u5b58\u6807\u7b7e\u4fee\u6539 +config.description.autoSaveTagModifications = \u5728\u6807\u7b7e\u6811\u4e2d\u9009\u62e9\u65b0\u6807\u7b7e\u65f6\u4fdd\u5b58\u66f4\u6539 -config.name.saveSessionOnExit = \u9000\u51fa\u4fdd\u5b58\u4f1a\u8bdd -config.description.saveSessionOnExit = \u4fdd\u5b58\u5f53\u524d\u4f1a\u8bdd\u5e76 FFDec \u91cd\u542f\u540e\u91cd\u65b0\u6253\u5f00\u5b83\uff08\u4ec5\u9002\u7528\u4e8e\u5b9e\u65f6\u6587\u4ef6\uff09 +config.name.saveSessionOnExit = \u9000\u51fa\u65f6\u4fdd\u5b58\u4f1a\u8bdd +config.description.saveSessionOnExit = \u4fdd\u5b58\u5f53\u524d\u4f1a\u8bdd\u5e76\u5728FFDec\u91cd\u65b0\u542f\u52a8\u540e\u91cd\u65b0\u6253\u5f00\u5b83(\u4ec5\u9002\u7528\u4e8e\u5b9e\u9645\u6587\u4ef6) -config.name._showDebugMenu = \u663e\u793a FFDec \u8c03\u8bd5\u83dc\u5355 -config.description._showDebugMenu = \u529f\u80fd\u533a\u7684\u53cd\u7f16\u8bd1\u8c03\u8bd5\u663e\u793a\u8c03\u8bd5\u83dc\u5355 +config.name._showDebugMenu = \u663e\u793aFFDec\u8c03\u8bd5\u83dc\u5355 +config.description._showDebugMenu = \u5728\u529f\u80fd\u533a\u4e2d\u663e\u793a\u8c03\u8bd5\u83dc\u5355\uff0c\u7528\u4e8e\u8c03\u8bd5\u53cd\u7f16\u8bd1\u5668\u3002 -config.name.allowOnlyOneInstance = \u4ec5\u5141\u8bb8\u4e00\u4e2a FFDec \u5b9e\u4f8b\uff08\u4ec5 Windows \u64cd\u4f5c\u7cfb\u7edf\uff09 -config.description.allowOnlyOneInstance = FFDec \u53ef\u4ee5\u518d\u8fd0\u884c\u4e00\u6b21\uff0c\u6253\u5f00\u6240\u6709\u7684\u6587\u4ef6\u5c06\u88ab\u6dfb\u52a0\u5230\u4e00\u4e2a\u7a97\u53e3\u3002\u5b83\u4ec5\u9002\u7528\u4e8e Windows \u64cd\u4f5c\u7cfb\u7edf\u3002 +config.name.allowOnlyOneInstance = \u4ec5\u5141\u8bb8\u4e00\u4e2aFFDec\u5b9e\u4f8b(\u4ec5Windows) +config.description.allowOnlyOneInstance = FFDec\u53ea\u80fd\u8fd0\u884c\u4e00\u6b21\uff0c\u6240\u6709\u6253\u5f00\u7684\u6587\u4ef6\u90fd\u5c06\u6dfb\u52a0\u5230\u4e00\u4e2a\u7a97\u53e3\u4e2d\u3002 \u5b83\u4ec5\u9002\u7528\u4e8eWindows\u64cd\u4f5c\u7cfb\u7edf\u3002 -config.name.scriptExportSingleFile = \u5bfc\u51fa\u811a\u672c\u5230\u5355\u4e2a\u6587\u4ef6 -config.description.scriptExportSingleFile = \u5bfc\u51fa\u811a\u672c\u5230\u4e00\u4e2a\u6587\u4ef6\u800c\u4e0d\u662f\u591a\u4e2a +config.name.scriptExportSingleFile = \u5c06\u811a\u672c\u5bfc\u51fa\u5230\u5355\u6587\u4ef6 +config.description.scriptExportSingleFile = \u5c06\u811a\u672c\u5bfc\u51fa\u5230\u5355\u4e2a\u6587\u4ef6\u800c\u4e0d\u662f\u591a\u4e2a\u6587\u4ef6 -config.name.setFFDecVersionInExportedFont = \u5728\u5bfc\u51fa\u5b57\u4f53\u8bbe\u7f6e FFDec \u7248\u672c\u53f7 -config.description.setFFDecVersionInExportedFont = \u5f53\u6b64\u8bbe\u7f6e\u88ab\u7981\u7528\uff0cFFDec \u5c06\u4e0d\u662f\u5f53\u524d\u7684 FFDec \u7248\u672c\u53f7\u6dfb\u52a0\u5230\u5bfc\u51fa\u7684\u5b57\u4f53 +config.name.setFFDecVersionInExportedFont = \u4e3a\u5bfc\u51fa\u7684\u5b57\u4f53\u8bbe\u7f6eFFDec\u7248\u672c\u53f7 +config.description.setFFDecVersionInExportedFont = \u7981\u7528\u6b64\u8bbe\u7f6e\u540e\uff0cFFDec\u4e0d\u4f1a\u5c06\u5f53\u524d\u7684FFDec\u7248\u672c\u53f7\u6dfb\u52a0\u5230\u5bfc\u51fa\u7684\u5b57\u4f53\u4e2d\u3002 config.name.gui.skin = \u7528\u6237\u754c\u9762\u76ae\u80a4 config.description.gui.skin = \u5916\u89c2\u548c\u98ce\u683c\u76ae\u80a4 config.name.lastSessionFiles = \u4e0a\u6b21\u4f1a\u8bdd\u6587\u4ef6 -config.description.lastSessionFiles = \u5305\u542b\u4ece\u4e0a\u6b21\u4f1a\u8bdd\u6253\u5f00\u7684\u6587\u4ef6 +config.description.lastSessionFiles = \u5305\u542b\u4e0a\u4e00\u4e2a\u4f1a\u8bdd\u4e2d\u6253\u5f00\u7684\u6587\u4ef6 config.name.lastSessionSelection = \u4e0a\u6b21\u4f1a\u8bdd\u9009\u62e9 -config.description.lastSessionSelection = \u5305\u542b\u4ece\u4e0a\u6b21\u4f1a\u8bdd\u7684\u9009\u62e9 +config.description.lastSessionSelection = \u5305\u542b\u4e0a\u4e00\u4e2a\u4f1a\u8bdd\u7684\u9009\u62e9 -config.name.loopMedia = \u5faa\u73af\u58f0\u97f3\u548c\u5b50\u56fe\u5f62 -config.description.loopMedia = \u81ea\u52a8\u91cd\u65b0\u5f00\u59cb\u58f0\u97f3\u548c\u5b50\u56fe\u5f62\u7684\u64ad\u653e +config.name.loopMedia = \u5faa\u73af\u58f0\u97f3\u548c\u7cbe\u7075 +config.description.loopMedia = \u81ea\u52a8\u91cd\u65b0\u5f00\u59cb\u64ad\u653e\u58f0\u97f3\u548c\u7cbe\u7075 -config.name.gui.timeLineSplitPane.dividerLocationPercent = \uff08\u5185\u90e8\uff09\u65f6\u95f4\u8f74\u5206\u79bb\u5668\u4f4d\u7f6e +config.name.gui.timeLineSplitPane.dividerLocationPercent = (\u5185\u90e8)\u65f6\u95f4\u8f74\u62c6\u5206\u5668\u4f4d\u7f6e config.description.gui.timeLineSplitPane.dividerLocationPercent = config.name.cacheImages = \u7f13\u5b58\u56fe\u50cf config.description.cacheImages = \u7f13\u5b58\u89e3\u7801\u7684\u56fe\u50cf\u5bf9\u8c61 -config.name.swfSpecificConfigs = SWF \u7279\u5b9a\u914d\u7f6e -config.description.swfSpecificConfigs = \u5305\u542b SWF \u7279\u5b9a\u914d\u7f6e +config.name.swfSpecificConfigs = SWF\u7279\u5b9a\u914d\u7f6e +config.description.swfSpecificConfigs = \u5305\u542bSWF\u7279\u5b9a\u914d\u7f6e -config.name.exeExportMode = EXE \u5bfc\u51fa\u6a21\u5f0f -config.description.exeExportMode = EXE \u5bfc\u51fa\u6a21\u5f0f +config.name.exeExportMode = EXE\u5bfc\u51fa\u6a21\u5f0f +config.description.exeExportMode = EXE\u5bfc\u51fa\u6a21\u5f0f -config.name.ignoreCLikePackages = \u5ffd\u7565 FlashCC / Alchemy \u6216\u7c7b\u4f3c\u7684\u8f6f\u4ef6\u5305 -config.description.ignoreCLikePackages = FlashCC/Alchemy \u5305\u901a\u5e38\u4e0d\u80fd\u88ab\u6b63\u786e\u53cd\u7f16\u8bd1\u3002\u60a8\u53ef\u4ee5\u7981\u7528\u4ed6\u4eec\u52a0\u5feb\u5176\u4ed6\u8f6f\u4ef6\u5305\u7f16\u8bd1\u3002 +config.name.ignoreCLikePackages = \u5ffd\u7565FlashCC/Alchemy\u6216\u7c7b\u4f3c\u7684\u5305 +config.description.ignoreCLikePackages = \u901a\u5e38\u65e0\u6cd5\u6b63\u786e\u53cd\u7f16\u8bd1FlashCC/Alchemy\u7684\u5305\u3002 \u60a8\u53ef\u4ee5\u7981\u7528\u5b83\u4eec\u4ee5\u52a0\u5feb\u5176\u4ed6\u5305\u7684\u53cd\u7f16\u8bd1\u901f\u5ea6\u3002 config.name.overwriteExistingFiles = \u8986\u76d6\u73b0\u6709\u6587\u4ef6 -config.description.overwriteExistingFiles = \u5bfc\u51fa\u8fc7\u7a0b\u4e2d\u8986\u76d6\u73b0\u6709\u6587\u4ef6\u3002\u76ee\u524d\u4ec5\u9488\u5bf9 AS2/3 \u811a\u672c\u3002 +config.description.overwriteExistingFiles = \u5728\u5bfc\u51fa\u8fc7\u7a0b\u4e2d\u8986\u76d6\u73b0\u6709\u6587\u4ef6\u3002 \u5f53\u524d\u4ec5\u9002\u7528\u4e8eAS2/3\u811a\u672c config.name.smartNumberFormatting = \u4f7f\u7528\u667a\u80fd\u6570\u5b57\u683c\u5f0f -config.description.smartNumberFormatting = \u683c\u5f0f\u7279\u6b8a\u53f7\u7801\uff08\u4f8b\u5982\u989c\u8272\u548c\u65f6\u95f4\uff09 +config.description.smartNumberFormatting = \u683c\u5f0f\u5316\u7279\u6b8a\u6570\u5b57(\u4f8b\u5982\u989c\u8272\u548c\u65f6\u95f4) -config.name.enableScriptInitializerDisplay = \u663e\u793a\u521d\u59cb\u5316\u811a\u672c -config.description.enableScriptInitializerDisplay = \u542f\u7528\u811a\u672c\u521d\u59cb\u5316\u663e\u793a\u3002\u6b64\u8bbe\u7f6e\u53ef\u4ee5\u6709\u4e00\u4e2a\u6362\u884c\u7b26\u6dfb\u52a0\u5230\u6bcf\u4e2a\u7c7b\u6587\u4ef6\u9ad8\u4eae\u3002 +config.name.enableScriptInitializerDisplay = \u663e\u793a\u811a\u672c\u521d\u59cb\u5316\u5668 +config.description.enableScriptInitializerDisplay = \u542f\u7528\u811a\u672c\u521d\u59cb\u5316\u7a0b\u5e8f\u7684\u663e\u793a\u548c\u7f16\u8f91\u3002 \u6b64\u8bbe\u7f6e\u53ef\u4ee5\u5411\u6bcf\u4e2a\u7c7b\u6587\u4ef6\u6dfb\u52a0\u4e00\u4e2a\u6362\u884c\u7b26\u4ee5\u7a81\u51fa\u663e\u793a\u3002 -config.name.autoOpenLoadedSWFs = \u8fd0\u884c\u65f6\u6253\u5f00\u52a0\u8f7d SWF \u6587\u4ef6\uff08\u5916\u90e8\u67e5\u770b\u5668 = \u4ec5 Windows\uff09 -config.description.autoOpenLoadedSWFs = \u5728 FFDec \u5916\u90e8\u64ad\u653e\u5668\u4e2d\u64ad\u653e\u65f6\u81ea\u52a8\u6253\u5f00\u8fd0\u884c\u7684 SWF \u901a\u8fc7 AS3 \u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u6240\u6709 SWF\u3002\u6b64\u529f\u80fd\u4ec5\u9002\u7528\u4e8e Windows\u3002 +config.name.autoOpenLoadedSWFs = \u5728\u8fd0\u884c\u671f\u95f4\u6253\u5f00\u52a0\u8f7d\u7684SWF(\u5916\u90e8\u67e5\u770b\u5668=\u4ec5WIN) +config.description.autoOpenLoadedSWFs = \u5728FFDec\u5916\u90e8\u64ad\u653e\u5668\u4e2d\u64ad\u653e\u65f6\uff0c\u901a\u8fc7\u8fd0\u884cSWF\u81ea\u52a8\u6253\u5f00\u7531AS3\u7c7b\u52a0\u8f7d\u7a0b\u5e8f\u52a0\u8f7d\u7684\u6240\u6709SWF\u3002 \u6b64\u529f\u80fd\u4ec5Windows\u3002 config.name.lastSessionFileTitles = \u4e0a\u6b21\u4f1a\u8bdd\u6587\u4ef6\u6807\u9898 -config.description.lastSessionFileTitles = \u5305\u542b\u4ece\u4e0a\u6b21\u4f1a\u8bdd\u4e2d\u6253\u5f00\u7684\u6587\u4ef6\u6807\u9898\uff08\u4f8b\u5982\uff0c\u4ece URL \u52a0\u8f7d\u7b49\uff09 +config.description.lastSessionFileTitles = \u5305\u542b\u4e0a\u4e00\u4e2a\u4f1a\u8bdd\u4e2d\u6253\u5f00\u7684\u6587\u4ef6\u6807\u9898(\u4f8b\u5982\uff0c\u4eceURL\u7b49\u52a0\u8f7d\u65f6) config.group.name.paths = \u8def\u5f84 config.group.description.paths = \u6240\u9700\u6587\u4ef6\u4f4d\u7f6e -config.group.tip.paths = \u5728 Adobe \u7f51\u9875\u4e0a\u60a8\u53ef\u4ee5\u4e0b\u8f7d\u8fd9\u4e9b\u6587\u4ef6 -config.group.link.paths = https://www.adobe.com/support/flashplayer/debug_downloads.html -config.group.linkText.paths = [visit] +config.group.tip.paths = \u5728Adobe\u5b98\u7f51\u4e0a\u4e0b\u8f7dPlayer\u548cPlayerGlobal\u3002 Flex SDK\u53ef\u4ee5\u5728adobe devnet\u4e0a\u4e0b\u8f7d\u3002 +config.group.link.paths = https://www.adobe.com/support/flashplayer/debug_downloads.html http://www.adobe.com/devnet/flex/flex-sdk-download.html -config.name.playerLocation = 1) Flash Player \u6295\u5f71\u673a\u8def\u5f84 -config.description.playerLocation = \u72ec\u7acb\u7684 Flash Player \u53ef\u6267\u884c\u6587\u4ef6\u7684\u4f4d\u7f6e\u3002\u7528\u4e8e\u8fd0\u884c\u64cd\u4f5c\u3002 +config.name.playerLocation = 1) Flash Player\u76ee\u5f55 +config.description.playerLocation = \u72ec\u7acbFlash Player\u53ef\u6267\u884c\u6587\u4ef6\u7684\u4f4d\u7f6e\u3002 \u7528\u4e8e\u8fd0\u884c\u64cd\u4f5c\u3002 -config.name.playerDebugLocation = 2) Flash Player \u6295\u5f71\u4eea\u5185\u5bb9\u8c03\u8bd5\u8def\u5f84 -config.description.playerDebugLocation = \u72ec\u7acb\u7684\u8c03\u8bd5 Flash Player \u53ef\u6267\u884c\u6587\u4ef6\u7684\u4f4d\u7f6e\u3002\u7528\u4e8e\u8c03\u8bd5\u7684\u884c\u52a8\u3002 +config.name.playerDebugLocation = 2) Flash Player\u8c03\u8bd5\u5668\u76ee\u5f55 +config.description.playerDebugLocation = \u72ec\u7acb\u7684\u8c03\u8bd5Flash Player\u53ef\u6267\u884c\u6587\u4ef6\u7684\u4f4d\u7f6e\u3002\u7528\u4e8e\u8c03\u8bd5\u64cd\u4f5c\u3002 -config.name.playerLibLocation = 3) PlayerGlobal (.swc) \u8def\u5f84 -config.description.playerLibLocation = playerglobal.swc Flash Player \u5e93\u4f4d\u7f6e\u3002\u5b83\u4e3b\u8981\u7528\u4e8e AS3 \u7f16\u8bd1\u3002 +config.name.playerLibLocation = 3) PlayerGlobal(.swc)\u76ee\u5f55 +config.description.playerLibLocation = playerglobal.swc\u5e93\u7684\u4f4d\u7f6e\u3002 \u5b83\u4e3b\u8981\u7528\u4e8eAS3\u7f16\u8bd1\uff0c\u60a8\u53ef\u4ee5\u4eceAdobe\u5b98\u7f51\u4e0b\u8f7d\u3002 -config.name.debugHalt = \u5728\u8c03\u8bd5\u5f00\u59cb\u505c\u6b62\u6267\u884c -config.description.debugHalt = \u542f\u52a8\u8c03\u8bd5\u6682\u505c SWF\u3002 +config.name.debugHalt = \u5728\u8c03\u8bd5\u5f00\u59cb\u505c\u6b62\u64ad\u653e +config.description.debugHalt = \u5f00\u59cb\u8c03\u8bd5\u65f6\u6682\u505cSWF\u3002 -config.name.gui.avm2.splitPane.vars.dividerLocationPercent = \uff08\u5185\u90e8\uff09\u8c03\u8bd5\u83dc\u5355\u5206\u79bb\u5668\u4f4d\u7f6e +config.name.gui.avm2.splitPane.vars.dividerLocationPercent = (\u5185\u90e8)\u8c03\u8bd5\u83dc\u5355\u62c6\u5206\u5668\u4f4d\u7f6e config.description.gui.avm2.splitPane.vars.dividerLocationPercent = -tip = Tip:\u0020 +tip = \u63d0\u793a:\u0020 -config.name.gui.action.splitPane.vars.dividerLocationPercent = \uff08\u5185\u90e8\uff09AS1/2 \u8c03\u8bd5\u83dc\u5355\u5206\u79bb\u5668\u4f4d\u7f6e +config.name.gui.action.splitPane.vars.dividerLocationPercent = (\u5185\u90e8)AS1/2\u8c03\u8bd5\u83dc\u5355\u5206\u914d\u5668\u4f4d\u7f6e config.description.gui.action.splitPane.vars.dividerLocationPercent = -config.name.setMovieDelay = \u5728\u5916\u90e8\u64ad\u653e\u5668\u5ef6\u8fdf\u4e4b\u524d\u66f4\u6539 SWF -config.description.setMovieDelay = \u4e0d\u5efa\u8bae\u66f4\u6539\u4f4e\u4e8e 1000 \u6beb\u79d2\u8fd9\u4e2a\u503c +config.name.setMovieDelay = \u66f4\u6539\u5916\u90e8\u64ad\u653e\u5668\u4e2d\u7684SWF\u4e4b\u524d\u7684\u5ef6\u8fdf(\u6beb\u79d2) +config.description.setMovieDelay = \u4e0d\u5efa\u8bae\u5c06\u6b64\u503c\u66f4\u6539\u4e3a1000ms\u4ee5\u4e0b -config.name.warning.svgImport = SVG \u5bfc\u5165\u8b66\u544a +config.name.warning.svgImport = SVG\u5bfc\u5165\u8b66\u544a config.description.warning.svgImport = -config.name.shapeImport.useNonSmoothedFill = \u5f53\u4e00\u4e2a\u5f62\u72b6\u88ab\u66ff\u6362\u4e00\u4e2a\u56fe\u50cf\u4f7f\u7528\u975e\u5e73\u6ed1\u586b\u5145 +config.name.shapeImport.useNonSmoothedFill = \u5c06\u5f62\u72b6\u66ff\u6362\u4e3a\u56fe\u50cf\u65f6\uff0c\u8bf7\u4f7f\u7528\u4e0d\u5e73\u6ed1\u7684\u586b\u5145 config.description.shapeImport.useNonSmoothedFill = -config.name.internalFlashViewer.execute.as12 = AS1/2 \u5728\u81ea\u8eab\u7684 Flash \u67e5\u770b\u5668\uff08\u5b9e\u9a8c\uff09 -config.description.internalFlashViewer.execute.as12 = SWF \u64ad\u653e\u8fc7\u7a0b\u4e2d\u6267\u884c\u7684 ActionScript1/2 \u5c1d\u8bd5\u4f7f\u7528 FFDec Flash \u67e5\u770b\u5668 +config.name.internalFlashViewer.execute.as12 = \u5185\u90e8FlashViewer\u4e2d\u7684AS1/2(\u5b9e\u9a8c\u6027) +config.description.internalFlashViewer.execute.as12 = SWF\u64ad\u653e\u8fc7\u7a0b\u4e2d\u6267\u884c\u7684AS1/2\u5c1d\u8bd5\u4f7f\u7528FFDec FlashViewer -config.name.warning.hexViewNotUpToDate = \u8fbe\u4e0d\u5230\u6700\u65b0\u7684\u8b66\u544a\u663e\u793a\u5341\u516d\u8fdb\u5236\u67e5\u770b +config.name.warning.hexViewNotUpToDate = \u663e\u793a\u5341\u516d\u8fdb\u5236\u89c6\u56fe\u8fc7\u65e7\u8b66\u544a config.description.warning.hexViewNotUpToDate = -config.name.displayDupInstructions = \u663e\u793a \u00a7\u00a7dup \u8bf4\u660e -config.description.displayDupInstructions = \u5728\u4ee3\u7801\u663e\u793a \u00a7\u00a7dup \u8bf4\u660e\u3002\u5982\u679c\u6ca1\u6709\u4ed6\u4eec\uff0c\u4ee3\u7801\u53ef\u4ee5\u5f88\u5bb9\u6613\u5730\u7f16\u8bd1\uff0c\u4f46\u662f\u4e00\u4e9b\u4ee3\u7801\u53ef\u4ee5\u88ab\u6267\u884c\u4e24\u6b21\u3002 +config.name.displayDupInstructions = \u663e\u793a\u00a7\u00a7dup\u6307\u4ee4 +config.description.displayDupInstructions = \u5728\u4ee3\u7801\u4e2d\u663e\u793a\u00a7\u00a7dup\u6307\u4ee4\u3002 \u6ca1\u6709\u5b83\u4eec\uff0c\u4ee3\u7801\u53ef\u4ee5\u5f88\u5bb9\u6613\u5730\u7f16\u8bd1\uff0c\u4f46\u662f\u67d0\u4e9b\u5e26\u6709\u526f\u4f5c\u7528\u7684\u590d\u5236\u4ee3\u7801\u53ef\u4ee5\u6267\u884c\u4e24\u6b21\u3002 -config.name.useRegExprLiteral = \u7f16\u8bd1\u6b63\u5219\u8868\u8fbe\u5f0f\u4e3a /pattern/mod \u5e38\u91cf\u3002 -config.description.useRegExprLiteral = \u7f16\u8bd1\u6b63\u5219\u8868\u8fbe\u5f0f\u65f6\u4f7f\u7528 /pattern/mod \u8bed\u6cd5\u3002\u5426\u5219\u4f7f\u7528\u65b0\u7684\u6b63\u5219\u8868\u8fbe\u5f0f("pat","mod") \u3002 +config.name.useRegExprLiteral = \u5c06\u6b63\u5219\u8868\u8fbe\u5f0f\u53cd\u7f16\u8bd1\u4e3a/pattern/mod\u6587\u5b57\u3002 +config.description.useRegExprLiteral = \u53cd\u7f16\u8bd1\u6b63\u5219\u8868\u8fbe\u5f0f\u65f6\uff0c\u8bf7\u4f7f\u7528/pattern/mod\u8bed\u6cd5\u3002 \u5426\u5219\u4f7f\u7528\u65b0\u7684RegExp("pat","mod") -config.name.handleSkinPartsAutomatically = \u81ea\u52a8\u5904\u7406 [SkinPart] \u5143\u6570\u636e -config.description.handleSkinPartsAutomatically = \u7f16\u8bd1\u5e76\u76f4\u63a5\u7f16\u8f91 [SkinPart] \u81ea\u52a8\u5143\u6570\u636e\u3002\u5728\u5173\u95ed\u65f6 _skinParts \u5c5e\u6027\u53ca\u5176\u83b7\u53d6\u65b9\u6cd5\u53ef\u89c1\u5e76\u4e14\u624b\u52a8\u7f16\u8f91\u3002 +config.name.handleSkinPartsAutomatically = \u81ea\u52a8\u5904\u7406[SkinPart]\u5143\u6570\u636e +config.description.handleSkinPartsAutomatically = \u81ea\u52a8\u53cd\u7f16\u8bd1\u5e76\u76f4\u63a5\u7f16\u8f91[SkinPart]\u5143\u6570\u636e\u3002 \u7981\u7528\u65f6\uff0c_skinParts\u5c5e\u6027\u53ca\u5176getter\u65b9\u6cd5\u662f\u53ef\u89c1\u7684\uff0c\u53ef\u4ee5\u624b\u52a8\u7f16\u8f91\u3002 -config.name.simplifyExpressions = \u7b80\u5316\u8868\u8fbe\u5f0f -config.description.simplifyExpressions = \u8bc4\u4f30\u548c\u7b80\u5316\u8868\u8fbe\u5f0f\u4f7f\u4ee3\u7801\u66f4\u6613\u8bfb +config.name.simplifyExpressions = \u7b80\u5316\u8868\u8fbe +config.description.simplifyExpressions = \u8bc4\u4f30\u5e76\u7b80\u5316\u8868\u8fbe\u5f0f\uff0c\u4f7f\u4ee3\u7801\u66f4\u6613\u8bfb -config.name.resetLetterSpacingOnTextImport = \u6587\u672c\u5bfc\u5165\u91cd\u7f6e\u5b57\u6bcd\u95f4\u8ddd -config.description.resetLetterSpacingOnTextImport = \u53ef\u7528\u4e8e\u897f\u91cc\u5c14\u5b57\u4f53\uff0c\u56e0\u4e3a\u4ed6\u4eec\u66f4\u5e7f\u6cdb +config.name.resetLetterSpacingOnTextImport = \u6587\u672c\u5bfc\u5165\u65f6\u91cd\u7f6e\u5b57\u6bcd\u95f4\u8ddd +config.description.resetLetterSpacingOnTextImport = \u5bf9\u4e8e\u897f\u91cc\u5c14\u5b57\u4f53\u975e\u5e38\u6709\u6548\uff0c\u56e0\u4e3a\u5b83\u4eec\u66f4\u5bbd + +config.name.flexSdkLocation = 4) Flex SDK\u76ee\u5f55 +config.description.flexSdkLocation = Adobe Flex SDK\u7684\u4f4d\u7f6e\u3002 \u5b83\u4e3b\u8981\u7528\u4e8eAS3\u7f16\u8bd1\u3002 + +config.name.useFlexAs3Compiler = \u4f7f\u7528Flex SDK AS3\u7f16\u8bd1\u5668 +config.description.useFlexAs3Compiler = \u5728ActionScript\u76f4\u63a5\u7f16\u8f91\u7684\u540c\u65f6\u4f7f\u7528Flex SDK\u4e2d\u7684AS3\u7f16\u8bd1\u5668(\u9700\u8981\u8bbe\u7f6eFlex SDK\u76ee\u5f55) + +config.name.showSetAdvanceValuesMessage = \u518d\u6b21\u663e\u793a\u6709\u5173\u8bbe\u7f6e\u9ad8\u7ea7\u503c\u7684\u4fe1\u606f +config.description.showSetAdvanceValuesMessage = \u518d\u6b21\u663e\u793a\u6709\u5173\u8bbe\u7f6e\u9ad8\u7ea7\u503c\u7684\u4fe1\u606f + +config.name.gui.fontSizeMultiplier = \u5b57\u4f53\u5927\u5c0f\u500d\u6570 +config.description.gui.fontSizeMultiplier = \u5b57\u4f53\u5927\u5c0f\u500d\u6570 + +config.name.graphVizDotLocation = 5) GraphViz Dot\u53ef\u6267\u884c\u6587\u4ef6\u76ee\u5f55 +config.description.graphVizDotLocation = GraphViz\u5e94\u7528\u7a0b\u5e8f\u7684dot.exe(\u6216\u7c7b\u4f3c\u7684linux)\u8def\u5f84\uff0c\u7528\u4e8e\u663e\u793aGraph\u3002 + +#Do not translate the Font Styles which is in the parenthesis:(Plain,Bold,Italic,BoldItalic) +config.name.gui.sourceFont = \u6e90\u5b57\u4f53\u6837\u5f0f +config.description.gui.sourceFont = \u5b57\u4f53\u540d\u79f0-\u5b57\u4f53\u6837\u5f0f(Plain,Bold,Italic,BoldItalic)-\u5b57\u4f53\u5927\u5c0f + +#after 11.1.0 +config.name.as12DeobfuscatorExecutionLimit = AS1/2\u53bb\u6df7\u6dc6\u5668\u6267\u884c\u9650\u5236 +config.description.as12DeobfuscatorExecutionLimit = \u5728AS1/2\u6267\u884c\u53cd\u6df7\u6dc6\u8fc7\u7a0b\u4e2d\u5904\u7406\u7684\u6700\u5927\u6307\u4ee4\u6570 + +#option that ignore in 8.0.1 and other versions +config.name.showOriginalBytesInPcodeHex = (\u5185\u90e8)\u663e\u793a\u539f\u59cb\u5b57\u8282 +config.description.showOriginalBytesInPcodeHex = \u4ee5Pcode\u5341\u516d\u8fdb\u5236\u663e\u793a\u539f\u59cb\u5b57\u8282 + +config.name.showFileOffsetInPcodeHex = (\u5185\u90e8)\u663e\u793a\u6587\u4ef6\u504f\u79fb +config.description.showFileOffsetInPcodeHex = \u4ee5Pcode\u5341\u516d\u8fdb\u5236\u663e\u793a\u6587\u4ef6\u504f\u79fb + +config.name._enableFlexExport = (\u5185\u90e8)\u542f\u7528Flex\u5bfc\u51fa +config.description.enableFlexExport = \u542f\u7528Flex\u5bfc\u51fa + +config.name._ignoreAdditionalFlexClasses = (\u5185\u90e8)\u5ffd\u7565\u5176\u4ed6Flex\u7c7b +config.description.ignoreAdditionalFlexClasses = \u5ffd\u7565\u5176\u4ed6Flex\u7c7b + +config.name.hwAcceleratedGraphics = (\u5185\u90e8)\u786c\u4ef6\u56fe\u5f62\u52a0\u901f +config.description.hwAcceleratedGraphics = \u4f7f\u7528\u786c\u4ef6\u52a0\u901f\u56fe\u5f62 + +config.name.gui.avm2.splitPane.docs.dividerLocationPercent = (\u5185\u90e8)\u6587\u6863\u7a97\u683c\u5206\u9694\u4f4d\u7f6e\u767e\u5206\u6bd4 +config.description.gui.avm2.splitPane.docs.dividerLocationPercent = \u62c6\u5206\u7a97\u683c\u6587\u6863\u5206\u9694\u7ebf\u4f4d\u7f6e\u767e\u5206\u6bd4 + +config.name.gui.dump.splitPane.dividerLocationPercent = (\u5185\u90e8)\u8f6c\u50a8\u7a97\u683c\u5206\u9694\u4f4d\u7f6e\u767e\u5206\u6bd4 +config.description.gui.dump.splitPane.dividerLocationPercent = \u8f6c\u50a8\u62c6\u5206\u7a97\u683c\u5206\u9694\u7b26\u4f4d\u7f6e\u767e\u5206\u6bd4 \ No newline at end of file diff --git a/src/com/jpexs/decompiler/flash/gui/locales/ExportDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/ExportDialog_zh.properties index 61aac2673..a88c5cb97 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/ExportDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/ExportDialog_zh.properties @@ -41,9 +41,11 @@ sounds.wav = WAV scripts = \u811a\u672c scripts.as = ActionScript scripts.pcode = P-code -scripts.pcode_hex = \u4f7f\u7528\u5341\u516d\u8fdb\u5236 P-code +scripts.pcode_hex = \u5341\u516d\u8fdb\u5236 P-code scripts.hex = \u5341\u516d\u8fdb\u5236 scripts.constants = \u5e38\u91cf +scripts.as_method_stubs = ActionScript\u65b9\u6cd5\u5b58\u6839 +scripts.pcode_graphviz = P-code GraphViz binaryData = \u4e8c\u8fdb\u5236\u6570\u636e binaryData.raw = \u539f\u59cb @@ -57,6 +59,7 @@ morphshapes = \u53d8\u5f62\u5f62\u72b6 morphshapes.gif = GIF morphshapes.svg = SVG morphshapes.canvas = HTML5 \u753b\u5e03 +morphshapes.swf = SWF frames = \u5e27 frames.png = PNG @@ -66,8 +69,9 @@ frames.svg = SVG frames.canvas = HTML5 \u753b\u5e03 frames.pdf = PDF frames.bmp = BMP +frames.swf = SWF -sprites = \u5b50\u56fe\u5f62 +sprites = \u7cbe\u7075 sprites.png = PNG sprites.gif = GIF sprites.avi = AVI @@ -75,6 +79,7 @@ sprites.svg = SVG sprites.canvas = HTML5 \u753b\u5e03 sprites.pdf = PDF sprites.bmp = BMP +sprites.swf = SWF buttons = \u6309\u94ae buttons.png = PNG @@ -85,9 +90,9 @@ fonts = \u5b57\u4f53 fonts.ttf = TTF fonts.woff = WOFF -zoom = Zoom +zoom = \u7f29\u653e zoom.percent = % zoom.invalid = \u65e0\u6548\u7f29\u653e\u503c\u3002 -symbolclass = \u7b26\u53f7 - Class \u6620\u5c04 +symbolclass = \u7b26\u53f7\u7c7b\u6620\u5c04 symbolclass.csv = CSV diff --git a/src/com/jpexs/decompiler/flash/gui/locales/FontEmbedDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/FontEmbedDialog_zh.properties index 561077fe1..f4c1753a0 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/FontEmbedDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/FontEmbedDialog_zh.properties @@ -13,14 +13,14 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -range.description = %name% (%available% \u53ef\u7528\uff0c\u5171 %total% \u4e2a) +range.description = %name% (%total%\u4e2a\u5b57\u7b26\u4e2d\u5b58\u5728%available%\u4e2a) dialog.title = \u5b57\u4f53\u5d4c\u5165 -label.individual = \u5355\u5b57\u7b26\uff1a -button.loadfont = \u4ece\u78c1\u76d8\u8f7d\u5165\u5b57\u4f53... -filter.ttf = TrueType \u5b57\u4f53\u6587\u4ef6 (*.ttf) +label.individual = \u5355\u4e2a\u5b57\u7b26: +button.loadfont = \u4ece\u786c\u76d8\u4e2d\u8f7d\u5165\u5b57\u4f53... +filter.ttf = TrueType\u5b57\u4f53\u6587\u4ef6(*.ttf) error.invalidfontfile = \u65e0\u6548\u7684\u5b57\u4f53\u6587\u4ef6 error.cannotreadfontfile = \u65e0\u6cd5\u8bfb\u53d6\u5b57\u4f53\u6587\u4ef6 installed = \u5df2\u5b89\u88c5: -ttffile.noselection = TTF \u6587\u4ef6: +ttffile.selection = TTF\u6587\u4ef6: %fontname% (%filename%) +allcharacters = \u6240\u6709\u5b57\u7b26(%available%\u4e2a\u5b57\u7b26) diff --git a/src/com/jpexs/decompiler/flash/gui/locales/GraphDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/GraphDialog_zh.properties index 8807ab58c..f7b6a97e9 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/GraphDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/GraphDialog_zh.properties @@ -14,3 +14,5 @@ # along with this program. If not, see . graph = \u56fe\u5f62 +graph.better.dot = \u63d0\u793a:\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84(5)\u4e2d\u914d\u7f6eGraphViz Dot\u53ef\u6267\u884c\u8def\u5f84\uff0c\u4ee5\u83b7\u5f97\u66f4\u597d\u7684\u56fe\u5f62\u65b9\u5f0f\uff01 +menu.copygraph.gv = \u5c06GraphViz\u6e90\u590d\u5236\u5230ClipBoard \ No newline at end of file diff --git a/src/com/jpexs/decompiler/flash/gui/locales/LoadFromCacheFrame_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/LoadFromCacheFrame_zh.properties index a1d00289e..8c10149e9 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/LoadFromCacheFrame_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/LoadFromCacheFrame_zh.properties @@ -17,5 +17,5 @@ button.open = \u6253\u5f00 button.save = \u4fdd\u5b58 button.refresh = \u5237\u65b0\u5217\u8868 dialog.title = \u641c\u7d22\u6d4f\u89c8\u5668\u7f13\u5b58 -supported.browsers = \u652f\u6301\u7684\u6d4f\u89c8\u5668\uff1a -info.closed = *\u8be5\u6d4f\u89c8\u5668\u5c06\u4f1a\u5728\u5173\u95ed\u65f6\u4fdd\u5b58\u6570\u636e\u5230\u78c1\u76d8\uff0c\u8bf7\u5148\u5173\u95ed\u6d4f\u89c8\u5668 +supported.browsers = \u652f\u6301\u7684\u6d4f\u89c8\u5668: +info.closed = *\u6b64\u6d4f\u89c8\u5668\u5728\u5e94\u7528\u7a0b\u5e8f\u9000\u51fa\u540e\u5c06\u6570\u636e\u4fdd\u5b58\u5230\u78c1\u76d8\u7f13\u5b58\u4e2d\uff0c\u56e0\u6b64\u8bf7\u5148\u5173\u95ed\u6d4f\u89c8\u5668\u3002 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/LoadFromMemoryFrame_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/LoadFromMemoryFrame_zh.properties index 2aed0c094..6f1572fbe 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/LoadFromMemoryFrame_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/LoadFromMemoryFrame_zh.properties @@ -17,8 +17,8 @@ dialog.title = \u5728\u5185\u5b58\u4e2d\u641c\u7d22 button.open = \u6253\u5f00 button.select = \u9009\u62e9 button.refresh = \u5237\u65b0\u5217\u8868 -noprocess = \u6ca1\u6709\u8fdb\u7a0b\u88ab\u9009\u5b9a -searching = \u641c\u7d22\u4e2d +noprocess = \u672a\u9009\u62e9\u8fdb\u7a0b +searching = \u641c\u7d22\u4e2d... swfitem = [SWF\u7248\u672c %version% \u5927\u5c0f %size%] notfound = \u627e\u4e0d\u5230SWF diff --git a/src/com/jpexs/decompiler/flash/gui/locales/LoadingDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/LoadingDialog_zh.properties index 17acf94f9..e1538723b 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/LoadingDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/LoadingDialog_zh.properties @@ -13,4 +13,4 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -loadingpleasewait = \u8f7d\u5165\u4e2d\uff0c\u8bf7\u7a0d\u7b49... +loadingpleasewait = \u52a0\u8f7d\u4e2d,\u8bf7\u7a0d\u5019... diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties index 811de2324..2934c890f 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties @@ -17,29 +17,29 @@ menu.file = \u6587\u4ef6 menu.file.open = \u6253\u5f00... menu.file.save = \u4fdd\u5b58 menu.file.saveas = \u53e6\u5b58\u4e3a... -menu.file.export.fla = \u5bfc\u51fa\u5230 FLA -menu.file.export.all = \u5bfc\u51fa\u6240\u6709 -menu.file.export.selection = \u5bfc\u51fa\u6240\u9009 +menu.file.export.fla = \u5bfc\u51fa\u5230FLA +menu.file.export.all = \u5bfc\u51fa\u6240\u6709\u63a7\u4ef6 +menu.file.export.selection = \u5bfc\u51fa\u5df2\u9009 menu.file.exit = \u9000\u51fa menu.tools = \u5de5\u5177 -menu.tools.searchas = \u5728\u6240\u6709AS\u4ee3\u7801\u4e2d\u641c\u7d22... +menu.tools.searchas = \u641c\u7d22\u6240\u6709AS\u4ee3\u7801... menu.tools.proxy = \u4ee3\u7406 menu.tools.deobfuscation = \u53cd\u6df7\u6dc6 -menu.tools.deobfuscation.pcode = P\u4ee3\u7801\u53cd\u6df7\u6dc6... +menu.tools.deobfuscation.pcode = P-code\u53cd\u6df7\u6dc6... menu.tools.deobfuscation.globalrename = \u5168\u5c40\u91cd\u547d\u540d\u6807\u8bc6\u7b26 menu.tools.deobfuscation.renameinvalid = \u91cd\u547d\u540d\u65e0\u6548\u6807\u8bc6\u7b26 menu.tools.gotoDocumentClass = \u8df3\u8f6c\u5230\u4e3b\u7c7b menu.settings = \u8bbe\u7f6e menu.settings.autodeobfuscation = \u81ea\u52a8\u53cd\u6df7\u6dc6 -menu.settings.internalflashviewer = \u4f7f\u7528\u5185\u90e8Flash\u64ad\u653e\u5668 +menu.settings.internalflashviewer = \u4f7f\u7528\u5185\u90e8FlashViewr menu.settings.parallelspeedup = \u591a\u7ebf\u7a0b\u52a0\u901f menu.settings.disabledecompilation = \u7981\u7528\u53cd\u7f16\u8bd1 (\u4ec5\u53cd\u6c47\u7f16) -menu.settings.addtocontextmenu = \u6dfb\u52a0FFDec\u5230SWF\u6587\u4ef6\u83dc\u5355 +menu.settings.addtocontextmenu = \u6dfb\u52a0FFDec\u5230SWF\u53f3\u952e\u83dc\u5355 menu.settings.language = \u66f4\u6539\u8bed\u8a00 -menu.settings.cacheOnDisk = \u4f7f\u7528\u786c\u76d8\u4f5c\u7f13\u5b58 -menu.settings.gotoMainClassOnStartup = \u52a0\u8f7d\u5b8c\u6bd5\u540e\u9ad8\u4eae\u4e3b\u7c7b +menu.settings.cacheOnDisk = \u4f7f\u7528\u786c\u76d8\u7f13\u5b58 +menu.settings.gotoMainClassOnStartup = \u542f\u52a8\u65f6\u9ad8\u4eae\u4e3b\u7c7b menu.help = \u5e2e\u52a9 menu.help.checkupdates = \u68c0\u67e5\u66f4\u65b0... @@ -54,17 +54,17 @@ button.edit = \u7f16\u8f91 button.cancel = \u53d6\u6d88 button.replace = \u66ff\u6362... -notavailonthisplatform = \u9884\u89c8\u8be5\u5bf9\u8c61\u662f\u5426\u53ef\u7528\u4e8e\u5f53\u524d\u5e73\u53f0. (\u4ec5Windows) +notavailonthisplatform = \u8be5\u5bf9\u8c61\u7684\u9884\u89c8\u5728\u8be5\u5e73\u53f0\u4e0a\u4e0d\u53ef\u7528(\u4ec5Windows) -swfpreview = SWF \u9884\u89c8 -swfpreview.internal = SWF \u9884\u89c8(\u4f7f\u7528\u5185\u7f6e\u64ad\u653e\u5668) +swfpreview = SWF\u9884\u89c8 +swfpreview.internal = SWF\u9884\u89c8(\u4f7f\u7528\u5185\u90e8\u64ad\u653e\u5668) parameters = \u53c2\u6570 rename.enternew = \u8bf7\u8f93\u5165\u65b0\u540d\u79f0: rename.finished.identifier = \u6807\u8bc6\u7b26\u5df2\u88ab\u91cd\u547d\u540d. -rename.finished.multiname = %count% \u4e2a multiname \u5df2\u88ab\u91cd\u547d\u540d. +rename.finished.multiname = \u5df2\u91cd\u547d\u540d%count%\u4e2a. node.texts = \u6587\u672c node.images = \u56fe\u50cf @@ -80,73 +80,73 @@ node.frames = \u5e27 node.scripts = \u811a\u672c message.warning = \u8b66\u544a -message.confirm.experimental = \u4e0b\u9762\u7684\u64cd\u4f5c\u53ef\u80fd\u4f1a\u635f\u574fSWF\u6587\u4ef6\uff0c\u5e76\u5c06\u5bfc\u81f4\u65e0\u6cd5\u64ad\u653e\u3002\r\n\u60a8\u5fc5\u987b\u6e05\u695a\u5730\u8ba4\u8bc6\u5230\u8fd9\u9879\u98ce\u9669\uff0c\u662f\u5426\u7ee7\u7eed\uff1f -message.confirm.parallel = \u591a\u7ebf\u7a0b\uff0c\u53ef\u4ee5\u52a0\u5feb\u52a0\u8f7d\u53ca\u53cd\u7f16\u8bd1\u901f\u5ea6\uff0c\u4f46\u4f1a\u6d88\u8017\u66f4\u591a\u7684\u5185\u5b58\u3002 +message.confirm.experimental = \u6b64\u64cd\u4f5c\u53ef\u80fd\u4f1a\u635f\u574fSWF\u6587\u4ef6\uff0c\u4ece\u800c\u5bfc\u81f4\u8be5\u6587\u4ef6\u65e0\u6cd5\u64ad\u653e\u3002\r\n\u60a8\u5c06\u4f1a\u627f\u62c5\u4e00\u5b9a\u7684\u98ce\u9669\uff0c\u786e\u5b9a\u8981\u7ee7\u7eed\u5417\uff1f +message.confirm.parallel = \u591a\u7ebf\u7a0b\u53ef\u4ee5\u52a0\u5feb\u52a0\u8f7d\u548c\u53cd\u7f16\u8bd1\u7684\u901f\u5ea6\uff0c\u4f46\u4f1a\u5360\u7528\u66f4\u591a\u5185\u5b58\u3002 message.confirm.on = \u60a8\u786e\u5b9a\u8981\u5f00\u542f\u5417\uff1f message.confirm.off = \u60a8\u786e\u5b9a\u8981\u5173\u95ed\u5417\uff1f message.confirm = \u786e\u8ba4 -message.confirm.autodeobfuscate = \u81ea\u52a8\u53cd\u6df7\u6dc6\u662f\u4e00\u79cd\u80fd\u53cd\u7f16\u8bd1\u88ab\u6df7\u6dc6\u4ee3\u7801\u7684\u529f\u80fd\u3002\r\n \u53cd\u6df7\u6dc6\u5c06\u5bfc\u81f4\u53cd\u7f16\u8bd1\u7684\u901f\u5ea6\u8f83\u6162\uff0c\u5e76\u53ef\u80fd\u4f1a\u7565\u8fc7\u51fa\u73b0\u7684\u201c\u6b7b\u4ee3\u7801\u201d\u3002\r\n \u5982\u679c\u60a8\u786e\u8ba4\u6587\u4ef6\u4e2d\u7684\u4ee3\u7801\u6ca1\u6709\u88ab\u6df7\u6dc6\uff0c\u5efa\u8bae\u60a8\u5173\u95ed\u8be5\u9009\u9879\u3002 +message.confirm.autodeobfuscate = \u81ea\u52a8\u53cd\u6df7\u6dc6\u662f\u53cd\u7f16\u8bd1\u6df7\u6dc6\u4ee3\u7801\u7684\u4e00\u79cd\u65b9\u6cd5\u3002\r\n\u53cd\u6df7\u6dc6\u4f1a\u5bfc\u81f4\u53cd\u7f16\u8bd1\u901f\u5ea6\u53d8\u6162\uff0c\u4f46\u53ef\u4ee5\u6d88\u9664\u4e00\u4e9b\u65e0\u6548\u4ee3\u7801\u3002\r\n\u5982\u679c\u672a\u6df7\u6dc6\u4ee3\u7801\uff0c\u5219\u6700\u597d\u5173\u95ed\u81ea\u52a8\u53cd\u6df7\u6dc6\u3002 message.parallel = \u591a\u7ebf\u7a0b message.trait.saved = \u5df2\u6210\u529f\u4fdd\u5b58Trait -message.constant.new.string = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u5b57\u7b26\u4e32 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.string.title = \u6dfb\u52a0\u5b57\u7b26\u4e32 -message.constant.new.integer = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.integer.title = \u6dfb\u52a0\u6574\u6570 -message.constant.new.unsignedinteger = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u65e0\u7b26\u53f7\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.unsignedinteger.title = \u6dfb\u52a0\u65e0\u7b26\u53f7\u6574\u6570 -message.constant.new.double = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u53cc\u5b57\u8282 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.double.title = \u6dfb\u52a0\u53cc\u5b57\u8282 +message.constant.new.string = \u5e38\u91cf\u8868\u4e2d\u4e0d\u5b58\u5728String "%value%"\uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.string.title = \u6dfb\u52a0String +message.constant.new.integer = \u5e38\u91cf\u8868\u4e2d\u4e0d\u5b58\u5728Integer "%value%"\uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.integer.title = \u6dfb\u52a0Integer +message.constant.new.unsignedinteger = \u5e38\u91cf\u8868\u4e2d\u4e0d\u5b58\u5728Unsigned integer "%value%"\uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.unsignedinteger.title = \u6dfb\u52a0Unsigned integer +message.constant.new.double = \u5e38\u91cf\u8868\u4e2d\u4e0d\u5b58\u5728Double "%value%"\uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.double.title = \u6dfb\u52a0Double -work.buffering = \u7f13\u51b2 +work.buffering = \u6b63\u5728\u7f13\u51b2 work.waitingfordissasembly = \u7b49\u5f85\u53cd\u6c47\u7f16 work.gettinghilights = \u83b7\u53d6\u9ad8\u4eae work.disassembling = \u53cd\u6c47\u7f16 -work.exporting = \u5bfc\u51fa\u4e2d -work.searching = \u641c\u7d22\u4e2d +work.exporting = \u6b63\u5728\u5bfc\u51fa +work.searching = \u6b63\u5728\u641c\u7d22 work.renaming = \u91cd\u547d\u540d\u4e2d -work.exporting.fla = \u5bfc\u51fa FLA \u4e2d +work.exporting.fla = \u6b63\u5728\u5bfc\u51faFLA work.renaming.identifiers = \u91cd\u547d\u540d\u6807\u8bc6\u7b26\u4e2d -work.deobfuscating = \u53cd\u6df7\u6dc6\u4e2d -work.decompiling = \u53cd\u7f16\u8bd1\u4e2d +work.deobfuscating = \u6b63\u5728\u53cd\u6df7\u6dc6 +work.decompiling = \u6b63\u5728\u53cd\u7f16\u8bd1 work.gettingvariables = \u83b7\u53d6\u53d8\u91cf -work.reading.swf = \u8bfb\u5165 SWF \u4e2d -work.creatingwindow = \u521b\u5efa\u7a97\u4f53 -work.buildingscripttree = \u5efa\u7acb\u811a\u672c\u6811 +work.reading.swf = \u8bfb\u53d6SWF +work.creatingwindow = \u6b63\u5728\u521b\u5efa\u7a97\u53e3 +work.buildingscripttree = \u6b63\u5728\u6784\u5efa\u811a\u672c\u6811 work.deobfuscating.complete = \u53cd\u6df7\u6dc6\u5b8c\u6210 -message.search.notfound = \u6ca1\u6709\u627e\u5230\u5b57\u7b26\u4e32 "%searchtext%" . -message.search.notfound.title = \u6ca1\u6709\u627e\u5230 +message.search.notfound = \u627e\u4e0d\u5230"%searchtext%" . +message.search.notfound.title = \u65e0\u641c\u7d22\u7ed3\u679c -message.rename.notfound.multiname = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230multiname -message.rename.notfound.identifier = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230\u6807\u8bc6\u7b26 -message.rename.notfound.title = \u6ca1\u6709\u627e\u5230 -message.rename.renamed = \u6807\u8bc6\u7b26\u91cd\u547d\u540d\u6570\uff1a %count% +message.rename.notfound.multiname = \u5728\u5149\u6807\u4e0b\u672a\u627e\u5230multiname +message.rename.notfound.identifier = \u5728\u5149\u6807\u4e0b\u672a\u627e\u5230\u6807\u8bc6\u7b26 +message.rename.notfound.title = \u65e0\u641c\u7d22\u7ed3\u679c +message.rename.renamed = %count%\u4e2a\u6807\u8bc6\u7b26\u5df2\u91cd\u547d\u540d -filter.images = \u56fe\u7247 (%extensions%) -filter.fla = %version% \u6587\u4ef6 (*.fla) -filter.xfl = %version% \u672a\u538b\u7f29\u6587\u4ef6 (*.xfl) -filter.swf = SWF \u6587\u4ef6 (*.swf) +filter.images = \u56fe\u7247(%extensions%) +filter.fla = %version%\u6587\u6863(*.fla) +filter.xfl = %version%\u672a\u538b\u7f29\u7684\u6587\u6863(*.xfl) +filter.swf = SWF\u6587\u4ef6(*.swf) error = \u9519\u8bef -error.image.invalid = \u65e0\u6548\u56fe\u7247. +error.image.invalid = \u65e0\u6548\u7684\u56fe\u50cf\u3002 -error.text.invalid = \u65e0\u6548\u6587\u672c: %text% \u5728 %line% \u884c +error.text.invalid = \u65e0\u6548\u7684\u6587\u672c: \u7b2c%line%\u884c\u7684%text% error.file.save = \u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6 -error.file.write = \u65e0\u6cd5\u5199\u6587\u4ef6 -error.export = \u5bfc\u51fa\u65f6\u9519\u8bef +error.file.write = \u65e0\u6cd5\u5199\u5165\u6587\u4ef6 +error.export = \u5bfc\u51fa\u65f6\u51fa\u73b0\u9519\u8bef export.select.directory = \u8bf7\u9009\u62e9\u5bfc\u51fa\u76ee\u5f55 -export.finishedin = \u5bfc\u51fa\u5b8c\u6210\uff0c\u8017\u8d39\u65f6\u95f4 %time% +export.finishedin = \u5bfc\u51fa\u5b8c\u6210\uff0c\u8017\u65f6%time% update.check.title = \u786e\u8ba4\u66f4\u65b0 update.check.nonewversion = \u65e0\u53ef\u7528\u66f4\u65b0. message.helpus = \u8bf7\u8bbf\u95ee\r\n%url%\r\n\u83b7\u5f97\u76f8\u5173\u7ec6\u8282. -message.homepage = \u8bbf\u95ee\u4e3b\u9875\uff1a \r\n%url% +message.homepage = \u8bbf\u95ee\u4e3b\u9875:\r\n%url% proxy = \u4ee3\u7406 proxy.start = \u5f00\u59cb\u4ee3\u7406 @@ -154,35 +154,37 @@ proxy.stop = \u505c\u6b62\u4ee3\u7406 proxy.show = \u663e\u793a\u4ee3\u7406 exit = \u9000\u51fa -panel.disassembled = P\u4ee3\u7801\u8d44\u6e90 -panel.decompiled = AS\u8d44\u6e90 +panel.disassembled = P-code\u8d44\u6e90 +panel.decompiled = AS\u6e90\u4ee3\u7801 -search.info = \u641c\u7d22 "%text%" : +search.info = \u641c\u7d22"%text%": search.script = \u811a\u672c constants = \u5e38\u91cf -traits = Traits +traits = \u7279\u5f81 -pleasewait = \u8bf7\u7a0d\u7b49 +pleasewait = \u8bf7\u7a0d\u5019 +#DEPRECATED - see abc.detail.trait.* abc.detail.methodtrait = Method/Getter/Setter Trait abc.detail.unsupported = - +#DEPRECATED - see abc.detail.trait.* abc.detail.slotconsttrait = Slot/Const Trait abc.detail.traitname = \u540d\u79f0: abc.detail.body.params.maxstack = \u6700\u5927\u5806\u6808: -abc.detail.body.params.localregcount = \u672c\u5730\u5bc4\u5b58\u5668\u8ba1\u6570: -abc.detail.body.params.minscope = \u6700\u5c0f\u8303\u56f4\u6df1\u5ea6: -abc.detail.body.params.maxscope = \u6700\u5927\u8303\u56f4\u6df1\u5ea6: -abc.detail.body.params.autofill = \u4fdd\u5b58\u65f6\u4ee3\u7801\u81ea\u52a8\u586b\u5145 (\u5168\u5c40\u8bbe\u7f6e) -abc.detail.body.params.autofill.experimental = ...\u5b9e\u9a8c\u7684 +abc.detail.body.params.localregcount = \u672c\u5730\u5bc4\u5b58\u5668\u6570: +abc.detail.body.params.minscope = \u6700\u5c0f\u6df1\u5ea6\u8303\u56f4: +abc.detail.body.params.maxscope = \u6700\u5927\u6df1\u5ea6\u8303\u56f4: +abc.detail.body.params.autofill = \u4fdd\u5b58\u65f6\u81ea\u52a8\u5b8c\u6210\u4ee3\u7801(\u5168\u5c40\u8bbe\u7f6e) +abc.detail.body.params.autofill.experimental = ...\u5b9e\u9a8c\u6027 abc.detail.methodinfo.methodindex = \u65b9\u6cd5\u7d22\u5f15: abc.detail.methodinfo.parameters = \u53c2\u6570: abc.detail.methodinfo.returnvalue = \u8fd4\u56de\u503c\u7c7b\u578b: -error.methodinfo.params = \u65b9\u6cd5\u4fe1\u606f\u7684\u53c2\u6570\u9519\u8bef -error.methodinfo.returnvalue = \u65b9\u6cd5\u4fe1\u606f\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u9519\u8bef +error.methodinfo.params = \u65b9\u6cd5\u4fe1\u606f\u53c2\u6570\u9519\u8bef +error.methodinfo.returnvalue = \u65b9\u6cd5\u4fe1\u606f\u8fd4\u56de\u503c\u7c7b\u578b\u9519\u8bef abc.detail.methodinfo = \u65b9\u6cd5\u4fe1\u606f abc.detail.body.code = \u65b9\u6cd5\u4e3b\u4f53\u4ee3\u7801 @@ -190,21 +192,21 @@ abc.detail.body.params = \u65b9\u6cd5\u4e3b\u4f53\u53c2\u6570 abc.detail.slotconst.typevalue = \u7c7b\u578b\u548c\u503c: -error.slotconst.typevalue = SlotConst\u7c7b\u578b\u503c\u9519\u8bef +error.slotconst.typevalue = \u63d2\u69fd\u5e38\u91cf\u7c7b\u578b\u503c\u9519\u8bef -message.autofill.failed = \u65e0\u6cd5\u81ea\u52a8\u83b7\u5f97\u4e3b\u4f53\u53c2\u6570\u72b6\u6001\u4ee3\u7801\u3002\r\n\u8bf7\u5173\u95ed\u81ea\u52a8\u586b\u5145\u529f\u80fd\u540e\u518d\u8bd5\u4e00\u6b21. -info.selecttrait = \u8bf7\u9009\u62e9\u7c7b\uff0c\u7136\u540e\u70b9\u51fb\u8fdb\u884cActionScript\u6e90\u7684\u7f16\u8f91. +message.autofill.failed = \u65e0\u6cd5\u81ea\u52a8\u83b7\u5f97\u4e3b\u4f53\u53c2\u6570\u72b6\u6001\u4ee3\u7801\u3002\r\n\u8bf7\u5173\u95ed\u81ea\u52a8\u5b8c\u6210\u529f\u80fd\u540e\u518d\u8bd5\u4e00\u6b21\u3002 +info.selecttrait = \u9009\u62e9\u7c7b\uff0c\u7136\u540e\u5728AS\u6e90\u4ee3\u7801\u4e2d\u5355\u51fb\u4e00\u4e2a\u7279\u5f81\u4ee5\u5bf9\u5176\u8fdb\u884c\u7f16\u8f91\u3002 button.viewgraph = \u6d4f\u89c8\u56fe\u5f62 button.viewhex = \u6d4f\u89c8\u5341\u516d\u8fdb\u5236 -action.edit.experimental = (\u5b9e\u9a8c\u7684) +action.edit.experimental = (\u5b9e\u9a8c\u6027) -message.action.saved = \u4fdd\u5b58\u4ee3\u7801\u6210\u529f +message.action.saved = \u4ee3\u7801\u6210\u529f\u4fdd\u5b58 -error.action.save = %error% \u5728 %line% \u884c +error.action.save = \u7b2c%line%\u884c\u51fa\u9519:\n%error% -message.confirm.remove = \u60a8\u786e\u5b9a\u8981\u5220\u9664 %item% \n \u4ee5\u53ca\u6240\u6709\u4f9d\u8d56\u5b83\u7684\u5bf9\u8c61\u5417\uff1f +message.confirm.remove = \u60a8\u786e\u5b9a\u8981\u5220\u9664%item%\n\u548c\u6240\u6709\u4f9d\u8d56\u5b83\u7684\u5bf9\u8c61\u5417\uff1f #after version 1.6.5u1: @@ -216,9 +218,9 @@ font.isbold = \u52a0\u7c97: font.isitalic = \u659c\u4f53: font.ascent = \u4e0a\u6807: font.descent = \u4e0b\u6807: -font.leading = Leading: -font.characters = \u5b57\u7b26\u96c6: -font.characters.add = \u6dfb\u52a0\u5b57\u7b26\u96c6: +font.leading = \u884c\u95f4\u8ddd: +font.characters = \u5b57\u7b26: +font.characters.add = \u6dfb\u52a0\u5b57\u7b26: value.unknown = ? yes = \u662f @@ -245,8 +247,8 @@ FileChooser.listViewButtonToolTipText = \u5217\u8868 FileChooser.listViewButtonAccessibleName = \u5217\u8868 FileChooser.detailsViewButtonToolTipText = \u8be6\u7ec6\u4fe1\u606f FileChooser.detailsViewButtonAccessibleName = \u8be6\u7ec6\u4fe1\u606f -FileChooser.upFolderToolTipText = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.upFolderAccessibleName = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.upFolderToolTipText = \u8fd4\u56de\u4e0a\u7ea7 +FileChooser.upFolderAccessibleName = \u8fd4\u56de\u4e0a\u7ea7 FileChooser.homeFolderToolTipText = \u4e3b\u76ee\u5f55 FileChooser.homeFolderAccessibleName = \u4e3b\u76ee\u5f55 FileChooser.fileNameHeaderText = \u540d\u79f0 @@ -257,19 +259,19 @@ FileChooser.fileAttrHeaderText = \u5c5e\u6027 FileChooser.openDialogTitleText = \u6253\u5f00 FileChooser.directoryDescriptionText = \u76ee\u5f55 FileChooser.directoryOpenButtonText = \u6253\u5f00 -FileChooser.directoryOpenButtonToolTipText = \u6253\u5f00\u9009\u5b9a\u7684\u76ee\u5f55 +FileChooser.directoryOpenButtonToolTipText = \u6253\u5f00\u6240\u9009\u76ee\u5f55 FileChooser.fileDescriptionText = \u901a\u7528\u6587\u4ef6 FileChooser.helpButtonText = \u5e2e\u52a9 FileChooser.helpButtonToolTipText = \u6587\u4ef6\u9009\u62e9\u5668\u5e2e\u52a9 FileChooser.newFolderAccessibleName = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.newFolderErrorText = \u5efa\u7acb\u65b0\u6587\u4ef6\u5939\u65f6\u51fa\u9519 +FileChooser.newFolderErrorText = \u65b0\u5efa\u6587\u4ef6\u5939\u65f6\u51fa\u9519 FileChooser.newFolderToolTipText = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.other.newFolder = \u65b0\u6587\u4ef6\u5939 -FileChooser.other.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939.{0} -FileChooser.win32.newFolder = \u65b0\u6587\u4ef6\u5939 -FileChooser.win32.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939 ({0}) +FileChooser.other.newFolder = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.other.newFolder.subsequent = \u65b0\u5efa\u6587\u4ef6\u5939.{0} +FileChooser.win32.newFolder = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.win32.newFolder.subsequent = \u65b0\u5efa\u6587\u4ef6\u5939({0}) FileChooser.saveButtonText = \u4fdd\u5b58 -FileChooser.saveButtonToolTipText = \u4fdd\u5b58\u9009\u5b9a\u6587\u4ef6 +FileChooser.saveButtonToolTipText = \u4fdd\u5b58\u6240\u9009\u6587\u4ef6 FileChooser.saveDialogTitleText = \u4fdd\u5b58 FileChooser.saveInLabelText = \u4fdd\u5b58\u5230: FileChooser.updateButtonText = \u5237\u65b0 @@ -280,26 +282,26 @@ FileChooser.updateButtonToolTipText = \u5237\u65b0\u76ee\u5f55\u5217\u8868 FileChooser.detailsViewActionLabel.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f FileChooser.detailsViewButtonToolTip.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f FileChooser.fileAttrHeader.textAndMnemonic = \u5c5e\u6027 -FileChooser.fileDateHeader.textAndMnemonic = Modified +FileChooser.fileDateHeader.textAndMnemonic = \u5df2\u4fee\u6539 FileChooser.fileNameHeader.textAndMnemonic = \u540d\u79f0 FileChooser.fileNameLabel.textAndMnemonic = \u6587\u4ef6\u540d: FileChooser.fileSizeHeader.textAndMnemonic = \u5927\u5c0f FileChooser.fileTypeHeader.textAndMnemonic = \u7c7b\u578b FileChooser.filesOfTypeLabel.textAndMnemonic = \u6587\u4ef6\u7c7b\u578b: -FileChooser.folderNameLabel.textAndMnemonic = \u76ee\u5f55\u540d: +FileChooser.folderNameLabel.textAndMnemonic = \u6587\u4ef6\u5939\u540d\u79f0: FileChooser.homeFolderToolTip.textAndMnemonic = \u4e3b\u76ee\u5f55 FileChooser.listViewActionLabel.textAndMnemonic = \u5217\u8868 FileChooser.listViewButtonToolTip.textAndMnemonic = \u5217\u8868 FileChooser.lookInLabel.textAndMnemonic = \u6d4f\u89c8: -FileChooser.newFolderActionLabel.textAndMnemonic = \u65b0\u6587\u4ef6\u5939 +FileChooser.newFolderActionLabel.textAndMnemonic = \u65b0\u5efa\u6587\u4ef6\u5939 FileChooser.newFolderToolTip.textAndMnemonic = \u65b0\u5efa\u6587\u4ef6\u5939 FileChooser.refreshActionLabel.textAndMnemonic = \u5237\u65b0 FileChooser.saveInLabel.textAndMnemonic = \u4fdd\u5b58\u5230: -FileChooser.upFolderToolTip.textAndMnemonic = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.viewMenuButtonAccessibleName = \u6d4f\u89c8\u83dc\u5355 -FileChooser.viewMenuButtonToolTipText = \u6d4f\u89c8\u83dc\u5355 -FileChooser.viewMenuLabel.textAndMnemonic = \u6d4f\u89c8 -FileChooser.newFolderActionLabelText = \u65b0\u6587\u4ef6\u5939 +FileChooser.upFolderToolTip.textAndMnemonic = \u8fd4\u56de\u4e0a\u7ea7 +FileChooser.viewMenuButtonAccessibleName = \u89c6\u56fe\u83dc\u5355 +FileChooser.viewMenuButtonToolTipText = \u89c6\u56fe\u83dc\u5355 +FileChooser.viewMenuLabel.textAndMnemonic = \u89c6\u56fe +FileChooser.newFolderActionLabelText = \u65b0\u5efa\u6587\u4ef6\u5939 FileChooser.listViewActionLabelText = \u5217\u8868 FileChooser.detailsViewActionLabelText = \u8be6\u7ec6\u4fe1\u606f FileChooser.refreshActionLabelText = \u5237\u65b0 @@ -308,9 +310,9 @@ FileChooser.viewMenuLabelText = \u6d4f\u89c8 FileChooser.fileSizeKiloBytes = {0} KB FileChooser.fileSizeMegaBytes = {0} MB FileChooser.fileSizeGigaBytes = {0} GB -FileChooser.folderNameLabelText = \u76ee\u5f55\u540d: +FileChooser.folderNameLabelText = \u6587\u4ef6\u5939\u540d\u79f0: -error.occured = \u53d1\u751f\u9519\u8bef : %error% +error.occured = \u53d1\u751f\u9519\u8bef: %error% button.abort = \u7ec8\u6b62 button.retry = \u91cd\u8bd5 button.ignore = \u5ffd\u7565 @@ -320,23 +322,23 @@ font.source = \u6e90\u5b57\u4f53: #after version 1.6.7: menu.export = \u5bfc\u51fa -menu.general = \u901a\u7528 +menu.general = \u5e38\u89c4 menu.language = \u8bed\u8a00 startup.welcometo = \u6b22\u8fce\u4f7f\u7528 -startup.selectopen = \u4f7f\u7528\u4e0a\u65b9\u9762\u677f\u7684\u6253\u5f00\u56fe\u6807\u6216\u8005\u62d6\u52a8SWF\u6587\u4ef6\u5230\u5f53\u524d\u7a97\u53e3\u4ee5\u5f00\u59cb\u3002 +startup.selectopen = \u5355\u51fb\u9876\u90e8\u9762\u677f\u4e0a\u7684"\u6253\u5f00"\u56fe\u6807\u6216\u5c06SWF\u6587\u4ef6\u62d6\u5230\u8be5\u7a97\u53e3\u4e2d\u4ee5\u542f\u52a8\u3002 error.font.nocharacter = \u9009\u62e9\u7684\u6e90\u5b57\u4f53\u4e0d\u5305\u542b\u5b57\u7b26 "%char%". -warning.initializers = \u9759\u6001\u5b57\u6bb5\u548c\u5e38\u91cf\u901a\u5e38\u5728\u521d\u59cb\u5316\u65f6\u88ab\u521d\u59cb\u5316\uff0c\n\u5728\u6b64\u7f16\u8f91\u901a\u5e38\u662f\u4e0d\u591f\u7684\uff01 +warning.initializers = \u9759\u6001\u5b57\u6bb5\u548c\u5e38\u91cf\u901a\u5e38\u5728\u5b9a\u4e49\u88ab\u521d\u59cb\u5316\uff0c\n\u4ec5\u5728\u6b64\u7f16\u8f91\u503c\u901a\u5e38\u662f\u4e0d\u591f\u7684\uff01 #after version 1.7.0u1: menu.tools.searchMemory = \u641c\u7d22\u5185\u5b58\u4e2d\u7684SWF -menu.file.reload = \u91cd\u8f7d -message.confirm.reload = \u8be5\u52a8\u4f5c\u5c06\u4f1a\u4e22\u5931\u6240\u6709\u672a\u4fdd\u5b58\u7684\u6539\u52a8\uff0c\u5e76\u91cd\u65b0\u52a0\u8f7d\u5f53\u524dSWF\u6587\u4ef6\u3002\n\u662f\u5426\u7ee7\u7eed\uff1f +menu.file.reload = \u91cd\u65b0\u52a0\u8f7d +message.confirm.reload = \u6b64\u64cd\u4f5c\u5c06\u53d6\u6d88\u6240\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u5e76\u91cd\u65b0\u52a0\u8f7dSWF\u6587\u4ef6\u3002\n\u662f\u5426\u7ee7\u7eed\uff1f -dialog.selectbkcolor.title = \u8bf7\u9009\u62e9SWF\u663e\u793a\u7684\u80cc\u666f\u8272 +dialog.selectbkcolor.title = \u9009\u62e9SWF\u663e\u793a\u7684\u80cc\u666f\u8272 button.selectbkcolor.hint = \u9009\u62e9\u80cc\u666f\u8272 ColorChooser.okText = \u786e\u5b9a @@ -353,32 +355,32 @@ preview.play = \u64ad\u653e preview.pause = \u6682\u505c preview.stop = \u505c\u6b62 -message.confirm.removemultiple = \u60a8\u786e\u5b9a\u8981\u79fb\u9664 %count% \u4e2a\u9879\u76ee\uff0c\n\u4ee5\u53ca\u5176\u6240\u6709\u7684\u4f9d\u8d56\u5bf9\u8c61\u5417\uff1f +message.confirm.removemultiple = \u60a8\u786e\u5b9a\u8981\u5220\u9664%count%\u4e2a\u9879\u76ee\n\u548c\u6240\u6709\u4f9d\u8d56\u4e8e\u6b64\u7684\u5bf9\u8c61\u5417\uff1f menu.tools.searchCache = \u641c\u7d22\u6d4f\u89c8\u5668\u7f13\u5b58 #after version 1.7.2u2 -error.trait.exists = Trait \u6240\u7528\u7684\u540d\u79f0 \u201c%name%\u201d\u5df2\u5b58\u5728\u3002 -button.addtrait = \u6dfb\u52a0 Trait +error.trait.exists = \u540d\u79f0\u4e3a"%name%"\u7684\u7279\u5f81\u5df2\u7ecf\u5b58\u5728 +button.addtrait = \u6dfb\u52a0\u7279\u5f81 button.font.embed = \u5d4c\u5165... button.yes.all = \u5168\u662f button.no.all = \u5168\u5426 -message.font.add.exists = \u5b57\u7b26 %char% \u5df2\u5b58\u5728\u3002\n\u60a8\u662f\u5426\u8981\u66ff\u6362\uff1f +message.font.add.exists = \u5b57\u7b26"%char%"\u5df2\u5b58\u5728\u4e8e\u6b64\u5b57\u4f53\u6807\u7b7e\u3002\n\u662f\u5426\u8981\u66ff\u6362\u5b83\uff1f -filter.gfx = ScaleForm GFx \u6587\u4ef6 (*.gfx) -filter.supported = \u6240\u6709\u652f\u6301\u6587\u4ef6\u7c7b\u578b +filter.gfx = ScaleForm GFx\u6587\u4ef6(*.gfx) +filter.supported = \u6240\u6709\u652f\u6301\u7684\u6587\u4ef6\u7c7b\u578b work.canceled = \u5df2\u53d6\u6d88 -work.restoringControlFlow = \u6062\u590d\u63a7\u5236\u5668\u6d41\u7a0b +work.restoringControlFlow = \u6062\u590d\u63a7\u5236\u6d41 menu.advancedsettings.advancedsettings = \u9ad8\u7ea7\u8bbe\u7f6e menu.recentFiles = \u6700\u8fd1\u6587\u4ef6 #after version 1.7.4 -work.restoringControlFlow.complete = \u63a7\u5236\u5668\u6d41\u7a0b\u5df2\u6062\u590d -message.confirm.recentFileNotFound = \u627e\u4e0d\u5230\u6587\u4ef6\u3002\u662f\u5426\u4ece\u6700\u8fd1\u6587\u4ef6\u5217\u8868\u79fb\u9664\uff1f -contextmenu.closeSwf = \u5173\u95ed SWF +work.restoringControlFlow.complete = \u63a7\u5236\u6d41\u5df2\u8fd8\u539f +message.confirm.recentFileNotFound = \u627e\u4e0d\u5230\u6b64\u6587\u4ef6\uff0c\u8981\u4ece\u6700\u8fd1\u7684\u6587\u4ef6\u5217\u8868\u4e2d\u5220\u9664\u5b83\u5417\uff1f +contextmenu.closeSwf = \u5173\u95edSWF menu.settings.autoRenameIdentifiers = \u81ea\u52a8\u91cd\u547d\u540d\u6807\u8bc6 -menu.file.saveasexe = \u53e6\u5b58\u4e3aexe... +menu.file.saveasexe = \u53e6\u5b58\u4e3aExe... filter.exe = \u53ef\u6267\u884c\u6587\u4ef6(*.exe) #after version 1.8.0 @@ -393,23 +395,23 @@ fontName.name = \u5b57\u4f53\u663e\u793a\u540d\u79f0: fontName.copyright = \u5b57\u4f53\u7248\u6743: button.preview = \u9884\u89c8 button.reset = \u91cd\u7f6e -errors.info = \u6709\u4fe1\u606f\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 -errors.warning = \u6709\u8b66\u544a\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 +errors.info = \u65e5\u5fd7\u4e2d\u6709INFORMATIONS\uff0c\u70b9\u51fb\u67e5\u770b\u3002 +errors.warning = \u65e5\u5fd7\u4e2d\u6709\u8b66\u544a\uff0c\u70b9\u51fb\u67e5\u770b\u3002 decompilationError = \u53cd\u7f16\u8bd1\u9519\u8bef -disassemblingProgress.toString = \u5230\u5b57\u7b26\u4e32 +disassemblingProgress.toString = \u8f6c\u4e3a\u5b57\u7b26\u4e32 disassemblingProgress.reading = \u8bfb\u53d6\u4e2d -disassemblingProgress.deobfuscating = \u6df7\u6dc6 +disassemblingProgress.deobfuscating = \u53cd\u6df7\u6dc6 -contextmenu.moveTag = \u79fb\u52a8\u6807\u7b7e\u5230 +contextmenu.moveTag = \u5c06\u6807\u7b7e\u79fb\u81f3 -filter.swc = SWC\u7ec4\u4ef6\u6587\u4ef6 (*.swc) -filter.zip = ZIP\u538b\u7f29\u6587\u4ef6 (*.zip) -filter.binary = \u4e8c\u8fdb\u5236\u67e5\u627e - \u6240\u6709\u6587\u4ef6 (*.*) +filter.swc = SWC\u7ec4\u4ef6\u6587\u4ef6(*.swc) +filter.zip = ZIP\u538b\u7f29\u6587\u4ef6(*.zip) +filter.binary = \u4e8c\u8fdb\u5236\u67e5\u627e - \u6240\u6709\u6587\u4ef6(*.*) open.error = \u9519\u8bef -open.error.fileNotFound = \u672a\u627e\u5230\u6587\u4ef6 +open.error.fileNotFound = \u627e\u4e0d\u5230\u6587\u4ef6 open.error.cannotOpen = \u65e0\u6cd5\u6253\u5f00\u6587\u4ef6 node.others = \u5176\u4ed6 @@ -421,43 +423,43 @@ menu.tools.search = \u6587\u672c\u67e5\u627e menu.tools.timeline = \u65f6\u95f4\u8f74 dialog.selectcolor.title = \u9009\u62e9\u989c\u8272 -button.selectcolor.hint = \u70b9\u51fb\u9009\u62e9\u989c\u8272 +button.selectcolor.hint = \u5355\u51fb\u4ee5\u9009\u62e9\u989c\u8272 #default item name, will be used in following sentences generictag.array.item = \u9879\u76ee -generictag.array.insertbeginning = \u5728\u4e00\u5f00\u59cb\u63d2\u5165 %item% -generictag.array.insertbefore = \u63d2\u5165 %item% \u4e4b\u524d -generictag.array.remove = \u79fb\u9664 %item% -generictag.array.insertafter = \u63d2\u5165 %item% \u4e4b\u540e -generictag.array.insertend = \u5728\u7ed3\u675f\u63d2\u5165 %item% +generictag.array.insertbeginning = \u5728\u5f00\u5934\u63d2\u5165%item% +generictag.array.insertbefore = \u63d2\u5165\u5230\u6b64%item%\u4e4b\u524d +generictag.array.remove = \u79fb\u9664\u6b64%item% +generictag.array.insertafter = \u63d2\u5165\u5230\u6b64%item%\u4e4b\u540e +generictag.array.insertend = \u5728\u6700\u540e\u63d2\u5165%item% #after version 2.0.0 contextmenu.expandAll = \u5168\u90e8\u5c55\u5f00 -filter.sounds = \u652f\u6301\u7684\u58f0\u97f3\u683c\u5f0f (*.wav, *.mp3) -filter.sounds.wav = Wave\u6587\u4ef6\u683c\u5f0f (*.wav) -filter.sounds.mp3 = MP3\u538b\u7f29\u683c\u5f0f (*.mp3) +filter.sounds = \u652f\u6301\u7684\u58f0\u97f3\u683c\u5f0f(*.wav, *.mp3) +filter.sounds.wav = Wave\u6587\u4ef6\u683c\u5f0f(*.wav) +filter.sounds.mp3 = MP3\u538b\u7f29\u683c\u5f0f(*.mp3) -error.sound.invalid = \u65e0\u6548\u6587\u4ef6\u3002 +error.sound.invalid = \u65e0\u6548\u7684\u58f0\u97f3\u3002 button.prev = \u4e0a\u4e00\u9875 button.next = \u4e0b\u4e00\u9875 #after version 2.1.0 message.action.playerglobal.title = \u9700\u8981PlayerGlobal\u652f\u6301\u5e93 -message.action.playerglobal.needed = \u82e5\u8981\u76f4\u63a5\u7f16\u8f91AS3\u811a\u672c, \u9700\u8981\u4eceAdobe\u4e3b\u9875\u4e0b\u8f7d\u4e00\u4e2a"PlayerGlobal.swc"\u7684\u652f\u6301\u5e93\u3002\r\n%adobehomepage%\r\n\u70b9\u51fb\u201c\u786e\u5b9a\u201d\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\u3002 -message.action.playerglobal.place = \u4e0b\u8f7d\u652f\u6301\u5e93PlayerGlobal(.swc),\u5e76\u653e\u5165\u8be5\u6587\u4ef6\u5939\u3002\r\n%libpath%\r\n \u70b9\u51fb\u201c\u786e\u5b9a\u201d\u7ee7\u7eed\u3002 +message.action.playerglobal.needed = \u82e5\u8981\u76f4\u63a5\u7f16\u8f91AS3\u811a\u672c, \u9700\u8981\u4eceAdobe\u4e3b\u9875\u4e0b\u8f7d"PlayerGlobal.swc"\u7684\u652f\u6301\u5e93\u3002\r\n%adobehomepage%\r\n\u70b9\u51fb"\u786e\u5b9a"\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\u3002 +message.action.playerglobal.place = \u4e0b\u8f7d\u540d\u4e3aPlayerGlobal(.swc)\u7684\u5e93\uff0c\u5e76\u5c06\u5176\u653e\u7f6e\u5230\u76ee\u5f55\r\n%libpath%\r\n\u4e2d\uff0c\u70b9\u51fb"\u786e\u5b9a"\u7ee7\u7eed\u3002 -message.confirm.experimental.function = \u6b64\u529f\u80fd\u4e3a\u5b9e\u9a8c\u6027\uff01\u8fd9\u610f\u5473\u7740\u7ed3\u679c\u5e76\u4e0d\u53ef\u9760\u5e76\u4e14\u4fdd\u5b58\u4e4b\u540e\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002 +message.confirm.experimental.function = \u6b64\u529f\u80fd\u662f\u5b9e\u9a8c\u6027\u7684\uff01\u8fd9\u610f\u5473\u7740\u7ed3\u679c\u5e76\u4e0d\u53ef\u9760\u5e76\u4e14\u4fdd\u5b58\u540e\u53ef\u80fd\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002 message.confirm.donotshowagain = \u4e0d\u518d\u663e\u793a menu.import = \u5bfc\u5165 menu.file.import.text = \u5bfc\u5165\u6587\u672c import.select.directory = \u9009\u62e9\u5bfc\u5165\u76ee\u5f55 -error.text.import = \u5bfc\u5165\u6587\u672c\u9519\u8bef\u3002\u7ee7\u7eed\uff1f +error.text.import = \u6587\u672c\u5bfc\u5165\u65f6\u51fa\u9519\uff0c\u662f\u5426\u7ee7\u7eed\uff1f #after version 2.1.1 -contextmenu.removeWithDependencies = \u79fb\u9664\u4f9d\u8d56 +contextmenu.removeWithDependencies = \u5220\u9664\u5e76\u79fb\u9664\u4f9d\u8d56 abc.action.find-usages = \u67e5\u627e\u5f15\u7528 abc.action.find-declaration = \u67e5\u627e\u58f0\u660e @@ -465,31 +467,31 @@ abc.action.find-declaration = \u67e5\u627e\u58f0\u660e contextmenu.rawEdit = RAW\u7f16\u8f91 contextmenu.jumpToCharacter = \u8f6c\u5230\u5b57\u7b26 -menu.settings.dumpView = \u67e5\u770b\u8f6c\u50a8 +menu.settings.dumpView = \u8f6c\u50a8\u89c6\u56fe menu.view = \u67e5\u770b menu.file.view.resources = \u8d44\u6e90 -menu.file.view.hex = \u4e8c\u8fdb\u5236 +menu.file.view.hex = \u5341\u516d\u8fdb\u5236\u8f6c\u50a8 -node.header = \u6587\u4ef6\u5934 +node.header = \u6587\u4ef6\u5934\u4fe1\u606f -header.signature = \u6587\u4ef6\u6807\u8bc6: -header.compression = \u538b\u7f29\u6a21\u5f0f: +header.signature = \u7b7e\u540d: +header.compression = \u538b\u7f29: header.compression.lzma = LZMA header.compression.zlib = ZLIB header.compression.none = \u65e0\u538b\u7f29 header.version = SWF\u7248\u672c: header.gfx = GFX: header.filesize = \u6587\u4ef6\u5927\u5c0f -header.framerate = \u5e27\u7387: +header.framerate = \u5e27\u901f: header.framecount = \u5e27\u6570: header.displayrect = \u663e\u793a\u533a\u57df: -header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% twips -header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% pixels +header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% \u7f07 +header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% \u50cf\u7d20 #after version 2.1.2 -contextmenu.saveToFile = \u53e6\u5b58\u4e3a\u6587\u4ef6 -contextmenu.parseActions = \u89e3\u6790\u52a8\u4f5c +contextmenu.saveToFile = \u4fdd\u5b58\u5230\u6587\u4ef6 +contextmenu.parseActions = \u89e3\u6790actions contextmenu.parseABC = \u89e3\u6790ABC contextmenu.parseInstructions = \u89e3\u6790AVM2\u6307\u4ee4 @@ -499,32 +501,32 @@ menu.file.deobfuscation.old = \u65e7\u6837\u5f0f menu.file.deobfuscation.new = \u65b0\u6837\u5f0f #after version 2.1.4 -contextmenu.openswfinside = \u6253\u5f00 SWF \u5185\u90e8 -binarydata.swfInside = \u5b83\u770b\u8d77\u6765\u50cf\u6709\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u5185\u7684 SWF\u3002\u70b9\u51fb\u6b64\u5904\u5c06\u5176\u52a0\u8f7d\u4e3a\u5b50\u6811\u3002 +contextmenu.openswfinside = \u6253\u5f00SWF\u5185\u90e8 +binarydata.swfInside = \u8be5\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u5185\u4f3c\u4e4e\u6709SWF\uff0c\u5355\u51fb\u6b64\u5904\u5c06\u5176\u52a0\u8f7d\u4e3a\u5b50\u6811\u3002 #after version 3.0.0 button.zoomin.hint = \u653e\u5927 button.zoomout.hint = \u7f29\u5c0f -button.zoomfit.hint = \u7f29\u653e\u5230\u9002\u5408 -button.zoomnone.hint = \u7f29\u653e\u5230 1:1 -button.snapshot.hint = \u6355\u83b7\u5feb\u7167\u5230\u526a\u8d34\u677f +button.zoomfit.hint = \u81ea\u9002\u5e94\u7f29\u653e +button.zoomnone.hint = \u7f29\u653e\u81f31:1 +button.snapshot.hint = \u622a\u56fe\u5230\u526a\u8d34\u677f -editorTruncateWarning = \u5728\u8c03\u8bd5\u6a21\u5f0f\u4e0b\u6587\u672c\u88ab\u622a\u65ad\u5728 %chars% \u4f4d\u7f6e\u3002 +editorTruncateWarning = \u5728\u8c03\u8bd5\u6a21\u5f0f\u4e0b\uff0c\u6587\u672c\u5728"%chars%"\u5904\u88ab\u622a\u65ad\u3002 #Font name which is presented in the SWF Font tag -font.name.intag = \u5728\u6807\u7b7e\u5b57\u4f53\u540d\u79f0: +font.name.intag = \u6807\u7b7e\u4e2d\u7684\u5b57\u4f53\u540d\u79f0: menu.debugger = \u8c03\u8bd5\u5668 menu.debugger.switch = \u8c03\u8bd5\u5668 -menu.debugger.replacetrace = \u66ff\u6362\u8ddf\u8e2a\u8c03\u7528 +menu.debugger.replacetrace = \u66ff\u6362trace\u8c03\u7528 menu.debugger.showlog = \u663e\u793a\u65e5\u5fd7 -message.debugger = \u8be5 SWF \u8c03\u8bd5\u5668\u53ea\u80fd\u7528\u4e8e\u6253\u5370\u8bb0\u5f55\u6d88\u606f\u7684\u7a97\u53e3\uff0c\u6d4f\u89c8\u5668\u63a7\u5236\u53f0\u6216\u8b66\u62a5\u3002\r\n\u5b83\u4e0d\u662f\u8bbe\u8ba1\u7528\u4e8e\u529f\u80fd\uff0c\u5982\u6b65\u5165\u4ee3\u7801\uff0c\u65ad\u70b9\u7b49\u3002 +message.debugger = \u6b64SWF\u8c03\u8bd5\u5668\u53ea\u80fd\u5c06\u6d88\u606f\u6253\u5370\u5230\u65e5\u5fd7\u7a97\u53e3\uff0c\u6d4f\u89c8\u5668\u63a7\u5236\u53f0\u6216\u8b66\u62a5\u4e2d\u3002\r\n\u5b83\u4e0d\u9002\u7528\u4e8e\u6b65\u9aa4\u4ee3\u7801\uff0c\u65ad\u70b9\u7b49\u529f\u80fd\u3002 contextmenu.addTag = \u6dfb\u52a0\u6807\u7b7e -deobfuscation.comment.tryenable = \u63d0\u793a\uff1a\u5728\u8bbe\u7f6e\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u542f\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d -deobfuscation.comment.failed = \u53cd\u6df7\u6dc6\u88ab\u6fc0\u6d3b\uff0c\u4f46\u662f\u53cd\u7f16\u8bd1\u8fd8\u662f\u5931\u8d25\u4e86\u3002\u5982\u679c\u6587\u4ef6\u4e0d\u6df7\u4e71\uff0c\u7981\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d\u6548\u679c\u4f1a\u66f4\u597d\u3002 +deobfuscation.comment.tryenable = \u63d0\u793a:\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u5728"\u8bbe\u7f6e"\u4e2d\u542f\u7528"\u81ea\u52a8\u53cd\u6df7\u6dc6" +deobfuscation.comment.failed = \u5df2\u6fc0\u6d3b\u53cd\u6df7\u6dc6\u529f\u80fd\uff0c\u4f46\u53cd\u7f16\u8bd1\u4ecd\u7136\u5931\u8d25\u3002\u5982\u679c\u672a\u6df7\u6dc6\u6587\u4ef6\uff0c\u8bf7\u7981\u7528"\u81ea\u52a8\u53cd\u6df7\u6dc6"\u4ee5\u83b7\u5f97\u66f4\u597d\u7684\u7ed3\u679c\u3002 #after version 4.0.2 preview.nextframe = \u4e0b\u4e00\u5e27 @@ -532,24 +534,24 @@ preview.prevframe = \u4e0a\u4e00\u5e27 preview.gotoframe = \u8f6c\u5230\u5e27... preview.gotoframe.dialog.title = \u8f6c\u5230\u5e27 -preview.gotoframe.dialog.message = \u8f93\u5165\u5e27\u53f7 (%min% - %max%) -preview.gotoframe.dialog.frame.error = \u65e0\u6548\u7684\u5e27\u53f7\u3002\u5b83\u5fc5\u987b\u662f\u6570\u5b57 %min% \u548c %max%\u4e4b\u95f4\u3002 +preview.gotoframe.dialog.message = \u8f93\u5165\u5e27\u53f7(%min% - %max%) +preview.gotoframe.dialog.frame.error = \u65e0\u6548\u7684\u5e27\u53f7\uff0c\u5b83\u5fc5\u987b\u662f%min%-%max%\u4e4b\u95f4\u7684\u6570\u5b57\u3002 -error.text.invalid.continue = \u65e0\u6548\u6587\u672c: %text% \u5728\u884c %line%\u3002\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f +error.text.invalid.continue = \u65e0\u6548\u7684\u6587\u672c: \u7b2c%line%\u884c\u4e0a\u7684%text%\uff0c\u662f\u5426\u7ee7\u7eed\uff1f #after version 4.0.5 -contextmenu.copyTag = \u590d\u5236\u6807\u7b7e\u5230 -fit = \u9002\u5408 -button.setAdvanceValues = \u8bbe\u7f6e advanc \u503c +contextmenu.copyTag = \u5c06\u6807\u7b7e\u590d\u5236\u5230 +fit = \u81ea\u9002\u5e94 +button.setAdvanceValues = \u8bbe\u7f6e\u9ad8\u7ea7\u503c menu.tools.replace = \u6587\u672c\u66ff\u6362 -message.confirm.close = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed{swfName}\u5417\uff1f -message.confirm.closeAll = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed\u6240\u6709\u7684SWF\u5417\uff1f +message.confirm.close = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u786e\u5b9a\u8981\u5173\u95ed{swfName}\u5417\uff1f +message.confirm.closeAll = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u786e\u5b9a\u8981\u5173\u95ed\u6240\u6709SWF\u5417\uff1f -contextmenu.exportJavaSource = \u5bfc\u51fa Java \u6e90\u4ee3\u7801 -contextmenu.exportSwfXml = \u5bfc\u51fa SWF \u4e3a XML -contextmenu.importSwfXml = \u5bfc\u5165 SWF XML +contextmenu.exportJavaSource = \u5bfc\u51faJava\u6e90\u4ee3\u7801 +contextmenu.exportSwfXml = \u5bfc\u51faSWF\u4e3aXML +contextmenu.importSwfXml = \u5bfc\u5165SWF XML filter.xml = XML @@ -563,92 +565,92 @@ text.align.justify = \u4e24\u7aef\u5bf9\u9f50 text.undo = \u64a4\u6d88\u66f4\u6539 -menu.file.import.xml = \u5bfc\u5165 SWF XML -menu.file.export.xml = \u5bfc\u51fa SWF XML +menu.file.import.xml = \u5bfc\u5165SWF XML +menu.file.export.xml = \u5bfc\u51faSWF XML #after version 4.1.1 -text.align.translatex.decrease = \u51cf\u5c11 TranslateX -text.align.translatex.increase = \u589e\u52a0 TranslateX +text.align.translatex.decrease = \u51cf\u5c11TranslateX +text.align.translatex.increase = \u589e\u52a0TranslateX selectPreviousTag = \u9009\u62e9\u4e0a\u4e00\u4e2a\u6807\u7b7e selectNextTag = \u9009\u62e9\u4e0b\u4e00\u4e2a\u6807\u7b7e -button.ignoreAll = \u5ffd\u7565\u5168\u90e8 -menu.file.import.symbolClass = \u5bfc\u5165\u7b26\u53f7-Class -text.toggleCase = \u5207\u6362\u5916\u58f3 +button.ignoreAll = \u5168\u90e8\u5ffd\u7565 +menu.file.import.symbolClass = \u5bfc\u5165\u7b26\u53f7\u7c7b +text.toggleCase = \u5207\u6362\u5927\u5c0f\u5199 #after version 5.0.2 preview.loop = \u5faa\u73af menu.file.import.script = \u5bfc\u5165\u811a\u672c -contextmenu.copyTagWithDependencies = \u4ee5\u4f9d\u8d56\u5173\u7cfb\u5230\u590d\u5236\u6807\u7b7e -button.replaceWithTag = \u4f7f\u7528\u5176\u5b83\u5b57\u7b26\u66ff\u6362\u6807\u7b7e -button.resolveConstants = \u89e3\u6790\u5e38\u6570 +contextmenu.copyTagWithDependencies = \u590d\u5236\u6807\u7b7e\u53ca\u5176\u4f9d\u8d56\u6027\u5230 +button.replaceWithTag = \u7528\u5176\u4ed6\u5b57\u7b26\u6807\u7b7e\u66ff\u6362 +button.resolveConstants = \u89e3\u6790\u5e38\u91cf #after version 5.1.0 button.viewConstants = \u67e5\u770b\u5e38\u91cf work.exported = \u5bfc\u51fa -button.replaceAlphaChannel = \u66ff\u6362 alpha \u901a\u9053... +button.replaceAlphaChannel = \u66ff\u6362\u900f\u660e\u901a\u9053... tagInfo.header.name = \u540d\u79f0 tagInfo.header.value = \u503c tagInfo.tagType = \u6807\u7b7e\u7c7b\u578b -tagInfo.characterId = \u5b57\u7b26 ID -tagInfo.offset = \u504f\u79fb +tagInfo.characterId = \u5b57\u7b26ID +tagInfo.offset = \u504f\u79fb\u91cf tagInfo.length = \u957f\u5ea6 tagInfo.bounds = \u8fb9\u754c tagInfo.width = \u5bbd\u5ea6 tagInfo.height = \u9ad8\u5ea6 -tagInfo.neededCharacters = \u9700\u8981\u7684\u5b57\u7b26 +tagInfo.neededCharacters = \u6240\u9700\u6807\u7b7e -button.viewhexpcode = \u67e5\u770b\u5341\u516d\u8fdb\u5236\u5e76\u6307\u793a +button.viewhexpcode = \u67e5\u770b\u5341\u516d\u8fdb\u5236\u4e0e\u8bf4\u660e taginfo.header = \u57fa\u672c\u6807\u7b7e\u4fe1\u606f -tagInfo.dependentCharacters = \u76f8\u5173\u5b57\u7b26 +tagInfo.dependentCharacters = \u4ece\u5c5e\u6807\u7b7e #after version 5.3.0 -header.uncompressed = \u65e0\u538b\u7f29 -header.warning.unsupportedGfxCompression = GFX \u4ec5\u652f\u6301\u975e\u538b\u7f29\u6216\u538b\u7f29\u7684 Zlib \u5185\u5bb9\u3002 -header.warning.minimumZlibVersion = ZLIB \u538b\u7f29\u9700\u8981SWF\u7b2c6\u7248\u6216\u66f4\u9ad8\u7248\u672c\u3002 -header.warning.minimumLzmaVersion = LZMA \u538b\u7f29\u9700\u8981 SWF \u7248\u672c 13 \u6216\u66f4\u9ad8\u7248\u672c\u3002 +header.uncompressed = \u672a\u538b\u7f29 +header.warning.unsupportedGfxCompression = GFX\u4ec5\u652f\u6301\u672a\u538b\u7f29\u6216Zlib\u538b\u7f29\u7684\u5185\u5bb9\u3002 +header.warning.minimumZlibVersion = Zlib\u538b\u7f29\u9700\u8981SWF\u7248\u672c6\u6216\u66f4\u9ad8\u7248\u672c\u3002 +header.warning.minimumLzmaVersion = LZMA\u538b\u7f29\u9700\u8981SWF\u7248\u672c13\u6216\u66f4\u9ad8\u7248\u672c\u3002 tagInfo.codecName = \u7f16\u89e3\u7801\u5668\u540d\u79f0 tagInfo.exportFormat = \u5bfc\u51fa\u683c\u5f0f tagInfo.samplingRate = \u91c7\u6837\u7387 tagInfo.stereo = \u7acb\u4f53\u58f0 -tagInfo.sampleCount = \u91c7\u6837\u6570\u91cf +tagInfo.sampleCount = \u6837\u672c\u6570 -filter.dmg = Mac \u53ef\u6267\u884c\u6587\u4ef6 (*.dmg) -filter.linuxExe = Linux \u53ef\u6267\u884c\u6587\u4ef6 +filter.dmg = Mac\u53ef\u6267\u884c\u6587\u4ef6(*.dmg) +filter.linuxExe = Linux\u53ef\u6267\u884c\u6587\u4ef6 -import.script.result = %count% \u811a\u672c\u5df2\u5bfc\u5165\u3002 -import.script.as12warning = \u4ec5 1/2 \u7684\u811a\u672c\u53ef\u4ee5\u5bfc\u5165\u3002 +import.script.result = \u5df2\u5bfc\u5165%count%\u4e2a\u811a\u672c\u3002 +import.script.as12warning = \u4ec5\u5bfc\u5165AS1/2\u811a\u672c\u3002 -error.constantPoolTooBig = \u5e38\u91cf\u6c60\u592a\u5927\u3002 \u7d22\u5f15=%index%, \u5927\u5c0f=%size% -error.image.alpha.invalid = \u65e0\u6548\u7684 Alpha \u901a\u9053\u6570\u636e\u3002 +error.constantPoolTooBig = \u5e38\u91cf\u6c60\u8fc7\u5927\u3002\u7d22\u5f15=%index%, \u5927\u5c0f=%size% +error.image.alpha.invalid = \u65e0\u6548\u7684\u900f\u660e\u901a\u9053\u6570\u636e\u3002 #after version 6.0.2 contextmenu.saveUncompressedToFile = \u4fdd\u5b58\u5230\u672a\u538b\u7f29\u6587\u4ef6 -menu.settings.autoOpenLoadedSWFs = \u6253\u5f00\u5df2\u8f7d\u5165 SWF \u6587\u4ef6\u65f6\u64ad\u653e +menu.settings.autoOpenLoadedSWFs = \u64ad\u653e\u65f6\u6253\u5f00\u5df2\u52a0\u8f7d\u7684SWF #after version 6.1.1 menu.file.start = \u5f00\u59cb menu.file.start.run = \u8fd0\u884c menu.file.start.stop = \u505c\u6b62 menu.file.start.debug = \u8c03\u8bd5 -menu.debugging = \u8c03\u8bd5\u4e2d +menu.debugging = \u6b63\u5728\u8c03\u8bd5 menu.debugging.debug = \u8c03\u8bd5 menu.debugging.debug.stop = \u505c\u6b62 menu.debugging.debug.pause = \u6682\u505c menu.debugging.debug.stepOver = \u5355\u6b65\u6267\u884c -menu.debugging.debug.stepInto = \u5355\u6b65\u6b65\u5165 -menu.debugging.debug.stepOut = \u5355\u6b65\u6b65\u51fa +menu.debugging.debug.stepInto = \u8fdb\u5165 +menu.debugging.debug.stepOut = \u9000\u51fa menu.debugging.debug.continue = \u7ee7\u7eed menu.debugging.debug.stack = \u5806\u6808... -menu.debugging.debug.watch = \u65b0\u5efa\u67e5\u770b... +menu.debugging.debug.watch = \u65b0\u5efa\u76d1\u89c6... -message.playerpath.notset = Flash Player \u653e\u6620\u673a\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 -message.playerpath.debug.notset = Flash Player \u653e\u6620\u673a\u8c03\u8bd5\u7684\u5185\u5bb9\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 -message.playerpath.lib.notset = PlayerGlobal (.SWC) \u672a\u627e\u5230\u3002\u8bf7\u5728\u5176\u8def\u5f84\u914d\u7f6e\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u3002 +message.playerpath.notset = \u627e\u4e0d\u5230Flash Player\u64ad\u653e\u5668\uff0c\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84(1)\u4e2d\u914d\u7f6e\u5176\u8def\u5f84\u3002 +message.playerpath.debug.notset = \u627e\u4e0d\u5230Flash Player\u8c03\u8bd5\u5668\uff0c\u8bf7\u5728"\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84(2)"\u4e2d\u914d\u7f6e\u5176\u8def\u5f84\u3002 +message.playerpath.lib.notset = \u627e\u4e0d\u5230PlayerGlobal(.SWC)\uff0c\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84(3)\u4e2d\u914d\u7f6e\u5176\u8def\u5f84\u3002 -debugpanel.header = \u8c03\u8bd5\u4e2d +debugpanel.header = \u6b63\u5728\u8c03\u8bd5 variables.header.registers = \u5bc4\u5b58\u5668 variables.header.locals = \u672c\u673a @@ -662,64 +664,64 @@ callStack.header = \u8c03\u7528\u5806\u6808 callStack.header.file = \u6587\u4ef6 callStack.header.line = \u884c -stack.header = \u5806\u53e0 +stack.header = \u5806\u6808 stack.header.item = \u9879\u76ee constantpool.header = \u5e38\u91cf\u6c60 constantpool.header.id = Id constantpool.header.value = \u503c -work.running = \u8fd0\u884c\u884c -work.debugging = \u8c03\u8bd5\u4e2d -work.debugging.instrumenting = SWF \u51c6\u5907\u8c03\u8bd5 -work.breakat = \u65ad\u70b9\u5728\u0020 -work.halted = \u8c03\u8bd5\u5f00\u59cb\uff0c\u6267\u884c\u505c\u6b62\u3002\u6dfb\u52a0\u65ad\u70b9\uff0c\u7136\u540e\u70b9\u51fb\u7ee7\u7eed\uff08F5\uff09\u6062\u590d\u8fd0\u884c\u3002 +work.running = \u6b63\u5728\u8fd0\u884c +work.debugging = \u6b63\u5728\u8c03\u8bd5 +work.debugging.instrumenting = \u6b63\u5728\u4e3aSWF\u8c03\u8bd5\u505a\u51c6\u5907 +work.breakat = \u4e2d\u65ad\u4e8e\u0020 +work.halted = \u8c03\u8bd5\u5f00\u59cb\uff0c\u6267\u884c\u505c\u6b62\u3002\u6dfb\u52a0\u65ad\u70b9\uff0c\u7136\u540e\u70b9\u51fb\u7ee7\u7eed(F5)\u6062\u590d\u8fd0\u884c\u3002 debuglog.header = \u65e5\u5fd7 debuglog.button.clear = \u6e05\u9664 #after 7.0.1 -work.debugging.wait = \u7b49\u5f85 Flash \u8c03\u8bd5\u653e\u6620\u673a\u8fde\u63a5 +work.debugging.wait = \u7b49\u5f85Flash\u8c03\u8bd5\u64ad\u653e\u5668\u8fde\u63a5 -error.debug.listen = \u65e0\u6cd5\u76d1\u542c\u7aef\u53e3 %port%\u3002\u6709\u53ef\u80fd\u662f\u53e6\u4e00\u4e2a Flash \u8c03\u8bd5\u5668\u8fd0\u884c\u3002 +error.debug.listen = \u65e0\u6cd5\u5728\u7aef\u53e3%port%\u4e0a\u4fa6\u542c\uff0c\u53ef\u80fd\u6b63\u5728\u8fd0\u884c\u5176\u4ed6Flash\u8c03\u8bd5\u5668\u3002 debug.break.reason.unknown = (\u672a\u77e5) debug.break.reason.breakpoint = (\u65ad\u70b9) -debug.break.reason.watch = (\u89c2\u770b) +debug.break.reason.watch = (\u76d1\u89c6) debug.break.reason.fault = (\u6545\u969c) debug.break.reason.stopRequest = (\u505c\u6b62\u8bf7\u6c42) debug.break.reason.step = (\u6b65\u9aa4) debug.break.reason.halt = (\u505c\u6b62) -debug.break.reason.scriptLoaded = (\u52a0\u8f7d\u811a\u672c) +debug.break.reason.scriptLoaded = (\u811a\u672c\u5df2\u52a0\u8f7d) -menu.file.start.debugpcode = \u8c03\u8bd5 P-code +menu.file.start.debugpcode = \u8c03\u8bd5P-code #after 7.1.2 button.replaceNoFill = \u66ff\u6362 - \u66f4\u65b0\u8303\u56f4... -message.warning.svgImportExperimental = \u5e76\u975e\u6240\u6709\u7684\u529f\u80fd\u652f\u6301 SVG\u3002\u8bf7\u5bfc\u5165\u540e\u68c0\u67e5\u65e5\u5fd7\u3002 +message.warning.svgImportExperimental = \u5e76\u975e\u6240\u6709\u7684SVG\u529f\u80fd\u90fd\u88ab\u652f\u6301\uff0c\u5bfc\u5165\u540e\u8bf7\u68c0\u67e5\u65e5\u5fd7\u3002 -message.imported.swf = \u8be5 SWF \u6587\u4ef6\u4f7f\u7528\u7684\u90d1\u6e90\u662f\u4ece\u5bfc\u5165 SWF \u6587\u4ef6:\n%url%\n\u4f60\u60f3\u4ece\u8be5URL\u52a0\u8f7d\u5417\uff1f -message.imported.swf.manually = \u65e0\u6cd5\u52a0\u8f7d\u5bfc\u5165\u7684 SWF\n%url%\n\u8be5\u6587\u4ef6\u6216 URL \u4e0d\u5b58\u5728\u3002\n\u4f60\u8981\u9009\u62e9\u672c\u5730\u6587\u4ef6\u5417\uff1f +message.imported.swf = \u6b64\u6587\u4ef6\u4f7f\u7528\u4e86\u5bfc\u5165SWF\u6587\u4ef6\u4e2d\u7684\u8d44\u6e90:\n%url%\n\u662f\u5426\u4ece\u8be5URL\u52a0\u8f7d\u8d44\u6e90\uff1f +message.imported.swf.manually = \u65e0\u6cd5\u52a0\u8f7d\u5bfc\u5165SWF\n%url%\n\u6587\u4ef6\u6216URL\u4e0d\u5b58\u5728\u3002\n\u662f\u5426\u8981\u9009\u62e9\u672c\u5730\u6587\u4ef6\uff1f -message.warning.hexViewNotUpToDate = \u5341\u516d\u8fdb\u5236\u67e5\u770b\u6ca1\u6709\u53ca\u65f6\u66f4\u65b0\u3002\u8bf7\u4fdd\u5b58\u5e76\u91cd\u65b0\u52a0\u8f7d\u66f4\u65b0\u5341\u516d\u8fdb\u5236\u67e5\u770b\u8be5\u6587\u4ef6\u3002 -message.font.replace.updateTexts = \u67d0\u4e9b\u5b57\u7b26\u88ab\u66ff\u6362\u3002\u662f\u5426\u8981\u66f4\u65b0\u73b0\u6709\u7684\u6587\u672c\uff1f +message.warning.hexViewNotUpToDate = \u5341\u516d\u8fdb\u5236\u89c6\u56fe\u4e0d\u662f\u6700\u65b0\u7684\uff0c\u8bf7\u4fdd\u5b58\u5e76\u91cd\u65b0\u52a0\u8f7d\u6587\u4ef6\u4ee5\u66f4\u65b0\u5341\u516d\u8fdb\u5236\u89c6\u56fe\u3002 +message.font.replace.updateTexts = \u66ff\u6362\u4e86\u67d0\u4e9b\u5b57\u7b26\uff0c\u60a8\u8981\u66f4\u65b0\u73b0\u6709\u6587\u672c\u5417\uff1f menu.settings.simplifyExpressions = \u7b80\u5316\u8868\u8fbe\u5f0f #after 8.0.1 menu.recentFiles.empty = \u6700\u8fd1\u7684\u6587\u4ef6\u5217\u8868\u4e3a\u7a7a -message.warning.outOfMemory32BitJre = \u53d1\u751f\u5185\u5b58\u9519\u8bef\u3002\u60a8\u5728 64 \u4f4d\u7cfb\u7edf\u4e0a\u8fd0\u884c 32 \u4f4d\u7684 Java\u3002\u8bf7\u4f7f\u7528 64 \u4f4d\u7684 Java\u3002 +message.warning.outOfMemory32BitJre = \u53d1\u751f\u5185\u5b58\u4e0d\u8db3\u9519\u8bef\uff0c\u60a8\u6b63\u572864\u4f4d\u7cfb\u7edf\u4e0a\u8fd0\u884c32\u4f4dJava\uff0c\u8bf7\u4f7f\u752864\u4f4dJava\u3002 -menu.file.reloadAll = \u91cd\u65b0\u52a0\u8f7d\u6240\u6709 -message.confirm.reloadAll = \u6b64\u64cd\u4f5c\u4f1a\u53d6\u6d88\u6240\u6709\u7684 SWF \u6587\u4ef6\u6240\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u5e76\u518d\u6b21\u91cd\u65b0\u52a0\u8f7d\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\n\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f -export.script.singleFilePallelModeWarning = \u5355\u4e2a\u6587\u4ef6\u7684\u811a\u672c\u8f93\u51fa\u6ca1\u6709\u4f7f\u7528\u542f\u7528\u5e76\u884c\u52a0\u901f\u652f\u6301 +menu.file.reloadAll = \u5168\u90e8\u91cd\u8f7d +message.confirm.reloadAll = \u6b64\u64cd\u4f5c\u5c06\u53d6\u6d88\u6240\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u7136\u540e\u518d\u6b21\u91cd\u65b0\u52a0\u8f7d\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\n\u662f\u5426\u8981\u7ee7\u7eed\uff1f +export.script.singleFilePallelModeWarning = \u542f\u7528\u591a\u7ebf\u7a0b\u52a0\u901f\u65f6\u4e0d\u652f\u6301\u5355\u6587\u4ef6\u811a\u672c\u5bfc\u51fa button.showOriginalBytesInPcodeHex = \u663e\u793a\u539f\u59cb\u5b57\u8282 -button.remove = \u6e05\u9664 +button.remove = \u5220\u9664 button.showFileOffsetInPcodeHex = \u663e\u793a\u6587\u4ef6\u504f\u79fb -generic.editor.amf3.title = AMF3 \u7f16\u8f91\u5668 -generic.editor.amf3.help = AMF3 \u503c\u8bed\u6cd5:\n\ +generic.editor.amf3.title = AMF3\u7f16\u8f91\u5668 +generic.editor.amf3.help = AMF3\u503c\u8bed\u6cd5:\n\ ------------------\n\ \u6807\u91cf\u7c7b\u578b:\n\ %scalar_samples%\ @@ -727,8 +729,51 @@ generic.editor.amf3.help = AMF3 \u503c\u8bed\u6cd5:\n\ %nonscalar_samples%\ \n\ \u6ce8\u610f:\n\ - \ * Nonscalar datatypes can be referenced by previously declared "id" attributes with # syntax:\n\ + \ * \u975e\u6807\u91cf\u6570\u636e\u7c7b\u578b\u53ef\u4ee5\u7531\u5148\u524d\u4f7f\u7528#\u8bed\u6cd5\u58f0\u660e\u7684"id"\u5c5e\u6027\u5f15\u7528:\n\ %reference_sample%\n\ - \ * Keys in Dictionary entries can be any type\n -contextmenu.showInResources = \u5728\u8d44\u6e90\u663e\u793a - + \ * \u8bcd\u5178\u6761\u76ee\u4e2d\u7684\u952e\u53ef\u4ee5\u662f\u4efb\u4f55\u7c7b\u578b\n +contextmenu.showInResources = \u5728\u8d44\u6e90\u4e2d\u663e\u793a +message.flexpath.notset = \u627e\u4e0d\u5230Flex SDK\uff0c\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84(4)\u4e2d\u914d\u7f6e\u5176\u8def\u5f84\u3002 + + +#add after panel.disassembled string +abc.detail.split = :\u0020 +abc.detail.trait = \u7279\u5f81 - %trait_type% +abc.detail.trait.method = \u65b9\u6cd5 +abc.detail.trait.getter = \u83b7\u53d6\u5668 +abc.detail.trait.setter = \u8bbe\u7f6e\u5668 +abc.detail.trait.slot = \u63d2\u69fd +abc.detail.trait.const = \u5e38\u91cf +abc.detail.trait.class = \u7c7b +abc.detail.trait.function = \u51fd\u6570 + +abc.detail.specialmethod = \u7279\u6b8a\u65b9\u6cd5 - %specialmethod_type% +abc.detail.specialmethod.scriptinitializer = \u811a\u672c\u521d\u59cb\u5316\u7a0b\u5e8f +abc.detail.specialmethod.classinitializer = \u7c7b\u521d\u59cb\u5316\u7a0b\u5e8f +abc.detail.specialmethod.instanceinitializer = \u5b9e\u4f8b\u521d\u59cb\u5316\u7a0b\u5e8f +abc.detail.innerfunction = \u5185\u90e8\u51fd\u6570 + +button.edit.script.decompiled = \u7f16\u8f91ActionScript +button.edit.script.disassembled = \u7f16\u8f91 P-code + +debug.watch.add = \u5c06\u76d1\u89c6\u6dfb\u52a0\u5230%name% +debug.watch.add.read = \u8bfb\u53d6 +debug.watch.add.write = \u5199\u5165 +debug.watch.add.readwrite = \u8bfb+\u5199- + +error.debug.watch.add = \u65e0\u6cd5\u5c06\u76d1\u89c6\u6dfb\u52a0\u5230\u6b64\u53d8\u91cf\u3002 + +variables.column.scope = \u8303\u56f4 +variables.column.flags = \u6807\u8bb0 +variables.column.trait = \u7279\u5f81 + +message.font.setadvancevalues = \u6b64\u64cd\u4f5c\u4f1a\u5c06\u6b64\u6807\u8bb0\u4e2d\u6240\u6709\u5b57\u7b26\u7684\u884c\u8ddd\u8bbe\u7f6e\u4e3a\u6240\u9009\u5b57\u4f53\u6e90\u884c\u8ddd\u3002 + +menu.tools.deobfuscation.renameColliding = \u91cd\u547d\u540d\u51b2\u7a81\u7684\u7279\u5f81/\u7c7b + +filter.iggy = Iggy\u6587\u4ef6(*.iggy) + +#after 11.1.0 +script.seemsBroken = \u8b66\u544a: \u4ee3\u7801\u53cd\u6c47\u7f16\u5305\u542b\u00a7\u00a7\u6307\u4ee4. \ + \u8fd9\u901a\u5e38\u662f\u7531\u4e8e\u6df7\u6dc6\u9020\u6210\u7684(\u8bf7\u53c2\u9605"\u8bbe\u7f6e/\u81ea\u52a8\u53cd\u6df7\u6dc6")\ + \u6216\u811a\u672c\u662f\u7531\u975e\u6807\u51c6\u7684\u7f16\u8bd1\u5668\u751f\u6210\u7684(\u5982Haxe\u7b49)\u3002 \ diff --git a/src/com/jpexs/decompiler/flash/gui/locales/NewVersionDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/NewVersionDialog_zh.properties index 32d7f5b6f..3496283f8 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/NewVersionDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/NewVersionDialog_zh.properties @@ -15,14 +15,14 @@ version = version releasedate = \u53d1\u5e03\u65f6\u95f4: -newversionavailable = \u6709\u4e00\u4e2a\u53ef\u7528\u66f4\u65b0: -changeslog = \u66f4\u65b0\u65e5\u5fd7: +newversionavailable = \u6709\u65b0\u7248\u672c\u53ef\u7528: +changeslog = \u66f4\u6539\u65e5\u5fd7: downloadnow = \u7acb\u5373\u4e0b\u8f7d\uff1f -button.ok = \u662f +button.ok = \u786e\u5b9a button.cancel = \u53d6\u6d88 -dialog.title = \u6709\u53ef\u7528\u66f4\u65b0 +dialog.title = \u6709\u65b0\u7248\u672c\u53ef\u7528 newversion = \u65b0\u7248\u672c -newvermessage = %oldAppName% \u7684\u65b0\u7248\u672c\u5df2\u7ecf\u53d1\u5e03: %newAppName%.\r\n\u8bf7\u8bbf\u95ee %projectPage% \u8fdb\u884c\u4e0b\u8f7d. +newvermessage = %oldAppName%\u7684\u65b0\u7248\u672c\u5df2\u7ecf\u53d1\u5e03: %newAppName%.\r\n\u8bf7\u8bbf\u95ee%projectPage%\u8fdb\u884c\u4e0b\u8f7d. #change this only when the date format is wrong in the changelog #you can use any java date format string, e.g: yyyy.MM.dd -customDateFormat = default +customDateFormat = \u9ed8\u8ba4 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/ReplaceCharacterDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/ReplaceCharacterDialog_zh.properties index 9dc853397..eeab90e0f 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/ReplaceCharacterDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/ReplaceCharacterDialog_zh.properties @@ -13,8 +13,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -dialog.title = \u66ff\u6362\u5b57\u7b26\u6807\u8bb0 -replace.width = \u66ff\u6362\u4f7f\u7528: +dialog.title = \u66ff\u6362\u5b57\u7b26\u6807\u7b7e +replace.width = \u66ff\u6362\u4e3a: button.ok = \u786e\u5b9a button.cancel = \u53d6\u6d88 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/ReplaceTraceDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/ReplaceTraceDialog_zh.properties index c420bd14e..10caa9569 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/ReplaceTraceDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/ReplaceTraceDialog_zh.properties @@ -13,8 +13,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -dialog.title = \u66ff\u6362\u8ddf\u8e2a\u529f\u80fd\u8c03\u7528 +dialog.title = \u66ff\u6362trace\u51fd\u6570\u8c03\u7528 -function.debugAlert = debugAlert - Web \u6d4f\u89c8\u5668 JavaScript \u8b66\u544a -function.debugConsole = debugConsole - Web \u6d4f\u89c8\u5668 javascript console.log -function.debugSocket = debugSocket - \u5957\u63a5\u5b57\u8fde\u63a5\u53cd\u7f16\u8bd1 +function.debugAlert = debugAlert - Web\u6d4f\u89c8\u5668 JavaScript\u8b66\u544a +function.debugConsole = debugConsole - Web\u6d4f\u89c8\u5668javascript console.log +function.debugSocket = debugSocket - socket\u8fde\u63a5\u5230\u53cd\u7f16\u8bd1\u5668 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/SearchDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/SearchDialog_zh.properties index aa57d83ac..2c7485a9e 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/SearchDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/SearchDialog_zh.properties @@ -16,14 +16,15 @@ checkbox.ignorecase = \u5ffd\u7565\u5927\u5c0f\u5199 checkbox.regexp = \u6b63\u5219\u8868\u8fbe\u5f0f button.ok = \u786e\u5b9a button.cancel = \u53d6\u6d88 -label.searchtext = \u641c\u7d22\u5b57\u7b26: -#dialog.title = \u641c\u7d22ActionScript +label.searchtext = \u641c\u7d22\u6587\u5b57: +#dialog.title = \u641c\u7d22AS dialog.title = \u6587\u672c\u641c\u7d22 dialog.title.replace = \u6587\u672c\u66ff\u6362 error = \u9519\u8bef -error.invalidregexp = \u9519\u8bef\u7684\u8868\u8fbe\u5f0f +error.invalidregexp = \u65e0\u6548\u7684\u8868\u8fbe\u5f0f -checkbox.searchText = \u5728\u6587\u672c\u641c\u7d22 -checkbox.searchAS = \u5728 AS \u641c\u7d22 -checkbox.replaceInParameters = \u5728\u53c2\u6570\u66ff\u6362 +checkbox.searchText = \u5728\u6587\u672c\u4e2d\u641c\u7d22 +checkbox.searchAS = \u5728AS\u4e2d\u641c\u7d22 +checkbox.replaceInParameters = \u66ff\u6362\u53c2\u6570 +checkbox.searchPCode = \u5728P-Code\u4e2d\u641c\u7d22 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/SearchResultsDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/SearchResultsDialog_zh.properties index 05b167b2a..a6a0fc5a8 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/SearchResultsDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/SearchResultsDialog_zh.properties @@ -15,4 +15,4 @@ button.goto = \u8f6c\u5230 button.close = \u5173\u95ed -dialog.title = \u641c\u7d22\u7ed3\u679c: %text% +dialog.title = \u641c\u7d22\u7ed3\u679c:%text% diff --git a/src/com/jpexs/decompiler/flash/gui/locales/abc/DeobfuscationDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/abc/DeobfuscationDialog_zh.properties index 111589aed..da0c3ec78 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/abc/DeobfuscationDialog_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/abc/DeobfuscationDialog_zh.properties @@ -15,9 +15,9 @@ processallclasses = \u5904\u7406\u6240\u6709\u7c7b dialog.title = P\u4ee3\u7801\u53cd\u6df7\u6dc6 -deobfuscation.level = \u4ee3\u7801\u53cd\u6df7\u6dc6\u7a0b\u5ea6: -deobfuscation.removedeadcode = \u6e05\u9664\u6b7b\u4ee3\u7801 -deobfuscation.removetraps = \u6e05\u9664\u9677\u9631 +deobfuscation.level = \u4ee3\u7801\u53cd\u6df7\u6dc6\u7b49\u7ea7: +deobfuscation.removedeadcode = \u5220\u9664\u65e0\u6548\u4ee3\u7801 +deobfuscation.removetraps = \u6e05\u9664traps deobfuscation.restorecontrolflow = \u91cd\u5efa\u63a7\u5236\u6d41 button.ok = \u786e\u5b9a diff --git a/src/com/jpexs/decompiler/flash/gui/locales/proxy/ProxyFrame_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/proxy/ProxyFrame_zh.properties index 918260a5d..703a18f5c 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/proxy/ProxyFrame_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/proxy/ProxyFrame_zh.properties @@ -20,16 +20,16 @@ open = \u6253\u5f00 clear = \u6e05\u7a7a rename = \u91cd\u547d\u540d remove = \u5220\u9664 -sniff = \u8303\u56f4: +sniff = \u55c5\u63a2 dialog.title = \u4ee3\u7406 error = \u9519\u8bef -error.port = \u9519\u8bef\u7684\u7aef\u53e3\u53f7\u3002 +error.port = \u7aef\u53e3\u53f7\u683c\u5f0f\u9519\u8bef\u3002 copy.url = \u590d\u5236\u7f51\u5740 save.as = \u53e6\u5b58\u4e3a... replace = \u66ff\u6362... error.save.as = \u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6 error.replace = \u65e0\u6cd5\u66ff\u6362\u6570\u636e -error.start.server = \u5728\u7aef\u53e3\u670d\u52a1\u5668 %port% \u65e0\u6cd5\u542f\u52a8\u3002\u8bf7\u68c0\u67e5\u7aef\u53e3\u6ca1\u6709\u88ab\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u3002 +error.start.server = \u65e0\u6cd5\u5728\u7aef\u53e3%port%\u4e0a\u542f\u52a8\u670d\u52a1\u5668\u3002 \u8bf7\u68c0\u67e5\u7aef\u53e3\u662f\u5426\u672a\u88ab\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u5360\u7528\u6216\u963b\u6b62\u3002 column.accessed = \u8bbf\u95ee column.size = \u5927\u5c0f column.url = URL diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java index 342f476cd..0ba6a3ca6 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java @@ -51,6 +51,7 @@ import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.function.Predicate; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; @@ -327,6 +328,28 @@ public class TagTreeContextMenu extends JPopupMenu { } boolean singleSelect = items.size() == 1; + Predicate> canReplace = p -> { + for (TreeItem ti : items) if (!p.test(ti)) return false; + return true; + }; + + // replace + if (canReplace.test(it -> it instanceof ImageTag && ((ImageTag) it).importSupported())) { + replaceMenuItem.setVisible(true); + } + + if (canReplace.test(it -> it instanceof ShapeTag)) { + replaceMenuItem.setVisible(true); + replaceNoFillMenuItem.setVisible(true); + } + + if (canReplace.test(it -> it instanceof DefineBinaryDataTag)) { + replaceMenuItem.setVisible(true); + } + + if (canReplace.test(it -> it instanceof DefineSoundTag)) { + replaceMenuItem.setVisible(true); + } if (singleSelect) { final TreeItem firstItem = items.get(0); @@ -335,24 +358,6 @@ public class TagTreeContextMenu extends JPopupMenu { replaceWithTagMenuItem.setVisible(true); } - // replace - if (firstItem instanceof ImageTag && ((ImageTag) firstItem).importSupported()) { - replaceMenuItem.setVisible(true); - } - - if (firstItem instanceof ShapeTag) { - replaceMenuItem.setVisible(true); - replaceNoFillMenuItem.setVisible(true); - } - - if (firstItem instanceof DefineBinaryDataTag) { - replaceMenuItem.setVisible(true); - } - - if (firstItem instanceof DefineSoundTag) { - replaceMenuItem.setVisible(true); - } - addTagMenu.removeAll(); if (firstItem instanceof FolderItem) { List allowedTagTypes; diff --git a/travis/after_success.sh b/travis/after_success.sh index 9d97ab564..76a33f4ad 100644 --- a/travis/after_success.sh +++ b/travis/after_success.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #stop on error set -e @@ -52,12 +52,16 @@ if [ "$DO_DEPLOY" = 1 ]; then TAG_INFO=`curl --silent --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases/tags/$DEPLOY_RELEASE_TO_REMOVE` RELEASE_ID=`echo $TAG_INFO|jq '.id'` curl --silent --request DELETE --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases/$RELEASE_ID>/dev/null + # wait few seconds before DELETE properly propagates so we can delete tag then + sleep 5 #-delete tag git config --local user.email "travis@travis-ci.org" git config --local user.name "Travis CI" - git remote add myorigin https://${GITHUB_ACCESS_TOKEN}@github.com/$TRAVIS_REPO_SLUG.git > /dev/null 2>&1 + git remote add myorigin https://${GITHUB_ACCESS_TOKEN}@github.com/$TRAVIS_REPO_SLUG.git + #> /dev/null 2>&1 git tag -d $DEPLOY_RELEASE_TO_REMOVE - git push --quiet myorigin :refs/tags/$DEPLOY_RELEASE_TO_REMOVE > /dev/null 2>&1 + git push --quiet --delete myorigin $DEPLOY_RELEASE_TO_REMOVE + #> /dev/null 2>&1 fi echo "FINISHED" fi diff --git a/travis/before_install.sh b/travis/before_install.sh index 538b98619..1df035052 100644 --- a/travis/before_install.sh +++ b/travis/before_install.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Exit immediately on first error set -e @@ -39,8 +39,8 @@ cp ./travis/tools/nsis-3.0-addon.zip ./ unzip -u nsis-3.0-addon.zip -d $tools_dir/nsis-3.0-src #Extract launch4j - tool for creating EXE file from Java -cp ./travis/tools/launch4j-3.9-linux.tgz ./ -tar zxvf launch4j-3.9-linux.tgz -C $tools_dir >/dev/null +cp ./travis/tools/launch4j-3.12-linux.tgz ./ +tar zxvf launch4j-3.12-linux.tgz -C $tools_dir >/dev/null #Create tools.properties with paths to NSIS and launch4j echo "nsis.path = $tools_dir/nsis-3.0-src/bin" > tools.properties diff --git a/travis/install.sh b/travis/install.sh index c566992ef..ae28c69ef 100644 --- a/travis/install.sh +++ b/travis/install.sh @@ -1,2 +1,2 @@ -#!/bin/bash +#!/usr/bin/env bash ant deps diff --git a/travis/script.sh b/travis/script.sh index 271f955f5..0b1ef8a55 100644 --- a/travis/script.sh +++ b/travis/script.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #stop on error set -e diff --git a/travis/tools/launch4j-3.9-linux.tgz b/travis/tools/launch4j-3.12-linux.tgz similarity index 53% rename from travis/tools/launch4j-3.9-linux.tgz rename to travis/tools/launch4j-3.12-linux.tgz index b4ef464d7..516f678a3 100644 Binary files a/travis/tools/launch4j-3.9-linux.tgz and b/travis/tools/launch4j-3.12-linux.tgz differ