Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
7638 views
1
#ifndef MUPDF_PDF_OBJECT_H
2
#define MUPDF_PDF_OBJECT_H
3
4
typedef struct pdf_document_s pdf_document;
5
6
/*
7
* Dynamic objects.
8
* The same type of objects as found in PDF and PostScript.
9
* Used by the filters and the mupdf parser.
10
*/
11
12
typedef struct pdf_obj_s pdf_obj;
13
14
pdf_obj *pdf_new_null(fz_context *ctx, pdf_document *doc);
15
pdf_obj *pdf_new_bool(fz_context *ctx, pdf_document *doc, int b);
16
pdf_obj *pdf_new_int(fz_context *ctx, pdf_document *doc, int i);
17
pdf_obj *pdf_new_real(fz_context *ctx, pdf_document *doc, float f);
18
pdf_obj *pdf_new_name(fz_context *ctx, pdf_document *doc, const char *str);
19
pdf_obj *pdf_new_string(fz_context *ctx, pdf_document *doc, const char *str, int len);
20
pdf_obj *pdf_new_indirect(fz_context *ctx, pdf_document *doc, int num, int gen);
21
pdf_obj *pdf_new_array(fz_context *ctx, pdf_document *doc, int initialcap);
22
pdf_obj *pdf_new_dict(fz_context *ctx, pdf_document *doc, int initialcap);
23
pdf_obj *pdf_new_rect(fz_context *ctx, pdf_document *doc, const fz_rect *rect);
24
pdf_obj *pdf_new_matrix(fz_context *ctx, pdf_document *doc, const fz_matrix *mtx);
25
pdf_obj *pdf_copy_array(fz_context *ctx, pdf_obj *array);
26
pdf_obj *pdf_copy_dict(fz_context *ctx, pdf_obj *dict);
27
28
pdf_obj *pdf_new_obj_from_str(fz_context *ctx, pdf_document *doc, const char *src);
29
30
pdf_obj *pdf_keep_obj(fz_context *ctx, pdf_obj *obj);
31
void pdf_drop_obj(fz_context *ctx, pdf_obj *obj);
32
33
/* type queries */
34
int pdf_is_null(fz_context *ctx, pdf_obj *obj);
35
int pdf_is_bool(fz_context *ctx, pdf_obj *obj);
36
int pdf_is_int(fz_context *ctx, pdf_obj *obj);
37
int pdf_is_real(fz_context *ctx, pdf_obj *obj);
38
int pdf_is_number(fz_context *ctx, pdf_obj *obj);
39
int pdf_is_name(fz_context *ctx, pdf_obj *obj);
40
int pdf_is_string(fz_context *ctx, pdf_obj *obj);
41
int pdf_is_array(fz_context *ctx, pdf_obj *obj);
42
int pdf_is_dict(fz_context *ctx, pdf_obj *obj);
43
int pdf_is_indirect(fz_context *ctx, pdf_obj *obj);
44
int pdf_is_stream(fz_context *ctx, pdf_document *doc, int num, int gen);
45
pdf_obj *pdf_resolve_obj(fz_context *ctx, pdf_obj *a);
46
int pdf_objcmp(fz_context *ctx, pdf_obj *a, pdf_obj *b);
47
int pdf_objcmp_resolve(fz_context *ctx, pdf_obj *a, pdf_obj *b);
48
49
static inline int pdf_name_eq(fz_context *ctx, pdf_obj *a, pdf_obj *b)
50
{
51
if (a == b)
52
return 1;
53
if (a < PDF_OBJ_NAME__LIMIT && b < PDF_OBJ_NAME__LIMIT)
54
return 0;
55
return !pdf_objcmp_resolve(ctx, a, b);
56
}
57
58
/* obj marking and unmarking functions - to avoid infinite recursions. */
59
int pdf_obj_marked(fz_context *ctx, pdf_obj *obj);
60
int pdf_mark_obj(fz_context *ctx, pdf_obj *obj);
61
void pdf_unmark_obj(fz_context *ctx, pdf_obj *obj);
62
63
/* obj memo functions - allows us to secretly remember "a memo" (a bool) in
64
* an object, and to read back whether there was a memo, and if so, what it
65
* was. */
66
void pdf_set_obj_memo(fz_context *ctx, pdf_obj *obj, int memo);
67
int pdf_obj_memo(fz_context *ctx, pdf_obj *obj, int *memo);
68
69
/* obj dirty bit support. */
70
int pdf_obj_is_dirty(fz_context *ctx, pdf_obj *obj);
71
void pdf_dirty_obj(fz_context *ctx, pdf_obj *obj);
72
void pdf_clean_obj(fz_context *ctx, pdf_obj *obj);
73
74
/* safe, silent failure, no error reporting on type mismatches */
75
int pdf_to_bool(fz_context *ctx, pdf_obj *obj);
76
int pdf_to_int(fz_context *ctx, pdf_obj *obj);
77
float pdf_to_real(fz_context *ctx, pdf_obj *obj);
78
char *pdf_to_name(fz_context *ctx, pdf_obj *obj);
79
char *pdf_to_str_buf(fz_context *ctx, pdf_obj *obj);
80
pdf_obj *pdf_to_dict(fz_context *ctx, pdf_obj *obj);
81
int pdf_to_str_len(fz_context *ctx, pdf_obj *obj);
82
int pdf_to_num(fz_context *ctx, pdf_obj *obj);
83
int pdf_to_gen(fz_context *ctx, pdf_obj *obj);
84
85
int pdf_array_len(fz_context *ctx, pdf_obj *array);
86
pdf_obj *pdf_array_get(fz_context *ctx, pdf_obj *array, int i);
87
void pdf_array_put(fz_context *ctx, pdf_obj *array, int i, pdf_obj *obj);
88
void pdf_array_put_drop(fz_context *ctx, pdf_obj *array, int i, pdf_obj *obj);
89
void pdf_array_push(fz_context *ctx, pdf_obj *array, pdf_obj *obj);
90
void pdf_array_push_drop(fz_context *ctx, pdf_obj *array, pdf_obj *obj);
91
void pdf_array_insert(fz_context *ctx, pdf_obj *array, pdf_obj *obj, int index);
92
void pdf_array_insert_drop(fz_context *ctx, pdf_obj *array, pdf_obj *obj, int index);
93
void pdf_array_delete(fz_context *ctx, pdf_obj *array, int index);
94
int pdf_array_contains(fz_context *ctx, pdf_obj *array, pdf_obj *obj);
95
96
int pdf_dict_len(fz_context *ctx, pdf_obj *dict);
97
pdf_obj *pdf_dict_get_key(fz_context *ctx, pdf_obj *dict, int idx);
98
pdf_obj *pdf_dict_get_val(fz_context *ctx, pdf_obj *dict, int idx);
99
void pdf_dict_put_val_drop(fz_context *ctx, pdf_obj *obj, int i, pdf_obj *new_obj);
100
pdf_obj *pdf_dict_get(fz_context *ctx, pdf_obj *dict, pdf_obj *key);
101
pdf_obj *pdf_dict_getp(fz_context *ctx, pdf_obj *dict, const char *path);
102
pdf_obj *pdf_dict_getl(fz_context *ctx, pdf_obj *dict, ...);
103
pdf_obj *pdf_dict_geta(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *abbrev);
104
pdf_obj *pdf_dict_gets(fz_context *ctx, pdf_obj *dict, const char *key);
105
pdf_obj *pdf_dict_getsa(fz_context *ctx, pdf_obj *dict, const char *key, const char *abbrev);
106
void pdf_dict_put(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val);
107
void pdf_dict_put_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val);
108
void pdf_dict_puts(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val);
109
void pdf_dict_puts_drop(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val);
110
void pdf_dict_putp(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val);
111
void pdf_dict_putp_drop(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val);
112
void pdf_dict_putl(fz_context *ctx, pdf_obj *dict, pdf_obj *val, ...);
113
void pdf_dict_putl_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *val, ...);
114
void pdf_dict_del(fz_context *ctx, pdf_obj *dict, pdf_obj *key);
115
void pdf_dict_dels(fz_context *ctx, pdf_obj *dict, const char *key);
116
void pdf_sort_dict(fz_context *ctx, pdf_obj *dict);
117
118
/*
119
Recurse through the object structure setting the node's parent_num to num.
120
parent_num is used when a subobject is to be changed during a document edit.
121
The whole containing hierarchy is moved to the incremental xref section, so
122
to be later written out as an incremental file update.
123
*/
124
void pdf_set_obj_parent(fz_context *ctx, pdf_obj *obj, int num);
125
126
int pdf_obj_refs(fz_context *ctx, pdf_obj *ref);
127
128
int pdf_obj_parent_num(fz_context *ctx, pdf_obj *obj);
129
130
int pdf_sprint_obj(fz_context *ctx, char *s, int n, pdf_obj *obj, int tight);
131
int pdf_fprint_obj(fz_context *ctx, FILE *fp, pdf_obj *obj, int tight);
132
int pdf_output_obj(fz_context *ctx, fz_output *out, pdf_obj *obj, int tight);
133
134
#ifndef NDEBUG
135
void pdf_print_obj(fz_context *ctx, pdf_obj *obj);
136
void pdf_print_ref(fz_context *ctx, pdf_obj *obj);
137
#endif
138
139
char *pdf_to_utf8(fz_context *ctx, pdf_document *doc, pdf_obj *src);
140
unsigned short *pdf_to_ucs2(fz_context *ctx, pdf_document *doc, pdf_obj *src);
141
pdf_obj *pdf_to_utf8_name(fz_context *ctx, pdf_document *doc, pdf_obj *src);
142
char *pdf_from_ucs2(fz_context *ctx, pdf_document *doc, unsigned short *str);
143
void pdf_to_ucs2_buf(fz_context *ctx, unsigned short *buffer, pdf_obj *src);
144
145
fz_rect *pdf_to_rect(fz_context *ctx, pdf_obj *array, fz_rect *rect);
146
fz_matrix *pdf_to_matrix(fz_context *ctx, pdf_obj *array, fz_matrix *mat);
147
148
pdf_document *pdf_get_indirect_document(fz_context *ctx, pdf_obj *obj);
149
void pdf_set_str_len(fz_context *ctx, pdf_obj *obj, int newlen);
150
void pdf_set_int(fz_context *ctx, pdf_obj *obj, int i);
151
152
#endif
153
154