diff options
author | yehh <yehh@google.com> | 2012-08-13 21:35:26 +0000 |
---|---|---|
committer | yehh <yehh@google.com> | 2012-08-13 21:35:26 +0000 |
commit | cdac80e31ce2d1db2fa758776b6ce7c06368b2ae (patch) | |
tree | a22c63209215fa36c32981e87949b3bafe844e9a | |
parent | bb941ff09d4bb19e839f377d7beb60beb575f370 (diff) | |
download | sfntly-cdac80e31ce2d1db2fa758776b6ce7c06368b2ae.tar.gz |
Modified font information tool based on requests: Added glyph Id for each character to listing of characters, removed redundant trailing spaces for left-aligned columns at the end of each row, added function to produce properly-formatted code point strings
CL @ http://codereview.appspot.com/6465044/
-rw-r--r-- | java/src/com/google/typography/font/tools/fontinfo/DataDisplayTable.java | 53 | ||||
-rw-r--r-- | java/src/com/google/typography/font/tools/fontinfo/FontInfo.java | 33 |
2 files changed, 42 insertions, 44 deletions
diff --git a/java/src/com/google/typography/font/tools/fontinfo/DataDisplayTable.java b/java/src/com/google/typography/font/tools/fontinfo/DataDisplayTable.java index 954b963..f8cb78b 100644 --- a/java/src/com/google/typography/font/tools/fontinfo/DataDisplayTable.java +++ b/java/src/com/google/typography/font/tools/fontinfo/DataDisplayTable.java @@ -162,10 +162,16 @@ public class DataDisplayTable { StringBuilder output = new StringBuilder(); // Add header to output - output.append(padString(header.get(0), displayAlignment.get(0), maxColLengths.get(0))); - for (int i = 1; i < numCols; i++) { - output.append(" ") - .append(padString(header.get(i), displayAlignment.get(i), maxColLengths.get(i))); + for (int i = 0; i < numCols - 1; i++) { + output.append(padString(header.get(i), displayAlignment.get(i), maxColLengths.get(i))) + .append(" "); + } + if (displayAlignment.get(numCols - 1) == Align.Left) { + // Do not pad last column if left-aligned + output.append(header.get(numCols - 1)); + } else { + output.append(padString(header.get(numCols - 1), displayAlignment.get(numCols - 1), + maxColLengths.get(numCols - 1))); } output.append("\n"); @@ -178,10 +184,16 @@ public class DataDisplayTable { // Add data to output for (List<String> row : data) { - output.append(padString(row.get(0), displayAlignment.get(0), maxColLengths.get(0))); - for (int i = 1; i < numCols; i++) { - output.append(" ") - .append(padString(row.get(i), displayAlignment.get(i), maxColLengths.get(i))); + for (int i = 0; i < numCols - 1; i++) { + output.append(padString(row.get(i), displayAlignment.get(i), maxColLengths.get(i))) + .append(" "); + } + if (displayAlignment.get(numCols - 1) == Align.Left) { + // Do not pad last column if left-aligned + output.append(row.get(numCols - 1)); + } else { + output.append(padString(row.get(numCols - 1), displayAlignment.get(numCols - 1), + maxColLengths.get(numCols - 1))); } output.append("\n"); } @@ -198,30 +210,7 @@ public class DataDisplayTable { * method. */ public void prettyPrint() { - // Print header - System.out.print(padString(header.get(0), displayAlignment.get(0), maxColLengths.get(0))); - for (int i = 1; i < numCols; i++) { - System.out.print( - " " + padString(header.get(i), displayAlignment.get(i), maxColLengths.get(i))); - } - System.out.println(""); - - // Print separator - System.out.print(repeatCharacter('-', maxColLengths.get(0))); - for (int i = 1; i < numCols; i++) { - System.out.print(" " + repeatCharacter('-', maxColLengths.get(i))); - } - System.out.println(""); - - // Print data - for (List<String> row : data) { - System.out.print(padString(row.get(0), displayAlignment.get(0), maxColLengths.get(0))); - for (int i = 1; i < numCols; i++) { - System.out.print( - " " + padString(row.get(i), displayAlignment.get(i), maxColLengths.get(i))); - } - System.out.println(); - } + System.out.println(prettyString()); } /** diff --git a/java/src/com/google/typography/font/tools/fontinfo/FontInfo.java b/java/src/com/google/typography/font/tools/fontinfo/FontInfo.java index 53a6294..ce4cece 100644 --- a/java/src/com/google/typography/font/tools/fontinfo/FontInfo.java +++ b/java/src/com/google/typography/font/tools/fontinfo/FontInfo.java @@ -20,7 +20,6 @@ import com.google.typography.font.sfntly.table.core.NameTable.NameId; import com.google.typography.font.sfntly.table.core.NameTable.UnicodeLanguageId; import com.google.typography.font.sfntly.table.core.NameTable.WindowsLanguageId; import com.google.typography.font.sfntly.table.core.OS2Table; -import com.google.typography.font.sfntly.table.core.PostScriptTable; import com.google.typography.font.sfntly.table.truetype.CompositeGlyph; import com.google.typography.font.sfntly.table.truetype.Glyph; import com.google.typography.font.sfntly.table.truetype.Glyph.GlyphType; @@ -131,7 +130,7 @@ public class FontInfo { while (fontTableIter.hasNext()) { Table fontTable = fontTableIter.next(); String name = Tag.stringValue(fontTable.headerTag()); - String checksum = String.format("0x%0" + CHECKSUM_LENGTH + "x", fontTable.headerChecksum()); + String checksum = String.format("0x%0" + CHECKSUM_LENGTH + "X", fontTable.headerChecksum()); int length = fontTable.headerLength(); double lengthPercent = length * 100.0 / fontSize; int offset = fontTable.headerOffset(); @@ -256,24 +255,17 @@ public class FontInfo { * if font does not contain a UCS-4 or UCS-2 cmap */ public static DataDisplayTable listChars(Font font) { - String[] header = { "Code point", "Name in font", "Unicode-designated name for code point" }; - Align[] displayAlignment = { Align.Right, Align.Left, Align.Left }; + String[] header = { "Code point", "Glyph ID", "Unicode-designated name for code point" }; + Align[] displayAlignment = { Align.Right, Align.Right, Align.Left }; DataDisplayTable table = new DataDisplayTable(Arrays.asList(header)); table.setAlignment(Arrays.asList(displayAlignment)); // Iterate through all code points CMap cmap = getUCSCMap(font); - PostScriptTable postTable = (PostScriptTable) getTable(font, Tag.post); for (int charId : cmap) { int glyphId = cmap.glyphId(charId); if (glyphId != CMapTable.NOTDEF) { - String name = ""; - try { - name = postTable.glyphName(glyphId); - } catch (Exception e) { - // Set name to empty string for unsupported post table formats - } - String[] data = { String.format("0x%s", Integer.toHexString(charId)), name, + String[] data = { getFormattedCodePointString(charId), String.format("%d", glyphId), UCharacter.getExtendedName(charId) }; table.add(Arrays.asList(data)); } @@ -513,4 +505,21 @@ public class FontInfo { private static GlyphTable getGlyphTable(Font font) { return (GlyphTable) getTable(font, Tag.glyf); } + + /** + * Gets a string version of the code point formatted as "U+hhhh" or "U+hhhhhh" + * + * @param codePoint + * the code point to format + * @return a formatted version of the code point as a string + */ + private static String getFormattedCodePointString(int codePoint) { + if (UCharacter.isValidCodePoint(codePoint)) { + if (UCharacter.isBMP(codePoint)) { + return String.format("U+%04X", codePoint); + } + return String.format("U+%06X", codePoint); + } + throw new IllegalArgumentException("Invalid code point " + codePoint); + } } |