| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- #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("<moveto x=\"%g\" y=\"%g\"/>\n", x, y);
- break;
- case FZ_LINETO:
- x = path->items[i++].v;
- y = path->items[i++].v;
- printf("<lineto x=\"%g\" y=\"%g\"/>\n", x, y);
- break;
- case FZ_CURVETO:
- x = path->items[i++].v;
- y = path->items[i++].v;
- printf("<curveto x1=\"%g\" y1=\"%g\"", x, y);
- x = path->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("<closepath/>\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("<fill_path");
- if (even_odd)
- printf(" winding=\"eofill\"");
- else
- printf(" winding=\"nonzero\"");
- fz_trace_color(colorspace, color, alpha);
- fz_trace_matrix(ctm);
- printf(">\n");
- fz_trace_path(path, 0);
- printf("</fill_path>\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("<stroke_path");
- printf(" linewidth=\"%g\"", stroke->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("</stroke_path>\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("<clip_path");
- if (even_odd)
- printf(" winding=\"eofill\"");
- else
- printf(" winding=\"nonzero\"");
- fz_trace_matrix(ctm);
- printf(" contentbbox=\"%g %g %g %g\">\n", rect->x0, rect->y0, rect->x1, rect->y1);
- fz_trace_path(path, 0);
- printf("</clip_path>\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("<clip_stroke_path");
- fz_trace_matrix(ctm);
- printf(">\n");
- fz_trace_path(path, 0);
- printf("</clip_stroke_path>\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("<fill_text font=\"%s\" wmode=\"%d\"", text->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("</fill_text>\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("<stroke_text font=\"%s\" wmode=\"%d\"", text->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("</stroke_text>\n");
- }
- static void
- fz_trace_clip_text(fz_device *dev, fz_text *text, const fz_matrix *ctm, int accumulate)
- {
- printf("<clip_text font=\"%s\" wmode=\"%d\"", text->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("</clip_text>\n");
- }
- static void
- fz_trace_clip_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm)
- {
- printf("<clip_stroke_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
- fz_trace_matrix(ctm);
- fz_trace_trm(&text->trm);
- printf(">\n");
- fz_print_text(dev->ctx, stdout, text);
- printf("</clip_stroke_text>\n");
- }
- static void
- fz_trace_ignore_text(fz_device *dev, fz_text *text, const fz_matrix *ctm)
- {
- printf("<ignore_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
- fz_trace_matrix(ctm);
- fz_trace_trm(&text->trm);
- printf(">\n");
- fz_print_text(dev->ctx, stdout, text);
- printf("</ignore_text>\n");
- }
- static void
- fz_trace_fill_image(fz_device *dev, fz_image *image, const fz_matrix *ctm, float alpha)
- {
- printf("<fill_image alpha=\"%g\"", alpha);
- fz_trace_matrix(ctm);
- printf(" width=\"%d\" height=\"%d\"", image->w, image->h);
- printf("/>\n");
- }
- static void
- fz_trace_fill_shade(fz_device *dev, fz_shade *shade, const fz_matrix *ctm, float alpha)
- {
- printf("<fill_shade alpha=\"%g\"", alpha);
- fz_trace_matrix(ctm);
- 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("<fill_image_mask");
- fz_trace_matrix(ctm);
- fz_trace_color(colorspace, color, alpha);
- printf(" width=\"%d\" height=\"%d\"", image->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("<clip_image_mask");
- fz_trace_matrix(ctm);
- printf(" width=\"%d\" height=\"%d\"", image->w, image->h);
- printf("/>\n");
- }
- static void
- fz_trace_pop_clip(fz_device *dev)
- {
- printf("<pop_clip/>\n");
- }
- static void
- fz_trace_begin_mask(fz_device *dev, const fz_rect *bbox, int luminosity, fz_colorspace *colorspace, float *color)
- {
- printf("<mask bbox=\"%g %g %g %g\" s=\"%s\"",
- bbox->x0, bbox->y0, bbox->x1, bbox->y1,
- luminosity ? "luminosity" : "alpha");
- printf(">\n");
- }
- static void
- fz_trace_end_mask(fz_device *dev)
- {
- printf("</mask>\n");
- }
- static void
- fz_trace_begin_group(fz_device *dev, const fz_rect *bbox, int isolated, int knockout, int blendmode, float alpha)
- {
- printf("<group bbox=\"%g %g %g %g\" isolated=\"%d\" knockout=\"%d\" blendmode=\"%s\" alpha=\"%g\">\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("</group>\n");
- }
- static void
- fz_trace_begin_tile(fz_device *dev, const fz_rect *area, const fz_rect *view, float xstep, float ystep, const fz_matrix *ctm)
- {
- printf("<tile");
- printf(" area=\"%g %g %g %g\"", area->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");
- }
- static void
- fz_trace_end_tile(fz_device *dev)
- {
- printf("</tile>\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;
- }
|