summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-annot.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2015-01-21 16:42:45 +0100
committerTor Andersson <tor.andersson@artifex.com>2015-02-17 18:05:39 +0100
commitf84a189d5f94250e46d2cbd1a75aba00130e2dd6 (patch)
tree8ee614ab90de1baa8941f91ae4946ed5c2e70721 /source/pdf/pdf-annot.c
parent681039767f2ccc72e236246178893eb0989169c9 (diff)
downloadmupdf-f84a189d5f94250e46d2cbd1a75aba00130e2dd6.tar.xz
Add ctx parameter and remove embedded contexts for API regularity.
Purge several embedded contexts: Remove embedded context in fz_output. Remove embedded context in fz_stream. Remove embedded context in fz_device. Remove fz_rebind_stream (since it is no longer necessary). Remove embedded context in svg_device. Remove embedded context in XML parser. Add ctx argument to fz_document functions. Remove embedded context in fz_document. Remove embedded context in pdf_document. Remove embedded context in pdf_obj. Make fz_page independent of fz_document in the interface. We shouldn't need to pass the document to all functions handling a page. If a page is tied to the source document, it's redundant; otherwise it's just pointless. Fix reference counting oddity in fz_new_image_from_pixmap.
Diffstat (limited to 'source/pdf/pdf-annot.c')
-rw-r--r--source/pdf/pdf-annot.c268
1 files changed, 131 insertions, 137 deletions
diff --git a/source/pdf/pdf-annot.c b/source/pdf/pdf-annot.c
index 72f5cd8e..b25c24df 100644
--- a/source/pdf/pdf-annot.c
+++ b/source/pdf/pdf-annot.c
@@ -1,47 +1,47 @@
#include "mupdf/pdf.h"
static pdf_obj *
-resolve_dest_rec(pdf_document *doc, pdf_obj *dest, fz_link_kind kind, int depth)
+resolve_dest_rec(fz_context *ctx, pdf_document *doc, pdf_obj *dest, fz_link_kind kind, int depth)
{
if (depth > 10) /* Arbitrary to avoid infinite recursion */
return NULL;
- if (pdf_is_name(dest) || pdf_is_string(dest))
+ if (pdf_is_name(ctx, dest) || pdf_is_string(ctx, dest))
{
if (kind == FZ_LINK_GOTO)
{
- dest = pdf_lookup_dest(doc, dest);
- dest = resolve_dest_rec(doc, dest, kind, depth+1);
+ dest = pdf_lookup_dest(ctx, doc, dest);
+ dest = resolve_dest_rec(ctx, doc, dest, kind, depth+1);
}
return dest;
}
- else if (pdf_is_array(dest))
+ else if (pdf_is_array(ctx, dest))
{
return dest;
}
- else if (pdf_is_dict(dest))
+ else if (pdf_is_dict(ctx, dest))
{
- dest = pdf_dict_gets(dest, "D");
- return resolve_dest_rec(doc, dest, kind, depth+1);
+ dest = pdf_dict_gets(ctx, dest, "D");
+ return resolve_dest_rec(ctx, doc, dest, kind, depth+1);
}
- else if (pdf_is_indirect(dest))
+ else if (pdf_is_indirect(ctx, dest))
return dest;
return NULL;
}
static pdf_obj *
-resolve_dest(pdf_document *doc, pdf_obj *dest, fz_link_kind kind)
+resolve_dest(fz_context *ctx, pdf_document *doc, pdf_obj *dest, fz_link_kind kind)
{
- return resolve_dest_rec(doc, dest, kind, 0);
+ return resolve_dest_rec(ctx, doc, dest, kind, 0);
}
fz_link_dest
-pdf_parse_link_dest(pdf_document *doc, fz_link_kind kind, pdf_obj *dest)
+pdf_parse_link_dest(fz_context *ctx, pdf_document *doc, fz_link_kind kind, pdf_obj *dest)
{
fz_link_dest ld;
pdf_obj *obj;
@@ -63,65 +63,65 @@ pdf_parse_link_dest(pdf_document *doc, fz_link_kind kind, pdf_obj *dest)
ld.ld.gotor.page = -1;
ld.ld.gotor.dest = NULL;
- dest = resolve_dest(doc, dest, kind);
+ dest = resolve_dest(ctx, doc, dest, kind);
if (dest == NULL)
{
- fz_warn(doc->ctx, "undefined link destination");
+ fz_warn(ctx, "undefined link destination");
return ld;
}
- if (pdf_is_name(dest))
+ if (pdf_is_name(ctx, dest))
{
- ld.ld.gotor.dest = pdf_to_name(dest);
+ ld.ld.gotor.dest = pdf_to_name(ctx, dest);
return ld;
}
- else if (pdf_is_string(dest))
+ else if (pdf_is_string(ctx, dest))
{
- ld.ld.gotor.dest = pdf_to_str_buf(dest);
+ ld.ld.gotor.dest = pdf_to_str_buf(ctx, dest);
return ld;
}
- obj = pdf_array_get(dest, 0);
- if (pdf_is_int(obj))
- ld.ld.gotor.page = pdf_to_int(obj);
+ obj = pdf_array_get(ctx, dest, 0);
+ if (pdf_is_int(ctx, obj))
+ ld.ld.gotor.page = pdf_to_int(ctx, obj);
else
{
- fz_try(doc->ctx)
+ fz_try(ctx)
{
- ld.ld.gotor.page = pdf_lookup_page_number(doc, obj);
+ ld.ld.gotor.page = pdf_lookup_page_number(ctx, doc, obj);
}
- fz_catch(doc->ctx)
+ fz_catch(ctx)
{
ld.kind = FZ_LINK_NONE;
return ld;
}
}
- obj = pdf_array_get(dest, 1);
- if (!pdf_is_name(obj))
+ obj = pdf_array_get(ctx, dest, 1);
+ if (!pdf_is_name(ctx, obj))
return ld;
- if (!strcmp("XYZ", pdf_to_name(obj)))
+ if (!strcmp("XYZ", pdf_to_name(ctx, obj)))
{
l_from_2 = t_from_3 = z_from_4 = 1;
ld.ld.gotor.flags |= fz_link_flag_r_is_zoom;
}
- else if ((!strcmp("Fit", pdf_to_name(obj))) || (!strcmp("FitB", pdf_to_name(obj))))
+ else if ((!strcmp("Fit", pdf_to_name(ctx, obj))) || (!strcmp("FitB", pdf_to_name(ctx, obj))))
{
ld.ld.gotor.flags |= fz_link_flag_fit_h;
ld.ld.gotor.flags |= fz_link_flag_fit_v;
}
- else if ((!strcmp("FitH", pdf_to_name(obj))) || (!strcmp("FitBH", pdf_to_name(obj))))
+ else if ((!strcmp("FitH", pdf_to_name(ctx, obj))) || (!strcmp("FitBH", pdf_to_name(ctx, obj))))
{
t_from_2 = 1;
ld.ld.gotor.flags |= fz_link_flag_fit_h;
}
- else if ((!strcmp("FitV", pdf_to_name(obj))) || (!strcmp("FitBV", pdf_to_name(obj))))
+ else if ((!strcmp("FitV", pdf_to_name(ctx, obj))) || (!strcmp("FitBV", pdf_to_name(ctx, obj))))
{
l_from_2 = 1;
ld.ld.gotor.flags |= fz_link_flag_fit_v;
}
- else if (!strcmp("FitR", pdf_to_name(obj)))
+ else if (!strcmp("FitR", pdf_to_name(ctx, obj)))
{
l_from_2 = b_from_3 = r_from_4 = t_from_5 = 1;
ld.ld.gotor.flags |= fz_link_flag_fit_h;
@@ -130,77 +130,77 @@ pdf_parse_link_dest(pdf_document *doc, fz_link_kind kind, pdf_obj *dest)
if (l_from_2)
{
- obj = pdf_array_get(dest, 2);
- if (pdf_is_int(obj))
+ obj = pdf_array_get(ctx, dest, 2);
+ if (pdf_is_int(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_l_valid;
- ld.ld.gotor.lt.x = pdf_to_int(obj);
+ ld.ld.gotor.lt.x = pdf_to_int(ctx, obj);
}
- else if (pdf_is_real(obj))
+ else if (pdf_is_real(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_l_valid;
- ld.ld.gotor.lt.x = pdf_to_real(obj);
+ ld.ld.gotor.lt.x = pdf_to_real(ctx, obj);
}
}
if (b_from_3)
{
- obj = pdf_array_get(dest, 3);
- if (pdf_is_int(obj))
+ obj = pdf_array_get(ctx, dest, 3);
+ if (pdf_is_int(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_b_valid;
- ld.ld.gotor.rb.y = pdf_to_int(obj);
+ ld.ld.gotor.rb.y = pdf_to_int(ctx, obj);
}
- else if (pdf_is_real(obj))
+ else if (pdf_is_real(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_b_valid;
- ld.ld.gotor.rb.y = pdf_to_real(obj);
+ ld.ld.gotor.rb.y = pdf_to_real(ctx, obj);
}
}
if (r_from_4)
{
- obj = pdf_array_get(dest, 4);
- if (pdf_is_int(obj))
+ obj = pdf_array_get(ctx, dest, 4);
+ if (pdf_is_int(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_r_valid;
- ld.ld.gotor.rb.x = pdf_to_int(obj);
+ ld.ld.gotor.rb.x = pdf_to_int(ctx, obj);
}
- else if (pdf_is_real(obj))
+ else if (pdf_is_real(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_r_valid;
- ld.ld.gotor.rb.x = pdf_to_real(obj);
+ ld.ld.gotor.rb.x = pdf_to_real(ctx, obj);
}
}
if (t_from_5 || t_from_3 || t_from_2)
{
if (t_from_5)
- obj = pdf_array_get(dest, 5);
+ obj = pdf_array_get(ctx, dest, 5);
else if (t_from_3)
- obj = pdf_array_get(dest, 3);
+ obj = pdf_array_get(ctx, dest, 3);
else
- obj = pdf_array_get(dest, 2);
- if (pdf_is_int(obj))
+ obj = pdf_array_get(ctx, dest, 2);
+ if (pdf_is_int(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_t_valid;
- ld.ld.gotor.lt.y = pdf_to_int(obj);
+ ld.ld.gotor.lt.y = pdf_to_int(ctx, obj);
}
- else if (pdf_is_real(obj))
+ else if (pdf_is_real(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_t_valid;
- ld.ld.gotor.lt.y = pdf_to_real(obj);
+ ld.ld.gotor.lt.y = pdf_to_real(ctx, obj);
}
}
if (z_from_4)
{
- obj = pdf_array_get(dest, 4);
- if (pdf_is_int(obj))
+ obj = pdf_array_get(ctx, dest, 4);
+ if (pdf_is_int(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_r_valid;
- ld.ld.gotor.rb.x = pdf_to_int(obj);
+ ld.ld.gotor.rb.x = pdf_to_int(ctx, obj);
}
- else if (pdf_is_real(obj))
+ else if (pdf_is_real(ctx, obj))
{
ld.ld.gotor.flags |= fz_link_flag_r_valid;
- ld.ld.gotor.rb.x = pdf_to_real(obj);
+ ld.ld.gotor.rb.x = pdf_to_real(ctx, obj);
}
}
@@ -218,26 +218,25 @@ pdf_parse_link_dest(pdf_document *doc, fz_link_kind kind, pdf_obj *dest)
}
static char *
-pdf_parse_file_spec(pdf_document *doc, pdf_obj *file_spec)
+pdf_parse_file_spec(fz_context *ctx, pdf_document *doc, pdf_obj *file_spec)
{
- fz_context *ctx = doc->ctx;
pdf_obj *filename;
- if (pdf_is_string(file_spec))
- return pdf_to_utf8(doc, file_spec);
+ if (pdf_is_string(ctx, file_spec))
+ return pdf_to_utf8(ctx, doc, file_spec);
- if (pdf_is_dict(file_spec)) {
- filename = pdf_dict_gets(file_spec, "UF");
+ if (pdf_is_dict(ctx, file_spec)) {
+ filename = pdf_dict_gets(ctx, file_spec, "UF");
if (!filename)
- filename = pdf_dict_gets(file_spec, "F");
+ filename = pdf_dict_gets(ctx, file_spec, "F");
if (!filename)
- filename = pdf_dict_gets(file_spec, "Unix");
+ filename = pdf_dict_gets(ctx, file_spec, "Unix");
if (!filename)
- filename = pdf_dict_gets(file_spec, "Mac");
+ filename = pdf_dict_gets(ctx, file_spec, "Mac");
if (!filename)
- filename = pdf_dict_gets(file_spec, "DOS");
+ filename = pdf_dict_gets(ctx, file_spec, "DOS");
- return pdf_to_utf8(doc, filename);
+ return pdf_to_utf8(ctx, doc, filename);
}
fz_warn(ctx, "cannot parse file specification");
@@ -245,65 +244,61 @@ pdf_parse_file_spec(pdf_document *doc, pdf_obj *file_spec)
}
fz_link_dest
-pdf_parse_action(pdf_document *doc, pdf_obj *action)
+pdf_parse_action(fz_context *ctx, pdf_document *doc, pdf_obj *action)
{
fz_link_dest ld;
pdf_obj *obj, *dest, *file_spec;
- fz_context *ctx = doc->ctx;
-
- UNUSED(ctx);
ld.kind = FZ_LINK_NONE;
if (!action)
return ld;
- obj = pdf_dict_gets(action, "S");
- if (!strcmp(pdf_to_name(obj), "GoTo"))
+ obj = pdf_dict_gets(ctx, action, "S");
+ if (!strcmp(pdf_to_name(ctx, obj), "GoTo"))
{
- dest = pdf_dict_gets(action, "D");
- ld = pdf_parse_link_dest(doc, FZ_LINK_GOTO, dest);
+ dest = pdf_dict_gets(ctx, action, "D");
+ ld = pdf_parse_link_dest(ctx, doc, FZ_LINK_GOTO, dest);
}
- else if (!strcmp(pdf_to_name(obj), "URI"))
+ else if (!strcmp(pdf_to_name(ctx, obj), "URI"))
{
ld.kind = FZ_LINK_URI;
- ld.ld.uri.is_map = pdf_to_bool(pdf_dict_gets(action, "IsMap"));
- ld.ld.uri.uri = pdf_to_utf8(doc, pdf_dict_gets(action, "URI"));
+ ld.ld.uri.is_map = pdf_to_bool(ctx, pdf_dict_gets(ctx, action, "IsMap"));
+ ld.ld.uri.uri = pdf_to_utf8(ctx, doc, pdf_dict_gets(ctx, action, "URI"));
}
- else if (!strcmp(pdf_to_name(obj), "Launch"))
+ else if (!strcmp(pdf_to_name(ctx, obj), "Launch"))
{
ld.kind = FZ_LINK_LAUNCH;
- file_spec = pdf_dict_gets(action, "F");
- ld.ld.launch.file_spec = pdf_parse_file_spec(doc, file_spec);
- ld.ld.launch.new_window = pdf_to_int(pdf_dict_gets(action, "NewWindow"));
- ld.ld.launch.is_uri = !strcmp(pdf_to_name(pdf_dict_gets(file_spec, "FS")), "URL");
+ file_spec = pdf_dict_gets(ctx, action, "F");
+ ld.ld.launch.file_spec = pdf_parse_file_spec(ctx, doc, file_spec);
+ ld.ld.launch.new_window = pdf_to_int(ctx, pdf_dict_gets(ctx, action, "NewWindow"));
+ ld.ld.launch.is_uri = !strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, file_spec, "FS")), "URL");
}
- else if (!strcmp(pdf_to_name(obj), "Named"))
+ else if (!strcmp(pdf_to_name(ctx, obj), "Named"))
{
ld.kind = FZ_LINK_NAMED;
- ld.ld.named.named = fz_strdup(ctx, pdf_to_name(pdf_dict_gets(action, "N")));
+ ld.ld.named.named = fz_strdup(ctx, pdf_to_name(ctx, pdf_dict_gets(ctx, action, "N")));
}
- else if (!strcmp(pdf_to_name(obj), "GoToR"))
+ else if (!strcmp(pdf_to_name(ctx, obj), "GoToR"))
{
- dest = pdf_dict_gets(action, "D");
- file_spec = pdf_dict_gets(action, "F");
- ld = pdf_parse_link_dest(doc, FZ_LINK_GOTOR, dest);
- ld.ld.gotor.file_spec = pdf_parse_file_spec(doc, file_spec);
- ld.ld.gotor.new_window = pdf_to_int(pdf_dict_gets(action, "NewWindow"));
+ dest = pdf_dict_gets(ctx, action, "D");
+ file_spec = pdf_dict_gets(ctx, action, "F");
+ ld = pdf_parse_link_dest(ctx, doc, FZ_LINK_GOTOR, dest);
+ ld.ld.gotor.file_spec = pdf_parse_file_spec(ctx, doc, file_spec);
+ ld.ld.gotor.new_window = pdf_to_int(ctx, pdf_dict_gets(ctx, action, "NewWindow"));
}
return ld;
}
static fz_link *
-pdf_load_link(pdf_document *doc, pdf_obj *dict, const fz_matrix *page_ctm)
+pdf_load_link(fz_context *ctx, pdf_document *doc, pdf_obj *dict, const fz_matrix *page_ctm)
{
pdf_obj *action;
pdf_obj *obj;
fz_rect bbox;
- fz_context *ctx = doc->ctx;
fz_link_dest ld;
- obj = pdf_dict_gets(dict, "Rect");
+ obj = pdf_dict_gets(ctx, dict, "Rect");
if (obj)
pdf_to_rect(ctx, obj, &bbox);
else
@@ -311,17 +306,17 @@ pdf_load_link(pdf_document *doc, pdf_obj *dict, const fz_matrix *page_ctm)
fz_transform_rect(&bbox, page_ctm);
- obj = pdf_dict_gets(dict, "Dest");
+ obj = pdf_dict_gets(ctx, dict, "Dest");
if (obj)
- ld = pdf_parse_link_dest(doc, FZ_LINK_GOTO, obj);
+ ld = pdf_parse_link_dest(ctx, doc, FZ_LINK_GOTO, obj);
else
{
- action = pdf_dict_gets(dict, "A");
+ action = pdf_dict_gets(ctx, dict, "A");
/* fall back to additional action button's down/up action */
if (!action)
- action = pdf_dict_getsa(pdf_dict_gets(dict, "AA"), "U", "D");
+ action = pdf_dict_getsa(ctx, pdf_dict_gets(ctx, dict, "AA"), "U", "D");
- ld = pdf_parse_action(doc, action);
+ ld = pdf_parse_action(ctx, doc, action);
}
if (ld.kind == FZ_LINK_NONE)
return NULL;
@@ -329,7 +324,7 @@ pdf_load_link(pdf_document *doc, pdf_obj *dict, const fz_matrix *page_ctm)
}
fz_link *
-pdf_load_link_annots(pdf_document *doc, pdf_obj *annots, const fz_matrix *page_ctm)
+pdf_load_link_annots(fz_context *ctx, pdf_document *doc, pdf_obj *annots, const fz_matrix *page_ctm)
{
fz_link *link, *head, *tail;
pdf_obj *obj;
@@ -338,18 +333,18 @@ pdf_load_link_annots(pdf_document *doc, pdf_obj *annots, const fz_matrix *page_c
head = tail = NULL;
link = NULL;
- n = pdf_array_len(annots);
+ n = pdf_array_len(ctx, annots);
for (i = 0; i < n; i++)
{
/* FIXME: Move the try/catch out of the loop for performance? */
- fz_try(doc->ctx)
+ fz_try(ctx)
{
- obj = pdf_array_get(annots, i);
- link = pdf_load_link(doc, obj, page_ctm);
+ obj = pdf_array_get(ctx, annots, i);
+ link = pdf_load_link(ctx, doc, obj, page_ctm);
}
- fz_catch(doc->ctx)
+ fz_catch(ctx)
{
- fz_rethrow_if(doc->ctx, FZ_ERROR_TRYLATER);
+ fz_rethrow_if(ctx, FZ_ERROR_TRYLATER);
link = NULL;
}
@@ -378,14 +373,14 @@ pdf_drop_annot(fz_context *ctx, pdf_annot *annot)
next = annot->next;
if (annot->ap)
pdf_drop_xobject(ctx, annot->ap);
- pdf_drop_obj(annot->obj);
+ pdf_drop_obj(ctx, annot->obj);
fz_free(ctx, annot);
annot = next;
}
}
void
-pdf_transform_annot(pdf_annot *annot)
+pdf_transform_annot(fz_context *ctx, pdf_annot *annot)
{
fz_rect bbox = annot->ap->bbox;
fz_rect rect = annot->rect;
@@ -406,9 +401,9 @@ pdf_transform_annot(pdf_annot *annot)
fz_pre_scale(fz_translate(&annot->matrix, x, y), w, h);
}
-fz_annot_type pdf_annot_obj_type(pdf_obj *obj)
+fz_annot_type pdf_annot_obj_type(fz_context *ctx, pdf_obj *obj)
{
- char *subtype = pdf_to_name(pdf_dict_gets(obj, "Subtype"));
+ char *subtype = pdf_to_name(ctx, pdf_dict_gets(ctx, obj, "Subtype"));
if (!strcmp(subtype, "Text"))
return FZ_ANNOT_TEXT;
else if (!strcmp(subtype, "Link"))
@@ -464,12 +459,11 @@ fz_annot_type pdf_annot_obj_type(pdf_obj *obj)
}
void
-pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
+pdf_load_annots(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_obj *annots)
{
pdf_annot *annot, **itr;
pdf_obj *obj, *ap, *as, *n, *rect;
int i, len, keep_annot;
- fz_context *ctx = doc->ctx;
fz_var(annot);
fz_var(itr);
@@ -477,7 +471,7 @@ pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
itr = &page->annots;
- len = pdf_array_len(annots);
+ len = pdf_array_len(ctx, annots);
/*
Create an initial linked list of pdf_annot structures with only the obj field
filled in. We do this because update_appearance has the potential to change
@@ -488,9 +482,9 @@ pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
{
for (i = 0; i < len; i++)
{
- obj = pdf_array_get(annots, i);
+ obj = pdf_array_get(ctx, annots, i);
annot = fz_malloc_struct(ctx, pdf_annot);
- annot->obj = pdf_keep_obj(obj);
+ annot->obj = pdf_keep_obj(ctx, obj);
annot->page = page;
annot->next = NULL;
@@ -521,45 +515,45 @@ pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
n = NULL;
if (doc->update_appearance)
- doc->update_appearance(doc, annot);
+ doc->update_appearance(ctx, doc, annot);
obj = annot->obj;
- rect = pdf_dict_gets(obj, "Rect");
- ap = pdf_dict_gets(obj, "AP");
- as = pdf_dict_gets(obj, "AS");
+ rect = pdf_dict_gets(ctx, obj, "Rect");
+ ap = pdf_dict_gets(ctx, obj, "AP");
+ as = pdf_dict_gets(ctx, obj, "AS");
/* We only collect annotations with an appearance
* stream into this list, so remove any that don't
* (such as links) and continue. */
- keep_annot = pdf_is_dict(ap);
+ keep_annot = pdf_is_dict(ctx, ap);
if (!keep_annot)
break;
- if (hp->num == pdf_to_num(obj)
- && hp->gen == pdf_to_gen(obj)
+ if (hp->num == pdf_to_num(ctx, obj)
+ && hp->gen == pdf_to_gen(ctx, obj)
&& (hp->state & HOTSPOT_POINTER_DOWN))
{
- n = pdf_dict_gets(ap, "D"); /* down state */
+ n = pdf_dict_gets(ctx, ap, "D"); /* down state */
}
if (n == NULL)
- n = pdf_dict_gets(ap, "N"); /* normal state */
+ n = pdf_dict_gets(ctx, ap, "N"); /* normal state */
/* lookup current state in sub-dictionary */
- if (!pdf_is_stream(doc, pdf_to_num(n), pdf_to_gen(n)))
- n = pdf_dict_get(n, as);
+ if (!pdf_is_stream(ctx, doc, pdf_to_num(ctx, n), pdf_to_gen(ctx, n)))
+ n = pdf_dict_get(ctx, n, as);
pdf_to_rect(ctx, rect, &annot->rect);
annot->pagerect = annot->rect;
fz_transform_rect(&annot->pagerect, &page->ctm);
annot->ap = NULL;
- annot->annot_type = pdf_annot_obj_type(obj);
- annot->widget_type = annot->annot_type == FZ_ANNOT_WIDGET ? pdf_field_type(doc, obj) : PDF_WIDGET_TYPE_NOT_WIDGET;
+ annot->annot_type = pdf_annot_obj_type(ctx, obj);
+ annot->widget_type = annot->annot_type == FZ_ANNOT_WIDGET ? pdf_field_type(ctx, doc, obj) : PDF_WIDGET_TYPE_NOT_WIDGET;
- if (pdf_is_stream(doc, pdf_to_num(n), pdf_to_gen(n)))
+ if (pdf_is_stream(ctx, doc, pdf_to_num(ctx, n), pdf_to_gen(ctx, n)))
{
- annot->ap = pdf_load_xobject(doc, n);
- pdf_transform_annot(annot);
+ annot->ap = pdf_load_xobject(ctx, doc, n);
+ pdf_transform_annot(ctx, annot);
annot->ap_iteration = annot->ap->iteration;
}
@@ -593,19 +587,19 @@ pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
}
pdf_annot *
-pdf_first_annot(pdf_document *doc, pdf_page *page)
+pdf_first_annot(fz_context *ctx, pdf_page *page)
{
return page ? page->annots : NULL;
}
pdf_annot *
-pdf_next_annot(pdf_document *doc, pdf_annot *annot)
+pdf_next_annot(fz_context *ctx, pdf_page *page, pdf_annot *annot)
{
return annot ? annot->next : NULL;
}
fz_rect *
-pdf_bound_annot(pdf_document *doc, pdf_annot *annot, fz_rect *rect)
+pdf_bound_annot(fz_context *ctx, pdf_page *page, pdf_annot *annot, fz_rect *rect)
{
if (rect == NULL)
return NULL;
@@ -618,7 +612,7 @@ pdf_bound_annot(pdf_document *doc, pdf_annot *annot, fz_rect *rect)
}
fz_annot_type
-pdf_annot_type(pdf_annot *annot)
+pdf_annot_type(fz_context *ctx, pdf_annot *annot)
{
return annot->annot_type;
}