diff options
Diffstat (limited to 'source/pdf/pdf-outline.c')
-rw-r--r-- | source/pdf/pdf-outline.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/source/pdf/pdf-outline.c b/source/pdf/pdf-outline.c index 44273dda..34bb79ed 100644 --- a/source/pdf/pdf-outline.c +++ b/source/pdf/pdf-outline.c @@ -1,9 +1,8 @@ #include "mupdf/pdf.h" static fz_outline * -pdf_load_outline_imp(pdf_document *doc, pdf_obj *dict) +pdf_load_outline_imp(fz_context *ctx, pdf_document *doc, pdf_obj *dict) { - fz_context *ctx = doc->ctx; fz_outline *node, **prev, *first; pdf_obj *obj; pdf_obj *odict = dict; @@ -15,9 +14,9 @@ pdf_load_outline_imp(pdf_document *doc, pdf_obj *dict) { first = NULL; prev = &first; - while (dict && pdf_is_dict(dict)) + while (dict && pdf_is_dict(ctx, dict)) { - if (pdf_mark_obj(dict)) + if (pdf_mark_obj(ctx, dict)) break; node = fz_malloc_struct(ctx, fz_outline); node->title = NULL; @@ -27,30 +26,30 @@ pdf_load_outline_imp(pdf_document *doc, pdf_obj *dict) *prev = node; prev = &node->next; - obj = pdf_dict_gets(dict, "Title"); + obj = pdf_dict_gets(ctx, dict, "Title"); if (obj) - node->title = pdf_to_utf8(doc, obj); + node->title = pdf_to_utf8(ctx, doc, obj); - if ((obj = pdf_dict_gets(dict, "Dest")) != NULL) - node->dest = pdf_parse_link_dest(doc, FZ_LINK_GOTO, obj); - else if ((obj = pdf_dict_gets(dict, "A")) != NULL) - node->dest = pdf_parse_action(doc, obj); + if ((obj = pdf_dict_gets(ctx, dict, "Dest")) != NULL) + node->dest = pdf_parse_link_dest(ctx, doc, FZ_LINK_GOTO, obj); + else if ((obj = pdf_dict_gets(ctx, dict, "A")) != NULL) + node->dest = pdf_parse_action(ctx, doc, obj); - obj = pdf_dict_gets(dict, "First"); + obj = pdf_dict_gets(ctx, dict, "First"); if (obj) - node->down = pdf_load_outline_imp(doc, obj); + node->down = pdf_load_outline_imp(ctx, doc, obj); - dict = pdf_dict_gets(dict, "Next"); + dict = pdf_dict_gets(ctx, dict, "Next"); } } fz_always(ctx) { - for (dict = odict; dict && pdf_obj_marked(dict); dict = pdf_dict_gets(dict, "Next")) - pdf_unmark_obj(dict); + for (dict = odict; dict && pdf_obj_marked(ctx, dict); dict = pdf_dict_gets(ctx, dict, "Next")) + pdf_unmark_obj(ctx, dict); } fz_catch(ctx) { - fz_free_outline(ctx, first); + fz_drop_outline(ctx, first); fz_rethrow(ctx); } @@ -58,15 +57,15 @@ pdf_load_outline_imp(pdf_document *doc, pdf_obj *dict) } fz_outline * -pdf_load_outline(pdf_document *doc) +pdf_load_outline(fz_context *ctx, pdf_document *doc) { pdf_obj *root, *obj, *first; - root = pdf_dict_gets(pdf_trailer(doc), "Root"); - obj = pdf_dict_gets(root, "Outlines"); - first = pdf_dict_gets(obj, "First"); + root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); + obj = pdf_dict_gets(ctx, root, "Outlines"); + first = pdf_dict_gets(ctx, obj, "First"); if (first) - return pdf_load_outline_imp(doc, first); + return pdf_load_outline_imp(ctx, doc, first); return NULL; } |