diff options
author | Tor Andersson <tor@ghostscript.com> | 2010-04-15 22:12:13 +0200 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2010-04-15 22:12:13 +0200 |
commit | 54bf79f2bee2f169f7b8611b661a93f9313bf09e (patch) | |
tree | 4a4c5698e883972f19bb0c51523441a21bd6eac3 /fitz/dev_trace.c | |
parent | 31dfa72b46654404efcb7dc21ffe2a8f1f768404 (diff) | |
download | mupdf-54bf79f2bee2f169f7b8611b661a93f9313bf09e.tar.xz |
XML-ify output of dev_trace.
Diffstat (limited to 'fitz/dev_trace.c')
-rw-r--r-- | fitz/dev_trace.c | 157 |
1 files changed, 119 insertions, 38 deletions
diff --git a/fitz/dev_trace.c b/fitz/dev_trace.c index 834aee5c..2a477709 100644 --- a/fitz/dev_trace.c +++ b/fitz/dev_trace.c @@ -3,7 +3,7 @@ static void fz_tracematrix(fz_matrix ctm) { - printf("%g %g %g %g %g %g setmatrix\n", + printf("matrix=\"%g %g %g %g %g %g\" ", ctm.a, ctm.b, ctm.c, ctm.d, ctm.e, ctm.f); } @@ -11,22 +11,67 @@ static void fz_tracecolor(fz_colorspace *colorspace, float *color, float alpha) { int i; - printf("/%s setcolorspace\n", colorspace->name); + printf("colorspace=\"%s\" color=\"", colorspace->name); for (i = 0; i < colorspace->n; i++) - printf("%g ", color[i]); - printf("setcolor\n"); - printf("%g setalpha\n", alpha); + printf("%s%g", i == 0 ? "" : " ", color[i]); + printf("\" "); + if (alpha != 1.0) + printf("alpha=\"%g\" ", alpha); +} + +static void +fz_tracepath(fz_path *path, int indent) +{ + float x, y; + int i = 0; + int n; + while (i < path->len) + { + for (n = 0; n < indent; n++) + putchar(' '); + switch (path->els[i++].k) + { + case FZ_MOVETO: + x = path->els[i++].v; + y = path->els[i++].v; + printf("<moveto x=\"%g\" y=\"%g\" />\n", x, y); + break; + case FZ_LINETO: + x = path->els[i++].v; + y = path->els[i++].v; + printf("<lineto x=\"%g\" y=\"%g\" />\n", x, y); + break; + case FZ_CURVETO: + x = path->els[i++].v; + y = path->els[i++].v; + printf("<curveto x1=\"%g\" y1=\"%g\" ", x, y); + x = path->els[i++].v; + y = path->els[i++].v; + printf("x2=\"%g\" y2=\"%g\" ", x, y); + x = path->els[i++].v; + y = path->els[i++].v; + printf("x3=\"%g\" y3=\"%g\" />\n", x, y); + break; + case FZ_CLOSEPATH: + printf("<closepath />\n"); + } + } } static void fz_tracefillpath(void *user, fz_path *path, fz_matrix ctm, fz_colorspace *colorspace, float *color, float alpha) { - fz_printpath(path, 0); + printf("<fillpath "); if (path->evenodd) - printf("eofill\n"); + printf("winding=\"eofill\" "); else - printf("fill\n"); + printf("winding=\"nonzero\" "); + fz_tracecolor(colorspace, color, alpha); + fz_tracematrix(ctm); + printf(">\n"); + fz_tracepath(path, 0); + printf("</fillpath>\n"); } static void @@ -35,94 +80,128 @@ fz_tracestrokepath(void *user, fz_path *path, fz_matrix ctm, { int i; - fz_tracecolor(colorspace, color, alpha); - - printf("%g setlinewidth\n", path->linewidth); - printf("%g setmiterlimit\n", path->miterlimit); - printf("%d setlinecap\n", path->linecap); - printf("%d setlinejoin\n", path->linejoin); + printf("<strokepath "); + printf("linewidth=\"%g\" ", path->linewidth); + printf("miterlimit=\"%g\" ", path->miterlimit); + printf("linecap=\"%d\" ", path->linecap); + printf("linejoin=\"%d\" ", path->linejoin); if (path->dashlen) { - printf("%g [ ", path->dashphase); + printf("dashphase=\"%g\" dash=\"", path->dashphase); for (i = 0; i < path->dashlen; i++) printf("%g ", path->dashlist[i]); - printf("] setdash\n"); + printf("\""); } - fz_printpath(path, 0); + fz_tracecolor(colorspace, color, alpha); + fz_tracematrix(ctm); + printf(">\n"); + + fz_tracepath(path, 0); - printf("stroke\n"); + printf("</strokepath>\n"); } static void fz_traceclippath(void *user, fz_path *path, fz_matrix ctm) { - printf("gsave\n"); - fz_printpath(path, 0); + printf("<gsave>\n"); + printf("<clippath "); if (path->evenodd) - printf("eoclip\n"); + printf("winding=\"eofill\" "); else - printf("clip\n"); + printf("winding=\"nonzero\" "); + fz_tracematrix(ctm); + printf(">\n"); + fz_tracepath(path, 0); + printf("</clippath>\n"); } static void fz_tracefilltext(void *user, fz_text *text, fz_matrix ctm, fz_colorspace *colorspace, float *color, float alpha) { - printf("/%s setfont\n", text->font->name); - fz_tracematrix(text->trm); + printf("<filltext font=\"%s\" ", text->font->name); + fz_tracecolor(colorspace, color, alpha); + fz_tracematrix(fz_concat(ctm, text->trm)); + printf(">\n"); fz_debugtext(text, 0); - printf("show\n"); + printf("</filltext>\n"); } static void fz_tracestroketext(void *user, fz_text *text, fz_matrix ctm, fz_colorspace *colorspace, float *color, float alpha) { - printf("/%s setfont\n", text->font->name); - fz_tracematrix(text->trm); + printf("<stroketext font=\"%s\" ", text->font->name); + fz_tracecolor(colorspace, color, alpha); + fz_tracematrix(fz_concat(ctm, text->trm)); + printf(">\n"); fz_debugtext(text, 0); - printf("charpath stroke\n"); + printf("</stroketext>\n"); } static void fz_tracecliptext(void *user, fz_text *text, fz_matrix ctm) { - printf("gsave\n"); - printf("/%s setfont\n", text->font->name); - fz_tracematrix(text->trm); + printf("<gsave>\n"); + printf("<cliptext font=\"%s\" ", text->font->name); + fz_tracematrix(fz_concat(ctm, text->trm)); + printf(">\n"); fz_debugtext(text, 0); - printf("charpath clip\n"); + printf("</cliptext>\n"); } static void fz_traceignoretext(void *user, fz_text *text, fz_matrix ctm) { - printf("/%s setfont\n", text->font->name); - fz_tracematrix(text->trm); + printf("<ignoretext font=\"%s\" ", text->font->name); + fz_tracematrix(fz_concat(ctm, text->trm)); + printf(">\n"); fz_debugtext(text, 0); - printf("invisibletext\n"); + printf("</ignoretext>\n"); } static void fz_tracefillimage(void *user, fz_pixmap *image, fz_matrix ctm) { + printf("<fillimage "); fz_tracematrix(ctm); - printf("fillimage\n"); + printf("/>\n"); } static void fz_tracefillshade(void *user, fz_shade *shade, fz_matrix ctm) { + printf("<fillshade "); + fz_tracematrix(ctm); + printf("/>\n"); +} + +static void +fz_tracefillimagemask(void *user, fz_pixmap *image, fz_matrix ctm, +fz_colorspace *colorspace, float *color, float alpha) +{ + printf("<fillimagemask "); + fz_tracematrix(ctm); + fz_tracecolor(colorspace, color, alpha); + printf("/>\n"); +} + +static void +fz_traceclipimagemask(void *user, fz_pixmap *image, fz_matrix ctm) +{ + printf("<gsave>\n"); + printf("<clipimagemask "); fz_tracematrix(ctm); - printf("fillshade\n"); + printf("/>\n"); } static void fz_tracepopclip(void *user) { - printf("grestore\n"); + printf("</gsave>\n"); } fz_device *fz_newtracedevice(void) @@ -140,6 +219,8 @@ fz_device *fz_newtracedevice(void) dev->fillshade = fz_tracefillshade; dev->fillimage = fz_tracefillimage; + dev->fillimagemask = fz_tracefillimagemask; + dev->clipimagemask = fz_traceclipimagemask; dev->popclip = fz_tracepopclip; |