diff options
author | Robin Watts <robin.watts@artifex.com> | 2013-06-24 21:01:27 +0100 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2013-06-25 10:05:25 +0100 |
commit | 07dd8540ae72b0e7be64d04c38d8c19b83d184b6 (patch) | |
tree | dfaa48e8eeeb46fac17f8eb0cb8f226da9b841ca /source/pdf | |
parent | 8a2b650a9d3910d9b5104b1d2560b6a34bf7583e (diff) | |
download | mupdf-07dd8540ae72b0e7be64d04c38d8c19b83d184b6.tar.xz |
Update pdf_obj's to have a pdf_document field.
Remove the fz_context field to avoid the structure growing.
Diffstat (limited to 'source/pdf')
-rw-r--r-- | source/pdf/js/pdf-js.c | 11 | ||||
-rw-r--r-- | source/pdf/pdf-annot.c | 44 | ||||
-rw-r--r-- | source/pdf/pdf-device.c | 170 | ||||
-rw-r--r-- | source/pdf/pdf-form.c | 96 | ||||
-rw-r--r-- | source/pdf/pdf-interpret.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-nametree.c | 10 | ||||
-rw-r--r-- | source/pdf/pdf-object.c | 161 | ||||
-rw-r--r-- | source/pdf/pdf-page.c | 70 | ||||
-rw-r--r-- | source/pdf/pdf-parse.c | 106 | ||||
-rw-r--r-- | source/pdf/pdf-repair.c | 71 | ||||
-rw-r--r-- | source/pdf/pdf-write.c | 169 | ||||
-rw-r--r-- | source/pdf/pdf-xobject.c | 38 | ||||
-rw-r--r-- | source/pdf/pdf-xref.c | 166 |
13 files changed, 575 insertions, 539 deletions
diff --git a/source/pdf/js/pdf-js.c b/source/pdf/js/pdf-js.c index 4a2313f1..5ea9872f 100644 --- a/source/pdf/js/pdf-js.c +++ b/source/pdf/js/pdf-js.c @@ -138,13 +138,14 @@ static pdf_jsimp_obj *app_launchURL(void *jsctx, void *obj, int argc, pdf_jsimp_ return NULL; } -static pdf_obj *load_color(fz_context *ctx, pdf_jsimp *imp, pdf_jsimp_obj *val) +static pdf_obj *load_color(pdf_document *doc, pdf_jsimp *imp, pdf_jsimp_obj *val) { pdf_obj *col = NULL; pdf_obj *comp = NULL; pdf_jsimp_obj *jscomp = NULL; int i; int n; + fz_context *ctx = doc->ctx; n = pdf_jsimp_array_len(imp, val); @@ -154,7 +155,7 @@ static pdf_obj *load_color(fz_context *ctx, pdf_jsimp *imp, pdf_jsimp_obj *val) if (n <= 1) return NULL; - col = pdf_new_array(ctx, n-1); + col = pdf_new_array(doc, n-1); fz_var(comp); fz_var(jscomp); @@ -163,7 +164,7 @@ static pdf_obj *load_color(fz_context *ctx, pdf_jsimp *imp, pdf_jsimp_obj *val) for (i = 0; i < n-1; i++) { jscomp = pdf_jsimp_array_item(imp, val, i+1); - comp = pdf_new_real(ctx, pdf_jsimp_to_number(imp, jscomp)); + comp = pdf_new_real(doc, pdf_jsimp_to_number(imp, jscomp)); pdf_array_push(col, comp); pdf_jsimp_drop_obj(imp, jscomp); jscomp = NULL; @@ -264,7 +265,7 @@ static void field_setFillColor(void *jsctx, void *obj, pdf_jsimp_obj *val) if (!field) return; - col = load_color(js->doc->ctx, js->imp, val); + col = load_color(js->doc, js->imp, val); fz_try(ctx) { pdf_field_set_fill_color(js->doc, field, col); @@ -294,7 +295,7 @@ static void field_setTextColor(void *jsctx, void *obj, pdf_jsimp_obj *val) if (!field) return; - col = load_color(js->doc->ctx, js->imp, val); + col = load_color(js->doc, js->imp, val); fz_try(ctx) { pdf_field_set_text_color(js->doc, field, col); diff --git a/source/pdf/pdf-annot.c b/source/pdf/pdf-annot.c index 8baa721e..6d2d60fd 100644 --- a/source/pdf/pdf-annot.c +++ b/source/pdf/pdf-annot.c @@ -676,7 +676,7 @@ pdf_create_annot(pdf_document *doc, pdf_page *page, fz_annot_type type) { fz_context *ctx = doc->ctx; pdf_annot *annot = NULL; - pdf_obj *annot_obj = pdf_new_dict(ctx, 0); + pdf_obj *annot_obj = pdf_new_dict(doc, 0); pdf_obj *ind_obj = NULL; fz_var(annot); @@ -689,14 +689,14 @@ pdf_create_annot(pdf_document *doc, pdf_page *page, fz_annot_type type) pdf_obj *annot_arr = pdf_dict_gets(page->me, "Annots"); if (annot_arr == NULL) { - annot_arr = pdf_new_array(ctx, 0); + annot_arr = pdf_new_array(doc, 0); pdf_dict_puts_drop(page->me, "Annots", annot_arr); } - pdf_dict_puts_drop(annot_obj, "Type", pdf_new_name(ctx, "Annot")); + pdf_dict_puts_drop(annot_obj, "Type", pdf_new_name(doc, "Annot")); - pdf_dict_puts_drop(annot_obj, "Subtype", pdf_new_name(ctx, type_str)); - pdf_dict_puts_drop(annot_obj, "Rect", pdf_new_rect(ctx, &rect)); + pdf_dict_puts_drop(annot_obj, "Subtype", pdf_new_name(doc, type_str)); + pdf_dict_puts_drop(annot_obj, "Rect", pdf_new_rect(doc, &rect)); annot = fz_malloc_struct(ctx, pdf_annot); annot->page = page; @@ -714,7 +714,7 @@ pdf_create_annot(pdf_document *doc, pdf_page *page, fz_annot_type type) */ ind_obj_num = pdf_create_object(doc); pdf_update_object(doc, ind_obj_num, annot_obj); - ind_obj = pdf_new_indirect(ctx, ind_obj_num, 0, doc); + ind_obj = pdf_new_indirect(doc, ind_obj_num, 0); pdf_array_push(annot_arr, ind_obj); /* @@ -777,7 +777,7 @@ pdf_delete_annot(pdf_document *doc, pdf_page *page, pdf_annot *annot) if (old_annot_arr) { int i, n = pdf_array_len(old_annot_arr); - annot_arr = pdf_new_array(ctx, n?(n-1):0); + annot_arr = pdf_new_array(doc, n?(n-1):0); fz_try(ctx) { @@ -872,7 +872,7 @@ pdf_set_markup_annot_quadpoints(pdf_document *doc, pdf_annot *annot, fz_point *q { fz_context *ctx = doc->ctx; fz_matrix ctm; - pdf_obj *arr = pdf_new_array(ctx, n*2); + pdf_obj *arr = pdf_new_array(doc, n*2); int i; fz_invert_matrix(&ctm, &annot->page->ctm); @@ -885,9 +885,9 @@ pdf_set_markup_annot_quadpoints(pdf_document *doc, pdf_annot *annot, fz_point *q pdf_obj *r; fz_transform_point(&pt, &ctm); - r = pdf_new_real(ctx, pt.x); + r = pdf_new_real(doc, pt.x); pdf_array_push_drop(arr, r); - r = pdf_new_real(ctx, pt.y); + r = pdf_new_real(doc, pt.y); pdf_array_push_drop(arr, r); } } @@ -904,7 +904,7 @@ pdf_set_ink_annot_list(pdf_document *doc, pdf_annot *annot, fz_point *pts, int * { fz_context *ctx = doc->ctx; fz_matrix ctm; - pdf_obj *list = pdf_new_array(ctx, ncount); + pdf_obj *list = pdf_new_array(doc, ncount); pdf_obj *bs, *col; fz_rect rect; int i, k = 0; @@ -916,7 +916,7 @@ pdf_set_ink_annot_list(pdf_document *doc, pdf_annot *annot, fz_point *pts, int * for (i = 0; i < ncount; i++) { int j; - pdf_obj *arc = pdf_new_array(ctx, counts[i]); + pdf_obj *arc = pdf_new_array(doc, counts[i]); pdf_array_push_drop(list, arc); @@ -936,24 +936,24 @@ pdf_set_ink_annot_list(pdf_document *doc, pdf_annot *annot, fz_point *pts, int * fz_include_point_in_rect(&rect, &pt); } - pdf_array_push_drop(arc, pdf_new_real(ctx, pt.x)); - pdf_array_push_drop(arc, pdf_new_real(ctx, pt.y)); + pdf_array_push_drop(arc, pdf_new_real(doc, pt.x)); + pdf_array_push_drop(arc, pdf_new_real(doc, pt.y)); k++; } } fz_expand_rect(&rect, thickness); - pdf_dict_puts_drop(annot->obj, "Rect", pdf_new_rect(ctx, &rect)); + pdf_dict_puts_drop(annot->obj, "Rect", pdf_new_rect(doc, &rect)); update_rect(ctx, annot); - bs = pdf_new_dict(ctx, 1); + bs = pdf_new_dict(doc, 1); pdf_dict_puts_drop(annot->obj, "BS", bs); - pdf_dict_puts_drop(bs, "W", pdf_new_real(ctx, thickness)); + pdf_dict_puts_drop(bs, "W", pdf_new_real(doc, thickness)); - col = pdf_new_array(ctx, 3); + col = pdf_new_array(doc, 3); pdf_dict_puts_drop(annot->obj, "C", col); for (i = 0; i < 3; i++) - pdf_array_push_drop(col, pdf_new_real(ctx, color[i])); + pdf_array_push_drop(col, pdf_new_real(doc, color[i])); } void @@ -977,7 +977,7 @@ pdf_set_annot_appearance(pdf_document *doc, pdf_annot *annot, fz_rect *rect, fz_ fz_transform_rect(&trect, &ctm); - pdf_dict_puts_drop(obj, "Rect", pdf_new_rect(ctx, &trect)); + pdf_dict_puts_drop(obj, "Rect", pdf_new_rect(doc, &trect)); /* See if there is a current normal appearance */ ap_obj = pdf_dict_getp(obj, "AP/N"); @@ -991,8 +991,8 @@ pdf_set_annot_appearance(pdf_document *doc, pdf_annot *annot, fz_rect *rect, fz_ } else { - pdf_dict_puts_drop(ap_obj, "Rect", pdf_new_rect(ctx, &trect)); - pdf_dict_puts_drop(ap_obj, "Matrix", pdf_new_matrix(ctx, &mat)); + pdf_dict_puts_drop(ap_obj, "Rect", pdf_new_rect(doc, &trect)); + pdf_dict_puts_drop(ap_obj, "Matrix", pdf_new_matrix(doc, &mat)); } dev = pdf_new_pdf_device(doc, ap_obj, pdf_dict_gets(ap_obj, "Resources"), &mat); diff --git a/source/pdf/pdf-device.c b/source/pdf/pdf-device.c index 29d2556d..cf06a7a1 100644 --- a/source/pdf/pdf-device.c +++ b/source/pdf/pdf-device.c @@ -68,7 +68,7 @@ struct group_entry_s struct pdf_device_s { fz_context *ctx; - pdf_document *xref; + pdf_document *doc; pdf_obj *contents; pdf_obj *resources; @@ -117,6 +117,7 @@ send_image(pdf_device *pdev, fz_image *image, int mask, int smask) unsigned char digest[16]; int bpc = 8; fz_colorspace *colorspace = image->colorspace; + pdf_document *doc = pdev->doc; /* If we can maintain compression, do so */ cbuffer = image->buffer; @@ -192,21 +193,21 @@ send_image(pdf_device *pdev, fz_image *image, int mask, int smask) memcpy(pdev->images[num].digest,digest,16); pdev->images[num].ref = NULL; /* Will be filled in later */ - imobj = pdf_new_dict(ctx, 3); - pdf_dict_puts_drop(imobj, "Type", pdf_new_name(ctx, "XObject")); - pdf_dict_puts_drop(imobj, "Subtype", pdf_new_name(ctx, "Image")); - pdf_dict_puts_drop(imobj, "Width", pdf_new_int(ctx, image->w)); - pdf_dict_puts_drop(imobj, "Height", pdf_new_int(ctx, image->h)); + imobj = pdf_new_dict(doc, 3); + pdf_dict_puts_drop(imobj, "Type", pdf_new_name(doc, "XObject")); + pdf_dict_puts_drop(imobj, "Subtype", pdf_new_name(doc, "Image")); + pdf_dict_puts_drop(imobj, "Width", pdf_new_int(doc, image->w)); + pdf_dict_puts_drop(imobj, "Height", pdf_new_int(doc, image->h)); if (mask) {} else if (!colorspace || colorspace->n == 1) - pdf_dict_puts_drop(imobj, "ColorSpace", pdf_new_name(ctx, "DeviceGray")); + pdf_dict_puts_drop(imobj, "ColorSpace", pdf_new_name(doc, "DeviceGray")); else if (colorspace->n == 3) - pdf_dict_puts_drop(imobj, "ColorSpace", pdf_new_name(ctx, "DeviceRGB")); + pdf_dict_puts_drop(imobj, "ColorSpace", pdf_new_name(doc, "DeviceRGB")); else if (colorspace->n == 4) - pdf_dict_puts_drop(imobj, "ColorSpace", pdf_new_name(ctx, "DeviceCMYK")); + pdf_dict_puts_drop(imobj, "ColorSpace", pdf_new_name(doc, "DeviceCMYK")); if (!mask) - pdf_dict_puts_drop(imobj, "BitsPerComponent", pdf_new_int(ctx, image->bpc)); + pdf_dict_puts_drop(imobj, "BitsPerComponent", pdf_new_int(doc, image->bpc)); switch (cp ? cp->type : FZ_IMAGE_UNKNOWN) { case FZ_IMAGE_UNKNOWN: /* Unknown also means raw */ @@ -214,32 +215,32 @@ send_image(pdf_device *pdev, fz_image *image, int mask, int smask) break; case FZ_IMAGE_JPEG: if (cp->u.jpeg.color_transform != -1) - pdf_dict_puts_drop(imobj, "ColorTransform", pdf_new_int(ctx, cp->u.jpeg.color_transform)); - pdf_dict_puts_drop(imobj, "Filter", pdf_new_name(ctx, "DCTDecode")); + pdf_dict_puts_drop(imobj, "ColorTransform", pdf_new_int(doc, cp->u.jpeg.color_transform)); + pdf_dict_puts_drop(imobj, "Filter", pdf_new_name(doc, "DCTDecode")); break; case FZ_IMAGE_JPX: if (cp->u.jpx.smask_in_data) - pdf_dict_puts_drop(imobj, "SMaskInData", pdf_new_int(ctx, cp->u.jpx.smask_in_data)); - pdf_dict_puts_drop(imobj, "Filter", pdf_new_name(ctx, "JPXDecode")); + pdf_dict_puts_drop(imobj, "SMaskInData", pdf_new_int(doc, cp->u.jpx.smask_in_data)); + pdf_dict_puts_drop(imobj, "Filter", pdf_new_name(doc, "JPXDecode")); break; case FZ_IMAGE_FAX: if (cp->u.fax.columns) - pdf_dict_puts(imobj, "Columns", pdf_new_int(ctx, cp->u.fax.columns)); + pdf_dict_puts(imobj, "Columns", pdf_new_int(doc, cp->u.fax.columns)); if (cp->u.fax.rows) - pdf_dict_puts(imobj, "Rows", pdf_new_int(ctx, cp->u.fax.rows)); + pdf_dict_puts(imobj, "Rows", pdf_new_int(doc, cp->u.fax.rows)); if (cp->u.fax.k) - pdf_dict_puts(imobj, "K", pdf_new_int(ctx, cp->u.fax.k)); + pdf_dict_puts(imobj, "K", pdf_new_int(doc, cp->u.fax.k)); if (cp->u.fax.end_of_line) - pdf_dict_puts(imobj, "EndOfLine", pdf_new_int(ctx, cp->u.fax.end_of_line)); + pdf_dict_puts(imobj, "EndOfLine", pdf_new_int(doc, cp->u.fax.end_of_line)); if (cp->u.fax.encoded_byte_align) - pdf_dict_puts(imobj, "EncodedByteAlign", pdf_new_int(ctx, cp->u.fax.encoded_byte_align)); + pdf_dict_puts(imobj, "EncodedByteAlign", pdf_new_int(doc, cp->u.fax.encoded_byte_align)); if (cp->u.fax.end_of_block) - pdf_dict_puts(imobj, "EndOfBlock", pdf_new_int(ctx, cp->u.fax.end_of_block)); + pdf_dict_puts(imobj, "EndOfBlock", pdf_new_int(doc, cp->u.fax.end_of_block)); if (cp->u.fax.black_is_1) - pdf_dict_puts(imobj, "BlackIs1", pdf_new_int(ctx, cp->u.fax.black_is_1)); + pdf_dict_puts(imobj, "BlackIs1", pdf_new_int(doc, cp->u.fax.black_is_1)); if (cp->u.fax.damaged_rows_before_error) - pdf_dict_puts(imobj, "DamagedRowsBeforeError", pdf_new_int(ctx, cp->u.fax.damaged_rows_before_error)); - pdf_dict_puts(imobj, "Filter", pdf_new_name(ctx, "CCITTFaxDecode")); + pdf_dict_puts(imobj, "DamagedRowsBeforeError", pdf_new_int(doc, cp->u.fax.damaged_rows_before_error)); + pdf_dict_puts(imobj, "Filter", pdf_new_name(doc, "CCITTFaxDecode")); break; case FZ_IMAGE_JBIG2: /* FIXME - jbig2globals */ @@ -248,36 +249,36 @@ send_image(pdf_device *pdev, fz_image *image, int mask, int smask) break; case FZ_IMAGE_FLATE: if (cp->u.flate.columns) - pdf_dict_puts(imobj, "Columns", pdf_new_int(ctx, cp->u.flate.columns)); + pdf_dict_puts(imobj, "Columns", pdf_new_int(doc, cp->u.flate.columns)); if (cp->u.flate.colors) - pdf_dict_puts(imobj, "Colors", pdf_new_int(ctx, cp->u.flate.colors)); + pdf_dict_puts(imobj, "Colors", pdf_new_int(doc, cp->u.flate.colors)); if (cp->u.flate.predictor) - pdf_dict_puts(imobj, "Predictor", pdf_new_int(ctx, cp->u.flate.predictor)); + pdf_dict_puts(imobj, "Predictor", pdf_new_int(doc, cp->u.flate.predictor)); if (cp->u.flate.bpc) bpc = cp->u.flate.bpc; - pdf_dict_puts(imobj, "Filter", pdf_new_name(ctx, "FlateDecode")); - pdf_dict_puts_drop(imobj, "BitsPerComponent", pdf_new_int(ctx, image->bpc)); + pdf_dict_puts(imobj, "Filter", pdf_new_name(doc, "FlateDecode")); + pdf_dict_puts_drop(imobj, "BitsPerComponent", pdf_new_int(doc, image->bpc)); break; case FZ_IMAGE_LZW: if (cp->u.lzw.columns) - pdf_dict_puts(imobj, "Columns", pdf_new_int(ctx, cp->u.lzw.columns)); + pdf_dict_puts(imobj, "Columns", pdf_new_int(doc, cp->u.lzw.columns)); if (cp->u.lzw.colors) - pdf_dict_puts(imobj, "Colors", pdf_new_int(ctx, cp->u.lzw.colors)); + pdf_dict_puts(imobj, "Colors", pdf_new_int(doc, cp->u.lzw.colors)); if (cp->u.lzw.predictor) - pdf_dict_puts(imobj, "Predictor", pdf_new_int(ctx, cp->u.lzw.predictor)); + pdf_dict_puts(imobj, "Predictor", pdf_new_int(doc, cp->u.lzw.predictor)); if (cp->u.lzw.bpc) bpc = cp->u.lzw.bpc; if (cp->u.lzw.early_change) - pdf_dict_puts(imobj, "EarlyChange", pdf_new_int(ctx, cp->u.lzw.early_change)); - pdf_dict_puts(imobj, "Filter", pdf_new_name(ctx, "LZWDecode")); + pdf_dict_puts(imobj, "EarlyChange", pdf_new_int(doc, cp->u.lzw.early_change)); + pdf_dict_puts(imobj, "Filter", pdf_new_name(doc, "LZWDecode")); break; case FZ_IMAGE_RLD: - pdf_dict_puts(imobj, "Filter", pdf_new_name(ctx, "RunLengthDecode")); + pdf_dict_puts(imobj, "Filter", pdf_new_name(doc, "RunLengthDecode")); break; } if (mask) { - pdf_dict_puts_drop(imobj, "ImageMask", pdf_new_bool(ctx, 1)); + pdf_dict_puts_drop(imobj, "ImageMask", pdf_new_bool(doc, 1)); bpc = 1; } if (image->mask) @@ -286,9 +287,9 @@ send_image(pdf_device *pdev, fz_image *image, int mask, int smask) pdf_dict_puts(imobj, "SMask", pdev->images[smasknum].ref); } - imref = pdf_new_ref(pdev->xref, imobj); - pdf_update_stream(pdev->xref, pdf_to_num(imref), buffer); - pdf_dict_puts_drop(imobj, "Length", pdf_new_int(ctx, buffer->len)); + imref = pdf_new_ref(doc, imobj); + pdf_update_stream(doc, pdf_to_num(imref), buffer); + pdf_dict_puts_drop(imobj, "Length", pdf_new_int(doc, buffer->len)); { char text[32]; @@ -483,6 +484,7 @@ pdf_dev_alpha(pdf_device *pdev, float alpha, int stroke) { int i; fz_context *ctx = pdev->ctx; + pdf_document *doc = pdev->doc; gstate *gs = CURRENT_GSTATE(pdev); /* If the alpha is unchanged, nothing to do */ @@ -513,12 +515,12 @@ pdf_dev_alpha(pdf_device *pdev, float alpha, int stroke) pdev->alphas[i].alpha = alpha; pdev->alphas[i].stroke = stroke; - o = pdf_new_dict(ctx, 1); + o = pdf_new_dict(doc, 1); fz_try(ctx) { char text[32]; - pdf_dict_puts_drop(o, (stroke ? "CA" : "ca"), pdf_new_real(ctx, alpha)); - ref = pdf_new_ref(pdev->xref, o); + pdf_dict_puts_drop(o, (stroke ? "CA" : "ca"), pdf_new_real(doc, alpha)); + ref = pdf_new_ref(doc, o); snprintf(text, sizeof(text), "ExtGState/Alp%d", i); pdf_dict_putp(pdev->resources, text, ref); } @@ -540,6 +542,7 @@ static void pdf_dev_font(pdf_device *pdev, fz_font *font, float size) { int i; + pdf_document *doc = pdev->doc; fz_context *ctx = pdev->ctx; gstate *gs = CURRENT_GSTATE(pdev); @@ -570,15 +573,15 @@ pdf_dev_font(pdf_device *pdev, fz_font *font, float size) } pdev->fonts[i].font = fz_keep_font(ctx, font); - o = pdf_new_dict(ctx, 3); + o = pdf_new_dict(doc, 3); fz_try(ctx) { /* BIG FIXME: Get someone who understands fonts to fill this bit in. */ char text[32]; - pdf_dict_puts_drop(o, "Type", pdf_new_name(ctx, "Font")); - pdf_dict_puts_drop(o, "Subtype", pdf_new_name(ctx, "Type1")); - pdf_dict_puts_drop(o, "BaseFont", pdf_new_name(ctx, "Helvetica")); - ref = pdf_new_ref(pdev->xref, o); + pdf_dict_puts_drop(o, "Type", pdf_new_name(doc, "Font")); + pdf_dict_puts_drop(o, "Subtype", pdf_new_name(doc, "Type1")); + pdf_dict_puts_drop(o, "BaseFont", pdf_new_name(doc, "Helvetica")); + ref = pdf_new_ref(doc, o); snprintf(text, sizeof(text), "Font/F%d", i); pdf_dict_putp(pdev->resources, text, ref); } @@ -739,6 +742,7 @@ static int pdf_dev_new_form(pdf_obj **form_ref, pdf_device *pdev, const fz_rect *bbox, int isolated, int knockout, int blendmode, float alpha, fz_colorspace *colorspace) { fz_context *ctx = pdev->ctx; + pdf_document *doc = pdev->doc; int num; pdf_obj *group_ref; pdf_obj *group; @@ -775,24 +779,24 @@ pdf_dev_new_form(pdf_obj **form_ref, pdf_device *pdev, const fz_rect *bbox, int pdev->groups[num].alpha = alpha; pdev->groups[num].colorspace = fz_keep_colorspace(ctx, colorspace); pdev->groups[num].ref = NULL; - group = pdf_new_dict(ctx, 5); + group = pdf_new_dict(doc, 5); fz_try(ctx) { - pdf_dict_puts_drop(group, "Type", pdf_new_name(ctx, "Group")); - pdf_dict_puts_drop(group, "S", pdf_new_name(ctx, "Transparency")); - pdf_dict_puts_drop(group, "K", pdf_new_bool(ctx, knockout)); - pdf_dict_puts_drop(group, "I", pdf_new_bool(ctx, isolated)); - pdf_dict_puts_drop(group, "K", pdf_new_bool(ctx, knockout)); - pdf_dict_puts_drop(group, "BM", pdf_new_name(ctx, fz_blendmode_name(blendmode))); + pdf_dict_puts_drop(group, "Type", pdf_new_name(doc, "Group")); + pdf_dict_puts_drop(group, "S", pdf_new_name(doc, "Transparency")); + pdf_dict_puts_drop(group, "K", pdf_new_bool(doc, knockout)); + pdf_dict_puts_drop(group, "I", pdf_new_bool(doc, isolated)); + pdf_dict_puts_drop(group, "K", pdf_new_bool(doc, knockout)); + pdf_dict_puts_drop(group, "BM", pdf_new_name(doc, fz_blendmode_name(blendmode))); if (!colorspace) {} else if (colorspace->n == 1) - pdf_dict_puts_drop(group, "CS", pdf_new_name(ctx, "DeviceGray")); + pdf_dict_puts_drop(group, "CS", pdf_new_name(doc, "DeviceGray")); else if (colorspace->n == 4) - pdf_dict_puts_drop(group, "CS", pdf_new_name(ctx, "DeviceCMYK")); + pdf_dict_puts_drop(group, "CS", pdf_new_name(doc, "DeviceCMYK")); else - pdf_dict_puts_drop(group, "CS", pdf_new_name(ctx, "DeviceRGB")); - group_ref = pdev->groups[num].ref = pdf_new_ref(pdev->xref, group); + pdf_dict_puts_drop(group, "CS", pdf_new_name(doc, "DeviceRGB")); + group_ref = pdev->groups[num].ref = pdf_new_ref(doc, group); } fz_always(ctx) { @@ -806,14 +810,14 @@ pdf_dev_new_form(pdf_obj **form_ref, pdf_device *pdev, const fz_rect *bbox, int /* Make us a new Forms object that points to that group, and change * to writing into the buffer for that Forms object. */ - form = pdf_new_dict(ctx, 4); + form = pdf_new_dict(doc, 4); fz_try(ctx) { - pdf_dict_puts_drop(form, "Subtype", pdf_new_name(ctx, "Form")); + pdf_dict_puts_drop(form, "Subtype", pdf_new_name(doc, "Form")); pdf_dict_puts(form, "Group", group_ref); - pdf_dict_puts_drop(form, "FormType", pdf_new_int(ctx, 1)); - pdf_dict_puts_drop(form, "BBox", pdf_new_rect(ctx, bbox)); - *form_ref = pdf_new_ref(pdev->xref, form); + pdf_dict_puts_drop(form, "FormType", pdf_new_int(doc, 1)); + pdf_dict_puts_drop(form, "BBox", pdf_new_rect(doc, bbox)); + *form_ref = pdf_new_ref(doc, form); } fz_catch(ctx) { @@ -1030,6 +1034,7 @@ static void pdf_dev_begin_mask(fz_device *dev, const fz_rect *bbox, int luminosity, fz_colorspace *colorspace, float *color) { pdf_device *pdev = (pdf_device *)dev->user; + pdf_document *doc = pdev->doc; fz_context *ctx = pdev->ctx; gstate *gs; pdf_obj *smask = NULL; @@ -1050,20 +1055,20 @@ pdf_dev_begin_mask(fz_device *dev, const fz_rect *bbox, int luminosity, fz_color fz_try(ctx) { - smask = pdf_new_dict(ctx, 4); - pdf_dict_puts(smask, "Type", pdf_new_name(ctx, "Mask")); - pdf_dict_puts_drop(smask, "S", pdf_new_name(ctx, (luminosity ? "Luminosity" : "Alpha"))); + smask = pdf_new_dict(doc, 4); + pdf_dict_puts(smask, "Type", pdf_new_name(doc, "Mask")); + pdf_dict_puts_drop(smask, "S", pdf_new_name(doc, (luminosity ? "Luminosity" : "Alpha"))); pdf_dict_puts(smask, "G", form_ref); - color_obj = pdf_new_array(ctx, colorspace->n); + color_obj = pdf_new_array(doc, colorspace->n); for (i = 0; i < colorspace->n; i++) - pdf_array_push(color_obj, pdf_new_real(ctx, color[i])); + pdf_array_push(color_obj, pdf_new_real(doc, color[i])); pdf_dict_puts_drop(smask, "BC", color_obj); color_obj = NULL; - egs = pdf_new_dict(ctx, 5); - pdf_dict_puts_drop(egs, "Type", pdf_new_name(ctx, "ExtGState")); - pdf_dict_puts_drop(egs, "SMask", pdf_new_ref(pdev->xref, smask)); - egs_ref = pdf_new_ref(pdev->xref, egs); + egs = pdf_new_dict(doc, 5); + pdf_dict_puts_drop(egs, "Type", pdf_new_name(doc, "ExtGState")); + pdf_dict_puts_drop(egs, "SMask", pdf_new_ref(doc, smask)); + egs_ref = pdf_new_ref(doc, egs); { char text[32]; @@ -1094,6 +1099,7 @@ static void pdf_dev_end_mask(fz_device *dev) { pdf_device *pdev = (pdf_device *)dev->user; + pdf_document *doc = pdev->doc; fz_context *ctx = pdev->ctx; gstate *gs = CURRENT_GSTATE(pdev); fz_buffer *buf = fz_keep_buffer(ctx, gs->buf); @@ -1101,14 +1107,14 @@ pdf_dev_end_mask(fz_device *dev) /* Here we do part of the pop, but not all of it. */ pdf_dev_end_text(pdev); - fz_buffer_printf(pdev->ctx, buf, "Q\n"); - pdf_dict_puts_drop(form_ref, "Length", pdf_new_int(ctx, buf->len)); - pdf_update_stream(pdev->xref, pdf_to_num(form_ref), buf); + fz_buffer_printf(ctx, buf, "Q\n"); + pdf_dict_puts_drop(form_ref, "Length", pdf_new_int(doc, buf->len)); + pdf_update_stream(doc, pdf_to_num(form_ref), buf); fz_drop_buffer(ctx, buf); gs->buf = fz_keep_buffer(ctx, gs[-1].buf); gs->on_pop_arg = NULL; pdf_drop_obj(form_ref); - fz_buffer_printf(pdev->ctx, gs->buf, "q\n"); + fz_buffer_printf(ctx, gs->buf, "q\n"); } static void @@ -1137,6 +1143,7 @@ static void pdf_dev_end_group(fz_device *dev) { pdf_device *pdev = (pdf_device *)dev->user; + pdf_document *doc = pdev->doc; gstate *gs = CURRENT_GSTATE(pdev); fz_context *ctx = pdev->ctx; fz_buffer *buf = fz_keep_buffer(ctx, gs->buf); @@ -1144,8 +1151,8 @@ pdf_dev_end_group(fz_device *dev) pdf_dev_end_text(pdev); form_ref = (pdf_obj *)pdf_dev_pop(pdev); - pdf_dict_puts_drop(form_ref, "Length", pdf_new_int(ctx, gs->buf->len)); - pdf_update_stream(pdev->xref, pdf_to_num(form_ref), buf); + pdf_dict_puts_drop(form_ref, "Length", pdf_new_int(doc, gs->buf->len)); + pdf_update_stream(doc, pdf_to_num(form_ref), buf); fz_drop_buffer(ctx, buf); pdf_drop_obj(form_ref); } @@ -1173,13 +1180,14 @@ static void pdf_dev_free_user(fz_device *dev) { pdf_device *pdev = dev->user; + pdf_document *doc = pdev->doc; fz_context *ctx = pdev->ctx; gstate *gs = CURRENT_GSTATE(pdev); int i; pdf_dev_end_text(pdev); - pdf_dict_puts_drop(pdev->contents, "Length", pdf_new_int(ctx, gs->buf->len)); + pdf_dict_puts_drop(pdev->contents, "Length", pdf_new_int(doc, gs->buf->len)); for (i = pdev->num_gstates-1; i >= 0; i--) { @@ -1196,7 +1204,7 @@ pdf_dev_free_user(fz_device *dev) pdf_drop_obj(pdev->images[i].ref); } - pdf_update_stream(pdev->xref, pdf_to_num(pdev->contents), pdev->gstates[0].buf); + pdf_update_stream(doc, pdf_to_num(pdev->contents), pdev->gstates[0].buf); fz_drop_buffer(ctx, pdev->gstates[0].buf); pdf_drop_obj(pdev->contents); @@ -1217,7 +1225,7 @@ fz_device *pdf_new_pdf_device(pdf_document *doc, pdf_obj *contents, pdf_obj *res fz_try(ctx) { pdev->ctx = ctx; - pdev->xref = doc; + pdev->doc = doc; pdev->contents = pdf_keep_obj(contents); pdev->resources = pdf_keep_obj(resources); pdev->gstates = fz_malloc_struct(ctx, gstate); @@ -1282,7 +1290,7 @@ fz_device *pdf_page_write(pdf_document *doc, pdf_page *page) fz_pre_translate(fz_scale(&ctm, 1, -1), 0, page->mediabox.y0-page->mediabox.y1); if (resources == NULL) { - resources = pdf_new_dict(doc->ctx, 0); + resources = pdf_new_dict(doc, 0); pdf_dict_puts_drop(page->me, "Resources", resources); } diff --git a/source/pdf/pdf-form.c b/source/pdf/pdf-form.c index 41b15752..21c27ea7 100644 --- a/source/pdf/pdf-form.c +++ b/source/pdf/pdf-form.c @@ -169,19 +169,20 @@ static pdf_obj *find_head_of_field_group(pdf_obj *obj) return find_head_of_field_group(pdf_dict_gets(obj, "Parent")); } -static void pdf_field_mark_dirty(fz_context *ctx, pdf_obj *field) +static void pdf_field_mark_dirty(pdf_document *doc, pdf_obj *field) { + fz_context *ctx = doc->ctx; pdf_obj *kids = pdf_dict_gets(field, "Kids"); if (kids) { int i, n = pdf_array_len(kids); for (i = 0; i < n; i++) - pdf_field_mark_dirty(ctx, pdf_array_get(kids, i)); + pdf_field_mark_dirty(doc, pdf_array_get(kids, i)); } else if (!pdf_dict_gets(field, "Dirty")) { - pdf_obj *nullobj = pdf_new_null(ctx); + pdf_obj *nullobj = pdf_new_null(doc); fz_try(ctx) { pdf_dict_puts(field, "Dirty", nullobj); @@ -1044,8 +1045,9 @@ static int get_matrix(pdf_document *doc, pdf_xobject *form, int q, fz_matrix *mt return found; } -static void update_field_value(fz_context *ctx, pdf_obj *obj, char *text) +static void update_field_value(pdf_document *doc, pdf_obj *obj, char *text) { + fz_context *ctx = doc->ctx; pdf_obj *sobj = NULL; pdf_obj *grp; @@ -1061,7 +1063,7 @@ static void update_field_value(fz_context *ctx, pdf_obj *obj, char *text) fz_var(sobj); fz_try(ctx) { - sobj = pdf_new_string(ctx, text, strlen(text)); + sobj = pdf_new_string(doc, text, strlen(text)); pdf_dict_puts(obj, "V", sobj); } fz_always(ctx) @@ -1073,7 +1075,7 @@ static void update_field_value(fz_context *ctx, pdf_obj *obj, char *text) fz_rethrow(ctx); } - pdf_field_mark_dirty(ctx, obj); + pdf_field_mark_dirty(doc, obj); } static pdf_xobject *load_or_create_form(pdf_document *doc, pdf_obj *obj, fz_rect *rect) @@ -1103,7 +1105,7 @@ static pdf_xobject *load_or_create_form(pdf_document *doc, pdf_obj *obj, fz_rect ap = pdf_dict_gets(obj, "AP"); if (ap == NULL) { - ap = pdf_new_dict(ctx, 1); + ap = pdf_new_dict(doc, 1); pdf_dict_puts_drop(obj, "AP", ap); } @@ -1504,7 +1506,7 @@ static void reset_field(pdf_document *doc, pdf_obj *field) if (leafv) pdf_keep_obj(leafv); else - leafv = pdf_new_name(ctx, "Off"); + leafv = pdf_new_name(doc, "Off"); fz_try(ctx) { @@ -1525,7 +1527,7 @@ static void reset_field(pdf_document *doc, pdf_obj *field) break; default: - pdf_field_mark_dirty(ctx, field); + pdf_field_mark_dirty(doc, field); break; } } @@ -1579,7 +1581,7 @@ static pdf_obj *specified_fields(pdf_document *doc, pdf_obj *fields, int exclude fz_context *ctx = doc->ctx; pdf_obj *form = pdf_dict_getp(pdf_trailer(doc), "Root/AcroForm/Fields"); int i, n; - pdf_obj *result = pdf_new_array(ctx, 0); + pdf_obj *result = pdf_new_array(doc, 0); pdf_obj *nil = NULL; fz_var(nil); @@ -1590,7 +1592,7 @@ static pdf_obj *specified_fields(pdf_document *doc, pdf_obj *fields, int exclude if (exclude || !fields) { /* mark the fields we don't want to act upon */ - nil = pdf_new_null(ctx); + nil = pdf_new_null(doc); n = pdf_array_len(fields); @@ -1848,14 +1850,15 @@ static void execute_additional_action(pdf_document *doc, pdf_obj *obj, char *act } } -static void check_off(fz_context *ctx, pdf_obj *obj) +static void check_off(pdf_document *doc, pdf_obj *obj) { + fz_context *ctx = doc->ctx; pdf_obj *off = NULL; fz_var(off); fz_try(ctx); { - off = pdf_new_name(ctx, "Off"); + off = pdf_new_name(doc, "Off"); pdf_dict_puts(obj, "AS", off); } fz_always(ctx) @@ -1868,10 +1871,11 @@ static void check_off(fz_context *ctx, pdf_obj *obj) } } -static void set_check(fz_context *ctx, pdf_obj *chk, char *name) +static void set_check(pdf_document *doc, pdf_obj *chk, char *name) { pdf_obj *n = pdf_dict_getp(chk, "AP/N"); pdf_obj *val = NULL; + fz_context *ctx = doc->ctx; fz_var(val); fz_try(ctx) @@ -1879,9 +1883,9 @@ static void set_check(fz_context *ctx, pdf_obj *chk, char *name) /* If name is a possible value of this check * box then use it, otherwise use "Off" */ if (pdf_dict_gets(n, name)) - val = pdf_new_name(ctx, name); + val = pdf_new_name(doc, name); else - val = pdf_new_name(ctx, "Off"); + val = pdf_new_name(doc, "Off"); pdf_dict_puts(chk, "AS", val); } @@ -1897,20 +1901,20 @@ static void set_check(fz_context *ctx, pdf_obj *chk, char *name) /* Set the values of all fields in a group defined by a node * in the hierarchy */ -static void set_check_grp(fz_context *ctx, pdf_obj *grp, char *val) +static void set_check_grp(pdf_document *doc, pdf_obj *grp, char *val) { pdf_obj *kids = pdf_dict_gets(grp, "Kids"); if (kids == NULL) { - set_check(ctx, grp, val); + set_check(doc, grp, val); } else { int i, n = pdf_array_len(kids); for (i = 0; i < n; i++) - set_check_grp(ctx, pdf_array_get(kids, i), val); + set_check_grp(doc, pdf_array_get(kids, i), val); } } @@ -1945,7 +1949,7 @@ static void recalculate(pdf_document *doc) execute_action(doc, field, calc); /* A calculate action, updates event.value. We need * to place the value in the field */ - update_field_value(doc->ctx, field, pdf_js_get_event(doc->js)->value); + update_field_value(doc, field, pdf_js_get_event(doc->js)->value); } } } @@ -1978,7 +1982,7 @@ static void toggle_check_box(pdf_document *doc, pdf_obj *obj) * this is a non-toggle-off radio button. */ if ((ff & (Ff_Pushbutton|Ff_NoToggleToOff|Ff_Radio)) != (Ff_NoToggleToOff|Ff_Radio)) { - check_off(ctx, obj); + check_off(doc, obj); val = "Off"; } } @@ -2012,7 +2016,7 @@ static void toggle_check_box(pdf_document *doc, pdf_obj *obj) len = pdf_array_len(kids); for (i = 0; i < len; i++) - check_off(ctx, pdf_array_get(kids, i)); + check_off(doc, pdf_array_get(kids, i)); pdf_dict_puts(obj, "AS", key); } @@ -2023,9 +2027,9 @@ static void toggle_check_box(pdf_document *doc, pdf_obj *obj) * all to the same value. This may cause the group to act like * radio buttons, if each have distinct "On" values */ if (grp) - set_check_grp(doc->ctx, grp, val); + set_check_grp(doc, grp, val); else - set_check(doc->ctx, obj, val); + set_check(doc, obj, val); } } @@ -2036,7 +2040,7 @@ static void toggle_check_box(pdf_document *doc, pdf_obj *obj) fz_var(v); fz_try(ctx) { - v = pdf_new_string(ctx, val, strlen(val)); + v = pdf_new_string(doc, val, strlen(val)); pdf_dict_puts(grp, "V", v); } fz_always(ctx) @@ -2276,7 +2280,7 @@ static int set_text_field_value(pdf_document *doc, pdf_obj *field, char *text) } doc->dirty = 1; - update_field_value(doc->ctx, field, text); + update_field_value(doc, field, text); return 1; } @@ -2302,9 +2306,9 @@ static void update_checkbox_selector(pdf_document *doc, pdf_obj *field, char *va fz_try(ctx) { if (pdf_dict_gets(n, val)) - oval = pdf_new_name(ctx, val); + oval = pdf_new_name(doc, val); else - oval = pdf_new_name(ctx, "Off"); + oval = pdf_new_name(doc, "Off"); pdf_dict_puts(field, "AS", oval); } @@ -2322,7 +2326,7 @@ static void update_checkbox_selector(pdf_document *doc, pdf_obj *field, char *va static int set_checkbox_value(pdf_document *doc, pdf_obj *field, char *val) { update_checkbox_selector(doc, field, val); - update_field_value(doc->ctx, field, val); + update_field_value(doc, field, val); return 1; } @@ -2343,7 +2347,7 @@ int pdf_field_set_value(pdf_document *doc, pdf_obj *field, char *text) default: /* text updater will do in most cases */ - update_field_value(doc->ctx, field, text); + update_field_value(doc, field, text); res = 1; break; } @@ -2375,22 +2379,22 @@ void pdf_field_set_border_style(pdf_document *doc, pdf_obj *field, char *text) pdf_obj *val = NULL; if (!strcmp(text, "Solid")) - val = pdf_new_name(ctx, "S"); + val = pdf_new_name(doc, "S"); else if (!strcmp(text, "Dashed")) - val = pdf_new_name(ctx, "D"); + val = pdf_new_name(doc, "D"); else if (!strcmp(text, "Beveled")) - val = pdf_new_name(ctx, "B"); + val = pdf_new_name(doc, "B"); else if (!strcmp(text, "Inset")) - val = pdf_new_name(ctx, "I"); + val = pdf_new_name(doc, "I"); else if (!strcmp(text, "Underline")) - val = pdf_new_name(ctx, "U"); + val = pdf_new_name(doc, "U"); else return; fz_try(ctx); { pdf_dict_putp(field, "BS/S", val); - pdf_field_mark_dirty(ctx, field); + pdf_field_mark_dirty(doc, field); } fz_always(ctx) { @@ -2405,14 +2409,14 @@ void pdf_field_set_border_style(pdf_document *doc, pdf_obj *field, char *text) void pdf_field_set_button_caption(pdf_document *doc, pdf_obj *field, char *text) { fz_context *ctx = doc->ctx; - pdf_obj *val = pdf_new_string(ctx, text, strlen(text)); + pdf_obj *val = pdf_new_string(doc, text, strlen(text)); fz_try(ctx); { if (pdf_field_type(doc, field) == PDF_WIDGET_TYPE_PUSHBUTTON) { pdf_dict_putp(field, "MK/CA", val); - pdf_field_mark_dirty(ctx, field); + pdf_field_mark_dirty(doc, field); } } fz_always(ctx) @@ -2532,7 +2536,7 @@ void pdf_field_set_display(pdf_document *doc, pdf_obj *field, int d) fz_var(fo); fz_try(ctx) { - fo = pdf_new_int(ctx, f); + fo = pdf_new_int(doc, f); pdf_dict_puts(field, "F", fo); } fz_always(ctx) @@ -2559,7 +2563,7 @@ void pdf_field_set_fill_color(pdf_document *doc, pdf_obj *field, pdf_obj *col) * non-NULL values because pdf_dict_putp interprets a NULL value as * delete */ pdf_dict_putp(field, "MK/BG", col); - pdf_field_mark_dirty(doc->ctx, field); + pdf_field_mark_dirty(doc, field); } void pdf_field_set_text_color(pdf_document *doc, pdf_obj *field, pdf_obj *col) @@ -2591,9 +2595,9 @@ void pdf_field_set_text_color(pdf_document *doc, pdf_obj *field, pdf_obj *col) fzbuf = fz_new_buffer(ctx, 0); fzbuf_print_da(ctx, fzbuf, &di); len = fz_buffer_storage(ctx, fzbuf, &buf); - daobj = pdf_new_string(ctx, (char *)buf, len); + daobj = pdf_new_string(doc, (char *)buf, len); pdf_dict_puts(field, "DA", daobj); - pdf_field_mark_dirty(ctx, field); + pdf_field_mark_dirty(doc, field); } fz_always(ctx) { @@ -2815,11 +2819,11 @@ void pdf_choice_widget_set_value(pdf_document *doc, pdf_widget *tw, int n, char { if (n != 1) { - optarr = pdf_new_array(ctx, n); + optarr = pdf_new_array(doc, n); for (i = 0; i < n; i++) { - opt = pdf_new_string(ctx, opts[i], strlen(opts[i])); + opt = pdf_new_string(doc, opts[i], strlen(opts[i])); pdf_array_push(optarr, opt); pdf_drop_obj(opt); opt = NULL; @@ -2830,7 +2834,7 @@ void pdf_choice_widget_set_value(pdf_document *doc, pdf_widget *tw, int n, char } else { - opt = pdf_new_string(ctx, opts[0], strlen(opts[0])); + opt = pdf_new_string(doc, opts[0], strlen(opts[0])); pdf_dict_puts(annot->obj, "V", opt); pdf_drop_obj(opt); } @@ -2838,7 +2842,7 @@ void pdf_choice_widget_set_value(pdf_document *doc, pdf_widget *tw, int n, char /* FIXME: when n > 1, we should be regenerating the indexes */ pdf_dict_dels(annot->obj, "I"); - pdf_field_mark_dirty(ctx, annot->obj); + pdf_field_mark_dirty(doc, annot->obj); doc->dirty = 1; } fz_catch(ctx) diff --git a/source/pdf/pdf-interpret.c b/source/pdf/pdf-interpret.c index 43a6d466..66a92370 100644 --- a/source/pdf/pdf-interpret.c +++ b/source/pdf/pdf-interpret.c @@ -2835,7 +2835,7 @@ pdf_run_stream(pdf_csi *csi, pdf_obj *rdb, fz_stream *file, pdf_lexbuf *buf) pdf_drop_obj(csi->obj); csi->obj = NULL; } - csi->obj = pdf_new_string(ctx, buf->scratch, buf->len); + csi->obj = pdf_new_string(csi->xref, buf->scratch, buf->len); } break; diff --git a/source/pdf/pdf-nametree.c b/source/pdf/pdf-nametree.c index ea386dda..b67e1931 100644 --- a/source/pdf/pdf-nametree.c +++ b/source/pdf/pdf-nametree.c @@ -149,17 +149,17 @@ pdf_load_name_tree_imp(pdf_obj *dict, pdf_document *xref, pdf_obj *node) } pdf_obj * -pdf_load_name_tree(pdf_document *xref, char *which) +pdf_load_name_tree(pdf_document *doc, char *which) { - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; - pdf_obj *root = pdf_dict_gets(pdf_trailer(xref), "Root"); + pdf_obj *root = pdf_dict_gets(pdf_trailer(doc), "Root"); pdf_obj *names = pdf_dict_gets(root, "Names"); pdf_obj *tree = pdf_dict_gets(names, which); if (pdf_is_dict(tree)) { - pdf_obj *dict = pdf_new_dict(ctx, 100); - pdf_load_name_tree_imp(dict, xref, tree); + pdf_obj *dict = pdf_new_dict(doc, 100); + pdf_load_name_tree_imp(dict, doc, tree); return dict; } return NULL; diff --git a/source/pdf/pdf-object.c b/source/pdf/pdf-object.c index 3d7a6f19..a6b3f1ac 100644 --- a/source/pdf/pdf-object.c +++ b/source/pdf/pdf-object.c @@ -30,7 +30,7 @@ struct pdf_obj_s unsigned short refs; unsigned char kind; unsigned char flags; - fz_context *ctx; + pdf_document *doc; union { int b; @@ -54,17 +54,17 @@ struct pdf_obj_s struct { int num; int gen; - pdf_document *xref; } r; } u; }; pdf_obj * -pdf_new_null(fz_context *ctx) +pdf_new_null(pdf_document *doc) { pdf_obj *obj; + fz_context *ctx = doc->ctx; obj = Memento_label(fz_malloc(ctx, sizeof(pdf_obj)), "pdf_obj(null)"); - obj->ctx = ctx; + obj->doc = doc; obj->refs = 1; obj->kind = PDF_NULL; obj->flags = 0; @@ -72,11 +72,12 @@ pdf_new_null(fz_context *ctx) } pdf_obj * -pdf_new_bool(fz_context *ctx, int b) +pdf_new_bool(pdf_document *doc, int b) { pdf_obj *obj; + fz_context *ctx = doc->ctx; obj = Memento_label(fz_malloc(ctx, sizeof(pdf_obj)), "pdf_obj(bool)"); - obj->ctx = ctx; + obj->doc = doc; obj->refs = 1; obj->kind = PDF_BOOL; obj->flags = 0; @@ -85,11 +86,12 @@ pdf_new_bool(fz_context *ctx, int b) } pdf_obj * -pdf_new_int(fz_context *ctx, int i) +pdf_new_int(pdf_document *doc, int i) { pdf_obj *obj; + fz_context *ctx = doc->ctx; obj = Memento_label(fz_malloc(ctx, sizeof(pdf_obj)), "pdf_obj(int)"); - obj->ctx = ctx; + obj->doc = doc; obj->refs = 1; obj->kind = PDF_INT; obj->flags = 0; @@ -98,11 +100,12 @@ pdf_new_int(fz_context *ctx, int i) } pdf_obj * -pdf_new_real(fz_context *ctx, float f) +pdf_new_real(pdf_document *doc, float f) { pdf_obj *obj; + fz_context *ctx = doc->ctx; obj = Memento_label(fz_malloc(ctx, sizeof(pdf_obj)), "pdf_obj(real)"); - obj->ctx = ctx; + obj->doc = doc; obj->refs = 1; obj->kind = PDF_REAL; obj->flags = 0; @@ -111,11 +114,12 @@ pdf_new_real(fz_context *ctx, float f) } pdf_obj * -pdf_new_string(fz_context *ctx, const char *str, int len) +pdf_new_string(pdf_document *doc, const char *str, int len) { pdf_obj *obj; + fz_context *ctx = doc->ctx; obj = Memento_label(fz_malloc(ctx, offsetof(pdf_obj, u.s.buf) + len + 1), "pdf_obj(string)"); - obj->ctx = ctx; + obj->doc = doc; obj->refs = 1; obj->kind = PDF_STRING; obj->flags = 0; @@ -126,11 +130,12 @@ pdf_new_string(fz_context *ctx, const char *str, int len) } pdf_obj * -pdf_new_name(fz_context *ctx, const char *str) +pdf_new_name(pdf_document *doc, const char *str) { pdf_obj *obj; + fz_context *ctx = doc->ctx; obj = Memento_label(fz_malloc(ctx, offsetof(pdf_obj, u.n) + strlen(str) + 1), "pdf_obj(name)"); - obj->ctx = ctx; + obj->doc = doc; obj->refs = 1; obj->kind = PDF_NAME; obj->flags = 0; @@ -139,17 +144,17 @@ pdf_new_name(fz_context *ctx, const char *str) } pdf_obj * -pdf_new_indirect(fz_context *ctx, int num, int gen, void *xref) +pdf_new_indirect(pdf_document *doc, int num, int gen) { pdf_obj *obj; + fz_context *ctx = doc->ctx; obj = Memento_label(fz_malloc(ctx, sizeof(pdf_obj)), "pdf_obj(indirect)"); - obj->ctx = ctx; + obj->doc = doc; obj->refs = 1; obj->kind = PDF_INDIRECT; obj->flags = 0; obj->u.r.num = num; obj->u.r.gen = gen; - obj->u.r.xref = xref; return obj; } @@ -320,7 +325,7 @@ pdf_document *pdf_get_indirect_document(pdf_obj *obj) { if (!obj || obj->kind != PDF_INDIRECT) return NULL; - return obj->u.r.xref; + return obj->doc; } int @@ -423,13 +428,14 @@ pdf_objkindstr(pdf_obj *obj) } pdf_obj * -pdf_new_array(fz_context *ctx, int initialcap) +pdf_new_array(pdf_document *doc, int initialcap) { pdf_obj *obj; int i; + fz_context *ctx = doc->ctx; obj = Memento_label(fz_malloc(ctx, sizeof(pdf_obj)), "pdf_obj(array)"); - obj->ctx = ctx; + obj->doc = doc; obj->refs = 1; obj->kind = PDF_ARRAY; obj->flags = 0; @@ -458,7 +464,7 @@ pdf_array_grow(pdf_obj *obj) int i; int new_cap = (obj->u.a.cap * 3) / 2; - obj->u.a.items = fz_resize_array(obj->ctx, obj->u.a.items, new_cap, sizeof(pdf_obj*)); + obj->u.a.items = fz_resize_array(obj->doc->ctx, obj->u.a.items, new_cap, sizeof(pdf_obj*)); obj->u.a.cap = new_cap; for (i = obj->u.a.len ; i < obj->u.a.cap; i++) @@ -466,11 +472,12 @@ pdf_array_grow(pdf_obj *obj) } pdf_obj * -pdf_copy_array(fz_context *ctx, pdf_obj *obj) +pdf_copy_array(pdf_obj *obj) { pdf_obj *arr; int i; int n; + fz_context *ctx = obj->doc->ctx; RESOLVE(obj); if (!obj) @@ -478,7 +485,7 @@ pdf_copy_array(fz_context *ctx, pdf_obj *obj) if (obj->kind != PDF_ARRAY) fz_warn(ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); - arr = pdf_new_array(ctx, pdf_array_len(obj)); + arr = pdf_new_array(obj->doc, pdf_array_len(obj)); n = pdf_array_len(obj); for (i = 0; i < n; i++) pdf_array_push(arr, pdf_array_get(obj, i)); @@ -517,11 +524,11 @@ pdf_array_put(pdf_obj *obj, int i, pdf_obj *item) if (!obj) return; /* Can't warn :( */ if (obj->kind != PDF_ARRAY) - fz_warn(obj->ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); + fz_warn(obj->doc->ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); else if (i < 0) - fz_warn(obj->ctx, "assert: index %d < 0", i); + fz_warn(obj->doc->ctx, "assert: index %d < 0", i); else if (i >= obj->u.a.len) - fz_warn(obj->ctx, "assert: index %d > length %d", i, obj->u.a.len); + fz_warn(obj->doc->ctx, "assert: index %d > length %d", i, obj->u.a.len); else { pdf_drop_obj(obj->u.a.items[i]); @@ -537,7 +544,7 @@ pdf_array_push(pdf_obj *obj, pdf_obj *item) if (!obj) return; /* Can't warn :( */ if (obj->kind != PDF_ARRAY) - fz_warn(obj->ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); + fz_warn(obj->doc->ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); else { if (obj->u.a.len + 1 > obj->u.a.cap) @@ -550,7 +557,7 @@ pdf_array_push(pdf_obj *obj, pdf_obj *item) void pdf_array_push_drop(pdf_obj *obj, pdf_obj *item) { - fz_context *ctx = obj->ctx; + fz_context *ctx = obj->doc->ctx; fz_try(ctx) { @@ -574,7 +581,7 @@ pdf_array_insert(pdf_obj *obj, pdf_obj *item) if (!obj) return; /* Can't warn :( */ if (obj->kind != PDF_ARRAY) - fz_warn(obj->ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); + fz_warn(obj->doc->ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); else { if (obj->u.a.len + 1 > obj->u.a.cap) @@ -598,33 +605,34 @@ pdf_array_contains(pdf_obj *arr, pdf_obj *obj) return 0; } -pdf_obj *pdf_new_rect(fz_context *ctx, const fz_rect *rect) +pdf_obj *pdf_new_rect(pdf_document *doc, const fz_rect *rect) { pdf_obj *arr = NULL; pdf_obj *item = NULL; + fz_context *ctx = doc->ctx; fz_var(arr); fz_var(item); fz_try(ctx) { - arr = pdf_new_array(ctx, 4); + arr = pdf_new_array(doc, 4); - item = pdf_new_real(ctx, rect->x0); + item = pdf_new_real(doc, rect->x0); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; - item = pdf_new_real(ctx, rect->y0); + item = pdf_new_real(doc, rect->y0); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; - item = pdf_new_real(ctx, rect->x1); + item = pdf_new_real(doc, rect->x1); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; - item = pdf_new_real(ctx, rect->y1); + item = pdf_new_real(doc, rect->y1); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; @@ -639,43 +647,44 @@ pdf_obj *pdf_new_rect(fz_context *ctx, const fz_rect *rect) return arr; } -pdf_obj *pdf_new_matrix(fz_context *ctx, const fz_matrix *mtx) +pdf_obj *pdf_new_matrix(pdf_document *doc, const fz_matrix *mtx) { pdf_obj *arr = NULL; pdf_obj *item = NULL; + fz_context *ctx = doc->ctx; fz_var(arr); fz_var(item); fz_try(ctx) { - arr = pdf_new_array(ctx, 6); + arr = pdf_new_array(doc, 6); - item = pdf_new_real(ctx, mtx->a); + item = pdf_new_real(doc, mtx->a); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; - item = pdf_new_real(ctx, mtx->b); + item = pdf_new_real(doc, mtx->b); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; - item = pdf_new_real(ctx, mtx->c); + item = pdf_new_real(doc, mtx->c); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; - item = pdf_new_real(ctx, mtx->d); + item = pdf_new_real(doc, mtx->d); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; - item = pdf_new_real(ctx, mtx->e); + item = pdf_new_real(doc, mtx->e); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; - item = pdf_new_real(ctx, mtx->f); + item = pdf_new_real(doc, mtx->f); pdf_array_push(arr, item); pdf_drop_obj(item); item = NULL; @@ -700,13 +709,14 @@ static int keyvalcmp(const void *ap, const void *bp) } pdf_obj * -pdf_new_dict(fz_context *ctx, int initialcap) +pdf_new_dict(pdf_document *doc, int initialcap) { pdf_obj *obj; int i; + fz_context *ctx = doc->ctx; obj = Memento_label(fz_malloc(ctx, sizeof(pdf_obj)), "pdf_obj(dict)"); - obj->ctx = ctx; + obj->doc = doc; obj->refs = 1; obj->kind = PDF_DICT; obj->flags = 0; @@ -738,7 +748,7 @@ pdf_dict_grow(pdf_obj *obj) int i; int new_cap = (obj->u.d.cap * 3) / 2; - obj->u.d.items = fz_resize_array(obj->ctx, obj->u.d.items, new_cap, sizeof(struct keyval)); + obj->u.d.items = fz_resize_array(obj->doc->ctx, obj->u.d.items, new_cap, sizeof(struct keyval)); obj->u.d.cap = new_cap; for (i = obj->u.d.len; i < obj->u.d.cap; i++) @@ -749,19 +759,23 @@ pdf_dict_grow(pdf_obj *obj) } pdf_obj * -pdf_copy_dict(fz_context *ctx, pdf_obj *obj) +pdf_copy_dict(pdf_obj *obj) { pdf_obj *dict; int i, n; + pdf_document *doc; + if (!obj) + return NULL; /* Can't warn :( */ RESOLVE(obj); if (!obj) return NULL; /* Can't warn :( */ + doc = obj->doc; if (obj->kind != PDF_DICT) - fz_warn(ctx, "assert: not a dict (%s)", pdf_objkindstr(obj)); + fz_warn(doc->ctx, "assert: not a dict (%s)", pdf_objkindstr(obj)); n = pdf_dict_len(obj); - dict = pdf_new_dict(ctx, n); + dict = pdf_new_dict(doc, n); for (i = 0; i < n; i++) pdf_dict_put(dict, pdf_dict_get_key(obj, i), pdf_dict_get_val(obj, i)); @@ -871,7 +885,7 @@ pdf_dict_getp(pdf_obj *obj, const char *keys) char *k, *e; if (strlen(keys)+1 > 256) - fz_throw(obj->ctx, FZ_ERROR_GENERIC, "buffer overflow in pdf_dict_getp"); + fz_throw(obj->doc->ctx, FZ_ERROR_GENERIC, "buffer overflow in pdf_dict_getp"); strcpy(buf, keys); @@ -924,14 +938,14 @@ pdf_dict_put(pdf_obj *obj, pdf_obj *key, pdf_obj *val) return; /* Can't warn :( */ if (obj->kind != PDF_DICT) { - fz_warn(obj->ctx, "assert: not a dict (%s)", pdf_objkindstr(obj)); + fz_warn(obj->doc->ctx, "assert: not a dict (%s)", pdf_objkindstr(obj)); return; } RESOLVE(key); if (!key || key->kind != PDF_NAME) { - fz_warn(obj->ctx, "assert: key is not a name (%s)", pdf_objkindstr(obj)); + fz_warn(obj->doc->ctx, "assert: key is not a name (%s)", pdf_objkindstr(obj)); return; } else @@ -939,7 +953,7 @@ pdf_dict_put(pdf_obj *obj, pdf_obj *key, pdf_obj *val) if (!val) { - fz_warn(obj->ctx, "assert: val does not exist for key (%s)", s); + fz_warn(obj->doc->ctx, "assert: val does not exist for key (%s)", s); return; } @@ -975,8 +989,9 @@ pdf_dict_put(pdf_obj *obj, pdf_obj *key, pdf_obj *val) void pdf_dict_puts(pdf_obj *obj, const char *key, pdf_obj *val) { - fz_context *ctx = obj->ctx; - pdf_obj *keyobj = pdf_new_name(ctx, key); + pdf_document *doc = obj->doc; + fz_context *ctx = doc->ctx; + pdf_obj *keyobj = pdf_new_name(doc, key); fz_try(ctx) { @@ -995,14 +1010,15 @@ pdf_dict_puts(pdf_obj *obj, const char *key, pdf_obj *val) void pdf_dict_puts_drop(pdf_obj *obj, const char *key, pdf_obj *val) { - fz_context *ctx = obj->ctx; + pdf_document *doc = obj->doc; + fz_context *ctx = doc->ctx; pdf_obj *keyobj = NULL; fz_var(keyobj); fz_try(ctx) { - keyobj = pdf_new_name(ctx, key); + keyobj = pdf_new_name(doc, key); pdf_dict_put(obj, keyobj, val); } fz_always(ctx) @@ -1019,13 +1035,13 @@ pdf_dict_puts_drop(pdf_obj *obj, const char *key, pdf_obj *val) void pdf_dict_putp(pdf_obj *obj, const char *keys, pdf_obj *val) { - fz_context *ctx = obj->ctx; + fz_context *ctx = obj->doc->ctx; char buf[256]; char *k, *e; pdf_obj *cobj = NULL; if (strlen(keys)+1 > 256) - fz_throw(obj->ctx, FZ_ERROR_GENERIC, "buffer overflow in pdf_dict_getp"); + fz_throw(ctx, FZ_ERROR_GENERIC, "buffer overflow in pdf_dict_getp"); strcpy(buf, keys); @@ -1048,7 +1064,7 @@ pdf_dict_putp(pdf_obj *obj, const char *keys, pdf_obj *val) cobj = pdf_dict_gets(obj, k); if (cobj == NULL) { - cobj = pdf_new_dict(ctx, 1); + cobj = pdf_new_dict(obj->doc, 1); fz_try(ctx) { pdf_dict_puts(obj, k, cobj); @@ -1080,7 +1096,7 @@ pdf_dict_putp(pdf_obj *obj, const char *keys, pdf_obj *val) void pdf_dict_putp_drop(pdf_obj *obj, const char *keys, pdf_obj *val) { - fz_context *ctx = obj->ctx; + fz_context *ctx = obj->doc->ctx; fz_try(ctx) { @@ -1104,7 +1120,7 @@ pdf_dict_dels(pdf_obj *obj, const char *key) if (!obj) return; /* Can't warn :( */ if (obj->kind != PDF_DICT) - fz_warn(obj->ctx, "assert: not a dict (%s)", pdf_objkindstr(obj)); + fz_warn(obj->doc->ctx, "assert: not a dict (%s)", pdf_objkindstr(obj)); else { int i = pdf_dict_finds(obj, key, NULL); @@ -1124,7 +1140,7 @@ pdf_dict_del(pdf_obj *obj, pdf_obj *key) { RESOLVE(key); if (!key || key->kind != PDF_NAME) - fz_warn(obj->ctx, "assert: key is not a name (%s)", pdf_objkindstr(obj)); + fz_warn(obj->doc->ctx, "assert: key is not a name (%s)", pdf_objkindstr(obj)); else pdf_dict_dels(obj, key->u.n); } @@ -1175,27 +1191,29 @@ pdf_obj_unmark(pdf_obj *obj) static void pdf_free_array(pdf_obj *obj) { + fz_context *ctx = obj->doc->ctx; int i; for (i = 0; i < obj->u.a.len; i++) pdf_drop_obj(obj->u.a.items[i]); - fz_free(obj->ctx, obj->u.a.items); - fz_free(obj->ctx, obj); + fz_free(ctx, obj->u.a.items); + fz_free(ctx, obj); } static void pdf_free_dict(pdf_obj *obj) { int i; + fz_context *ctx = obj->doc->ctx; for (i = 0; i < obj->u.d.len; i++) { pdf_drop_obj(obj->u.d.items[i].k); pdf_drop_obj(obj->u.d.items[i].v); } - fz_free(obj->ctx, obj->u.d.items); - fz_free(obj->ctx, obj); + fz_free(ctx, obj->u.d.items); + fz_free(ctx, obj); } void @@ -1210,13 +1228,14 @@ pdf_drop_obj(pdf_obj *obj) else if (obj->kind == PDF_DICT) pdf_free_dict(obj); else - fz_free(obj->ctx, obj); + fz_free(obj->doc->ctx, obj); } -pdf_obj *pdf_new_obj_from_str(fz_context *ctx, const char *src) +pdf_obj *pdf_new_obj_from_str(pdf_document *doc, const char *src) { pdf_obj *result; pdf_lexbuf lexbuf; + fz_context *ctx = doc->ctx; fz_stream *stream = fz_open_memory(ctx, (unsigned char *)src, strlen(src)); pdf_lexbuf_init(ctx, &lexbuf, PDF_LEXBUF_SMALL); @@ -1556,11 +1575,11 @@ pdf_fprint_obj(FILE *fp, pdf_obj *obj, int tight) } else { - ptr = fz_malloc(obj->ctx, n + 1); + ptr = fz_malloc(obj->doc->ctx, n + 1); pdf_sprint_obj(ptr, n + 1, obj, tight); fputs(ptr, fp); fputc('\n', fp); - fz_free(obj->ctx, ptr); + fz_free(obj->doc->ctx, ptr); } return n; } diff --git a/source/pdf/pdf-page.c b/source/pdf/pdf-page.c index 715f773e..6150c3e1 100644 --- a/source/pdf/pdf-page.c +++ b/source/pdf/pdf-page.c @@ -9,11 +9,12 @@ struct info }; static void -put_marker_bool(fz_context *ctx, pdf_obj *rdb, char *marker, int val) +put_marker_bool(pdf_document *doc, pdf_obj *rdb, char *marker, int val) { pdf_obj *tmp; + fz_context *ctx = doc->ctx; - tmp = pdf_new_bool(ctx, val); + tmp = pdf_new_bool(doc, val); fz_try(ctx) { pdf_dict_puts(rdb, marker, tmp); @@ -199,10 +200,10 @@ pdf_lookup_page_number(pdf_document *xref, pdf_obj *page) /* We need to know whether to install a page-level transparency group */ -static int pdf_resources_use_blending(fz_context *ctx, pdf_obj *rdb); +static int pdf_resources_use_blending(pdf_document *doc, pdf_obj *rdb); static int -pdf_extgstate_uses_blending(fz_context *ctx, pdf_obj *dict) +pdf_extgstate_uses_blending(pdf_document *doc, pdf_obj *dict) { pdf_obj *obj = pdf_dict_gets(dict, "BM"); if (pdf_is_name(obj) && strcmp(pdf_to_name(obj), "Normal")) @@ -211,26 +212,27 @@ pdf_extgstate_uses_blending(fz_context *ctx, pdf_obj *dict) } static int -pdf_pattern_uses_blending(fz_context *ctx, pdf_obj *dict) +pdf_pattern_uses_blending(pdf_document *doc, pdf_obj *dict) { pdf_obj *obj; obj = pdf_dict_gets(dict, "Resources"); - if (pdf_resources_use_blending(ctx, obj)) + if (pdf_resources_use_blending(doc, obj)) return 1; obj = pdf_dict_gets(dict, "ExtGState"); - return pdf_extgstate_uses_blending(ctx, obj); + return pdf_extgstate_uses_blending(doc, obj); } static int -pdf_xobject_uses_blending(fz_context *ctx, pdf_obj *dict) +pdf_xobject_uses_blending(pdf_document *doc, pdf_obj *dict) { pdf_obj *obj = pdf_dict_gets(dict, "Resources"); - return pdf_resources_use_blending(ctx, obj); + return pdf_resources_use_blending(doc, obj); } static int -pdf_resources_use_blending(fz_context *ctx, pdf_obj *rdb) +pdf_resources_use_blending(pdf_document *doc, pdf_obj *rdb) { + fz_context *ctx = doc->ctx; pdf_obj *obj; int i, n, useBM = 0; @@ -251,19 +253,19 @@ pdf_resources_use_blending(fz_context *ctx, pdf_obj *rdb) obj = pdf_dict_gets(rdb, "ExtGState"); n = pdf_dict_len(obj); for (i = 0; i < n; i++) - if (pdf_extgstate_uses_blending(ctx, pdf_dict_get_val(obj, i))) + if (pdf_extgstate_uses_blending(doc, pdf_dict_get_val(obj, i))) goto found; obj = pdf_dict_gets(rdb, "Pattern"); n = pdf_dict_len(obj); for (i = 0; i < n; i++) - if (pdf_pattern_uses_blending(ctx, pdf_dict_get_val(obj, i))) + if (pdf_pattern_uses_blending(doc, pdf_dict_get_val(obj, i))) goto found; obj = pdf_dict_gets(rdb, "XObject"); n = pdf_dict_len(obj); for (i = 0; i < n; i++) - if (pdf_xobject_uses_blending(ctx, pdf_dict_get_val(obj, i))) + if (pdf_xobject_uses_blending(doc, pdf_dict_get_val(obj, i))) goto found; if (0) { @@ -280,7 +282,7 @@ found: fz_rethrow(ctx); } - put_marker_bool(ctx, rdb, ".useBM", useBM); + put_marker_bool(doc, rdb, ".useBM", useBM); return useBM; } @@ -331,9 +333,9 @@ pdf_load_transition(pdf_document *xref, pdf_page *page, pdf_obj *transdict) } pdf_page * -pdf_load_page(pdf_document *xref, int number) +pdf_load_page(pdf_document *doc, int number) { - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; pdf_page *page; pdf_annot *annot; pdf_obj *pageobj, *pageref, *obj; @@ -341,12 +343,12 @@ pdf_load_page(pdf_document *xref, int number) float userunit; fz_matrix mat; - pdf_load_page_tree(xref); - if (number < 0 || number >= xref->page_len) + pdf_load_page_tree(doc); + if (number < 0 || number >= doc->page_len) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find page %d", number + 1); - pageobj = xref->page_objs[number]; - pageref = xref->page_refs[number]; + pageobj = doc->page_objs[number]; + pageref = doc->page_refs[number]; page = fz_malloc_struct(ctx, pdf_page); page->resources = NULL; @@ -408,8 +410,8 @@ pdf_load_page(pdf_document *xref, int number) obj = pdf_dict_gets(pageobj, "Annots"); if (obj) { - page->links = pdf_load_link_annots(xref, obj, &page->ctm); - page->annots = pdf_load_annots(xref, obj, page); + page->links = pdf_load_link_annots(doc, obj, &page->ctm); + page->annots = pdf_load_annots(doc, obj, page); } page->duration = pdf_to_real(pdf_dict_gets(pageobj, "Dur")); @@ -418,7 +420,7 @@ pdf_load_page(pdf_document *xref, int number) page->transition_present = (obj != NULL); if (obj) { - pdf_load_transition(xref, page, obj); + pdf_load_transition(doc, page, obj); } page->resources = pdf_dict_gets(pageobj, "Resources"); @@ -430,16 +432,16 @@ pdf_load_page(pdf_document *xref, int number) { page->contents = pdf_keep_obj(obj); - if (pdf_resources_use_blending(ctx, page->resources)) + if (pdf_resources_use_blending(doc, page->resources)) page->transparency = 1; for (annot = page->annots; annot && !page->transparency; annot = annot->next) - if (annot->ap && pdf_resources_use_blending(ctx, annot->ap->resources)) + if (annot->ap && pdf_resources_use_blending(doc, annot->ap->resources)) page->transparency = 1; } fz_catch(ctx) { - pdf_free_page(xref, page); + pdf_free_page(doc, page); fz_rethrow_message(ctx, "cannot load page %d contents (%d 0 R)", number + 1, pdf_to_num(pageref)); } @@ -554,12 +556,12 @@ pdf_insert_page(pdf_document *xref, pdf_page *page, int at) } pdf_page * -pdf_create_page(pdf_document *xref, fz_rect mediabox, int res, int rotate) +pdf_create_page(pdf_document *doc, fz_rect mediabox, int res, int rotate) { pdf_page *page = NULL; pdf_obj *pageobj, *obj; float userunit = 1; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; fz_matrix ctm, tmp; fz_rect realbox; @@ -574,15 +576,15 @@ pdf_create_page(pdf_document *xref, fz_rect mediabox, int res, int rotate) page->transparency = 0; page->links = NULL; page->annots = NULL; - page->me = pageobj = pdf_new_dict(ctx, 4); + page->me = pageobj = pdf_new_dict(doc, 4); - pdf_dict_puts_drop(pageobj, "Type", pdf_new_name(ctx, "Page")); + pdf_dict_puts_drop(pageobj, "Type", pdf_new_name(doc, "Page")); page->mediabox.x0 = fz_min(mediabox.x0, mediabox.x1) * userunit; page->mediabox.y0 = fz_min(mediabox.y0, mediabox.y1) * userunit; page->mediabox.x1 = fz_max(mediabox.x0, mediabox.x1) * userunit; page->mediabox.y1 = fz_max(mediabox.y0, mediabox.y1) * userunit; - pdf_dict_puts_drop(pageobj, "MediaBox", pdf_new_rect(ctx, &page->mediabox)); + pdf_dict_puts_drop(pageobj, "MediaBox", pdf_new_rect(doc, &page->mediabox)); /* Snap page->rotate to 0, 90, 180 or 270 */ if (page->rotate < 0) @@ -592,7 +594,7 @@ pdf_create_page(pdf_document *xref, fz_rect mediabox, int res, int rotate) page->rotate = 90*((page->rotate + 45)/90); if (page->rotate > 360) page->rotate = 0; - pdf_dict_puts_drop(pageobj, "Rotate", pdf_new_int(ctx, page->rotate)); + pdf_dict_puts_drop(pageobj, "Rotate", pdf_new_int(doc, page->rotate)); fz_pre_rotate(fz_scale(&ctm, 1, -1), -page->rotate); realbox = page->mediabox; @@ -600,8 +602,8 @@ pdf_create_page(pdf_document *xref, fz_rect mediabox, int res, int rotate) fz_pre_scale(fz_translate(&tmp, -realbox.x0, -realbox.y0), userunit, userunit); fz_concat(&ctm, &ctm, &tmp); page->ctm = ctm; - obj = pdf_new_dict(ctx, 4); - page->contents = pdf_new_ref(xref, obj); + obj = pdf_new_dict(doc, 4); + page->contents = pdf_new_ref(doc, obj); pdf_drop_obj(obj); obj = NULL; pdf_dict_puts(pageobj, "Contents", page->contents); diff --git a/source/pdf/pdf-parse.c b/source/pdf/pdf-parse.c index 18ab3113..b499fbb7 100644 --- a/source/pdf/pdf-parse.c +++ b/source/pdf/pdf-parse.c @@ -219,16 +219,16 @@ pdf_from_ucs2(pdf_document *xref, unsigned short *src) } pdf_obj * -pdf_to_utf8_name(pdf_document *xref, pdf_obj *src) +pdf_to_utf8_name(pdf_document *doc, pdf_obj *src) { - char *buf = pdf_to_utf8(xref, src); - pdf_obj *dst = pdf_new_name(xref->ctx, buf); - fz_free(xref->ctx, buf); + char *buf = pdf_to_utf8(doc, src); + pdf_obj *dst = pdf_new_name(doc, buf); + fz_free(doc->ctx, buf); return dst; } pdf_obj * -pdf_parse_array(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) +pdf_parse_array(pdf_document *doc, fz_stream *file, pdf_lexbuf *buf) { pdf_obj *ary = NULL; pdf_obj *obj = NULL; @@ -239,7 +239,7 @@ pdf_parse_array(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) fz_var(obj); - ary = pdf_new_array(ctx, 4); + ary = pdf_new_array(doc, 4); fz_try(ctx) { @@ -251,14 +251,14 @@ pdf_parse_array(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) { if (n > 0) { - obj = pdf_new_int(ctx, a); + obj = pdf_new_int(doc, a); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; } if (n > 1) { - obj = pdf_new_int(ctx, b); + obj = pdf_new_int(doc, b); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; @@ -268,7 +268,7 @@ pdf_parse_array(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) if (tok == PDF_TOK_INT && n == 2) { - obj = pdf_new_int(ctx, a); + obj = pdf_new_int(doc, a); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; @@ -293,7 +293,7 @@ pdf_parse_array(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) case PDF_TOK_R: if (n != 2) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot parse indirect reference in array"); - obj = pdf_new_indirect(ctx, a, b, xref); + obj = pdf_new_indirect(doc, a, b); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; @@ -301,51 +301,51 @@ pdf_parse_array(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) break; case PDF_TOK_OPEN_ARRAY: - obj = pdf_parse_array(xref, file, buf); + obj = pdf_parse_array(doc, file, buf); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; break; case PDF_TOK_OPEN_DICT: - obj = pdf_parse_dict(xref, file, buf); + obj = pdf_parse_dict(doc, file, buf); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; break; case PDF_TOK_NAME: - obj = pdf_new_name(ctx, buf->scratch); + obj = pdf_new_name(doc, buf->scratch); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; break; case PDF_TOK_REAL: - obj = pdf_new_real(ctx, buf->f); + obj = pdf_new_real(doc, buf->f); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; break; case PDF_TOK_STRING: - obj = pdf_new_string(ctx, buf->scratch, buf->len); + obj = pdf_new_string(doc, buf->scratch, buf->len); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; break; case PDF_TOK_TRUE: - obj = pdf_new_bool(ctx, 1); + obj = pdf_new_bool(doc, 1); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; break; case PDF_TOK_FALSE: - obj = pdf_new_bool(ctx, 0); + obj = pdf_new_bool(doc, 0); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; break; case PDF_TOK_NULL: - obj = pdf_new_null(ctx); + obj = pdf_new_null(doc); pdf_array_push(ary, obj); pdf_drop_obj(obj); obj = NULL; @@ -368,7 +368,7 @@ end: } pdf_obj * -pdf_parse_dict(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) +pdf_parse_dict(pdf_document *doc, fz_stream *file, pdf_lexbuf *buf) { pdf_obj *dict; pdf_obj *key = NULL; @@ -377,7 +377,7 @@ pdf_parse_dict(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) int a, b; fz_context *ctx = file->ctx; - dict = pdf_new_dict(ctx, 8); + dict = pdf_new_dict(doc, 8); fz_var(key); fz_var(val); @@ -398,26 +398,26 @@ pdf_parse_dict(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) if (tok != PDF_TOK_NAME) fz_throw(ctx, FZ_ERROR_GENERIC, "invalid key in dict"); - key = pdf_new_name(ctx, buf->scratch); + key = pdf_new_name(doc, buf->scratch); tok = pdf_lex(file, buf); switch (tok) { case PDF_TOK_OPEN_ARRAY: - val = pdf_parse_array(xref, file, buf); + val = pdf_parse_array(doc, file, buf); break; case PDF_TOK_OPEN_DICT: - val = pdf_parse_dict(xref, file, buf); + val = pdf_parse_dict(doc, file, buf); break; - case PDF_TOK_NAME: val = pdf_new_name(ctx, buf->scratch); break; - case PDF_TOK_REAL: val = pdf_new_real(ctx, buf->f); break; - case PDF_TOK_STRING: val = pdf_new_string(ctx, buf->scratch, buf->len); break; - case PDF_TOK_TRUE: val = pdf_new_bool(ctx, 1); break; - case PDF_TOK_FALSE: val = pdf_new_bool(ctx, 0); break; - case PDF_TOK_NULL: val = pdf_new_null(ctx); break; + case PDF_TOK_NAME: val = pdf_new_name(doc, buf->scratch); break; + case PDF_TOK_REAL: val = pdf_new_real(doc, buf->f); break; + case PDF_TOK_STRING: val = pdf_new_string(doc, buf->scratch, buf->len); break; + case PDF_TOK_TRUE: val = pdf_new_bool(doc, 1); break; + case PDF_TOK_FALSE: val = pdf_new_bool(doc, 0); break; + case PDF_TOK_NULL: val = pdf_new_null(doc); break; case PDF_TOK_INT: /* 64-bit to allow for numbers > INT_MAX and overflow */ @@ -426,7 +426,7 @@ pdf_parse_dict(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) if (tok == PDF_TOK_CLOSE_DICT || tok == PDF_TOK_NAME || (tok == PDF_TOK_KEYWORD && !strcmp(buf->scratch, "ID"))) { - val = pdf_new_int(ctx, a); + val = pdf_new_int(doc, a); pdf_dict_put(dict, key, val); pdf_drop_obj(val); val = NULL; @@ -440,7 +440,7 @@ pdf_parse_dict(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) tok = pdf_lex(file, buf); if (tok == PDF_TOK_R) { - val = pdf_new_indirect(ctx, a, b, xref); + val = pdf_new_indirect(doc, a, b); break; } } @@ -468,7 +468,7 @@ pdf_parse_dict(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) } pdf_obj * -pdf_parse_stm_obj(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) +pdf_parse_stm_obj(pdf_document *doc, fz_stream *file, pdf_lexbuf *buf) { pdf_token tok; fz_context *ctx = file->ctx; @@ -478,23 +478,23 @@ pdf_parse_stm_obj(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf) switch (tok) { case PDF_TOK_OPEN_ARRAY: - return pdf_parse_array(xref, file, buf); + return pdf_parse_array(doc, file, buf); case PDF_TOK_OPEN_DICT: - return pdf_parse_dict(xref, file, buf); - case PDF_TOK_NAME: return pdf_new_name(ctx, buf->scratch); break; - case PDF_TOK_REAL: return pdf_new_real(ctx, buf->f); break; - case PDF_TOK_STRING: return pdf_new_string(ctx, buf->scratch, buf->len); break; - case PDF_TOK_TRUE: return pdf_new_bool(ctx, 1); break; - case PDF_TOK_FALSE: return pdf_new_bool(ctx, 0); break; - case PDF_TOK_NULL: return pdf_new_null(ctx); break; - case PDF_TOK_INT: return pdf_new_int(ctx, buf->i); break; + return pdf_parse_dict(doc, file, buf); + case PDF_TOK_NAME: return pdf_new_name(doc, buf->scratch); break; + case PDF_TOK_REAL: return pdf_new_real(doc, buf->f); break; + case PDF_TOK_STRING: return pdf_new_string(doc, buf->scratch, buf->len); break; + case PDF_TOK_TRUE: return pdf_new_bool(doc, 1); break; + case PDF_TOK_FALSE: return pdf_new_bool(doc, 0); break; + case PDF_TOK_NULL: return pdf_new_null(doc); break; + case PDF_TOK_INT: return pdf_new_int(doc, buf->i); break; default: fz_throw(ctx, FZ_ERROR_GENERIC, "unknown token in object stream"); } return NULL; /* Stupid MSVC */ } pdf_obj * -pdf_parse_ind_obj(pdf_document *xref, +pdf_parse_ind_obj(pdf_document *doc, fz_stream *file, pdf_lexbuf *buf, int *onum, int *ogen, int *ostmofs) { @@ -525,19 +525,19 @@ pdf_parse_ind_obj(pdf_document *xref, switch (tok) { case PDF_TOK_OPEN_ARRAY: - obj = pdf_parse_array(xref, file, buf); + obj = pdf_parse_array(doc, file, buf); break; case PDF_TOK_OPEN_DICT: - obj = pdf_parse_dict(xref, file, buf); + obj = pdf_parse_dict(doc, file, buf); break; - case PDF_TOK_NAME: obj = pdf_new_name(ctx, buf->scratch); break; - case PDF_TOK_REAL: obj = pdf_new_real(ctx, buf->f); break; - case PDF_TOK_STRING: obj = pdf_new_string(ctx, buf->scratch, buf->len); break; - case PDF_TOK_TRUE: obj = pdf_new_bool(ctx, 1); break; - case PDF_TOK_FALSE: obj = pdf_new_bool(ctx, 0); break; - case PDF_TOK_NULL: obj = pdf_new_null(ctx); break; + case PDF_TOK_NAME: obj = pdf_new_name(doc, buf->scratch); break; + case PDF_TOK_REAL: obj = pdf_new_real(doc, buf->f); break; + case PDF_TOK_STRING: obj = pdf_new_string(doc, buf->scratch, buf->len); break; + case PDF_TOK_TRUE: obj = pdf_new_bool(doc, 1); break; + case PDF_TOK_FALSE: obj = pdf_new_bool(doc, 0); break; + case PDF_TOK_NULL: obj = pdf_new_null(doc); break; case PDF_TOK_INT: a = buf->i; @@ -545,7 +545,7 @@ pdf_parse_ind_obj(pdf_document *xref, if (tok == PDF_TOK_STREAM || tok == PDF_TOK_ENDOBJ) { - obj = pdf_new_int(ctx, a); + obj = pdf_new_int(doc, a); goto skip; } if (tok == PDF_TOK_INT) @@ -554,14 +554,14 @@ pdf_parse_ind_obj(pdf_document *xref, tok = pdf_lex(file, buf); if (tok == PDF_TOK_R) { - obj = pdf_new_indirect(ctx, a, b, xref); + obj = pdf_new_indirect(doc, a, b); break; } } fz_throw(ctx, FZ_ERROR_GENERIC, "expected 'R' keyword (%d %d R)", num, gen); case PDF_TOK_ENDOBJ: - obj = pdf_new_null(ctx); + obj = pdf_new_null(doc); goto skip; default: diff --git a/source/pdf/pdf-repair.c b/source/pdf/pdf-repair.c index 86888089..8d50bb65 100644 --- a/source/pdf/pdf-repair.c +++ b/source/pdf/pdf-repair.c @@ -15,11 +15,12 @@ struct entry }; static int -pdf_repair_obj(fz_stream *file, pdf_lexbuf *buf, int *stmofsp, int *stmlenp, pdf_obj **encrypt, pdf_obj **id, int *tmpofs) +pdf_repair_obj(pdf_document *doc, pdf_lexbuf *buf, int *stmofsp, int *stmlenp, pdf_obj **encrypt, pdf_obj **id, int *tmpofs) { pdf_token tok; int stm_len; int n; + fz_stream *file = doc->file; fz_context *ctx = file->ctx; *stmofsp = 0; @@ -40,7 +41,7 @@ pdf_repair_obj(fz_stream *file, pdf_lexbuf *buf, int *stmofsp, int *stmlenp, pdf /* Send NULL xref so we don't try to resolve references */ fz_try(ctx) { - dict = pdf_parse_dict(NULL, file, buf); + dict = pdf_parse_dict(doc, file, buf); } fz_catch(ctx) { @@ -49,7 +50,7 @@ pdf_repair_obj(fz_stream *file, pdf_lexbuf *buf, int *stmofsp, int *stmlenp, pdf if (file->eof) fz_rethrow_message(ctx, "broken object at EOF ignored"); /* Silently swallow the error */ - dict = pdf_new_dict(ctx, 2); + dict = pdf_new_dict(doc, 2); } obj = pdf_dict_gets(dict, "Type"); @@ -223,7 +224,7 @@ pdf_repair_obj_stm(pdf_document *xref, int num, int gen) /* Entered with file locked, remains locked throughout. */ void -pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) +pdf_repair_xref(pdf_document *doc, pdf_lexbuf *buf) { pdf_obj *dict, *obj = NULL; pdf_obj *length; @@ -245,7 +246,7 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) pdf_token tok; int next; int i, n, c; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; fz_var(encrypt); fz_var(id); @@ -254,9 +255,9 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) fz_var(list); fz_var(obj); - xref->dirty = 1; + doc->dirty = 1; - fz_seek(xref->file, 0, 0); + fz_seek(doc->file, 0, 0); fz_try(ctx) { @@ -266,36 +267,36 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) list = fz_malloc_array(ctx, listcap, sizeof(struct entry)); /* look for '%PDF' version marker within first kilobyte of file */ - n = fz_read(xref->file, (unsigned char *)buf->scratch, fz_mini(buf->size, 1024)); + n = fz_read(doc->file, (unsigned char *)buf->scratch, fz_mini(buf->size, 1024)); if (n < 0) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot read from file"); - fz_seek(xref->file, 0, 0); + fz_seek(doc->file, 0, 0); for (i = 0; i < n - 4; i++) { if (memcmp(&buf->scratch[i], "%PDF", 4) == 0) { - fz_seek(xref->file, i + 8, 0); /* skip "%PDF-X.Y" */ + fz_seek(doc->file, i + 8, 0); /* skip "%PDF-X.Y" */ break; } } /* skip comment line after version marker since some generators * forget to terminate the comment with a newline */ - c = fz_read_byte(xref->file); + c = fz_read_byte(doc->file); while (c >= 0 && (c == ' ' || c == '%')) - c = fz_read_byte(xref->file); - fz_unread_byte(xref->file); + c = fz_read_byte(doc->file); + fz_unread_byte(doc->file); while (1) { - tmpofs = fz_tell(xref->file); + tmpofs = fz_tell(doc->file); if (tmpofs < 0) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot tell in file"); fz_try(ctx) { - tok = pdf_lex(xref->file, buf); + tok = pdf_lex(doc->file, buf); } fz_catch(ctx) { @@ -321,7 +322,7 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) { fz_try(ctx) { - tok = pdf_repair_obj(xref->file, buf, &stm_ofs, &stm_len, &encrypt, &id, &tmpofs); + tok = pdf_repair_obj(doc, buf, &stm_ofs, &stm_len, &encrypt, &id, &tmpofs); } fz_catch(ctx) { @@ -367,7 +368,7 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) { fz_try(ctx) { - dict = pdf_parse_dict(xref, xref->file, buf); + dict = pdf_parse_dict(doc, doc->file, buf); } fz_catch(ctx) { @@ -414,7 +415,7 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) } else if (tok == PDF_TOK_ERROR) - fz_read_byte(xref->file); + fz_read_byte(doc->file); else if (tok == PDF_TOK_EOF) break; @@ -426,11 +427,11 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) Dummy access to entry to assure sufficient space in the xref table and avoid repeated reallocs in the loop */ - (void)pdf_get_populating_xref_entry(xref, maxnum); + (void)pdf_get_populating_xref_entry(doc, maxnum); for (i = 0; i < listlen; i++) { - entry = pdf_get_populating_xref_entry(xref, list[i].num); + entry = pdf_get_populating_xref_entry(doc, list[i].num); entry->type = 'n'; entry->ofs = list[i].ofs; entry->gen = list[i].gen; @@ -440,9 +441,9 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) /* correct stream length for unencrypted documents */ if (!encrypt && list[i].stm_len >= 0) { - dict = pdf_load_object(xref, list[i].num, list[i].gen); + dict = pdf_load_object(doc, list[i].num, list[i].gen); - length = pdf_new_int(ctx, list[i].stm_len); + length = pdf_new_int(doc, list[i].stm_len); pdf_dict_puts(dict, "Length", length); pdf_drop_obj(length); @@ -450,7 +451,7 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) } } - entry = pdf_get_populating_xref_entry(xref, 0); + entry = pdf_get_populating_xref_entry(doc, 0); entry->type = 'f'; entry->ofs = 0; entry->gen = 65535; @@ -458,9 +459,9 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) entry->obj = NULL; next = 0; - for (i = pdf_xref_len(xref) - 1; i >= 0; i--) + for (i = pdf_xref_len(doc) - 1; i >= 0; i--) { - entry = pdf_get_populating_xref_entry(xref, i); + entry = pdf_get_populating_xref_entry(doc, i); if (entry->type == 'f') { entry->ofs = next; @@ -472,26 +473,26 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) /* create a repaired trailer, Root will be added later */ - obj = pdf_new_dict(ctx, 5); + obj = pdf_new_dict(doc, 5); /* During repair there is only a single xref section */ - pdf_set_populating_xref_trailer(xref, obj); + pdf_set_populating_xref_trailer(doc, obj); pdf_drop_obj(obj); obj = NULL; - obj = pdf_new_int(ctx, maxnum + 1); - pdf_dict_puts(pdf_trailer(xref), "Size", obj); + obj = pdf_new_int(doc, maxnum + 1); + pdf_dict_puts(pdf_trailer(doc), "Size", obj); pdf_drop_obj(obj); obj = NULL; if (root) { - pdf_dict_puts(pdf_trailer(xref), "Root", root); + pdf_dict_puts(pdf_trailer(doc), "Root", root); pdf_drop_obj(root); root = NULL; } if (info) { - pdf_dict_puts(pdf_trailer(xref), "Info", info); + pdf_dict_puts(pdf_trailer(doc), "Info", info); pdf_drop_obj(info); info = NULL; } @@ -501,12 +502,12 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) if (pdf_is_indirect(encrypt)) { /* create new reference with non-NULL xref pointer */ - obj = pdf_new_indirect(ctx, pdf_to_num(encrypt), pdf_to_gen(encrypt), xref); + obj = pdf_new_indirect(doc, pdf_to_num(encrypt), pdf_to_gen(encrypt)); pdf_drop_obj(encrypt); encrypt = obj; obj = NULL; } - pdf_dict_puts(pdf_trailer(xref), "Encrypt", encrypt); + pdf_dict_puts(pdf_trailer(doc), "Encrypt", encrypt); pdf_drop_obj(encrypt); encrypt = NULL; } @@ -516,12 +517,12 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf) if (pdf_is_indirect(id)) { /* create new reference with non-NULL xref pointer */ - obj = pdf_new_indirect(ctx, pdf_to_num(id), pdf_to_gen(id), xref); + obj = pdf_new_indirect(doc, pdf_to_num(id), pdf_to_gen(id)); pdf_drop_obj(id); id = obj; obj = NULL; } - pdf_dict_puts(pdf_trailer(xref), "ID", id); + pdf_dict_puts(pdf_trailer(doc), "ID", id); pdf_drop_obj(id); id = NULL; } diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c index e211372b..792ef69c 100644 --- a/source/pdf/pdf-write.c +++ b/source/pdf/pdf-write.c @@ -707,10 +707,10 @@ static void compactxref(pdf_document *xref, pdf_write_options *opts) * removing duplicate objects and compacting the xref. */ -static void renumberobj(pdf_document *xref, pdf_write_options *opts, pdf_obj *obj) +static void renumberobj(pdf_document *doc, pdf_write_options *opts, pdf_obj *obj) { int i; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; if (pdf_is_dict(obj)) { @@ -721,13 +721,13 @@ static void renumberobj(pdf_document *xref, pdf_write_options *opts, pdf_obj *ob pdf_obj *val = pdf_dict_get_val(obj, i); if (pdf_is_indirect(val)) { - val = pdf_new_indirect(ctx, opts->renumber_map[pdf_to_num(val)], 0, xref); + val = pdf_new_indirect(doc, opts->renumber_map[pdf_to_num(val)], 0); pdf_dict_put(obj, key, val); pdf_drop_obj(val); } else { - renumberobj(xref, opts, val); + renumberobj(doc, opts, val); } } } @@ -740,53 +740,53 @@ static void renumberobj(pdf_document *xref, pdf_write_options *opts, pdf_obj *ob pdf_obj *val = pdf_array_get(obj, i); if (pdf_is_indirect(val)) { - val = pdf_new_indirect(ctx, opts->renumber_map[pdf_to_num(val)], 0, xref); + val = pdf_new_indirect(doc, opts->renumber_map[pdf_to_num(val)], 0); pdf_array_put(obj, i, val); pdf_drop_obj(val); } else { - renumberobj(xref, opts, val); + renumberobj(doc, opts, val); } } } } -static void renumberobjs(pdf_document *xref, pdf_write_options *opts) +static void renumberobjs(pdf_document *doc, pdf_write_options *opts) { pdf_xref_entry *newxref = NULL; int newlen; int num; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; int *new_use_list; - int xref_len = pdf_xref_len(xref); + int xref_len = pdf_xref_len(doc); - new_use_list = fz_calloc(ctx, pdf_xref_len(xref)+3, sizeof(int)); + new_use_list = fz_calloc(ctx, pdf_xref_len(doc)+3, sizeof(int)); fz_var(newxref); fz_try(ctx) { /* Apply renumber map to indirect references in all objects in xref */ - renumberobj(xref, opts, pdf_trailer(xref)); + renumberobj(doc, opts, pdf_trailer(doc)); for (num = 0; num < xref_len; num++) { - pdf_obj *obj = pdf_get_xref_entry(xref, num)->obj; + pdf_obj *obj = pdf_get_xref_entry(doc, num)->obj; if (pdf_is_indirect(obj)) { - obj = pdf_new_indirect(ctx, opts->renumber_map[pdf_to_num(obj)], 0, xref); - pdf_update_object(xref, num, obj); + obj = pdf_new_indirect(doc, opts->renumber_map[pdf_to_num(obj)], 0); + pdf_update_object(doc, num, obj); pdf_drop_obj(obj); } else { - renumberobj(xref, opts, obj); + renumberobj(doc, opts, obj); } } /* Create new table for the reordered, compacted xref */ newxref = fz_malloc_array(ctx, xref_len + 3, sizeof(pdf_xref_entry)); - newxref[0] = *pdf_get_xref_entry(xref, 0); + newxref[0] = *pdf_get_xref_entry(doc, 0); /* Move used objects into the new compacted xref */ newlen = 0; @@ -796,16 +796,16 @@ static void renumberobjs(pdf_document *xref, pdf_write_options *opts) { if (newlen < opts->renumber_map[num]) newlen = opts->renumber_map[num]; - newxref[opts->renumber_map[num]] = *pdf_get_xref_entry(xref, num); + newxref[opts->renumber_map[num]] = *pdf_get_xref_entry(doc, num); new_use_list[opts->renumber_map[num]] = opts->use_list[num]; } else { - pdf_drop_obj(pdf_get_xref_entry(xref, num)->obj); + pdf_drop_obj(pdf_get_xref_entry(doc, num)->obj); } } - pdf_replace_xref(xref, newxref, newlen + 1); + pdf_replace_xref(doc, newxref, newlen + 1); newxref = NULL; } fz_catch(ctx) @@ -1044,7 +1044,7 @@ mark_trailer(pdf_document *xref, pdf_write_options *opts, pdf_obj *dict) } static void -add_linearization_objs(pdf_document *xref, pdf_write_options *opts) +add_linearization_objs(pdf_document *doc, pdf_write_options *opts) { pdf_obj *params_obj = NULL; pdf_obj *params_ref = NULL; @@ -1052,7 +1052,7 @@ add_linearization_objs(pdf_document *xref, pdf_write_options *opts) pdf_obj *hint_ref = NULL; pdf_obj *o = NULL; int params_num, hint_num; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; fz_var(params_obj); fz_var(params_ref); @@ -1063,8 +1063,8 @@ add_linearization_objs(pdf_document *xref, pdf_write_options *opts) fz_try(ctx) { /* Linearization params */ - params_obj = pdf_new_dict(ctx, 10); - params_ref = pdf_new_ref(xref, params_obj); + params_obj = pdf_new_dict(doc, 10); + params_ref = pdf_new_ref(doc, params_obj); params_num = pdf_to_num(params_ref); opts->use_list[params_num] = USE_PARAMS; @@ -1072,28 +1072,28 @@ add_linearization_objs(pdf_document *xref, pdf_write_options *opts) opts->rev_renumber_map[params_num] = params_num; opts->gen_list[params_num] = 0; opts->rev_gen_list[params_num] = 0; - pdf_dict_puts_drop(params_obj, "Linearized", pdf_new_real(ctx, 1.0)); - opts->linear_l = pdf_new_int(ctx, INT_MIN); + pdf_dict_puts_drop(params_obj, "Linearized", pdf_new_real(doc, 1.0)); + opts->linear_l = pdf_new_int(doc, INT_MIN); pdf_dict_puts(params_obj, "L", opts->linear_l); - opts->linear_h0 = pdf_new_int(ctx, INT_MIN); - o = pdf_new_array(ctx, 2); + opts->linear_h0 = pdf_new_int(doc, INT_MIN); + o = pdf_new_array(doc, 2); pdf_array_push(o, opts->linear_h0); - opts->linear_h1 = pdf_new_int(ctx, INT_MIN); + opts->linear_h1 = pdf_new_int(doc, INT_MIN); pdf_array_push(o, opts->linear_h1); pdf_dict_puts_drop(params_obj, "H", o); o = NULL; - opts->linear_o = pdf_new_int(ctx, INT_MIN); + opts->linear_o = pdf_new_int(doc, INT_MIN); pdf_dict_puts(params_obj, "O", opts->linear_o); - opts->linear_e = pdf_new_int(ctx, INT_MIN); + opts->linear_e = pdf_new_int(doc, INT_MIN); pdf_dict_puts(params_obj, "E", opts->linear_e); - opts->linear_n = pdf_new_int(ctx, INT_MIN); + opts->linear_n = pdf_new_int(doc, INT_MIN); pdf_dict_puts(params_obj, "N", opts->linear_n); - opts->linear_t = pdf_new_int(ctx, INT_MIN); + opts->linear_t = pdf_new_int(doc, INT_MIN); pdf_dict_puts(params_obj, "T", opts->linear_t); /* Primary hint stream */ - hint_obj = pdf_new_dict(ctx, 10); - hint_ref = pdf_new_ref(xref, hint_obj); + hint_obj = pdf_new_dict(doc, 10); + hint_ref = pdf_new_ref(doc, hint_obj); hint_num = pdf_to_num(hint_ref); opts->use_list[hint_num] = USE_HINTS; @@ -1101,8 +1101,8 @@ add_linearization_objs(pdf_document *xref, pdf_write_options *opts) opts->rev_renumber_map[hint_num] = hint_num; opts->gen_list[hint_num] = 0; opts->rev_gen_list[hint_num] = 0; - pdf_dict_puts_drop(hint_obj, "P", pdf_new_int(ctx, 0)); - opts->hints_s = pdf_new_int(ctx, INT_MIN); + pdf_dict_puts_drop(hint_obj, "P", pdf_new_int(doc, 0)); + opts->hints_s = pdf_new_int(doc, INT_MIN); pdf_dict_puts(hint_obj, "S", opts->hints_s); /* FIXME: Do we have thumbnails? Do a T entry */ /* FIXME: Do we have outlines? Do an O entry */ @@ -1112,10 +1112,10 @@ add_linearization_objs(pdf_document *xref, pdf_write_options *opts) /* FIXME: Do we have document information? Do an I entry */ /* FIXME: Do we have logical structure heirarchy? Do a C entry */ /* FIXME: Do L, Page Label hint table */ - pdf_dict_puts_drop(hint_obj, "Filter", pdf_new_name(ctx, "FlateDecode")); - opts->hints_length = pdf_new_int(ctx, INT_MIN); + pdf_dict_puts_drop(hint_obj, "Filter", pdf_new_name(doc, "FlateDecode")); + opts->hints_length = pdf_new_int(doc, INT_MIN); pdf_dict_puts(hint_obj, "Length", opts->hints_length); - pdf_get_xref_entry(xref, hint_num)->stm_ofs = -1; + pdf_get_xref_entry(doc, hint_num)->stm_ofs = -1; } fz_always(ctx) { @@ -1149,9 +1149,9 @@ lpr_inherit_res_contents(fz_context *ctx, pdf_obj *res, pdf_obj *dict, char *tex { o = pdf_resolve_indirect(o); if (pdf_is_dict(o)) - o = pdf_copy_dict(ctx, o); + o = pdf_copy_dict(o); else if (pdf_is_array(o)) - o = pdf_copy_array(ctx, o); + o = pdf_copy_array(o); else o = NULL; if (o) @@ -1220,11 +1220,12 @@ lpr_inherit(fz_context *ctx, pdf_obj *node, char *text, int depth) } static int -lpr(fz_context *ctx, pdf_obj *node, int depth, int page) +lpr(pdf_document *doc, pdf_obj *node, int depth, int page) { pdf_obj *kids; pdf_obj *o = NULL; int i, n; + fz_context *ctx = doc->ctx; if (pdf_obj_mark(node)) return page; @@ -1241,7 +1242,7 @@ lpr(fz_context *ctx, pdf_obj *node, int depth, int page) o = pdf_keep_obj(pdf_dict_gets(node, "Resources")); if (!o) { - o = pdf_keep_obj(pdf_new_dict(ctx, 2)); + o = pdf_keep_obj(pdf_new_dict(doc, 2)); pdf_dict_puts(node, "Resources", o); } lpr_inherit_res(ctx, node, depth, o); @@ -1271,7 +1272,7 @@ lpr(fz_context *ctx, pdf_obj *node, int depth, int page) n = pdf_array_len(kids); for(i = 0; i < n; i++) { - page = lpr(ctx, pdf_array_get(kids, i), depth+1, page); + page = lpr(doc, pdf_array_get(kids, i), depth+1, page); } pdf_dict_dels(node, "Resources"); pdf_dict_dels(node, "MediaBox"); @@ -1297,16 +1298,16 @@ lpr(fz_context *ctx, pdf_obj *node, int depth, int page) } void -pdf_localise_page_resources(pdf_document *xref) +pdf_localise_page_resources(pdf_document *doc) { - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; - if (xref->resources_localised) + if (doc->resources_localised) return; - lpr(ctx, pdf_dict_getp(pdf_trailer(xref), "Root/Pages"), 0, 0); + lpr(doc, pdf_dict_getp(pdf_trailer(doc), "Root/Pages"), 0, 0); - xref->resources_localised = 1; + doc->resources_localised = 1; } static void @@ -1480,14 +1481,14 @@ static fz_buffer *hexbuf(fz_context *ctx, unsigned char *p, int n) return buf; } -static void addhexfilter(pdf_document *xref, pdf_obj *dict) +static void addhexfilter(pdf_document *doc, pdf_obj *dict) { pdf_obj *f, *dp, *newf, *newdp; pdf_obj *ahx, *nullobj; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; - ahx = pdf_new_name(ctx, "ASCIIHexDecode"); - nullobj = pdf_new_null(ctx); + ahx = pdf_new_name(doc, "ASCIIHexDecode"); + nullobj = pdf_new_null(doc); newf = newdp = NULL; f = pdf_dict_gets(dict, "Filter"); @@ -1495,13 +1496,13 @@ static void addhexfilter(pdf_document *xref, pdf_obj *dict) if (pdf_is_name(f)) { - newf = pdf_new_array(ctx, 2); + newf = pdf_new_array(doc, 2); pdf_array_push(newf, ahx); pdf_array_push(newf, f); f = newf; if (pdf_is_dict(dp)) { - newdp = pdf_new_array(ctx, 2); + newdp = pdf_new_array(doc, 2); pdf_array_push(newdp, nullobj); pdf_array_push(newdp, dp); dp = newdp; @@ -1526,27 +1527,27 @@ static void addhexfilter(pdf_document *xref, pdf_obj *dict) pdf_drop_obj(newdp); } -static void copystream(pdf_document *xref, pdf_write_options *opts, pdf_obj *obj_orig, int num, int gen) +static void copystream(pdf_document *doc, pdf_write_options *opts, pdf_obj *obj_orig, int num, int gen) { fz_buffer *buf, *tmp; pdf_obj *newlen; pdf_obj *obj; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; int orig_num = opts->rev_renumber_map[num]; int orig_gen = opts->rev_gen_list[num]; - buf = pdf_load_raw_renumbered_stream(xref, num, gen, orig_num, orig_gen); + buf = pdf_load_raw_renumbered_stream(doc, num, gen, orig_num, orig_gen); - obj = pdf_copy_dict(ctx, obj_orig); + obj = pdf_copy_dict(obj_orig); if (opts->do_ascii && isbinarystream(buf)) { tmp = hexbuf(ctx, buf->data, buf->len); fz_drop_buffer(ctx, buf); buf = tmp; - addhexfilter(xref, obj); + addhexfilter(doc, obj); - newlen = pdf_new_int(ctx, buf->len); + newlen = pdf_new_int(doc, buf->len); pdf_dict_puts(obj, "Length", newlen); pdf_drop_obj(newlen); } @@ -1561,21 +1562,21 @@ static void copystream(pdf_document *xref, pdf_write_options *opts, pdf_obj *obj pdf_drop_obj(obj); } -static void expandstream(pdf_document *xref, pdf_write_options *opts, pdf_obj *obj_orig, int num, int gen) +static void expandstream(pdf_document *doc, pdf_write_options *opts, pdf_obj *obj_orig, int num, int gen) { fz_buffer *buf, *tmp; pdf_obj *newlen; pdf_obj *obj; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; int orig_num = opts->rev_renumber_map[num]; int orig_gen = opts->rev_gen_list[num]; int truncated = 0; - buf = pdf_load_renumbered_stream(xref, num, gen, orig_num, orig_gen, (opts->continue_on_error ? &truncated : NULL)); + buf = pdf_load_renumbered_stream(doc, num, gen, orig_num, orig_gen, (opts->continue_on_error ? &truncated : NULL)); if (truncated && opts->errors) (*opts->errors)++; - obj = pdf_copy_dict(ctx, obj_orig); + obj = pdf_copy_dict(obj_orig); pdf_dict_dels(obj, "Filter"); pdf_dict_dels(obj, "DecodeParms"); @@ -1585,10 +1586,10 @@ static void expandstream(pdf_document *xref, pdf_write_options *opts, pdf_obj *o fz_drop_buffer(ctx, buf); buf = tmp; - addhexfilter(xref, obj); + addhexfilter(doc, obj); } - newlen = pdf_new_int(ctx, buf->len); + newlen = pdf_new_int(doc, buf->len); pdf_dict_puts(obj, "Length", newlen); pdf_drop_obj(newlen); @@ -1744,13 +1745,13 @@ static void writeobject(pdf_document *xref, pdf_write_options *opts, int num, in pdf_drop_obj(obj); } -static void writexref(pdf_document *xref, pdf_write_options *opts, int from, int to, int first, int main_xref_offset, int startxref) +static void writexref(pdf_document *doc, pdf_write_options *opts, int from, int to, int first, int main_xref_offset, int startxref) { pdf_obj *trailer = NULL; pdf_obj *obj; pdf_obj *nobj = NULL; int num; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; fprintf(opts->out, "xref\n%d %d\n", from, to - from); opts->first_xref_entry_offset = ftell(opts->out); @@ -1768,30 +1769,30 @@ static void writexref(pdf_document *xref, pdf_write_options *opts, int from, int fz_try(ctx) { - trailer = pdf_new_dict(ctx, 5); + trailer = pdf_new_dict(doc, 5); - nobj = pdf_new_int(ctx, to); + nobj = pdf_new_int(doc, to); pdf_dict_puts(trailer, "Size", nobj); pdf_drop_obj(nobj); nobj = NULL; if (first) { - obj = pdf_dict_gets(pdf_trailer(xref), "Info"); + obj = pdf_dict_gets(pdf_trailer(doc), "Info"); if (obj) pdf_dict_puts(trailer, "Info", obj); - obj = pdf_dict_gets(pdf_trailer(xref), "Root"); + obj = pdf_dict_gets(pdf_trailer(doc), "Root"); if (obj) pdf_dict_puts(trailer, "Root", obj); - obj = pdf_dict_gets(pdf_trailer(xref), "ID"); + obj = pdf_dict_gets(pdf_trailer(doc), "ID"); if (obj) pdf_dict_puts(trailer, "ID", obj); } if (main_xref_offset != 0) { - nobj = pdf_new_int(ctx, main_xref_offset); + nobj = pdf_new_int(doc, main_xref_offset); pdf_dict_puts(trailer, "Prev", nobj); pdf_drop_obj(nobj); nobj = NULL; @@ -2369,9 +2370,9 @@ void pdf_write_document(pdf_document *xref, char *filename, fz_write_options *fz #define KIDS_PER_LEVEL 32 static pdf_obj * -make_page_tree_node(pdf_document *xref, int l, int r, pdf_obj *parent_ref, int root) +make_page_tree_node(pdf_document *doc, int l, int r, pdf_obj *parent_ref, int root) { - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; int count_per_kid, spaces; pdf_obj *a = NULL; pdf_obj *me = NULL; @@ -2389,19 +2390,19 @@ make_page_tree_node(pdf_document *xref, int l, int r, pdf_obj *parent_ref, int r fz_try(ctx) { - me = pdf_new_dict(ctx, 2); - pdf_dict_puts_drop(me, "Type", pdf_new_name(ctx, "Pages")); - pdf_dict_puts_drop(me, "Count", pdf_new_int(ctx, r-l)); + me = pdf_new_dict(doc, 2); + pdf_dict_puts_drop(me, "Type", pdf_new_name(doc, "Pages")); + pdf_dict_puts_drop(me, "Count", pdf_new_int(doc, r-l)); if (!root) pdf_dict_puts(me, "Parent", parent_ref); - a = pdf_new_array(ctx, KIDS_PER_LEVEL); - me_ref = pdf_new_ref(xref, me); + a = pdf_new_array(doc, KIDS_PER_LEVEL); + me_ref = pdf_new_ref(doc, me); for (spaces = KIDS_PER_LEVEL; l < r; spaces--) { if (spaces >= r-l) { - o = pdf_keep_obj(xref->page_refs[l++]); + o = pdf_keep_obj(doc->page_refs[l++]); pdf_dict_puts(o, "Parent", me_ref); } else @@ -2409,7 +2410,7 @@ make_page_tree_node(pdf_document *xref, int l, int r, pdf_obj *parent_ref, int r int j = l+count_per_kid; if (j > r) j = r; - o = make_page_tree_node(xref, l, j, me_ref, 0); + o = make_page_tree_node(doc, l, j, me_ref, 0); l = j; } pdf_array_push(a, o); diff --git a/source/pdf/pdf-xobject.c b/source/pdf/pdf-xobject.c index 61fc876a..e85b2f75 100644 --- a/source/pdf/pdf-xobject.c +++ b/source/pdf/pdf-xobject.c @@ -110,7 +110,7 @@ pdf_load_xobject(pdf_document *xref, pdf_obj *dict) } pdf_obj * -pdf_new_xobject(pdf_document *xref, const fz_rect *bbox, const fz_matrix *mat) +pdf_new_xobject(pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat) { int idict_num; pdf_obj *idict = NULL; @@ -119,7 +119,7 @@ pdf_new_xobject(pdf_document *xref, const fz_rect *bbox, const fz_matrix *mat) pdf_obj *obj = NULL; pdf_obj *res = NULL; pdf_obj *procset = NULL; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; fz_var(idict); fz_var(dict); @@ -129,35 +129,35 @@ pdf_new_xobject(pdf_document *xref, const fz_rect *bbox, const fz_matrix *mat) fz_var(procset); fz_try(ctx) { - dict = pdf_new_dict(ctx, 0); + dict = pdf_new_dict(doc, 0); - obj = pdf_new_rect(ctx, bbox); + obj = pdf_new_rect(doc, bbox); pdf_dict_puts(dict, "BBox", obj); pdf_drop_obj(obj); obj = NULL; - obj = pdf_new_int(ctx, 1); + obj = pdf_new_int(doc, 1); pdf_dict_puts(dict, "FormType", obj); pdf_drop_obj(obj); obj = NULL; - obj = pdf_new_int(ctx, 0); + obj = pdf_new_int(doc, 0); pdf_dict_puts(dict, "Length", obj); pdf_drop_obj(obj); obj = NULL; - obj = pdf_new_matrix(ctx, mat); + obj = pdf_new_matrix(doc, mat); pdf_dict_puts(dict, "Matrix", obj); pdf_drop_obj(obj); obj = NULL; - res = pdf_new_dict(ctx, 0); - procset = pdf_new_array(ctx, 2); - obj = pdf_new_name(ctx, "PDF"); + res = pdf_new_dict(doc, 0); + procset = pdf_new_array(doc, 2); + obj = pdf_new_name(doc, "PDF"); pdf_array_push(procset, obj); pdf_drop_obj(obj); obj = NULL; - obj = pdf_new_name(ctx, "Text"); + obj = pdf_new_name(doc, "Text"); pdf_array_push(procset, obj); pdf_drop_obj(obj); obj = NULL; @@ -166,12 +166,12 @@ pdf_new_xobject(pdf_document *xref, const fz_rect *bbox, const fz_matrix *mat) procset = NULL; pdf_dict_puts(dict, "Resources", res); - obj = pdf_new_name(ctx, "Form"); + obj = pdf_new_name(doc, "Form"); pdf_dict_puts(dict, "Subtype", obj); pdf_drop_obj(obj); obj = NULL; - obj = pdf_new_name(ctx, "XObject"); + obj = pdf_new_name(doc, "XObject"); pdf_dict_puts(dict, "Type", obj); pdf_drop_obj(obj); obj = NULL; @@ -195,9 +195,9 @@ pdf_new_xobject(pdf_document *xref, const fz_rect *bbox, const fz_matrix *mat) form->resources = res; res = NULL; - idict_num = pdf_create_object(xref); - pdf_update_object(xref, idict_num, dict); - idict = pdf_new_indirect(ctx, idict_num, 0, xref); + idict_num = pdf_create_object(doc); + pdf_update_object(doc, idict_num, dict); + idict = pdf_new_indirect(doc, idict_num, 0); pdf_drop_obj(dict); dict = NULL; @@ -223,10 +223,10 @@ pdf_new_xobject(pdf_document *xref, const fz_rect *bbox, const fz_matrix *mat) return idict; } -void pdf_update_xobject_contents(pdf_document *xref, pdf_xobject *form, fz_buffer *buffer) +void pdf_update_xobject_contents(pdf_document *doc, pdf_xobject *form, fz_buffer *buffer) { pdf_dict_dels(form->contents, "Filter"); - pdf_dict_puts_drop(form->contents, "Length", pdf_new_int(xref->ctx, buffer->len)); - pdf_update_stream(xref, pdf_to_num(form->contents), buffer); + pdf_dict_puts_drop(form->contents, "Length", pdf_new_int(doc, buffer->len)); + pdf_update_stream(doc, pdf_to_num(form->contents), buffer); form->iteration ++; } diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c index ad771df3..087931bf 100644 --- a/source/pdf/pdf-xref.c +++ b/source/pdf/pdf-xref.c @@ -321,15 +321,15 @@ pdf_xref_size_from_old_trailer(pdf_document *xref, pdf_lexbuf *buf) } pdf_obj * -pdf_new_ref(pdf_document *xref, pdf_obj *obj) +pdf_new_ref(pdf_document *doc, pdf_obj *obj) { - int num = pdf_create_object(xref); - pdf_update_object(xref, num, obj); - return pdf_new_indirect(xref->ctx, num, 0, xref); + int num = pdf_create_object(doc); + pdf_update_object(doc, num, obj); + return pdf_new_indirect(doc, num, 0); } static pdf_obj * -pdf_read_old_xref(pdf_document *xref, pdf_lexbuf *buf) +pdf_read_old_xref(pdf_document *doc, pdf_lexbuf *buf) { int ofs, len; char *s; @@ -338,22 +338,22 @@ pdf_read_old_xref(pdf_document *xref, pdf_lexbuf *buf) int i; int c; pdf_obj *trailer; - int xref_len = pdf_xref_size_from_old_trailer(xref, buf); + int xref_len = pdf_xref_size_from_old_trailer(doc, buf); /* Access last entry to ensure xref size up front and avoid reallocs */ - (void)pdf_get_populating_xref_entry(xref, xref_len - 1); + (void)pdf_get_populating_xref_entry(doc, xref_len - 1); - fz_read_line(xref->file, buf->scratch, buf->size); + fz_read_line(doc->file, buf->scratch, buf->size); if (strncmp(buf->scratch, "xref", 4) != 0) - fz_throw(xref->ctx, FZ_ERROR_GENERIC, "cannot find xref marker"); + fz_throw(doc->ctx, FZ_ERROR_GENERIC, "cannot find xref marker"); while (1) { - c = fz_peek_byte(xref->file); + c = fz_peek_byte(doc->file); if (!(c >= '0' && c <= '9')) break; - fz_read_line(xref->file, buf->scratch, buf->size); + fz_read_line(doc->file, buf->scratch, buf->size); s = buf->scratch; ofs = fz_atoi(fz_strsep(&s, " ")); len = fz_atoi(fz_strsep(&s, " ")); @@ -361,27 +361,27 @@ pdf_read_old_xref(pdf_document *xref, pdf_lexbuf *buf) /* broken pdfs where the section is not on a separate line */ if (s && *s != '\0') { - fz_warn(xref->ctx, "broken xref section. proceeding anyway."); - fz_seek(xref->file, -(2 + (int)strlen(s)), SEEK_CUR); + fz_warn(doc->ctx, "broken xref section. proceeding anyway."); + fz_seek(doc->file, -(2 + (int)strlen(s)), SEEK_CUR); } if (ofs < 0) - fz_throw(xref->ctx, FZ_ERROR_GENERIC, "out of range object num in xref: %d", ofs); + fz_throw(doc->ctx, FZ_ERROR_GENERIC, "out of range object num in xref: %d", ofs); /* broken pdfs where size in trailer undershoots entries in xref sections */ if (ofs + len > xref_len) { - fz_warn(xref->ctx, "broken xref section, proceeding anyway."); + fz_warn(doc->ctx, "broken xref section, proceeding anyway."); /* Access last entry to ensure size */ - (void)pdf_get_populating_xref_entry(xref, ofs + len - 1); + (void)pdf_get_populating_xref_entry(doc, ofs + len - 1); } for (i = ofs; i < ofs + len; i++) { - pdf_xref_entry *entry = pdf_get_populating_xref_entry(xref, i); - n = fz_read(xref->file, (unsigned char *) buf->scratch, 20); + pdf_xref_entry *entry = pdf_get_populating_xref_entry(doc, i); + n = fz_read(doc->file, (unsigned char *) buf->scratch, 20); if (n < 0) - fz_throw(xref->ctx, FZ_ERROR_GENERIC, "cannot read xref table"); + fz_throw(doc->ctx, FZ_ERROR_GENERIC, "cannot read xref table"); if (!entry->type) { s = buf->scratch; @@ -394,26 +394,26 @@ pdf_read_old_xref(pdf_document *xref, pdf_lexbuf *buf) entry->gen = atoi(s + 11); entry->type = s[17]; if (s[17] != 'f' && s[17] != 'n' && s[17] != 'o') - fz_throw(xref->ctx, FZ_ERROR_GENERIC, "unexpected xref type: %#x (%d %d R)", s[17], i, entry->gen); + fz_throw(doc->ctx, FZ_ERROR_GENERIC, "unexpected xref type: %#x (%d %d R)", s[17], i, entry->gen); } } } - fz_try(xref->ctx) + fz_try(doc->ctx) { - tok = pdf_lex(xref->file, buf); + tok = pdf_lex(doc->file, buf); if (tok != PDF_TOK_TRAILER) - fz_throw(xref->ctx, FZ_ERROR_GENERIC, "expected trailer marker"); + fz_throw(doc->ctx, FZ_ERROR_GENERIC, "expected trailer marker"); - tok = pdf_lex(xref->file, buf); + tok = pdf_lex(doc->file, buf); if (tok != PDF_TOK_OPEN_DICT) - fz_throw(xref->ctx, FZ_ERROR_GENERIC, "expected trailer dictionary"); + fz_throw(doc->ctx, FZ_ERROR_GENERIC, "expected trailer dictionary"); - trailer = pdf_parse_dict(xref, xref->file, buf); + trailer = pdf_parse_dict(doc, doc->file, buf); } - fz_catch(xref->ctx) + fz_catch(doc->ctx) { - fz_rethrow_message(xref->ctx, "cannot parse trailer"); + fz_rethrow_message(doc->ctx, "cannot parse trailer"); } return trailer; } @@ -896,9 +896,9 @@ pdf_free_ocg(fz_context *ctx, pdf_ocg_descriptor *desc) */ static void -pdf_init_document(pdf_document *xref) +pdf_init_document(pdf_document *doc) { - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; pdf_obj *encrypt, *id; pdf_obj *dict = NULL; pdf_obj *obj; @@ -910,13 +910,13 @@ pdf_init_document(pdf_document *xref) fz_try(ctx) { - pdf_load_xref(xref, &xref->lexbuf.base); + pdf_load_xref(doc, &doc->lexbuf.base); } fz_catch(ctx) { /* FIXME: TryLater ? */ - pdf_free_xref_sections(xref); - fz_warn(xref->ctx, "trying to repair broken xref"); + pdf_free_xref_sections(doc); + fz_warn(ctx, "trying to repair broken xref"); repaired = 1; } @@ -925,33 +925,33 @@ pdf_init_document(pdf_document *xref) int hasroot, hasinfo; if (repaired) - pdf_repair_xref(xref, &xref->lexbuf.base); + pdf_repair_xref(doc, &doc->lexbuf.base); - encrypt = pdf_dict_gets(pdf_trailer(xref), "Encrypt"); - id = pdf_dict_gets(pdf_trailer(xref), "ID"); + encrypt = pdf_dict_gets(pdf_trailer(doc), "Encrypt"); + id = pdf_dict_gets(pdf_trailer(doc), "ID"); if (pdf_is_dict(encrypt)) - xref->crypt = pdf_new_crypt(ctx, encrypt, id); + doc->crypt = pdf_new_crypt(ctx, encrypt, id); /* Allow lazy clients to read encrypted files with a blank password */ - pdf_authenticate_password(xref, ""); + pdf_authenticate_password(doc, ""); if (repaired) { - int xref_len = pdf_xref_len(xref); - pdf_repair_obj_stms(xref); + int xref_len = pdf_xref_len(doc); + pdf_repair_obj_stms(doc); - hasroot = (pdf_dict_gets(pdf_trailer(xref), "Root") != NULL); - hasinfo = (pdf_dict_gets(pdf_trailer(xref), "Info") != NULL); + hasroot = (pdf_dict_gets(pdf_trailer(doc), "Root") != NULL); + hasinfo = (pdf_dict_gets(pdf_trailer(doc), "Info") != NULL); for (i = 1; i < xref_len; i++) { - pdf_xref_entry *entry = pdf_get_xref_entry(xref, i); + pdf_xref_entry *entry = pdf_get_xref_entry(doc, i); if (entry->type == 0 || entry->type == 'f') continue; fz_try(ctx) { - dict = pdf_load_object(xref, i, 0); + dict = pdf_load_object(doc, i, 0); } fz_catch(ctx) { @@ -965,8 +965,8 @@ pdf_init_document(pdf_document *xref) obj = pdf_dict_gets(dict, "Type"); if (pdf_is_name(obj) && !strcmp(pdf_to_name(obj), "Catalog")) { - nobj = pdf_new_indirect(ctx, i, 0, xref); - pdf_dict_puts(pdf_trailer(xref), "Root", nobj); + nobj = pdf_new_indirect(doc, i, 0); + pdf_dict_puts(pdf_trailer(doc), "Root", nobj); pdf_drop_obj(nobj); nobj = NULL; } @@ -976,8 +976,8 @@ pdf_init_document(pdf_document *xref) { if (pdf_dict_gets(dict, "Creator") || pdf_dict_gets(dict, "Producer")) { - nobj = pdf_new_indirect(ctx, i, 0, xref); - pdf_dict_puts(pdf_trailer(xref), "Info", nobj); + nobj = pdf_new_indirect(doc, i, 0); + pdf_dict_puts(pdf_trailer(doc), "Info", nobj); pdf_drop_obj(nobj); nobj = NULL; } @@ -987,20 +987,20 @@ pdf_init_document(pdf_document *xref) dict = NULL; } } - xref->js = pdf_new_js(xref); - pdf_js_load_document_level(xref->js); + doc->js = pdf_new_js(doc); + pdf_js_load_document_level(doc->js); } fz_catch(ctx) { pdf_drop_obj(dict); pdf_drop_obj(nobj); - pdf_close_document(xref); + pdf_close_document(doc); fz_rethrow_message(ctx, "cannot open document"); } fz_try(ctx) { - pdf_read_ocg(xref); + pdf_read_ocg(doc); } fz_catch(ctx) { @@ -1181,32 +1181,32 @@ pdf_load_obj_stm(pdf_document *xref, int num, int gen, pdf_lexbuf *buf) */ void -pdf_cache_object(pdf_document *xref, int num, int gen) +pdf_cache_object(pdf_document *doc, int num, int gen) { pdf_xref_entry *x; int rnum, rgen; - fz_context *ctx = xref->ctx; + fz_context *ctx = doc->ctx; - if (num < 0 || num >= pdf_xref_len(xref)) - fz_throw(ctx, FZ_ERROR_GENERIC, "object out of range (%d %d R); xref size %d", num, gen, pdf_xref_len(xref)); + if (num < 0 || num >= pdf_xref_len(doc)) + fz_throw(ctx, FZ_ERROR_GENERIC, "object out of range (%d %d R); xref size %d", num, gen, pdf_xref_len(doc)); - x = pdf_get_xref_entry(xref, num); + x = pdf_get_xref_entry(doc, num); if (x->obj) return; if (x->type == 'f') { - x->obj = pdf_new_null(ctx); + x->obj = pdf_new_null(doc); return; } else if (x->type == 'n') { - fz_seek(xref->file, x->ofs, SEEK_SET); + fz_seek(doc->file, x->ofs, SEEK_SET); fz_try(ctx) { - x->obj = pdf_parse_ind_obj(xref, xref->file, &xref->lexbuf.base, + x->obj = pdf_parse_ind_obj(doc, doc->file, &doc->lexbuf.base, &rnum, &rgen, &x->stm_ofs); } fz_catch(ctx) @@ -1221,8 +1221,8 @@ pdf_cache_object(pdf_document *xref, int num, int gen) fz_rethrow_message(ctx, "found object (%d %d R) instead of (%d %d R)", rnum, rgen, num, gen); } - if (xref->crypt) - pdf_crypt_obj(ctx, xref->crypt, x->obj, num, gen); + if (doc->crypt) + pdf_crypt_obj(ctx, doc->crypt, x->obj, num, gen); } else if (x->type == 'o') { @@ -1230,7 +1230,7 @@ pdf_cache_object(pdf_document *xref, int num, int gen) { fz_try(ctx) { - pdf_load_obj_stm(xref, x->ofs, 0, &xref->lexbuf.base); + pdf_load_obj_stm(doc, x->ofs, 0, &doc->lexbuf.base); } fz_catch(ctx) { @@ -1556,7 +1556,7 @@ pdf_document *pdf_specifics(fz_document *doc) pdf_document *pdf_create_document(fz_context *ctx) { - pdf_document *xref; + pdf_document *doc; pdf_obj *o = NULL; pdf_obj *root; pdf_obj *pages; @@ -1565,30 +1565,30 @@ pdf_document *pdf_create_document(fz_context *ctx) fz_var(o); fz_var(trailer); - xref = pdf_new_document(ctx, NULL); + doc = pdf_new_document(ctx, NULL); fz_try(ctx) { - xref->version = 14; - xref->file_size = 0; - xref->startxref = 0; - xref->num_xref_sections = 0; - pdf_get_populating_xref_entry(xref, 0); - xref->xref_altered = 1; - trailer = pdf_new_dict(ctx, 2); - pdf_dict_puts_drop(trailer, "Size", pdf_new_int(ctx, 3)); - o = root = pdf_new_dict(ctx, 2); - pdf_dict_puts_drop(trailer, "Root", pdf_new_ref(xref, o)); + doc->version = 14; + doc->file_size = 0; + doc->startxref = 0; + doc->num_xref_sections = 0; + pdf_get_populating_xref_entry(doc, 0); + doc->xref_altered = 1; + trailer = pdf_new_dict(doc, 2); + pdf_dict_puts_drop(trailer, "Size", pdf_new_int(doc, 3)); + o = root = pdf_new_dict(doc, 2); + pdf_dict_puts_drop(trailer, "Root", pdf_new_ref(doc, o)); pdf_drop_obj(o); o = NULL; - pdf_dict_puts_drop(root, "Type", pdf_new_name(ctx, "Catalog")); - o = pages = pdf_new_dict(ctx, 3); - pdf_dict_puts_drop(root, "Pages", pdf_new_ref(xref, o)); + pdf_dict_puts_drop(root, "Type", pdf_new_name(doc, "Catalog")); + o = pages = pdf_new_dict(doc, 3); + pdf_dict_puts_drop(root, "Pages", pdf_new_ref(doc, o)); pdf_drop_obj(o); o = NULL; - pdf_dict_puts_drop(pages, "Type", pdf_new_name(ctx, "Pages")); - pdf_dict_puts_drop(pages, "Count", pdf_new_int(ctx, 0)); - pdf_dict_puts_drop(pages, "Kids", pdf_new_array(ctx, 1)); - pdf_set_populating_xref_trailer(xref, trailer); + pdf_dict_puts_drop(pages, "Type", pdf_new_name(doc, "Pages")); + pdf_dict_puts_drop(pages, "Count", pdf_new_int(doc, 0)); + pdf_dict_puts_drop(pages, "Kids", pdf_new_array(doc, 1)); + pdf_set_populating_xref_trailer(doc, trailer); } fz_catch(ctx) { @@ -1596,5 +1596,5 @@ pdf_document *pdf_create_document(fz_context *ctx) pdf_drop_obj(o); fz_rethrow_message(ctx, "Failed to create empty document"); } - return xref; + return doc; } |