#include "fitz-internal.h" static void fz_trace_matrix(const 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_trace_trm(const fz_matrix *trm) { printf(" trm=\"%g %g %g %g\"", trm->a, trm->b, trm->c, trm->d); } static void fz_trace_color(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_trace_path(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->items[i++].k) { case FZ_MOVETO: x = path->items[i++].v; y = path->items[i++].v; printf("\n", x, y); break; case FZ_LINETO: x = path->items[i++].v; y = path->items[i++].v; printf("\n", x, y); break; case FZ_CURVETO: x = path->items[i++].v; y = path->items[i++].v; printf("items[i++].v; y = path->items[i++].v; printf(" x2=\"%g\" y2=\"%g\"", x, y); x = path->items[i++].v; y = path->items[i++].v; printf(" x3=\"%g\" y3=\"%g\"/>\n", x, y); break; case FZ_CLOSE_PATH: printf("\n"); break; } } } static void fz_trace_fill_path(fz_device *dev, fz_path *path, int even_odd, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { printf("\n"); fz_trace_path(path, 0); printf("\n"); } static void fz_trace_stroke_path(fz_device *dev, fz_path *path, fz_stroke_state *stroke, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { int i; printf("linewidth); printf(" miterlimit=\"%g\"", stroke->miterlimit); printf(" linecap=\"%d,%d,%d\"", stroke->start_cap, stroke->dash_cap, stroke->end_cap); printf(" linejoin=\"%d\"", stroke->linejoin); if (stroke->dash_len) { printf(" dash_phase=\"%g\" dash=\"", stroke->dash_phase); for (i = 0; i < stroke->dash_len; i++) printf("%s%g", i > 0 ? " " : "", stroke->dash_list[i]); printf("\""); } fz_trace_color(colorspace, color, alpha); fz_trace_matrix(ctm); printf(">\n"); fz_trace_path(path, 0); printf("\n"); } static void fz_trace_clip_path(fz_device *dev, fz_path *path, const fz_rect *rect, int even_odd, const fz_matrix *ctm) { printf("\n", rect->x0, rect->y0, rect->x1, rect->y1); else printf(">\n"); fz_trace_path(path, 0); printf("\n"); } static void fz_trace_clip_stroke_path(fz_device *dev, fz_path *path, const fz_rect *rect, fz_stroke_state *stroke, const fz_matrix *ctm) { printf("\n"); fz_trace_path(path, 0); printf("\n"); } static void fz_trace_fill_text(fz_device *dev, fz_text *text, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { printf("font->name, text->wmode); fz_trace_color(colorspace, color, alpha); fz_trace_matrix(ctm); fz_trace_trm(&text->trm); printf(">\n"); fz_print_text(dev->ctx, stdout, text); printf("\n"); } static void fz_trace_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { printf("font->name, text->wmode); fz_trace_color(colorspace, color, alpha); fz_trace_matrix(ctm); fz_trace_trm(&text->trm); printf(">\n"); fz_print_text(dev->ctx, stdout, text); printf("\n"); } static void fz_trace_clip_text(fz_device *dev, fz_text *text, const fz_matrix *ctm, int accumulate) { printf("font->name, text->wmode); printf(" accumulate=\"%d\"", accumulate); fz_trace_matrix(ctm); fz_trace_trm(&text->trm); printf(">\n"); fz_print_text(dev->ctx, stdout, text); printf("\n"); } static void fz_trace_clip_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm) { printf("font->name, text->wmode); fz_trace_matrix(ctm); fz_trace_trm(&text->trm); printf(">\n"); fz_print_text(dev->ctx, stdout, text); printf("\n"); } static void fz_trace_ignore_text(fz_device *dev, fz_text *text, const fz_matrix *ctm) { printf("font->name, text->wmode); fz_trace_matrix(ctm); fz_trace_trm(&text->trm); printf(">\n"); fz_print_text(dev->ctx, stdout, text); printf("\n"); } static void fz_trace_fill_image(fz_device *dev, fz_image *image, const fz_matrix *ctm, float alpha) { printf("w, image->h); printf("/>\n"); } static void fz_trace_fill_shade(fz_device *dev, fz_shade *shade, const fz_matrix *ctm, float alpha) { printf("\n"); } static void fz_trace_fill_image_mask(fz_device *dev, fz_image *image, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { printf("w, image->h); printf("/>\n"); } static void fz_trace_clip_image_mask(fz_device *dev, fz_image *image, const fz_rect *rect, const fz_matrix *ctm) { printf("w, image->h); printf("/>\n"); } static void fz_trace_pop_clip(fz_device *dev) { printf("\n"); } static void fz_trace_begin_mask(fz_device *dev, const fz_rect *bbox, int luminosity, fz_colorspace *colorspace, float *color) { printf("x0, bbox->y0, bbox->x1, bbox->y1, luminosity ? "luminosity" : "alpha"); printf(">\n"); } static void fz_trace_end_mask(fz_device *dev) { printf("\n"); } static void fz_trace_begin_group(fz_device *dev, const fz_rect *bbox, int isolated, int knockout, int blendmode, float alpha) { printf("\n", bbox->x0, bbox->y0, bbox->x1, bbox->y1, isolated, knockout, fz_blendmode_name(blendmode), alpha); } static void fz_trace_end_group(fz_device *dev) { printf("\n"); } static int fz_trace_begin_tile(fz_device *dev, const fz_rect *area, const fz_rect *view, float xstep, float ystep, const fz_matrix *ctm, int id) { printf("x0, area->y0, area->x1, area->y1); printf(" view=\"%g %g %g %g\"", view->x0, view->y0, view->x1, view->y1); printf(" xstep=\"%g\" ystep=\"%g\"", xstep, ystep); fz_trace_matrix(ctm); printf(">\n"); return 0; } static void fz_trace_end_tile(fz_device *dev) { printf("\n"); } fz_device *fz_new_trace_device(fz_context *ctx) { fz_device *dev = fz_new_device(ctx, NULL); dev->fill_path = fz_trace_fill_path; dev->stroke_path = fz_trace_stroke_path; dev->clip_path = fz_trace_clip_path; dev->clip_stroke_path = fz_trace_clip_stroke_path; dev->fill_text = fz_trace_fill_text; dev->stroke_text = fz_trace_stroke_text; dev->clip_text = fz_trace_clip_text; dev->clip_stroke_text = fz_trace_clip_stroke_text; dev->ignore_text = fz_trace_ignore_text; dev->fill_shade = fz_trace_fill_shade; dev->fill_image = fz_trace_fill_image; dev->fill_image_mask = fz_trace_fill_image_mask; dev->clip_image_mask = fz_trace_clip_image_mask; dev->pop_clip = fz_trace_pop_clip; dev->begin_mask = fz_trace_begin_mask; dev->end_mask = fz_trace_end_mask; dev->begin_group = fz_trace_begin_group; dev->end_group = fz_trace_end_group; dev->begin_tile = fz_trace_begin_tile; dev->end_tile = fz_trace_end_tile; return dev; }