summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mupdf/pdf/object.h30
-rw-r--r--source/pdf/js/pdf-js.c11
-rw-r--r--source/pdf/pdf-annot.c44
-rw-r--r--source/pdf/pdf-device.c170
-rw-r--r--source/pdf/pdf-form.c96
-rw-r--r--source/pdf/pdf-interpret.c2
-rw-r--r--source/pdf/pdf-nametree.c10
-rw-r--r--source/pdf/pdf-object.c161
-rw-r--r--source/pdf/pdf-page.c70
-rw-r--r--source/pdf/pdf-parse.c106
-rw-r--r--source/pdf/pdf-repair.c71
-rw-r--r--source/pdf/pdf-write.c169
-rw-r--r--source/pdf/pdf-xobject.c38
-rw-r--r--source/pdf/pdf-xref.c166
-rw-r--r--source/tools/pdfclean.c42
-rw-r--r--source/tools/pdfextract.c2
-rw-r--r--source/tools/pdfposter.c52
17 files changed, 638 insertions, 602 deletions
diff --git a/include/mupdf/pdf/object.h b/include/mupdf/pdf/object.h
index 899bb0a7..c1648b9a 100644
--- a/include/mupdf/pdf/object.h
+++ b/include/mupdf/pdf/object.h
@@ -11,21 +11,21 @@ typedef struct pdf_document_s pdf_document;
typedef struct pdf_obj_s pdf_obj;
-pdf_obj *pdf_new_null(fz_context *ctx);
-pdf_obj *pdf_new_bool(fz_context *ctx, int b);
-pdf_obj *pdf_new_int(fz_context *ctx, int i);
-pdf_obj *pdf_new_real(fz_context *ctx, float f);
-pdf_obj *pdf_new_name(fz_context *ctx, const char *str);
-pdf_obj *pdf_new_string(fz_context *ctx, const char *str, int len);
-pdf_obj *pdf_new_indirect(fz_context *ctx, int num, int gen, void *doc);
-pdf_obj *pdf_new_array(fz_context *ctx, int initialcap);
-pdf_obj *pdf_new_dict(fz_context *ctx, int initialcap);
-pdf_obj *pdf_new_rect(fz_context *ctx, const fz_rect *rect);
-pdf_obj *pdf_new_matrix(fz_context *ctx, const fz_matrix *mtx);
-pdf_obj *pdf_copy_array(fz_context *ctx, pdf_obj *array);
-pdf_obj *pdf_copy_dict(fz_context *ctx, pdf_obj *dict);
-
-pdf_obj *pdf_new_obj_from_str(fz_context *ctx, const char *src);
+pdf_obj *pdf_new_null(pdf_document *doc);
+pdf_obj *pdf_new_bool(pdf_document *doc, int b);
+pdf_obj *pdf_new_int(pdf_document *doc, int i);
+pdf_obj *pdf_new_real(pdf_document *doc, float f);
+pdf_obj *pdf_new_name(pdf_document *doc, const char *str);
+pdf_obj *pdf_new_string(pdf_document *doc, const char *str, int len);
+pdf_obj *pdf_new_indirect(pdf_document *doc, int num, int gen);
+pdf_obj *pdf_new_array(pdf_document *doc, int initialcap);
+pdf_obj *pdf_new_dict(pdf_document *doc, int initialcap);
+pdf_obj *pdf_new_rect(pdf_document *doc, const fz_rect *rect);
+pdf_obj *pdf_new_matrix(pdf_document *doc, const fz_matrix *mtx);
+pdf_obj *pdf_copy_array(pdf_obj *array);
+pdf_obj *pdf_copy_dict(pdf_obj *dict);
+
+pdf_obj *pdf_new_obj_from_str(pdf_document *doc, const char *src);
pdf_obj *pdf_keep_obj(pdf_obj *obj);
void pdf_drop_obj(pdf_obj *obj);
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;
}
diff --git a/source/tools/pdfclean.c b/source/tools/pdfclean.c
index c437b819..aac3a888 100644
--- a/source/tools/pdfclean.c
+++ b/source/tools/pdfclean.c
@@ -11,7 +11,7 @@
#include "mupdf/pdf.h"
-static pdf_document *xref = NULL;
+static pdf_document *doc = NULL;
static fz_context *ctx = NULL;
static void usage(void)
@@ -41,21 +41,21 @@ static void retainpages(int argc, char **argv)
/* Keep only pages/type and (reduced) dest entries to avoid
* references to unretained pages */
- oldroot = pdf_dict_gets(pdf_trailer(xref), "Root");
+ oldroot = pdf_dict_gets(pdf_trailer(doc), "Root");
pages = pdf_dict_gets(oldroot, "Pages");
- olddests = pdf_load_name_tree(xref, "Dests");
+ olddests = pdf_load_name_tree(doc, "Dests");
- root = pdf_new_dict(ctx, 2);
+ root = pdf_new_dict(doc, 2);
pdf_dict_puts(root, "Type", pdf_dict_gets(oldroot, "Type"));
pdf_dict_puts(root, "Pages", pdf_dict_gets(oldroot, "Pages"));
- pdf_update_object(xref, pdf_to_num(oldroot), root);
+ pdf_update_object(doc, pdf_to_num(oldroot), root);
pdf_drop_obj(root);
/* Create a new kids array with only the pages we want to keep */
- parent = pdf_new_indirect(ctx, pdf_to_num(pages), pdf_to_gen(pages), xref);
- kids = pdf_new_array(ctx, 1);
+ parent = pdf_new_indirect(doc, pdf_to_num(pages), pdf_to_gen(pages));
+ kids = pdf_new_array(doc, 1);
/* Retain pages specified */
while (argc - fz_optind)
@@ -64,7 +64,7 @@ static void retainpages(int argc, char **argv)
char *spec, *dash;
char *pagelist = argv[fz_optind];
- pagecount = pdf_count_pages(xref);
+ pagecount = pdf_count_pages(doc);
spec = fz_strsep(&pagelist, ",");
while (spec)
{
@@ -91,8 +91,8 @@ static void retainpages(int argc, char **argv)
for (page = spage; page <= epage; page++)
{
- pdf_obj *pageobj = xref->page_objs[page-1];
- pdf_obj *pageref = xref->page_refs[page-1];
+ pdf_obj *pageobj = doc->page_objs[page-1];
+ pdf_obj *pageref = doc->page_refs[page-1];
pdf_dict_puts(pageobj, "Parent", parent);
@@ -109,7 +109,7 @@ static void retainpages(int argc, char **argv)
pdf_drop_obj(parent);
/* Update page count and kids array */
- countobj = pdf_new_int(ctx, pdf_array_len(kids));
+ countobj = pdf_new_int(doc, pdf_array_len(kids));
pdf_dict_puts(pages, "Count", countobj);
pdf_drop_obj(countobj);
pdf_dict_puts(pages, "Kids", kids);
@@ -119,16 +119,16 @@ static void retainpages(int argc, char **argv)
if (olddests)
{
int i;
- pdf_obj *names = pdf_new_dict(ctx, 1);
- pdf_obj *dests = pdf_new_dict(ctx, 1);
- pdf_obj *names_list = pdf_new_array(ctx, 32);
+ pdf_obj *names = pdf_new_dict(doc, 1);
+ pdf_obj *dests = pdf_new_dict(doc, 1);
+ pdf_obj *names_list = pdf_new_array(doc, 32);
int len = pdf_dict_len(olddests);
for (i = 0; i < len; i++)
{
pdf_obj *key = pdf_dict_get_key(olddests, i);
pdf_obj *val = pdf_dict_get_val(olddests, i);
- pdf_obj *key_str = pdf_new_string(ctx, pdf_to_name(key), strlen(pdf_to_name(key)));
+ pdf_obj *key_str = pdf_new_string(doc, pdf_to_name(key), strlen(pdf_to_name(key)));
pdf_obj *dest = pdf_dict_gets(val, "D");
dest = pdf_array_get(dest ? dest : val, 0);
@@ -140,7 +140,7 @@ static void retainpages(int argc, char **argv)
pdf_drop_obj(key_str);
}
- root = pdf_dict_gets(pdf_trailer(xref), "Root");
+ root = pdf_dict_gets(pdf_trailer(doc), "Root");
pdf_dict_puts(dests, "Names", names_list);
pdf_dict_puts(names, "Dests", dests);
pdf_dict_puts(root, "Names", names);
@@ -209,20 +209,20 @@ int pdfclean_main(int argc, char **argv)
fz_try(ctx)
{
- xref = pdf_open_document_no_run(ctx, infile);
- if (pdf_needs_password(xref))
- if (!pdf_authenticate_password(xref, password))
+ doc = pdf_open_document_no_run(ctx, infile);
+ if (pdf_needs_password(doc))
+ if (!pdf_authenticate_password(doc, password))
fz_throw(ctx, FZ_ERROR_GENERIC, "cannot authenticate password: %s", infile);
/* Only retain the specified subset of the pages */
if (subset)
retainpages(argc, argv);
- pdf_write_document(xref, outfile, &opts);
+ pdf_write_document(doc, outfile, &opts);
}
fz_always(ctx)
{
- pdf_close_document(xref);
+ pdf_close_document(doc);
}
fz_catch(ctx)
{
diff --git a/source/tools/pdfextract.c b/source/tools/pdfextract.c
index e7418224..30a0de3f 100644
--- a/source/tools/pdfextract.c
+++ b/source/tools/pdfextract.c
@@ -67,7 +67,7 @@ static void saveimage(int num)
pdf_obj *ref;
char name[32];
- ref = pdf_new_indirect(ctx, num, 0, doc);
+ ref = pdf_new_indirect(doc, num, 0);
/* TODO: detect DCTD and save as jpeg */
diff --git a/source/tools/pdfposter.c b/source/tools/pdfposter.c
index ed3a4bda..603b3ac6 100644
--- a/source/tools/pdfposter.c
+++ b/source/tools/pdfposter.c
@@ -28,34 +28,34 @@ static void usage(void)
* Recreate page tree to only retain specified pages.
*/
-static void decimatepages(pdf_document *xref)
+static void decimatepages(pdf_document *doc)
{
pdf_obj *oldroot, *root, *pages, *kids, *parent;
- fz_context *ctx = xref->ctx;
- int num_pages = pdf_count_pages(xref);
+ fz_context *ctx = doc->ctx;
+ int num_pages = pdf_count_pages(doc);
int page, kidcount;
/* Keep only pages/type and (reduced) dest entries to avoid
* references to unretained pages */
- oldroot = pdf_dict_gets(pdf_trailer(xref), "Root");
+ oldroot = pdf_dict_gets(pdf_trailer(doc), "Root");
pages = pdf_dict_gets(oldroot, "Pages");
- root = pdf_new_dict(ctx, 2);
+ root = pdf_new_dict(doc, 2);
pdf_dict_puts(root, "Type", pdf_dict_gets(oldroot, "Type"));
pdf_dict_puts(root, "Pages", pdf_dict_gets(oldroot, "Pages"));
- pdf_update_object(xref, pdf_to_num(oldroot), root);
+ pdf_update_object(doc, pdf_to_num(oldroot), root);
pdf_drop_obj(root);
/* Create a new kids array with only the pages we want to keep */
- parent = pdf_new_indirect(ctx, pdf_to_num(pages), pdf_to_gen(pages), xref);
- kids = pdf_new_array(ctx, 1);
+ parent = pdf_new_indirect(doc, pdf_to_num(pages), pdf_to_gen(pages));
+ kids = pdf_new_array(doc, 1);
kidcount = 0;
for (page=0; page < num_pages; page++)
{
- pdf_page *page_details = pdf_load_page(xref, page);
+ pdf_page *page_details = pdf_load_page(doc, page);
int xf = x_factor, yf = y_factor;
int x, y;
float w = page_details->mediabox.x1 - page_details->mediabox.x0;
@@ -82,12 +82,12 @@ static void decimatepages(pdf_document *xref)
fz_rect mb;
int num;
- newpageobj = pdf_copy_dict(ctx, xref->page_objs[page]);
- num = pdf_create_object(xref);
- pdf_update_object(xref, num, newpageobj);
- newpageref = pdf_new_indirect(ctx, num, 0, xref);
+ newpageobj = pdf_copy_dict(doc->page_objs[page]);
+ num = pdf_create_object(doc);
+ pdf_update_object(doc, num, newpageobj);
+ newpageref = pdf_new_indirect(doc, num, 0);
- newmediabox = pdf_new_array(ctx, 4);
+ newmediabox = pdf_new_array(doc, 4);
mb.x0 = page_details->mediabox.x0 + (w/xf)*x;
if (x == xf-1)
@@ -100,10 +100,10 @@ static void decimatepages(pdf_document *xref)
else
mb.y1 = page_details->mediabox.y0 + (h/yf)*(y+1);
- pdf_array_push(newmediabox, pdf_new_real(ctx, mb.x0));
- pdf_array_push(newmediabox, pdf_new_real(ctx, mb.y0));
- pdf_array_push(newmediabox, pdf_new_real(ctx, mb.x1));
- pdf_array_push(newmediabox, pdf_new_real(ctx, mb.y1));
+ pdf_array_push(newmediabox, pdf_new_real(doc, mb.x0));
+ pdf_array_push(newmediabox, pdf_new_real(doc, mb.y0));
+ pdf_array_push(newmediabox, pdf_new_real(doc, mb.x1));
+ pdf_array_push(newmediabox, pdf_new_real(doc, mb.y1));
pdf_dict_puts(newpageobj, "Parent", parent);
pdf_dict_puts(newpageobj, "MediaBox", newmediabox);
@@ -119,7 +119,7 @@ static void decimatepages(pdf_document *xref)
pdf_drop_obj(parent);
/* Update page count and kids array */
- pdf_dict_puts(pages, "Count", pdf_new_int(ctx, kidcount));
+ pdf_dict_puts(pages, "Count", pdf_new_int(doc, kidcount));
pdf_dict_puts(pages, "Kids", kids);
pdf_drop_obj(kids);
}
@@ -131,7 +131,7 @@ int pdfposter_main(int argc, char **argv)
char *password = "";
int c;
fz_write_options opts;
- pdf_document *xref;
+ pdf_document *doc;
fz_context *ctx;
opts.do_garbage = 0;
@@ -167,17 +167,17 @@ int pdfposter_main(int argc, char **argv)
exit(1);
}
- xref = pdf_open_document_no_run(ctx, infile);
- if (pdf_needs_password(xref))
- if (!pdf_authenticate_password(xref, password))
+ doc = pdf_open_document_no_run(ctx, infile);
+ if (pdf_needs_password(doc))
+ if (!pdf_authenticate_password(doc, password))
fz_throw(ctx, FZ_ERROR_GENERIC, "cannot authenticate password: %s", infile);
/* Only retain the specified subset of the pages */
- decimatepages(xref);
+ decimatepages(doc);
- pdf_write_document(xref, outfile, &opts);
+ pdf_write_document(doc, outfile, &opts);
- pdf_close_document(xref);
+ pdf_close_document(doc);
fz_free_context(ctx);
return 0;
}