diff options
author | Robin Watts <robin.watts@artifex.com> | 2011-11-14 18:22:13 +0000 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2011-11-15 15:20:54 +0000 |
commit | 9c0a49060475b2dea1e4c2668bebd1d566113a7b (patch) | |
tree | 49e45a691cf105f4266d5c6b7242a4a3256c1200 /pdf/pdf_outline.c | |
parent | 60c0544742931da63db623ad7a79ba3758704cc1 (diff) | |
parent | fd6def85f22b598d4c278e76138ab7dccbb84c36 (diff) | |
download | mupdf-9c0a49060475b2dea1e4c2668bebd1d566113a7b.tar.xz |
Merge branch 'master' into context
Mostly redoing the xps_context to xps_document change and adding
contexts to newly written code.
Conflicts:
apps/pdfapp.c
apps/pdfapp.h
apps/x11_main.c
apps/xpsdraw.c
draw/draw_device.c
draw/draw_scale.c
fitz/base_object.c
fitz/fitz.h
pdf/mupdf.h
pdf/pdf_interpret.c
pdf/pdf_outline.c
pdf/pdf_page.c
xps/muxps.h
xps/xps_doc.c
xps/xps_xml.c
Diffstat (limited to 'pdf/pdf_outline.c')
-rw-r--r-- | pdf/pdf_outline.c | 67 |
1 files changed, 15 insertions, 52 deletions
diff --git a/pdf/pdf_outline.c b/pdf/pdf_outline.c index 677a701f..9353d892 100644 --- a/pdf/pdf_outline.c +++ b/pdf/pdf_outline.c @@ -1,37 +1,39 @@ #include "fitz.h" #include "mupdf.h" -static pdf_outline * +static fz_outline * pdf_load_outline_imp(pdf_xref *xref, fz_obj *dict) { fz_context *ctx = xref->ctx; - pdf_outline *node; + pdf_link *link; + fz_outline *node; fz_obj *obj; if (fz_is_null(dict)) return NULL; - node = fz_malloc(ctx, sizeof(pdf_outline)); + node = fz_malloc(ctx, sizeof(fz_outline)); + node->ctx = ctx; node->title = NULL; - node->link = NULL; - node->child = NULL; + node->page = 0; + node->down = NULL; node->next = NULL; - node->count = 0; obj = fz_dict_gets(dict, "Title"); if (obj) node->title = pdf_to_utf8(ctx, obj); - obj = fz_dict_gets(dict, "Count"); - if (obj) - node->count = fz_to_int(obj); - if (fz_dict_gets(dict, "Dest") || fz_dict_gets(dict, "A")) - node->link = pdf_load_link(xref, dict); + { + link = pdf_load_link(xref, dict); + if (link->kind == PDF_LINK_GOTO) + node->page = pdf_find_page_number(xref, fz_array_get(link->dest, 0)); + pdf_free_link(xref->ctx, link); + } obj = fz_dict_gets(dict, "First"); if (obj) - node->child = pdf_load_outline_imp(xref, obj); + node->down = pdf_load_outline_imp(xref, obj); obj = fz_dict_gets(dict, "Next"); if (obj) @@ -40,7 +42,7 @@ pdf_load_outline_imp(pdf_xref *xref, fz_obj *dict) return node; } -pdf_outline * +fz_outline * pdf_load_outline(pdf_xref *xref) { fz_obj *root, *obj, *first; @@ -53,42 +55,3 @@ pdf_load_outline(pdf_xref *xref) return NULL; } - -void -pdf_free_outline(fz_context *ctx, pdf_outline *outline) -{ - if (outline->child) - pdf_free_outline(ctx, outline->child); - if (outline->next) - pdf_free_outline(ctx, outline->next); - if (outline->link) - pdf_free_link(ctx, outline->link); - fz_free(ctx, outline->title); - fz_free(ctx, outline); -} - -void -pdf_debug_outline(fz_context *ctx, pdf_outline *outline, int level) -{ - int i; - while (outline) - { - for (i = 0; i < level; i++) - putchar(' '); - - if (outline->title) - printf("%s ", outline->title); - else - printf("<NULL> "); - - if (outline->link) - fz_debug_obj(outline->link->dest); - else - printf("<NULL>\n"); - - if (outline->child) - pdf_debug_outline(ctx, outline->child, level + 2); - - outline = outline->next; - } -} |