diff options
-rw-r--r-- | include/mupdf/fitz/glyph-cache.h | 4 | ||||
-rw-r--r-- | include/mupdf/pdf/font.h | 6 | ||||
-rw-r--r-- | include/mupdf/pdf/interpret.h | 6 | ||||
-rw-r--r-- | source/fitz/font-imp.h | 2 | ||||
-rw-r--r-- | source/fitz/font.c | 8 | ||||
-rw-r--r-- | source/pdf/pdf-font.c | 4 | ||||
-rw-r--r-- | source/pdf/pdf-interpret.c | 8 | ||||
-rw-r--r-- | source/pdf/pdf-op-run.c | 17 | ||||
-rw-r--r-- | source/pdf/pdf-run.c | 11 | ||||
-rw-r--r-- | source/pdf/pdf-type3.c | 8 |
10 files changed, 29 insertions, 45 deletions
diff --git a/include/mupdf/fitz/glyph-cache.h b/include/mupdf/fitz/glyph-cache.h index caedf117..07d84589 100644 --- a/include/mupdf/fitz/glyph-cache.h +++ b/include/mupdf/fitz/glyph-cache.h @@ -8,8 +8,8 @@ void fz_purge_glyph_cache(fz_context *ctx); fz_pixmap *fz_render_glyph_pixmap(fz_context *ctx, fz_font*, int, fz_matrix *, const fz_irect *scissor, int aa); -void fz_render_t3_glyph_direct(fz_context *ctx, fz_device *dev, fz_font *font, int gid, fz_matrix trm, void *gstate, int nested_depth, fz_default_colorspaces *def_cs); -void fz_prepare_t3_glyph(fz_context *ctx, fz_font *font, int gid, int nested_depth); +void fz_render_t3_glyph_direct(fz_context *ctx, fz_device *dev, fz_font *font, int gid, fz_matrix trm, void *gstate, fz_default_colorspaces *def_cs); +void fz_prepare_t3_glyph(fz_context *ctx, fz_font *font, int gid); void fz_dump_glyph_cache_stats(fz_context *ctx); float fz_subpixel_adjust(fz_context *ctx, fz_matrix *ctm, fz_matrix *subpix_ctm, unsigned char *qe, unsigned char *qf); diff --git a/include/mupdf/pdf/font.h b/include/mupdf/pdf/font.h index b0f0cdb7..812377e5 100644 --- a/include/mupdf/pdf/font.h +++ b/include/mupdf/pdf/font.h @@ -115,8 +115,8 @@ int pdf_font_cid_to_gid(fz_context *ctx, pdf_font_desc *fontdesc, int cid); const unsigned char *pdf_lookup_substitute_font(fz_context *ctx, int mono, int serif, int bold, int italic, int *len); pdf_font_desc *pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *obj); -void pdf_load_type3_glyphs(fz_context *ctx, pdf_document *doc, pdf_font_desc *fontdesc, int nested_depth); -pdf_font_desc *pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *obj, int nested_depth); +void pdf_load_type3_glyphs(fz_context *ctx, pdf_document *doc, pdf_font_desc *fontdesc); +pdf_font_desc *pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *obj); pdf_font_desc *pdf_load_hail_mary_font(fz_context *ctx, pdf_document *doc); pdf_font_desc *pdf_new_font_desc(fz_context *ctx); @@ -125,7 +125,7 @@ void pdf_drop_font(fz_context *ctx, pdf_font_desc *font); void pdf_print_font(fz_context *ctx, fz_output *out, pdf_font_desc *fontdesc); -void pdf_run_glyph(fz_context *ctx, pdf_document *doc, pdf_obj *resources, fz_buffer *contents, fz_device *dev, fz_matrix ctm, void *gstate, int nested_depth, fz_default_colorspaces *default_cs); +void pdf_run_glyph(fz_context *ctx, pdf_document *doc, pdf_obj *resources, fz_buffer *contents, fz_device *dev, fz_matrix ctm, void *gstate, fz_default_colorspaces *default_cs); pdf_obj *pdf_add_simple_font(fz_context *ctx, pdf_document *doc, fz_font *font, int encoding); pdf_obj *pdf_add_cid_font(fz_context *ctx, pdf_document *doc, fz_font *font); diff --git a/include/mupdf/pdf/interpret.h b/include/mupdf/pdf/interpret.h index 554ce4c7..e16b94af 100644 --- a/include/mupdf/pdf/interpret.h +++ b/include/mupdf/pdf/interpret.h @@ -179,12 +179,8 @@ struct pdf_csi_s defined within the PDF reference manual, and others are possible. gstate: The initial graphics state. - - nested: The nested depth of this interpreter. This should be - 0 for an initial call, and will be incremented in nested calls - due to Type 3 fonts. */ -pdf_processor *pdf_new_run_processor(fz_context *ctx, fz_device *dev, fz_matrix ctm, const char *usage, pdf_gstate *gstate, int nested, fz_default_colorspaces *default_cs); +pdf_processor *pdf_new_run_processor(fz_context *ctx, fz_device *dev, fz_matrix ctm, const char *usage, pdf_gstate *gstate, fz_default_colorspaces *default_cs); /* pdf_new_buffer_processor: Create a buffer processor. This diff --git a/source/fitz/font-imp.h b/source/fitz/font-imp.h index 383d7d21..9a167792 100644 --- a/source/fitz/font-imp.h +++ b/source/fitz/font-imp.h @@ -19,7 +19,7 @@ struct fz_font_s float *t3widths; /* has 256 entries if used */ unsigned short *t3flags; /* has 256 entries if used */ void *t3doc; /* a pdf_document for the callback */ - void (*t3run)(fz_context *ctx, void *doc, void *resources, fz_buffer *contents, struct fz_device_s *dev, fz_matrix ctm, void *gstate, int nested_depth, fz_default_colorspaces *default_cs); + void (*t3run)(fz_context *ctx, void *doc, void *resources, fz_buffer *contents, struct fz_device_s *dev, fz_matrix ctm, void *gstate, fz_default_colorspaces *default_cs); void (*t3freeres)(fz_context *ctx, void *doc, void *resources); fz_rect bbox; /* font bbox is used only for t3 fonts */ diff --git a/source/fitz/font.c b/source/fitz/font.c index 97c5347e..f9609aec 100644 --- a/source/fitz/font.c +++ b/source/fitz/font.c @@ -1325,7 +1325,7 @@ fz_bound_t3_glyph(fz_context *ctx, fz_font *font, int gid) } void -fz_prepare_t3_glyph(fz_context *ctx, fz_font *font, int gid, int nested_depth) +fz_prepare_t3_glyph(fz_context *ctx, fz_font *font, int gid) { fz_buffer *contents; fz_device *dev; @@ -1351,7 +1351,7 @@ fz_prepare_t3_glyph(fz_context *ctx, fz_font *font, int gid, int nested_depth) FZ_DEVFLAG_LINEWIDTH_UNDEFINED; fz_try(ctx) { - font->t3run(ctx, font->t3doc, font->t3resources, contents, dev, fz_identity, NULL, 0, NULL); + font->t3run(ctx, font->t3doc, font->t3resources, contents, dev, fz_identity, NULL, NULL); fz_close_device(ctx, dev); font->t3flags[gid] = dev->flags; d1_rect = dev->d1_rect; @@ -1492,7 +1492,7 @@ fz_render_t3_glyph(fz_context *ctx, fz_font *font, int gid, fz_matrix trm, fz_co } void -fz_render_t3_glyph_direct(fz_context *ctx, fz_device *dev, fz_font *font, int gid, fz_matrix trm, void *gstate, int nested_depth, fz_default_colorspaces *def_cs) +fz_render_t3_glyph_direct(fz_context *ctx, fz_device *dev, fz_font *font, int gid, fz_matrix trm, void *gstate, fz_default_colorspaces *def_cs) { fz_matrix ctm; void *contents; @@ -1518,7 +1518,7 @@ fz_render_t3_glyph_direct(fz_context *ctx, fz_device *dev, fz_font *font, int gi } ctm = fz_concat(font->t3matrix, trm); - font->t3run(ctx, font->t3doc, font->t3resources, contents, dev, ctm, gstate, nested_depth, def_cs); + font->t3run(ctx, font->t3doc, font->t3resources, contents, dev, ctm, gstate, def_cs); } fz_rect diff --git a/source/pdf/pdf-font.c b/source/pdf/pdf-font.c index 001f999b..3dae9884 100644 --- a/source/pdf/pdf-font.c +++ b/source/pdf/pdf-font.c @@ -1379,7 +1379,7 @@ pdf_make_width_table(fz_context *ctx, pdf_font_desc *fontdesc) } pdf_font_desc * -pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict, int nested_depth) +pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict) { pdf_obj *subtype; pdf_obj *dfonts; @@ -1437,7 +1437,7 @@ pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict, i /* Load CharProcs */ if (type3) - pdf_load_type3_glyphs(ctx, doc, fontdesc, nested_depth); + pdf_load_type3_glyphs(ctx, doc, fontdesc); pdf_store_item(ctx, dict, fontdesc, fontdesc->size); } diff --git a/source/pdf/pdf-interpret.c b/source/pdf/pdf-interpret.c index 55416b90..e4e34ee9 100644 --- a/source/pdf/pdf-interpret.c +++ b/source/pdf/pdf-interpret.c @@ -64,13 +64,13 @@ pdf_clear_stack(fz_context *ctx, pdf_csi *csi) } static pdf_font_desc * -load_font_or_hail_mary(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *font, int depth, fz_cookie *cookie) +load_font_or_hail_mary(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *font, fz_cookie *cookie) { pdf_font_desc *desc; fz_try(ctx) { - desc = pdf_load_font(ctx, doc, rdb, font, depth); + desc = pdf_load_font(ctx, doc, rdb, font); } fz_catch(ctx) { @@ -192,7 +192,7 @@ pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_ob { pdf_obj *font_ref = pdf_array_get(ctx, obj, 0); pdf_obj *font_size = pdf_array_get(ctx, obj, 1); - pdf_font_desc *font = load_font_or_hail_mary(ctx, csi->doc, csi->rdb, font_ref, 0, csi->cookie); + pdf_font_desc *font = load_font_or_hail_mary(ctx, csi->doc, csi->rdb, font_ref, csi->cookie); fz_try(ctx) proc->op_Tf(ctx, proc, "ExtGState", font, pdf_to_real(ctx, font_size)); fz_always(ctx) @@ -657,7 +657,7 @@ pdf_process_keyword(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, fz_strea fontobj = pdf_dict_gets(ctx, fontres, csi->name); if (!fontobj) fz_throw(ctx, FZ_ERROR_SYNTAX, "cannot find Font resource '%s'", csi->name); - font = load_font_or_hail_mary(ctx, csi->doc, csi->rdb, fontobj, 0, csi->cookie); + font = load_font_or_hail_mary(ctx, csi->doc, csi->rdb, fontobj, csi->cookie); fz_try(ctx) proc->op_Tf(ctx, proc, csi->name, font, s[0]); fz_always(ctx) diff --git a/source/pdf/pdf-op-run.c b/source/pdf/pdf-op-run.c index 041a617a..aa7bc985 100644 --- a/source/pdf/pdf-op-run.c +++ b/source/pdf/pdf-op-run.c @@ -72,8 +72,6 @@ struct pdf_run_processor_s fz_default_colorspaces *default_cs; - int nested_depth; - /* path object state */ fz_path *path; int clip; @@ -903,9 +901,8 @@ pdf_show_char(fz_context *ctx, pdf_run_processor *pr, int cid) gid = pdf_tos_make_trm(ctx, &pr->tos, &gstate->text, fontdesc, cid, &trm); - /* If we are a type3 font within a type 3 font, or are otherwise - * uncachable, then render direct. */ - render_direct = (!fz_font_ft_face(ctx, fontdesc->font) && pr->nested_depth > 0) || !fz_glyph_cacheable(ctx, fontdesc->font, gid); + /* If we are uncachable, then render direct. */ + render_direct = !fz_glyph_cacheable(ctx, fontdesc->font, gid); /* flush buffered text if rendermode has changed */ if (!pr->tos.text || gstate->text.render != pr->tos.text_mode || render_direct) @@ -920,7 +917,7 @@ pdf_show_char(fz_context *ctx, pdf_run_processor *pr, int cid) * type3 glyphs that seem to inherit current graphics * attributes, or type 3 glyphs within type3 glyphs). */ fz_matrix composed = fz_concat(trm, gstate->ctm); - fz_render_t3_glyph_direct(ctx, pr->dev, fontdesc->font, gid, composed, gstate, pr->nested_depth, pr->default_cs); + fz_render_t3_glyph_direct(ctx, pr->dev, fontdesc->font, gid, composed, gstate, pr->default_cs); /* Render text invisibly so that it can still be extracted. */ pr->tos.text_mode = 3; } @@ -1831,16 +1828,12 @@ static void pdf_run_dquote(fz_context *ctx, pdf_processor *proc, float aw, float static void pdf_run_d0(fz_context *ctx, pdf_processor *proc, float wx, float wy) { pdf_run_processor *pr = (pdf_run_processor *)proc; - if (pr->nested_depth > 1) - return; pr->dev->flags |= FZ_DEVFLAG_COLOR; } static void pdf_run_d1(fz_context *ctx, pdf_processor *proc, float wx, float wy, float llx, float lly, float urx, float ury) { pdf_run_processor *pr = (pdf_run_processor *)proc; - if (pr->nested_depth > 1) - return; pr->dev->flags |= FZ_DEVFLAG_MASK | FZ_DEVFLAG_BBOX_DEFINED; pr->dev->flags &= ~(FZ_DEVFLAG_FILLCOLOR_UNDEFINED | FZ_DEVFLAG_STROKECOLOR_UNDEFINED | @@ -2081,7 +2074,7 @@ pdf_drop_run_processor(fz_context *ctx, pdf_processor *proc) } pdf_processor * -pdf_new_run_processor(fz_context *ctx, fz_device *dev, fz_matrix ctm, const char *usage, pdf_gstate *gstate, int nested, fz_default_colorspaces *default_cs) +pdf_new_run_processor(fz_context *ctx, fz_device *dev, fz_matrix ctm, const char *usage, pdf_gstate *gstate, fz_default_colorspaces *default_cs) { pdf_run_processor *proc = pdf_new_processor(ctx, sizeof *proc); { @@ -2215,8 +2208,6 @@ pdf_new_run_processor(fz_context *ctx, fz_device *dev, fz_matrix ctm, const char proc->default_cs = fz_keep_default_colorspaces(ctx, default_cs); - proc->nested_depth = nested; - proc->path = NULL; proc->clip = 0; proc->clip_even_odd = 0; diff --git a/source/pdf/pdf-run.c b/source/pdf/pdf-run.c index c9e56622..4d607cc7 100644 --- a/source/pdf/pdf-run.c +++ b/source/pdf/pdf-run.c @@ -33,7 +33,7 @@ pdf_run_annot_with_usage(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf fz_try(ctx) { - proc = pdf_new_run_processor(ctx, dev, ctm, usage, NULL, 0, default_cs); + proc = pdf_new_run_processor(ctx, dev, ctm, usage, NULL, default_cs); pdf_process_annot(ctx, proc, doc, page, annot, cookie); pdf_close_processor(ctx, proc); } @@ -96,7 +96,7 @@ pdf_run_page_contents_with_usage(fz_context *ctx, pdf_document *doc, pdf_page *p colorspace = NULL; } - proc = pdf_new_run_processor(ctx, dev, ctm, usage, NULL, 0, default_cs); + proc = pdf_new_run_processor(ctx, dev, ctm, usage, NULL, default_cs); pdf_process_contents(ctx, proc, doc, resources, contents, cookie); pdf_close_processor(ctx, proc); } @@ -227,14 +227,11 @@ pdf_run_page(fz_context *ctx, pdf_page *page, fz_device *dev, fz_matrix ctm, fz_ } void -pdf_run_glyph(fz_context *ctx, pdf_document *doc, pdf_obj *resources, fz_buffer *contents, fz_device *dev, fz_matrix ctm, void *gstate, int nested_depth, fz_default_colorspaces *default_cs) +pdf_run_glyph(fz_context *ctx, pdf_document *doc, pdf_obj *resources, fz_buffer *contents, fz_device *dev, fz_matrix ctm, void *gstate, fz_default_colorspaces *default_cs) { pdf_processor *proc; - if (nested_depth > 10) - fz_throw(ctx, FZ_ERROR_GENERIC, "Too many nestings of Type3 glyphs"); - - proc = pdf_new_run_processor(ctx, dev, ctm, "View", gstate, nested_depth+1, default_cs); + proc = pdf_new_run_processor(ctx, dev, ctm, "View", gstate, default_cs); fz_try(ctx) { pdf_process_glyph(ctx, proc, doc, resources, contents); diff --git a/source/pdf/pdf-type3.c b/source/pdf/pdf-type3.c index d94cfb5b..27906c58 100644 --- a/source/pdf/pdf-type3.c +++ b/source/pdf/pdf-type3.c @@ -4,9 +4,9 @@ #include "../fitz/font-imp.h" static void -pdf_run_glyph_func(fz_context *ctx, void *doc, void *rdb, fz_buffer *contents, fz_device *dev, fz_matrix ctm, void *gstate, int nested_depth, fz_default_colorspaces *default_cs) +pdf_run_glyph_func(fz_context *ctx, void *doc, void *rdb, fz_buffer *contents, fz_device *dev, fz_matrix ctm, void *gstate, fz_default_colorspaces *default_cs) { - pdf_run_glyph(ctx, doc, (pdf_obj *)rdb, contents, dev, ctm, gstate, nested_depth, default_cs); + pdf_run_glyph(ctx, doc, (pdf_obj *)rdb, contents, dev, ctm, gstate, default_cs); } static void @@ -190,7 +190,7 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d return fontdesc; } -void pdf_load_type3_glyphs(fz_context *ctx, pdf_document *doc, pdf_font_desc *fontdesc, int nested_depth) +void pdf_load_type3_glyphs(fz_context *ctx, pdf_document *doc, pdf_font_desc *fontdesc) { int i; @@ -200,7 +200,7 @@ void pdf_load_type3_glyphs(fz_context *ctx, pdf_document *doc, pdf_font_desc *fo { if (fontdesc->font->t3procs[i]) { - fz_prepare_t3_glyph(ctx, fontdesc->font, i, nested_depth); + fz_prepare_t3_glyph(ctx, fontdesc->font, i); fontdesc->size += 0; // TODO: display list size calculation } } |