Subversion Repositories Kolibri OS

Rev

Rev 4680 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4680 right-hear 1
#include "fitz.h"
2
#include "mupdf.h"
3
 
4
static pdf_outline *
5
pdf_load_outline_imp(pdf_xref *xref, fz_obj *dict)
6
{
7
	pdf_outline *node;
8
	fz_obj *obj;
9
 
10
	if (fz_is_null(dict))
11
		return NULL;
12
 
13
	node = fz_malloc(sizeof(pdf_outline));
14
	node->title = NULL;
15
	node->link = NULL;
16
	node->child = NULL;
17
	node->next = NULL;
18
	node->count = 0;
19
 
20
	obj = fz_dict_gets(dict, "Title");
21
	if (obj)
22
		node->title = pdf_to_utf8(obj);
23
 
24
	obj = fz_dict_gets(dict, "Count");
25
	if (obj)
26
		node->count = fz_to_int(obj);
27
 
28
	if (fz_dict_gets(dict, "Dest") || fz_dict_gets(dict, "A"))
29
		node->link = pdf_load_link(xref, dict);
30
 
31
	obj = fz_dict_gets(dict, "First");
32
	if (obj)
33
		node->child = pdf_load_outline_imp(xref, obj);
34
 
35
	obj = fz_dict_gets(dict, "Next");
36
	if (obj)
37
		node->next = pdf_load_outline_imp(xref, obj);
38
 
39
	return node;
40
}
41
 
42
pdf_outline *
43
pdf_load_outline(pdf_xref *xref)
44
{
45
	fz_obj *root, *obj, *first;
46
 
47
	root = fz_dict_gets(xref->trailer, "Root");
48
	obj = fz_dict_gets(root, "Outlines");
49
	first = fz_dict_gets(obj, "First");
50
	if (first)
51
		return pdf_load_outline_imp(xref, first);
52
 
53
	return NULL;
54
}
55
 
56
void
57
pdf_free_outline(pdf_outline *outline)
58
{
59
	if (outline->child)
60
		pdf_free_outline(outline->child);
61
	if (outline->next)
62
		pdf_free_outline(outline->next);
63
	if (outline->link)
64
		pdf_free_link(outline->link);
65
	fz_free(outline->title);
66
	fz_free(outline);
67
}
68
 
69
void
70
pdf_debug_outline(pdf_outline *outline, int level)
71
{
72
	int i;
73
	while (outline)
74
	{
75
		for (i = 0; i < level; i++)
76
			putchar(' ');
77
 
78
		if (outline->title)
79
			printf("%s ", outline->title);
80
		else
81
			printf(" ");
82
 
83
		if (outline->link)
84
			fz_debug_obj(outline->link->dest);
85
		else
86
			printf("\n");
87
 
88
		if (outline->child)
89
			pdf_debug_outline(outline->child, level + 2);
90
 
91
		outline = outline->next;
92
	}
93
}