#include "fitz.h"
static void
fz_tracematrix(fz_matrix ctm)
{
printf("matrix=\"%g %g %g %g %g %g\" ",
ctm.a, ctm.b, ctm.c, ctm.d, ctm.e, ctm.f);
}
static void
fz_tracecolor(fz_colorspace *colorspace, float *color, float alpha)
{
int i;
printf("colorspace=\"%s\" color=\"", colorspace->name);
for (i = 0; i < colorspace->n; i++)
printf("%s%g", i == 0 ? "" : " ", color[i]);
printf("\" ");
if (alpha < 1)
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("\n", x, y);
break;
case FZ_LINETO:
x = path->els[i++].v;
y = path->els[i++].v;
printf("\n", x, y);
break;
case FZ_CURVETO:
x = path->els[i++].v;
y = path->els[i++].v;
printf("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("\n");
break;
}
}
}
static void
fz_tracefillpath(void *user, fz_path *path, int evenodd, fz_matrix ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
printf("\n");
fz_tracepath(path, 0);
printf("\n");
}
static void
fz_tracestrokepath(void *user, fz_path *path, fz_strokestate *stroke, fz_matrix ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
int i;
printf("linewidth);
printf("miterlimit=\"%g\" ", stroke->miterlimit);
printf("linecap=\"%d\" ", stroke->linecap);
printf("linejoin=\"%d\" ", stroke->linejoin);
if (stroke->dashlen)
{
printf("dashphase=\"%g\" dash=\"", stroke->dashphase);
for (i = 0; i < stroke->dashlen; i++)
printf("%g ", stroke->dashlist[i]);
printf("\"");
}
fz_tracecolor(colorspace, color, alpha);
fz_tracematrix(ctm);
printf(">\n");
fz_tracepath(path, 0);
printf("\n");
}
static void
fz_traceclippath(void *user, fz_path *path, int evenodd, fz_matrix ctm)
{
printf("\n");
fz_tracepath(path, 0);
printf("\n");
}
static void
fz_traceclipstrokepath(void *user, fz_path *path, fz_strokestate *stroke, fz_matrix ctm)
{
printf("\n");
fz_tracepath(path, 0);
printf("\n");
}
static void
fz_tracefilltext(void *user, fz_text *text, fz_matrix ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
printf("font->name, text->wmode);
fz_tracecolor(colorspace, color, alpha);
fz_tracematrix(fz_concat(ctm, text->trm));
printf(">\n");
fz_debugtext(text, 0);
printf("\n");
}
static void
fz_tracestroketext(void *user, fz_text *text, fz_strokestate *stroke, fz_matrix ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
printf("font->name, text->wmode);
fz_tracecolor(colorspace, color, alpha);
fz_tracematrix(fz_concat(ctm, text->trm));
printf(">\n");
fz_debugtext(text, 0);
printf("\n");
}
static void
fz_tracecliptext(void *user, fz_text *text, fz_matrix ctm, int accumulate)
{
printf("font->name, text->wmode);
printf("accumulate=\"%d\" ", accumulate);
fz_tracematrix(fz_concat(ctm, text->trm));
printf(">\n");
fz_debugtext(text, 0);
printf("\n");
}
static void
fz_traceclipstroketext(void *user, fz_text *text, fz_strokestate *stroke, fz_matrix ctm)
{
printf("font->name, text->wmode);
fz_tracematrix(fz_concat(ctm, text->trm));
printf(">\n");
fz_debugtext(text, 0);
printf("\n");
}
static void
fz_traceignoretext(void *user, fz_text *text, fz_matrix ctm)
{
printf("font->name, text->wmode);
fz_tracematrix(fz_concat(ctm, text->trm));
printf(">\n");
fz_debugtext(text, 0);
printf("\n");
}
static void
fz_tracefillimage(void *user, fz_pixmap *image, fz_matrix ctm, float alpha)
{
printf("\n");
}
static void
fz_tracefillshade(void *user, fz_shade *shade, fz_matrix ctm, float alpha)
{
printf("\n");
}
static void
fz_tracefillimagemask(void *user, fz_pixmap *image, fz_matrix ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
printf("\n");
}
static void
fz_traceclipimagemask(void *user, fz_pixmap *image, fz_matrix ctm)
{
printf("\n");
}
static void
fz_tracepopclip(void *user)
{
printf("\n");
}
static void
fz_tracebeginmask(void *user, fz_rect bbox, int luminosity, fz_colorspace *colorspace, float *color)
{
printf("\n");
}
static void
fz_traceendmask(void *user)
{
printf("\n");
}
static void
fz_tracebegingroup(void *user, fz_rect bbox, int isolated, int knockout, fz_blendmode blendmode, float alpha)
{
printf("\n",
bbox.x0, bbox.y0, bbox.x1, bbox.y1,
isolated, knockout, fz_blendnames[blendmode], alpha);
}
static void
fz_traceendgroup(void *user)
{
printf("\n");
}
fz_device *fz_newtracedevice(void)
{
fz_device *dev = fz_newdevice(nil);
dev->fillpath = fz_tracefillpath;
dev->strokepath = fz_tracestrokepath;
dev->clippath = fz_traceclippath;
dev->clipstrokepath = fz_traceclipstrokepath;
dev->filltext = fz_tracefilltext;
dev->stroketext = fz_tracestroketext;
dev->cliptext = fz_tracecliptext;
dev->clipstroketext = fz_traceclipstroketext;
dev->ignoretext = fz_traceignoretext;
dev->fillshade = fz_tracefillshade;
dev->fillimage = fz_tracefillimage;
dev->fillimagemask = fz_tracefillimagemask;
dev->clipimagemask = fz_traceclipimagemask;
dev->popclip = fz_tracepopclip;
dev->beginmask = fz_tracebeginmask;
dev->endmask = fz_traceendmask;
dev->begingroup = fz_tracebegingroup;
dev->endgroup = fz_traceendgroup;
return dev;
}