summaryrefslogtreecommitdiff
path: root/pdf/pdf_page.c
diff options
context:
space:
mode:
Diffstat (limited to 'pdf/pdf_page.c')
-rw-r--r--pdf/pdf_page.c69
1 files changed, 31 insertions, 38 deletions
diff --git a/pdf/pdf_page.c b/pdf/pdf_page.c
index 9c67edf0..c97eb9b4 100644
--- a/pdf/pdf_page.c
+++ b/pdf/pdf_page.c
@@ -95,7 +95,7 @@ pdf_load_page_tree_node(pdf_xref *xref, fz_obj *node, struct info info)
}
}
-fz_error
+void
pdf_load_page_tree(pdf_xref *xref)
{
struct info info;
@@ -105,9 +105,9 @@ pdf_load_page_tree(pdf_xref *xref)
fz_obj *count = fz_dict_gets(pages, "Count");
if (!fz_is_dict(pages))
- return fz_error_make("missing page tree");
+ fz_throw(ctx, "missing page tree");
if (!fz_is_int(count))
- return fz_error_make("missing page count");
+ fz_throw(ctx, "missing page count");
xref->page_cap = fz_to_int(count);
xref->page_len = 0;
@@ -120,8 +120,6 @@ pdf_load_page_tree(pdf_xref *xref)
info.rotate = NULL;
pdf_load_page_tree_node(xref, pages, info);
-
- return fz_okay;
}
/* We need to know whether to install a page-level transparency group */
@@ -202,10 +200,9 @@ found:
/* we need to combine all sub-streams into one for the content stream interpreter */
-static fz_error
-pdf_load_page_contents_array(fz_buffer **bigbufp, pdf_xref *xref, fz_obj *list)
+static fz_buffer *
+pdf_load_page_contents_array(pdf_xref *xref, fz_obj *list)
{
- fz_error error;
fz_buffer *big;
fz_buffer *one;
int i, n;
@@ -217,10 +214,13 @@ pdf_load_page_contents_array(fz_buffer **bigbufp, pdf_xref *xref, fz_obj *list)
for (i = 0; i < n; i++)
{
fz_obj *stm = fz_array_get(list, i);
- error = pdf_load_stream(&one, xref, fz_to_num(stm), fz_to_gen(stm));
- if (error)
+ fz_try(ctx)
{
- fz_error_handle(error, "cannot load content stream part %d/%d", i + 1, n);
+ one = pdf_load_stream(xref, fz_to_num(stm), fz_to_gen(stm));
+ }
+ fz_catch(ctx)
+ {
+ fz_warn(ctx, "cannot load content stream part %d/%d", i + 1, n);
continue;
}
@@ -236,44 +236,35 @@ pdf_load_page_contents_array(fz_buffer **bigbufp, pdf_xref *xref, fz_obj *list)
if (n > 0 && big->len == 0)
{
fz_drop_buffer(ctx, big);
- return fz_error_make("cannot load content stream");
+ fz_throw(ctx, "cannot load content stream");
}
- *bigbufp = big;
- return fz_okay;
+ return big;
}
-static fz_error
-pdf_load_page_contents(fz_buffer **bufp, pdf_xref *xref, fz_obj *obj)
+static fz_buffer *
+pdf_load_page_contents(pdf_xref *xref, fz_obj *obj)
{
- fz_error error;
fz_context *ctx = xref->ctx;
if (fz_is_array(obj))
{
- error = pdf_load_page_contents_array(bufp, xref, obj);
- if (error)
- return fz_error_note(error, "cannot load content stream array");
+ return pdf_load_page_contents_array(xref, obj);
+ /* RJW: "cannot load content stream array" */
}
else if (pdf_is_stream(xref, fz_to_num(obj), fz_to_gen(obj)))
{
- error = pdf_load_stream(bufp, xref, fz_to_num(obj), fz_to_gen(obj));
- if (error)
- return fz_error_note(error, "cannot load content stream (%d 0 R)", fz_to_num(obj));
- }
- else
- {
- fz_warn(ctx, "page contents missing, leaving page blank");
- *bufp = fz_new_buffer(ctx, 0);
+ return pdf_load_stream(xref, fz_to_num(obj), fz_to_gen(obj));
+ /* RJW: "cannot load content stream (%d 0 R)", fz_to_num(obj) */
}
- return fz_okay;
+ fz_warn(ctx, "page contents missing, leaving page blank");
+ return fz_new_buffer(ctx, 0);
}
-fz_error
-pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number)
+pdf_page *
+pdf_load_page(pdf_xref *xref, int number)
{
- fz_error error;
pdf_page *page;
pdf_annot *annot;
fz_obj *pageobj, *pageref;
@@ -282,7 +273,7 @@ pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number)
fz_context *ctx = xref->ctx;
if (number < 0 || number >= xref->page_len)
- return fz_error_make("cannot find page %d", number + 1);
+ fz_throw(ctx, "cannot find page %d", number + 1);
/* Ensure that we have a store for resource objects */
if (!xref->store)
@@ -341,11 +332,14 @@ pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number)
fz_keep_obj(page->resources);
obj = fz_dict_gets(pageobj, "Contents");
- error = pdf_load_page_contents(&page->contents, xref, obj);
- if (error)
+ fz_try(ctx)
+ {
+ page->contents = pdf_load_page_contents(xref, obj);
+ }
+ fz_catch(ctx)
{
pdf_free_page(ctx, page);
- return fz_error_note(error, "cannot load page %d contents (%d 0 R)", number + 1, fz_to_num(pageref));
+ fz_throw(ctx, "cannot load page %d contents (%d 0 R)", number + 1, fz_to_num(pageref));
}
if (pdf_resources_use_blending(ctx, page->resources))
@@ -355,8 +349,7 @@ pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number)
if (pdf_resources_use_blending(ctx, annot->ap->resources))
page->transparency = 1;
- *pagep = page;
- return fz_okay;
+ return page;
}
void