summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-clean.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/pdf/pdf-clean.c')
-rw-r--r--source/pdf/pdf-clean.c159
1 files changed, 78 insertions, 81 deletions
diff --git a/source/pdf/pdf-clean.c b/source/pdf/pdf-clean.c
index 51a8b6de..89926832 100644
--- a/source/pdf/pdf-clean.c
+++ b/source/pdf/pdf-clean.c
@@ -1,9 +1,8 @@
#include "pdf-interpret-imp.h"
static void
-pdf_clean_stream_object(pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_cookie *cookie, int own_res)
+pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_cookie *cookie, int own_res)
{
- fz_context *ctx = doc->ctx;
pdf_process process, process2;
fz_buffer *buffer;
int num;
@@ -22,33 +21,33 @@ pdf_clean_stream_object(pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_c
{
if (own_res)
{
- pdf_obj *r = pdf_dict_gets(obj, "Resources");
+ pdf_obj *r = pdf_dict_gets(ctx, obj, "Resources");
if (r)
orig_res = r;
}
- res = pdf_new_dict(doc, 1);
+ res = pdf_new_dict(ctx, doc, 1);
- pdf_process_buffer(&process2, ctx, buffer);
- pdf_process_filter(&process, ctx, &process2, res);
+ pdf_init_process_buffer(ctx, &process2, buffer);
+ pdf_init_process_filter(ctx, &process, &process2, res);
- pdf_process_stream_object(doc, obj, &process, orig_res, cookie);
+ pdf_process_stream_object(ctx, doc, obj, &process, orig_res, cookie);
- num = pdf_to_num(obj);
- pdf_dict_dels(obj, "Filter");
- pdf_update_stream(doc, num, buffer);
+ num = pdf_to_num(ctx, obj);
+ pdf_dict_dels(ctx, obj, "Filter");
+ pdf_update_stream(ctx, doc, num, buffer);
if (own_res)
{
- ref = pdf_new_ref(doc, res);
- pdf_dict_puts(obj, "Resources", ref);
+ ref = pdf_new_ref(ctx, doc, res);
+ pdf_dict_puts(ctx, obj, "Resources", ref);
}
}
fz_always(ctx)
{
fz_drop_buffer(ctx, buffer);
- pdf_drop_obj(res);
- pdf_drop_obj(ref);
+ pdf_drop_obj(ctx, res);
+ pdf_drop_obj(ctx, ref);
}
fz_catch(ctx)
{
@@ -57,9 +56,8 @@ pdf_clean_stream_object(pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_c
}
static void
-pdf_clean_type3(pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_cookie *cookie)
+pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_cookie *cookie)
{
- fz_context *ctx = doc->ctx;
pdf_process process, process2;
fz_buffer *buffer;
int num, i, l;
@@ -72,46 +70,46 @@ pdf_clean_type3(pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_cookie *c
fz_try(ctx)
{
- res = pdf_dict_gets(obj, "Resources");
+ res = pdf_dict_gets(ctx, obj, "Resources");
if (res)
orig_res = res;
res = NULL;
- res = pdf_new_dict(doc, 1);
+ res = pdf_new_dict(ctx, doc, 1);
- charprocs = pdf_dict_gets(obj, "CharProcs");
- l = pdf_dict_len(charprocs);
+ charprocs = pdf_dict_gets(ctx, obj, "CharProcs");
+ l = pdf_dict_len(ctx, charprocs);
for (i = 0; i < l; i++)
{
- pdf_obj *key = pdf_dict_get_key(charprocs, i);
- pdf_obj *val = pdf_dict_get_val(charprocs, i);
+ pdf_obj *key = pdf_dict_get_key(ctx, charprocs, i);
+ pdf_obj *val = pdf_dict_get_val(ctx, charprocs, i);
buffer = fz_new_buffer(ctx, 1024);
- pdf_process_buffer(&process2, ctx, buffer);
- pdf_process_filter(&process, ctx, &process2, res);
+ pdf_init_process_buffer(ctx, &process2, buffer);
+ pdf_init_process_filter(ctx, &process, &process2, res);
- pdf_process_stream_object(doc, val, &process, orig_res, cookie);
+ pdf_process_stream_object(ctx, doc, val, &process, orig_res, cookie);
- num = pdf_to_num(val);
- pdf_dict_dels(val, "Filter");
- pdf_update_stream(doc, num, buffer);
- pdf_dict_put(charprocs, key, val);
+ num = pdf_to_num(ctx, val);
+ pdf_dict_dels(ctx, val, "Filter");
+ pdf_update_stream(ctx, doc, num, buffer);
+ pdf_dict_put(ctx, charprocs, key, val);
fz_drop_buffer(ctx, buffer);
buffer = NULL;
}
/* ProcSet - no cleaning possible. Inherit this from the old dict. */
- pdf_dict_puts(res, "ProcSet", pdf_dict_gets(orig_res, "ProcSet"));
+ pdf_dict_puts(ctx, res, "ProcSet", pdf_dict_gets(ctx, orig_res, "ProcSet"));
- ref = pdf_new_ref(doc, res);
- pdf_dict_puts(obj, "Resources", ref);
+ ref = pdf_new_ref(ctx, doc, res);
+ pdf_dict_puts(ctx, obj, "Resources", ref);
}
fz_always(ctx)
{
fz_drop_buffer(ctx, buffer);
- pdf_drop_obj(res);
- pdf_drop_obj(ref);
+ pdf_drop_obj(ctx, res);
+ pdf_drop_obj(ctx, ref);
}
fz_catch(ctx)
{
@@ -119,9 +117,8 @@ pdf_clean_type3(pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_cookie *c
}
}
-void pdf_clean_page_contents(pdf_document *doc, pdf_page *page, fz_cookie *cookie)
+void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, fz_cookie *cookie)
{
- fz_context *ctx = doc->ctx;
pdf_process process, process2;
fz_buffer *buffer = fz_new_buffer(ctx, 1024);
int num;
@@ -139,37 +136,37 @@ void pdf_clean_page_contents(pdf_document *doc, pdf_page *page, fz_cookie *cooki
fz_try(ctx)
{
- res = pdf_new_dict(doc, 1);
+ res = pdf_new_dict(ctx, doc, 1);
- pdf_process_buffer(&process2, ctx, buffer);
- pdf_process_filter(&process, ctx, &process2, res);
+ pdf_init_process_buffer(ctx, &process2, buffer);
+ pdf_init_process_filter(ctx, &process, &process2, res);
- pdf_process_stream_object(doc, page->contents, &process, page->resources, cookie);
+ pdf_process_stream_object(ctx, doc, page->contents, &process, page->resources, cookie);
contents = page->contents;
- if (pdf_is_array(contents))
+ if (pdf_is_array(ctx, contents))
{
- int n = pdf_array_len(contents);
+ int n = pdf_array_len(ctx, contents);
int i;
for (i = n-1; i > 0; i--)
- pdf_array_delete(contents, i);
+ pdf_array_delete(ctx, contents, i);
/* We cannot rewrite the 0th entry of contents
* directly as it may occur in other pages content
* dictionaries too. We therefore clone it and make
* a new object reference. */
- new_obj = pdf_copy_dict(pdf_array_get(contents, 0));
- new_ref = pdf_new_ref(doc, new_obj);
- num = pdf_to_num(new_ref);
- pdf_array_put(contents, 0, new_ref);
- pdf_dict_dels(new_obj, "Filter");
+ new_obj = pdf_copy_dict(ctx, pdf_array_get(ctx, contents, 0));
+ new_ref = pdf_new_ref(ctx, doc, new_obj);
+ num = pdf_to_num(ctx, new_ref);
+ pdf_array_put(ctx, contents, 0, new_ref);
+ pdf_dict_dels(ctx, new_obj, "Filter");
}
else
{
- num = pdf_to_num(contents);
- pdf_dict_dels(contents, "Filter");
+ num = pdf_to_num(ctx, contents);
+ pdf_dict_dels(ctx, contents, "Filter");
}
- pdf_update_stream(doc, num, buffer);
+ pdf_update_stream(ctx, doc, num, buffer);
/* Now deal with resources. The spec allows for Type3 fonts and form
* XObjects to omit a resource dictionary and look in the parent.
@@ -177,104 +174,104 @@ void pdf_clean_page_contents(pdf_document *doc, pdf_page *page, fz_cookie *cooki
* conceivably cause changes in rendering, but we don't care. */
/* ExtGState */
- obj = pdf_dict_gets(res, "ExtGState");
+ obj = pdf_dict_gets(ctx, res, "ExtGState");
if (obj)
{
int i, l;
- l = pdf_dict_len(obj);
+ l = pdf_dict_len(ctx, obj);
for (i = 0; i < l; i++)
{
- pdf_obj *o = pdf_dict_gets(pdf_dict_get_val(obj, i), "SMask");
+ pdf_obj *o = pdf_dict_gets(ctx, pdf_dict_get_val(ctx, obj, i), "SMask");
if (!o)
continue;
- o = pdf_dict_gets(o, "G");
+ o = pdf_dict_gets(ctx, o, "G");
if (!o)
continue;
/* Transparency group XObject */
- pdf_clean_stream_object(doc, o, page->resources, cookie, 1);
+ pdf_clean_stream_object(ctx, doc, o, page->resources, cookie, 1);
}
}
/* ColorSpace - no cleaning possible */
/* Pattern */
- obj = pdf_dict_gets(res, "Pattern");
+ obj = pdf_dict_gets(ctx, res, "Pattern");
if (obj)
{
int i, l;
- l = pdf_dict_len(obj);
+ l = pdf_dict_len(ctx, obj);
for (i = 0; i < l; i++)
{
- pdf_obj *pat = pdf_dict_get_val(obj, i);
+ pdf_obj *pat = pdf_dict_get_val(ctx, obj, i);
if (!pat)
continue;
- if (pdf_to_int(pdf_dict_gets(pat, "PatternType")) == 1)
- pdf_clean_stream_object(doc, pat, page->resources, cookie, 0);
+ if (pdf_to_int(ctx, pdf_dict_gets(ctx, pat, "PatternType")) == 1)
+ pdf_clean_stream_object(ctx, doc, pat, page->resources, cookie, 0);
}
}
/* Shading - no cleaning possible */
/* XObject */
- obj = pdf_dict_gets(res, "XObject");
+ obj = pdf_dict_gets(ctx, res, "XObject");
if (obj)
{
int i, l;
- l = pdf_dict_len(obj);
+ l = pdf_dict_len(ctx, obj);
for (i = 0; i < l; i++)
{
- pdf_obj *xobj = pdf_dict_get_val(obj, i);
+ pdf_obj *xobj = pdf_dict_get_val(ctx, obj, i);
- if (strcmp(pdf_to_name(pdf_dict_gets(xobj, "Subtype")), "Form"))
+ if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, xobj, "Subtype")), "Form"))
continue;
- pdf_clean_stream_object(doc, xobj, page->resources, cookie, 1);
+ pdf_clean_stream_object(ctx, doc, xobj, page->resources, cookie, 1);
}
}
/* Font */
- obj = pdf_dict_gets(res, "Font");
+ obj = pdf_dict_gets(ctx, res, "Font");
if (obj)
{
int i, l;
- l = pdf_dict_len(obj);
+ l = pdf_dict_len(ctx, obj);
for (i = 0; i < l; i++)
{
- pdf_obj *o = pdf_dict_get_val(obj, i);
+ pdf_obj *o = pdf_dict_get_val(ctx, obj, i);
- if (!strcmp(pdf_to_name(pdf_dict_gets(o, "Subtype")), "Type3"))
+ if (!strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, o, "Subtype")), "Type3"))
{
- pdf_clean_type3(doc, o, page->resources, cookie);
+ pdf_clean_type3(ctx, doc, o, page->resources, cookie);
}
}
}
/* ProcSet - no cleaning possible. Inherit this from the old dict. */
- obj = pdf_dict_gets(page->resources, "ProcSet");
+ obj = pdf_dict_gets(ctx, page->resources, "ProcSet");
if (obj)
- pdf_dict_puts(res, "ProcSet", obj);
+ pdf_dict_puts(ctx, res, "ProcSet", obj);
/* Properties - no cleaning possible. */
- pdf_drop_obj(page->resources);
- ref = pdf_new_ref(doc, res);
- page->resources = pdf_keep_obj(ref);
- pdf_dict_puts(page->me, "Resources", ref);
+ pdf_drop_obj(ctx, page->resources);
+ ref = pdf_new_ref(ctx, doc, res);
+ page->resources = pdf_keep_obj(ctx, ref);
+ pdf_dict_puts(ctx, page->me, "Resources", ref);
}
fz_always(ctx)
{
fz_drop_buffer(ctx, buffer);
- pdf_drop_obj(new_obj);
- pdf_drop_obj(new_ref);
- pdf_drop_obj(res);
- pdf_drop_obj(ref);
+ pdf_drop_obj(ctx, new_obj);
+ pdf_drop_obj(ctx, new_ref);
+ pdf_drop_obj(ctx, res);
+ pdf_drop_obj(ctx, ref);
}
fz_catch(ctx)
{