aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryehh <yehh@google.com>2012-08-13 21:35:26 +0000
committeryehh <yehh@google.com>2012-08-13 21:35:26 +0000
commitcdac80e31ce2d1db2fa758776b6ce7c06368b2ae (patch)
treea22c63209215fa36c32981e87949b3bafe844e9a
parentbb941ff09d4bb19e839f377d7beb60beb575f370 (diff)
downloadsfntly-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.java53
-rw-r--r--java/src/com/google/typography/font/tools/fontinfo/FontInfo.java33
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);
+ }
}