Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/include/mupdf/pdf/object.h @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 // Copyright (C) 2004-2025 Artifex Software, Inc. | |
| 2 // | |
| 3 // This file is part of MuPDF. | |
| 4 // | |
| 5 // MuPDF is free software: you can redistribute it and/or modify it under the | |
| 6 // terms of the GNU Affero General Public License as published by the Free | |
| 7 // Software Foundation, either version 3 of the License, or (at your option) | |
| 8 // any later version. | |
| 9 // | |
| 10 // MuPDF is distributed in the hope that it will be useful, but WITHOUT ANY | |
| 11 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 12 // FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more | |
| 13 // details. | |
| 14 // | |
| 15 // You should have received a copy of the GNU Affero General Public License | |
| 16 // along with MuPDF. If not, see <https://www.gnu.org/licenses/agpl-3.0.en.html> | |
| 17 // | |
| 18 // Alternative licensing terms are available from the licensor. | |
| 19 // For commercial licensing, see <https://www.artifex.com/> or contact | |
| 20 // Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco, | |
| 21 // CA 94129, USA, for further information. | |
| 22 | |
| 23 #ifndef MUPDF_PDF_OBJECT_H | |
| 24 #define MUPDF_PDF_OBJECT_H | |
| 25 | |
| 26 #include "mupdf/fitz/stream.h" | |
| 27 | |
| 28 typedef struct pdf_document pdf_document; | |
| 29 typedef struct pdf_crypt pdf_crypt; | |
| 30 typedef struct pdf_journal pdf_journal; | |
| 31 | |
| 32 /* Defined in PDF 1.7 according to Acrobat limit. */ | |
| 33 #define PDF_MAX_OBJECT_NUMBER 8388607 | |
| 34 #define PDF_MAX_GEN_NUMBER 65535 | |
| 35 | |
| 36 /* | |
| 37 * Dynamic objects. | |
| 38 * The same type of objects as found in PDF and PostScript. | |
| 39 * Used by the filters and the mupdf parser. | |
| 40 */ | |
| 41 | |
| 42 typedef struct pdf_obj pdf_obj; | |
| 43 | |
| 44 pdf_obj *pdf_new_int(fz_context *ctx, int64_t i); | |
| 45 pdf_obj *pdf_new_real(fz_context *ctx, float f); | |
| 46 pdf_obj *pdf_new_name(fz_context *ctx, const char *str); | |
| 47 pdf_obj *pdf_new_string(fz_context *ctx, const char *str, size_t len); | |
| 48 | |
| 49 /* | |
| 50 Create a PDF 'text string' by encoding input string as either ASCII or UTF-16BE. | |
| 51 In theory, we could also use PDFDocEncoding. | |
| 52 */ | |
| 53 pdf_obj *pdf_new_text_string(fz_context *ctx, const char *s); | |
| 54 pdf_obj *pdf_new_indirect(fz_context *ctx, pdf_document *doc, int num, int gen); | |
| 55 pdf_obj *pdf_new_array(fz_context *ctx, pdf_document *doc, int initialcap); | |
| 56 pdf_obj *pdf_new_dict(fz_context *ctx, pdf_document *doc, int initialcap); | |
| 57 pdf_obj *pdf_new_point(fz_context *ctx, pdf_document *doc, fz_point point); | |
| 58 pdf_obj *pdf_new_rect(fz_context *ctx, pdf_document *doc, fz_rect rect); | |
| 59 pdf_obj *pdf_new_matrix(fz_context *ctx, pdf_document *doc, fz_matrix mtx); | |
| 60 pdf_obj *pdf_new_date(fz_context *ctx, pdf_document *doc, int64_t time); | |
| 61 pdf_obj *pdf_copy_array(fz_context *ctx, pdf_obj *array); | |
| 62 pdf_obj *pdf_copy_dict(fz_context *ctx, pdf_obj *dict); | |
| 63 pdf_obj *pdf_deep_copy_obj(fz_context *ctx, pdf_obj *obj); | |
| 64 | |
| 65 pdf_obj *pdf_keep_obj(fz_context *ctx, pdf_obj *obj); | |
| 66 void pdf_drop_obj(fz_context *ctx, pdf_obj *obj); | |
| 67 pdf_obj *pdf_drop_singleton_obj(fz_context *ctx, pdf_obj *obj); | |
| 68 | |
| 69 int pdf_is_null(fz_context *ctx, pdf_obj *obj); | |
| 70 int pdf_is_bool(fz_context *ctx, pdf_obj *obj); | |
| 71 int pdf_is_int(fz_context *ctx, pdf_obj *obj); | |
| 72 int pdf_is_real(fz_context *ctx, pdf_obj *obj); | |
| 73 int pdf_is_number(fz_context *ctx, pdf_obj *obj); | |
| 74 int pdf_is_name(fz_context *ctx, pdf_obj *obj); | |
| 75 int pdf_is_string(fz_context *ctx, pdf_obj *obj); | |
| 76 int pdf_is_array(fz_context *ctx, pdf_obj *obj); | |
| 77 int pdf_is_dict(fz_context *ctx, pdf_obj *obj); | |
| 78 int pdf_is_indirect(fz_context *ctx, pdf_obj *obj); | |
| 79 | |
| 80 /* | |
| 81 Check if an object is a stream or not. | |
| 82 */ | |
| 83 int pdf_obj_num_is_stream(fz_context *ctx, pdf_document *doc, int num); | |
| 84 int pdf_is_stream(fz_context *ctx, pdf_obj *obj); | |
| 85 | |
| 86 /* Compare 2 objects. Returns 0 on match, non-zero on mismatch. | |
| 87 * Streams always mismatch. | |
| 88 */ | |
| 89 int pdf_objcmp(fz_context *ctx, pdf_obj *a, pdf_obj *b); | |
| 90 int pdf_objcmp_resolve(fz_context *ctx, pdf_obj *a, pdf_obj *b); | |
| 91 | |
| 92 /* Compare 2 objects. Returns 0 on match, non-zero on mismatch. | |
| 93 * Stream contents are explicitly checked. | |
| 94 */ | |
| 95 int pdf_objcmp_deep(fz_context *ctx, pdf_obj *a, pdf_obj *b); | |
| 96 | |
| 97 int pdf_name_eq(fz_context *ctx, pdf_obj *a, pdf_obj *b); | |
| 98 | |
| 99 int pdf_obj_marked(fz_context *ctx, pdf_obj *obj); | |
| 100 int pdf_mark_obj(fz_context *ctx, pdf_obj *obj); | |
| 101 void pdf_unmark_obj(fz_context *ctx, pdf_obj *obj); | |
| 102 | |
| 103 typedef struct pdf_cycle_list pdf_cycle_list; | |
| 104 struct pdf_cycle_list { | |
| 105 pdf_cycle_list *up; | |
| 106 int num; | |
| 107 }; | |
| 108 int pdf_cycle(fz_context *ctx, pdf_cycle_list *here, pdf_cycle_list *prev, pdf_obj *obj); | |
| 109 | |
| 110 typedef struct | |
| 111 { | |
| 112 int len; | |
| 113 unsigned char bits[FZ_FLEXIBLE_ARRAY]; | |
| 114 } pdf_mark_bits; | |
| 115 | |
| 116 pdf_mark_bits *pdf_new_mark_bits(fz_context *ctx, pdf_document *doc); | |
| 117 void pdf_drop_mark_bits(fz_context *ctx, pdf_mark_bits *marks); | |
| 118 void pdf_mark_bits_reset(fz_context *ctx, pdf_mark_bits *marks); | |
| 119 int pdf_mark_bits_set(fz_context *ctx, pdf_mark_bits *marks, pdf_obj *obj); | |
| 120 | |
| 121 typedef struct | |
| 122 { | |
| 123 int len; | |
| 124 int max; | |
| 125 int *list; | |
| 126 int local_list[8]; | |
| 127 } pdf_mark_list; | |
| 128 | |
| 129 int pdf_mark_list_push(fz_context *ctx, pdf_mark_list *list, pdf_obj *obj); | |
| 130 void pdf_mark_list_pop(fz_context *ctx, pdf_mark_list *list); | |
| 131 int pdf_mark_list_check(fz_context *ctx, pdf_mark_list *list, pdf_obj *obj); | |
| 132 void pdf_mark_list_init(fz_context *ctx, pdf_mark_list *list); | |
| 133 void pdf_mark_list_free(fz_context *ctx, pdf_mark_list *list); | |
| 134 | |
| 135 void pdf_set_obj_memo(fz_context *ctx, pdf_obj *obj, int bit, int memo); | |
| 136 int pdf_obj_memo(fz_context *ctx, pdf_obj *obj, int bit, int *memo); | |
| 137 | |
| 138 int pdf_obj_is_dirty(fz_context *ctx, pdf_obj *obj); | |
| 139 void pdf_dirty_obj(fz_context *ctx, pdf_obj *obj); | |
| 140 void pdf_clean_obj(fz_context *ctx, pdf_obj *obj); | |
| 141 | |
| 142 int pdf_to_bool(fz_context *ctx, pdf_obj *obj); | |
| 143 int pdf_to_int(fz_context *ctx, pdf_obj *obj); | |
| 144 int64_t pdf_to_int64(fz_context *ctx, pdf_obj *obj); | |
| 145 float pdf_to_real(fz_context *ctx, pdf_obj *obj); | |
| 146 const char *pdf_to_name(fz_context *ctx, pdf_obj *obj); | |
| 147 const char *pdf_to_text_string(fz_context *ctx, pdf_obj *obj); | |
| 148 const char *pdf_to_string(fz_context *ctx, pdf_obj *obj, size_t *sizep); | |
| 149 char *pdf_to_str_buf(fz_context *ctx, pdf_obj *obj); | |
| 150 size_t pdf_to_str_len(fz_context *ctx, pdf_obj *obj); | |
| 151 int pdf_to_num(fz_context *ctx, pdf_obj *obj); | |
| 152 int pdf_to_gen(fz_context *ctx, pdf_obj *obj); | |
| 153 | |
| 154 int pdf_to_bool_default(fz_context *ctx, pdf_obj *obj, int def); | |
| 155 int pdf_to_int_default(fz_context *ctx, pdf_obj *obj, int def); | |
| 156 float pdf_to_real_default(fz_context *ctx, pdf_obj *obj, float def); | |
| 157 | |
| 158 int pdf_array_len(fz_context *ctx, pdf_obj *array); | |
| 159 pdf_obj *pdf_array_get(fz_context *ctx, pdf_obj *array, int i); | |
| 160 void pdf_array_put(fz_context *ctx, pdf_obj *array, int i, pdf_obj *obj); | |
| 161 void pdf_array_put_drop(fz_context *ctx, pdf_obj *array, int i, pdf_obj *obj); | |
| 162 void pdf_array_push(fz_context *ctx, pdf_obj *array, pdf_obj *obj); | |
| 163 void pdf_array_push_drop(fz_context *ctx, pdf_obj *array, pdf_obj *obj); | |
| 164 void pdf_array_insert(fz_context *ctx, pdf_obj *array, pdf_obj *obj, int index); | |
| 165 void pdf_array_insert_drop(fz_context *ctx, pdf_obj *array, pdf_obj *obj, int index); | |
| 166 void pdf_array_delete(fz_context *ctx, pdf_obj *array, int index); | |
| 167 int pdf_array_find(fz_context *ctx, pdf_obj *array, pdf_obj *obj); | |
| 168 int pdf_array_contains(fz_context *ctx, pdf_obj *array, pdf_obj *obj); | |
| 169 | |
| 170 int pdf_dict_len(fz_context *ctx, pdf_obj *dict); | |
| 171 pdf_obj *pdf_dict_get_key(fz_context *ctx, pdf_obj *dict, int idx); | |
| 172 pdf_obj *pdf_dict_get_val(fz_context *ctx, pdf_obj *dict, int idx); | |
| 173 void pdf_dict_put_val_null(fz_context *ctx, pdf_obj *obj, int idx); | |
| 174 pdf_obj *pdf_dict_get(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 175 pdf_obj *pdf_dict_getp(fz_context *ctx, pdf_obj *dict, const char *path); | |
| 176 pdf_obj *pdf_dict_getl(fz_context *ctx, pdf_obj *dict, ...); | |
| 177 pdf_obj *pdf_dict_geta(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *abbrev); | |
| 178 pdf_obj *pdf_dict_gets(fz_context *ctx, pdf_obj *dict, const char *key); | |
| 179 pdf_obj *pdf_dict_getsa(fz_context *ctx, pdf_obj *dict, const char *key, const char *abbrev); | |
| 180 pdf_obj *pdf_dict_get_inheritable(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 181 pdf_obj *pdf_dict_getp_inheritable(fz_context *ctx, pdf_obj *dict, const char *path); | |
| 182 pdf_obj *pdf_dict_gets_inheritable(fz_context *ctx, pdf_obj *dict, const char *key); | |
| 183 void pdf_dict_put(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val); | |
| 184 void pdf_dict_put_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val); | |
| 185 void pdf_dict_get_put_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val, pdf_obj **old_val); | |
| 186 void pdf_dict_puts(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val); | |
| 187 void pdf_dict_puts_drop(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val); | |
| 188 void pdf_dict_putp(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val); | |
| 189 void pdf_dict_putp_drop(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val); | |
| 190 void pdf_dict_putl(fz_context *ctx, pdf_obj *dict, pdf_obj *val, ...); | |
| 191 void pdf_dict_putl_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *val, ...); | |
| 192 void pdf_dict_del(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 193 void pdf_dict_dels(fz_context *ctx, pdf_obj *dict, const char *key); | |
| 194 void pdf_sort_dict(fz_context *ctx, pdf_obj *dict); | |
| 195 | |
| 196 void pdf_dict_put_bool(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int x); | |
| 197 void pdf_dict_put_int(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int64_t x); | |
| 198 void pdf_dict_put_real(fz_context *ctx, pdf_obj *dict, pdf_obj *key, double x); | |
| 199 void pdf_dict_put_name(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x); | |
| 200 void pdf_dict_put_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x, size_t n); | |
| 201 void pdf_dict_put_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x); | |
| 202 void pdf_dict_put_indirect(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int num); | |
| 203 void pdf_dict_put_point(fz_context *ctx, pdf_obj *dict, pdf_obj *key, fz_point x); | |
| 204 void pdf_dict_put_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key, fz_rect x); | |
| 205 void pdf_dict_put_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key, fz_matrix x); | |
| 206 void pdf_dict_put_date(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int64_t time); | |
| 207 pdf_obj *pdf_dict_put_array(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int initial); | |
| 208 pdf_obj *pdf_dict_put_dict(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int initial); | |
| 209 pdf_obj *pdf_dict_puts_dict(fz_context *ctx, pdf_obj *dict, const char *key, int initial); | |
| 210 | |
| 211 int pdf_dict_get_bool(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 212 int pdf_dict_get_int(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 213 int64_t pdf_dict_get_int64(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 214 float pdf_dict_get_real(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 215 const char *pdf_dict_get_name(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 216 const char *pdf_dict_get_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, size_t *sizep); | |
| 217 const char *pdf_dict_get_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 218 const char *pdf_dict_get_text_string_opt(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 219 fz_point pdf_dict_get_point(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 220 fz_rect pdf_dict_get_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 221 fz_matrix pdf_dict_get_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 222 int64_t pdf_dict_get_date(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 223 | |
| 224 int pdf_dict_get_bool_default(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int def); | |
| 225 int pdf_dict_get_int_default(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int def); | |
| 226 float pdf_dict_get_real_default(fz_context *ctx, pdf_obj *dict, pdf_obj *key, float def); | |
| 227 | |
| 228 int pdf_dict_get_inheritable_bool(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 229 int pdf_dict_get_inheritable_int(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 230 int64_t pdf_dict_get_inheritable_int64(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 231 float pdf_dict_get_inheritable_real(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 232 const char *pdf_dict_get_inheritable_name(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 233 const char *pdf_dict_get_inheritable_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, size_t *sizep); | |
| 234 const char *pdf_dict_get_inheritable_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 235 fz_rect pdf_dict_get_inheritable_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 236 fz_matrix pdf_dict_get_inheritable_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 237 int64_t pdf_dict_get_inheritable_date(fz_context *ctx, pdf_obj *dict, pdf_obj *key); | |
| 238 | |
| 239 void pdf_array_push_bool(fz_context *ctx, pdf_obj *array, int x); | |
| 240 void pdf_array_push_int(fz_context *ctx, pdf_obj *array, int64_t x); | |
| 241 void pdf_array_push_real(fz_context *ctx, pdf_obj *array, double x); | |
| 242 void pdf_array_push_name(fz_context *ctx, pdf_obj *array, const char *x); | |
| 243 void pdf_array_push_string(fz_context *ctx, pdf_obj *array, const char *x, size_t n); | |
| 244 void pdf_array_push_text_string(fz_context *ctx, pdf_obj *array, const char *x); | |
| 245 pdf_obj *pdf_array_push_array(fz_context *ctx, pdf_obj *array, int initial); | |
| 246 pdf_obj *pdf_array_push_dict(fz_context *ctx, pdf_obj *array, int initial); | |
| 247 | |
| 248 void pdf_array_put_bool(fz_context *ctx, pdf_obj *array, int i, int x); | |
| 249 void pdf_array_put_int(fz_context *ctx, pdf_obj *array, int i, int64_t x); | |
| 250 void pdf_array_put_real(fz_context *ctx, pdf_obj *array, int i, double x); | |
| 251 void pdf_array_put_name(fz_context *ctx, pdf_obj *array, int i, const char *x); | |
| 252 void pdf_array_put_string(fz_context *ctx, pdf_obj *array, int i, const char *x, size_t n); | |
| 253 void pdf_array_put_text_string(fz_context *ctx, pdf_obj *array, int i, const char *x); | |
| 254 pdf_obj *pdf_array_put_array(fz_context *ctx, pdf_obj *array, int i, int initial); | |
| 255 pdf_obj *pdf_array_put_dict(fz_context *ctx, pdf_obj *array, int i, int initial); | |
| 256 | |
| 257 int pdf_array_get_bool(fz_context *ctx, pdf_obj *array, int index); | |
| 258 int pdf_array_get_int(fz_context *ctx, pdf_obj *array, int index); | |
| 259 float pdf_array_get_real(fz_context *ctx, pdf_obj *array, int index); | |
| 260 const char *pdf_array_get_name(fz_context *ctx, pdf_obj *array, int index); | |
| 261 const char *pdf_array_get_string(fz_context *ctx, pdf_obj *array, int index, size_t *sizep); | |
| 262 const char *pdf_array_get_text_string(fz_context *ctx, pdf_obj *array, int index); | |
| 263 fz_rect pdf_array_get_rect(fz_context *ctx, pdf_obj *array, int index); | |
| 264 fz_matrix pdf_array_get_matrix(fz_context *ctx, pdf_obj *array, int index); | |
| 265 | |
| 266 void pdf_set_obj_parent(fz_context *ctx, pdf_obj *obj, int num); | |
| 267 | |
| 268 int pdf_obj_refs(fz_context *ctx, pdf_obj *ref); | |
| 269 | |
| 270 int pdf_obj_parent_num(fz_context *ctx, pdf_obj *obj); | |
| 271 | |
| 272 char *pdf_sprint_obj(fz_context *ctx, char *buf, size_t cap, size_t *len, pdf_obj *obj, int tight, int ascii); | |
| 273 void pdf_print_obj(fz_context *ctx, fz_output *out, pdf_obj *obj, int tight, int ascii); | |
| 274 void pdf_print_encrypted_obj(fz_context *ctx, fz_output *out, pdf_obj *obj, int tight, int ascii, pdf_crypt *crypt, int num, int gen, int *sep); | |
| 275 | |
| 276 void pdf_debug_obj(fz_context *ctx, pdf_obj *obj); | |
| 277 void pdf_debug_ref(fz_context *ctx, pdf_obj *obj); | |
| 278 | |
| 279 /* | |
| 280 Convert Unicode/PdfDocEncoding string into utf-8. | |
| 281 | |
| 282 The returned string must be freed by the caller. | |
| 283 */ | |
| 284 char *pdf_new_utf8_from_pdf_string(fz_context *ctx, const char *srcptr, size_t srclen); | |
| 285 | |
| 286 /* | |
| 287 Convert text string object to UTF-8. | |
| 288 | |
| 289 The returned string must be freed by the caller. | |
| 290 */ | |
| 291 char *pdf_new_utf8_from_pdf_string_obj(fz_context *ctx, pdf_obj *src); | |
| 292 | |
| 293 /* | |
| 294 Load text stream and convert to UTF-8. | |
| 295 | |
| 296 The returned string must be freed by the caller. | |
| 297 */ | |
| 298 char *pdf_new_utf8_from_pdf_stream_obj(fz_context *ctx, pdf_obj *src); | |
| 299 | |
| 300 /* | |
| 301 Load text stream or text string and convert to UTF-8. | |
| 302 | |
| 303 The returned string must be freed by the caller. | |
| 304 */ | |
| 305 char *pdf_load_stream_or_string_as_utf8(fz_context *ctx, pdf_obj *src); | |
| 306 | |
| 307 fz_quad pdf_to_quad(fz_context *ctx, pdf_obj *array, int offset); | |
| 308 fz_point pdf_to_point(fz_context *ctx, pdf_obj *array, int offset); | |
| 309 fz_rect pdf_to_rect(fz_context *ctx, pdf_obj *array); | |
| 310 fz_matrix pdf_to_matrix(fz_context *ctx, pdf_obj *array); | |
| 311 int64_t pdf_to_date(fz_context *ctx, pdf_obj *time); | |
| 312 | |
| 313 /* | |
| 314 pdf_get_indirect_document and pdf_get_bound_document are | |
| 315 now deprecated. Please do not use them in future. They will | |
| 316 be removed. | |
| 317 | |
| 318 Please use pdf_pin_document instead. | |
| 319 */ | |
| 320 pdf_document *pdf_get_indirect_document(fz_context *ctx, pdf_obj *obj); | |
| 321 pdf_document *pdf_get_bound_document(fz_context *ctx, pdf_obj *obj); | |
| 322 | |
| 323 /* | |
| 324 pdf_pin_document returns a new reference to the document | |
| 325 to which obj is bound. The caller is responsible for | |
| 326 dropping this reference once they have finished with it. | |
| 327 | |
| 328 This is a replacement for pdf_get_indirect_document | |
| 329 and pdf_get_bound_document that are now deprecated. Those | |
| 330 returned a borrowed reference that did not need to be | |
| 331 dropped. | |
| 332 | |
| 333 Note that this can validly return NULL in various cases: | |
| 334 1) When the object is of a simple type (such as a number | |
| 335 or a string), it contains no reference to the enclosing | |
| 336 document. 2) When the object has yet to be inserted into | |
| 337 a PDF document (such as during parsing). 3) And (in | |
| 338 future versions) when the document has been destroyed | |
| 339 but the object reference remains. | |
| 340 | |
| 341 It is the caller's responsibility to deal with a NULL | |
| 342 return here. | |
| 343 */ | |
| 344 pdf_document *pdf_pin_document(fz_context *ctx, pdf_obj *obj); | |
| 345 | |
| 346 void pdf_set_int(fz_context *ctx, pdf_obj *obj, int64_t i); | |
| 347 | |
| 348 /* Voodoo to create PDF_NAME(Foo) macros from name-table.h */ | |
| 349 | |
| 350 #define PDF_NAME(X) ((pdf_obj*)(intptr_t)PDF_ENUM_NAME_##X) | |
| 351 | |
| 352 #define PDF_MAKE_NAME(STRING,NAME) PDF_ENUM_NAME_##NAME, | |
| 353 enum { | |
| 354 PDF_ENUM_NULL, | |
| 355 PDF_ENUM_TRUE, | |
| 356 PDF_ENUM_FALSE, | |
| 357 #include "mupdf/pdf/name-table.h" | |
| 358 PDF_ENUM_LIMIT, | |
| 359 }; | |
| 360 #undef PDF_MAKE_NAME | |
| 361 | |
| 362 #define PDF_NULL ((pdf_obj*)(intptr_t)PDF_ENUM_NULL) | |
| 363 #define PDF_TRUE ((pdf_obj*)(intptr_t)PDF_ENUM_TRUE) | |
| 364 #define PDF_FALSE ((pdf_obj*)(intptr_t)PDF_ENUM_FALSE) | |
| 365 #define PDF_LIMIT ((pdf_obj*)(intptr_t)PDF_ENUM_LIMIT) | |
| 366 | |
| 367 | |
| 368 /* Implementation details: subject to change. */ | |
| 369 | |
| 370 /* | |
| 371 for use by pdf_crypt_obj_imp to decrypt AES string in place | |
| 372 */ | |
| 373 void pdf_set_str_len(fz_context *ctx, pdf_obj *obj, size_t newlen); | |
| 374 | |
| 375 | |
| 376 /* Journalling */ | |
| 377 | |
| 378 /* Call this to enable journalling on a given document. */ | |
| 379 void pdf_enable_journal(fz_context *ctx, pdf_document *doc); | |
| 380 | |
| 381 /* Call this to start an operation. Undo/redo works at 'operation' | |
| 382 * granularity. Nested operations are all counted within the outermost | |
| 383 * operation. Any modification performed on a journalled PDF without an | |
| 384 * operation having been started will throw an error. */ | |
| 385 void pdf_begin_operation(fz_context *ctx, pdf_document *doc, const char *operation); | |
| 386 | |
| 387 /* Call this to start an implicit operation. Implicit operations are | |
| 388 * operations that happen as a consequence of things like updating | |
| 389 * an annotation. They get rolled into the previous operation, because | |
| 390 * they generally happen as a result of them. */ | |
| 391 void pdf_begin_implicit_operation(fz_context *ctx, pdf_document *doc); | |
| 392 | |
| 393 /* Call this to end an operation. */ | |
| 394 void pdf_end_operation(fz_context *ctx, pdf_document *doc); | |
| 395 | |
| 396 /* Call this to abandon an operation. Revert to the state | |
| 397 * when you began. */ | |
| 398 void pdf_abandon_operation(fz_context *ctx, pdf_document *doc); | |
| 399 | |
| 400 /* Call this to find out how many undo/redo steps there are, and the | |
| 401 * current position we are within those. 0 = original document, | |
| 402 * *steps = final edited version. */ | |
| 403 int pdf_undoredo_state(fz_context *ctx, pdf_document *doc, int *steps); | |
| 404 | |
| 405 /* Call this to find the title of the operation within the undo state. */ | |
| 406 const char *pdf_undoredo_step(fz_context *ctx, pdf_document *doc, int step); | |
| 407 | |
| 408 /* Helper functions to identify if we are in a state to be able to undo | |
| 409 * or redo. */ | |
| 410 int pdf_can_undo(fz_context *ctx, pdf_document *doc); | |
| 411 int pdf_can_redo(fz_context *ctx, pdf_document *doc); | |
| 412 | |
| 413 /* Move backwards in the undo history. Throws an error if we are at the | |
| 414 * start. Any edits to the document at this point will discard all | |
| 415 * subsequent history. */ | |
| 416 void pdf_undo(fz_context *ctx, pdf_document *doc); | |
| 417 | |
| 418 /* Move forwards in the undo history. Throws an error if we are at the | |
| 419 * end. */ | |
| 420 void pdf_redo(fz_context *ctx, pdf_document *doc); | |
| 421 | |
| 422 /* Called to reset the entire history. This is called implicitly when | |
| 423 * a non-undoable change occurs (such as a pdf repair). */ | |
| 424 void pdf_discard_journal(fz_context *ctx, pdf_journal *journal); | |
| 425 | |
| 426 /* Internal destructor. */ | |
| 427 void pdf_drop_journal(fz_context *ctx, pdf_journal *journal); | |
| 428 | |
| 429 /* Internal call as part of saving a snapshot of a PDF document. */ | |
| 430 void pdf_serialise_journal(fz_context *ctx, pdf_document *doc, fz_output *out); | |
| 431 | |
| 432 /* Internal call as part of loading a snapshot of a PDF document. */ | |
| 433 void pdf_deserialise_journal(fz_context *ctx, pdf_document *doc, fz_stream *stm); | |
| 434 | |
| 435 /* Internal call as part of creating objects. */ | |
| 436 void pdf_add_journal_fragment(fz_context *ctx, pdf_document *doc, int parent, pdf_obj *copy, fz_buffer *copy_stream, int newobj); | |
| 437 | |
| 438 char *pdf_format_date(fz_context *ctx, int64_t time, char *s, size_t n); | |
| 439 int64_t pdf_parse_date(fz_context *ctx, const char *s); | |
| 440 | |
| 441 int pdf_is_image_stream(fz_context *ctx, pdf_obj *obj); | |
| 442 | |
| 443 #endif |
