diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index adb1273f6..5238b3095 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -72,6 +72,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.abc.types.traits.Traits; import com.jpexs.decompiler.flash.ecma.EcmaScript; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphPart; @@ -705,17 +706,15 @@ public class AVM2Code implements Serializable { return s.toString(); } - public String toString(boolean highlight, ConstantPool constants) { - StringBuilder s = new StringBuilder(); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { int i = 0; for (AVM2Instruction instruction : code) { - s.append(Helper.formatAddress(i)); - s.append(" "); - s.append(instruction.toString(highlight, constants, new ArrayList())); - s.append("\r\n"); + writer.appendNoHilight(Helper.formatAddress(i)); + writer.appendNoHilight(" "); + instruction.toString(writer, constants, new ArrayList()).appendNewLine(); i++; } - return s.toString(); + return writer; } public String toASMSource(ConstantPool constants, Trait trait, MethodInfo info, MethodBody body, boolean hex, boolean highlight) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java index acb7eb45c..a8860a804 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.List; /** @@ -32,8 +33,8 @@ public class CodeStats { public boolean has_activation = false; public InstructionStats[] instructionStats; - public String toString(boolean highlight, ABC abc, List fullyQualifiedNames) { - String ret = "Stats: maxstack=" + maxstack + ", maxscope=" + maxscope + ", maxlocal=" + maxlocal + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, ABC abc, List fullyQualifiedNames) { + writer.appendNoHilight("Stats: maxstack=" + maxstack + ", maxscope=" + maxscope + ", maxlocal=" + maxlocal).appendNewLine(); int i = 0; int ms = 0; for (InstructionStats stats : instructionStats) { @@ -41,10 +42,10 @@ public class CodeStats { if (stats.stackpos > ms) { ms = stats.stackpos; } - ret += "" + i + ":" + stats.stackpos + (deltastack >= 0 ? "+" + deltastack : deltastack) + "," + stats.scopepos + " " + stats.ins.toString(highlight, abc.constants, fullyQualifiedNames) + "\r\n"; + writer.appendNoHilight(i + ":" + stats.stackpos + (deltastack >= 0 ? "+" + deltastack : deltastack) + "," + stats.scopepos + " " + stats.ins.toString(writer, abc.constants, fullyQualifiedNames)).appendNewLine(); i++; } - return ret; + return writer; } public CodeStats(AVM2Code code) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java index b95271319..13bf3965e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java @@ -27,6 +27,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ReturnVoidIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ThrowIns; import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.abc.types.MethodInfo; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSource; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -263,10 +264,10 @@ public class AVM2Instruction implements Serializable, GraphSourceItem { return ignored; } - public String toString(boolean highlight, ConstantPool constants, List fullyQualifiedNames) { - String s = Helper.formatAddress(offset) + " " + Helper.padSpaceRight(Helper.byteArrToString(getBytes()), 30) + definition.instructionName; - s += getParams(constants, fullyQualifiedNames) + getComment(); - return s; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, List fullyQualifiedNames) { + writer.appendNoHilight(Helper.formatAddress(offset) + " " + Helper.padSpaceRight(Helper.byteArrToString(getBytes()), 30) + definition.instructionName); + writer.appendNoHilight(getParams(constants, fullyQualifiedNames) + getComment()); + return writer; } public String toStringNoAddress(ConstantPool constants, List fullyQualifiedNames) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java index c52118f4c..5188de740 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.UnparsedAVM2Item; import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.abc.types.MethodInfo; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -39,7 +40,9 @@ public class NewClassIns extends InstructionDefinition { @Override public void translate(boolean isStatic, int scriptIndex, int classIndex, java.util.HashMap localRegs, Stack stack, java.util.Stack scopeStack, ConstantPool constants, AVM2Instruction ins, MethodInfo[] method_info, List output, MethodBody body, ABC abc, HashMap localRegNames, List fullyQualifiedNames, String path, HashMap localRegsAssignmentIps, int ip, HashMap> refs, AVM2Code code) { int clsIndex = ins.operands[0]; - String baseType = stack.pop().toString(false, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + HilightedTextWriter writer = new HilightedTextWriter(false); + stack.pop().toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + String baseType = writer.toString(); stack.push(new UnparsedAVM2Item(ins, "new " + abc.constants.constant_multiname[abc.instance_info[clsIndex].name_index].getName(constants, fullyQualifiedNames) + ".class extends " + baseType)); } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSuperIns.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSuperIns.java index 02d73c92a..a510a669d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSuperIns.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSuperIns.java @@ -27,6 +27,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetSuperAVM2Item; import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.abc.types.MethodInfo; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -52,7 +53,9 @@ public class SetSuperIns extends InstructionDefinition implements SetTypeIns { public String getObject(Stack stack, ABC abc, AVM2Instruction ins, List output, MethodBody body, HashMap localRegNames, List fullyQualifiedNames) { int multinameIndex = ins.operands[0]; String multiname = resolveMultinameNoPop(1, stack, abc.constants, multinameIndex, ins, fullyQualifiedNames); - String obj = stack.get(1 + resolvedCount(abc.constants, multinameIndex)).toString(false, abc.constants, localRegNames, fullyQualifiedNames); + HilightedTextWriter writer = new HilightedTextWriter(false); + stack.get(1 + resolvedCount(abc.constants, multinameIndex)).toString(writer, abc.constants, localRegNames, fullyQualifiedNames); + String obj = writer.toString(); return obj + ".super." + multiname; } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java index 274f83193..abc4207f2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java @@ -18,8 +18,10 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import static com.jpexs.decompiler.graph.GraphTargetItem.PRECEDENCE_PRIMARY; import com.jpexs.helpers.Helper; import java.util.HashMap; import java.util.List; @@ -35,18 +37,20 @@ public abstract class AVM2Item extends GraphTargetItem { @Override @SuppressWarnings("unchecked") - public String toString(boolean highlight, List localData) { - return toString(highlight, (ConstantPool) localData.get(0), (HashMap) localData.get(1), (List) localData.get(2)); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + return toString(writer, (ConstantPool) localData.get(0), (HashMap) localData.get(1), (List) localData.get(2)); } - public abstract String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames); + public abstract HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames); public String toStringNoH(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return toString(false, constants, localRegNames, fullyQualifiedNames); + HilightedTextWriter writer = new HilightedTextWriter(false); + toString(writer, constants, localRegNames, fullyQualifiedNames); + return writer.toString(); } - public String toStringSemicoloned(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return toString(highlight, constants, localRegNames, fullyQualifiedNames) + (needsSemicolon() ? ";" : ""); + public String toStringSemicoloned(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return toString(writer, constants, localRegNames, fullyQualifiedNames) + (needsSemicolon() ? ";" : ""); } @Override @@ -54,29 +58,45 @@ public abstract class AVM2Item extends GraphTargetItem { return true; } - protected String formatProperty(boolean highlight, ConstantPool constants, GraphTargetItem object, GraphTargetItem propertyName, HashMap localRegNames, List fullyQualifiedNames) { - String obStr = object.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)); - if (object.precedence > PRECEDENCE_PRIMARY) { - obStr = hilight("(", highlight) + obStr + hilight(")", highlight); - } + protected HilightedTextWriter formatProperty(HilightedTextWriter writer, ConstantPool constants, GraphTargetItem object, GraphTargetItem propertyName, HashMap localRegNames, List fullyQualifiedNames) { + boolean empty = false; if (object instanceof LocalRegAVM2Item) { if (((LocalRegAVM2Item) object).computedValue != null) { if (((LocalRegAVM2Item) object).computedValue.getThroughNotCompilable() instanceof FindPropertyAVM2Item) { - obStr = ""; + empty = true; } } } - if (obStr.equals("")) { - return propertyName.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + + if (!empty) { + if (object.precedence > PRECEDENCE_PRIMARY) { + hilight("(", writer); + object.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + hilight(")", writer); + empty = false; + } else { + int writerLength = writer.getLength(); + object.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + if (writerLength == writer.getLength()) { + empty = true; + } + } + } + + if (empty) { + return propertyName.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); } if (propertyName instanceof FullMultinameAVM2Item) { if (((FullMultinameAVM2Item) propertyName).name != null) { - return obStr + propertyName.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + return propertyName.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); } else { - return obStr + hilight(".", highlight) + propertyName.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + hilight(".", writer); + return propertyName.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); } } else { - return obStr + hilight("[", highlight) + propertyName.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight("]", highlight); + hilight("[", writer); + propertyName.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + return hilight("]", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java index 827700253..74f34d560 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; @@ -38,7 +39,9 @@ public class AlchemyLoadAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("op_" + name + "(", highlight) + ofs.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(") /*Alchemy*/", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("op_" + name + "(", writer); + ofs.toString(writer, constants, localRegNames, fullyQualifiedNames); + return hilight(") /*Alchemy*/", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java index 1ab29ec33..727589b1a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; @@ -37,7 +38,9 @@ public class AlchemySignExtendAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("op_" + name + "(", highlight) + value.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(") /*Alchemy*/", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("op_" + name + "(", writer); + value.toString(writer, constants, localRegNames, fullyQualifiedNames); + return hilight(") /*Alchemy*/", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java index bd64d0821..f6c4b60e1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; @@ -39,7 +40,11 @@ public class AlchemyStoreAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("op_" + name + "(", highlight) + ofs.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(",", highlight) + value.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(") /*Alchemy*/", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("op_" + name + "(", writer); + ofs.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(",", writer); + value.toString(writer, constants, localRegNames, fullyQualifiedNames); + return hilight(") /*Alchemy*/", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java index 615d7bb3d..d9c1aa351 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -35,24 +36,23 @@ public class ApplyTypeAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - StringBuilder ret = new StringBuilder(); - ret.append(object.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames))); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + object.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); if (!params.isEmpty()) { - ret.append(hilight(".<", highlight)); + hilight(".<", writer); for (int i = 0; i < params.size(); i++) { if (i > 0) { - ret.append(hilight(",", highlight)); + hilight(",", writer); } GraphTargetItem p = params.get(i); if (p instanceof NullAVM2Item) { - ret.append(hilight("*", highlight)); + hilight("*", writer); } else { - ret.append(p.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames))); + p.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); } } - ret.append(hilight(">", highlight)); + hilight(">", writer); } - return ret.toString(); + return writer; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java index cffea146f..741677135 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,8 +32,8 @@ public class BooleanAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight(value ? "true" : "false", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight(value ? "true" : "false", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java index 0af9b27ae..8e62acdba 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -36,25 +37,28 @@ public class CallAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String args = ""; - for (int a = 0; a < arguments.size(); a++) { - if (a > 0) { - args = args + hilight(",", highlight); - } - args = args + arguments.get(a).toString(highlight, constants, localRegNames, fullyQualifiedNames); - } - /*String recPart = ""; receiver.toString(constants, localRegNames) + hilight(".", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + /*String recPart = ""; receiver.toString(constants, localRegNames) + hilight(".", writer); if (receiver instanceof NewActivationAVM2Item) { recPart = ""; } if (receiver instanceof ThisAVM2Item) { recPart = ""; }*/ - String fstr = function.toString(highlight, constants, localRegNames, fullyQualifiedNames); if (function.precedence > precedence) { - fstr = hilight("(", highlight) + fstr + hilight(")", highlight); + hilight("(", writer); + function.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(")", writer); + } else { + function.toString(writer, constants, localRegNames, fullyQualifiedNames); } - return fstr + hilight("(", highlight) + args + hilight(")", highlight); + hilight("(", writer); + for (int a = 0; a < arguments.size(); a++) { + if (a > 0) { + hilight(",", writer); + } + arguments.get(a).toString(writer, constants, localRegNames, fullyQualifiedNames); + } + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java index 4cdfc1b58..700fbf0fd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -37,14 +38,17 @@ public class CallMethodAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String args = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + receiver.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + hilight(".", writer); + hilight(methodName, writer); + hilight("(", writer); for (int a = 0; a < arguments.size(); a++) { if (a > 0) { - args = args + hilight(",", highlight); + hilight(",", writer); } - args = args + arguments.get(a).toString(highlight, constants, localRegNames, fullyQualifiedNames); + arguments.get(a).toString(writer, constants, localRegNames, fullyQualifiedNames); } - return receiver.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight(".", highlight) + methodName + hilight("(", highlight) + args + hilight(")", highlight); + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java index 5bef793ad..91a54b7f0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -38,14 +39,15 @@ public class CallPropertyAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String args = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + formatProperty(writer, constants, receiver, propertyName, localRegNames, fullyQualifiedNames); + hilight("(", writer); for (int a = 0; a < arguments.size(); a++) { if (a > 0) { - args = args + hilight(",", highlight); + hilight(",", writer); } - args = args + arguments.get(a).toString(highlight, constants, localRegNames, fullyQualifiedNames); + arguments.get(a).toString(writer, constants, localRegNames, fullyQualifiedNames); } - return formatProperty(highlight, constants, receiver, propertyName, localRegNames, fullyQualifiedNames) + hilight("(", highlight) + args + hilight(")", highlight); + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java index 031295ec8..5db55706a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -37,14 +38,17 @@ public class CallStaticAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String args = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + receiver.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + hilight(".", writer); + hilight(methodName, writer); + hilight("(", writer); for (int a = 0; a < arguments.size(); a++) { if (a > 0) { - args = args + hilight(",", highlight); + hilight(",", writer); } - args = args + arguments.get(a).toString(highlight, constants, localRegNames, fullyQualifiedNames); + arguments.get(a).toString(writer, constants, localRegNames, fullyQualifiedNames); } - return receiver.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight(".", highlight) + methodName + hilight("(", highlight) + args + hilight(")", highlight); + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java index 6aa902c3d..4cf3aafc2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; @@ -39,18 +40,21 @@ public class CallSuperAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + if (!receiver.toString(false, constants, localRegNames, fullyQualifiedNames).equals("this.")) { + receiver.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(".", writer); + } + hilight("super.", writer); + multiname.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight("(", writer); String args = ""; for (int a = 0; a < arguments.size(); a++) { if (a > 0) { - args = args + hilight(",", highlight); + hilight(",", writer); } - args = args + arguments.get(a).toString(highlight, constants, localRegNames, fullyQualifiedNames, highlight); + arguments.get(a).toString(writer, constants, localRegNames, fullyQualifiedNames); } - String calee = receiver.toString(highlight, constants, localRegNames, fullyQualifiedNames, highlight) + hilight(".", highlight); - if (Highlighting.stripHilights(calee).equals("this.")) { - calee = ""; - } - return calee + hilight("super.", highlight) + multiname.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight("(", highlight) + args + hilight(")", highlight); + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java index 129898a2c..3ae40bac0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,7 +32,7 @@ public class ClassAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight(className.getName(constants, fullyQualifiedNames), highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight(className.getName(constants, fullyQualifiedNames), writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java index b63981bee..5649c0d22 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.Null; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -36,9 +37,9 @@ public class CoerceAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { //return hilight("("+type+")", highlight)+ - return value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + return value.toString(writer, constants, localRegNames, fullyQualifiedNames); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java index 2457a4c42..97ea2f82e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -34,18 +35,20 @@ public class ConstructAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String argStr = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + if (object instanceof NewFunctionAVM2Item) { + hilight("new ", writer); + return object.toString(writer, constants, localRegNames, fullyQualifiedNames); + } + hilight("new ", writer); + object.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight("(", writer); for (int a = 0; a < args.size(); a++) { if (a > 0) { - argStr = argStr + hilight(",", highlight); + hilight(",", writer); } - argStr = argStr + args.get(a).toString(highlight, constants, localRegNames, fullyQualifiedNames); + args.get(a).toString(writer, constants, localRegNames, fullyQualifiedNames); } - if (object instanceof NewFunctionAVM2Item) { - return hilight("new ", highlight) + object.toString(highlight, constants, localRegNames, fullyQualifiedNames); - } - String obStr = object.toString(highlight, constants, localRegNames, fullyQualifiedNames); - return hilight("new ", highlight) + obStr + hilight("(", highlight) + argStr + hilight(")", highlight); + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java index c1eacce6c..01740f961 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -36,19 +37,21 @@ public class ConstructPropAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String argStr = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("new ", writer); + int idx = writer.getLength(); + object.toString(writer, constants, localRegNames, fullyQualifiedNames); + if (idx > writer.getLength()) { + hilight(".", writer); + } + propertyName.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight("(", writer); for (int a = 0; a < args.size(); a++) { if (a > 0) { - argStr = argStr + hilight(",", highlight); + hilight(",", writer); } - argStr = argStr + args.get(a).toString(highlight, constants, localRegNames, fullyQualifiedNames); + args.get(a).toString(writer, constants, localRegNames, fullyQualifiedNames); } - String objstr = object.toString(highlight, constants, localRegNames, fullyQualifiedNames); - if (!objstr.equals("")) { - objstr += hilight(".", highlight); - } - return hilight("new ", highlight) + objstr + propertyName.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight("(", highlight) + argStr + hilight(")", highlight); - + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java index 43fe52ea2..27f46ba45 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; @@ -35,19 +36,18 @@ public class ConstructSuperAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String argStr = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + if (!object.toString(false, constants, localRegNames, fullyQualifiedNames).equals("this.")) { + object.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(".", writer); + } + hilight("super(", writer); for (int a = 0; a < args.size(); a++) { if (a > 0) { - argStr = argStr + hilight(",", highlight); + hilight(",", writer); } - argStr = argStr + args.get(a).toString(highlight, constants, localRegNames, fullyQualifiedNames); + args.get(a).toString(writer, constants, localRegNames, fullyQualifiedNames); } - String calee = object.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(".", highlight); - if (Highlighting.stripHilights(calee).equals("this.")) { - calee = ""; - } - return calee + hilight("super(", highlight) + argStr + hilight(")", highlight); - + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java index 9dab37cc2..a9d594570 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.EcmaScript; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -35,8 +36,8 @@ public class ConvertAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return value.toString(writer, constants, localRegNames, fullyQualifiedNames); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java index d28709126..0e38d7a5e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,7 +32,8 @@ public class DecLocalAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight(localRegName(localRegNames, regIndex), highlight) + hilight("--", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight(localRegName(localRegNames, regIndex), writer); + return hilight("--", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java index 4ba56ffd0..9ba0d7e8d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.EcmaScript; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -31,8 +32,9 @@ public class DecrementAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return value.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight("-1", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + value.toString(writer, constants, localRegNames, fullyQualifiedNames); + return hilight("-1", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java index 84d90bf55..de9e3286c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -37,7 +38,8 @@ public class DefaultXMLNamespace extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("default xml namespace = ", highlight) + ns.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("default xml namespace = ", writer); + return ns.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java index c2c533238..9d76c891e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -35,7 +36,9 @@ public class EscapeXAttrAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("{", highlight) + value.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight("}", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("{", writer); + value.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + return hilight("}", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java index 70946944f..7c46d83e4 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -37,7 +38,9 @@ public class EscapeXElemAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("{", highlight) + expression.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight("}", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("{", writer); + expression.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + return hilight("}", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java index ee0954b52..407673058 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -37,7 +38,7 @@ public class FilteredCheckAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return object.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return object.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java index 621cfb1b1..d4b3802d0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,7 +32,7 @@ public class FindPropertyAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return writer; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java index e19d9c1fd..229615e77 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,8 +32,8 @@ public class FloatValueAVM2Item extends NumberValueAVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("" + value, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("" + value, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java index ddb1df9a3..7715a034b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.types.Namespace; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -74,22 +75,24 @@ public class FullMultinameAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String ret = ""; - if (name != null) { - ret = hilight("[", highlight) + name.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight("]", highlight); - } else { - ret = hilight(constants.constant_multiname[multinameIndex].getName(constants, fullyQualifiedNames), highlight); - } + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { if (namespace != null) { - ret = namespace.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight("::", highlight) + ret; + namespace.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight("::", writer); } else { /*Namespace ns = constants.constant_multiname[multinameIndex].getNamespace(constants); if ((ns != null)&&(ns.name_index!=0)) { ret = hilight(ns.getName(constants) + "::")+ret; }*/ } - return ret; + if (name != null) { + hilight("[", writer); + name.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight("]", writer); + } else { + hilight(constants.constant_multiname[multinameIndex].getName(constants, fullyQualifiedNames), writer); + } + return writer; } public boolean compareSame(FullMultinameAVM2Item other) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java index dd02e3cc9..960809cb8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -34,7 +35,9 @@ public class GetDescendantsAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return object.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight("..", highlight) + multiname.toString(highlight, constants, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + object.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight("..", writer); + return multiname.toString(writer, constants, localRegNames, fullyQualifiedNames); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java index 91136d1d4..fe98bf969 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -32,7 +33,7 @@ public class GetLexAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight(propertyName.getName(constants, fullyQualifiedNames), highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight(propertyName.getName(constants, fullyQualifiedNames), writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java index b145bb21b..1010ce893 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -34,7 +35,7 @@ public class GetPropertyAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return formatProperty(highlight, constants, object, propertyName, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return formatProperty(writer, constants, object, propertyName, localRegNames, fullyQualifiedNames); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java index f241033f8..b948947ad 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -35,10 +36,10 @@ public class GetSlotAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { if (slotName == null) { - return hilight("/*UnknownSlot*/", highlight); + return hilight("/*UnknownSlot*/", writer); } - return hilight(slotName.getName(constants, fullyQualifiedNames), highlight); + return hilight(slotName.getName(constants, fullyQualifiedNames), writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java index 2bd72cc76..49f31d95e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; @@ -35,11 +36,12 @@ public class GetSuperAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String calee = object.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(".", highlight); - if (Highlighting.stripHilights(calee).equals("this.")) { - calee = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + if (!object.toString(false, constants, localRegNames, fullyQualifiedNames).equals("this.")) { + object.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(".", writer); } - return calee + hilight("super.", highlight) + propertyName.toString(highlight, constants, localRegNames, fullyQualifiedNames); + hilight("super.", writer); + return propertyName.toString(writer, constants, localRegNames, fullyQualifiedNames); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java index a880fd3dc..40c0afcb1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -39,7 +40,9 @@ public class HasNextAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return collection.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight(" hasNext ", highlight) + object.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + collection.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + hilight(" hasNext ", writer); + return object.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java index a8e0ba1e7..cfb86edd9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -34,7 +35,9 @@ public class InAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return object.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(" in ", highlight) + collection.toString(highlight, constants, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + object.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(" in ", writer); + return collection.toString(writer, constants, localRegNames, fullyQualifiedNames); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java index 362b7bf12..617780170 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,7 +32,8 @@ public class IncLocalAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight(localRegName(localRegNames, regIndex), highlight) + hilight("++", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight(localRegName(localRegNames, regIndex), writer); + return hilight("++", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java index e9b81d42c..4c1c76ae0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.EcmaScript; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -31,8 +32,9 @@ public class IncrementAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return value.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight("+1", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + value.toString(writer, constants, localRegNames, fullyQualifiedNames); + return hilight("+1", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java index 6665ec564..8faeab014 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -37,8 +38,10 @@ public class InitPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, A } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return formatProperty(highlight, constants, object, propertyName, localRegNames, fullyQualifiedNames) + hilight(" = ", highlight) + value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + formatProperty(writer, constants, object, propertyName, localRegNames, fullyQualifiedNames); + hilight(" = ", writer); + return value.toString(writer, constants, localRegNames, fullyQualifiedNames); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java index 4165147df..be77a631c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,8 +32,8 @@ public class IntegerValueAVM2Item extends NumberValueAVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("" + value, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("" + value, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java index 8b682048d..fe8e025bc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.FilterAVM2Item; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -49,11 +50,11 @@ public class LocalRegAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { if (computedValue instanceof FilterAVM2Item) { - return computedValue.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + return computedValue.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); } - return hilight(localRegName(localRegNames, regIndex), highlight); + return hilight(localRegName(localRegNames, regIndex), writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java index 3efa171a6..2c3d4e4a9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,10 +32,10 @@ public class NameSpaceAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { if (namespaceIndex == 0) { - return hilight("*", highlight); + return hilight("*", writer); } - return hilight(constants.constant_namespace[namespaceIndex].toString(constants), highlight); + return hilight(constants.constant_namespace[namespaceIndex].toString(constants), writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java index a1c7d4c4f..bc926bcca 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.model.TernarOpItem; import java.util.HashMap; @@ -34,11 +35,16 @@ public class NameValuePair extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String valueStr = value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + name.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(":", writer); if (value instanceof TernarOpItem) { //Ternar operator contains ":" - valueStr = hilight("(", highlight) + valueStr + hilight(")", highlight); + hilight("(", writer); + value.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(")", writer); + } else { + value.toString(writer, constants, localRegNames, fullyQualifiedNames); } - return name.toString(highlight, constants, localRegNames, fullyQualifiedNames) + ":" + valueStr; + return writer; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java index 5221d6510..2caeb2dc1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -28,7 +29,7 @@ public class NanAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("NaN", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("NaN", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java index 90340490d..6e13fc904 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -31,7 +32,7 @@ public class NewActivationAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("newactivation()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("newactivation()", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java index c8daeb43b..f2946a768 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -32,14 +33,14 @@ public class NewArrayAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String args = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("[", writer); for (int a = 0; a < values.size(); a++) { if (a > 0) { - args = args + hilight(",", highlight); + hilight(",", writer); } - args = args + values.get(a).toString(highlight, constants, localRegNames, fullyQualifiedNames); + values.get(a).toString(writer, constants, localRegNames, fullyQualifiedNames); } - return hilight("[", highlight) + args + hilight("]", highlight); + return hilight("]", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java index a66f82028..02048f565 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.graph.Graph; import java.util.HashMap; @@ -41,15 +42,18 @@ public class NewFunctionAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String ret = hilight("function" + (!functionName.equals("") ? " " + functionName : ""), highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("function" + (!functionName.equals("") ? " " + functionName : ""), writer); + boolean highlight = writer.getIsHighlighted(); String mhead = "(" + (highlight ? paramStr : Highlighting.stripHilights(paramStr)) + "):" + (highlight ? returnStr : Highlighting.stripHilights(returnStr)); - ret += highlight ? Highlighting.hilighMethod(mhead, methodIndex) : mhead; - ret += "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; - ret += (highlight ? functionBody : Highlighting.stripHilights(functionBody)) + "\r\n"; - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); - return ret; + writer.appendNoHilight(writer.getIsHighlighted() ? Highlighting.hilighMethod(mhead, methodIndex) : mhead); + writer.appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); + writer.appendNoHilight((writer.getIsHighlighted() ? functionBody : Highlighting.stripHilights(functionBody))); + writer.appendNewLine(); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer); + return writer; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java index a380c4bf4..830296d20 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Graph; import java.util.HashMap; import java.util.List; @@ -32,23 +33,32 @@ public class NewObjectAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String params = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + boolean singleLine = pairs.size() < 2; + if (!singleLine) { + writer.appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); + } + hilight("{", writer); + if (!singleLine) { + writer.appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); + } for (int n = 0; n < pairs.size(); n++) { if (n > 0) { - params += hilight(",", highlight) + "\r\n"; + hilight(",", writer).appendNewLine(); } - params += pairs.get(n).toString(highlight, constants, localRegNames, fullyQualifiedNames); + pairs.get(n).toString(writer, constants, localRegNames, fullyQualifiedNames); } - if (pairs.size() < 2) { - return hilight("{", highlight) + params + hilight("}", highlight); + if (!singleLine) { + writer.appendNewLine(); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); } - String ret = "\r\n" + Graph.INDENTOPEN + "\r\n"; - ret += hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; - ret += params + "\r\n"; - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n" + Graph.INDENTCLOSE + "\r\n"; - return ret; + hilight("}", writer); + if (!singleLine) { + writer.appendNewLine(); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + } + return writer; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java index 9c5362068..d7c593495 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -39,7 +40,11 @@ public class NextNameAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("nextName(", highlight) + index.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight(",", highlight) + obj.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("nextName(", writer); + index.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + hilight(",", writer); + obj.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java index 38d2d65f6..aa030790b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -39,7 +40,11 @@ public class NextValueAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("nextValue(", highlight) + index.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight(",", highlight) + obj.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("nextValue(", writer); + index.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + hilight(",", writer); + obj.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java index 18baf5410..5dcedcae5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.Null; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -29,8 +30,8 @@ public class NullAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("null", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("null", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java index 08ecbb9bd..96deb4a8f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -34,8 +35,9 @@ public class PostDecrementAVM2Item extends AVM2Item implements AssignmentAVM2Ite } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return object.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight("--", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + object.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + return hilight("--", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java index 1c88d3bc8..c85520a2c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -34,8 +35,9 @@ public class PostIncrementAVM2Item extends AVM2Item implements AssignmentAVM2Ite } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return object.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight("++", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + object.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + return hilight("++", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java index e70cce747..81807b36d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.model.ExitItem; @@ -33,12 +34,8 @@ public class ReturnValueAVM2Item extends AVM2Item implements ExitItem { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String vaStr = value.toString(highlight, constants, localRegNames, fullyQualifiedNames); - String prefix = "\r\n" + Graph.INDENTOPEN + "\r\n"; - if (vaStr.startsWith(prefix)) { //NewObjectAVM2Item - vaStr = vaStr.substring(prefix.length()); - } - return hilight("return ", highlight) + vaStr; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("return ", writer); + return value.toString(writer, constants, localRegNames, fullyQualifiedNames); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java index 16e002fae..2848e356c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.model.ExitItem; import java.util.HashMap; import java.util.List; @@ -29,7 +30,7 @@ public class ReturnVoidAVM2Item extends AVM2Item implements ExitItem { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("return", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("return", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java index 64ed2073e..75465b2e5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -34,7 +35,7 @@ public class ScriptAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("script" + scriptIndex, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("script" + scriptIndex, writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java index 46cb8d3e1..2f1af41fc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; @@ -40,8 +41,10 @@ public class SetGlobalSlotAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("setglobalslot(" + slotId + ",", highlight) + value.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("setglobalslot(" + slotId + ",", writer); + value.toString(writer, constants, localRegNames, fullyQualifiedNames); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java index 0e7495e65..0b4666117 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -35,8 +36,9 @@ public class SetLocalAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assig } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight(localRegName(localRegNames, regIndex) + " = ", highlight) + value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight(localRegName(localRegNames, regIndex) + " = ", writer); + return value.toString(writer, constants, localRegNames, fullyQualifiedNames); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java index 833130922..b278932c6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; @@ -43,8 +44,10 @@ public class SetPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, As } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return formatProperty(highlight, constants, object, propertyName, localRegNames, fullyQualifiedNames) + hilight(" = ", highlight) + value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + formatProperty(writer, constants, object, propertyName, localRegNames, fullyQualifiedNames); + hilight(" = ", writer); + return value.toString(writer, constants, localRegNames, fullyQualifiedNames); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java index 729f2156b..01a46f207 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; @@ -44,12 +45,13 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - - return getName(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(" = ", highlight) + value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + getName(writer, constants, localRegNames, fullyQualifiedNames); + hilight(" = ", writer); + return value.toString(writer, constants, localRegNames, fullyQualifiedNames); } - public String getName(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + public String getName(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { String ret = ""; /*ret = scope.toString(constants, localRegNames) + "."; @@ -64,9 +66,9 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign } }*/ if (slotName == null) { - return ret + hilight("/*UnknownSlot*/", highlight); + return ret + hilight("/*UnknownSlot*/", writer); } - return ret + hilight(slotName.getName(constants, fullyQualifiedNames), highlight); + return ret + hilight(slotName.getName(constants, fullyQualifiedNames), writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java index e015d5856..0fa64635f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -43,12 +44,15 @@ public class SetSuperAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String calee = object.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(".", highlight); - if (Highlighting.stripHilights(calee).equals("this.")) { - calee = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + if (!object.toString(false, constants, localRegNames, fullyQualifiedNames).equals("this.")) { + object.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(".", writer); } - return calee + hilight("super.", highlight) + propertyName.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(" = ", highlight) + value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + hilight("super.", writer); + propertyName.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(" = ", writer); + return value.toString(writer, constants, localRegNames, fullyQualifiedNames); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java index 67af5139c..595fe8b81 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.helpers.Helper; import java.util.HashMap; import java.util.List; @@ -32,8 +33,8 @@ public class StringAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("\"" + Helper.escapeString(value) + "\"", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("\"" + Helper.escapeString(value) + "\"", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java index 342ef7fe9..7b91edc40 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,7 +32,7 @@ public class ThisAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("this", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("this", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java index b2df717b8..253fbd6cd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -31,7 +32,8 @@ public class ThrowAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("throw ", highlight) + value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("throw ", writer); + return value.toString(writer, constants, localRegNames, fullyQualifiedNames); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java index 2ec21394b..0a060bb98 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -29,8 +30,8 @@ public class UndefinedAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("undefined", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("undefined", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java index de16c5d07..67897e07c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -31,7 +32,7 @@ public class UnparsedAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight(value, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight(value, writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java index a6fb064f3..5a1260c37 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.ArrayList; @@ -42,16 +43,17 @@ public class WithAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String ret; - ret = hilight("with(", highlight) + scope.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("with(", writer); + scope.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); /*for (GraphTargetItem ti : items) { ret += ti.toString(constants, localRegNames, fullyQualifiedNames) + "\r\n"; }*/ - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + return hilight("}", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java index 9f012a41e..1d98cde9f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -32,8 +33,8 @@ public class WithEndAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("}", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight("}", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java index 0c4e242d8..458cde225 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -32,7 +33,7 @@ public class WithObjectAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return writer; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java index 971fa18e4..1def8117d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -36,15 +37,14 @@ public class XMLAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String ret = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { for (GraphTargetItem part : parts) { if (part instanceof StringAVM2Item) { - ret += hilight(((StringAVM2Item) part).value, highlight); + hilight(((StringAVM2Item) part).value, writer); } else { - ret += part.toString(highlight, constants, localRegNames, fullyQualifiedNames); + part.toString(writer, constants, localRegNames, fullyQualifiedNames); } } - return ret; + return writer; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java index aa4766576..c5894ec71 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.CoerceAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ConvertAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetSlotAVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.Helper; import java.util.HashMap; @@ -47,7 +48,7 @@ public class DeclarationAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { if (assignment instanceof SetLocalAVM2Item) { SetLocalAVM2Item lti = (SetLocalAVM2Item) assignment; String type = "*"; @@ -57,12 +58,20 @@ public class DeclarationAVM2Item extends AVM2Item { if (lti.value instanceof ConvertAVM2Item) { type = ((ConvertAVM2Item) lti.value).type; } - return hilight("var ", highlight) + hilight(localRegName(localRegNames, lti.regIndex) + ":" + type + " = ", highlight) + lti.value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + hilight("var ", writer); + hilight(localRegName(localRegNames, lti.regIndex) + ":" + type + " = ", writer); + return lti.value.toString(writer, constants, localRegNames, fullyQualifiedNames); } if (assignment instanceof SetSlotAVM2Item) { SetSlotAVM2Item ssti = (SetSlotAVM2Item) assignment; - return hilight("var ", highlight) + ssti.getName(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(":", highlight) + hilight(type, highlight) + hilight(" = ", highlight) + ssti.value.toString(highlight, constants, localRegNames, fullyQualifiedNames); + hilight("var ", writer); + ssti.getName(writer, constants, localRegNames, fullyQualifiedNames); + hilight(":", writer); + hilight(type, writer); + hilight(" = ", writer); + return ssti.value.toString(writer, constants, localRegNames, fullyQualifiedNames); } - return hilight("var ", highlight) + assignment.toString(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)); + hilight("var ", writer); + return assignment.toString(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ExceptionAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ExceptionAVM2Item.java index a0f0a2d92..fea296eb1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ExceptionAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ExceptionAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.abc.types.ABCException; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.HashMap; import java.util.List; @@ -32,7 +33,7 @@ public class ExceptionAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight(exception.getVarName(constants, fullyQualifiedNames), highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + return hilight(exception.getVarName(constants, fullyQualifiedNames), writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java index c6a16601c..e1cf67450 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -39,7 +40,10 @@ public class FilterAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return collection.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(".(", highlight) + expression.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + collection.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight(".(", writer); + expression.toString(writer, constants, localRegNames, fullyQualifiedNames); + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java index d160a5ad6..811f5232d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.model.InAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetTypeAVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -68,20 +69,22 @@ public class ForEachInAVM2Item extends LoopItem implements Block { } @Override - public String toString(boolean highlight, List localData) { - String ret = ""; - ret += hilight("loop" + loop.id + ":", highlight) + "\r\n"; - ret += hilight("for each (", highlight) + expression.toString(highlight, localData) + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("loop" + loop.id + ":", writer).appendNewLine(); + hilight("for each (", writer); + expression.toString(writer, localData); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n"; - ret += hilight(":loop" + loop.id, highlight); - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer).appendNewLine(); + hilight(":loop" + loop.id, writer); + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java index 78fd3f0df..78b4f4735 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.model.InAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetTypeAVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -68,20 +69,22 @@ public class ForInAVM2Item extends LoopItem implements Block { } @Override - public String toString(boolean highlight, List localData) { - String ret = ""; - ret += hilight("loop" + loop.id + ":", highlight) + "\r\n"; - ret += hilight("for (", highlight) + expression.toString(highlight, localData) + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("loop" + loop.id + ":", writer).appendNewLine(); + hilight("for (", writer); + expression.toString(writer, localData); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n"; - ret += hilight(":loop" + loop.id, highlight); - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer).appendNewLine(); + hilight(":loop" + loop.id, writer); + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java index 09bcf34a8..5751dea8d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.abc.types.ABCException; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -53,41 +54,46 @@ public class TryAVM2Item extends AVM2Item implements Block { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - String ret = ""; - ret += hilight("try", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("try", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : tryCommands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + "\r\n"; + ti.toStringSemicoloned(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer); for (int e = 0; e < catchExceptions.size(); e++) { - ret += "\r\n" + hilight("catch(" + catchExceptions.get(e).getVarName(constants, fullyQualifiedNames) + ":" + catchExceptions.get(e).getTypeName(constants, fullyQualifiedNames) + ")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + writer.appendNewLine(); + hilight("catch(" + catchExceptions.get(e).getVarName(constants, fullyQualifiedNames) + ":" + catchExceptions.get(e).getTypeName(constants, fullyQualifiedNames) + ")", writer); + writer.appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); List commands = catchCommands.get(e); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + "\r\n"; + ti.toStringSemicoloned(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer); } if (finallyCommands.size() > 0) { - ret += "\r\n" + hilight("finally", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + writer.appendNewLine(); + hilight("finally", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : finallyCommands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, Helper.toList(constants, localRegNames, fullyQualifiedNames)) + "\r\n"; + ti.toStringSemicoloned(writer, Helper.toList(constants, localRegNames, fullyQualifiedNames)).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer); } - return ret; + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java index 876530414..75fbe10ab 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.ecma.EcmaType; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import java.util.List; @@ -30,22 +31,24 @@ public class AddAVM2Item extends BinaryOpItem { } @Override - public String toString(boolean highlight, List localData) { + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { if (rightSide.precedence >= precedence) { //string + vs number + - String ret = ""; if (leftSide.precedence > precedence) { - ret += hilight("(", highlight) + leftSide.toString(highlight, localData) + hilight(")", highlight); + hilight("(", writer); + leftSide.toString(writer, localData); + hilight(")", writer); } else { - ret += leftSide.toString(highlight, localData); + leftSide.toString(writer, localData); } - ret += " "; - ret += hilight(operator, highlight); - ret += " "; + hilight(" ", writer); + hilight(operator, writer); + hilight(" ", writer); - ret += hilight("(", highlight) + rightSide.toString(highlight, localData) + hilight(")", highlight); - return ret; + hilight("(", writer); + rightSide.toString(writer, localData); + return hilight(")", writer); } else { - return super.toString(highlight, localData); + return super.toString(writer, localData); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java index 8788753b4..16f608d57 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -36,7 +37,11 @@ public class DeletePropertyAVM2Item extends AVM2Item { } @Override - public String toString(boolean highlight, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { - return hilight("delete ", highlight) + object.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight("[", highlight) + propertyName.toString(highlight, constants, localRegNames, fullyQualifiedNames) + hilight("]", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { + hilight("delete ", writer); + object.toString(writer, constants, localRegNames, fullyQualifiedNames); + hilight("[", writer); + propertyName.toString(writer, constants, localRegNames, fullyQualifiedNames); + return hilight("]", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java index 23143a5ea..1d184b311 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.EcmaScript; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import java.util.List; @@ -34,22 +35,24 @@ public class SubtractAVM2Item extends BinaryOpItem { } @Override - public String toString(boolean highlight, List localData) { + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { if (rightSide.precedence >= precedence) { // >= add or subtract too - String ret = ""; if (leftSide.precedence > precedence) { - ret += hilight("(", highlight) + leftSide.toString(highlight, localData) + hilight(")", highlight); + hilight("(", writer); + leftSide.toString(writer, localData); + hilight(")", writer); } else { - ret += leftSide.toString(highlight, localData); + leftSide.toString(writer, localData); } - ret += " "; - ret += hilight(operator, highlight); - ret += " "; + hilight(" ", writer); + hilight(operator, writer); + hilight(" ", writer); - ret += hilight("(", highlight) + rightSide.toString(highlight, localData) + hilight(")", highlight); - return ret; + hilight("(", writer); + rightSide.toString(writer, localData); + return hilight(")", writer); } else { - return super.toString(highlight, localData); + return super.toString(writer, localData); } } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ActionItem.java index cddca0529..f7594a14b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionPop; import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -35,11 +36,11 @@ public abstract class ActionItem extends GraphTargetItem implements Serializable super(instruction, precedence); } - public abstract String toString(boolean highlight, ConstantPool constants); + public abstract HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants); - public String toString(boolean highlight) { + public HilightedTextWriter toString(HilightedTextWriter writer) { ConstantPool c = null; - return toString(highlight, c); + return toString(writer, c); } protected boolean isEmptyString(GraphTargetItem target) { @@ -54,26 +55,26 @@ public abstract class ActionItem extends GraphTargetItem implements Serializable return false; } - protected String stripQuotes(GraphTargetItem target, ConstantPool constants, boolean highlight) { + protected HilightedTextWriter stripQuotes(GraphTargetItem target, ConstantPool constants, HilightedTextWriter writer) { if (target instanceof DirectValueActionItem) { if (((DirectValueActionItem) target).value instanceof String) { - return (String) ((DirectValueActionItem) target).hilight((String) ((DirectValueActionItem) target).value, highlight); + return ((DirectValueActionItem) target).hilight((String) ((DirectValueActionItem) target).value, writer); } } if (target == null) { - return ""; + return writer; } else { - return target.toString(highlight, constants); + return target.toString(writer, constants); } } @Override - public String toString(boolean highlight, List localData) { + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { if (localData.isEmpty()) { ConstantPool c = null; - return toString(highlight, c); + return toString(writer, c); } - return toString(highlight, (ConstantPool) localData.get(0)); + return toString(writer, (ConstantPool) localData.get(0)); } protected List toSourceCall(List localData, SourceGenerator gen, List list) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/AsciiToCharActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/AsciiToCharActionItem.java index a3daedc10..800a872a1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/AsciiToCharActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/AsciiToCharActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionAsciiToChar; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class AsciiToCharActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("chr(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("chr(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/CallActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/CallActionItem.java index 997006233..1cc224881 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/CallActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/CallActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionCall; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class CallActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("call(", highlight) + stripQuotes(value, constants, highlight) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("call(", writer); + stripQuotes(value, constants, writer); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java index e773f112c..c3886193f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionCallFunction; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -41,15 +42,17 @@ public class CallFunctionActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { String paramStr = ""; + stripQuotes(functionName, constants, writer); + hilight("(", writer); for (int t = 0; t < arguments.size(); t++) { if (t > 0) { - paramStr += hilight(",", highlight); + hilight(",", writer); } - paramStr += arguments.get(t).toStringNL(highlight, constants); + arguments.get(t).toStringNL(writer, constants); } - return stripQuotes(functionName, constants, highlight) + hilight("(", highlight) + paramStr + hilight(")", highlight); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java index af5184b91..fe58ce8b2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionCallMethod; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -47,14 +48,7 @@ public class CallMethodActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String paramStr = ""; - for (int t = 0; t < arguments.size(); t++) { - if (t > 0) { - paramStr += hilight(",", highlight); - } - paramStr += arguments.get(t).toStringNL(highlight, constants); - } + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { boolean blankMethod = false; if (methodName instanceof DirectValueActionItem) { if (((DirectValueActionItem) methodName).value instanceof Undefined) { @@ -66,14 +60,29 @@ public class CallMethodActionItem extends ActionItem { } } } - if (blankMethod) { - return scriptObject.toString(highlight, constants) + hilight("(", highlight) + paramStr + hilight(")", highlight); + if (!blankMethod) { + if (scriptObject.precedence > this.precedence) { + hilight("(", writer); + scriptObject.toString(writer, constants); + hilight(")", writer); + } else { + scriptObject.toString(writer, constants); + } + hilight(".", writer); + stripQuotes(methodName, constants, writer); + } else { + scriptObject.toString(writer, constants); } - String soStr = scriptObject.toString(highlight, constants); - if (scriptObject.precedence > this.precedence) { - soStr = hilight("(", highlight) + soStr + hilight(")", highlight); + hilight("(", writer); + + for (int t = 0; t < arguments.size(); t++) { + if (t > 0) { + hilight(",", writer); + } + arguments.get(t).toStringNL(writer, constants); } - return soStr + hilight(".", highlight) + stripQuotes(methodName, constants, highlight) + hilight("(", highlight) + paramStr + hilight(")", highlight); + + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/CastOpActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/CastOpActionItem.java index 57e179181..ad7d456b5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/CastOpActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/CastOpActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf7.ActionCastOp; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -45,8 +46,11 @@ public class CastOpActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("(", highlight) + stripQuotes(constructor, constants, highlight) + hilight(")", highlight) + object.toString(highlight, Helper.toList(constants)); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("(", writer); + stripQuotes(constructor, constants, writer); + hilight(")", writer); + return object.toString(writer, Helper.toList(constants)); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/CharToAsciiActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/CharToAsciiActionItem.java index a9dbcb154..3c936507f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/CharToAsciiActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/CharToAsciiActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionCharToAscii; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class CharToAsciiActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("ord(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("ord(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/CloneSpriteActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/CloneSpriteActionItem.java index 5570d003c..701e91f62 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/CloneSpriteActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/CloneSpriteActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionCloneSprite; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -47,8 +48,14 @@ public class CloneSpriteActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("duplicateMovieClip(", highlight) + target.toString(highlight, constants) + hilight(",", highlight) + source.toString(highlight, constants) + hilight(",", highlight) + depth.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("duplicateMovieClip(", writer); + target.toString(writer, constants); + hilight(",", writer); + source.toString(writer, constants); + hilight(",", writer); + depth.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/DecrementActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/DecrementActionItem.java index 8f660401b..c352ceaee 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/DecrementActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/DecrementActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionDecrement; import com.jpexs.decompiler.flash.ecma.*; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -42,8 +43,9 @@ public class DecrementActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return object.toString(highlight, constants) + hilight(" - 1", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + object.toString(writer, constants); + return hilight(" - 1", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java index 2bdcdf3d7..fa2b9555f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal; import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -68,11 +69,14 @@ public class DefineLocalActionItem extends ActionItem implements SetTypeActionIt } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("var ", writer); + stripQuotes(name, constants, writer); if (value == null) { - return hilight("var ", highlight) + stripQuotes(name, constants, highlight); + return writer; } - return hilight("var ", highlight) + stripQuotes(name, constants, highlight) + hilight(" = ", highlight) + value.toString(highlight, constants); + hilight(" = ", writer); + return value.toString(writer, constants); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/DefineRegisterActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/DefineRegisterActionItem.java index 73334b920..052aa591a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/DefineRegisterActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/DefineRegisterActionItem.java @@ -16,6 +16,8 @@ */ package com.jpexs.decompiler.flash.action.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; + /** * * @author JPEXS @@ -32,8 +34,8 @@ public class DefineRegisterActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("var " + identifier, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("var " + identifier, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/DeleteActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/DeleteActionItem.java index 2997cd02d..e18b6eea8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/DeleteActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/DeleteActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionDelete; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -44,11 +45,14 @@ public class DeleteActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("delete ", writer); if (object == null) { - return hilight("delete ", highlight) + propertyName.toString(highlight, constants); + return propertyName.toString(writer, constants); } - return hilight("delete ", highlight) + object.toString(highlight, constants) + hilight(".", highlight) + stripQuotes(propertyName, constants, highlight); + object.toString(writer, constants); + hilight(".", writer); + return stripQuotes(propertyName, constants, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/DirectValueActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/DirectValueActionItem.java index 0f54ea510..96865aa79 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/DirectValueActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/DirectValueActionItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.swf4.ConstantIndex; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.ecma.Null; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -85,24 +86,24 @@ public class DirectValueActionItem extends ActionItem { } @Override - public String toStringNoQuotes(boolean highlight, List localData) { + public HilightedTextWriter toStringNoQuotes(HilightedTextWriter writer, List localData) { if (value instanceof Double) { if (Double.compare((double) (Double) value, 0) == 0) { - return hilight("0", highlight); + return hilight("0", writer); } } if (value instanceof Float) { if (Float.compare((float) (Float) value, 0) == 0) { - return hilight("0", highlight); + return hilight("0", writer); } } if (value instanceof String) { - return hilight((String) value, highlight); + return hilight((String) value, writer); } if (value instanceof ConstantIndex) { - return hilight(this.constants.get(((ConstantIndex) value).index), highlight); + return hilight(this.constants.get(((ConstantIndex) value).index), writer); } - return hilight(value.toString(), highlight); + return hilight(value.toString(), writer); } public String toStringNoH(ConstantPool constants) { @@ -126,27 +127,27 @@ public class DirectValueActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { if (value instanceof Double) { if (Double.compare((double) (Double) value, 0) == 0) { - return hilight("0", highlight); + return hilight("0", writer); } } if (value instanceof Float) { if (Float.compare((float) (Float) value, 0) == 0) { - return hilight("0", highlight); + return hilight("0", writer); } } if (value instanceof String) { - return hilight("\"" + Helper.escapeString((String) value) + "\"", highlight); + return hilight("\"" + Helper.escapeString((String) value) + "\"", writer); } if (value instanceof ConstantIndex) { - return hilight("\"" + Helper.escapeString(this.constants.get(((ConstantIndex) value).index)) + "\"", highlight); + return hilight("\"" + Helper.escapeString(this.constants.get(((ConstantIndex) value).index)) + "\"", writer); } if (value instanceof RegisterNumber) { - return hilight(((RegisterNumber) value).translate(), highlight); + return hilight(((RegisterNumber) value).translate(), writer); } - return hilight(value.toString(), highlight); + return hilight(value.toString(), writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/EnumerateActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/EnumerateActionItem.java index 71f05a9aa..17c7f7c42 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/EnumerateActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/EnumerateActionItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.action.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -40,8 +41,9 @@ public class EnumerateActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("enumerate ", highlight) + object.toString(highlight, Helper.toList(constants)); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("enumerate ", writer); + return object.toString(writer, Helper.toList(constants)); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/EvalActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/EvalActionItem.java index e983da75d..7c61eaad3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/EvalActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/EvalActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionGetVariable; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -34,8 +35,10 @@ public class EvalActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("eval(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("eval(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ExtendsActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ExtendsActionItem.java index f64278b4e..57b84c8d6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ExtendsActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ExtendsActionItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.action.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -34,10 +35,12 @@ public class ExtendsActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { List localData = new ArrayList<>(); localData.add(constants); - return subclass.toString(highlight, localData) + hilight(" extends ", highlight) + stripQuotes(superclass, constants, highlight); + subclass.toString(writer, localData); + hilight(" extends ", writer); + return stripQuotes(superclass, constants, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/FSCommand2ActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/FSCommand2ActionItem.java index 33ab8bb67..032b3ceec 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/FSCommand2ActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/FSCommand2ActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.flashlite.ActionFSCommand2; import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -46,13 +47,14 @@ public class FSCommand2ActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String paramStr = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("FSCommand2(", writer); + command.toString(writer, constants); for (int t = 0; t < arguments.size(); t++) { - paramStr += hilight(",", highlight); - paramStr += arguments.get(t).toString(highlight, constants); + hilight(",", writer); + arguments.get(t).toString(writer, constants); } - return hilight("FSCommand2(", highlight) + command.toString(highlight, constants) + paramStr + hilight(")", highlight); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/FSCommandActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/FSCommandActionItem.java index 4def375ca..5b4ed7984 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/FSCommandActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/FSCommandActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionGetURL; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.helpers.Helper; @@ -36,8 +37,10 @@ public class FSCommandActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("fscommand(\"", highlight) + Helper.escapeString(command) + hilight("\")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("fscommand(\"", writer); + hilight(Helper.escapeString(command), writer); + return hilight("\")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java index 80d726508..b23a8c4cd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.swf5.ActionDefineFunction; import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; import com.jpexs.decompiler.flash.action.swf7.ActionDefineFunction2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; @@ -71,33 +72,35 @@ public class FunctionActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { if (true) { - //return ""; + //return writer.appendNoHilight("") } - String ret = hilight("function", highlight); + hilight("function", writer); if (calculatedFunctionName != null) { - ret += " " + calculatedFunctionName.toStringNoQuotes(highlight, constants); + hilight(" ", writer); + calculatedFunctionName.toStringNoQuotes(writer, constants); } else if (!functionName.equals("")) { - ret += " " + functionName; + hilight(" ", writer); + hilight(functionName, writer); } - ret += hilight("(", highlight); + hilight("(", writer); for (int p = 0; p < paramNames.size(); p++) { if (p > 0) { - ret += hilight(", ", highlight); + hilight(", ", writer); } String pname = paramNames.get(p); if (pname == null || pname.equals("")) { pname = new RegisterNumber(regStart + p).translate(); } - ret += hilight(pname, highlight); + hilight(pname, writer); } - ret += hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; - ret += Graph.graphToString(actions, highlight, false, constants); - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); - return ret; + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); + writer.appendNoHilight(Graph.graphToString(actions, writer.getIsHighlighted(), false, constants)); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + return hilight("}", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java index f330a1140..c88003b82 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionGetMember; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -43,12 +44,17 @@ public class GetMemberActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { if (!((memberName instanceof DirectValueActionItem) && (((DirectValueActionItem) memberName).value instanceof String))) { //if(!(functionName instanceof GetVariableActionItem)) - return object.toString(highlight, constants) + hilight("[", highlight) + stripQuotes(memberName, constants, highlight) + hilight("]", highlight); + object.toString(writer, constants); + hilight("[", writer); + stripQuotes(memberName, constants, writer); + return hilight("]", writer); } - return object.toString(highlight, constants) + hilight(".", highlight) + stripQuotes(memberName, constants, highlight); + object.toString(writer, constants); + hilight(".", writer); + return stripQuotes(memberName, constants, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GetPropertyActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GetPropertyActionItem.java index af78dee34..3e9d106cd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GetPropertyActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GetPropertyActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.swf4.ActionGetProperty; import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -45,11 +46,12 @@ public class GetPropertyActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { if (isEmptyString(target)) { - return hilight(Action.propertyNames[propertyIndex], highlight); + return hilight(Action.propertyNames[propertyIndex], writer); } - return target.toString(highlight, constants) + hilight("." + Action.propertyNames[propertyIndex], highlight); + target.toString(writer, constants); + return hilight("." + Action.propertyNames[propertyIndex], writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GetTimeActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GetTimeActionItem.java index 6334622dc..afbabce10 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GetTimeActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GetTimeActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionGetTime; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -29,8 +30,8 @@ public class GetTimeActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("getTimer()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("getTimer()", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java index a8ecd188b..c70645303 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -39,7 +40,7 @@ public class GetURL2ActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { String methodStr = ""; if (sendVarsMethod == 1) { methodStr = ",\"GET\""; @@ -48,7 +49,11 @@ public class GetURL2ActionItem extends ActionItem { methodStr = ",\"POST\""; } - return hilight("getURL(", highlight) + urlString.toString(highlight, constants) + hilight(",", highlight) + targetString.toString(highlight, constants) + hilight(methodStr + ")", highlight); + hilight("getURL(", writer); + urlString.toString(writer, constants); + hilight(",", writer); + targetString.toString(writer, constants); + return hilight(methodStr + ")", writer); } public GetURL2ActionItem(GraphSourceItem instruction, GraphTargetItem urlString, GraphTargetItem targetString, int method) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GetURLActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GetURLActionItem.java index 60e7c3523..d43219c3d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GetURLActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GetURLActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionGetURL; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.helpers.Helper; @@ -28,8 +29,10 @@ public class GetURLActionItem extends ActionItem { public String targetString; @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("getUrl(\"", highlight) + hilight(Helper.escapeString(urlString) + "\", \"" + Helper.escapeString(targetString), highlight) + hilight("\")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("getUrl(\"", writer); + hilight(Helper.escapeString(urlString) + "\", \"" + Helper.escapeString(targetString), writer); + return hilight("\")", writer); } public GetURLActionItem(GraphSourceItem instruction, String urlString, String targetString) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java index febc73240..a3855d525 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionGetVariable; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -46,8 +47,8 @@ public class GetVariableActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return stripQuotes(name, constants, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return stripQuotes(name, constants, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GetVersionActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GetVersionActionItem.java index ba5018a5d..83854d92c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GetVersionActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GetVersionActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionGetVariable; import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -33,8 +34,8 @@ public class GetVersionActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("getVersion()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("getVersion()", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java index 9379da408..d956f249a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionGotoFrame2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -47,12 +48,15 @@ public class GotoFrame2ActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { String prefix = "gotoAndStop"; if (playFlag) { prefix = "gotoAndPlay"; } - return hilight(prefix + "(", highlight) + frame.toString(highlight, constants) + hilight((sceneBiasFlag ? "," + sceneBias : ""), highlight) + hilight(")", highlight); + hilight(prefix + "(", writer); + frame.toString(writer, constants); + hilight((sceneBiasFlag ? "," + sceneBias : ""), writer); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GotoFrameActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GotoFrameActionItem.java index a40cb04ec..89447697b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GotoFrameActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GotoFrameActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionGotoFrame; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -31,8 +32,10 @@ public class GotoFrameActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("gotoAndStop(", highlight) + hilight("" + (frame + 1), highlight) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("gotoAndStop(", writer); + hilight("" + (frame + 1), writer); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/GotoLabelActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/GotoLabelActionItem.java index 9871adca0..f1e1724e2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/GotoLabelActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/GotoLabelActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionGoToLabel; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.helpers.Helper; @@ -32,8 +33,10 @@ public class GotoLabelActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("gotoAndStop(\"", highlight) + hilight(Helper.escapeString(label), highlight) + hilight("\")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("gotoAndStop(\"", writer); + hilight(Helper.escapeString(label), writer); + return hilight("\")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ImplementsOpActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ImplementsOpActionItem.java index 4736c7e0f..f97b8f0f1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ImplementsOpActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ImplementsOpActionItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.action.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -34,15 +35,16 @@ public class ImplementsOpActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String impStr = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + subclass.toString(writer, Helper.toList(constants)); + hilight(" implements ", writer); for (int i = 0; i < superclasses.size(); i++) { if (i > 0) { - impStr += hilight(",", highlight); + hilight(",", writer); } - impStr += superclasses.get(i).toString(highlight, Helper.toList(constants)); + superclasses.get(i).toString(writer, Helper.toList(constants)); } - return subclass.toString(highlight, Helper.toList(constants)) + hilight(" implements ", highlight) + impStr; + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/IncrementActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/IncrementActionItem.java index 3aef1ce26..f839daf86 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/IncrementActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/IncrementActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionIncrement; import com.jpexs.decompiler.flash.ecma.*; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -42,8 +43,9 @@ public class IncrementActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return object.toString(highlight, constants) + hilight(" + 1", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + object.toString(writer, constants); + return hilight(" + 1", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/InitArrayActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/InitArrayActionItem.java index 96c0230ee..10df4d237 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/InitArrayActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/InitArrayActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionInitArray; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -41,15 +42,15 @@ public class InitArrayActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String arrStr = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("[", writer); for (int i = 0; i < values.size(); i++) { if (i > 0) { - arrStr += hilight(",", highlight); + hilight(",", writer); } - arrStr += values.get(i).toString(highlight, constants); + values.get(i).toString(writer, constants); } - return hilight("[", highlight) + arrStr + hilight("]", highlight); + return hilight("]", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/InitObjectActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/InitObjectActionItem.java index 29e53c42d..4139272b0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/InitObjectActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/InitObjectActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -45,19 +46,23 @@ public class InitObjectActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String objStr = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("{", writer); for (int i = 0; i < values.size(); i++) { if (i > 0) { - objStr += hilight(",", highlight); + hilight(",", writer); } - String valueStr = values.get(i).toString(highlight, constants); + names.get(i).toStringNoQuotes(writer, constants); //AS1/2 do not allow quotes in name here + hilight(":", writer); if (values.get(i) instanceof TernarOpItem) { //Ternar operator contains ":" - valueStr = hilight("(", highlight) + valueStr + hilight(")", highlight); + hilight("(", writer); + values.get(i).toString(writer, constants); + hilight(")", writer); + } else { + values.get(i).toString(writer, constants); } - objStr += names.get(i).toStringNoQuotes(highlight, constants) + hilight(":", highlight) + valueStr; //AS1/2 do not allow quotes in name here } - return hilight("{", highlight) + objStr + hilight("}", highlight); + return hilight("}", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java index a37966574..471be181d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -49,7 +50,7 @@ public class LoadMovieActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { String methodStr = ""; if (method == 1) { methodStr = ",\"GET\""; @@ -57,7 +58,11 @@ public class LoadMovieActionItem extends ActionItem { if (method == 2) { methodStr = ",\"POST\""; } - return hilight("loadMovie(", highlight) + urlString.toString(highlight, constants) + hilight(",", highlight) + targetString.toString(highlight, constants) + hilight(methodStr + ")", highlight); + hilight("loadMovie(", writer); + urlString.toString(writer, constants); + hilight(",", writer); + targetString.toString(writer, constants); + return hilight(methodStr + ")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java index c516ce834..3c6f7979b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.model.operations.AddActionItem; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -51,7 +52,7 @@ public class LoadMovieNumActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { String methodStr = ""; if (method == 1) { methodStr = ",\"GET\""; @@ -59,7 +60,11 @@ public class LoadMovieNumActionItem extends ActionItem { if (method == 2) { methodStr = ",\"POST\""; } - return hilight("loadMovieNum(", highlight) + urlString.toString(highlight, constants) + hilight(",", highlight) + num.toString(highlight, constants) + hilight(methodStr + ")", highlight); + hilight("loadMovieNum(", writer); + urlString.toString(writer, constants); + hilight(",", writer); + num.toString(writer, constants); + return hilight(methodStr + ")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java index 02f89a322..591cbb45c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -49,7 +50,7 @@ public class LoadVariablesActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { String methodStr = ""; if (method == 1) { methodStr = ",\"GET\""; @@ -57,7 +58,11 @@ public class LoadVariablesActionItem extends ActionItem { if (method == 2) { methodStr = ",\"POST\""; } - return hilight("loadVariables(", highlight) + urlString.toString(highlight, constants) + hilight(",", highlight) + targetString.toString(highlight, constants) + hilight(methodStr + ")", highlight); + hilight("loadVariables(", writer); + urlString.toString(writer, constants); + hilight(",", writer); + targetString.toString(writer, constants); + return hilight(methodStr + ")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java index a0721061a..d5c7b5976 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.model.operations.AddActionItem; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -51,7 +52,7 @@ public class LoadVariablesNumActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { String methodStr = ""; if (method == 1) { methodStr = ",\"GET\""; @@ -59,7 +60,11 @@ public class LoadVariablesNumActionItem extends ActionItem { if (method == 2) { methodStr = ",\"POST\""; } - return hilight("loadVariablesNum(", highlight) + urlString.toString(highlight, constants) + hilight(",", highlight) + num.toString(highlight, constants) + hilight(methodStr + ")", highlight); + hilight("loadVariablesNum(", writer); + urlString.toString(writer, constants); + hilight(",", writer); + num.toString(writer, constants); + return hilight(methodStr + ")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/MBAsciiToCharActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/MBAsciiToCharActionItem.java index 97c28d8e5..8437365f4 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/MBAsciiToCharActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/MBAsciiToCharActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionMBAsciiToChar; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class MBAsciiToCharActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("mbchr(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("mbchr(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/MBCharToAsciiActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/MBCharToAsciiActionItem.java index 987d30288..dd90e3f07 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/MBCharToAsciiActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/MBCharToAsciiActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionMBCharToAscii; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class MBCharToAsciiActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("mbord(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("mbord(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/MBStringExtractActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/MBStringExtractActionItem.java index d9bc69db6..632f1849c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/MBStringExtractActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/MBStringExtractActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionMBStringExtract; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -47,8 +48,14 @@ public class MBStringExtractActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("mbsubstring(", highlight) + value.toString(highlight, constants) + hilight(",", highlight) + index.toString(highlight, constants) + hilight(",", highlight) + count.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("mbsubstring(", writer); + value.toString(writer, constants); + hilight(",", writer); + index.toString(writer, constants); + hilight(",", writer); + count.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/MBStringLengthActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/MBStringLengthActionItem.java index b92387485..fe7468db1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/MBStringLengthActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/MBStringLengthActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionMBStringLength; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -32,12 +33,16 @@ public class MBStringLengthActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String s = value.toString(highlight, constants); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("mblength(", writer); if (value.precedence > precedence) { - s = hilight("(", highlight) + s + hilight(")", highlight); + hilight("(", writer); + value.toString(writer, constants); + hilight(")", writer); + } else { + value.toString(writer, constants); } - return hilight("mblength(", highlight) + s + hilight(")", highlight); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/NewMethodActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/NewMethodActionItem.java index ab1983760..cab3a5058 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/NewMethodActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/NewMethodActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionNewMethod; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -47,16 +48,8 @@ public class NewMethodActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String paramStr = ""; - for (int t = 0; t < arguments.size(); t++) { - if (t > 0) { - paramStr += hilight(",", highlight); - } - paramStr += arguments.get(t).toString(highlight, constants); - } + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { boolean blankMethod = false; - String methodNameStr = ""; if (methodName instanceof DirectValueActionItem) { if (((DirectValueActionItem) methodName).value instanceof Undefined) { blankMethod = true; @@ -64,17 +57,33 @@ public class NewMethodActionItem extends ActionItem { if (((DirectValueActionItem) methodName).value.equals("")) { blankMethod = true; } - methodNameStr = ((DirectValueActionItem) methodName).toStringNoQuotes(highlight, constants); - } else { - methodNameStr = methodName.toString(highlight, constants); } - } else { - methodNameStr = methodName.toString(highlight, constants); } - if (blankMethod) { - return scriptObject.toString(highlight, constants) + "(" + paramStr + ")"; + if (!blankMethod) { + hilight("new ", writer); } - return hilight("new ", highlight) + scriptObject.toString(highlight, constants) + hilight(".", highlight) + methodNameStr + hilight("(", highlight) + paramStr + hilight(")", highlight); + scriptObject.toString(writer, constants); + if (!blankMethod) { + hilight(".", writer); + if (methodName instanceof DirectValueActionItem) { + if (((DirectValueActionItem) methodName).value instanceof Undefined) { + } else if (((DirectValueActionItem) methodName).value instanceof String) { + ((DirectValueActionItem) methodName).toStringNoQuotes(writer, constants); + } else { + methodName.toString(writer, constants); + } + } else { + methodName.toString(writer, constants); + } + } + hilight("(", writer); + for (int t = 0; t < arguments.size(); t++) { + if (t > 0) { + hilight(",", writer); + } + arguments.get(t).toString(writer, constants); + } + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/NewObjectActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/NewObjectActionItem.java index 0f6b644e2..fd315652b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/NewObjectActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/NewObjectActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionNewObject; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -44,15 +45,17 @@ public class NewObjectActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String paramStr = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("new ", writer); + stripQuotes(objectName, constants, writer); + hilight("(", writer); for (int t = 0; t < arguments.size(); t++) { if (t > 0) { - paramStr += hilight(",", highlight); + hilight(",", writer); } - paramStr += arguments.get(t).toString(highlight, constants); + arguments.get(t).toString(writer, constants); } - return hilight("new ", highlight) + stripQuotes(objectName, constants, highlight) + hilight("(", highlight) + paramStr + hilight(")", highlight); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/NextFrameActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/NextFrameActionItem.java index bee6d71f7..08afc6dfc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/NextFrameActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/NextFrameActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionNextFrame; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -24,8 +25,8 @@ import java.util.List; public class NextFrameActionItem extends ActionItem { @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("nextFrame()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("nextFrame()", writer); } public NextFrameActionItem(GraphSourceItem instruction) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/PlayActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/PlayActionItem.java index 0297ca993..1ec03ef2c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/PlayActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/PlayActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionPlay; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -24,8 +25,8 @@ import java.util.List; public class PlayActionItem extends ActionItem { @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("play()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("play()", writer); } public PlayActionItem(GraphSourceItem instruction) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/PopActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/PopActionItem.java index f2973eee6..6014f016e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/PopActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/PopActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionPop; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -32,8 +33,8 @@ public class PopActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return ""; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/PostDecrementActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/PostDecrementActionItem.java index 2f5509ff6..a35f2a0e5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/PostDecrementActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/PostDecrementActionItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.swf5.ActionDecrement; import com.jpexs.decompiler.flash.action.swf5.ActionSetMember; import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -49,8 +50,9 @@ public class PostDecrementActionItem extends ActionItem implements SetTypeAction } @Override - public String toString(boolean highlight, ConstantPool constants) { - return object.toString(highlight, constants) + hilight("--", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + object.toString(writer, constants); + return hilight("--", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/PostIncrementActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/PostIncrementActionItem.java index 60b1fd6d2..0e7993a0f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/PostIncrementActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/PostIncrementActionItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.swf5.ActionIncrement; import com.jpexs.decompiler.flash.action.swf5.ActionSetMember; import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -49,8 +50,9 @@ public class PostIncrementActionItem extends ActionItem implements SetTypeAction } @Override - public String toString(boolean highlight, ConstantPool constants) { - return object.toString(highlight, constants) + hilight("++", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + object.toString(writer, constants); + return hilight("++", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/PrevFrameActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/PrevFrameActionItem.java index 08d0b9adf..4b4dc691c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/PrevFrameActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/PrevFrameActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionPrevFrame; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -24,8 +25,8 @@ import java.util.List; public class PrevFrameActionItem extends ActionItem { @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("prevFrame()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("prevFrame()", writer); } public PrevFrameActionItem(GraphSourceItem instruction) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java index eb2ab13f6..c9a4b21ff 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.model.operations.AddActionItem; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -49,8 +50,12 @@ public class PrintActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("print(", highlight) + target.toString(highlight, constants) + hilight(",", highlight) + boundingBox.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("print(", writer); + target.toString(writer, constants); + hilight(",", writer); + boundingBox.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java index 1ebde4e7e..ac24eb05c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.model.operations.AddActionItem; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -49,8 +50,12 @@ public class PrintAsBitmapActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("printAsBitmap(", highlight) + target.toString(highlight, constants) + hilight(",", highlight) + boundingBox.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("printAsBitmap(", writer); + target.toString(writer, constants); + hilight(",", writer); + boundingBox.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java index 04bf09104..cbf8ac6fb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.model.operations.AddActionItem; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -49,8 +50,12 @@ public class PrintAsBitmapNumActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("printAsBitmapNum(", highlight) + num.toString(highlight, constants) + hilight(",", highlight) + boundingBox.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("printAsBitmapNum(", writer); + num.toString(writer, constants); + hilight(",", writer); + boundingBox.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java index ed02a42ac..6a2be5a10 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.model.operations.AddActionItem; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -49,8 +50,12 @@ public class PrintNumActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("printNum(", highlight) + num.toString(highlight, constants) + hilight(",", highlight) + boundingBox.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("printNum(", writer); + num.toString(writer, constants); + hilight(",", writer); + boundingBox.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/RandomNumberActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/RandomNumberActionItem.java index b3beb696b..e0a7b624f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/RandomNumberActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/RandomNumberActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionRandomNumber; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class RandomNumberActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("random(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("random(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/RemoveSpriteActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/RemoveSpriteActionItem.java index 43e4f9548..bacd882b7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/RemoveSpriteActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/RemoveSpriteActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionRemoveSprite; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class RemoveSpriteActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("removeMovieClip(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("removeMovieClip(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ReturnActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ReturnActionItem.java index d9f8d5695..ae84a23e0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ReturnActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ReturnActionItem.java @@ -26,6 +26,7 @@ import com.jpexs.decompiler.flash.action.swf5.ActionEquals2; import com.jpexs.decompiler.flash.action.swf5.ActionReturn; import com.jpexs.decompiler.flash.ecma.Null; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -43,8 +44,9 @@ public class ReturnActionItem extends ActionItem implements ExitItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("return ", highlight) + value.toString(highlight, constants); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("return ", writer); + return value.toString(writer, constants); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java index 7342a1db1..4c44e585c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.swf4.ActionPush; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.swf5.ActionSetMember; import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; @@ -77,12 +78,21 @@ public class SetMemberActionItem extends ActionItem implements SetTypeActionItem } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { if (!((objectName instanceof DirectValueActionItem) && (((DirectValueActionItem) objectName).value instanceof String))) { //if(!(functionName instanceof GetVariableActionItem)) - return object.toString(highlight, constants) + hilight("[", highlight) + stripQuotes(objectName, constants, highlight) + hilight("]", highlight) + hilight(" = ", highlight) + value.toString(highlight, constants); + object.toString(writer, constants); + hilight("[", writer); + stripQuotes(objectName, constants, writer); + hilight("]", writer); + hilight(" = ", writer); + return value.toString(writer, constants); } - return object.toString(highlight, constants) + hilight(".", highlight) + stripQuotes(objectName, constants, highlight) + hilight(" = ", highlight) + value.toString(highlight, constants); + object.toString(writer, constants); + hilight(".", writer); + stripQuotes(objectName, constants, writer); + hilight(" = ", writer); + return value.toString(writer, constants); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/SetPropertyActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/SetPropertyActionItem.java index 27e15c18a..b630b336b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/SetPropertyActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/SetPropertyActionItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.action.swf4.ActionPush; import com.jpexs.decompiler.flash.action.swf4.ActionSetProperty; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; @@ -69,11 +70,14 @@ public class SetPropertyActionItem extends ActionItem implements SetTypeActionIt } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { if (isEmptyString(target)) { - return hilight(Action.propertyNames[propertyIndex] + " = ", highlight) + value.toString(highlight, constants); + hilight(Action.propertyNames[propertyIndex] + " = ", writer); + return value.toString(writer, constants); } - return target.toString(highlight, constants) + hilight("." + Action.propertyNames[propertyIndex] + " = ", highlight) + value.toString(highlight, constants); + target.toString(writer, constants); + hilight("." + Action.propertyNames[propertyIndex] + " = ", writer); + return value.toString(writer, constants); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/SetTarget2ActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/SetTarget2ActionItem.java index 1fc04f060..0ae8557a2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/SetTarget2ActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/SetTarget2ActionItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.action.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -32,8 +33,10 @@ public class SetTarget2ActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("tellTarget(", highlight) + target.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("tellTarget(", writer); + target.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/SetTargetActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/SetTargetActionItem.java index 74a8e11c9..63af70289 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/SetTargetActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/SetTargetActionItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.action.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.helpers.Helper; @@ -31,8 +32,10 @@ public class SetTargetActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("tellTarget(\"", highlight) + hilight(Helper.escapeString(target), highlight) + hilight("\")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("tellTarget(\"", writer); + hilight(Helper.escapeString(target), writer); + return hilight("\")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java index 5fcb75aea..90dd1f37d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.swf4.ActionPush; import com.jpexs.decompiler.flash.action.swf4.ActionSetVariable; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; @@ -66,11 +67,17 @@ public class SetVariableActionItem extends ActionItem implements SetTypeActionIt } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { if (name instanceof DirectValueActionItem || name instanceof GetVariableActionItem) { - return stripQuotes(name, constants, highlight) + hilight(" = ", highlight) + value.toString(highlight, constants); + stripQuotes(name, constants, writer); + hilight(" = ", writer); + return value.toString(writer, constants); } else { - return hilight("set(", highlight) + name.toString(highlight, constants) + hilight(",", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + hilight("set(", writer); + name.toString(writer, constants); + hilight(",", writer); + value.toString(writer, constants); + return hilight(")", writer); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/StartDragActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/StartDragActionItem.java index 3aa7d12db..e0971649c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/StartDragActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/StartDragActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionStartDrag; import com.jpexs.decompiler.flash.ecma.*; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -46,14 +47,28 @@ public class StartDragActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { boolean hasConstrains = true; if (constrain instanceof DirectValueActionItem) { if (Double.compare(EcmaScript.toNumber(constrain.getResult()), 0) == 0) { hasConstrains = false; } } - return hilight("startDrag(", highlight) + target.toString(highlight, constants) + hilight(",", highlight) + lockCenter.toString(highlight, constants) + (hasConstrains ? hilight(",", highlight) + x1.toString(highlight, constants) + hilight(",", highlight) + y1.toString(highlight, constants) + hilight(",", highlight) + x2.toString(highlight, constants) + hilight(",", highlight) + y2.toString(highlight, constants) : "") + hilight(")", highlight); + hilight("startDrag(", writer); + target.toString(writer, constants); + hilight(",", writer); + lockCenter.toString(writer, constants); + if (hasConstrains) { + hilight(",", writer); + x1.toString(writer, constants); + hilight(",", writer); + y1.toString(writer, constants); + hilight(",", writer); + x2.toString(writer, constants); + hilight(",", writer); + y2.toString(writer, constants); + } + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/StopActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/StopActionItem.java index c157a4e66..8e664e436 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/StopActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/StopActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionStop; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -24,8 +25,8 @@ import java.util.List; public class StopActionItem extends ActionItem { @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("stop()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("stop()", writer); } public StopActionItem(GraphSourceItem instruction) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/StopAllSoundsActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/StopAllSoundsActionItem.java index f12e543fb..20bdf8421 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/StopAllSoundsActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/StopAllSoundsActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionStopSounds; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -24,8 +25,8 @@ import java.util.List; public class StopAllSoundsActionItem extends ActionItem { @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("stopAllSounds()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("stopAllSounds()", writer); } public StopAllSoundsActionItem(GraphSourceItem instruction) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/StopDragActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/StopDragActionItem.java index 964ff91b4..ae0e58606 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/StopDragActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/StopDragActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionEndDrag; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -24,8 +25,8 @@ import java.util.List; public class StopDragActionItem extends ActionItem { @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("stopDrag()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("stopDrag()", writer); } public StopDragActionItem(GraphSourceItem instruction) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/StoreRegisterActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/StoreRegisterActionItem.java index ff38f2b1e..15fb538c2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/StoreRegisterActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/StoreRegisterActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; @@ -66,8 +67,17 @@ public class StoreRegisterActionItem extends ActionItem implements SetTypeAction } @Override - public String toString(boolean highlight, ConstantPool constants) { - return temporary ? value.toString(highlight, constants) : ((define ? hilight("var ", highlight) : "") + hilight(register.translate() + " = ", highlight) + value.toString(highlight, constants)); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + if (temporary) { + value.toString(writer, constants); + } else { + if (define) { + hilight("var ", writer); + } + hilight(register.translate() + " = ", writer); + value.toString(writer, constants); + } + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/StrictModeActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/StrictModeActionItem.java index e927a7324..4172fe601 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/StrictModeActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/StrictModeActionItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.action.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; public class StrictModeActionItem extends ActionItem { @@ -28,8 +29,8 @@ public class StrictModeActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("StrictMode(" + mode + ");", highlight); //I still don't know how AS source of Strict Mode instruction looks like, assuming this... + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("StrictMode(" + mode + ");", writer); //I still don't know how AS source of Strict Mode instruction looks like, assuming this... } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/StringExtractActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/StringExtractActionItem.java index bcc7e3658..e1dee8a6f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/StringExtractActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/StringExtractActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionStringExtract; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -37,8 +38,13 @@ public class StringExtractActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return value.toString(highlight, constants) + hilight(".substr(", highlight) + index.toString(highlight, constants) + hilight(",", highlight) + count.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + value.toString(writer, constants); + hilight(".substr(", writer); + index.toString(writer, constants); + hilight(",", writer); + count.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/StringLengthActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/StringLengthActionItem.java index 998dd1e13..5c7acffcb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/StringLengthActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/StringLengthActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionStringLength; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -31,8 +32,10 @@ public class StringLengthActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("length(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("length(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/TargetPathActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/TargetPathActionItem.java index ed50cfa64..d740eb974 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/TargetPathActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/TargetPathActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionTargetPath; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class TargetPathActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("targetPath(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("targetPath(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java b/trunk/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java index 0d5b86d4b..f821fb8ca 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.action.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.List; @@ -44,8 +45,8 @@ public class TemporaryRegister extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return value.toString(highlight, localData); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + return value.toString(writer, localData); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ThrowActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ThrowActionItem.java index 7898b6bbc..d36df90ee 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ThrowActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ThrowActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf7.ActionThrow; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -32,8 +33,9 @@ public class ThrowActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("throw ", highlight) + value.toString(highlight, Helper.toList(constants)); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("throw ", writer); + return value.toString(writer, Helper.toList(constants)); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ToIntegerActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ToIntegerActionItem.java index 7073ecd8d..0ab7fc49f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ToIntegerActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ToIntegerActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionToInteger; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class ToIntegerActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("int(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("int(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ToNumberActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ToNumberActionItem.java index 6a624e57f..6a5917a45 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ToNumberActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ToNumberActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionToNumber; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -32,8 +33,10 @@ public class ToNumberActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("Number(", highlight) + value.toString(highlight, Helper.toList(constants)) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("Number(", writer); + value.toString(writer, Helper.toList(constants)); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ToStringActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ToStringActionItem.java index 0ea39a7ce..83fac6719 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ToStringActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ToStringActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionToString; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -32,8 +33,10 @@ public class ToStringActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("String(", highlight) + value.toString(highlight, Helper.toList(constants)) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("String(", writer); + value.toString(writer, Helper.toList(constants)); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ToggleHighQualityActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ToggleHighQualityActionItem.java index 1a623752b..d56a6def6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ToggleHighQualityActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ToggleHighQualityActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf3.ActionToggleQuality; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.SourceGenerator; import java.util.List; @@ -24,8 +25,8 @@ import java.util.List; public class ToggleHighQualityActionItem extends ActionItem { @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("toggleHighQuality()", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("toggleHighQuality()", writer); } public ToggleHighQualityActionItem(GraphSourceItem instruction) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/TraceActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/TraceActionItem.java index 8084df19f..3c9bbe7ca 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/TraceActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/TraceActionItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionTrace; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -31,8 +32,10 @@ public class TraceActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("trace(", highlight) + value.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("trace(", writer); + value.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/TypeOfActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/TypeOfActionItem.java index a2ef8c907..10ebad22d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/TypeOfActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/TypeOfActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf5.ActionTypeOf; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.ecma.EcmaType; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -34,8 +35,10 @@ public class TypeOfActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("typeof(", highlight) + value.toString(highlight, Helper.toList(constants)) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("typeof(", writer); + value.toString(writer, Helper.toList(constants)); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java index 3b515d35c..c824b61ad 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -45,8 +46,10 @@ public class UnLoadMovieActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("unloadMovie(", highlight) + targetString.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("unloadMovie(", writer); + targetString.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java index 65d323950..1f9230a09 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.action.model.operations.AddActionItem; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionGetURL2; import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -47,8 +48,10 @@ public class UnLoadMovieNumActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("unloadMovieNum(", highlight) + num.toString(highlight, constants) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("unloadMovieNum(", writer); + num.toString(writer, constants); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/UnsupportedActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/UnsupportedActionItem.java index e71f3f287..96520e777 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/UnsupportedActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/UnsupportedActionItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.action.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; public class UnsupportedActionItem extends ActionItem { @@ -28,8 +29,8 @@ public class UnsupportedActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - return hilight("//Unsupported by decompiler:" + value, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + return hilight("//Unsupported by decompiler:" + value, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java index dd62fdd68..693dd7635 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java @@ -26,6 +26,7 @@ import com.jpexs.decompiler.flash.action.model.GetVariableActionItem; import com.jpexs.decompiler.flash.action.model.SetMemberActionItem; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.flash.helpers.collections.MyEntry; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; @@ -155,51 +156,63 @@ public class ClassActionItem extends ActionItem implements Block { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String ret; - ret = hilight("class ", highlight) + className.toStringNoQuotes(highlight, Helper.toList(constants)); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("class ", writer); + className.toStringNoQuotes(writer, Helper.toList(constants)); if (extendsOp != null) { - ret += hilight(" extends ", highlight) + extendsOp.toStringNoQuotes(highlight, Helper.toList(constants)); + hilight(" extends ", writer); + extendsOp.toStringNoQuotes(writer, Helper.toList(constants)); } if (!implementsOp.isEmpty()) { - ret += hilight(" implements ", highlight); + hilight(" implements ", writer); boolean first = true; for (GraphTargetItem t : implementsOp) { if (!first) { - ret += hilight(", ", highlight); + hilight(", ", writer); } first = false; - ret += Action.getWithoutGlobal(t).toString(highlight, constants); + Action.getWithoutGlobal(t).toString(writer, constants); } } - ret += "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + writer.appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); if (constructor != null) { - ret += constructor.toString(highlight, constants) + "\r\n"; + constructor.toString(writer, constants).appendNewLine(); } for (MyEntry item : vars) { - ret += hilight("var ", highlight) + item.key.toStringNoQuotes(highlight, constants) + hilight(" = ", highlight) + item.value.toString(highlight, constants) + hilight(";", highlight) + "\r\n"; + hilight("var ", writer); + item.key.toStringNoQuotes(writer, constants); + hilight(" = ", writer); + item.value.toString(writer, constants); + hilight(";", writer).appendNewLine(); } for (String v : uninitializedVars) { - ret += hilight("var ", highlight) + hilight(v, highlight) + hilight(";", highlight) + "\r\n"; + hilight("var ", writer); + hilight(v, writer); + hilight(";", writer).appendNewLine(); } for (MyEntry item : staticVars) { - ret += hilight("static var ", highlight) + item.key.toStringNoQuotes(highlight, constants) + hilight(" = ", highlight) + item.value.toString(highlight, constants) + hilight(";", highlight) + "\r\n"; + hilight("static var ", writer); + item.key.toStringNoQuotes(writer, constants); + hilight(" = ", writer); + item.value.toString(writer, constants); + hilight(";", writer).appendNewLine(); } for (GraphTargetItem f : functions) { - ret += f.toString(highlight, constants) + "\r\n"; + f.toString(writer, constants).appendNewLine(); } for (GraphTargetItem f : staticFunctions) { - ret += hilight("static ", highlight) + f.toString(highlight, constants) + "\r\n"; + hilight("static ", writer); + f.toString(writer, constants).appendNewLine(); } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n"; - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + return hilight("}", writer).appendNewLine(); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java index 5315c3733..39c9f525c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java @@ -31,6 +31,7 @@ import com.jpexs.decompiler.flash.action.swf5.ActionEquals2; import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; import com.jpexs.decompiler.flash.action.swf6.ActionEnumerate2; import com.jpexs.decompiler.flash.ecma.Null; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -63,18 +64,24 @@ public class ForInActionItem extends LoopActionItem implements Block { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String ret = ""; - ret += hilight("loop" + loop.id + ":", highlight) + "\r\n"; - ret += hilight("for(", highlight) + ((variableName instanceof DirectValueActionItem) && (((DirectValueActionItem) variableName).value instanceof RegisterNumber) ? "var " : "") + stripQuotes(variableName, constants, highlight) + " in " + enumVariable.toString(highlight, constants) + ")\r\n{\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; - for (GraphTargetItem ti : commands) { - ret += ti.toStringSemicoloned(highlight, constants) + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("loop" + loop.id + ":", writer).appendNewLine(); + hilight("for(", writer); + if ((variableName instanceof DirectValueActionItem) && (((DirectValueActionItem) variableName).value instanceof RegisterNumber)) { + hilight("var ", writer); } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n"; - ret += hilight(":loop" + loop.id, highlight); - return ret; + stripQuotes(variableName, constants, writer); + hilight(" in ", writer); + enumVariable.toString(writer, constants); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); + for (GraphTargetItem ti : commands) { + ti.toStringSemicoloned(writer, constants).appendNewLine(); + } + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer).appendNewLine(); + return hilight(":loop" + loop.id, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/IfFrameLoadedActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/IfFrameLoadedActionItem.java index 3aa52ebd3..618747ae6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/IfFrameLoadedActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/IfFrameLoadedActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model.clauses; import com.jpexs.decompiler.flash.action.model.ActionItem; import com.jpexs.decompiler.flash.action.model.ConstantPool; import com.jpexs.decompiler.flash.action.swf4.ActionWaitForFrame2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -44,13 +45,15 @@ public class IfFrameLoadedActionItem extends ActionItem implements Block { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String ret = hilight("ifFrameLoaded(", highlight) + frame.toString(highlight, constants) + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; - ret += Graph.graphToString(actions, highlight, false, constants); - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); - return ret; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("ifFrameLoaded(", writer); + frame.toString(writer, constants); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); + writer.appendNoHilight(Graph.graphToString(actions, writer.getIsHighlighted(), false, constants)); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + return hilight("}", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/InterfaceActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/InterfaceActionItem.java index 4dab41564..6974e129b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/InterfaceActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/InterfaceActionItem.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.model.ActionItem; import com.jpexs.decompiler.flash.action.model.ConstantPool; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -42,22 +43,23 @@ public class InterfaceActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String ret = ""; - ret += hilight("interface ", highlight) + name.toStringNoQuotes(highlight, constants); + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("interface ", writer); + name.toStringNoQuotes(writer, constants); boolean first = true; if (!superInterfaces.isEmpty()) { - ret += hilight(" extends ", highlight); + hilight(" extends ", writer); } for (GraphTargetItem ti : superInterfaces) { if (!first) { - ret += hilight(", ", highlight); + hilight(", ", writer); } first = false; - ret += Action.getWithoutGlobal(ti).toStringNoQuotes(highlight, constants); + Action.getWithoutGlobal(ti).toStringNoQuotes(writer, constants); } - ret += "\r\n" + hilight("{", highlight) + "\r\n" + hilight("}", highlight) + "\r\n"; - return ret; + writer.appendNewLine(); + hilight("{", writer).appendNewLine(); + return hilight("}", writer).appendNewLine(); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TellTargetActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TellTargetActionItem.java index 5e18fd57a..9a601275a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TellTargetActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TellTargetActionItem.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.action.model.ActionItem; import com.jpexs.decompiler.flash.action.model.ConstantPool; import com.jpexs.decompiler.flash.action.swf3.ActionSetTarget; import com.jpexs.decompiler.flash.action.swf4.ActionSetTarget2; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; @@ -40,15 +41,17 @@ public class TellTargetActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String ret = hilight("tellTarget(", highlight) + target.toString(highlight, constants) + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("tellTarget(", writer); + target.toString(writer, constants); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : commands) { - ret += ti.toString(highlight, constants) + "\r\n"; + ti.toString(writer, constants).appendNewLine(); } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + return hilight("}", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java index 067b7f2e8..c5cfdad0f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.action.model.ConstantPool; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionJump; import com.jpexs.decompiler.flash.action.swf7.ActionTry; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -57,43 +58,49 @@ public class TryActionItem extends ActionItem implements Block { } @Override - public String toString(boolean highlight, ConstantPool constants) { - String ret = ""; - ret += hilight("try", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { + hilight("try", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); List localData = new ArrayList<>(); localData.add(constants); for (GraphTargetItem ti : tryCommands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer); for (int e = 0; e < catchExceptions.size(); e++) { - ret += "\r\n" + hilight("catch(", highlight) + catchExceptions.get(e).toStringNoQuotes(highlight, localData) + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + writer.appendNewLine(); + hilight("catch(", writer); + catchExceptions.get(e).toStringNoQuotes(writer, localData); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); List commands = catchCommands.get(e); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer); } if (finallyCommands.size() > 0) { - ret += "\r\n" + hilight("finally", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + writer.appendNewLine(); + hilight("finally", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : finallyCommands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer); } - return ret; + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/WithActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/WithActionItem.java index 0700436de..fd34f81e2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/WithActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/WithActionItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.model.ActionItem; import com.jpexs.decompiler.flash.action.model.ConstantPool; import com.jpexs.decompiler.flash.action.swf5.ActionWith; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -46,18 +47,20 @@ public class WithActionItem extends ActionItem { } @Override - public String toString(boolean highlight, ConstantPool constants) { + public HilightedTextWriter toString(HilightedTextWriter writer, ConstantPool constants) { String ret; List localData = new ArrayList<>(); localData.add(constants); - ret = hilight("with(", highlight) + scope.toString(highlight, localData) + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + hilight("with(", writer); + scope.toString(writer, localData); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : items) { - ret += ti.toString(highlight, localData) + "\r\n"; + ti.toString(writer, localData).appendNewLine(); } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + return hilight("}", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AddActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AddActionItem.java index 5bd922e78..6cc3ac73c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AddActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AddActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model.operations; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.swf5.ActionAdd2; import com.jpexs.decompiler.flash.ecma.*; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -35,21 +36,24 @@ public class AddActionItem extends BinaryOpItem { } @Override - public String toString(boolean highlight, List localData) { + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { if (rightSide.precedence >= precedence) { //string + vs number + String ret = ""; if (leftSide.precedence > precedence) { - ret += hilight("(", highlight) + leftSide.toString(highlight, localData) + hilight(")", highlight); + hilight("(", writer); + leftSide.toString(writer, localData); + hilight(")", writer); } else { - ret += leftSide.toString(highlight, localData); + leftSide.toString(writer, localData); } - ret += " "; - ret += hilight(operator, highlight); - ret += " "; - ret += hilight("(", highlight) + rightSide.toString(highlight, localData) + hilight(")", highlight); - return ret; + hilight(" ", writer); + hilight(operator, writer); + hilight(" ", writer); + hilight("(", writer); + rightSide.toString(writer, localData); + return hilight(")", writer); } else { - return super.toString(highlight, localData); + return super.toString(writer, localData); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/SubtractActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/SubtractActionItem.java index 7d0760e30..10afca90d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/SubtractActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/SubtractActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model.operations; import com.jpexs.decompiler.flash.action.swf4.ActionSubtract; import com.jpexs.decompiler.flash.ecma.*; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -36,22 +37,25 @@ public class SubtractActionItem extends BinaryOpItem { } @Override - public String toString(boolean highlight, List localData) { + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { if (rightSide.precedence >= precedence) { // >= add or subtract too String ret = ""; if (leftSide.precedence > precedence) { - ret += hilight("(", highlight) + leftSide.toString(highlight, localData) + hilight(")", highlight); + hilight("(", writer); + leftSide.toString(writer, localData); + hilight(")", writer); } else { - ret += leftSide.toString(highlight, localData); + leftSide.toString(writer, localData); } - ret += " "; - ret += hilight(operator, highlight); - ret += " "; + hilight(" ", writer); + hilight(operator, writer); + hilight(" ", writer); - ret += hilight("(", highlight) + rightSide.toString(highlight, localData) + hilight(")", highlight); - return ret; + hilight("(", writer); + rightSide.toString(writer, localData); + return hilight(")", writer); } else { - return super.toString(highlight, localData); + return super.toString(writer, localData); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java index e2a3654c9..d66737c6f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java @@ -27,6 +27,7 @@ import com.jpexs.decompiler.flash.action.parser.pcode.ASMParsedSymbol; import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.ecma.Null; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; diff --git a/trunk/src/com/jpexs/decompiler/flash/helpers/HilightedTextWriter.java b/trunk/src/com/jpexs/decompiler/flash/helpers/HilightedTextWriter.java new file mode 100644 index 000000000..06c21b011 --- /dev/null +++ b/trunk/src/com/jpexs/decompiler/flash/helpers/HilightedTextWriter.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2010-2013 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.helpers; + +import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; +import com.jpexs.decompiler.graph.GraphSourceItem; +import java.io.IOException; + +/** + * Provides methods for highlighting positions of instructions in the text. + * + * @author JPEXS + */ +public class HilightedTextWriter { + + private StringBuilder sb = new StringBuilder(); + private boolean hilight; + + public HilightedTextWriter() { + } + + public HilightedTextWriter(boolean hilight) { + this.hilight = hilight; + } + + public boolean getIsHighlighted() { + return hilight; + } + + public HilightedTextWriter append(String str, GraphSourceItem src, int pos) { + if (src != null && hilight) { + sb.append(Highlighting.hilighOffset(str, src.getOffset() + pos + 1)); + } else { + sb.append(str); + } + return this; + } + + public HilightedTextWriter appendNoHilight(String str) { + sb.append(str); + return this; + } + + public HilightedTextWriter appendNewLine() { + sb.append("\r\n"); + return this; + } + + public HilightedTextWriter stripSemicolon() { + // hack + if (sb.charAt(sb.length() - 1) == ';') { + sb.setLength(sb.length() - 1); + } + return this; + } + + public int getLength() { + return sb.length(); + } + + public String toString() { + return sb.toString(); + } +} diff --git a/trunk/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/trunk/src/com/jpexs/decompiler/graph/GraphTargetItem.java index df20e31a2..0f67cc3e6 100644 --- a/trunk/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/GraphTargetItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.graph.model.BinaryOp; import java.io.Serializable; @@ -82,23 +83,30 @@ public abstract class GraphTargetItem implements Serializable { return ret; } - public String hilight(String str, boolean highlight) { - if (src == null || !highlight) { - return str; - } - return Highlighting.hilighOffset(str, src.getOffset() + pos + 1); + public HilightedTextWriter hilight(String str, HilightedTextWriter writer) { + return writer.append(str, src, pos); } public String toStringSemicoloned(boolean highlight, List localData) { - return toString(highlight, localData) + (needsSemicolon() ? hilight(";", highlight) : ""); + HilightedTextWriter writer = new HilightedTextWriter(highlight); + toStringSemicoloned(writer, localData); + return writer.toString(); } - public String toStringSemicoloned(boolean highlight, Object... localData) { + public HilightedTextWriter toStringSemicoloned(HilightedTextWriter writer, List localData) { + toString(writer, localData); + if (needsSemicolon()) { + hilight(";", writer); + } + return writer; + } + + public HilightedTextWriter toStringSemicoloned(HilightedTextWriter writer, Object... localData) { List localData2 = new ArrayList<>(); for (Object o : localData) { localData2.add(o); } - return toStringSemicoloned(highlight, localData2); + return toStringSemicoloned(writer, localData2); } public boolean needsSemicolon() { @@ -110,14 +118,20 @@ public abstract class GraphTargetItem implements Serializable { return this.getClass().getName(); } - public abstract String toString(boolean highlight, List localData); + public abstract HilightedTextWriter toString(HilightedTextWriter writer, List localData); public String toString(boolean highlight, Object... localData) { + HilightedTextWriter writer = new HilightedTextWriter(highlight); + toString(writer, localData); + return writer.toString(); + } + + public HilightedTextWriter toString(HilightedTextWriter writer, Object... localData) { List localData2 = new ArrayList<>(); for (Object o : localData) { localData2.add(o); } - return toString(highlight, localData2); + return toString(writer, localData2); } public int getPrecedence() { @@ -148,15 +162,27 @@ public abstract class GraphTargetItem implements Serializable { } public String toStringNoQuotes(boolean highlight, List localData) { - return toString(highlight, localData); + HilightedTextWriter writer = new HilightedTextWriter(highlight); + toStringNoQuotes(writer, localData); + return writer.toString(); + } + + public HilightedTextWriter toStringNoQuotes(HilightedTextWriter writer, List localData) { + return toString(writer, localData); } public String toStringNoQuotes(boolean highlight, Object... localData) { + HilightedTextWriter writer = new HilightedTextWriter(highlight); + toStringNoQuotes(writer, localData); + return writer.toString(); + } + + public HilightedTextWriter toStringNoQuotes(HilightedTextWriter writer, Object... localData) { List localData2 = new ArrayList<>(); for (Object o : localData) { localData2.add(o); } - return toStringNoQuotes(highlight, localData2); + return toStringNoQuotes(writer, localData2); } public GraphTargetItem getNotCoerced() { @@ -171,12 +197,12 @@ public abstract class GraphTargetItem implements Serializable { return false; } - public String toStringNL(boolean highlight, Object... localData) { + public String toStringNL(HilightedTextWriter writer, Object... localData) { List localData2 = new ArrayList<>(); for (Object o : localData) { localData2.add(o); } - return toString(highlight, localData2) + (needsNewLine() ? "\r\n" : ""); + return toString(writer, localData2) + (needsNewLine() ? "\r\n" : ""); } public boolean isEmpty() { diff --git a/trunk/src/com/jpexs/decompiler/graph/MarkItem.java b/trunk/src/com/jpexs/decompiler/graph/MarkItem.java index 3d2648013..e990462fa 100644 --- a/trunk/src/com/jpexs/decompiler/graph/MarkItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/MarkItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.List; /** @@ -32,8 +33,8 @@ public class MarkItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return hilight("//decompiler mark:" + mark, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + return hilight("//decompiler mark:" + mark, writer); } public String getMark() { diff --git a/trunk/src/com/jpexs/decompiler/graph/NotCompileTimeItem.java b/trunk/src/com/jpexs/decompiler/graph/NotCompileTimeItem.java index e6d56167c..d48cf0dc9 100644 --- a/trunk/src/com/jpexs/decompiler/graph/NotCompileTimeItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/NotCompileTimeItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import java.util.List; /** @@ -45,8 +46,8 @@ public class NotCompileTimeItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return object.toString(highlight, localData); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + return object.toString(writer, localData); } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java b/trunk/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java index b912ae76f..83f3008c7 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; @@ -46,24 +47,27 @@ public abstract class BinaryOpItem extends GraphTargetItem implements BinaryOp { } @Override - public String toString(boolean highlight, List localData) { - String ret = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { if (leftSide.getPrecedence() > precedence) { - ret += hilight("(", highlight) + leftSide.toString(highlight, localData) + hilight(")", highlight); + hilight("(", writer); + leftSide.toString(writer, localData); + hilight(")", writer); } else { - ret += leftSide.toString(highlight, localData); + leftSide.toString(writer, localData); } - ret += " "; - ret += hilight(operator, highlight); - ret += " "; + hilight(" ", writer); + hilight(operator, writer); + hilight(" ", writer); if (rightSide.getPrecedence() > precedence) { - ret += hilight("(", highlight) + rightSide.toString(highlight, localData) + hilight(")", highlight); + hilight("(", writer); + rightSide.toString(writer, localData); + hilight(")", writer); } else { - ret += rightSide.toString(highlight, localData); + rightSide.toString(writer, localData); } - return ret; + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/BlockItem.java b/trunk/src/com/jpexs/decompiler/graph/model/BlockItem.java index 1f7e58877..44e6a713c 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/BlockItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/BlockItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -36,10 +37,13 @@ public class BlockItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return hilight("{", highlight) + "\r\n" + Graph.INDENTOPEN + "\r\n" - + Graph.graphToString(commands, highlight, false, localData) + "\r\n" - + Graph.INDENTCLOSE + "\r\n" + hilight("}", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); + writer.appendNoHilight(Graph.graphToString(commands, writer.getIsHighlighted(), false, localData)); + writer.appendNewLine(); + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + return hilight("}", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/BreakItem.java b/trunk/src/com/jpexs/decompiler/graph/model/BreakItem.java index 78a8cec9e..cf314a03f 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/BreakItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/BreakItem.java @@ -1,5 +1,6 @@ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -19,8 +20,9 @@ public class BreakItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return hilight("break", highlight) + " " + hilight("loop" + loopId, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("break ", writer); + return hilight("loop" + loopId, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java b/trunk/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java index 40ee19c46..f82641ade 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -35,17 +36,16 @@ public class CommaExpressionItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - String ret = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { boolean first = true; for (GraphTargetItem t : commands) { if (!first) { - ret += hilight(", ", highlight); + hilight(", ", writer); } - ret += t.toString(highlight, localData); + t.toString(writer, localData); first = false; } - return ret; + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/CommentItem.java b/trunk/src/com/jpexs/decompiler/graph/model/CommentItem.java index 806d72a22..05fa576fb 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/CommentItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/CommentItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.List; @@ -33,8 +34,8 @@ public class CommentItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return hilight("/* " + comment + " */", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + return hilight("/* " + comment + " */", writer); } public String getComment() { diff --git a/trunk/src/com/jpexs/decompiler/graph/model/ContinueItem.java b/trunk/src/com/jpexs/decompiler/graph/model/ContinueItem.java index 1301a710d..0aa6f2ff2 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/ContinueItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/ContinueItem.java @@ -1,5 +1,6 @@ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -19,8 +20,9 @@ public class ContinueItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return hilight("continue", highlight) + " " + hilight("loop" + loopId, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("continue ", writer); + return hilight("loop" + loopId, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java b/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java index f5600a033..831444f38 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -49,31 +50,32 @@ public class DoWhileItem extends LoopItem implements Block { } @Override - public String toString(boolean highlight, List localData) { - String ret = ""; - ret += hilight("loop" + loop.id + ":", highlight) + "\r\n"; - ret += hilight("do", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("loop" + loop.id + ":", writer).appendNewLine(); + hilight("do", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - String expStr = ""; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer).appendNewLine(); + hilight("while(", writer); + for (int i = 0; i < expression.size(); i++) { if (expression.get(i).isEmpty()) { continue; } - if (!expStr.equals("")) { - expStr += hilight(", ", highlight); + if (i != 0) { + hilight(", ", writer); } - expStr += expression.get(i).toString(highlight, localData); + expression.get(i).toString(writer, localData); } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n" + hilight("while(", highlight) + expStr + hilight(");", highlight) + "\r\n"; - ret += hilight(":loop" + loop.id, highlight); - - return ret; + + hilight(");", writer).appendNewLine(); + return hilight(":loop" + loop.id, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/DuplicateItem.java b/trunk/src/com/jpexs/decompiler/graph/model/DuplicateItem.java index 9e4e57348..791e2976c 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/DuplicateItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/DuplicateItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -38,8 +39,8 @@ public class DuplicateItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return value.toString(highlight, localData); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + return value.toString(writer, localData); } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java b/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java index a8c99208f..4786ef3e2 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -49,18 +50,10 @@ public class ForItem extends LoopItem implements Block { this.commands = commands; } - private String stripSemicolon(String s) { - if (s.endsWith(";")) { - s = s.substring(0, s.length() - 1); - } - return s; - } - @Override - public String toString(boolean highlight, List localData) { - String ret = ""; - ret += hilight("loop" + loop.id + ":", highlight) + "\r\n"; - ret += hilight("for(", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("loop" + loop.id + ":", writer).appendNewLine(); + hilight("for(", writer); int p = 0; for (int i = 0; i < firstCommands.size(); i++) { if (firstCommands.get(i).isEmpty()) { @@ -68,36 +61,39 @@ public class ForItem extends LoopItem implements Block { } if (p > 0) { - ret += hilight(",", highlight); + hilight(",", writer); } - ret += stripSemicolon(firstCommands.get(i).toString(highlight, localData)); + firstCommands.get(i).toString(writer, localData); + writer.stripSemicolon(); p++; } - ret += ";"; - ret += expression.toString(highlight, localData); - ret += ";"; + hilight(";", writer); + expression.toString(writer, localData); + hilight(";", writer); p = 0; for (int i = 0; i < finalCommands.size(); i++) { if (finalCommands.get(i).isEmpty()) { continue; } if (p > 0) { - ret += ","; + hilight(",", writer); } - ret += stripSemicolon(finalCommands.get(i).toString(highlight, localData)); + finalCommands.get(i).toString(writer, localData); + writer.stripSemicolon(); p++; } - ret += hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n"; - ret += ":loop" + loop.id; - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer).appendNewLine(); + hilight(":loop" + loop.id, writer).appendNewLine(); + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java b/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java index b2750ff5a..06dad3558 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -51,8 +52,7 @@ public class IfItem extends GraphTargetItem implements Block { } @Override - public String toString(boolean highlight, List localData) { - String ret; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { GraphTargetItem expr = expression; List ifBranch = onTrue; List elseBranch = onFalse; @@ -71,27 +71,30 @@ public class IfItem extends GraphTargetItem implements Block { elseBranch = onTrue; } } - ret = hilight("if(", highlight) + expr.toString(highlight, localData) + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + hilight("if(", writer); + expr.toString(writer, localData); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : ifBranch) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); + hilight(Graph.INDENTCLOSE + "\r\n", writer); + hilight("}", writer); if (elseBranch.size() > 0) { - ret += "\r\n" + hilight("else", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + hilight("\r\nelse\r\n", writer); + hilight("{\r\n" + Graph.INDENTOPEN + "\r\n", writer); for (GraphTargetItem ti : elseBranch) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData); + hilight("\r\n", writer); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight); + hilight(Graph.INDENTCLOSE + "\r\n}", writer); } - return ret; + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/IntegerValueItem.java b/trunk/src/com/jpexs/decompiler/graph/model/IntegerValueItem.java index 6c8f58741..2c342f397 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/IntegerValueItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/IntegerValueItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.List; @@ -34,8 +35,8 @@ public class IntegerValueItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return hilight("" + intValue, highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + return hilight("" + intValue, writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/ParenthesisItem.java b/trunk/src/com/jpexs/decompiler/graph/model/ParenthesisItem.java index 77563a686..5d4dd0f15 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/ParenthesisItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/ParenthesisItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -33,8 +34,10 @@ public class ParenthesisItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return hilight("(", highlight) + value.toString(highlight, localData) + hilight(")", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("(", writer); + value.toString(writer, localData); + return hilight(")", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/ScriptEndItem.java b/trunk/src/com/jpexs/decompiler/graph/model/ScriptEndItem.java index c59f7d72e..f322389b7 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/ScriptEndItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/ScriptEndItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.List; @@ -30,8 +31,8 @@ public class ScriptEndItem extends GraphTargetItem implements ExitItem { } @Override - public String toString(boolean highlight, List localData) { - return ""; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java b/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java index f50bf6bf7..3bc84dd7c 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -51,41 +52,46 @@ public class SwitchItem extends LoopItem implements Block { } @Override - public String toString(boolean highlight, List localData) { - String ret = ""; - ret += hilight("loopswitch" + loop.id + ":", highlight) + "\r\n"; - ret += hilight("switch(", highlight) + switchedObject.toString(highlight, localData) + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("loopswitch" + loop.id + ":", writer).appendNewLine(); + hilight("switch(", writer); + switchedObject.toString(writer, localData); + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (int i = 0; i < caseCommands.size(); i++) { for (int k = 0; k < valuesMapping.size(); k++) { if (valuesMapping.get(k) == i) { - ret += hilight("case ", highlight) + caseValues.get(k).toString(highlight, localData) + hilight(":", highlight) + "\r\n"; + hilight("case ", writer); + caseValues.get(k).toString(writer, localData); + hilight(":", writer).appendNewLine(); } } - ret += Graph.INDENTOPEN + "\r\n"; + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (int j = 0; j < caseCommands.get(i).size(); j++) { if (!caseCommands.get(i).get(j).isEmpty()) { - ret += caseCommands.get(i).get(j).toStringSemicoloned(highlight, localData) + "\r\n"; + caseCommands.get(i).get(j).toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); } if (defaultCommands != null) { if (defaultCommands.size() > 0) { - ret += hilight("default", highlight) + hilight(":", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + hilight("default", writer); + hilight(":", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (int j = 0; j < defaultCommands.size(); j++) { if (!defaultCommands.get(j).isEmpty()) { - ret += defaultCommands.get(j).toStringSemicoloned(highlight, localData) + "\r\n"; + defaultCommands.get(j).toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n"; - ret += ":loop" + loop.id; - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer).appendNewLine(); + hilight(":loop" + loop.id, writer); + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/TernarOpItem.java b/trunk/src/com/jpexs/decompiler/graph/model/TernarOpItem.java index ae3637663..6d36a3a45 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/TernarOpItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/TernarOpItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; @@ -35,8 +36,13 @@ public class TernarOpItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return expression.toString(highlight, localData) + hilight("?", highlight) + onTrue.toString(highlight, localData) + hilight(":", highlight) + onFalse.toString(highlight, localData); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + expression.toString(writer, localData); + hilight("?", writer); + onTrue.toString(writer, localData); + hilight(":", writer); + onFalse.toString(writer, localData); + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/TrueItem.java b/trunk/src/com/jpexs/decompiler/graph/model/TrueItem.java index b3b67c1ce..b30067762 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/TrueItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/TrueItem.java @@ -1,5 +1,6 @@ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import java.util.List; @@ -15,8 +16,8 @@ public class TrueItem extends GraphTargetItem { } @Override - public String toString(boolean highlight, List localData) { - return hilight("true", highlight); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + return hilight("true", writer); } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/UnaryOpItem.java b/trunk/src/com/jpexs/decompiler/graph/model/UnaryOpItem.java index f939d9868..cab8df853 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/UnaryOpItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/UnaryOpItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -33,14 +34,20 @@ public abstract class UnaryOpItem extends GraphTargetItem implements UnaryOp { } @Override - public String toString(boolean highlight, List localData) { - String s = (value == null ? hilight("null", highlight) : value.toString(highlight, localData)); + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight(operator, writer); if (value != null) { if (value.precedence > precedence) { - s = hilight("(", highlight) + s + hilight(")", highlight); + hilight("(", writer); + value.toString(writer, localData); + hilight(")", writer); + } else { + value.toString(writer, localData); } + } else { + hilight("null", writer); } - return hilight(operator, highlight) + s; + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java b/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java index e3af080a3..88f150143 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -37,21 +38,20 @@ public class UniversalLoopItem extends LoopItem implements Block { } @Override - public String toString(boolean highlight, List localData) { - String ret = ""; - ret += hilight("loop" + loop.id + ":", highlight) + "\r\n"; - ret += hilight("while(true)", highlight); - ret += "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("loop" + loop.id + ":", writer).appendNewLine(); + hilight("while(true)", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n"; - ret += hilight(":loop" + loop.id, highlight); - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer).appendNewLine(); + hilight(":loop" + loop.id, writer); + return writer; } @Override diff --git a/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java b/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java index 6758f3a47..a36d214aa 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.graph.model; +import com.jpexs.decompiler.flash.helpers.HilightedTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -44,30 +45,30 @@ public class WhileItem extends LoopItem implements Block { } @Override - public String toString(boolean highlight, List localData) { - String ret = ""; - ret += hilight("loop" + loop.id + ":", highlight) + "\r\n"; - String expStr = ""; + public HilightedTextWriter toString(HilightedTextWriter writer, List localData) { + hilight("loop" + loop.id + ":", writer).appendNewLine(); + hilight("while(", writer); for (int i = 0; i < expression.size(); i++) { if (expression.get(i).isEmpty()) { continue; } - if (!expStr.equals("")) { - expStr += hilight(", ", highlight); + if (i != 0) { + hilight(", ", writer); } - expStr += expression.get(i).toString(highlight, localData); + expression.get(i).toString(writer, localData); } - ret += hilight("while(", highlight) + expStr + hilight(")", highlight) + "\r\n" + hilight("{", highlight) + "\r\n"; - ret += Graph.INDENTOPEN + "\r\n"; + hilight(")", writer).appendNewLine(); + hilight("{", writer).appendNewLine(); + hilight(Graph.INDENTOPEN, writer).appendNewLine(); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { - ret += ti.toStringSemicoloned(highlight, localData) + "\r\n"; + ti.toStringSemicoloned(writer, localData).appendNewLine(); } } - ret += Graph.INDENTCLOSE + "\r\n"; - ret += hilight("}", highlight) + "\r\n"; - ret += hilight(":loop" + loop.id, highlight); - return ret; + hilight(Graph.INDENTCLOSE, writer).appendNewLine(); + hilight("}", writer).appendNewLine(); + hilight(":loop" + loop.id, writer); + return writer; } @Override