diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharScales.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharAdvances.java similarity index 61% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharScales.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharAdvances.java index 1c67ad985..6e81126ca 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharScales.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharAdvances.java @@ -8,21 +8,25 @@ import java.util.List; * * @author JPEXS */ -public class IggyCharScales implements StructureInterface { +public class IggyCharAdvances implements StructureInterface { - List scales; + List advances; private long charCount; - public IggyCharScales(AbstractDataStream stream, long charCount) throws IOException { + public List getScales() { + return advances; + } + + public IggyCharAdvances(AbstractDataStream stream, long charCount) throws IOException { this.charCount = charCount; readFromDataStream(stream); } @Override public void readFromDataStream(AbstractDataStream stream) throws IOException { - scales = new ArrayList<>(); + advances = new ArrayList<>(); for (int i = 0; i < charCount; i++) { - scales.add(stream.readFloat()); + advances.add(stream.readFloat()); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharOffset.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharOffset.java index 7c201a42a..5272599d6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharOffset.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharOffset.java @@ -72,12 +72,12 @@ public class IggyCharOffset implements StructureInterface { return zero; } - public int getIschar1() { - return ischar1; + public boolean isChar1() { + return ischar1 > 0; } - public int getIschar2() { - return ischar2; + public boolean isChar2() { + return ischar2 > 0; } public long getZero2() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFont.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFont.java index c19776776..c68863c62 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFont.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFont.java @@ -91,14 +91,14 @@ public class IggyFont implements StructureInterface { String name; List charOffsets; - List glyphs; + List glyphs; IggyCharIndices codePoints; - IggyCharScales charScales; + IggyCharAdvances charScales; IggyCharKerning charKernings; byte[] padTo4byteBoundary; - public IggyFont(int type, int order_in_iggy_file, byte[] zeroone, int char_count2, int ascent, int descent, int leading, long flags, long start_of_char_struct, long start_of_char_index, long start_of_scale, long kern_count, float[] unk_float, long start_of_kern, long zero_padd, long what_2, long zero_padd_2, long start_of_name, long one_padd, int xscale, int yscale, long zero_padd_3, float ssr1, float ssr2, long char_count, long zero_padd_4, long what_3, byte[] zeroes, float sss1, long one_padd2, float sss2, long one_padd3, float sss3, long one_padd4, float sss4, long one_padd5, String name, List charOffsets, List chars, IggyCharIndices charIndices, IggyCharScales charScales, IggyCharKerning charKernings, byte[] padTo4byteBoundary) { + public IggyFont(int type, int order_in_iggy_file, byte[] zeroone, int char_count2, int ascent, int descent, int leading, long flags, long start_of_char_struct, long start_of_char_index, long start_of_scale, long kern_count, float[] unk_float, long start_of_kern, long zero_padd, long what_2, long zero_padd_2, long start_of_name, long one_padd, int xscale, int yscale, long zero_padd_3, float ssr1, float ssr2, long char_count, long zero_padd_4, long what_3, byte[] zeroes, float sss1, long one_padd2, float sss2, long one_padd3, float sss3, long one_padd4, float sss4, long one_padd5, String name, List charOffsets, List chars, IggyCharIndices charIndices, IggyCharAdvances charScales, IggyCharKerning charKernings, byte[] padTo4byteBoundary) { this.type = type; this.fontId = order_in_iggy_file; this.zeroone = zeroone; @@ -223,12 +223,7 @@ public class IggyFont implements StructureInterface { glyphs = new ArrayList<>(); for (int i = 0; i < char_count; i++) { long offset = charOffsets.get(i).offset; - if (offset > 0) { - glyphs.add(new IggyChar(s, offset)); - } else { - s.seek(1, SeekMode.CUR); - glyphs.add(null); - } + glyphs.add(new IggyShape(s, offset)); } } if (start_of_char_index != 0) { @@ -237,7 +232,7 @@ public class IggyFont implements StructureInterface { } if (start_of_scale != 0) { s.seek(start_of_scale, SeekMode.SET); - charScales = new IggyCharScales(s, char_count); + charScales = new IggyCharAdvances(s, char_count); } if (start_of_kern != 0) { s.seek(start_of_kern, SeekMode.SET); @@ -274,7 +269,7 @@ public class IggyFont implements StructureInterface { return name; } - public List getChars() { + public List getChars() { return glyphs; } @@ -282,7 +277,7 @@ public class IggyFont implements StructureInterface { return codePoints; } - public IggyCharScales getCharScales() { + public IggyCharAdvances getCharAdvances() { return charScales; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyChar.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyShape.java similarity index 65% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyChar.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyShape.java index a8eaff8c8..863366226 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyChar.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyShape.java @@ -10,20 +10,20 @@ import java.util.logging.Logger; * * @author JPEXS */ -public class IggyChar implements StructureInterface { +public class IggyShape implements StructureInterface { - private static Logger LOGGER = Logger.getLogger(IggyChar.class.getName()); + private static Logger LOGGER = Logger.getLogger(IggyShape.class.getName()); @IggyFieldType(DataType.float_t) - float minx; + float minx; //bearing X - this is the horizontal distance from the current pen position to the glyph's left bbox edge. @IggyFieldType(DataType.float_t) - float miny; + float miny; //bearing Y - this is the vertical distance from the baseline to the top of the glyph's bbox. @IggyFieldType(DataType.float_t) - float maxx; + float maxx; //advanceX - bearingX @IggyFieldType(DataType.float_t) - float maxy; + float maxy; //advanceY - bearingY @IggyFieldType(DataType.uint64_t) - long advance; // stejny vetsinou - napr. 48 - JP: to by mohlo byt advance + long unk; // stejny vetsinou - napr. 48 - JP: to by mohlo byt advance @IggyFieldType(DataType.uint64_t) long count; @IggyFieldType(DataType.uint64_t) @@ -37,21 +37,37 @@ public class IggyChar implements StructureInterface { @IggyFieldType(DataType.uint32_t) long two1; // 2 - List nodes; + public float getBearingX() { + return minx; + } + + public float getBearingY() { + return miny; + } + + public float getWidth() { + return maxx - minx; + } + + public float getHeight() { + return maxy - miny; + } + + List nodes; private long offset; - public IggyChar(AbstractDataStream stream, long offset) throws IOException { + public IggyShape(AbstractDataStream stream, long offset) throws IOException { this.offset = offset; readFromDataStream(stream); } - public IggyChar(float minx, float miny, float maxx, float maxy, long advance, long count, long one, long one2, long one3, long one4, long two1, List nodes) { + public IggyShape(float minx, float miny, float maxx, float maxy, long advance, long count, long one, long one2, long one3, long one4, long two1, List nodes) { this.minx = minx; this.miny = miny; this.maxx = maxx; this.maxy = maxy; - this.advance = advance; + this.unk = advance; this.count = count; this.one = one; this.one2 = one2; @@ -68,7 +84,7 @@ public class IggyChar implements StructureInterface { miny = s.readFloat(); maxx = s.readFloat(); maxy = s.readFloat(); - advance = s.readUI64(); + unk = s.readUI64(); count = s.readUI64(); one = s.readUI64(); one2 = s.readUI64(); @@ -82,7 +98,7 @@ public class IggyChar implements StructureInterface { nodes = new ArrayList<>(); for (int i = 0; i < count; i++) { - nodes.add(new IggyCharNode(s, i == 0)); + nodes.add(new IggyShapeNode(s, i == 0)); } } @@ -108,8 +124,8 @@ public class IggyChar implements StructureInterface { return maxy; } - public long getAdvance() { - return advance; + public long getUnk() { + return unk; } public long getOne() { @@ -132,7 +148,7 @@ public class IggyChar implements StructureInterface { return two1; } - public List getNodes() { + public List getNodes() { return nodes; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharNode.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyShapeNode.java similarity index 86% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharNode.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyShapeNode.java index a543523ca..4668a00a6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharNode.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyShapeNode.java @@ -9,9 +9,9 @@ import java.util.logging.Logger; * * @author JPEXS */ -public class IggyCharNode implements StructureInterface { +public class IggyShapeNode implements StructureInterface { - private static Logger LOGGER = Logger.getLogger(IggyCharNode.class.getName()); + private static Logger LOGGER = Logger.getLogger(IggyShapeNode.class.getName()); public static int NODE_TYPE_MOVE = 1; public static int NODE_TYPE_LINE_TO = 2; @@ -38,7 +38,7 @@ public class IggyCharNode implements StructureInterface { private boolean first; - public IggyCharNode(float x1, float y1, float x2, float y2, int node_type, int node_subtype, int zer1, int zer2, long isstart) { + public IggyShapeNode(float x1, float y1, float x2, float y2, int node_type, int node_subtype, int zer1, int zer2, long isstart) { this.targetX = x1; this.targetY = y1; this.controlX = x2; @@ -50,7 +50,7 @@ public class IggyCharNode implements StructureInterface { this.isstart = isstart; } - public IggyCharNode(AbstractDataStream s, boolean first) throws IOException { + public IggyShapeNode(AbstractDataStream s, boolean first) throws IOException { this.first = first; readFromDataStream(s); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyCharToShapeConvertor.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyShapeToSwfConvertor.java similarity index 69% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyCharToShapeConvertor.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyShapeToSwfConvertor.java index 4d473e9d3..829ec6429 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyCharToShapeConvertor.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyShapeToSwfConvertor.java @@ -1,8 +1,8 @@ package com.jpexs.decompiler.flash.iggy.conversion; import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.iggy.IggyChar; -import com.jpexs.decompiler.flash.iggy.IggyCharNode; +import com.jpexs.decompiler.flash.iggy.IggyShape; +import com.jpexs.decompiler.flash.iggy.IggyShapeNode; import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; import com.jpexs.decompiler.flash.types.LINESTYLE; import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; @@ -21,43 +21,39 @@ import java.util.List; * * @author JPEXS */ -public class IggyCharToShapeConvertor { +public class IggyShapeToSwfConvertor { - private static int convertDistanceX(double val) { + private static int makeLengthsEm(double val) { return (int) (val * 1024.0); } - private static int convertDistanceY(double val) { - return (int) (val * 1024.0); - } - - public static SHAPE convertCharToShape(IggyChar igchar) { + public static SHAPE convertCharToShape(IggyShape igchar) { SHAPE shape = new SHAPE(); List retList = new ArrayList<>(); - List ignodes = igchar.getNodes(); + List ignodes = igchar.getNodes(); int prevX = 0; int prevY = 0; - for (IggyCharNode ign : ignodes) { - if (ign.getNodeType() == IggyCharNode.NODE_TYPE_MOVE) { + for (IggyShapeNode ign : ignodes) { + if (ign.getNodeType() == IggyShapeNode.NODE_TYPE_MOVE) { StyleChangeRecord scr = new StyleChangeRecord(); scr.stateMoveTo = true; - prevX = scr.moveDeltaX = convertDistanceX(ign.getX1()); - prevY = scr.moveDeltaY = convertDistanceY(ign.getY1()); + prevX = scr.moveDeltaX = makeLengthsEm(ign.getX1()); + prevY = scr.moveDeltaY = makeLengthsEm(ign.getY1()); scr.fillStyles = new FILLSTYLEARRAY(); scr.lineStyles = new LINESTYLEARRAY(); scr.calculateBits(); retList.add(scr); } else { - int curX1 = convertDistanceX(ign.getX1()); - int curY1 = convertDistanceY(ign.getY1()); + int curX1 = makeLengthsEm(ign.getX1()); + int curY1 = makeLengthsEm(ign.getY1()); - int curX2 = convertDistanceX(ign.getX2()); - int curY2 = convertDistanceY(ign.getY2()); + int curX2 = makeLengthsEm(ign.getX2()); + int curY2 = makeLengthsEm(ign.getY2()); - if (ign.getNodeType() == IggyCharNode.NODE_TYPE_LINE_TO) { + if (ign.getNodeType() == IggyShapeNode.NODE_TYPE_LINE_TO) { StraightEdgeRecord ser = new StraightEdgeRecord(); ser.deltaX = curX1 - prevX; ser.deltaY = curY1 - prevY; @@ -67,7 +63,7 @@ public class IggyCharToShapeConvertor { prevX = curX1; prevY = curY1; retList.add(ser); - } else if (ign.getNodeType() == IggyCharNode.NODE_TYPE_CURVE_POINT) { + } else if (ign.getNodeType() == IggyShapeNode.NODE_TYPE_CURVE_POINT) { CurvedEdgeRecord cer = new CurvedEdgeRecord(); cer.controlDeltaX = curX2 - prevX; cer.controlDeltaY = curY2 - prevY; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyToSwfConvertor.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyToSwfConvertor.java index c959fd997..84758650f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyToSwfConvertor.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggyToSwfConvertor.java @@ -2,9 +2,11 @@ package com.jpexs.decompiler.flash.iggy.conversion; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFCompression; -import com.jpexs.decompiler.flash.iggy.IggyChar; +import com.jpexs.decompiler.flash.iggy.IggyShape; import com.jpexs.decompiler.flash.iggy.IggyCharKerning; +import com.jpexs.decompiler.flash.iggy.IggyShapeNode; import com.jpexs.decompiler.flash.iggy.IggyCharOffset; +import com.jpexs.decompiler.flash.iggy.IggyCharAdvances; import com.jpexs.decompiler.flash.iggy.IggyFile; import com.jpexs.decompiler.flash.iggy.IggyFont; import com.jpexs.decompiler.flash.iggy.IggyText; @@ -12,10 +14,17 @@ import com.jpexs.decompiler.flash.tags.DefineEditTextTag; import com.jpexs.decompiler.flash.tags.DefineFont2Tag; import com.jpexs.decompiler.flash.tags.EndTag; import com.jpexs.decompiler.flash.tags.FileAttributesTag; +import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; import com.jpexs.decompiler.flash.types.KERNINGRECORD; +import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; import com.jpexs.decompiler.flash.types.RECT; import com.jpexs.decompiler.flash.types.RGBA; import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.decompiler.flash.types.shaperecords.CurvedEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; +import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; import java.awt.Color; import java.io.File; import java.io.FileOutputStream; @@ -66,8 +75,84 @@ public class IggyToSwfConvertor { swf.saveTo(output); } - private static int makeLengthsCorrect(double val) { - return (int) (SWF.unitDivisor * val); + private static int makeLengthsTwip(double val) { + return (int) (val * SWF.unitDivisor); + } + + private static int makeLengthsEm(double val) { + return (int) (val * 1024.0); + } + + private static SHAPE createEmptyChar() { + SHAPE shape = new SHAPE(); + List retList = new ArrayList<>(); + + { + StyleChangeRecord scr = new StyleChangeRecord(); + scr.stateMoveTo = true; + scr.moveDeltaX = 0; + scr.moveDeltaY = 0; + scr.fillStyles = new FILLSTYLEARRAY(); + scr.lineStyles = new LINESTYLEARRAY(); + scr.calculateBits(); + retList.add(scr); + } + + /*{ + StraightEdgeRecord ser = new StraightEdgeRecord(); + ser.deltaX = 1024; + ser.deltaY = 0; + ser.generalLineFlag = true; + ser.simplify(); + ser.calculateBits(); + retList.add(ser); + } + + { + StraightEdgeRecord ser = new StraightEdgeRecord(); + ser.deltaX = 0; + ser.deltaY = -1024; + ser.generalLineFlag = true; + ser.simplify(); + ser.calculateBits(); + retList.add(ser); + } + + { + StraightEdgeRecord ser = new StraightEdgeRecord(); + ser.deltaX = -1024; + ser.deltaY = 0; + ser.generalLineFlag = true; + ser.simplify(); + ser.calculateBits(); + retList.add(ser); + } + + { + StraightEdgeRecord ser = new StraightEdgeRecord(); + ser.deltaX = 0; + ser.deltaY = 1024; + ser.generalLineFlag = true; + ser.simplify(); + ser.calculateBits(); + retList.add(ser); + }*/ + StyleChangeRecord init; + if (!retList.isEmpty() && retList.get(0) instanceof StyleChangeRecord) { + init = (StyleChangeRecord) retList.get(0); + } else { + init = new StyleChangeRecord(); + retList.add(0, init); + } + + retList.add(new EndShapeRecord()); + init.stateFillStyle1 = true; + init.fillStyle1 = 1; + shape.shapeRecords = retList; + shape.numFillBits = 1; + shape.numLineBits = 0; + + return shape; } public static SWF getSwf(IggyFile file, int swfIndex) { @@ -100,7 +185,7 @@ public class IggyToSwfConvertor { currentCharId++; fontIndex2CharId.put(fontIndex, currentCharId); fontTag.fontID = currentCharId; - System.out.println("==================="); + /*System.out.println("==================="); System.out.println("xscale: " + iggyFont.getXscale()); //80 System.out.println("yscale: " + iggyFont.getYscale()); //19 @@ -110,14 +195,8 @@ public class IggyToSwfConvertor { System.out.println("unk_float4: " + iggyFont.getUnk_float()[3]); System.out.println("unk_float5: " + iggyFont.getUnk_float()[4]); System.out.println("what_2: " + iggyFont.getWhat_2()); - System.out.println("what_3: " + iggyFont.getWhat_3()); + System.out.println("what_3: " + iggyFont.getWhat_3());*/ - fontTag.fontFlagsHasLayout = true; - List offsets = iggyFont.getCharOffsets(); - fontTag.fontAdvanceTable = new ArrayList<>(); - for (int i = 0; i < offsets.size(); i++) { - fontTag.fontAdvanceTable.add((int) offsets.get(i).getXscale()); - } fontTag.fontKerningTable = new ArrayList<>(); IggyCharKerning ker = iggyFont.getCharKernings(); if (ker != null) { @@ -137,21 +216,19 @@ public class IggyToSwfConvertor { fontTag.codeTable = new ArrayList<>(); fontTag.fontName = iggyFont.getName(); fontTag.glyphShapeTable = new ArrayList<>(); - fontTag.fontAdvanceTable = new ArrayList<>(); fontTag.fontBoundsTable = new ArrayList<>(); - + fontTag.fontAdvanceTable = new ArrayList<>(); + fontTag.fontFlagsHasLayout = true; + IggyCharAdvances advanceValues = iggyFont.getCharAdvances(); for (int i = 0; i < iggyFont.getCharacterCount(); i++) { int code = iggyFont.getCharIndices().getChars().get(i); - IggyChar chr = iggyFont.getChars().get(i); - if (chr != null) { - fontTag.codeTable.add(code); - SHAPE shp = IggyCharToShapeConvertor.convertCharToShape(chr); - fontTag.glyphShapeTable.add(shp); - fontTag.fontAdvanceTable.add((int) chr.getAdvance()); - fontTag.fontBoundsTable.add(shp.getBounds()); + IggyShape glyph = iggyFont.getChars().get(i); + fontTag.codeTable.add(code); + SHAPE shp = IggyShapeToSwfConvertor.convertCharToShape(glyph); + fontTag.glyphShapeTable.add(shp); + fontTag.fontBoundsTable.add(shp.getBounds()); + fontTag.fontAdvanceTable.add(makeLengthsEm(advanceValues.getScales().get(i))); - } - //FIXME: handle spaces (with no vectors), etc. } fontTag.setModified(true); swf.addTag(fontTag); @@ -167,26 +244,33 @@ public class IggyToSwfConvertor { textIndex2CharId.put(iggyText.getTextIndex(), currentCharId); textTag.characterID = currentCharId; textTag.hasText = true; - textTag.initialText = "A";//iggyText.getInitialText(); - //textTag.html = true; - textTag.hasTextColor = true; - textTag.textColor = new RGBA(Color.black); - textTag.fontHeight = 20 * 40; //?? + textTag.initialText = iggyText.getInitialText(); + textTag.html = true; + textTag.noSelect = true; + textTag.wasStatic = true; + //textTag.multiline = true; + //textTag.wordWrap = true; + //textTag.hasTextColor = true; + //textTag.textColor = new RGBA(Color.black); + textTag.fontHeight = 40; //?? textTag.readOnly = true; textTag.bounds = new RECT( - makeLengthsCorrect(iggyText.getPar3()), - makeLengthsCorrect(iggyText.getPar1()), - makeLengthsCorrect(iggyText.getPar4()), - makeLengthsCorrect(iggyText.getPar2()) + makeLengthsTwip(iggyText.getPar3()), + makeLengthsTwip(iggyText.getPar1()), + makeLengthsTwip(iggyText.getPar4()), + makeLengthsTwip(iggyText.getPar2()) ); + //textTag.hasFont = true; //textTag.fontId = fontIndex2CharId.get(iggyText.getFontIndex()); textTag.setModified(true); swf.addTag(textTag); } - swf.addTag(new EndTag(swf)); - swf.setModified(true); + swf.addTag( + new EndTag(swf)); + swf.setModified( + true); return swf; }