From d3f008a1071af02e26153a367b203b30f2ac35fc Mon Sep 17 00:00:00 2001 From: David Schweinsberg Date: Tue, 29 Mar 2016 13:05:21 -0700 Subject: Additional logging around font suitcases --- src/net/java/dev/typecast/ot/OTFont.java | 11 ++++++++++- src/net/java/dev/typecast/ot/OTFontCollection.java | 21 +++++++++++++++++---- src/net/java/dev/typecast/ot/table/LocaTable.java | 20 +++++++++++++++++++- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/net/java/dev/typecast/ot/OTFont.java b/src/net/java/dev/typecast/ot/OTFont.java index 95e75a4..7179aba 100644 --- a/src/net/java/dev/typecast/ot/OTFont.java +++ b/src/net/java/dev/typecast/ot/OTFont.java @@ -69,6 +69,8 @@ import net.java.dev.typecast.ot.table.Table; import net.java.dev.typecast.ot.table.TableDirectory; import net.java.dev.typecast.ot.table.TableFactory; import net.java.dev.typecast.ot.table.VheaTable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * The TrueType font. @@ -92,6 +94,8 @@ public class OTFont { private PostTable _post; private VheaTable _vhea; + static final Logger logger = LoggerFactory.getLogger(OTFont.class); + /** * Constructor */ @@ -251,7 +255,12 @@ public class OTFont { } dis.reset(); dis.skip(tablesOrigin + entry.getOffset()); - _tables[index] = TableFactory.create(_fc, this, entry, dis); + try { + _tables[index] = TableFactory.create(_fc, this, entry, dis); + } catch (IOException e) { + logger.error("Exception loading Directory Entry {}", entry); + throw e; + } ++index; } diff --git a/src/net/java/dev/typecast/ot/OTFontCollection.java b/src/net/java/dev/typecast/ot/OTFontCollection.java index f0ed2c3..bc13302 100644 --- a/src/net/java/dev/typecast/ot/OTFontCollection.java +++ b/src/net/java/dev/typecast/ot/OTFontCollection.java @@ -18,21 +18,21 @@ package net.java.dev.typecast.ot; -import java.io.File; import java.io.BufferedInputStream; import java.io.DataInputStream; +import java.io.File; import java.io.FileInputStream; import java.io.IOException; - import java.util.ArrayList; - import net.java.dev.typecast.ot.mac.ResourceHeader; import net.java.dev.typecast.ot.mac.ResourceMap; import net.java.dev.typecast.ot.mac.ResourceReference; import net.java.dev.typecast.ot.mac.ResourceType; import net.java.dev.typecast.ot.table.DirectoryEntry; -import net.java.dev.typecast.ot.table.Table; import net.java.dev.typecast.ot.table.TTCHeader; +import net.java.dev.typecast.ot.table.Table; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @@ -47,6 +47,8 @@ public class OTFontCollection { private ArrayList _tables = new ArrayList
(); private boolean _resourceFork = false; + static final Logger logger = LoggerFactory.getLogger(OTFontCollection.class); + /** Creates new FontCollection */ protected OTFontCollection() { } @@ -131,6 +133,17 @@ public class OTFontCollection { dis.skip(resourceHeader.getMapOffset()); ResourceMap map = new ResourceMap(dis); + // Dump some info about the font suitcase + for (int i = 0; i < map.getResourceTypeCount(); ++i) { + logger.info(map.getResourceType(i).getTypeAsString()); + } + + ResourceType type = map.getResourceType("FOND"); + for (int i = 0; i < type.getCount(); ++i) { + ResourceReference reference = type.getReference(i); + logger.info(reference.getName()); + } + // Get the 'sfnt' resources ResourceType resourceType = map.getResourceType("sfnt"); diff --git a/src/net/java/dev/typecast/ot/table/LocaTable.java b/src/net/java/dev/typecast/ot/table/LocaTable.java index fecf005..34ba93f 100644 --- a/src/net/java/dev/typecast/ot/table/LocaTable.java +++ b/src/net/java/dev/typecast/ot/table/LocaTable.java @@ -10,6 +10,8 @@ package net.java.dev.typecast.ot.table; import java.io.DataInput; import java.io.IOException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author David Schweinsberg @@ -20,6 +22,8 @@ public class LocaTable implements Table { private int[] _offsets = null; private short _factor = 0; + static final Logger logger = LoggerFactory.getLogger(LocaTable.class); + protected LocaTable( DirectoryEntry de, DataInput di, @@ -39,6 +43,17 @@ public class LocaTable implements Table { _offsets[i] = di.readInt(); } } + + // Check the validity of the offsets + int lastOffset = 0; + int index = 0; + for (int offset : _offsets) { + if (offset < lastOffset) { + logger.error("Offset at index {} is bad ({} < {})", index, offset, lastOffset); + } + lastOffset = offset; + ++index; + } } public int getOffset(int i) { @@ -48,12 +63,14 @@ public class LocaTable implements Table { return _offsets[i] * _factor; } + @Override public int getType() { return loca; } + @Override public String toString() { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("'loca' Table - Index To Location Table\n--------------------------------------\n") .append("Size = ").append(_de.getLength()).append(" bytes, ") .append(_offsets.length).append(" entries\n"); @@ -70,6 +87,7 @@ public class LocaTable implements Table { * particular table. * @return A directory entry */ + @Override public DirectoryEntry getDirectoryEntry() { return _de; } -- cgit v1.2.3