From a1c34c0224d32ed4f9f2909863e8ac907c94524d Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Mon, 4 Apr 2016 16:44:05 +0200 Subject: Add glyph names to trace device output. --- include/mupdf/fitz/font.h | 1 + source/fitz/font.c | 17 +++++++++++++++++ source/fitz/trace-device.c | 22 +++++++++++++++++----- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/include/mupdf/fitz/font.h b/include/mupdf/fitz/font.h index 8f3c6e72..e4feaab7 100644 --- a/include/mupdf/fitz/font.h +++ b/include/mupdf/fitz/font.h @@ -121,6 +121,7 @@ void fz_decouple_type3_font(fz_context *ctx, fz_font *font, void *t3doc); float fz_advance_glyph(fz_context *ctx, fz_font *font, int glyph, int wmode); int fz_encode_character(fz_context *ctx, fz_font *font, int unicode); int fz_encode_character_with_fallback(fz_context *ctx, fz_font *font, int unicode, int script, fz_font **out_font); +void fz_get_glyph_name(fz_context *ctx, fz_font *font, int glyph, char *buf, int size); void fz_print_font(fz_context *ctx, fz_output *out, fz_font *font); diff --git a/source/fitz/font.c b/source/fitz/font.c index cd5c7648..392e5a71 100644 --- a/source/fitz/font.c +++ b/source/fitz/font.c @@ -1401,6 +1401,23 @@ fz_advance_t3_glyph(fz_context *ctx, fz_font *font, int gid) return font->t3widths[gid]; } +void +fz_get_glyph_name(fz_context *ctx, fz_font *font, int glyph, char *buf, int size) +{ + FT_Face face = font->ft_face; + if (face) + { + if (FT_HAS_GLYPH_NAMES(face)) + FT_Get_Glyph_Name(face, glyph, buf, size); + else + fz_snprintf(buf, size, "%d", glyph); + } + else + { + fz_snprintf(buf, size, "%d", glyph); + } +} + float fz_advance_glyph(fz_context *ctx, fz_font *font, int gid, int wmode) { diff --git a/source/fitz/trace-device.c b/source/fitz/trace-device.c index 86a1e60e..2965f958 100644 --- a/source/fitz/trace-device.c +++ b/source/fitz/trace-device.c @@ -39,12 +39,24 @@ fz_trace_text_span(fz_context *ctx, fz_output *out, fz_text_span *span) fz_printf(ctx, out, " trm=\"%g %g %g %g\">\n", span->trm.a, span->trm.b, span->trm.c, span->trm.d); for (i = 0; i < span->len; i++) { - if (!isxmlmeta(span->items[i].ucs)) - fz_printf(ctx, out, "\n", - span->items[i].ucs, span->items[i].gid, span->items[i].x, span->items[i].y); + char name[32]; + + if (span->items[i].ucs == -1) + fz_printf(ctx, out, "items[i].ucs)) + fz_printf(ctx, out, "items[i].ucs); + else + fz_printf(ctx, out, "items[i].ucs); + + if (span->items[i].gid >= 0) + { + fz_get_glyph_name(ctx, span->font, span->items[i].gid, name, sizeof name); + fz_printf(ctx, out, " glyph=\"%s\"", name); + } else - fz_printf(ctx, out, "\n", - span->items[i].ucs, span->items[i].gid, span->items[i].x, span->items[i].y); + fz_printf(ctx, out, " glyph=\"-1\""); + + fz_printf(ctx, out, " x=\"%g\" y=\"%g\" />\n", span->items[i].x, span->items[i].y); } fz_printf(ctx, out, "\n"); } -- cgit v1.2.3