summaryrefslogtreecommitdiff
path: root/source/fitz/trace-device.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2015-10-09 11:07:42 +0200
committerTor Andersson <tor.andersson@artifex.com>2015-12-11 13:02:33 +0100
commitfa0bffa57e7e2164f0201b0f2fdc984d475674ae (patch)
treead6a7d7bc8641e390552ba8c49fdba351de00f82 /source/fitz/trace-device.c
parente3275837d5738c5092b2e452829919e31ad553e5 (diff)
downloadmupdf-fa0bffa57e7e2164f0201b0f2fdc984d475674ae.tar.xz
Keep spans of multiple fonts and sizes in one fz_text object.
Diffstat (limited to 'source/fitz/trace-device.c')
-rw-r--r--source/fitz/trace-device.c76
1 files changed, 37 insertions, 39 deletions
diff --git a/source/fitz/trace-device.c b/source/fitz/trace-device.c
index 59ea8ad8..df2f6455 100644
--- a/source/fitz/trace-device.c
+++ b/source/fitz/trace-device.c
@@ -14,13 +14,6 @@ fz_trace_matrix(fz_context *ctx, fz_output *out, const fz_matrix *ctm)
}
static void
-fz_trace_trm(fz_context *ctx, fz_output *out, const fz_matrix *trm)
-{
- fz_printf(ctx, out, " trm=\"%g %g %g %g\"",
- trm->a, trm->b, trm->c, trm->d);
-}
-
-static void
fz_trace_color(fz_context *ctx, fz_output *out, fz_colorspace *colorspace, float *color, float alpha)
{
int i;
@@ -32,6 +25,38 @@ fz_trace_color(fz_context *ctx, fz_output *out, fz_colorspace *colorspace, float
fz_printf(ctx, out, " alpha=\"%g\"", alpha);
}
+static int
+isxmlmeta(int c)
+{
+ return c < 32 || c >= 128 || c == '&' || c == '<' || c == '>' || c == '\'' || c == '"';
+}
+
+static void
+fz_trace_text_span(fz_context *ctx, fz_output *out, fz_text_span *span)
+{
+ int i;
+ fz_printf(ctx, out, "<span font=\"%s\" wmode=\"%d\"", span->font->name, span->wmode);
+ 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, "<g ucs=\"%c\" gid=\"%d\" x=\"%g\" y=\"%g\" />\n",
+ span->items[i].ucs, span->items[i].gid, span->items[i].x, span->items[i].y);
+ else
+ fz_printf(ctx, out, "<g ucs=\"U+%04X\" gid=\"%d\" x=\"%g\" y=\"%g\" />\n",
+ span->items[i].ucs, span->items[i].gid, span->items[i].x, span->items[i].y);
+ }
+ fz_printf(ctx, out, "</span>\n");
+}
+
+static void
+fz_trace_text(fz_context *ctx, fz_output *out, fz_text *text)
+{
+ fz_text_span *span;
+ for (span = text->head; span; span = span->next)
+ fz_trace_text_span(ctx, out, span);
+}
+
static void
trace_moveto(fz_context *ctx, void *arg, float x, float y)
{
@@ -166,36 +191,14 @@ fz_trace_clip_stroke_path(fz_context *ctx, fz_device *dev, fz_path *path, const
fz_printf(ctx, out, "</clip_stroke_path>\n");
}
-static int
-isxmlmeta(int c)
-{
- return c < 32 || c >= 128 || c == '&' || c == '<' || c == '>' || c == '\'' || c == '"';
-}
-
-static void
-fz_trace_text(fz_context *ctx, fz_output *out, fz_text *text)
-{
- int i;
- for (i = 0; i < text->len; i++)
- {
- if (!isxmlmeta(text->items[i].ucs))
- fz_printf(ctx, out, "<g ucs=\"%c\" gid=\"%d\" x=\"%g\" y=\"%g\" />\n",
- text->items[i].ucs, text->items[i].gid, text->items[i].x, text->items[i].y);
- else
- fz_printf(ctx, out, "<g ucs=\"U+%04X\" gid=\"%d\" x=\"%g\" y=\"%g\" />\n",
- text->items[i].ucs, text->items[i].gid, text->items[i].x, text->items[i].y);
- }
-}
-
static void
fz_trace_fill_text(fz_context *ctx, fz_device *dev, fz_text *text, const fz_matrix *ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
fz_output *out = ((fz_trace_device*)dev)->out;
- fz_printf(ctx, out, "<fill_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
+ fz_printf(ctx, out, "<fill_text");
fz_trace_color(ctx, out, colorspace, color, alpha);
fz_trace_matrix(ctx, out, ctm);
- fz_trace_trm(ctx, out, &text->trm);
fz_printf(ctx, out, ">\n");
fz_trace_text(ctx, out, text);
fz_printf(ctx, out, "</fill_text>\n");
@@ -206,10 +209,9 @@ fz_trace_stroke_text(fz_context *ctx, fz_device *dev, fz_text *text, fz_stroke_s
fz_colorspace *colorspace, float *color, float alpha)
{
fz_output *out = ((fz_trace_device*)dev)->out;
- fz_printf(ctx, out, "<stroke_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
+ fz_printf(ctx, out, "<stroke_text");
fz_trace_color(ctx, out, colorspace, color, alpha);
fz_trace_matrix(ctx, out, ctm);
- fz_trace_trm(ctx, out, &text->trm);
fz_printf(ctx, out, ">\n");
fz_trace_text(ctx, out, text);
fz_printf(ctx, out, "</stroke_text>\n");
@@ -219,10 +221,8 @@ static void
fz_trace_clip_text(fz_context *ctx, fz_device *dev, fz_text *text, const fz_matrix *ctm, int accumulate)
{
fz_output *out = ((fz_trace_device*)dev)->out;
- fz_printf(ctx, out, "<clip_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
- fz_printf(ctx, out, " accumulate=\"%d\"", accumulate);
+ fz_printf(ctx, out, "<clip_text");
fz_trace_matrix(ctx, out, ctm);
- fz_trace_trm(ctx, out, &text->trm);
fz_printf(ctx, out, ">\n");
fz_trace_text(ctx, out, text);
fz_printf(ctx, out, "</clip_text>\n");
@@ -232,9 +232,8 @@ static void
fz_trace_clip_stroke_text(fz_context *ctx, fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm)
{
fz_output *out = ((fz_trace_device*)dev)->out;
- fz_printf(ctx, out, "<clip_stroke_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
+ fz_printf(ctx, out, "<clip_stroke_text");
fz_trace_matrix(ctx, out, ctm);
- fz_trace_trm(ctx, out, &text->trm);
fz_printf(ctx, out, ">\n");
fz_trace_text(ctx, out, text);
fz_printf(ctx, out, "</clip_stroke_text>\n");
@@ -244,9 +243,8 @@ static void
fz_trace_ignore_text(fz_context *ctx, fz_device *dev, fz_text *text, const fz_matrix *ctm)
{
fz_output *out = ((fz_trace_device*)dev)->out;
- fz_printf(ctx, out, "<ignore_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
+ fz_printf(ctx, out, "<ignore_text");
fz_trace_matrix(ctx, out, ctm);
- fz_trace_trm(ctx, out, &text->trm);
fz_printf(ctx, out, ">\n");
fz_trace_text(ctx, out, text);
fz_printf(ctx, out, "</ignore_text>\n");