From 3131715fb5bce44da6c7584315237731aa752eba Mon Sep 17 00:00:00 2001 From: Peter Breitenlohner Date: Thu, 1 Dec 2011 13:24:38 +0000 Subject: ttfdump: Added functionality - do not segfault for fonts without loca table - allow cmap subtables with format 8, 10, 12, and 13 - handle GPOS and GSUB tables - additional tests git-svn-id: svn://tug.org/texlive/trunk@24713 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/ttfdump/src/ttfdump.c | 41 +++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'Build/source/texk/ttfdump/src') diff --git a/Build/source/texk/ttfdump/src/ttfdump.c b/Build/source/texk/ttfdump/src/ttfdump.c index d603483dc28..0726b3b0e5f 100644 --- a/Build/source/texk/ttfdump/src/ttfdump.c +++ b/Build/source/texk/ttfdump/src/ttfdump.c @@ -52,6 +52,9 @@ static void print_vdmx(FILE *out); static void print_vhea(FILE *out); static void print_vmtx(FILE *out); +static void print_gpos(FILE *out); +static void print_gsub(FILE *out); + static void usage (void); @@ -157,6 +160,9 @@ main(int argc, char *argv[]) print_offset(dp_file); print_dir(dp_file); + if (font->loca == NULL) + glyphnum = NO_GLYF; + if (tablename == NULL) { /* no table specified */ @@ -236,6 +242,10 @@ print_table(FILE *out, char *tablename) print_vhea(out); if (!strcmp(tablename, "vmtx")) print_vmtx(out); + if (!strcmp(tablename, "GPOS")) + print_gpos(out); + if (!strcmp(tablename, "GSUB")) + print_gsub(out); } @@ -262,6 +272,10 @@ print_all_tables(FILE *dp_file) print_vdmx(dp_file); print_vhea(dp_file); print_vmtx(dp_file); + + /* Additional OpenType Tables */ + print_gpos(dp_file); + print_gsub(dp_file); } @@ -270,7 +284,6 @@ print_ttc(TTCHeaderPtr ttc, FILE *out) { int i, b[2]; - FixedSplit(ttc->version, b); fprintf(out, "TrueType Collection Header\n"); @@ -295,9 +308,17 @@ print_prologue(FILE *out) static void print_offset(FILE *out) { + int b[2]; + + FixedSplit(font->version, b); + fprintf(out, "Offset Table\n"); fprintf(out, "------------\n"); - fprintf(out, "\t sfnt version:\n"); + fprintf(out, "\t sfnt version: "); + if (b[1] & 0xff00) + fprintf(out, "'%s'\n", TagToStr (font->version)); + else + fprintf(out, "\t\t %d.%d\n", b[1], b[0]); fprintf(out, "\t number of tables: %d\n", font->numTables); } @@ -504,6 +525,22 @@ print_vmtx(FILE *out) } +static void +print_gpos(FILE *out) +{ + if (font->gpos != NULL) + ttfPrintGPOS(out, font->gpos); +} + + +static void +print_gsub(FILE *out) +{ + if (font->gsub != NULL) + ttfPrintGSUB(out, font->gsub); +} + + static void usage(void) { -- cgit v1.2.3