summaryrefslogtreecommitdiff
path: root/pdf/pdf_outline.c
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2011-11-14 18:22:13 +0000
committerRobin Watts <robin.watts@artifex.com>2011-11-15 15:20:54 +0000
commit9c0a49060475b2dea1e4c2668bebd1d566113a7b (patch)
tree49e45a691cf105f4266d5c6b7242a4a3256c1200 /pdf/pdf_outline.c
parent60c0544742931da63db623ad7a79ba3758704cc1 (diff)
parentfd6def85f22b598d4c278e76138ab7dccbb84c36 (diff)
downloadmupdf-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.c67
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;
- }
-}