diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java index 01d0e16a7..c5eb9a8e9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java @@ -178,6 +178,13 @@ public class FontExporter { int glyphCount = 0; for (int i = 0; i < shapes.size(); i++) { + + //if there are more glyphs for one char (in some weird fonts), use the last glyph + char c = t.glyphToChar(i); + while (i + 1 < shapes.size() && t.glyphToChar(i + 1) == c) { + i++; + } + SHAPE s = shapes.get(i); final List contours = new ArrayList<>(); PathExporter seb = new PathExporter(swf, s, null) { @@ -222,7 +229,6 @@ public class FontExporter { } }; seb.export(); - char c = t.glyphToChar(i); FGlyph g = f.addGlyph(c); glyphCount++; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineCompactedFont.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineCompactedFont.java index 5980c4e2a..8928a19e6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineCompactedFont.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineCompactedFont.java @@ -210,7 +210,7 @@ public final class DefineCompactedFont extends FontTag { pos = i; break; } - + return false; } } @@ -218,7 +218,7 @@ public final class DefineCompactedFont extends FontTag { if (pos == -1) { return false; } - + font.glyphInfo.remove(pos); font.glyphs.remove(pos); shapeCache.remove(pos); @@ -420,16 +420,16 @@ public final class DefineCompactedFont extends FontTag { ret.fontFlagsWideOffsets = true; ret.fontFlagsWideCodes = true; ret.fontFlagsHasLayout = true; - ret.fontAscent = (getAscent()); - ret.fontDescent = (getDescent()); - ret.fontLeading = (getLeading()); + ret.fontAscent = resize(getAscent()); + ret.fontDescent = resize(getDescent()); + ret.fontLeading = resize(getLeading()); ret.fontAdvanceTable = new ArrayList<>(); ret.fontBoundsTable = new ArrayList<>(); ret.codeTable = new ArrayList<>(); ret.glyphShapeTable = new ArrayList<>(); List shp = getGlyphShapeTable(); for (int g = 0; g < shp.size(); g++) { - ret.fontAdvanceTable.add(resize(getGlyphAdvance(g))); + ret.fontAdvanceTable.add((int) getGlyphAdvance(g)); //already resized ret.codeTable.add((int) glyphToChar(g)); SHAPE shpX = resizeShape(shp.get(g));