mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-25 04:20:51 +00:00
Lazy dump info collecting
This commit is contained in:
@@ -540,9 +540,7 @@ public final class SWF implements TreeItem, Timelined {
|
||||
|
||||
SWFInputStream sis = new SWFInputStream(this, uncompressedData);
|
||||
dumpInfo = new DumpInfoSwfNode(this, "rootswf", "", null, 0, 0);
|
||||
if (Configuration.dumpInfoCollecting.get()) {
|
||||
sis.dumpInfo = dumpInfo;
|
||||
}
|
||||
sis.dumpInfo = dumpInfo;
|
||||
sis.readBytesEx(3, "signature"); // skip siganture
|
||||
version = sis.readUI8("version");
|
||||
fileSize = sis.readUI32("fileSize");
|
||||
@@ -556,7 +554,7 @@ public final class SWF implements TreeItem, Timelined {
|
||||
sis.readUI8("tmpFirstByetOfFrameRate"); //tmpFirstByetOfFrameRate
|
||||
frameRate = sis.readUI8("frameRate");
|
||||
frameCount = sis.readUI16("frameCount");
|
||||
List<Tag> tags = sis.readTagList(this, 0, parallelRead, true, !checkOnly, gfx);
|
||||
List<Tag> tags = sis.readTagList(this, 0, parallelRead, true, !checkOnly);
|
||||
if (tags.get(tags.size() - 1).getId() == EndTag.ID) {
|
||||
hasEndTag = true;
|
||||
tags.remove(tags.size() - 1);
|
||||
|
||||
@@ -964,22 +964,20 @@ public class SWFInputStream implements AutoCloseable {
|
||||
private final int level;
|
||||
private final boolean parallel;
|
||||
private final boolean skipUnusualTags;
|
||||
private final boolean gfx;
|
||||
|
||||
public TagResolutionTask(TagStub tag, DumpInfo dumpInfo, int level, boolean parallel, boolean skipUnusualTags, boolean gfx) {
|
||||
public TagResolutionTask(TagStub tag, DumpInfo dumpInfo, int level, boolean parallel, boolean skipUnusualTags) {
|
||||
this.tag = tag;
|
||||
this.dumpInfo = dumpInfo;
|
||||
this.level = level;
|
||||
this.parallel = parallel;
|
||||
this.skipUnusualTags = skipUnusualTags;
|
||||
this.gfx = gfx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tag call() throws Exception {
|
||||
DumpInfo di = dumpInfo;
|
||||
try {
|
||||
Tag t = resolveTag(tag, level, parallel, skipUnusualTags, gfx);
|
||||
Tag t = resolveTag(tag, level, parallel, skipUnusualTags);
|
||||
if (dumpInfo != null && t != null) {
|
||||
dumpInfo.name = t.getName();
|
||||
}
|
||||
@@ -1001,12 +999,11 @@ public class SWFInputStream implements AutoCloseable {
|
||||
* @param parallel
|
||||
* @param skipUnusualTags
|
||||
* @param parseTags
|
||||
* @param gfx
|
||||
* @return List of tags
|
||||
* @throws IOException
|
||||
* @throws java.lang.InterruptedException
|
||||
*/
|
||||
public List<Tag> readTagList(Timelined timelined, int level, boolean parallel, boolean skipUnusualTags, boolean parseTags, boolean gfx) throws IOException, InterruptedException {
|
||||
public List<Tag> readTagList(Timelined timelined, int level, boolean parallel, boolean skipUnusualTags, boolean parseTags) throws IOException, InterruptedException {
|
||||
ExecutorService executor = null;
|
||||
List<Future<Tag>> futureResults = new ArrayList<>();
|
||||
if (parallel) {
|
||||
@@ -1020,7 +1017,7 @@ public class SWFInputStream implements AutoCloseable {
|
||||
long pos = getPos();
|
||||
newDumpLevel(null, "TAG");
|
||||
try {
|
||||
tag = readTag(timelined, level, pos, parseTags && !parallel, parallel, skipUnusualTags, gfx);
|
||||
tag = readTag(timelined, level, pos, parseTags && !parallel, parallel, skipUnusualTags);
|
||||
} catch (EOFException | EndOfStreamException ex) {
|
||||
tag = null;
|
||||
}
|
||||
@@ -1048,7 +1045,7 @@ public class SWFInputStream implements AutoCloseable {
|
||||
switch (tag.getId()) {
|
||||
case FileAttributesTag.ID: //FileAttributes
|
||||
if (tag instanceof TagStub) {
|
||||
tag = resolveTag((TagStub) tag, level, parallel, skipUnusualTags, gfx);
|
||||
tag = resolveTag((TagStub) tag, level, parallel, skipUnusualTags);
|
||||
}
|
||||
FileAttributesTag fileAttributes = (FileAttributesTag) tag;
|
||||
if (fileAttributes.actionScript3) {
|
||||
@@ -1091,7 +1088,7 @@ public class SWFInputStream implements AutoCloseable {
|
||||
}
|
||||
if (parseTags && doParse && tag instanceof TagStub) {
|
||||
if (parallel) {
|
||||
Future<Tag> future = executor.submit(new TagResolutionTask((TagStub) tag, di, level, parallel, skipUnusualTags, gfx));
|
||||
Future<Tag> future = executor.submit(new TagResolutionTask((TagStub) tag, di, level, parallel, skipUnusualTags));
|
||||
futureResults.add(future);
|
||||
}
|
||||
}
|
||||
@@ -1117,7 +1114,7 @@ public class SWFInputStream implements AutoCloseable {
|
||||
return tags;
|
||||
}
|
||||
|
||||
public static Tag resolveTag(TagStub tag, int level, boolean parallel, boolean skipUnusualTags, boolean gfx) throws InterruptedException {
|
||||
public static Tag resolveTag(TagStub tag, int level, boolean parallel, boolean skipUnusualTags) throws InterruptedException {
|
||||
Tag ret;
|
||||
|
||||
ByteArrayRange data = tag.getOriginalRange();
|
||||
@@ -1355,7 +1352,7 @@ public class SWFInputStream implements AutoCloseable {
|
||||
ret = new PlaceObject4Tag(sis, data);
|
||||
break;
|
||||
default:
|
||||
if (gfx) { //GFX tags only in GFX files. There may be incorrect GFX tags in non GFX files
|
||||
if (swf.gfx) { //GFX tags only in GFX files. There may be incorrect GFX tags in non GFX files
|
||||
switch (tag.getId()) {
|
||||
case 1000:
|
||||
ret = new ExporterInfoTag(sis, data);
|
||||
@@ -1413,12 +1410,11 @@ public class SWFInputStream implements AutoCloseable {
|
||||
* @param resolve
|
||||
* @param parallel
|
||||
* @param skipUnusualTags
|
||||
* @param gfx
|
||||
* @return Tag or null when End tag
|
||||
* @throws IOException
|
||||
* @throws java.lang.InterruptedException
|
||||
*/
|
||||
public Tag readTag(Timelined timelined, int level, long pos, boolean resolve, boolean parallel, boolean skipUnusualTags, boolean gfx) throws IOException, InterruptedException {
|
||||
public Tag readTag(Timelined timelined, int level, long pos, boolean resolve, boolean parallel, boolean skipUnusualTags) throws IOException, InterruptedException {
|
||||
int tagIDTagLength = readUI16("tagIDTagLength");
|
||||
int tagID = (tagIDTagLength) >> 6;
|
||||
|
||||
@@ -1438,15 +1434,20 @@ public class SWFInputStream implements AutoCloseable {
|
||||
}
|
||||
|
||||
ByteArrayRange dataRange = new ByteArrayRange(swf.uncompressedData, (int) pos, (int) (tagLength + headerLength));
|
||||
skipBytes((int) tagLength);
|
||||
|
||||
TagStub tagStub = new TagStub(swf, tagID, "Unresolved", dataRange, tagDataStream);
|
||||
tagStub.forceWriteAsLong = readLong;
|
||||
Tag ret = tagStub;
|
||||
skipBytes((int) tagLength);
|
||||
|
||||
if (tagDataStream.dumpInfo == null && dumpInfo != null) {
|
||||
dumpInfo.tagToResolve = tagStub;
|
||||
}
|
||||
|
||||
if (resolve) {
|
||||
DumpInfo di = dumpInfo;
|
||||
try {
|
||||
ret = resolveTag(tagStub, level, parallel, skipUnusualTags, gfx);
|
||||
ret = resolveTag(tagStub, level, parallel, skipUnusualTags);
|
||||
} catch (EndOfStreamException ex) {
|
||||
tagDataStream.endDumpLevelUntil(di);
|
||||
logger.log(Level.SEVERE, "Problem in " + timelined.toString(), ex);
|
||||
@@ -3287,7 +3288,9 @@ public class SWFInputStream implements AutoCloseable {
|
||||
|
||||
public SWFInputStream getLimitedStream(int limit) throws IOException {
|
||||
SWFInputStream sis = new SWFInputStream(swf, is.getAllRead(), startingPos, (int) (is.getPos() + limit));
|
||||
sis.dumpInfo = dumpInfo;
|
||||
if (Configuration.lazyDumpInfoCollecting.get()) {
|
||||
sis.dumpInfo = dumpInfo;
|
||||
}
|
||||
sis.seek(is.getPos() + startingPos);
|
||||
return sis;
|
||||
}
|
||||
|
||||
@@ -97,7 +97,6 @@ import java.util.logging.Logger;
|
||||
*/
|
||||
public class Action implements GraphSourceItem {
|
||||
|
||||
public Action replaceWith;
|
||||
private boolean ignored = false;
|
||||
/**
|
||||
* Action type identifier
|
||||
@@ -184,29 +183,9 @@ public class Action implements GraphSourceItem {
|
||||
/**
|
||||
* Gets all addresses which are referenced from this action and/or
|
||||
* subactions
|
||||
*
|
||||
* @param version SWF version
|
||||
* @return List of addresses
|
||||
* @param refs list of addresses
|
||||
*/
|
||||
public List<Long> getAllRefs(int version) {
|
||||
List<Long> ret = new ArrayList<>();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all ActionIf or ActionJump actions from list of actions
|
||||
*
|
||||
* @param list List of actions
|
||||
* @return List of actions
|
||||
*/
|
||||
public static List<Action> getActionsAllIfsOrJumps(List<Action> list) {
|
||||
List<Action> ret = new ArrayList<>();
|
||||
for (Action a : list) {
|
||||
if (a instanceof ActionIf || a instanceof ActionJump) {
|
||||
ret.add(a);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
public void getRef(List<Long> refs) {
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -219,16 +198,15 @@ public class Action implements GraphSourceItem {
|
||||
public static List<Long> getActionsAllRefs(List<Action> list, int version) {
|
||||
List<Long> ret = new ArrayList<>();
|
||||
for (Action a : list) {
|
||||
if (a.replaceWith != null) {
|
||||
a.replaceWith.setAddress(a.getAddress(), version, false);
|
||||
ret.addAll(a.replaceWith.getAllRefs(version));
|
||||
}
|
||||
List<Long> part = a.getAllRefs(version);
|
||||
ret.addAll(part);
|
||||
a.getRef(ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public int getTotalActionLength() {
|
||||
return actionLength + 1 + ((actionCode >= 0x80) ? 2 : 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets address of this instruction
|
||||
*
|
||||
@@ -408,15 +386,14 @@ public class Action implements GraphSourceItem {
|
||||
* @param listeners
|
||||
* @param address
|
||||
* @param list List of actions
|
||||
* @param importantOffsets List of important offsets to mark as labels
|
||||
* @param version SWF version
|
||||
* @param exportMode PCode or hex?
|
||||
* @param writer
|
||||
* @param path
|
||||
* @return HilightedTextWriter
|
||||
*/
|
||||
public static GraphTextWriter actionsToString(List<DisassemblyListener> listeners, long address, List<Action> list, List<Long> importantOffsets, int version, ScriptExportMode exportMode, GraphTextWriter writer, String path) {
|
||||
return actionsToString(listeners, address, list, importantOffsets, new ArrayList<String>(), version, exportMode, writer, path);
|
||||
public static GraphTextWriter actionsToString(List<DisassemblyListener> listeners, long address, List<Action> list, int version, ScriptExportMode exportMode, GraphTextWriter writer, String path) {
|
||||
return actionsToString(listeners, address, list, new ArrayList<String>(), version, exportMode, writer, path);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -432,12 +409,9 @@ public class Action implements GraphSourceItem {
|
||||
* @param path
|
||||
* @return HilightedTextWriter
|
||||
*/
|
||||
private static GraphTextWriter actionsToString(List<DisassemblyListener> listeners, long address, List<Action> list, List<Long> importantOffsets, List<String> constantPool, int version, ScriptExportMode exportMode, GraphTextWriter writer, String path) {
|
||||
private static GraphTextWriter actionsToString(List<DisassemblyListener> listeners, long address, List<Action> list, List<String> constantPool, int version, ScriptExportMode exportMode, GraphTextWriter writer, String path) {
|
||||
long offset;
|
||||
if (importantOffsets == null) {
|
||||
//setActionsAddresses(list, 0, version);
|
||||
importantOffsets = getActionsAllRefs(list, version);
|
||||
}
|
||||
List<Long> importantOffsets = getActionsAllRefs(list, version);
|
||||
/*List<ConstantPool> cps = SWFInputStream.getConstantPool(new ArrayList<DisassemblyListener>(), new ActionGraphSource(list, version, new HashMap<Integer, String>(), new HashMap<String, GraphTargetItem>(), new HashMap<String, GraphTargetItem>()), 0, version, path);
|
||||
if (!cps.isEmpty()) {
|
||||
setConstantPool(list, cps.get(cps.size() - 1));
|
||||
@@ -505,15 +479,7 @@ public class Action implements GraphSourceItem {
|
||||
writer.appendNoHilight(":");
|
||||
}
|
||||
|
||||
if (a.replaceWith != null) {
|
||||
if (lastPush) {
|
||||
writer.newLine();
|
||||
lastPush = false;
|
||||
}
|
||||
writer.append("", offset);
|
||||
writer.appendNoHilight(a.replaceWith.getASMSource(list, importantOffsets, constantPool, version, exportMode));
|
||||
writer.newLine();
|
||||
} else if (a.isIgnored()) {
|
||||
if (a.isIgnored()) {
|
||||
if (lastPush) {
|
||||
writer.newLine();
|
||||
lastPush = false;
|
||||
@@ -1224,7 +1190,7 @@ public class Action implements GraphSourceItem {
|
||||
String s = null;
|
||||
try {
|
||||
HilightedTextWriter writer = new HilightedTextWriter(Configuration.getCodeFormatting(), false);
|
||||
Action.actionsToString(new ArrayList<DisassemblyListener>(), address, ret, null, version, ScriptExportMode.PCODE, writer, path);
|
||||
Action.actionsToString(new ArrayList<DisassemblyListener>(), address, ret, version, ScriptExportMode.PCODE, writer, path);
|
||||
s = writer.toString();
|
||||
ret = ASMParser.parse(address, true, s, SWF.DEFAULT_VERSION, false);
|
||||
} catch (IOException | ParseException ex) {
|
||||
|
||||
@@ -141,7 +141,7 @@ public class ActionListReader {
|
||||
int index = getNextNotNullIndex(actionMap, 0);
|
||||
if (index != -1 && entryAction != actionMap.get(index)) {
|
||||
ActionJump jump = new ActionJump(0);
|
||||
int size = getTotalActionLength(jump);
|
||||
int size = jump.getTotalActionLength();
|
||||
jump.setJumpOffset((int) (entryAction.getAddress() - size));
|
||||
actions.add(jump);
|
||||
}
|
||||
@@ -157,7 +157,7 @@ public class ActionListReader {
|
||||
if (!action.isExit() && !(action instanceof ActionJump)) {
|
||||
ActionJump jump = new ActionJump(0);
|
||||
jump.setAddress(action.getAddress(), version);
|
||||
int size = getTotalActionLength(jump);
|
||||
int size = jump.getTotalActionLength();
|
||||
jump.setJumpOffset((int) (nextOffset - action.getAddress() - size));
|
||||
actions.add(jump);
|
||||
}
|
||||
@@ -179,7 +179,7 @@ public class ActionListReader {
|
||||
aEnd.setAddress(endAddress, version);
|
||||
actions.add(aEnd);
|
||||
} else {
|
||||
endAddress -= getTotalActionLength(aEnd);
|
||||
endAddress -= aEnd.getTotalActionLength();
|
||||
}
|
||||
|
||||
updateJumps(actions, jumps, containerLastActions, endAddress, version);
|
||||
@@ -270,17 +270,6 @@ public class ActionListReader {
|
||||
}
|
||||
last = a;
|
||||
}
|
||||
for (int i = 0; i < retdups.size(); i++) {
|
||||
Action a = retdups.get(i);
|
||||
if (a instanceof ActionEnd) {
|
||||
if (i < retdups.size() - 1) {
|
||||
ActionJump jmp = new ActionJump(0);
|
||||
jmp.setJumpOffset(retdups.size() - i - jmp.getBytes(version).length);
|
||||
a.replaceWith = jmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret = Action.removeNops(0, ret, version, path);
|
||||
List<Action> reta = new ArrayList<>();
|
||||
for (Object o : ret) {
|
||||
@@ -329,17 +318,17 @@ public class ActionListReader {
|
||||
long target = -1;
|
||||
if (a instanceof ActionIf) {
|
||||
ActionIf aIf = (ActionIf) a;
|
||||
target = aIf.getAddress() + getTotalActionLength(a) + aIf.getJumpOffset();
|
||||
target = aIf.getAddress() + a.getTotalActionLength() + aIf.getJumpOffset();
|
||||
} else if (a instanceof ActionJump) {
|
||||
ActionJump aJump = (ActionJump) a;
|
||||
target = aJump.getAddress() + getTotalActionLength(a) + aJump.getJumpOffset();
|
||||
target = aJump.getAddress() + a.getTotalActionLength() + aJump.getJumpOffset();
|
||||
} else if (a instanceof ActionStore) {
|
||||
ActionStore aStore = (ActionStore) a;
|
||||
int storeSize = aStore.getStoreSize();
|
||||
// skip storeSize + 1 actions (+1 is the current action)
|
||||
Action targetAction = a;
|
||||
for (int i = 0; i <= storeSize; i++) {
|
||||
long address = targetAction.getAddress() + getTotalActionLength(targetAction);
|
||||
long address = targetAction.getAddress() + targetAction.getTotalActionLength();
|
||||
targetAction = actionMap.get(address);
|
||||
if (targetAction == null) {
|
||||
break;
|
||||
@@ -387,7 +376,7 @@ public class ActionListReader {
|
||||
int length = a.getBytes(version).length;
|
||||
if ((i != actions.size() - 1) && (a instanceof ActionEnd)) {
|
||||
// placeholder for jump action
|
||||
length = getTotalActionLength(new ActionJump(0));
|
||||
length = new ActionJump(0).getTotalActionLength();
|
||||
}
|
||||
address += length;
|
||||
}
|
||||
@@ -412,7 +401,7 @@ public class ActionListReader {
|
||||
Action a1 = a;
|
||||
List<Action> store = new ArrayList<>();
|
||||
while (true) {
|
||||
long address = a1.getAddress() + getTotalActionLength(a1);
|
||||
long address = a1.getAddress() + a1.getTotalActionLength();
|
||||
a1 = actionMap.get(address);
|
||||
if (a1 == null || a1 == nextActionAfterStore) {
|
||||
break;
|
||||
@@ -433,7 +422,7 @@ public class ActionListReader {
|
||||
long startAddress = a.getAddress() + container.getHeaderSize();
|
||||
for (int j = 0; j < lastActions.size(); j++) {
|
||||
Action lastAction = lastActions.get(j);
|
||||
int length = (int) (lastAction.getAddress() + getTotalActionLength(lastAction) - startAddress);
|
||||
int length = (int) (lastAction.getAddress() + lastAction.getTotalActionLength() - startAddress);
|
||||
container.setContainerSize(j, length);
|
||||
startAddress += length;
|
||||
}
|
||||
@@ -469,7 +458,7 @@ public class ActionListReader {
|
||||
Action a = actions.get(i);
|
||||
if ((i != actions.size() - 1) && (a instanceof ActionEnd)) {
|
||||
ActionJump aJump = new ActionJump(0);
|
||||
aJump.setJumpOffset((int) (endAddress - a.getAddress() - getTotalActionLength(aJump)));
|
||||
aJump.setJumpOffset((int) (endAddress - a.getAddress() - aJump.getTotalActionLength()));
|
||||
aJump.setAddress(a.getAddress(), version);
|
||||
replaceJumpTargets(jumps, a, aJump);
|
||||
replaceContainerLastActions(containerLastActions, a, aJump);
|
||||
@@ -480,9 +469,9 @@ public class ActionListReader {
|
||||
Action target = jumps.get(a);
|
||||
long offset;
|
||||
if (target != null) {
|
||||
offset = target.getAddress() - a.getAddress() - getTotalActionLength(a);
|
||||
offset = target.getAddress() - a.getAddress() - a.getTotalActionLength();
|
||||
} else {
|
||||
offset = endAddress - a.getAddress() - getTotalActionLength(a);
|
||||
offset = endAddress - a.getAddress() - a.getTotalActionLength();
|
||||
}
|
||||
aIf.setJumpOffset((int) offset);
|
||||
} else if (a instanceof ActionJump) {
|
||||
@@ -490,9 +479,9 @@ public class ActionListReader {
|
||||
Action target = jumps.get(a);
|
||||
long offset;
|
||||
if (target != null) {
|
||||
offset = target.getAddress() - a.getAddress() - getTotalActionLength(a);
|
||||
offset = target.getAddress() - a.getAddress() - a.getTotalActionLength();
|
||||
} else {
|
||||
offset = endAddress - a.getAddress() - getTotalActionLength(a);
|
||||
offset = endAddress - a.getAddress() - a.getTotalActionLength();
|
||||
}
|
||||
aJump.setJumpOffset((int) offset);
|
||||
}
|
||||
@@ -531,7 +520,7 @@ public class ActionListReader {
|
||||
long startIp = actions.get(0).getAddress();
|
||||
Action lastAction = actions.get(actions.size() - 1);
|
||||
int lastIdx = (int) lastAction.getAddress();
|
||||
long endAddress = lastAction.getAddress() + getTotalActionLength(lastAction);
|
||||
long endAddress = lastAction.getAddress() + lastAction.getTotalActionLength();
|
||||
|
||||
List<Action> actionMap = new ArrayList<>(lastIdx);
|
||||
for (int i = 0; i <= lastIdx; i++) {
|
||||
@@ -608,16 +597,16 @@ public class ActionListReader {
|
||||
break;
|
||||
}
|
||||
|
||||
int actionLengthWithHeader = getTotalActionLength(a);
|
||||
int actionLengthWithHeader = a.getTotalActionLength();
|
||||
|
||||
// unknown action, replace with jump
|
||||
if (a instanceof ActionNop) {
|
||||
ActionJump aJump = new ActionJump(0);
|
||||
int jumpLength = getTotalActionLength(aJump);
|
||||
int jumpLength = aJump.getTotalActionLength();
|
||||
aJump.setAddress(a.getAddress(), version);
|
||||
aJump.setJumpOffset(actionLengthWithHeader - jumpLength);
|
||||
a = aJump;
|
||||
actionLengthWithHeader = getTotalActionLength(a);
|
||||
actionLengthWithHeader = a.getTotalActionLength();
|
||||
}
|
||||
|
||||
if (entryAction == null) {
|
||||
@@ -688,10 +677,6 @@ public class ActionListReader {
|
||||
return entryAction;
|
||||
}
|
||||
|
||||
private static int getTotalActionLength(Action action) {
|
||||
return action.actionLength + 1 + ((action.actionCode >= 0x80) ? 2 : 0);
|
||||
}
|
||||
|
||||
private static void ensureCapacity(List<Action> actions, List<Long> nextOffsets, long index) {
|
||||
while (actions.size() <= index) {
|
||||
actions.add(null);
|
||||
@@ -715,7 +700,7 @@ public class ActionListReader {
|
||||
throw new InterruptedException();
|
||||
}
|
||||
|
||||
int actionLen = getTotalActionLength(a);
|
||||
int actionLen = a.getTotalActionLength();
|
||||
if (!visited.containsKey(ip)) {
|
||||
visited.put(ip, 0);
|
||||
}
|
||||
@@ -725,7 +710,7 @@ public class ActionListReader {
|
||||
for (int i = 0; i < listeners.size(); i++) {
|
||||
listeners.get(i).progress(AppStrings.translate("disassemblingProgress.deobfuscating"), ip, actions.size());
|
||||
}
|
||||
int info = a.actionLength + 1 + ((a.actionCode >= 0x80) ? 2 : 0);
|
||||
int info = a.getTotalActionLength();
|
||||
|
||||
if (a instanceof ActionPush) {
|
||||
if (cpool != null) {
|
||||
|
||||
@@ -457,9 +457,12 @@ public class ASMParser {
|
||||
lexer = new FlasmLexer(new StringReader(source));
|
||||
List<Label> labels = new ArrayList<>();
|
||||
List<Action> ret = parse(ignoreNops, labels, address, lexer, constantPool, version);
|
||||
List<Action> links = Action.getActionsAllIfsOrJumps(ret);
|
||||
//Action.setActionsAddresses(ret, address, version);
|
||||
for (Action link : links) {
|
||||
for (Action link : ret) {
|
||||
if (!(link instanceof ActionIf || link instanceof ActionJump)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean found = false;
|
||||
String identifier = null;
|
||||
if (link instanceof ActionJump) {
|
||||
@@ -473,8 +476,7 @@ public class ASMParser {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (link instanceof ActionIf) {
|
||||
} else if (link instanceof ActionIf) {
|
||||
identifier = ((ActionIf) link).identifier;
|
||||
|
||||
for (Label label : labels) {
|
||||
@@ -485,13 +487,12 @@ public class ASMParser {
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((link instanceof ActionJump) || (link instanceof ActionIf)) {
|
||||
if (!found) {
|
||||
if (throwOnError) {
|
||||
throw new ParseException("TARGET NOT FOUND - identifier:" + identifier + " addr: ofs" + Helper.formatAddress(link.getAddress()), -1);
|
||||
} else {
|
||||
Logger.getLogger(ASMParser.class.getName()).log(Level.SEVERE, "TARGET NOT FOUND - identifier:" + identifier + " addr: ofs" + Helper.formatAddress(link.getAddress()));
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
if (throwOnError) {
|
||||
throw new ParseException("TARGET NOT FOUND - identifier:" + identifier + " addr: ofs" + Helper.formatAddress(link.getAddress()), -1);
|
||||
} else {
|
||||
Logger.getLogger(ASMParser.class.getName()).log(Level.SEVERE, "TARGET NOT FOUND - identifier:" + identifier + " addr: ofs" + Helper.formatAddress(link.getAddress()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,6 @@ import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.helpers.Helper;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -59,14 +58,8 @@ public class ActionIf extends Action {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getAllRefs(int version) {
|
||||
List<Long> ret = new ArrayList<>();
|
||||
ret.add(getRef(version));
|
||||
return ret;
|
||||
}
|
||||
|
||||
public long getRef(int version) {
|
||||
return getAddress() + getBytes(version).length + offset;
|
||||
public void getRef(List<Long> refs) {
|
||||
refs.add(getAddress() + getTotalActionLength() + offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,7 +28,6 @@ import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.helpers.Helper;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -59,14 +58,8 @@ public class ActionJump extends Action {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getAllRefs(int version) {
|
||||
List<Long> ret = new ArrayList<>();
|
||||
ret.add(getRef(version));
|
||||
return ret;
|
||||
}
|
||||
|
||||
public long getRef(int version) {
|
||||
return getAddress() + getBytes(version).length + offset;
|
||||
public void getRef(List<Long> refs) {
|
||||
refs.add(getAddress() + getTotalActionLength() + offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -96,9 +96,9 @@ public class Configuration {
|
||||
@ConfigurationCategory("display")
|
||||
public static final ConfigurationItem<Boolean> dumpView = null;
|
||||
|
||||
@ConfigurationDefaultBoolean(true)
|
||||
@ConfigurationDefaultBoolean(false)
|
||||
@ConfigurationCategory("display")
|
||||
public static final ConfigurationItem<Boolean> dumpInfoCollecting = null;
|
||||
public static final ConfigurationItem<Boolean> lazyDumpInfoCollecting = null;
|
||||
|
||||
@ConfigurationDefaultBoolean(false)
|
||||
@ConfigurationCategory("ui")
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
package com.jpexs.decompiler.flash.dumpview;
|
||||
|
||||
import com.jpexs.decompiler.flash.tags.TagStub;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -27,6 +28,7 @@ public class DumpInfo {
|
||||
|
||||
public String name;
|
||||
public String type;
|
||||
public TagStub tagToResolve = null;
|
||||
|
||||
public Object previewValue;
|
||||
|
||||
|
||||
@@ -667,7 +667,7 @@ public class GenericTagTreePanel extends GenericTagPanel {
|
||||
SWFInputStream tagDataStream = new SWFInputStream(swf, data, 0, data.length);
|
||||
TagStub copy = new TagStub(swf, tag.getId(), "Unresolved", tag.getOriginalRange(), tagDataStream);
|
||||
copy.forceWriteAsLong = tag.forceWriteAsLong;
|
||||
this.editedTag = SWFInputStream.resolveTag(copy, 0, false, true, swf.gfx);
|
||||
this.editedTag = SWFInputStream.resolveTag(copy, 0, false, true);
|
||||
} catch (InterruptedException ex) {
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(GenericTagTreePanel.class.getName()).log(Level.SEVERE, null, ex);
|
||||
|
||||
@@ -17,10 +17,15 @@
|
||||
package com.jpexs.decompiler.flash.gui.dumpview;
|
||||
|
||||
import com.jpexs.decompiler.flash.SWF;
|
||||
import com.jpexs.decompiler.flash.SWFInputStream;
|
||||
import com.jpexs.decompiler.flash.dumpview.DumpInfo;
|
||||
import com.jpexs.decompiler.flash.tags.TagStub;
|
||||
import com.jpexs.decompiler.flash.treeitems.SWFList;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.event.TreeModelListener;
|
||||
import javax.swing.tree.TreeModel;
|
||||
import javax.swing.tree.TreePath;
|
||||
@@ -88,12 +93,26 @@ public class DumpTreeModel implements TreeModel {
|
||||
|
||||
@Override
|
||||
public int getChildCount(Object o) {
|
||||
return ((DumpInfo) o).getChildCount();
|
||||
DumpInfo di = (DumpInfo) o;
|
||||
if (di.tagToResolve != null) {
|
||||
TagStub tagStub = di.tagToResolve;
|
||||
try {
|
||||
SWFInputStream sis = tagStub.getDataStream();
|
||||
sis.seek(tagStub.getDataPos());
|
||||
sis.dumpInfo = di;
|
||||
SWFInputStream.resolveTag(tagStub, 0, false, true);
|
||||
} catch (InterruptedException | IOException ex) {
|
||||
Logger.getLogger(DumpTreeModel.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
di.tagToResolve = null;
|
||||
}
|
||||
return di.getChildCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLeaf(Object o) {
|
||||
return ((DumpInfo) o).getChildCount() == 0;
|
||||
DumpInfo di = (DumpInfo) o;
|
||||
return (di.tagToResolve == null) && di.getChildCount() == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -60,8 +60,8 @@ config.description.decompile = You can disable AS decompilation, then only P-cod
|
||||
config.name.dumpView = Dump View
|
||||
config.description.dumpView = View raw data dump
|
||||
|
||||
config.name.dumpInfoCollecting = Dump Info Collecting
|
||||
config.description.dumpInfoCollecting = Enable/disable information collecting for raw data view
|
||||
config.name.lazyDumpInfoCollecting = Dump Info Collecting
|
||||
config.description.lazyDumpInfoCollecting = Enable/disable information collecting for raw data view
|
||||
|
||||
config.name.parallelSpeedUp = Parallel SpeedUp
|
||||
config.description.parallelSpeedUp = Parallelism can speed up decompilation
|
||||
|
||||
@@ -256,5 +256,5 @@ config.description.textExportExportFontFace = Vkl\u00e1dat soubory p\u00edsem do
|
||||
config.name.dumpView = Dump zobrazen\u00ed
|
||||
config.description.dumpView = Zobrazit dump raw dat
|
||||
|
||||
config.name.dumpInfoCollecting = Sb\u011br informac\u00ed pro dump
|
||||
config.description.dumpInfoCollecting = Povolit/Zak\u00e1zat sb\u011br informac\u00ed pro zobrazen\u00ed raw dat
|
||||
config.name.lazyDumpInfoCollecting = Sb\u011br informac\u00ed pro dump
|
||||
config.description.lazyDumpInfoCollecting = Povolit/Zak\u00e1zat sb\u011br informac\u00ed pro zobrazen\u00ed raw dat
|
||||
@@ -1,259 +1,259 @@
|
||||
# Copyright (C) 2010-2014 JPEXS
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
advancedSettings.dialog.title = Param\u00e8tres avanc\u00e9s
|
||||
advancedSettings.restartConfirmation = Vous devez red\u00e9marrer le programme pour que les changements prennent effet. Voulez-vous le red\u00e9marrer maintenant ?
|
||||
advancedSettings.columns.name = Nom
|
||||
advancedSettings.columns.value = Valeur
|
||||
advancedSettings.columns.description = Description
|
||||
default = D\u00e9faut
|
||||
|
||||
config.group.name.export = Export
|
||||
config.group.description.export = Configuration de l'export
|
||||
|
||||
config.group.name.script = Scripts
|
||||
config.group.description.script = ActionScript decompilation related
|
||||
|
||||
config.group.name.update = Mises \u00e0 jour
|
||||
config.group.description.update = Recherche de mises \u00e0 jour
|
||||
|
||||
config.group.name.format = Mise en forme
|
||||
config.group.description.format = Mise en forme du code ActionScript
|
||||
|
||||
config.group.name.limit = Limites
|
||||
config.group.description.limit = Limites de la d\u00e9compilation du code crypt\u00e9, etc.
|
||||
|
||||
config.group.name.ui = Interface
|
||||
config.group.description.ui = Configuration de l'interface utilisateur
|
||||
|
||||
config.group.name.debug = Deboggage
|
||||
config.group.description.debug = Param\u00e8tres de d\u00e9boggage
|
||||
|
||||
config.group.name.display = Affichage
|
||||
config.group.description.display = Affichage des objets Flash, etc.
|
||||
|
||||
config.group.name.decompilation = D\u00e9compilation
|
||||
config.group.description.decompilation = Fonctions relatives l'int\u00e9gralit\u00e9 de la d\u00e9compilation
|
||||
|
||||
config.group.name.other = Autres
|
||||
config.group.description.other = Autres configurations
|
||||
|
||||
|
||||
config.name.openMultipleFiles = Ouvrir plusieurs fichiers
|
||||
config.description.openMultipleFiles = Autoiriser l'ouverture de plusieurs fichiers dans une seule fen\u00eatre
|
||||
|
||||
config.name.decompile = Afficher les sources ActionScript
|
||||
config.description.decompile = Vous pouvez d\u00e9sactiver la d\u00e9compilation ActionScript, seul le code Assembleur sera affich\u00e9
|
||||
|
||||
config.name.dumpView = Donn\u00e9es brutes
|
||||
config.description.dumpView = Voir les données brutes
|
||||
|
||||
config.name.dumpInfoCollecting = Recueillir les données d'informations brutes
|
||||
config.description.dumpInfoCollecting = Activer/d\u00e9sactiver l'affichage des donn\u00e9es brutes
|
||||
|
||||
config.name.parallelSpeedUp = Acc\u00e9l\u00e9ration parall\u00e8le
|
||||
config.description.parallelSpeedUp = Le parall\u00e9lisme peut augmenter la vitesse de d\u00e9ompilation
|
||||
|
||||
config.name.parallelThreadCount = Nombre de canaux
|
||||
config.description.parallelThreadCount = Nombre de canaux a utiliser pour l'acc\u00e9l\u00e9ration parall\u00e8le
|
||||
|
||||
config.name.autoDeobfuscate = D\u00e9sobfuscation automatique
|
||||
config.description.autoDeobfuscate = D\u00e9marer la d\u00e9sobfuscation sur l'ensemble des fichiers avant la d\u00e9compilation ActionScript
|
||||
|
||||
config.name.cacheOnDisk = Utilisation de la m\u00e9moire cache du disque
|
||||
config.description.cacheOnDisk = Cache already decompiled parts on hard drive instead of memory
|
||||
|
||||
config.name.internalFlashViewer = Utiliser la visionneuse Flash int\u00e9grUse
|
||||
config.description.internalFlashViewer = Utililser la visionneuse Flash JPEXS au lieu de la visionneuse Flash standard pour afficher les \u00e9l\u00e9ments
|
||||
|
||||
config.name.gotoMainClassOnStartup = Aller \u00e0 la classe d'initialisation (AS3)
|
||||
config.description.gotoMainClassOnStartup = Aller dans la classe de document \u00e0 l'ouverture du fichier AS3
|
||||
|
||||
config.name.autoRenameIdentifiers = Renommage automatique des identifiants
|
||||
config.description.autoRenameIdentifiers = Renommage automatique invalide en chargeant le fichier SWF
|
||||
|
||||
config.name.offeredAssociation = (Interne) Association de fichiers SWF d\u00e9j\u00e0 ouvert
|
||||
config.description.offeredAssociation = La boite de dialogue d'association de fichiers est d\u00e9j\u00e0 ouverte
|
||||
|
||||
config.name.decimalAddress = Utiliser l'adressage d\u00e9cimale
|
||||
config.description.decimalAddress = Utiliser l'adressage d\u00e9cimale au lieu de l'adressage hexad\u00e9cimal
|
||||
|
||||
config.name.showAllAddresses = Afficher toutes les adresses
|
||||
config.description.showAllAddresses = Afficher toutes les instructions ActionScript \u00e0 toutes les adresses
|
||||
|
||||
config.name.useFrameCache = Utiliser la md\u00e9j\u00e0moire cache des images
|
||||
config.description.useFrameCache = Mettre en cache les images avant le nouveau rendu
|
||||
|
||||
config.name.useRibbonInterface = Interface Ruban
|
||||
config.description.useRibbonInterface = D\u00e9cocher pour utiliser l'interface classique sans le menu-ruban
|
||||
|
||||
config.name.openFolderAfterFlaExport = Ouvrir le dossier apr\u00e8s l'export FLA
|
||||
config.description.openFolderAfterFlaExport = Afficher le dossier apr\u00e8s l'export de fichiers FLA
|
||||
|
||||
config.name.useDetailedLogging = Journal d\u00e9taill\u00e9
|
||||
config.description.useDetailedLogging = Les messages d'erreurs et les informations de d\u00e9bogages sont renseign\u00e9s dans le journal d\u00e9taill\u00e9
|
||||
|
||||
config.name.debugMode = Mode d\u00e9boggage
|
||||
config.description.debugMode = Mode for debugging. Turns on debug menu.
|
||||
|
||||
config.name.resolveConstants = R\u00e9soudre les constante dans le code assembleur en AS1/2
|
||||
config.description.resolveConstants = Arr\u00eate d'afficher 'constantxx' au lieu des vraies valeurs dans la fen\u00eatre assembleur
|
||||
|
||||
config.name.sublimiter = Limites du sous-programme
|
||||
config.description.sublimiter = Limites du sous-programme pour du code crypt\u00e9
|
||||
|
||||
config.name.exportTimeout = Limite de temps \u00e9coul\u00e9 \u00e0 l'exportation (secondes)
|
||||
config.description.exportTimeout = Le d\u00e9compileur arr\u00eatera l'exportation d\u00e8 que cette valeur est atteinte
|
||||
|
||||
config.name.decompilationTimeoutFile = Limite de temps pour d\u00e9compiler un fichier (secondes)
|
||||
config.description.decompilationTimeoutFile = Le d\u00e9compileur arr\u00eatera la d\u00e9compilation ActionScript d\u00e8s que cette valeur est atteinte pour un fichier
|
||||
|
||||
config.name.paramNamesEnable = Activer les noms de param\u00e9tre en AS3
|
||||
config.description.paramNamesEnable = L'utilisation des noms de param\u00e9tre en d\u00e8compilant peut causer des probl\u00e8mes parce que le programme officiel CS 5.5 pr\u00e8f\u00e9re Flash ins\u00e8rer des mauvais indices de noms de param\u00e9tres
|
||||
|
||||
config.name.displayFileName = Afficher le nom SWF dans la barre de titre
|
||||
config.description.displayFileName = Afficher l'URL et le nom de fichier dans la barre de titre (Vous pouvez faire des captures d'\u00e8cran)
|
||||
|
||||
config.name.debugCopy = Debug recompile
|
||||
config.description.debugCopy = Tenter de compiler le fichier SWF \u00e0 nouveau apr\u00e8s son ouverture pour s'assurer qu'il produise le m\u00eame code binaire. \u00c0 utiliser uniquement pour le d\u00e9boguage !
|
||||
|
||||
config.name.dumpTags = Dump tags to console
|
||||
config.description.dumpTags = Dump tags to console on reading SWF file
|
||||
|
||||
config.name.decompilationTimeoutSingleMethod = AS3: Single method decompilation timeout (seconds)
|
||||
config.description.decompilationTimeoutSingleMethod = Decompiler will stop ActionScript decompilation after reaching this time in one method
|
||||
|
||||
config.name.lastRenameType = (Internal) Last rename type
|
||||
config.description.lastRenameType = Last used rename identifiers type
|
||||
|
||||
config.name.lastSaveDir = (Interne) Dernier dossier de sauvegarde
|
||||
config.description.lastSaveDir = Dernier dossier de sauvegarde utilis\u00e9
|
||||
|
||||
config.name.lastOpenDir = (Interne) Dernier dossier ouvert
|
||||
config.description.lastOpenDir = Dernier dossier ouvert utilis\u00e9
|
||||
|
||||
config.name.lastExportDir = (Interne) Dernier dossier d'export
|
||||
config.description.lastExportDir = Dernier dossier d'export utilis\u00e9
|
||||
|
||||
config.name.locale = Langues
|
||||
config.description.locale = Param\u00e9tres r\u00e8gionaux
|
||||
|
||||
config.name.registerNameFormat = Format du registre des variables
|
||||
config.description.registerNameFormat = Format du registre local des noms de variables. Utilise %d pour le registre num\u00e8rique.
|
||||
|
||||
config.name.maxRecentFileCount = Nb. max. de fichiers r\u00e8cents
|
||||
config.description.maxRecentFileCount = Nombre maximal de fichiers r\u00e8cents
|
||||
|
||||
config.name.recentFiles = (Interne) Fichiers r\u00e8cents
|
||||
config.description.recentFiles = Fichiers r\u00e8cemment ouverts
|
||||
|
||||
config.name.fontPairing = (Internal) Font pairs for import
|
||||
config.description.fontPairing = Font pairs for importing new characters
|
||||
|
||||
config.name.lastUpdatesCheckDate = (Interne) Date de derni\u00e8re Mises \u00e0 jour
|
||||
config.description.lastUpdatesCheckDate = Date de la derni\u00e8re v\u00e9rification des mises \u00e0 jour sur sur le serveur
|
||||
|
||||
config.name.gui.window.width = (Interne) Derni\u00e8re largeur de fen\u00eatre
|
||||
config.description.gui.window.width = Derni\u00e8re valeur enregistr\u00e9e de la largeur de la fen\u00eatre
|
||||
|
||||
config.name.gui.window.height = (Interne) Derni\u00e8re hauteur de fen\u00eatre
|
||||
config.description.gui.window.height = Derni\u00e7re valeur enregistr\u00e9e de la hauteur de la fen\u00eatre
|
||||
|
||||
config.name.gui.window.maximized.horizontal = (Interne) Agrandissement horizontal de la fen\u00eatre
|
||||
config.description.gui.window.maximized.horizontal = Dernier \u00e9tat de la fen\u00eatre - Agrandissement horizontal
|
||||
|
||||
config.name.gui.window.maximized.vertical = (Interne) Agrandissement vertical de la Fen\u00eatre
|
||||
config.description.gui.window.maximized.vertical = Derni\u00e8r \u00e9tat de la fen\u00eatre - Agrandissement vertical
|
||||
|
||||
config.name.gui.avm2.splitPane.dividerLocation = (Interne) Emplacement du s\u00e9parateur AS3
|
||||
config.description.gui.avm2.splitPane.dividerLocation =
|
||||
|
||||
config.name.guiActionSplitPaneDividerLocation = (Interne) Emplacement du s\u00e9parateur AS1/2
|
||||
config.description.guiActionSplitPaneDividerLocation =
|
||||
|
||||
config.name.guiPreviewSplitPaneDividerLocation = (Interne) Aper\u00e7u de l'emplacement du s\u00e9parateur
|
||||
config.description.guiPreviewSplitPaneDividerLocation =
|
||||
|
||||
config.name.gui.splitPane1.dividerLocation = (Interne) Emplacement du s\u00e9parateur 1
|
||||
config.description.gui.splitPane1.dividerLocation =
|
||||
|
||||
config.name.gui.splitPane2.dividerLocation = (Interne) Emplacement du s\u00e9parateur 2
|
||||
config.description.gui.splitPane2.dividerLocation =
|
||||
|
||||
config.name.saveAsExeScaleMode = Enregistrer en tant qu'\u00e9chelle de mode EXE
|
||||
config.description.saveAsExeScaleMode = Mode de mise \u00e0 l'\u00e9chelle pour un export EXE
|
||||
|
||||
config.name.syntaxHighlightLimit = Nb max de caract\u00e8res surlign\u00e9s
|
||||
config.description.syntaxHighlightLimit = Nombre maximal de caract\u00e8res pour surligner
|
||||
|
||||
config.name.guiFontPreviewSampleText = (Internal) Last font preview sample text
|
||||
config.description.guiFontPreviewSampleText = Last font preview sample text list index
|
||||
|
||||
config.name.gui.fontPreviewWindow.width = (Interne) Derni\u00e8re largeur de fen\u00eatre d'aper\u00e7u des polices de caract\u00e8res
|
||||
config.description.gui.fontPreviewWindow.width =
|
||||
|
||||
config.name.gui.fontPreviewWindow.height = (Interne) Derni\u00e8re hauteur de fen\u00eatre d'aper\u00e7u des polices de caract\u00e8res
|
||||
config.description.gui.fontPreviewWindow.height =
|
||||
|
||||
config.name.gui.fontPreviewWindow.posX = (Interne) Derni\u00e8re position X de la fen\u00eatre d'aper\u00e7u des polices de caract\u00e8res
|
||||
config.description.gui.fontPreviewWindow.posX = Il s'agit de la position de la fen\u00eatre sur l'axe des absisses
|
||||
|
||||
config.name.gui.fontPreviewWindow.posY = (Interne) Derni\u00e8re position Y de la fen\u00eatre d'aper\u00e7u des polices de caract\u00e8res
|
||||
config.description.gui.fontPreviewWindow.posY = Il s'agit de la position de la fen\u00eatre sur l'axe des ordonn\u00e9es
|
||||
|
||||
config.name.formatting.indent.size = Nb de caract\u00e8res par indentation
|
||||
config.description.formatting.indent.size = Nombre d'espaces (ou tabulations) for une indentation
|
||||
|
||||
config.name.formatting.indent.useTabs = Indentation
|
||||
config.description.formatting.indent.useTabs = Utiliser les tabulation au lieu d'espaces pour l'indentation
|
||||
|
||||
config.name.beginBlockOnNewLine = Accolades pour les nouvelle lignes
|
||||
config.description.beginBlockOnNewLine = Commencer les blocs avec des accolades sur les nouvelles lignes
|
||||
|
||||
config.name.check.updates.delay = Intervale de v\u00e8rification des mises \u00e0 jour
|
||||
config.description.check.updates.delay = Intervale minimum entre chaque v\u00e8rification automatique des mises \u00e8 jour lorsque au d\u00e8marrage de l'application
|
||||
|
||||
config.name.check.updates.stable = V\u00e8rification des versions stables
|
||||
config.description.check.updates.stable = V\u00e8rification des mises \u00e0 jour des versions stables
|
||||
|
||||
config.name.check.updates.nightly = V\u00e8rification des versions de tests
|
||||
config.description.check.updates.nightly = V\u00e8rification des mises \u00e0 jour des versions de tests
|
||||
|
||||
config.name.check.updates.enabled = V\u00e8rification automatique activ\u00e8e
|
||||
config.description.check.updates.enabled = V\u00e8rification automatique des mises \u00e0 jour lorsque au d\u00e8marrage de l'application
|
||||
|
||||
config.name.export.formats = (Interne) Formats d'export
|
||||
config.description.export.formats = Derniers formats d'export utilis\u00e8
|
||||
|
||||
config.name.textExportSingleFile = Export de textes dans un seul fichier
|
||||
config.description.textExportSingleFile = Exportation de textes dans un seul fichier plutôt que dans plusieurs
|
||||
|
||||
config.name.textExportSingleFileSeparator = S\u00e8parateur de textes dans un fichier d'export de textes
|
||||
config.description.textExportSingleFileSeparator = Texte \u00e0 ins\u00e8rer entre chaque texte dans un fichier d'export de textes
|
||||
|
||||
config.name.textExportSingleFileRecordSeparator = S\u00e8parateur d'enregistrement dans un fichier d'export de textes
|
||||
config.description.textExportSingleFileRecordSeparator = Texte \u00e0 ins\u00e8rer entre chaque enregistrement dans un fichier d'export de textes
|
||||
|
||||
config.name.warning.experimental.as12edit = Alerte lors d'\u00e8dition en AS1/2
|
||||
config.description.warning.experimental.as12edit = Afficher l'avertissement lors de l'\u00e8dition exp\u00e8rimentale des scripts AS1/2
|
||||
|
||||
config.name.warning.experimental.as3edit = Alerte lors d'\u00e8dition en AS3
|
||||
config.description.warning.experimental.as3edit = Afficher l'avertissement lors de l'\u00e8dition exp\u00e8rimentale des scripts AS3
|
||||
|
||||
config.name.packJavaScripts = Paquet JavaScripts
|
||||
config.description.packJavaScripts = Démarrer le paquet avaScript sur des scripts cr\u00e8\u00e8s lors de l'exportation de dessins.
|
||||
|
||||
config.name.textExportExportFontFace = Use font-face in SVG export
|
||||
config.description.textExportExportFontFace = Embed font files in SVG using font-face instead of shapes
|
||||
# Copyright (C) 2010-2014 JPEXS
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
advancedSettings.dialog.title = Param\u00e8tres avanc\u00e9s
|
||||
advancedSettings.restartConfirmation = Vous devez red\u00e9marrer le programme pour que les changements prennent effet. Voulez-vous le red\u00e9marrer maintenant ?
|
||||
advancedSettings.columns.name = Nom
|
||||
advancedSettings.columns.value = Valeur
|
||||
advancedSettings.columns.description = Description
|
||||
default = D\u00e9faut
|
||||
|
||||
config.group.name.export = Export
|
||||
config.group.description.export = Configuration de l'export
|
||||
|
||||
config.group.name.script = Scripts
|
||||
config.group.description.script = ActionScript decompilation related
|
||||
|
||||
config.group.name.update = Mises \u00e0 jour
|
||||
config.group.description.update = Recherche de mises \u00e0 jour
|
||||
|
||||
config.group.name.format = Mise en forme
|
||||
config.group.description.format = Mise en forme du code ActionScript
|
||||
|
||||
config.group.name.limit = Limites
|
||||
config.group.description.limit = Limites de la d\u00e9compilation du code crypt\u00e9, etc.
|
||||
|
||||
config.group.name.ui = Interface
|
||||
config.group.description.ui = Configuration de l'interface utilisateur
|
||||
|
||||
config.group.name.debug = Deboggage
|
||||
config.group.description.debug = Param\u00e8tres de d\u00e9boggage
|
||||
|
||||
config.group.name.display = Affichage
|
||||
config.group.description.display = Affichage des objets Flash, etc.
|
||||
|
||||
config.group.name.decompilation = D\u00e9compilation
|
||||
config.group.description.decompilation = Fonctions relatives l'int\u00e9gralit\u00e9 de la d\u00e9compilation
|
||||
|
||||
config.group.name.other = Autres
|
||||
config.group.description.other = Autres configurations
|
||||
|
||||
|
||||
config.name.openMultipleFiles = Ouvrir plusieurs fichiers
|
||||
config.description.openMultipleFiles = Autoiriser l'ouverture de plusieurs fichiers dans une seule fen\u00eatre
|
||||
|
||||
config.name.decompile = Afficher les sources ActionScript
|
||||
config.description.decompile = Vous pouvez d\u00e9sactiver la d\u00e9compilation ActionScript, seul le code Assembleur sera affich\u00e9
|
||||
|
||||
config.name.dumpView = Donn\u00e9es brutes
|
||||
config.description.dumpView = Voir les donn\u00e9es brutes
|
||||
|
||||
config.name.lazyDumpInfoCollecting = Recueillir les donn\u00e9es d'informations brutes
|
||||
config.description.lazyDumpInfoCollecting = Activer/d\u00e9sactiver l'affichage des donn\u00e9es brutes
|
||||
|
||||
config.name.parallelSpeedUp = Acc\u00e9l\u00e9ration parall\u00e8le
|
||||
config.description.parallelSpeedUp = Le parall\u00e9lisme peut augmenter la vitesse de d\u00e9ompilation
|
||||
|
||||
config.name.parallelThreadCount = Nombre de canaux
|
||||
config.description.parallelThreadCount = Nombre de canaux a utiliser pour l'acc\u00e9l\u00e9ration parall\u00e8le
|
||||
|
||||
config.name.autoDeobfuscate = D\u00e9sobfuscation automatique
|
||||
config.description.autoDeobfuscate = D\u00e9marer la d\u00e9sobfuscation sur l'ensemble des fichiers avant la d\u00e9compilation ActionScript
|
||||
|
||||
config.name.cacheOnDisk = Utilisation de la m\u00e9moire cache du disque
|
||||
config.description.cacheOnDisk = Cache already decompiled parts on hard drive instead of memory
|
||||
|
||||
config.name.internalFlashViewer = Utiliser la visionneuse Flash int\u00e9grUse
|
||||
config.description.internalFlashViewer = Utililser la visionneuse Flash JPEXS au lieu de la visionneuse Flash standard pour afficher les \u00e9l\u00e9ments
|
||||
|
||||
config.name.gotoMainClassOnStartup = Aller \u00e0 la classe d'initialisation (AS3)
|
||||
config.description.gotoMainClassOnStartup = Aller dans la classe de document \u00e0 l'ouverture du fichier AS3
|
||||
|
||||
config.name.autoRenameIdentifiers = Renommage automatique des identifiants
|
||||
config.description.autoRenameIdentifiers = Renommage automatique invalide en chargeant le fichier SWF
|
||||
|
||||
config.name.offeredAssociation = (Interne) Association de fichiers SWF d\u00e9j\u00e0 ouvert
|
||||
config.description.offeredAssociation = La boite de dialogue d'association de fichiers est d\u00e9j\u00e0 ouverte
|
||||
|
||||
config.name.decimalAddress = Utiliser l'adressage d\u00e9cimale
|
||||
config.description.decimalAddress = Utiliser l'adressage d\u00e9cimale au lieu de l'adressage hexad\u00e9cimal
|
||||
|
||||
config.name.showAllAddresses = Afficher toutes les adresses
|
||||
config.description.showAllAddresses = Afficher toutes les instructions ActionScript \u00e0 toutes les adresses
|
||||
|
||||
config.name.useFrameCache = Utiliser la md\u00e9j\u00e0moire cache des images
|
||||
config.description.useFrameCache = Mettre en cache les images avant le nouveau rendu
|
||||
|
||||
config.name.useRibbonInterface = Interface Ruban
|
||||
config.description.useRibbonInterface = D\u00e9cocher pour utiliser l'interface classique sans le menu-ruban
|
||||
|
||||
config.name.openFolderAfterFlaExport = Ouvrir le dossier apr\u00e8s l'export FLA
|
||||
config.description.openFolderAfterFlaExport = Afficher le dossier apr\u00e8s l'export de fichiers FLA
|
||||
|
||||
config.name.useDetailedLogging = Journal d\u00e9taill\u00e9
|
||||
config.description.useDetailedLogging = Les messages d'erreurs et les informations de d\u00e9bogages sont renseign\u00e9s dans le journal d\u00e9taill\u00e9
|
||||
|
||||
config.name.debugMode = Mode d\u00e9boggage
|
||||
config.description.debugMode = Mode for debugging. Turns on debug menu.
|
||||
|
||||
config.name.resolveConstants = R\u00e9soudre les constante dans le code assembleur en AS1/2
|
||||
config.description.resolveConstants = Arr\u00eate d'afficher 'constantxx' au lieu des vraies valeurs dans la fen\u00eatre assembleur
|
||||
|
||||
config.name.sublimiter = Limites du sous-programme
|
||||
config.description.sublimiter = Limites du sous-programme pour du code crypt\u00e9
|
||||
|
||||
config.name.exportTimeout = Limite de temps \u00e9coul\u00e9 \u00e0 l'exportation (secondes)
|
||||
config.description.exportTimeout = Le d\u00e9compileur arr\u00eatera l'exportation d\u00e8 que cette valeur est atteinte
|
||||
|
||||
config.name.decompilationTimeoutFile = Limite de temps pour d\u00e9compiler un fichier (secondes)
|
||||
config.description.decompilationTimeoutFile = Le d\u00e9compileur arr\u00eatera la d\u00e9compilation ActionScript d\u00e8s que cette valeur est atteinte pour un fichier
|
||||
|
||||
config.name.paramNamesEnable = Activer les noms de param\u00e9tre en AS3
|
||||
config.description.paramNamesEnable = L'utilisation des noms de param\u00e9tre en d\u00e8compilant peut causer des probl\u00e8mes parce que le programme officiel CS 5.5 pr\u00e8f\u00e9re Flash ins\u00e8rer des mauvais indices de noms de param\u00e9tres
|
||||
|
||||
config.name.displayFileName = Afficher le nom SWF dans la barre de titre
|
||||
config.description.displayFileName = Afficher l'URL et le nom de fichier dans la barre de titre (Vous pouvez faire des captures d'\u00e8cran)
|
||||
|
||||
config.name.debugCopy = Debug recompile
|
||||
config.description.debugCopy = Tenter de compiler le fichier SWF \u00e0 nouveau apr\u00e8s son ouverture pour s'assurer qu'il produise le m\u00eame code binaire. \u00c0 utiliser uniquement pour le d\u00e9boguage !
|
||||
|
||||
config.name.dumpTags = Dump tags to console
|
||||
config.description.dumpTags = Dump tags to console on reading SWF file
|
||||
|
||||
config.name.decompilationTimeoutSingleMethod = AS3: Single method decompilation timeout (seconds)
|
||||
config.description.decompilationTimeoutSingleMethod = Decompiler will stop ActionScript decompilation after reaching this time in one method
|
||||
|
||||
config.name.lastRenameType = (Internal) Last rename type
|
||||
config.description.lastRenameType = Last used rename identifiers type
|
||||
|
||||
config.name.lastSaveDir = (Interne) Dernier dossier de sauvegarde
|
||||
config.description.lastSaveDir = Dernier dossier de sauvegarde utilis\u00e9
|
||||
|
||||
config.name.lastOpenDir = (Interne) Dernier dossier ouvert
|
||||
config.description.lastOpenDir = Dernier dossier ouvert utilis\u00e9
|
||||
|
||||
config.name.lastExportDir = (Interne) Dernier dossier d'export
|
||||
config.description.lastExportDir = Dernier dossier d'export utilis\u00e9
|
||||
|
||||
config.name.locale = Langues
|
||||
config.description.locale = Param\u00e9tres r\u00e8gionaux
|
||||
|
||||
config.name.registerNameFormat = Format du registre des variables
|
||||
config.description.registerNameFormat = Format du registre local des noms de variables. Utilise %d pour le registre num\u00e8rique.
|
||||
|
||||
config.name.maxRecentFileCount = Nb. max. de fichiers r\u00e8cents
|
||||
config.description.maxRecentFileCount = Nombre maximal de fichiers r\u00e8cents
|
||||
|
||||
config.name.recentFiles = (Interne) Fichiers r\u00e8cents
|
||||
config.description.recentFiles = Fichiers r\u00e8cemment ouverts
|
||||
|
||||
config.name.fontPairing = (Internal) Font pairs for import
|
||||
config.description.fontPairing = Font pairs for importing new characters
|
||||
|
||||
config.name.lastUpdatesCheckDate = (Interne) Date de derni\u00e8re Mises \u00e0 jour
|
||||
config.description.lastUpdatesCheckDate = Date de la derni\u00e8re v\u00e9rification des mises \u00e0 jour sur sur le serveur
|
||||
|
||||
config.name.gui.window.width = (Interne) Derni\u00e8re largeur de fen\u00eatre
|
||||
config.description.gui.window.width = Derni\u00e8re valeur enregistr\u00e9e de la largeur de la fen\u00eatre
|
||||
|
||||
config.name.gui.window.height = (Interne) Derni\u00e8re hauteur de fen\u00eatre
|
||||
config.description.gui.window.height = Derni\u00e7re valeur enregistr\u00e9e de la hauteur de la fen\u00eatre
|
||||
|
||||
config.name.gui.window.maximized.horizontal = (Interne) Agrandissement horizontal de la fen\u00eatre
|
||||
config.description.gui.window.maximized.horizontal = Dernier \u00e9tat de la fen\u00eatre - Agrandissement horizontal
|
||||
|
||||
config.name.gui.window.maximized.vertical = (Interne) Agrandissement vertical de la Fen\u00eatre
|
||||
config.description.gui.window.maximized.vertical = Derni\u00e8r \u00e9tat de la fen\u00eatre - Agrandissement vertical
|
||||
|
||||
config.name.gui.avm2.splitPane.dividerLocation = (Interne) Emplacement du s\u00e9parateur AS3
|
||||
config.description.gui.avm2.splitPane.dividerLocation =
|
||||
|
||||
config.name.guiActionSplitPaneDividerLocation = (Interne) Emplacement du s\u00e9parateur AS1/2
|
||||
config.description.guiActionSplitPaneDividerLocation =
|
||||
|
||||
config.name.guiPreviewSplitPaneDividerLocation = (Interne) Aper\u00e7u de l'emplacement du s\u00e9parateur
|
||||
config.description.guiPreviewSplitPaneDividerLocation =
|
||||
|
||||
config.name.gui.splitPane1.dividerLocation = (Interne) Emplacement du s\u00e9parateur 1
|
||||
config.description.gui.splitPane1.dividerLocation =
|
||||
|
||||
config.name.gui.splitPane2.dividerLocation = (Interne) Emplacement du s\u00e9parateur 2
|
||||
config.description.gui.splitPane2.dividerLocation =
|
||||
|
||||
config.name.saveAsExeScaleMode = Enregistrer en tant qu'\u00e9chelle de mode EXE
|
||||
config.description.saveAsExeScaleMode = Mode de mise \u00e0 l'\u00e9chelle pour un export EXE
|
||||
|
||||
config.name.syntaxHighlightLimit = Nb max de caract\u00e8res surlign\u00e9s
|
||||
config.description.syntaxHighlightLimit = Nombre maximal de caract\u00e8res pour surligner
|
||||
|
||||
config.name.guiFontPreviewSampleText = (Internal) Last font preview sample text
|
||||
config.description.guiFontPreviewSampleText = Last font preview sample text list index
|
||||
|
||||
config.name.gui.fontPreviewWindow.width = (Interne) Derni\u00e8re largeur de fen\u00eatre d'aper\u00e7u des polices de caract\u00e8res
|
||||
config.description.gui.fontPreviewWindow.width =
|
||||
|
||||
config.name.gui.fontPreviewWindow.height = (Interne) Derni\u00e8re hauteur de fen\u00eatre d'aper\u00e7u des polices de caract\u00e8res
|
||||
config.description.gui.fontPreviewWindow.height =
|
||||
|
||||
config.name.gui.fontPreviewWindow.posX = (Interne) Derni\u00e8re position X de la fen\u00eatre d'aper\u00e7u des polices de caract\u00e8res
|
||||
config.description.gui.fontPreviewWindow.posX = Il s'agit de la position de la fen\u00eatre sur l'axe des absisses
|
||||
|
||||
config.name.gui.fontPreviewWindow.posY = (Interne) Derni\u00e8re position Y de la fen\u00eatre d'aper\u00e7u des polices de caract\u00e8res
|
||||
config.description.gui.fontPreviewWindow.posY = Il s'agit de la position de la fen\u00eatre sur l'axe des ordonn\u00e9es
|
||||
|
||||
config.name.formatting.indent.size = Nb de caract\u00e8res par indentation
|
||||
config.description.formatting.indent.size = Nombre d'espaces (ou tabulations) for une indentation
|
||||
|
||||
config.name.formatting.indent.useTabs = Indentation
|
||||
config.description.formatting.indent.useTabs = Utiliser les tabulation au lieu d'espaces pour l'indentation
|
||||
|
||||
config.name.beginBlockOnNewLine = Accolades pour les nouvelle lignes
|
||||
config.description.beginBlockOnNewLine = Commencer les blocs avec des accolades sur les nouvelles lignes
|
||||
|
||||
config.name.check.updates.delay = Intervale de v\u00e8rification des mises \u00e0 jour
|
||||
config.description.check.updates.delay = Intervale minimum entre chaque v\u00e8rification automatique des mises \u00e8 jour lorsque au d\u00e8marrage de l'application
|
||||
|
||||
config.name.check.updates.stable = V\u00e8rification des versions stables
|
||||
config.description.check.updates.stable = V\u00e8rification des mises \u00e0 jour des versions stables
|
||||
|
||||
config.name.check.updates.nightly = V\u00e8rification des versions de tests
|
||||
config.description.check.updates.nightly = V\u00e8rification des mises \u00e0 jour des versions de tests
|
||||
|
||||
config.name.check.updates.enabled = V\u00e8rification automatique activ\u00e8e
|
||||
config.description.check.updates.enabled = V\u00e8rification automatique des mises \u00e0 jour lorsque au d\u00e8marrage de l'application
|
||||
|
||||
config.name.export.formats = (Interne) Formats d'export
|
||||
config.description.export.formats = Derniers formats d'export utilis\u00e8
|
||||
|
||||
config.name.textExportSingleFile = Export de textes dans un seul fichier
|
||||
config.description.textExportSingleFile = Exportation de textes dans un seul fichier plut\u00f4t que dans plusieurs
|
||||
|
||||
config.name.textExportSingleFileSeparator = S\u00e8parateur de textes dans un fichier d'export de textes
|
||||
config.description.textExportSingleFileSeparator = Texte \u00e0 ins\u00e8rer entre chaque texte dans un fichier d'export de textes
|
||||
|
||||
config.name.textExportSingleFileRecordSeparator = S\u00e8parateur d'enregistrement dans un fichier d'export de textes
|
||||
config.description.textExportSingleFileRecordSeparator = Texte \u00e0 ins\u00e8rer entre chaque enregistrement dans un fichier d'export de textes
|
||||
|
||||
config.name.warning.experimental.as12edit = Alerte lors d'\u00e8dition en AS1/2
|
||||
config.description.warning.experimental.as12edit = Afficher l'avertissement lors de l'\u00e8dition exp\u00e8rimentale des scripts AS1/2
|
||||
|
||||
config.name.warning.experimental.as3edit = Alerte lors d'\u00e8dition en AS3
|
||||
config.description.warning.experimental.as3edit = Afficher l'avertissement lors de l'\u00e8dition exp\u00e8rimentale des scripts AS3
|
||||
|
||||
config.name.packJavaScripts = Paquet JavaScripts
|
||||
config.description.packJavaScripts = D\u00e9marrer le paquet avaScript sur des scripts cr\u00e8\u00e8s lors de l'exportation de dessins.
|
||||
|
||||
config.name.textExportExportFontFace = Use font-face in SVG export
|
||||
config.description.textExportExportFontFace = Embed font files in SVG using font-face instead of shapes
|
||||
|
||||
@@ -60,8 +60,8 @@ config.description.decompile = Kikapcsolhatja az AS visszaford\u00edt\u00e1s\u00
|
||||
config.name.dumpView = Dump N\u00e9zet
|
||||
config.description.dumpView = Nyers adatok mutat\u00e1sa
|
||||
|
||||
config.name.dumpInfoCollecting = Dump Info Gy\u0171jt\u00e9s
|
||||
config.description.dumpInfoCollecting = Nyers adat n\u00e9zethez sz\u00fcks\u00e9ges inform\u00e1ci\u00f3k gy\u0171jt\u00e9s\u00e9nek enged\u00e9lyez\u00e9se/letilt\u00e1sa
|
||||
config.name.lazyDumpInfoCollecting = Dump Info Gy\u0171jt\u00e9s
|
||||
config.description.lazyDumpInfoCollecting = Nyers adat n\u00e9zethez sz\u00fcks\u00e9ges inform\u00e1ci\u00f3k gy\u0171jt\u00e9s\u00e9nek enged\u00e9lyez\u00e9se/letilt\u00e1sa
|
||||
|
||||
config.name.parallelSpeedUp = P\u00e1rhuzamos gyors\u00edt\u00e1s
|
||||
config.description.parallelSpeedUp = P\u00e1rhuzamos\u00edt\u00e1s fel tudja gyors\u00edtani a visszaford\u00edt\u00e1st
|
||||
|
||||
@@ -60,8 +60,8 @@ config.description.decompile = \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435
|
||||
config.name.dumpView = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0431\u0440\u0430\u0437\u0430
|
||||
config.description.dumpView = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u044b\u0440\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445
|
||||
|
||||
config.name.dumpInfoCollecting = \u0421\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u043e\u0431\u0440\u0430\u0437\u0430
|
||||
config.description.dumpInfoCollecting = \u0412\u043a\u043b / \u0412\u044b\u043a\u043b \u0441\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u043e\u0431\u0440\u0430\u0437\u0430
|
||||
config.name.lazyDumpInfoCollecting = \u0421\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u043e\u0431\u0440\u0430\u0437\u0430
|
||||
config.description.lazyDumpInfoCollecting = \u0412\u043a\u043b / \u0412\u044b\u043a\u043b \u0441\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u043e\u0431\u0440\u0430\u0437\u0430
|
||||
|
||||
config.name.parallelSpeedUp = Parallel SpeedUp
|
||||
config.description.parallelSpeedUp = \u0420\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
|
||||
|
||||
@@ -145,7 +145,7 @@ public class DefineButtonTag extends ButtonTag implements ASMSource {
|
||||
if (actions == null) {
|
||||
actions = getActions();
|
||||
}
|
||||
return Action.actionsToString(listeners, 0, actions, null, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
return Action.actionsToString(listeners, 0, actions, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -208,7 +208,7 @@ public class DefineSpriteTag extends CharacterTag implements Container, Drawable
|
||||
super(sis.getSwf(), ID, "DefineSprite", data);
|
||||
spriteId = sis.readUI16("spriteId");
|
||||
frameCount = sis.readUI16("frameCount");
|
||||
List<Tag> subTags = sis.readTagList(this, level + 1, parallel, skipUnusualTags, true, swf.gfx);
|
||||
List<Tag> subTags = sis.readTagList(this, level + 1, parallel, skipUnusualTags, true);
|
||||
if (subTags.size() > 0 && subTags.get(subTags.size() - 1).getId() == EndTag.ID) {
|
||||
hasEndTag = true;
|
||||
subTags.remove(subTags.size() - 1);
|
||||
|
||||
@@ -95,7 +95,7 @@ public class DoActionTag extends Tag implements ASMSource {
|
||||
if (actions == null) {
|
||||
actions = getActions();
|
||||
}
|
||||
return Action.actionsToString(listeners, 0, actions, null, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
return Action.actionsToString(listeners, 0, actions, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -109,7 +109,7 @@ public class DoInitActionTag extends CharacterIdTag implements ASMSource {
|
||||
if (actions == null) {
|
||||
actions = getActions();
|
||||
}
|
||||
return Action.actionsToString(listeners, 0, actions, null, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
return Action.actionsToString(listeners, 0, actions, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -164,7 +164,7 @@ public class BUTTONCONDACTION implements ASMSource, Exportable, ContainerItem, S
|
||||
if (actions == null) {
|
||||
actions = getActions();
|
||||
}
|
||||
return Action.actionsToString(listeners, 0, actions, null, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
return Action.actionsToString(listeners, 0, actions, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -180,7 +180,7 @@ public class CLIPACTIONRECORD implements ASMSource, Exportable, ContainerItem, S
|
||||
if (actions == null) {
|
||||
actions = getActions();
|
||||
}
|
||||
return Action.actionsToString(listeners, 0, actions, null, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
return Action.actionsToString(listeners, 0, actions, swf.version, exportMode, writer, toString()/*FIXME?*/);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user