comparison mupdf-source/platform/java/mupdf_native.c @ 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 /*
24 NOTE!
25 The JNI specification states that New<PrimitiveType>Array() do not
26 throw java exceptions, but many JVMs (e.g. Android's) treat them the
27 same way as NewObjectArray which may throw e.g. OutOfMemoryError.
28 So after calling these functions it is as important to call
29 ExceptionCheck() to check for exceptions as for functions that
30 are marked as throwing exceptions according to the JNI specification.
31 */
32
33 #include <jni.h>
34 #ifdef _WIN32
35 #include <windows.h>
36 #else
37 #include <pthread.h>
38 #endif
39
40 #include "mupdf/fitz.h"
41 #include "mupdf/ucdn.h"
42 #include "mupdf/pdf.h"
43
44 #include "mupdf_native.h" /* javah generated prototypes */
45
46 #include <assert.h>
47 #include <stdio.h>
48 #include <stdlib.h>
49 #include <string.h>
50 #include <limits.h>
51
52 #ifdef HAVE_ANDROID
53 #include <android/log.h>
54 #include <android/bitmap.h>
55 #define LOG_TAG "libmupdf"
56 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
57 #define LOGT(...) __android_log_print(ANDROID_LOG_INFO,"alert",__VA_ARGS__)
58 #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
59 #else
60 #undef LOGI
61 #undef LOGE
62 #define LOGI(...) do{printf(__VA_ARGS__);putchar('\n');}while(0)
63 #define LOGE(...) do{printf(__VA_ARGS__);putchar('\n');}while(0)
64 #endif
65
66 #define MY_JNI_VERSION JNI_VERSION_1_6
67
68 #define FUN(A) Java_com_artifex_mupdf_fitz_ ## A
69 #define PKG "com/artifex/mupdf/fitz/"
70
71 /* Do our best to avoid type casting warnings. */
72
73 #define CAST(type, var) (type)pointer_cast(var)
74
75 static inline void *pointer_cast(jlong l)
76 {
77 return (void *)(intptr_t)l;
78 }
79
80 static inline jlong jlong_cast(const void *p)
81 {
82 return (jlong)(intptr_t)p;
83 }
84
85 /* Our VM */
86 static JavaVM *jvm = NULL;
87
88 /* All the cached classes/mids/fids we need. */
89
90 static jclass cls_AbortException;
91 static jclass cls_AlertResult;
92 static jclass cls_Archive;
93 static jclass cls_ArrayList;
94 static jclass cls_ArrayOfQuad;
95 static jclass cls_BarcodeInfo;
96 static jclass cls_Buffer;
97 static jclass cls_ColorSpace;
98 static jclass cls_Context;
99 static jclass cls_Context_Log;
100 static jclass cls_Context_Version;
101 static jclass cls_Cookie;
102 static jclass cls_DefaultAppearance;
103 static jclass cls_DefaultColorSpaces;
104 static jclass cls_Device;
105 static jclass cls_DisplayList;
106 static jclass cls_Document;
107 static jclass cls_DocumentWriter;
108 static jclass cls_DocumentWriter_OCRListener;
109 static jclass cls_DOM;
110 static jclass cls_DOMAttribute;
111 static jclass cls_FitzInputStream;
112 static jclass cls_Float;
113 static jclass cls_FloatArray;
114 static jclass cls_Font;
115 static jclass cls_Story;
116 static jclass cls_IOException;
117 static jclass cls_IllegalArgumentException;
118 static jclass cls_Image;
119 static jclass cls_IndexOutOfBoundsException;
120 static jclass cls_IntegerArray;
121 static jclass cls_Link;
122 static jclass cls_LinkDestination;
123 static jclass cls_Location;
124 static jclass cls_Matrix;
125 static jclass cls_MultiArchive;
126 static jclass cls_NativeDevice;
127 static jclass cls_NullPointerException;
128 static jclass cls_Object;
129 static jclass cls_OutOfMemoryError;
130 static jclass cls_Outline;
131 static jclass cls_OutlineItem;
132 static jclass cls_OutlineIterator;
133 static jclass cls_PDFAnnotation;
134 static jclass cls_PDFDocument;
135 static jclass cls_PDFDocument_JsEventListener;
136 static jclass cls_PDFDocument_PDFEmbeddedFileParams;
137 static jclass cls_PDFGraftMap;
138 static jclass cls_PDFObject;
139 static jclass cls_PDFPage;
140 static jclass cls_PDFProcessor;
141 static jclass cls_PDFWidget;
142 static jclass cls_PKCS7DistinguishedName;
143 static jclass cls_PKCS7Signer;
144 static jclass cls_PKCS7Verifier;
145 static jclass cls_Page;
146 static jclass cls_Path;
147 static jclass cls_PathWalker;
148 static jclass cls_Pixmap;
149 static jclass cls_Point;
150 static jclass cls_Quad;
151 static jclass cls_Rect;
152 static jclass cls_RuntimeException;
153 static jclass cls_SeekableInputStream;
154 static jclass cls_SeekableOutputStream;
155 static jclass cls_SeekableStream;
156 static jclass cls_Shade;
157 static jclass cls_String;
158 static jclass cls_StrokeState;
159 static jclass cls_StructuredText;
160 static jclass cls_StructuredTextWalker;
161 static jclass cls_StructuredTextWalker_VectorInfo;
162 static jclass cls_Text;
163 static jclass cls_TextBlock;
164 static jclass cls_TextChar;
165 static jclass cls_TextLine;
166 static jclass cls_TextWalker;
167 static jclass cls_TextWidgetCharLayout;
168 static jclass cls_TextWidgetLayout;
169 static jclass cls_TextWidgetLineLayout;
170 static jclass cls_TreeArchive;
171 static jclass cls_TryLaterException;
172 static jclass cls_UnsupportedOperationException;
173
174 static jfieldID fid_AlertResult_buttonPressed;
175 static jfieldID fid_AlertResult_checkboxChecked;
176 static jfieldID fid_Archive_pointer;
177 static jfieldID fid_BarcodeInfo_type;
178 static jfieldID fid_BarcodeInfo_contents;
179 static jfieldID fid_Buffer_pointer;
180 static jfieldID fid_ColorSpace_pointer;
181 static jfieldID fid_Context_Version_major;
182 static jfieldID fid_Context_Version_minor;
183 static jfieldID fid_Context_Version_patch;
184 static jfieldID fid_Context_Version_version;
185 static jfieldID fid_Context_lock;
186 static jfieldID fid_Context_log;
187 static jfieldID fid_Cookie_pointer;
188 static jfieldID fid_DefaultAppearance_color;
189 static jfieldID fid_DefaultAppearance_font;
190 static jfieldID fid_DefaultAppearance_size;
191 static jfieldID fid_DefaultColorSpaces_pointer;
192 static jfieldID fid_Device_pointer;
193 static jfieldID fid_DisplayList_pointer;
194 static jfieldID fid_DocumentWriter_ocrlistener;
195 static jfieldID fid_DocumentWriter_pointer;
196 static jfieldID fid_Document_pointer;
197 static jfieldID fid_DOM_pointer;
198 static jfieldID fid_DOMAttribute_attribute;
199 static jfieldID fid_DOMAttribute_value;
200 static jfieldID fid_FitzInputStream_closed;
201 static jfieldID fid_FitzInputStream_markpos;
202 static jfieldID fid_FitzInputStream_pointer;
203 static jfieldID fid_Font_pointer;
204 static jfieldID fid_Story_pointer;
205 static jfieldID fid_Image_pointer;
206 static jfieldID fid_Link_pointer;
207 static jfieldID fid_LinkDestination_chapter;
208 static jfieldID fid_LinkDestination_height;
209 static jfieldID fid_LinkDestination_page;
210 static jfieldID fid_LinkDestination_type;
211 static jfieldID fid_LinkDestination_width;
212 static jfieldID fid_LinkDestination_x;
213 static jfieldID fid_LinkDestination_y;
214 static jfieldID fid_LinkDestination_zoom;
215 static jfieldID fid_Matrix_a;
216 static jfieldID fid_Matrix_b;
217 static jfieldID fid_Matrix_c;
218 static jfieldID fid_Matrix_d;
219 static jfieldID fid_Matrix_e;
220 static jfieldID fid_Matrix_f;
221 static jfieldID fid_MultiArchive_pointer;
222 static jfieldID fid_NativeDevice_nativeInfo;
223 static jfieldID fid_NativeDevice_nativeResource;
224 static jfieldID fid_OutlineIterator_pointer;
225 static jfieldID fid_PDFAnnotation_pointer;
226 static jfieldID fid_PDFDocument_pointer;
227 static jfieldID fid_PDFGraftMap_pointer;
228 static jfieldID fid_PDFObject_Null;
229 static jfieldID fid_PDFObject_pointer;
230 static jfieldID fid_PDFPage_pointer;
231 static jfieldID fid_PDFWidget_fieldFlags;
232 static jfieldID fid_PDFWidget_fieldType;
233 static jfieldID fid_PDFWidget_maxLen;
234 static jfieldID fid_PDFWidget_options;
235 static jfieldID fid_PDFWidget_pointer;
236 static jfieldID fid_PDFWidget_textFormat;
237 static jfieldID fid_PKCS7DistinguishedName_c;
238 static jfieldID fid_PKCS7DistinguishedName_cn;
239 static jfieldID fid_PKCS7DistinguishedName_email;
240 static jfieldID fid_PKCS7DistinguishedName_o;
241 static jfieldID fid_PKCS7DistinguishedName_ou;
242 static jfieldID fid_PKCS7Signer_pointer;
243 static jfieldID fid_PKCS7Verifier_pointer;
244 static jfieldID fid_Page_pointer;
245 static jfieldID fid_Path_pointer;
246 static jfieldID fid_Pixmap_pointer;
247 static jfieldID fid_Point_x;
248 static jfieldID fid_Point_y;
249 static jfieldID fid_Quad_ll_x;
250 static jfieldID fid_Quad_ll_y;
251 static jfieldID fid_Quad_lr_x;
252 static jfieldID fid_Quad_lr_y;
253 static jfieldID fid_Quad_ul_x;
254 static jfieldID fid_Quad_ul_y;
255 static jfieldID fid_Quad_ur_x;
256 static jfieldID fid_Quad_ur_y;
257 static jfieldID fid_Rect_x0;
258 static jfieldID fid_Rect_x1;
259 static jfieldID fid_Rect_y0;
260 static jfieldID fid_Rect_y1;
261 static jfieldID fid_Shade_pointer;
262 static jfieldID fid_StrokeState_pointer;
263 static jfieldID fid_StructuredText_pointer;
264 static jfieldID fid_StructuredTextWalker_VectorInfo_isRectangle;
265 static jfieldID fid_StructuredTextWalker_VectorInfo_isStroked;
266 static jfieldID fid_TextBlock_bbox;
267 static jfieldID fid_TextBlock_lines;
268 static jfieldID fid_TextChar_c;
269 static jfieldID fid_TextChar_quad;
270 static jfieldID fid_TextLine_bbox;
271 static jfieldID fid_TextLine_chars;
272 static jfieldID fid_TextWidgetCharLayout_advance;
273 static jfieldID fid_TextWidgetCharLayout_index;
274 static jfieldID fid_TextWidgetCharLayout_rect;
275 static jfieldID fid_TextWidgetCharLayout_x;
276 static jfieldID fid_TextWidgetLayout_invMatrix;
277 static jfieldID fid_TextWidgetLayout_lines;
278 static jfieldID fid_TextWidgetLayout_matrix;
279 static jfieldID fid_TextWidgetLineLayout_chars;
280 static jfieldID fid_TextWidgetLineLayout_fontSize;
281 static jfieldID fid_TextWidgetLineLayout_index;
282 static jfieldID fid_TextWidgetLineLayout_rect;
283 static jfieldID fid_TextWidgetLineLayout_x;
284 static jfieldID fid_TextWidgetLineLayout_y;
285 static jfieldID fid_Text_pointer;
286 static jfieldID fid_TreeArchive_pointer;
287
288 static jmethodID mid_Archive_init;
289 static jmethodID mid_ArrayList_add;
290 static jmethodID mid_ArrayList_toArray;
291 static jmethodID mid_ArrayList_init;
292 static jmethodID mid_BarcodeInfo_init;
293 static jmethodID mid_Buffer_init;
294 static jmethodID mid_ColorSpace_fromPointer;
295 static jmethodID mid_ColorSpace_init;
296 static jmethodID mid_Context_Version_init;
297 static jmethodID mid_Context_Log_error;
298 static jmethodID mid_Context_Log_warning;
299 static jmethodID mid_DefaultAppearance_init;
300 static jmethodID mid_DefaultColorSpaces_init;
301 static jmethodID mid_DefaultColorSpaces_getDefaultGray;
302 static jmethodID mid_DefaultColorSpaces_getDefaultRGB;
303 static jmethodID mid_DefaultColorSpaces_getDefaultCMYK;
304 static jmethodID mid_DefaultColorSpaces_getOutputIntent;
305 static jmethodID mid_DefaultColorSpaces_setDefaultGray;
306 static jmethodID mid_DefaultColorSpaces_setDefaultRGB;
307 static jmethodID mid_DefaultColorSpaces_setDefaultCMYK;
308 static jmethodID mid_DefaultColorSpaces_setOutputIntent;
309 static jmethodID mid_Device_beginGroup;
310 static jmethodID mid_Device_beginLayer;
311 static jmethodID mid_Device_beginMask;
312 static jmethodID mid_Device_beginMetatext;
313 static jmethodID mid_Device_beginStructure;
314 static jmethodID mid_Device_beginTile;
315 static jmethodID mid_Device_clipImageMask;
316 static jmethodID mid_Device_clipPath;
317 static jmethodID mid_Device_clipStrokePath;
318 static jmethodID mid_Device_clipStrokeText;
319 static jmethodID mid_Device_clipText;
320 static jmethodID mid_Device_endGroup;
321 static jmethodID mid_Device_endLayer;
322 static jmethodID mid_Device_endMask;
323 static jmethodID mid_Device_endMetatext;
324 static jmethodID mid_Device_endStructure;
325 static jmethodID mid_Device_endTile;
326 static jmethodID mid_Device_fillImage;
327 static jmethodID mid_Device_fillImageMask;
328 static jmethodID mid_Device_fillPath;
329 static jmethodID mid_Device_fillShade;
330 static jmethodID mid_Device_fillText;
331 static jmethodID mid_Device_ignoreText;
332 static jmethodID mid_Device_init;
333 static jmethodID mid_Device_popClip;
334 static jmethodID mid_Device_renderFlags;
335 static jmethodID mid_Device_setDefaultColorSpaces;
336 static jmethodID mid_Device_strokePath;
337 static jmethodID mid_Device_strokeText;
338 static jmethodID mid_DisplayList_init;
339 static jmethodID mid_DocumentWriter_OCRListener_progress;
340 static jmethodID mid_Document_init;
341 static jmethodID mid_DOM_init;
342 static jmethodID mid_DOMAttribute_init;
343 static jmethodID mid_FitzInputStream_init;
344 static jmethodID mid_Float_init;
345 static jmethodID mid_Font_init;
346 static jmethodID mid_Image_init;
347 static jmethodID mid_Link_init;
348 static jmethodID mid_Location_init;
349 static jmethodID mid_Matrix_init;
350 static jmethodID mid_MultiArchive_init;
351 static jmethodID mid_NativeDevice_init;
352 static jmethodID mid_Object_toString;
353 static jmethodID mid_Outline_init;
354 static jmethodID mid_OutlineItem_init;
355 static jmethodID mid_OutlineIterator_init;
356 static jmethodID mid_PDFAnnotation_init;
357 static jmethodID mid_LinkDestination_init;
358 static jmethodID mid_PDFDocument_JsEventListener_onAlert;
359 static jmethodID mid_PDFDocument_PDFEmbeddedFileParams_init;
360 static jmethodID mid_PDFDocument_init;
361 static jmethodID mid_PDFGraftMap_init;
362 static jmethodID mid_PDFObject_init;
363 static jmethodID mid_PDFPage_init;
364 static jmethodID mid_PDFProcessor_op_b;
365 static jmethodID mid_PDFProcessor_op_B;
366 static jmethodID mid_PDFProcessor_op_BDC;
367 static jmethodID mid_PDFProcessor_op_BI;
368 static jmethodID mid_PDFProcessor_op_BMC;
369 static jmethodID mid_PDFProcessor_op_bstar;
370 static jmethodID mid_PDFProcessor_op_Bstar;
371 static jmethodID mid_PDFProcessor_op_BT;
372 static jmethodID mid_PDFProcessor_op_BX;
373 static jmethodID mid_PDFProcessor_op_c;
374 static jmethodID mid_PDFProcessor_op_cm;
375 static jmethodID mid_PDFProcessor_op_cs;
376 static jmethodID mid_PDFProcessor_op_CS;
377 static jmethodID mid_PDFProcessor_op_d;
378 static jmethodID mid_PDFProcessor_op_d0;
379 static jmethodID mid_PDFProcessor_op_d1;
380 static jmethodID mid_PDFProcessor_op_Do_form;
381 static jmethodID mid_PDFProcessor_op_Do_image;
382 static jmethodID mid_PDFProcessor_op_DP;
383 static jmethodID mid_PDFProcessor_op_dquote_byte_array;
384 static jmethodID mid_PDFProcessor_op_dquote_string;
385 static jmethodID mid_PDFProcessor_op_EMC;
386 static jmethodID mid_PDFProcessor_op_ET;
387 static jmethodID mid_PDFProcessor_op_EX;
388 static jmethodID mid_PDFProcessor_op_f;
389 static jmethodID mid_PDFProcessor_op_F;
390 static jmethodID mid_PDFProcessor_op_fstar;
391 static jmethodID mid_PDFProcessor_op_g;
392 static jmethodID mid_PDFProcessor_op_G;
393 static jmethodID mid_PDFProcessor_op_gs;
394 static jmethodID mid_PDFProcessor_op_h;
395 static jmethodID mid_PDFProcessor_op_i;
396 static jmethodID mid_PDFProcessor_op_j;
397 static jmethodID mid_PDFProcessor_op_J;
398 static jmethodID mid_PDFProcessor_op_k;
399 static jmethodID mid_PDFProcessor_op_K;
400 static jmethodID mid_PDFProcessor_op_l;
401 static jmethodID mid_PDFProcessor_op_m;
402 static jmethodID mid_PDFProcessor_op_M;
403 static jmethodID mid_PDFProcessor_op_MP;
404 static jmethodID mid_PDFProcessor_op_n;
405 static jmethodID mid_PDFProcessor_op_popResources;
406 static jmethodID mid_PDFProcessor_op_pushResources;
407 static jmethodID mid_PDFProcessor_op_q;
408 static jmethodID mid_PDFProcessor_op_Q;
409 static jmethodID mid_PDFProcessor_op_re;
410 static jmethodID mid_PDFProcessor_op_rg;
411 static jmethodID mid_PDFProcessor_op_RG;
412 static jmethodID mid_PDFProcessor_op_ri;
413 static jmethodID mid_PDFProcessor_op_s;
414 static jmethodID mid_PDFProcessor_op_S;
415 static jmethodID mid_PDFProcessor_op_sc_color;
416 static jmethodID mid_PDFProcessor_op_SC_color;
417 static jmethodID mid_PDFProcessor_op_sc_pattern;
418 static jmethodID mid_PDFProcessor_op_SC_pattern;
419 static jmethodID mid_PDFProcessor_op_sc_shade;
420 static jmethodID mid_PDFProcessor_op_SC_shade;
421 static jmethodID mid_PDFProcessor_op_sh;
422 static jmethodID mid_PDFProcessor_op_squote_byte_array;
423 static jmethodID mid_PDFProcessor_op_squote_string;
424 static jmethodID mid_PDFProcessor_op_Tc;
425 static jmethodID mid_PDFProcessor_op_Td;
426 static jmethodID mid_PDFProcessor_op_TD;
427 static jmethodID mid_PDFProcessor_op_Tf;
428 static jmethodID mid_PDFProcessor_op_TJ;
429 static jmethodID mid_PDFProcessor_op_Tj_byte_array;
430 static jmethodID mid_PDFProcessor_op_Tj_string;
431 static jmethodID mid_PDFProcessor_op_TL;
432 static jmethodID mid_PDFProcessor_op_Tm;
433 static jmethodID mid_PDFProcessor_op_Tr;
434 static jmethodID mid_PDFProcessor_op_Ts;
435 static jmethodID mid_PDFProcessor_op_Tstar;
436 static jmethodID mid_PDFProcessor_op_Tw;
437 static jmethodID mid_PDFProcessor_op_Tz;
438 static jmethodID mid_PDFProcessor_op_v;
439 static jmethodID mid_PDFProcessor_op_w;
440 static jmethodID mid_PDFProcessor_op_W;
441 static jmethodID mid_PDFProcessor_op_Wstar;
442 static jmethodID mid_PDFProcessor_op_y;
443 static jmethodID mid_PDFWidget_init;
444 static jmethodID mid_PKCS7DistinguishedName_init;
445 static jmethodID mid_PKCS7Signer_maxDigest;
446 static jmethodID mid_PKCS7Signer_name;
447 static jmethodID mid_PKCS7Signer_sign;
448 static jmethodID mid_PKCS7Verifier_checkCertificate;
449 static jmethodID mid_PKCS7Verifier_checkDigest;
450 static jmethodID mid_Page_init;
451 static jmethodID mid_PathWalker_closePath;
452 static jmethodID mid_PathWalker_curveTo;
453 static jmethodID mid_PathWalker_lineTo;
454 static jmethodID mid_PathWalker_moveTo;
455 static jmethodID mid_Path_init;
456 static jmethodID mid_Pixmap_init;
457 static jmethodID mid_Point_init;
458 static jmethodID mid_Quad_init;
459 static jmethodID mid_Rect_init;
460 static jmethodID mid_SeekableInputStream_read;
461 static jmethodID mid_SeekableOutputStream_truncate;
462 static jmethodID mid_SeekableOutputStream_write;
463 static jmethodID mid_SeekableStream_position;
464 static jmethodID mid_SeekableStream_seek;
465 static jmethodID mid_Shade_init;
466 static jmethodID mid_StrokeState_init;
467 static jmethodID mid_StructuredTextWalker_beginLine;
468 static jmethodID mid_StructuredTextWalker_beginStruct;
469 static jmethodID mid_StructuredTextWalker_beginTextBlock;
470 static jmethodID mid_StructuredTextWalker_endLine;
471 static jmethodID mid_StructuredTextWalker_endStruct;
472 static jmethodID mid_StructuredTextWalker_endTextBlock;
473 static jmethodID mid_StructuredTextWalker_onChar;
474 static jmethodID mid_StructuredTextWalker_onImageBlock;
475 static jmethodID mid_StructuredTextWalker_onVector;
476 static jmethodID mid_StructuredTextWalker_VectorInfo_init;
477 static jmethodID mid_StructuredText_init;
478 static jmethodID mid_TextBlock_init;
479 static jmethodID mid_TextChar_init;
480 static jmethodID mid_TextLine_init;
481 static jmethodID mid_TextWalker_showGlyph;
482 static jmethodID mid_TextWidgetCharLayout_init;
483 static jmethodID mid_TextWidgetLayout_init;
484 static jmethodID mid_TextWidgetLineLayout_init;
485 static jmethodID mid_Text_init;
486 static jmethodID mid_TreeArchive_init;
487
488 #ifdef _WIN32
489 static DWORD context_key;
490 #else
491 static pthread_key_t context_key;
492 #endif
493 static fz_context *base_context;
494
495 static int check_enums()
496 {
497 int valid = 1;
498
499 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_NONE == FZ_BARCODE_NONE;
500 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_AZTEC == FZ_BARCODE_AZTEC;
501 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_CODABAR == FZ_BARCODE_CODABAR;
502 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_CODE39 == FZ_BARCODE_CODE39;
503 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_CODE93 == FZ_BARCODE_CODE93;
504 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_CODE128 == FZ_BARCODE_CODE128;
505 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_DATABAR == FZ_BARCODE_DATABAR;
506 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_DATABAREXPANDED == FZ_BARCODE_DATABAREXPANDED;
507 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_DATAMATRIX == FZ_BARCODE_DATAMATRIX;
508 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_EAN8 == FZ_BARCODE_EAN8;
509 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_EAN13 == FZ_BARCODE_EAN13;
510 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_ITF == FZ_BARCODE_ITF;
511 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_MAXICODE == FZ_BARCODE_MAXICODE;
512 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_PDF417 == FZ_BARCODE_PDF417;
513 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_QRCODE == FZ_BARCODE_QRCODE;
514 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_UPCA == FZ_BARCODE_UPCA;
515 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_UPCE == FZ_BARCODE_UPCE;
516 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_MICROQRCODE == FZ_BARCODE_MICROQRCODE;
517 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_RMQRCODE == FZ_BARCODE_RMQRCODE;
518 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_DXFILMEDGE == FZ_BARCODE_DXFILMEDGE;
519 valid &= com_artifex_mupdf_fitz_BarcodeInfo_BARCODE_DATABARLIMITED == FZ_BARCODE_DATABARLIMITED;
520
521 valid &= com_artifex_mupdf_fitz_Device_BLEND_NORMAL == FZ_BLEND_NORMAL;
522 valid &= com_artifex_mupdf_fitz_Device_BLEND_MULTIPLY == FZ_BLEND_MULTIPLY;
523 valid &= com_artifex_mupdf_fitz_Device_BLEND_SCREEN == FZ_BLEND_SCREEN;
524 valid &= com_artifex_mupdf_fitz_Device_BLEND_OVERLAY == FZ_BLEND_OVERLAY;
525 valid &= com_artifex_mupdf_fitz_Device_BLEND_DARKEN == FZ_BLEND_DARKEN;
526 valid &= com_artifex_mupdf_fitz_Device_BLEND_LIGHTEN == FZ_BLEND_LIGHTEN;
527 valid &= com_artifex_mupdf_fitz_Device_BLEND_COLOR_DODGE == FZ_BLEND_COLOR_DODGE;
528 valid &= com_artifex_mupdf_fitz_Device_BLEND_COLOR_BURN == FZ_BLEND_COLOR_BURN;
529 valid &= com_artifex_mupdf_fitz_Device_BLEND_HARD_LIGHT == FZ_BLEND_HARD_LIGHT;
530 valid &= com_artifex_mupdf_fitz_Device_BLEND_SOFT_LIGHT == FZ_BLEND_SOFT_LIGHT;
531 valid &= com_artifex_mupdf_fitz_Device_BLEND_DIFFERENCE == FZ_BLEND_DIFFERENCE;
532 valid &= com_artifex_mupdf_fitz_Device_BLEND_EXCLUSION == FZ_BLEND_EXCLUSION;
533 valid &= com_artifex_mupdf_fitz_Device_BLEND_HUE == FZ_BLEND_HUE;
534 valid &= com_artifex_mupdf_fitz_Device_BLEND_SATURATION == FZ_BLEND_SATURATION;
535 valid &= com_artifex_mupdf_fitz_Device_BLEND_COLOR == FZ_BLEND_COLOR;
536 valid &= com_artifex_mupdf_fitz_Device_BLEND_LUMINOSITY == FZ_BLEND_LUMINOSITY;
537
538 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_MASK == FZ_DEVFLAG_MASK;
539 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_COLOR == FZ_DEVFLAG_COLOR;
540 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_UNCACHEABLE == FZ_DEVFLAG_UNCACHEABLE;
541 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_FILLCOLOR_UNDEFINED == FZ_DEVFLAG_FILLCOLOR_UNDEFINED;
542 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_STROKECOLOR_UNDEFINED == FZ_DEVFLAG_STROKECOLOR_UNDEFINED;
543 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_STARTCAP_UNDEFINED == FZ_DEVFLAG_STARTCAP_UNDEFINED;
544 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_DASHCAP_UNDEFINED == FZ_DEVFLAG_DASHCAP_UNDEFINED;
545 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_ENDCAP_UNDEFINED == FZ_DEVFLAG_ENDCAP_UNDEFINED;
546 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_LINEJOIN_UNDEFINED == FZ_DEVFLAG_LINEJOIN_UNDEFINED;
547 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_MITERLIMIT_UNDEFINED == FZ_DEVFLAG_MITERLIMIT_UNDEFINED;
548 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_LINEWIDTH_UNDEFINED == FZ_DEVFLAG_LINEWIDTH_UNDEFINED;
549 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_BBOX_DEFINED == FZ_DEVFLAG_BBOX_DEFINED;
550 valid &= com_artifex_mupdf_fitz_Device_DEVICE_FLAG_GRIDFIT_AS_TILED == FZ_DEVFLAG_GRIDFIT_AS_TILED;
551
552 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_INVALID == FZ_STRUCTURE_INVALID;
553 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_DOCUMENT == FZ_STRUCTURE_DOCUMENT;
554 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_PART == FZ_STRUCTURE_PART;
555 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_ART == FZ_STRUCTURE_ART;
556 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_SECT == FZ_STRUCTURE_SECT;
557 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_DIV == FZ_STRUCTURE_DIV;
558 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_BLOCKQUOTE == FZ_STRUCTURE_BLOCKQUOTE;
559 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_CAPTION == FZ_STRUCTURE_CAPTION;
560 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_TOC == FZ_STRUCTURE_TOC;
561 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_TOCI == FZ_STRUCTURE_TOCI;
562 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_INDEX == FZ_STRUCTURE_INDEX;
563 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_NONSTRUCT == FZ_STRUCTURE_NONSTRUCT;
564 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_PRIVATE == FZ_STRUCTURE_PRIVATE;
565 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_DOCUMENTFRAGMENT == FZ_STRUCTURE_DOCUMENTFRAGMENT;
566 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_ASIDE == FZ_STRUCTURE_ASIDE;
567 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_TITLE == FZ_STRUCTURE_TITLE;
568 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_FENOTE == FZ_STRUCTURE_FENOTE;
569 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_SUB == FZ_STRUCTURE_SUB;
570 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_P == FZ_STRUCTURE_P;
571 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_H == FZ_STRUCTURE_H;
572 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_H1 == FZ_STRUCTURE_H1;
573 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_H2 == FZ_STRUCTURE_H2;
574 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_H3 == FZ_STRUCTURE_H3;
575 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_H4 == FZ_STRUCTURE_H4;
576 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_H5 == FZ_STRUCTURE_H5;
577 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_H6 == FZ_STRUCTURE_H6;
578 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_LIST == FZ_STRUCTURE_LIST;
579 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_LISTITEM == FZ_STRUCTURE_LISTITEM;
580 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_LABEL == FZ_STRUCTURE_LABEL;
581 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_LISTBODY == FZ_STRUCTURE_LISTBODY;
582 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_TABLE == FZ_STRUCTURE_TABLE;
583 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_TR == FZ_STRUCTURE_TR;
584 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_TH == FZ_STRUCTURE_TH;
585 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_TD == FZ_STRUCTURE_TD;
586 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_THEAD == FZ_STRUCTURE_THEAD;
587 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_TBODY == FZ_STRUCTURE_TBODY;
588 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_TFOOT == FZ_STRUCTURE_TFOOT;
589 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_SPAN == FZ_STRUCTURE_SPAN;
590 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_QUOTE == FZ_STRUCTURE_QUOTE;
591 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_NOTE == FZ_STRUCTURE_NOTE;
592 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_REFERENCE == FZ_STRUCTURE_REFERENCE;
593 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_BIBENTRY == FZ_STRUCTURE_BIBENTRY;
594 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_CODE == FZ_STRUCTURE_CODE;
595 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_LINK == FZ_STRUCTURE_LINK;
596 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_ANNOT == FZ_STRUCTURE_ANNOT;
597 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_EM == FZ_STRUCTURE_EM;
598 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_STRONG == FZ_STRUCTURE_STRONG;
599 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_RUBY == FZ_STRUCTURE_RUBY;
600 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_RB == FZ_STRUCTURE_RB;
601 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_RT == FZ_STRUCTURE_RT;
602 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_RP == FZ_STRUCTURE_RP;
603 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_WARICHU == FZ_STRUCTURE_WARICHU;
604 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_WT == FZ_STRUCTURE_WT;
605 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_WP == FZ_STRUCTURE_WP;
606 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_FIGURE == FZ_STRUCTURE_FIGURE;
607 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_FORMULA == FZ_STRUCTURE_FORMULA;
608 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_FORM == FZ_STRUCTURE_FORM;
609 valid &= com_artifex_mupdf_fitz_Device_STRUCTURE_ARTIFACT == FZ_STRUCTURE_ARTIFACT;
610
611 valid &= com_artifex_mupdf_fitz_Device_METATEXT_ACTUALTEXT == FZ_METATEXT_ACTUALTEXT;
612 valid &= com_artifex_mupdf_fitz_Device_METATEXT_ALT == FZ_METATEXT_ALT;
613 valid &= com_artifex_mupdf_fitz_Device_METATEXT_ABBREVIATION == FZ_METATEXT_ABBREVIATION;
614 valid &= com_artifex_mupdf_fitz_Device_METATEXT_TITLE == FZ_METATEXT_TITLE;
615
616 valid &= com_artifex_mupdf_fitz_Font_SIMPLE_ENCODING_LATIN == PDF_SIMPLE_ENCODING_LATIN;
617 valid &= com_artifex_mupdf_fitz_Font_SIMPLE_ENCODING_GREEK == PDF_SIMPLE_ENCODING_GREEK;
618 valid &= com_artifex_mupdf_fitz_Font_SIMPLE_ENCODING_CYRILLIC == PDF_SIMPLE_ENCODING_CYRILLIC;
619
620 valid &= com_artifex_mupdf_fitz_Font_ADOBE_CNS == FZ_ADOBE_CNS;
621 valid &= com_artifex_mupdf_fitz_Font_ADOBE_GB == FZ_ADOBE_GB;
622 valid &= com_artifex_mupdf_fitz_Font_ADOBE_JAPAN == FZ_ADOBE_JAPAN;
623 valid &= com_artifex_mupdf_fitz_Font_ADOBE_KOREA == FZ_ADOBE_KOREA;
624
625 valid &= com_artifex_mupdf_fitz_Page_MEDIA_BOX == FZ_MEDIA_BOX;
626 valid &= com_artifex_mupdf_fitz_Page_CROP_BOX == FZ_CROP_BOX;
627 valid &= com_artifex_mupdf_fitz_Page_ART_BOX == FZ_ART_BOX;
628 valid &= com_artifex_mupdf_fitz_Page_TRIM_BOX == FZ_TRIM_BOX;
629 valid &= com_artifex_mupdf_fitz_Page_BLEED_BOX == FZ_BLEED_BOX;
630 valid &= com_artifex_mupdf_fitz_Page_UNKNOWN_BOX == FZ_UNKNOWN_BOX;
631
632 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_NONE == PDF_ANNOT_LE_NONE;
633 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_SQUARE == PDF_ANNOT_LE_SQUARE;
634 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_CIRCLE == PDF_ANNOT_LE_CIRCLE;
635 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_DIAMOND == PDF_ANNOT_LE_DIAMOND;
636 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_OPEN_ARROW == PDF_ANNOT_LE_OPEN_ARROW;
637 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_CLOSED_ARROW == PDF_ANNOT_LE_CLOSED_ARROW;
638 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_BUTT == PDF_ANNOT_LE_BUTT;
639 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_R_OPEN_ARROW == PDF_ANNOT_LE_R_OPEN_ARROW;
640 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_R_CLOSED_ARROW == PDF_ANNOT_LE_R_CLOSED_ARROW;
641 valid &= com_artifex_mupdf_fitz_PDFAnnotation_LINE_ENDING_SLASH == PDF_ANNOT_LE_SLASH;
642
643 valid &= com_artifex_mupdf_fitz_PDFAnnotation_BORDER_STYLE_SOLID == PDF_BORDER_STYLE_SOLID;
644 valid &= com_artifex_mupdf_fitz_PDFAnnotation_BORDER_STYLE_DASHED == PDF_BORDER_STYLE_DASHED;
645 valid &= com_artifex_mupdf_fitz_PDFAnnotation_BORDER_STYLE_BEVELED == PDF_BORDER_STYLE_BEVELED;
646 valid &= com_artifex_mupdf_fitz_PDFAnnotation_BORDER_STYLE_INSET == PDF_BORDER_STYLE_INSET;
647 valid &= com_artifex_mupdf_fitz_PDFAnnotation_BORDER_STYLE_UNDERLINE == PDF_BORDER_STYLE_UNDERLINE;
648
649 valid &= com_artifex_mupdf_fitz_PDFAnnotation_BORDER_EFFECT_NONE == PDF_BORDER_EFFECT_NONE;
650 valid &= com_artifex_mupdf_fitz_PDFAnnotation_BORDER_EFFECT_CLOUDY == PDF_BORDER_EFFECT_CLOUDY;
651
652 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_TEXT == PDF_ANNOT_TEXT;
653 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_LINK == PDF_ANNOT_LINK;
654 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_FREE_TEXT == PDF_ANNOT_FREE_TEXT;
655 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_LINE == PDF_ANNOT_LINE;
656 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_SQUARE == PDF_ANNOT_SQUARE;
657 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_CIRCLE == PDF_ANNOT_CIRCLE;
658 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_POLYGON == PDF_ANNOT_POLYGON;
659 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_POLY_LINE == PDF_ANNOT_POLY_LINE;
660 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_HIGHLIGHT == PDF_ANNOT_HIGHLIGHT;
661 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_UNDERLINE == PDF_ANNOT_UNDERLINE;
662 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_SQUIGGLY == PDF_ANNOT_SQUIGGLY;
663 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_STRIKE_OUT == PDF_ANNOT_STRIKE_OUT;
664 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_REDACT == PDF_ANNOT_REDACT;
665 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_STAMP == PDF_ANNOT_STAMP;
666 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_CARET == PDF_ANNOT_CARET;
667 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_INK == PDF_ANNOT_INK;
668 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_POPUP == PDF_ANNOT_POPUP;
669 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_FILE_ATTACHMENT == PDF_ANNOT_FILE_ATTACHMENT;
670 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_SOUND == PDF_ANNOT_SOUND;
671 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_MOVIE == PDF_ANNOT_MOVIE;
672 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_RICH_MEDIA == PDF_ANNOT_RICH_MEDIA;
673 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_WIDGET == PDF_ANNOT_WIDGET;
674 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_SCREEN == PDF_ANNOT_SCREEN;
675 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_PRINTER_MARK == PDF_ANNOT_PRINTER_MARK;
676 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_TRAP_NET == PDF_ANNOT_TRAP_NET;
677 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_WATERMARK == PDF_ANNOT_WATERMARK;
678 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_3D == PDF_ANNOT_3D;
679 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_PROJECTION == PDF_ANNOT_PROJECTION;
680 valid &= com_artifex_mupdf_fitz_PDFAnnotation_TYPE_UNKNOWN == PDF_ANNOT_UNKNOWN;
681
682 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_INVISIBLE == PDF_ANNOT_IS_INVISIBLE;
683 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_HIDDEN == PDF_ANNOT_IS_HIDDEN;
684 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_PRINT == PDF_ANNOT_IS_PRINT;
685 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_NO_ZOOM == PDF_ANNOT_IS_NO_ZOOM;
686 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_NO_ROTATE == PDF_ANNOT_IS_NO_ROTATE;
687 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_NO_VIEW == PDF_ANNOT_IS_NO_VIEW;
688 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_READ_ONLY == PDF_ANNOT_IS_READ_ONLY;
689 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_LOCKED == PDF_ANNOT_IS_LOCKED;
690 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_TOGGLE_NO_VIEW == PDF_ANNOT_IS_TOGGLE_NO_VIEW;
691 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IS_LOCKED_CONTENTS == PDF_ANNOT_IS_LOCKED_CONTENTS;
692
693 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_DEFAULT == PDF_ANNOT_IT_DEFAULT;
694 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_FREETEXT_CALLOUT == PDF_ANNOT_IT_FREETEXT_CALLOUT;
695 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_FREETEXT_TYPEWRITER == PDF_ANNOT_IT_FREETEXT_TYPEWRITER;
696 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_LINE_ARROW == PDF_ANNOT_IT_LINE_ARROW;
697 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_LINE_DIMENSION == PDF_ANNOT_IT_LINE_DIMENSION;
698 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_POLYLINE_DIMENSION == PDF_ANNOT_IT_POLYLINE_DIMENSION;
699 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_POLYGON_CLOUD == PDF_ANNOT_IT_POLYGON_CLOUD;
700 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_POLYGON_DIMENSION == PDF_ANNOT_IT_POLYGON_DIMENSION;
701 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_STAMP_IMAGE == PDF_ANNOT_IT_STAMP_IMAGE;
702 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_STAMP_SNAPSHOT == PDF_ANNOT_IT_STAMP_SNAPSHOT;
703 valid &= com_artifex_mupdf_fitz_PDFAnnotation_IT_UNKNOWN == PDF_ANNOT_IT_UNKNOWN;
704
705 valid &= com_artifex_mupdf_fitz_PDFDocument_LANGUAGE_UNSET == FZ_LANG_UNSET;
706 valid &= com_artifex_mupdf_fitz_PDFDocument_LANGUAGE_ur == FZ_LANG_ur;
707 valid &= com_artifex_mupdf_fitz_PDFDocument_LANGUAGE_urd == FZ_LANG_urd;
708 valid &= com_artifex_mupdf_fitz_PDFDocument_LANGUAGE_ko == FZ_LANG_ko;
709 valid &= com_artifex_mupdf_fitz_PDFDocument_LANGUAGE_ja == FZ_LANG_ja;
710 valid &= com_artifex_mupdf_fitz_PDFDocument_LANGUAGE_zh == FZ_LANG_zh;
711 valid &= com_artifex_mupdf_fitz_PDFDocument_LANGUAGE_zh_Hans == FZ_LANG_zh_Hans;
712 valid &= com_artifex_mupdf_fitz_PDFDocument_LANGUAGE_zh_Hant == FZ_LANG_zh_Hant;
713 valid &= com_artifex_mupdf_fitz_PDFDocument_NOT_ZUGFERD == PDF_NOT_ZUGFERD;
714 valid &= com_artifex_mupdf_fitz_PDFDocument_ZUGFERD_COMFORT == PDF_ZUGFERD_COMFORT;
715 valid &= com_artifex_mupdf_fitz_PDFDocument_ZUGFERD_BASIC == PDF_ZUGFERD_BASIC;
716 valid &= com_artifex_mupdf_fitz_PDFDocument_ZUGFERD_EXTENDED == PDF_ZUGFERD_EXTENDED;
717 valid &= com_artifex_mupdf_fitz_PDFDocument_ZUGFERD_BASIC_WL == PDF_ZUGFERD_BASIC_WL;
718 valid &= com_artifex_mupdf_fitz_PDFDocument_ZUGFERD_MINIMUM == PDF_ZUGFERD_MINIMUM;
719 valid &= com_artifex_mupdf_fitz_PDFDocument_ZUGFERD_XRECHNUNG == PDF_ZUGFERD_XRECHNUNG;
720 valid &= com_artifex_mupdf_fitz_PDFDocument_ZUGFERD_UNKNOWN == PDF_ZUGFERD_UNKNOWN;
721
722 valid &= com_artifex_mupdf_fitz_Rect_MIN_INF_RECT == FZ_MIN_INF_RECT;
723 valid &= com_artifex_mupdf_fitz_Rect_MAX_INF_RECT == FZ_MAX_INF_RECT;
724
725 valid &= com_artifex_mupdf_fitz_LinkDestination_LINK_DEST_FIT == FZ_LINK_DEST_FIT;
726 valid &= com_artifex_mupdf_fitz_LinkDestination_LINK_DEST_FIT_B == FZ_LINK_DEST_FIT_B;
727 valid &= com_artifex_mupdf_fitz_LinkDestination_LINK_DEST_FIT_H == FZ_LINK_DEST_FIT_H;
728 valid &= com_artifex_mupdf_fitz_LinkDestination_LINK_DEST_FIT_BH == FZ_LINK_DEST_FIT_BH;
729 valid &= com_artifex_mupdf_fitz_LinkDestination_LINK_DEST_FIT_V == FZ_LINK_DEST_FIT_V;
730 valid &= com_artifex_mupdf_fitz_LinkDestination_LINK_DEST_FIT_BV == FZ_LINK_DEST_FIT_BV;
731 valid &= com_artifex_mupdf_fitz_LinkDestination_LINK_DEST_FIT_R == FZ_LINK_DEST_FIT_R;
732 valid &= com_artifex_mupdf_fitz_LinkDestination_LINK_DEST_XYZ == FZ_LINK_DEST_XYZ;
733
734 valid &= com_artifex_mupdf_fitz_StrokeState_LINE_CAP_BUTT == FZ_LINECAP_BUTT;
735 valid &= com_artifex_mupdf_fitz_StrokeState_LINE_CAP_ROUND == FZ_LINECAP_ROUND;
736 valid &= com_artifex_mupdf_fitz_StrokeState_LINE_CAP_SQUARE == FZ_LINECAP_SQUARE;
737 valid &= com_artifex_mupdf_fitz_StrokeState_LINE_CAP_TRIANGLE == FZ_LINECAP_TRIANGLE;
738
739 valid &= com_artifex_mupdf_fitz_StrokeState_LINE_JOIN_MITER == FZ_LINEJOIN_MITER;
740 valid &= com_artifex_mupdf_fitz_StrokeState_LINE_JOIN_ROUND == FZ_LINEJOIN_ROUND;
741 valid &= com_artifex_mupdf_fitz_StrokeState_LINE_JOIN_BEVEL == FZ_LINEJOIN_BEVEL;
742 valid &= com_artifex_mupdf_fitz_StrokeState_LINE_JOIN_MITER_XPS == FZ_LINEJOIN_MITER_XPS;
743
744 valid &= com_artifex_mupdf_fitz_StructuredText_SELECT_CHARS == FZ_SELECT_CHARS;
745 valid &= com_artifex_mupdf_fitz_StructuredText_SELECT_WORDS == FZ_SELECT_WORDS;
746 valid &= com_artifex_mupdf_fitz_StructuredText_SELECT_LINES == FZ_SELECT_LINES;
747
748 valid &= com_artifex_mupdf_fitz_PDFWidget_TYPE_UNKNOWN == PDF_WIDGET_TYPE_UNKNOWN;
749 valid &= com_artifex_mupdf_fitz_PDFWidget_TYPE_BUTTON == PDF_WIDGET_TYPE_BUTTON;
750 valid &= com_artifex_mupdf_fitz_PDFWidget_TYPE_CHECKBOX == PDF_WIDGET_TYPE_CHECKBOX;
751 valid &= com_artifex_mupdf_fitz_PDFWidget_TYPE_COMBOBOX == PDF_WIDGET_TYPE_COMBOBOX;
752 valid &= com_artifex_mupdf_fitz_PDFWidget_TYPE_LISTBOX == PDF_WIDGET_TYPE_LISTBOX;
753 valid &= com_artifex_mupdf_fitz_PDFWidget_TYPE_RADIOBUTTON == PDF_WIDGET_TYPE_RADIOBUTTON;
754 valid &= com_artifex_mupdf_fitz_PDFWidget_TYPE_SIGNATURE == PDF_WIDGET_TYPE_SIGNATURE;
755 valid &= com_artifex_mupdf_fitz_PDFWidget_TYPE_TEXT == PDF_WIDGET_TYPE_TEXT;
756
757 valid &= com_artifex_mupdf_fitz_PDFWidget_TX_FORMAT_NONE == PDF_WIDGET_TX_FORMAT_NONE;
758 valid &= com_artifex_mupdf_fitz_PDFWidget_TX_FORMAT_NUMBER == PDF_WIDGET_TX_FORMAT_NUMBER;
759 valid &= com_artifex_mupdf_fitz_PDFWidget_TX_FORMAT_SPECIAL == PDF_WIDGET_TX_FORMAT_SPECIAL;
760 valid &= com_artifex_mupdf_fitz_PDFWidget_TX_FORMAT_DATE == PDF_WIDGET_TX_FORMAT_DATE;
761 valid &= com_artifex_mupdf_fitz_PDFWidget_TX_FORMAT_TIME == PDF_WIDGET_TX_FORMAT_TIME;
762
763 valid &= com_artifex_mupdf_fitz_PDFWidget_FIELD_IS_READ_ONLY == PDF_FIELD_IS_READ_ONLY;
764 valid &= com_artifex_mupdf_fitz_PDFWidget_FIELD_IS_REQUIRED == PDF_FIELD_IS_REQUIRED;
765 valid &= com_artifex_mupdf_fitz_PDFWidget_FIELD_IS_NO_EXPORT == PDF_FIELD_IS_NO_EXPORT;
766
767 valid &= com_artifex_mupdf_fitz_PDFWidget_TX_FIELD_IS_MULTILINE == PDF_TX_FIELD_IS_MULTILINE;
768 valid &= com_artifex_mupdf_fitz_PDFWidget_TX_FIELD_IS_PASSWORD == PDF_TX_FIELD_IS_PASSWORD;
769 valid &= com_artifex_mupdf_fitz_PDFWidget_TX_FIELD_IS_COMB == PDF_TX_FIELD_IS_COMB;
770
771 valid &= com_artifex_mupdf_fitz_PDFWidget_BTN_FIELD_IS_NO_TOGGLE_TO_OFF == PDF_BTN_FIELD_IS_NO_TOGGLE_TO_OFF;
772 valid &= com_artifex_mupdf_fitz_PDFWidget_BTN_FIELD_IS_RADIO == PDF_BTN_FIELD_IS_RADIO;
773 valid &= com_artifex_mupdf_fitz_PDFWidget_BTN_FIELD_IS_PUSHBUTTON == PDF_BTN_FIELD_IS_PUSHBUTTON;
774
775 valid &= com_artifex_mupdf_fitz_PDFWidget_CH_FIELD_IS_COMBO == PDF_CH_FIELD_IS_COMBO;
776 valid &= com_artifex_mupdf_fitz_PDFWidget_CH_FIELD_IS_EDIT == PDF_CH_FIELD_IS_EDIT;
777 valid &= com_artifex_mupdf_fitz_PDFWidget_CH_FIELD_IS_SORT == PDF_CH_FIELD_IS_SORT;
778 valid &= com_artifex_mupdf_fitz_PDFWidget_CH_FIELD_IS_MULTI_SELECT == PDF_CH_FIELD_IS_MULTI_SELECT;
779
780 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_SHOW_LABELS == PDF_SIGNATURE_SHOW_LABELS;
781 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_SHOW_DN == PDF_SIGNATURE_SHOW_DN;
782 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_SHOW_DATE == PDF_SIGNATURE_SHOW_DATE;
783 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_SHOW_TEXT_NAME == PDF_SIGNATURE_SHOW_TEXT_NAME;
784 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_SHOW_GRAPHIC_NAME == PDF_SIGNATURE_SHOW_GRAPHIC_NAME;
785 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_SHOW_LOGO == PDF_SIGNATURE_SHOW_LOGO;
786 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_DEFAULT_APPEARANCE == PDF_SIGNATURE_DEFAULT_APPEARANCE;
787
788 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_ERROR_OKAY == PDF_SIGNATURE_ERROR_OKAY;
789 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_ERROR_NO_SIGNATURES == PDF_SIGNATURE_ERROR_NO_SIGNATURES;
790 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_ERROR_NO_CERTIFICATE == PDF_SIGNATURE_ERROR_NO_CERTIFICATE;
791 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_ERROR_DIGEST_FAILURE == PDF_SIGNATURE_ERROR_DIGEST_FAILURE;
792 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_ERROR_SELF_SIGNED == PDF_SIGNATURE_ERROR_SELF_SIGNED;
793 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_ERROR_SELF_SIGNED_IN_CHAIN == PDF_SIGNATURE_ERROR_SELF_SIGNED_IN_CHAIN;
794 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_ERROR_NOT_TRUSTED == PDF_SIGNATURE_ERROR_NOT_TRUSTED;
795 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_ERROR_NOT_SIGNED == PDF_SIGNATURE_ERROR_NOT_SIGNED;
796 valid &= com_artifex_mupdf_fitz_PDFWidget_SIGNATURE_ERROR_UNKNOWN == PDF_SIGNATURE_ERROR_UNKNOWN;
797
798 valid &= com_artifex_mupdf_fitz_PDFPage_REDACT_IMAGE_NONE == PDF_REDACT_IMAGE_NONE;
799 valid &= com_artifex_mupdf_fitz_PDFPage_REDACT_IMAGE_REMOVE == PDF_REDACT_IMAGE_REMOVE;
800 valid &= com_artifex_mupdf_fitz_PDFPage_REDACT_IMAGE_PIXELS == PDF_REDACT_IMAGE_PIXELS;
801 valid &= com_artifex_mupdf_fitz_PDFPage_REDACT_IMAGE_REMOVE_UNLESS_INVISIBLE == PDF_REDACT_IMAGE_REMOVE_UNLESS_INVISIBLE;
802
803 valid &= com_artifex_mupdf_fitz_PDFPage_REDACT_LINE_ART_NONE == PDF_REDACT_LINE_ART_NONE;
804 valid &= com_artifex_mupdf_fitz_PDFPage_REDACT_LINE_ART_REMOVE_IF_TOUCHED == PDF_REDACT_LINE_ART_REMOVE_IF_TOUCHED;
805 valid &= com_artifex_mupdf_fitz_PDFPage_REDACT_LINE_ART_REMOVE_IF_COVERED == PDF_REDACT_LINE_ART_REMOVE_IF_COVERED;
806
807 valid &= com_artifex_mupdf_fitz_PDFPage_REDACT_TEXT_REMOVE == PDF_REDACT_TEXT_REMOVE;
808 valid &= com_artifex_mupdf_fitz_PDFPage_REDACT_TEXT_NONE == PDF_REDACT_TEXT_NONE;
809
810 valid &= com_artifex_mupdf_fitz_Pixmap_DESKEW_BORDER_INCREASE == FZ_DESKEW_BORDER_INCREASE;
811 valid &= com_artifex_mupdf_fitz_Pixmap_DESKEW_BORDER_MAINTAIN == FZ_DESKEW_BORDER_MAINTAIN;
812 valid &= com_artifex_mupdf_fitz_Pixmap_DESKEW_BORDER_DECREASE == FZ_DESKEW_BORDER_DECREASE;
813
814 valid &= com_artifex_mupdf_fitz_OutlineIterator_FLAG_BOLD == FZ_OUTLINE_FLAG_BOLD;
815 valid &= com_artifex_mupdf_fitz_OutlineIterator_FLAG_ITALIC == FZ_OUTLINE_FLAG_ITALIC;
816
817 valid &= com_artifex_mupdf_fitz_StructuredText_VECTOR_IS_STROKED == FZ_STEXT_VECTOR_IS_STROKED;
818 valid &= com_artifex_mupdf_fitz_StructuredText_VECTOR_IS_RECTANGLE == FZ_STEXT_VECTOR_IS_RECTANGLE;
819
820 valid &= com_artifex_mupdf_fitz_ColorSpace_NONE == FZ_COLORSPACE_NONE;
821 valid &= com_artifex_mupdf_fitz_ColorSpace_GRAY == FZ_COLORSPACE_GRAY;
822 valid &= com_artifex_mupdf_fitz_ColorSpace_RGB == FZ_COLORSPACE_RGB;
823 valid &= com_artifex_mupdf_fitz_ColorSpace_BGR == FZ_COLORSPACE_BGR;
824 valid &= com_artifex_mupdf_fitz_ColorSpace_CMYK == FZ_COLORSPACE_CMYK;
825 valid &= com_artifex_mupdf_fitz_ColorSpace_LAB == FZ_COLORSPACE_LAB;
826 valid &= com_artifex_mupdf_fitz_ColorSpace_INDEXED == FZ_COLORSPACE_INDEXED;
827 valid &= com_artifex_mupdf_fitz_ColorSpace_SEPARATION == FZ_COLORSPACE_SEPARATION;
828
829 return valid ? 1 : 0;
830 }
831
832 /* Helper functions to set the java exception flag. */
833
834 static void jni_throw_imp(JNIEnv *env, jclass cls, const char *mess)
835 {
836 (*env)->ThrowNew(env, cls, mess);
837 }
838
839 #define jni_throw_void(env, info) do { jni_throw_imp(env, info); return; }
840 #define jni_throw(env, info) do { jni_throw_imp(env, info); return 0; }
841
842 static void jni_rethrow_imp(JNIEnv *env, fz_context *ctx)
843 {
844 int code;
845 const char *message = fz_convert_error(ctx, &code);
846 if (code == FZ_ERROR_TRYLATER)
847 jni_throw_imp(env, cls_TryLaterException, message);
848 else if (code == FZ_ERROR_ABORT)
849 jni_throw_imp(env, cls_AbortException, message);
850 else
851 jni_throw_imp(env, cls_RuntimeException, message);
852 }
853
854 #define jni_rethrow_void(env, ctx) do { jni_rethrow_imp(env, ctx); return; } while (0);
855 #define jni_rethrow(env, ctx) do { jni_rethrow_imp(env, ctx); return 0; } while (0);
856
857 static void jni_throw_run_imp(JNIEnv *env, const char *info)
858 {
859 jni_throw_imp(env, cls_RuntimeException, info);
860 }
861
862 #define jni_throw_run_void(env, info) do { jni_throw_run_imp(env, info); return; } while (0);
863 #define jni_throw_run(env, info) do { jni_throw_run_imp(env, info); return 0; } while (0);
864
865 static void jni_throw_oom_imp(JNIEnv *env, const char *info)
866 {
867 jni_throw_imp(env, cls_OutOfMemoryError, info);
868 }
869
870 #define jni_throw_oom_void(env, info) do { jni_throw_oom_imp(env, info); return; } while (0);
871 #define jni_throw_oom(env, info) do { jni_throw_oom_imp(env, info); return 0; } while (0);
872
873 static void jni_throw_oob_imp(JNIEnv *env, const char *info)
874 {
875 jni_throw_imp(env, cls_IndexOutOfBoundsException, info);
876 }
877
878 #define jni_throw_oob_void(env, info) do { jni_throw_oob_imp(env, info); return; } while (0);
879 #define jni_throw_oob(env, info) do { jni_throw_oob_imp(env, info); return 0; } while (0);
880
881 static void jni_throw_arg_imp(JNIEnv *env, const char *info)
882 {
883 jni_throw_imp(env, cls_IllegalArgumentException, info);
884 }
885
886 #define jni_throw_arg_void(env, info) do { jni_throw_arg_imp(env, info); return; } while (0);
887 #define jni_throw_arg(env, info) do { jni_throw_arg_imp(env, info); return 0; } while (0);
888
889 static void jni_throw_io_imp(JNIEnv *env, const char *info)
890 {
891 jni_throw_imp(env, cls_IOException, info);
892 }
893
894 #define jni_throw_io_void(env, info) do { jni_throw_io_imp(env, info); return; } while (0);
895 #define jni_throw_io(env, info) do { jni_throw_io_imp(env, info); return 0; } while (0);
896
897 static void jni_throw_null_imp(JNIEnv *env, const char *info)
898 {
899 jni_throw_imp(env, cls_NullPointerException, info);
900 }
901
902 #define jni_throw_null_void(env, info) do { jni_throw_null_imp(env, info); return; } while (0);
903 #define jni_throw_null(env, info) do { jni_throw_null_imp(env, info); return 0; } while (0);
904
905 static void jni_throw_uoe_imp(JNIEnv *env, const char *info)
906 {
907 jni_throw_imp(env, cls_UnsupportedOperationException, info);
908 }
909
910 #define jni_throw_uoe_void(env, info) do { jni_throw_uoe_imp(env, info); return; } while (0);
911 #define jni_throw_uoe(env, info) do { jni_throw_uoe_imp(env, info); return 0; } while (0);
912
913 /* Convert a java exception and throw into fitz. */
914
915 static void fz_throw_java_and_detach_thread(fz_context *ctx, JNIEnv *env, jboolean detach)
916 {
917 jthrowable ex = (*env)->ExceptionOccurred(env);
918 if (ex)
919 {
920 jobject msg;
921 (*env)->ExceptionClear(env);
922 msg = (*env)->CallObjectMethod(env, ex, mid_Object_toString);
923 if ((*env)->ExceptionCheck(env))
924 (*env)->ExceptionClear(env);
925 else if (msg)
926 {
927 const char *p = (*env)->GetStringUTFChars(env, msg, NULL);
928 if (p)
929 {
930 char buf[256];
931 fz_strlcpy(buf, p, sizeof buf);
932 (*env)->ReleaseStringUTFChars(env, msg, p);
933 if (detach)
934 (*jvm)->DetachCurrentThread(jvm);
935 fz_throw(ctx, FZ_ERROR_GENERIC, "%s", buf);
936 }
937 }
938 }
939 if (detach)
940 (*jvm)->DetachCurrentThread(jvm);
941 fz_throw(ctx, FZ_ERROR_GENERIC, "unknown java error");
942 }
943
944 #define fz_throw_java(ctx, env) fz_throw_java_and_detach_thread((ctx), (env), JNI_FALSE)
945
946 #define fz_throw_and_detach_thread(ctx, detach, code, ...) \
947 do \
948 { \
949 if (detach) \
950 (*jvm)->DetachCurrentThread(jvm); \
951 fz_throw((ctx), (code), __VA_ARGS__); \
952 } while (0)
953
954 #define fz_rethrow_and_detach_thread(ctx, detach) \
955 do \
956 { \
957 if (detach) \
958 (*jvm)->DetachCurrentThread(jvm); \
959 fz_rethrow(ctx); \
960 } while (0)
961
962 typedef struct {
963 pdf_pkcs7_verifier base;
964 jobject jverifier;
965 } java_pkcs7_verifier;
966
967 /* Load classes, field and method IDs. */
968
969 static const char *current_class_name = NULL;
970 static jclass current_class = NULL;
971
972 static jclass get_class(int *failed, JNIEnv *env, const char *name)
973 {
974 jclass local;
975
976 if (*failed) return NULL;
977
978 current_class_name = name;
979 local = (*env)->FindClass(env, name);
980 if (!local || (*env)->ExceptionCheck(env))
981 {
982 LOGI("Failed to find class %s", name);
983 *failed = 1;
984 return NULL;
985 }
986
987 current_class = (*env)->NewGlobalRef(env, local);
988 if (!current_class)
989 {
990 LOGI("Failed to make global ref for %s", name);
991 *failed = 1;
992 return NULL;
993 }
994
995 (*env)->DeleteLocalRef(env, local);
996
997 return current_class;
998 }
999
1000 static jfieldID get_field(int *failed, JNIEnv *env, const char *field, const char *sig)
1001 {
1002 jfieldID fid;
1003
1004 if (*failed || !current_class) return NULL;
1005
1006 fid = (*env)->GetFieldID(env, current_class, field, sig);
1007 if (fid == 0 || (*env)->ExceptionCheck(env))
1008 {
1009 LOGI("Failed to get field for %s %s %s", current_class_name, field, sig);
1010 *failed = 1;
1011 }
1012
1013 return fid;
1014 }
1015
1016 static jfieldID get_static_field(int *failed, JNIEnv *env, const char *field, const char *sig)
1017 {
1018 jfieldID fid;
1019
1020 if (*failed || !current_class) return NULL;
1021
1022 fid = (*env)->GetStaticFieldID(env, current_class, field, sig);
1023 if (fid == 0 || (*env)->ExceptionCheck(env))
1024 {
1025 LOGI("Failed to get static field for %s %s %s", current_class_name, field, sig);
1026 *failed = 1;
1027 }
1028
1029 return fid;
1030 }
1031
1032 static jmethodID get_method(int *failed, JNIEnv *env, const char *method, const char *sig)
1033 {
1034 jmethodID mid;
1035
1036 if (*failed || !current_class) return NULL;
1037
1038 mid = (*env)->GetMethodID(env, current_class, method, sig);
1039 if (mid == 0 || (*env)->ExceptionCheck(env))
1040 {
1041 LOGI("Failed to get method for %s %s %s", current_class_name, method, sig);
1042 *failed = 1;
1043 }
1044
1045 return mid;
1046 }
1047
1048 static jmethodID get_static_method(int *failed, JNIEnv *env, const char *method, const char *sig)
1049 {
1050 jmethodID mid;
1051
1052 if (*failed || !current_class) return NULL;
1053
1054 mid = (*env)->GetStaticMethodID(env, current_class, method, sig);
1055 if (mid == 0 || (*env)->ExceptionCheck(env))
1056 {
1057 LOGI("Failed to get static method for %s %s %s", current_class_name, method, sig);
1058 *failed = 1;
1059 }
1060
1061 return mid;
1062 }
1063
1064 static int find_fids(JNIEnv *env)
1065 {
1066 int err = 0;
1067 int getvmErr;
1068
1069 /* Get and store the main JVM pointer. We need this in order to get
1070 * JNIEnv pointers on callback threads. This is specifically
1071 * guaranteed to be safe to store in a static var. */
1072
1073 getvmErr = (*env)->GetJavaVM(env, &jvm);
1074 if (getvmErr < 0)
1075 {
1076 LOGE("cannot get JVM interface (error %d)", getvmErr);
1077 return -1;
1078 }
1079
1080 /* Look up Context first as it is required for logging. E.g. when
1081 * classes' statics are being executed which may cause logging. */
1082
1083 cls_Context = get_class(&err, env, PKG"Context");
1084 fid_Context_log = get_static_field(&err, env, "log", "L"PKG"Context$Log;");
1085 fid_Context_lock = get_static_field(&err, env, "lock", "Ljava/lang/Object;");
1086
1087 cls_Context_Log = get_class(&err, env, PKG"Context$Log");
1088 mid_Context_Log_error = get_method(&err, env, "error", "(Ljava/lang/String;)V");
1089 mid_Context_Log_warning = get_method(&err, env, "warning", "(Ljava/lang/String;)V");
1090
1091 cls_Context_Version = get_class(&err, env, PKG"Context$Version");
1092 fid_Context_Version_major = get_field(&err, env, "major", "I");
1093 fid_Context_Version_minor = get_field(&err, env, "minor", "I");
1094 fid_Context_Version_patch = get_field(&err, env, "patch", "I");
1095 fid_Context_Version_version = get_field(&err, env, "version", "Ljava/lang/String;");
1096 mid_Context_Version_init = get_method(&err, env, "<init>", "()V");
1097
1098 /* MuPDF classes */
1099
1100 cls_Archive = get_class(&err, env, PKG"Archive");
1101 mid_Archive_init = get_method(&err, env, "<init>", "(J)V");
1102 fid_Archive_pointer = get_field(&err, env, "pointer", "J");
1103
1104 cls_BarcodeInfo = get_class(&err, env, PKG"BarcodeInfo");
1105 fid_BarcodeInfo_type = get_field(&err, env, "type", "I");
1106 fid_BarcodeInfo_contents = get_field(&err, env, "contents", "Ljava/lang/String;");
1107 mid_BarcodeInfo_init = get_method(&err, env, "<init>", "(ILjava/lang/String;)V");
1108
1109 cls_Buffer = get_class(&err, env, PKG"Buffer");
1110 mid_Buffer_init = get_method(&err, env, "<init>", "(J)V");
1111 fid_Buffer_pointer = get_field(&err, env, "pointer", "J");
1112
1113 cls_ColorSpace = get_class(&err, env, PKG"ColorSpace");
1114 fid_ColorSpace_pointer = get_field(&err, env, "pointer", "J");
1115 mid_ColorSpace_init = get_method(&err, env, "<init>", "(J)V");
1116 mid_ColorSpace_fromPointer = get_static_method(&err, env, "fromPointer", "(J)L"PKG"ColorSpace;");
1117
1118 cls_Cookie = get_class(&err, env, PKG"Cookie");
1119 fid_Cookie_pointer = get_field(&err, env, "pointer", "J");
1120
1121 cls_DefaultAppearance = get_class(&err, env, PKG"DefaultAppearance");
1122 fid_DefaultAppearance_color = get_field(&err, env, "color", "[F");
1123 fid_DefaultAppearance_font = get_field(&err, env, "font", "Ljava/lang/String;");
1124 fid_DefaultAppearance_size = get_field(&err, env, "size", "F");
1125 mid_DefaultAppearance_init = get_method(&err, env, "<init>", "()V");
1126
1127 cls_DefaultColorSpaces = get_class(&err, env, PKG"DefaultColorSpaces");
1128 fid_DefaultColorSpaces_pointer = get_field(&err, env, "pointer", "J");
1129 mid_DefaultColorSpaces_init = get_method(&err, env, "<init>", "(J)V");
1130 mid_DefaultColorSpaces_setDefaultGray = get_method(&err, env, "setDefaultGray", "(L"PKG"ColorSpace;)V");
1131 mid_DefaultColorSpaces_setDefaultRGB = get_method(&err, env, "setDefaultRGB", "(L"PKG"ColorSpace;)V");
1132 mid_DefaultColorSpaces_setDefaultCMYK = get_method(&err, env, "setDefaultCMYK", "(L"PKG"ColorSpace;)V");
1133 mid_DefaultColorSpaces_setOutputIntent = get_method(&err, env, "setOutputIntent", "(L"PKG"ColorSpace;)V");
1134 mid_DefaultColorSpaces_getDefaultGray = get_method(&err, env, "getDefaultGray", "()L"PKG"ColorSpace;");
1135 mid_DefaultColorSpaces_getDefaultRGB = get_method(&err, env, "getDefaultRGB", "()L"PKG"ColorSpace;");
1136 mid_DefaultColorSpaces_getDefaultCMYK = get_method(&err, env, "getDefaultCMYK", "()L"PKG"ColorSpace;");
1137 mid_DefaultColorSpaces_getOutputIntent = get_method(&err, env, "getOutputIntent", "()L"PKG"ColorSpace;");
1138
1139 cls_Device = get_class(&err, env, PKG"Device");
1140 fid_Device_pointer = get_field(&err, env, "pointer", "J");
1141 mid_Device_init = get_method(&err, env, "<init>", "(J)V");
1142 mid_Device_fillPath = get_method(&err, env, "fillPath", "(L"PKG"Path;ZL"PKG"Matrix;L"PKG"ColorSpace;[FFI)V");
1143 mid_Device_strokePath = get_method(&err, env, "strokePath", "(L"PKG"Path;L"PKG"StrokeState;L"PKG"Matrix;L"PKG"ColorSpace;[FFI)V");
1144 mid_Device_clipPath = get_method(&err, env, "clipPath", "(L"PKG"Path;ZL"PKG"Matrix;)V");
1145 mid_Device_clipStrokePath = get_method(&err, env, "clipStrokePath", "(L"PKG"Path;L"PKG"StrokeState;L"PKG"Matrix;)V");
1146 mid_Device_fillText = get_method(&err, env, "fillText", "(L"PKG"Text;L"PKG"Matrix;L"PKG"ColorSpace;[FFI)V");
1147 mid_Device_strokeText = get_method(&err, env, "strokeText", "(L"PKG"Text;L"PKG"StrokeState;L"PKG"Matrix;L"PKG"ColorSpace;[FFI)V");
1148 mid_Device_clipText = get_method(&err, env, "clipText", "(L"PKG"Text;L"PKG"Matrix;)V");
1149 mid_Device_clipStrokeText = get_method(&err, env, "clipStrokeText", "(L"PKG"Text;L"PKG"StrokeState;L"PKG"Matrix;)V");
1150 mid_Device_ignoreText = get_method(&err, env, "ignoreText", "(L"PKG"Text;L"PKG"Matrix;)V");
1151 mid_Device_fillShade = get_method(&err, env, "fillShade", "(L"PKG"Shade;L"PKG"Matrix;FI)V");
1152 mid_Device_fillImage = get_method(&err, env, "fillImage", "(L"PKG"Image;L"PKG"Matrix;FI)V");
1153 mid_Device_fillImageMask = get_method(&err, env, "fillImageMask", "(L"PKG"Image;L"PKG"Matrix;L"PKG"ColorSpace;[FFI)V");
1154 mid_Device_clipImageMask = get_method(&err, env, "clipImageMask", "(L"PKG"Image;L"PKG"Matrix;)V");
1155 mid_Device_popClip = get_method(&err, env, "popClip", "()V");
1156 mid_Device_beginLayer = get_method(&err, env, "beginLayer", "(Ljava/lang/String;)V");
1157 mid_Device_endLayer = get_method(&err, env, "endLayer", "()V");
1158 mid_Device_beginMask = get_method(&err, env, "beginMask", "(L"PKG"Rect;ZL"PKG"ColorSpace;[FI)V");
1159 mid_Device_endMask = get_method(&err, env, "endMask", "()V");
1160 mid_Device_beginGroup = get_method(&err, env, "beginGroup", "(L"PKG"Rect;L"PKG"ColorSpace;ZZIF)V");
1161 mid_Device_endGroup = get_method(&err, env, "endGroup", "()V");
1162 mid_Device_beginTile = get_method(&err, env, "beginTile", "(L"PKG"Rect;L"PKG"Rect;FFL"PKG"Matrix;II)I");
1163 mid_Device_endTile = get_method(&err, env, "endTile", "()V");
1164 mid_Device_renderFlags = get_method(&err, env, "renderFlags", "(II)V");
1165 mid_Device_setDefaultColorSpaces = get_method(&err, env, "setDefaultColorSpaces", "(L"PKG"DefaultColorSpaces;)V");
1166 mid_Device_beginStructure = get_method(&err, env, "beginStructure", "(ILjava/lang/String;I)V");
1167 mid_Device_endStructure = get_method(&err, env, "endStructure", "()V");
1168 mid_Device_beginMetatext = get_method(&err, env, "beginMetatext", "(ILjava/lang/String;)V");
1169 mid_Device_endMetatext = get_method(&err, env, "endMetatext", "()V");
1170
1171 cls_DisplayList = get_class(&err, env, PKG"DisplayList");
1172 fid_DisplayList_pointer = get_field(&err, env, "pointer", "J");
1173 mid_DisplayList_init = get_method(&err, env, "<init>", "(J)V");
1174
1175 cls_Document = get_class(&err, env, PKG"Document");
1176 fid_Document_pointer = get_field(&err, env, "pointer", "J");
1177 mid_Document_init = get_method(&err, env, "<init>", "(J)V");
1178
1179 cls_DocumentWriter = get_class(&err, env, PKG"DocumentWriter");
1180 fid_DocumentWriter_pointer = get_field(&err, env, "pointer", "J");
1181 fid_DocumentWriter_ocrlistener = get_field(&err, env, "ocrlistener", "J");
1182
1183 cls_DocumentWriter_OCRListener = get_class(&err, env, PKG"DocumentWriter$OCRListener");
1184 mid_DocumentWriter_OCRListener_progress = get_method(&err, env, "progress", "(II)Z");
1185
1186 cls_DOM = get_class(&err, env, PKG"DOM");
1187 fid_DOM_pointer = get_field(&err, env, "pointer", "J");
1188 mid_DOM_init = get_method(&err, env, "<init>", "(J)V");
1189
1190 cls_DOMAttribute = get_class(&err, env, PKG"DOM$DOMAttribute");
1191 fid_DOMAttribute_attribute = get_field(&err, env, "attribute", "Ljava/lang/String;");
1192 fid_DOMAttribute_value = get_field(&err, env, "value", "Ljava/lang/String;");
1193 mid_DOMAttribute_init = get_method(&err, env, "<init>", "()V");
1194
1195 cls_FitzInputStream = get_class(&err, env, PKG"FitzInputStream");
1196 fid_FitzInputStream_pointer = get_field(&err, env, "pointer", "J");
1197 fid_FitzInputStream_markpos = get_field(&err, env, "markpos", "J");
1198 fid_FitzInputStream_closed = get_field(&err, env, "closed", "Z");
1199 mid_FitzInputStream_init = get_method(&err, env, "<init>", "(J)V");
1200
1201 cls_Font = get_class(&err, env, PKG"Font");
1202 fid_Font_pointer = get_field(&err, env, "pointer", "J");
1203 mid_Font_init = get_method(&err, env, "<init>", "(J)V");
1204
1205 cls_Story = get_class(&err, env, PKG"Story");
1206 fid_Story_pointer = get_field(&err, env, "pointer", "J");
1207
1208 cls_Image = get_class(&err, env, PKG"Image");
1209 fid_Image_pointer = get_field(&err, env, "pointer", "J");
1210 mid_Image_init = get_method(&err, env, "<init>", "(J)V");
1211
1212 cls_Link = get_class(&err, env, PKG"Link");
1213 fid_Link_pointer = get_field(&err, env, "pointer", "J");
1214 mid_Link_init = get_method(&err, env, "<init>", "(J)V");
1215
1216 cls_Location = get_class(&err, env, PKG"Location");
1217 mid_Location_init = get_method(&err, env, "<init>", "(II)V");
1218
1219 cls_Matrix = get_class(&err, env, PKG"Matrix");
1220 fid_Matrix_a = get_field(&err, env, "a", "F");
1221 fid_Matrix_b = get_field(&err, env, "b", "F");
1222 fid_Matrix_c = get_field(&err, env, "c", "F");
1223 fid_Matrix_d = get_field(&err, env, "d", "F");
1224 fid_Matrix_e = get_field(&err, env, "e", "F");
1225 fid_Matrix_f = get_field(&err, env, "f", "F");
1226 mid_Matrix_init = get_method(&err, env, "<init>", "(FFFFFF)V");
1227
1228 cls_MultiArchive = get_class(&err, env, PKG"MultiArchive");
1229 mid_MultiArchive_init = get_method(&err, env, "<init>", "(J)V");
1230 fid_MultiArchive_pointer = get_field(&err, env, "pointer", "J");
1231
1232 cls_NativeDevice = get_class(&err, env, PKG"NativeDevice");
1233 fid_NativeDevice_nativeResource = get_field(&err, env, "nativeResource", "Ljava/lang/Object;");
1234 fid_NativeDevice_nativeInfo = get_field(&err, env, "nativeInfo", "J");
1235 mid_NativeDevice_init = get_method(&err, env, "<init>", "(J)V");
1236
1237 cls_Outline = get_class(&err, env, PKG"Outline");
1238 mid_Outline_init = get_method(&err, env, "<init>", "(Ljava/lang/String;Ljava/lang/String;[L"PKG"Outline;)V");
1239
1240 cls_OutlineItem = get_class(&err, env, PKG"OutlineIterator$OutlineItem");
1241 mid_OutlineItem_init = get_method(&err, env, "<init>", "(Ljava/lang/String;Ljava/lang/String;ZFFFI)V");
1242
1243 cls_OutlineIterator = get_class(&err, env, PKG"OutlineIterator");
1244 fid_OutlineIterator_pointer = get_field(&err, env, "pointer", "J");
1245 mid_OutlineIterator_init = get_method(&err, env, "<init>", "(J)V");
1246
1247 cls_Page = get_class(&err, env, PKG"Page");
1248 fid_Page_pointer = get_field(&err, env, "pointer", "J");
1249 mid_Page_init = get_method(&err, env, "<init>", "(J)V");
1250
1251 cls_Path = get_class(&err, env, PKG"Path");
1252 fid_Path_pointer = get_field(&err, env, "pointer", "J");
1253 mid_Path_init = get_method(&err, env, "<init>", "(J)V");
1254
1255 cls_PathWalker = get_class(&err, env, PKG"PathWalker");
1256 mid_PathWalker_moveTo = get_method(&err, env, "moveTo", "(FF)V");
1257 mid_PathWalker_lineTo = get_method(&err, env, "lineTo", "(FF)V");
1258 mid_PathWalker_curveTo = get_method(&err, env, "curveTo", "(FFFFFF)V");
1259 mid_PathWalker_closePath = get_method(&err, env, "closePath", "()V");
1260
1261 cls_PDFAnnotation = get_class(&err, env, PKG"PDFAnnotation");
1262 fid_PDFAnnotation_pointer = get_field(&err, env, "pointer", "J");
1263 mid_PDFAnnotation_init = get_method(&err, env, "<init>", "(J)V");
1264
1265 cls_PDFDocument = get_class(&err, env, PKG"PDFDocument");
1266 fid_PDFDocument_pointer = get_field(&err, env, "pointer", "J");
1267 mid_PDFDocument_init = get_method(&err, env, "<init>", "(J)V");
1268
1269 cls_LinkDestination = get_class(&err, env, PKG"LinkDestination");
1270 mid_LinkDestination_init = get_method(&err, env, "<init>", "(IIIFFFFF)V");
1271 fid_LinkDestination_chapter = get_field(&err, env, "chapter", "I");
1272 fid_LinkDestination_page = get_field(&err, env, "page", "I");
1273 fid_LinkDestination_type = get_field(&err, env, "type", "I");
1274 fid_LinkDestination_x = get_field(&err, env, "x", "F");
1275 fid_LinkDestination_y = get_field(&err, env, "y", "F");
1276 fid_LinkDestination_width = get_field(&err, env, "width", "F");
1277 fid_LinkDestination_height = get_field(&err, env, "height", "F");
1278 fid_LinkDestination_zoom = get_field(&err, env, "zoom", "F");
1279
1280 cls_PDFDocument_JsEventListener = get_class(&err, env, PKG"PDFDocument$JsEventListener");
1281 mid_PDFDocument_JsEventListener_onAlert = get_method(&err, env, "onAlert", "(L"PKG"PDFDocument;Ljava/lang/String;Ljava/lang/String;IIZLjava/lang/String;Z)L"PKG"PDFDocument$JsEventListener$AlertResult;");
1282
1283 cls_PDFDocument_PDFEmbeddedFileParams = get_class(&err, env, PKG"PDFDocument$PDFEmbeddedFileParams");
1284 mid_PDFDocument_PDFEmbeddedFileParams_init = get_method(&err, env, "<init>", "(Ljava/lang/String;Ljava/lang/String;IJJ)V");
1285
1286 cls_AlertResult = get_class(&err, env, PKG"PDFDocument$JsEventListener$AlertResult");
1287 fid_AlertResult_buttonPressed = get_field(&err, env, "buttonPressed", "I");
1288 fid_AlertResult_checkboxChecked = get_field(&err, env, "checkboxChecked", "Z");
1289
1290 cls_PDFGraftMap = get_class(&err, env, PKG"PDFGraftMap");
1291 fid_PDFGraftMap_pointer = get_field(&err, env, "pointer", "J");
1292 mid_PDFGraftMap_init = get_method(&err, env, "<init>", "(J)V");
1293
1294 cls_PDFObject = get_class(&err, env, PKG"PDFObject");
1295 fid_PDFObject_pointer = get_field(&err, env, "pointer", "J");
1296 fid_PDFObject_Null = get_static_field(&err, env, "Null", "L"PKG"PDFObject;");
1297 mid_PDFObject_init = get_method(&err, env, "<init>", "(J)V");
1298
1299 cls_PDFPage = get_class(&err, env, PKG"PDFPage");
1300 fid_PDFPage_pointer = get_field(&err, env, "pointer", "J");
1301 mid_PDFPage_init = get_method(&err, env, "<init>", "(J)V");
1302 cls_PDFProcessor = get_class(&err, env, PKG"PDFProcessor");
1303 mid_PDFProcessor_op_b = get_method(&err, env, "op_b", "()V");
1304 mid_PDFProcessor_op_B = get_method(&err, env, "op_B", "()V");
1305 mid_PDFProcessor_op_BDC = get_method(&err, env, "op_BDC", "(Ljava/lang/String;L"PKG"PDFObject;)V");
1306 mid_PDFProcessor_op_BI = get_method(&err, env, "op_BI", "(L"PKG"Image;)V");
1307 mid_PDFProcessor_op_BMC = get_method(&err, env, "op_BMC", "(Ljava/lang/String;)V");
1308 mid_PDFProcessor_op_bstar = get_method(&err, env, "op_bstar", "()V");
1309 mid_PDFProcessor_op_Bstar = get_method(&err, env, "op_Bstar", "()V");
1310 mid_PDFProcessor_op_BT = get_method(&err, env, "op_BT", "()V");
1311 mid_PDFProcessor_op_BX = get_method(&err, env, "op_BX", "()V");
1312 mid_PDFProcessor_op_c = get_method(&err, env, "op_c", "(FFFFFF)V");
1313 mid_PDFProcessor_op_cm = get_method(&err, env, "op_cm", "(FFFFFF)V");
1314 mid_PDFProcessor_op_cs = get_method(&err, env, "op_cs", "(Ljava/lang/String;L"PKG"ColorSpace;)V");
1315 mid_PDFProcessor_op_CS = get_method(&err, env, "op_CS", "(Ljava/lang/String;L"PKG"ColorSpace;)V");
1316 mid_PDFProcessor_op_d = get_method(&err, env, "op_d", "([FF)V");
1317 mid_PDFProcessor_op_d0 = get_method(&err, env, "op_d0", "(FF)V");
1318 mid_PDFProcessor_op_d1 = get_method(&err, env, "op_d1", "(FFFFFF)V");
1319 mid_PDFProcessor_op_Do_form = get_method(&err, env, "op_Do_form", "(Ljava/lang/String;L"PKG"PDFObject;L"PKG"PDFObject;)V");
1320 mid_PDFProcessor_op_Do_image = get_method(&err, env, "op_Do_image", "(Ljava/lang/String;L"PKG"Image;)V");
1321 mid_PDFProcessor_op_DP = get_method(&err, env, "op_DP", "(Ljava/lang/String;L"PKG"PDFObject;)V");
1322 mid_PDFProcessor_op_dquote_byte_array = get_method(&err, env, "op_dquote", "(FF[B)V");
1323 mid_PDFProcessor_op_dquote_string = get_method(&err, env, "op_dquote", "(FFLjava/lang/String;)V");
1324 mid_PDFProcessor_op_EMC = get_method(&err, env, "op_EMC", "()V");
1325 mid_PDFProcessor_op_ET = get_method(&err, env, "op_ET", "()V");
1326 mid_PDFProcessor_op_EX = get_method(&err, env, "op_EX", "()V");
1327 mid_PDFProcessor_op_f = get_method(&err, env, "op_f", "()V");
1328 mid_PDFProcessor_op_F = get_method(&err, env, "op_F", "()V");
1329 mid_PDFProcessor_op_fstar = get_method(&err, env, "op_fstar", "()V");
1330 mid_PDFProcessor_op_g = get_method(&err, env, "op_g", "(F)V");
1331 mid_PDFProcessor_op_G = get_method(&err, env, "op_G", "(F)V");
1332 mid_PDFProcessor_op_gs = get_method(&err, env, "op_gs", "(Ljava/lang/String;L"PKG"PDFObject;)V");
1333 mid_PDFProcessor_op_h = get_method(&err, env, "op_h", "()V");
1334 mid_PDFProcessor_op_i = get_method(&err, env, "op_i", "(F)V");
1335 mid_PDFProcessor_op_j = get_method(&err, env, "op_j", "(F)V");
1336 mid_PDFProcessor_op_J = get_method(&err, env, "op_J", "(F)V");
1337 mid_PDFProcessor_op_k = get_method(&err, env, "op_k", "(FFFF)V");
1338 mid_PDFProcessor_op_K = get_method(&err, env, "op_K", "(FFFF)V");
1339 mid_PDFProcessor_op_l = get_method(&err, env, "op_l", "(FF)V");
1340 mid_PDFProcessor_op_m = get_method(&err, env, "op_m", "(FF)V");
1341 mid_PDFProcessor_op_M = get_method(&err, env, "op_M", "(F)V");
1342 mid_PDFProcessor_op_MP = get_method(&err, env, "op_MP", "(Ljava/lang/String;)V");
1343 mid_PDFProcessor_op_n = get_method(&err, env, "op_n", "()V");
1344 mid_PDFProcessor_op_popResources = get_method(&err, env, "popResources", "()V");
1345 mid_PDFProcessor_op_pushResources = get_method(&err, env, "pushResources", "(L"PKG"PDFObject;)V");
1346 mid_PDFProcessor_op_q = get_method(&err, env, "op_q", "()V");
1347 mid_PDFProcessor_op_Q = get_method(&err, env, "op_Q", "()V");
1348 mid_PDFProcessor_op_re = get_method(&err, env, "op_re", "(FFFF)V");
1349 mid_PDFProcessor_op_rg = get_method(&err, env, "op_rg", "(FFF)V");
1350 mid_PDFProcessor_op_RG = get_method(&err, env, "op_RG", "(FFF)V");
1351 mid_PDFProcessor_op_ri = get_method(&err, env, "op_ri", "(Ljava/lang/String;)V");
1352 mid_PDFProcessor_op_s = get_method(&err, env, "op_s", "()V");
1353 mid_PDFProcessor_op_S = get_method(&err, env, "op_S", "()V");
1354 mid_PDFProcessor_op_sc_color = get_method(&err, env, "op_sc_color", "([F)V");
1355 mid_PDFProcessor_op_SC_color = get_method(&err, env, "op_SC_color", "([F)V");
1356 mid_PDFProcessor_op_sc_pattern = get_method(&err, env, "op_sc_pattern", "(Ljava/lang/String;I[F)V");
1357 mid_PDFProcessor_op_SC_pattern = get_method(&err, env, "op_SC_pattern", "(Ljava/lang/String;I[F)V");
1358 mid_PDFProcessor_op_sc_shade = get_method(&err, env, "op_sc_shade", "(Ljava/lang/String;)V");
1359 mid_PDFProcessor_op_SC_shade = get_method(&err, env, "op_SC_shade", "(Ljava/lang/String;)V");
1360 mid_PDFProcessor_op_sh = get_method(&err, env, "op_sh", "(Ljava/lang/String;L"PKG"Shade;)V");
1361 mid_PDFProcessor_op_squote_byte_array = get_method(&err, env, "op_squote", "([B)V");
1362 mid_PDFProcessor_op_squote_string = get_method(&err, env, "op_squote", "(Ljava/lang/String;)V");
1363 mid_PDFProcessor_op_Tc = get_method(&err, env, "op_Tc", "(F)V");
1364 mid_PDFProcessor_op_Td = get_method(&err, env, "op_Td", "(FF)V");
1365 mid_PDFProcessor_op_TD = get_method(&err, env, "op_TD", "(FF)V");
1366 mid_PDFProcessor_op_Tf = get_method(&err, env, "op_Tf", "(Ljava/lang/String;F)V");
1367 mid_PDFProcessor_op_Tj_byte_array = get_method(&err, env, "op_Tj", "([B)V");
1368 mid_PDFProcessor_op_Tj_string = get_method(&err, env, "op_Tj", "(Ljava/lang/String;)V");
1369 mid_PDFProcessor_op_TJ = get_method(&err, env, "op_TJ", "([Ljava/lang/Object;)V");
1370 mid_PDFProcessor_op_TL = get_method(&err, env, "op_TL", "(F)V");
1371 mid_PDFProcessor_op_Tm = get_method(&err, env, "op_Tm", "(FFFFFF)V");
1372 mid_PDFProcessor_op_Tr = get_method(&err, env, "op_Tr", "(F)V");
1373 mid_PDFProcessor_op_Ts = get_method(&err, env, "op_Ts", "(F)V");
1374 mid_PDFProcessor_op_Tstar = get_method(&err, env, "op_Tstar", "()V");
1375 mid_PDFProcessor_op_Tw = get_method(&err, env, "op_Tw", "(F)V");
1376 mid_PDFProcessor_op_Tz = get_method(&err, env, "op_Tz", "(F)V");
1377 mid_PDFProcessor_op_v = get_method(&err, env, "op_v", "(FFFF)V");
1378 mid_PDFProcessor_op_w = get_method(&err, env, "op_w", "(F)V");
1379 mid_PDFProcessor_op_W = get_method(&err, env, "op_W", "()V");
1380 mid_PDFProcessor_op_Wstar = get_method(&err, env, "op_Wstar", "()V");
1381 mid_PDFProcessor_op_y = get_method(&err, env, "op_y", "(FFFF)V");
1382 cls_PDFWidget = get_class(&err, env, PKG"PDFWidget");
1383 fid_PDFWidget_pointer = get_field(&err, env, "pointer", "J");
1384 fid_PDFWidget_fieldType = get_field(&err, env, "fieldType", "I");
1385 fid_PDFWidget_textFormat = get_field(&err, env, "textFormat", "I");
1386 fid_PDFWidget_maxLen = get_field(&err, env, "maxLen", "I");
1387 fid_PDFWidget_fieldFlags = get_field(&err, env, "fieldFlags", "I");
1388 fid_PDFWidget_options = get_field(&err, env, "options", "[Ljava/lang/String;");
1389 mid_PDFWidget_init = get_method(&err, env, "<init>", "(J)V");
1390
1391 cls_PKCS7Signer = get_class(&err, env, PKG"PKCS7Signer");
1392 fid_PKCS7Signer_pointer = get_field(&err, env, "pointer", "J");
1393 mid_PKCS7Signer_name = get_method(&err, env, "name", "()L"PKG"PKCS7DistinguishedName;");
1394 mid_PKCS7Signer_sign = get_method(&err, env, "sign", "(L"PKG"FitzInputStream;)[B");
1395 mid_PKCS7Signer_maxDigest = get_method(&err, env, "maxDigest", "()I");
1396
1397 cls_PKCS7Verifier = get_class(&err, env, PKG"PKCS7Verifier");
1398 fid_PKCS7Verifier_pointer = get_field(&err, env, "pointer", "J");
1399 mid_PKCS7Verifier_checkCertificate = get_method(&err, env, "checkCertificate", "([B)I");
1400 mid_PKCS7Verifier_checkDigest = get_method(&err, env, "checkDigest", "(L"PKG"FitzInputStream;[B)I");
1401
1402 cls_PKCS7DistinguishedName = get_class(&err, env, PKG"PKCS7DistinguishedName");
1403 fid_PKCS7DistinguishedName_cn = get_field(&err, env, "cn", "Ljava/lang/String;");
1404 fid_PKCS7DistinguishedName_c = get_field(&err, env, "c", "Ljava/lang/String;");
1405 fid_PKCS7DistinguishedName_o = get_field(&err, env, "o", "Ljava/lang/String;");
1406 fid_PKCS7DistinguishedName_ou = get_field(&err, env, "ou", "Ljava/lang/String;");
1407 fid_PKCS7DistinguishedName_email = get_field(&err, env, "email", "Ljava/lang/String;");
1408 mid_PKCS7DistinguishedName_init = get_method(&err, env, "<init>", "()V");
1409
1410 cls_Pixmap = get_class(&err, env, PKG"Pixmap");
1411 fid_Pixmap_pointer = get_field(&err, env, "pointer", "J");
1412 mid_Pixmap_init = get_method(&err, env, "<init>", "(J)V");
1413
1414 cls_Point = get_class(&err, env, PKG"Point");
1415 mid_Point_init = get_method(&err, env, "<init>", "(FF)V");
1416 fid_Point_x = get_field(&err, env, "x", "F");
1417 fid_Point_y = get_field(&err, env, "y", "F");
1418
1419 cls_Quad = get_class(&err, env, PKG"Quad");
1420 fid_Quad_ul_x = get_field(&err, env, "ul_x", "F");
1421 fid_Quad_ul_y = get_field(&err, env, "ul_y", "F");
1422 fid_Quad_ur_x = get_field(&err, env, "ur_x", "F");
1423 fid_Quad_ur_y = get_field(&err, env, "ur_y", "F");
1424 fid_Quad_ll_x = get_field(&err, env, "ll_x", "F");
1425 fid_Quad_ll_y = get_field(&err, env, "ll_y", "F");
1426 fid_Quad_lr_x = get_field(&err, env, "lr_x", "F");
1427 fid_Quad_lr_y = get_field(&err, env, "lr_y", "F");
1428 mid_Quad_init = get_method(&err, env, "<init>", "(FFFFFFFF)V");
1429
1430 cls_ArrayOfQuad = get_class(&err, env, "[L"PKG"Quad;");
1431
1432 cls_Rect = get_class(&err, env, PKG"Rect");
1433 fid_Rect_x0 = get_field(&err, env, "x0", "F");
1434 fid_Rect_x1 = get_field(&err, env, "x1", "F");
1435 fid_Rect_y0 = get_field(&err, env, "y0", "F");
1436 fid_Rect_y1 = get_field(&err, env, "y1", "F");
1437 mid_Rect_init = get_method(&err, env, "<init>", "(FFFF)V");
1438
1439 cls_SeekableInputStream = get_class(&err, env, PKG"SeekableInputStream");
1440 mid_SeekableInputStream_read = get_method(&err, env, "read", "([B)I");
1441
1442 cls_SeekableOutputStream = get_class(&err, env, PKG"SeekableOutputStream");
1443 mid_SeekableOutputStream_truncate = get_method(&err, env, "truncate", "()V");
1444 mid_SeekableOutputStream_write = get_method(&err, env, "write", "([BII)V");
1445
1446 cls_SeekableStream = get_class(&err, env, PKG"SeekableStream");
1447 mid_SeekableStream_position = get_method(&err, env, "position", "()J");
1448 mid_SeekableStream_seek = get_method(&err, env, "seek", "(JI)J");
1449
1450 cls_Shade = get_class(&err, env, PKG"Shade");
1451 fid_Shade_pointer = get_field(&err, env, "pointer", "J");
1452 mid_Shade_init = get_method(&err, env, "<init>", "(J)V");
1453
1454 cls_String = get_class(&err, env, "java/lang/String");
1455
1456 cls_StrokeState = get_class(&err, env, PKG"StrokeState");
1457 fid_StrokeState_pointer = get_field(&err, env, "pointer", "J");
1458 mid_StrokeState_init = get_method(&err, env, "<init>", "(J)V");
1459
1460 cls_StructuredText = get_class(&err, env, PKG"StructuredText");
1461 fid_StructuredText_pointer = get_field(&err, env, "pointer", "J");
1462 mid_StructuredText_init = get_method(&err, env, "<init>", "(J)V");
1463
1464 cls_StructuredTextWalker = get_class(&err, env, PKG"StructuredTextWalker");
1465 mid_StructuredTextWalker_onImageBlock = get_method(&err, env, "onImageBlock", "(L"PKG"Rect;L"PKG"Matrix;L"PKG"Image;)V");
1466 mid_StructuredTextWalker_beginStruct = get_method(&err, env, "beginStruct", "(Ljava/lang/String;Ljava/lang/String;I)V");
1467 mid_StructuredTextWalker_beginTextBlock = get_method(&err, env, "beginTextBlock", "(L"PKG"Rect;)V");
1468 mid_StructuredTextWalker_endStruct = get_method(&err, env, "endStruct", "()V");
1469 mid_StructuredTextWalker_endTextBlock = get_method(&err, env, "endTextBlock", "()V");
1470 mid_StructuredTextWalker_beginLine = get_method(&err, env, "beginLine", "(L"PKG"Rect;IL"PKG"Point;)V");
1471 mid_StructuredTextWalker_endLine = get_method(&err, env, "endLine", "()V");
1472 mid_StructuredTextWalker_onChar = get_method(&err, env, "onChar", "(IL"PKG"Point;L"PKG"Font;FL"PKG"Quad;)V");
1473 mid_StructuredTextWalker_onVector = get_method(&err, env, "onVector", "(L"PKG"Rect;L"PKG"StructuredTextWalker$VectorInfo;I)V");
1474
1475 cls_StructuredTextWalker_VectorInfo = get_class(&err, env, PKG"StructuredTextWalker$VectorInfo");
1476 fid_StructuredTextWalker_VectorInfo_isRectangle = get_field(&err, env, "isRectangle", "Z");
1477 fid_StructuredTextWalker_VectorInfo_isStroked = get_field(&err, env, "isStroked", "Z");
1478 mid_StructuredTextWalker_VectorInfo_init = get_method(&err, env, "<init>", "()V");
1479
1480 cls_Text = get_class(&err, env, PKG"Text");
1481 fid_Text_pointer = get_field(&err, env, "pointer", "J");
1482 mid_Text_init = get_method(&err, env, "<init>", "(J)V");
1483
1484 cls_TextBlock = get_class(&err, env, PKG"StructuredText$TextBlock");
1485 fid_TextBlock_bbox = get_field(&err, env, "bbox", "L"PKG"Rect;");
1486 fid_TextBlock_lines = get_field(&err, env, "lines", "[L"PKG"StructuredText$TextLine;");
1487 mid_TextBlock_init = get_method(&err, env, "<init>", "()V");
1488
1489 cls_TextChar = get_class(&err, env, PKG"StructuredText$TextChar");
1490 fid_TextChar_quad = get_field(&err, env, "quad", "L"PKG"Quad;");
1491 fid_TextChar_c = get_field(&err, env, "c", "I");
1492 mid_TextChar_init = get_method(&err, env, "<init>", "()V");
1493
1494 cls_TextLine = get_class(&err, env, PKG"StructuredText$TextLine");
1495 fid_TextLine_bbox = get_field(&err, env, "bbox", "L"PKG"Rect;");
1496 fid_TextLine_chars = get_field(&err, env, "chars", "[L"PKG"StructuredText$TextChar;");
1497 mid_TextLine_init = get_method(&err, env, "<init>", "()V");
1498
1499 cls_TextWalker = get_class(&err, env, PKG"TextWalker");
1500 mid_TextWalker_showGlyph = get_method(&err, env, "showGlyph", "(L"PKG"Font;L"PKG"Matrix;IIZ)V");
1501
1502 cls_TextWidgetLayout = get_class(&err, env, PKG"PDFWidget$TextWidgetLayout");
1503 fid_TextWidgetLayout_matrix = get_field(&err, env, "matrix", "L"PKG"Matrix;");
1504 fid_TextWidgetLayout_invMatrix = get_field(&err, env, "invMatrix", "L"PKG"Matrix;");
1505 fid_TextWidgetLayout_lines = get_field(&err, env, "lines", "[L"PKG"PDFWidget$TextWidgetLineLayout;");
1506 mid_TextWidgetLayout_init = get_method(&err, env, "<init>", "()V");
1507
1508 cls_TextWidgetLineLayout = get_class(&err, env, PKG"PDFWidget$TextWidgetLineLayout");
1509 fid_TextWidgetLineLayout_x = get_field(&err, env, "x", "F");
1510 fid_TextWidgetLineLayout_y = get_field(&err, env, "y", "F");
1511 fid_TextWidgetLineLayout_fontSize = get_field(&err, env, "fontSize", "F");
1512 fid_TextWidgetLineLayout_index = get_field(&err, env, "index", "I");
1513 fid_TextWidgetLineLayout_rect = get_field(&err, env, "rect", "L"PKG"Rect;");
1514 fid_TextWidgetLineLayout_chars = get_field(&err, env, "chars", "[L"PKG"PDFWidget$TextWidgetCharLayout;");
1515 mid_TextWidgetLineLayout_init = get_method(&err, env, "<init>", "()V");
1516
1517 cls_TextWidgetCharLayout = get_class(&err, env, PKG"PDFWidget$TextWidgetCharLayout");
1518 fid_TextWidgetCharLayout_x = get_field(&err, env, "x", "F");
1519 fid_TextWidgetCharLayout_advance = get_field(&err, env, "advance", "F");
1520 fid_TextWidgetCharLayout_index = get_field(&err, env, "index", "I");
1521 fid_TextWidgetCharLayout_rect = get_field(&err, env, "rect", "L"PKG"Rect;");
1522 mid_TextWidgetCharLayout_init = get_method(&err, env, "<init>", "()V");
1523
1524 cls_TreeArchive = get_class(&err, env, PKG"TreeArchive");
1525 mid_TreeArchive_init = get_method(&err, env, "<init>", "(J)V");
1526 fid_TreeArchive_pointer = get_field(&err, env, "pointer", "J");
1527
1528 cls_AbortException = get_class(&err, env, PKG"AbortException");
1529 cls_TryLaterException = get_class(&err, env, PKG"TryLaterException");
1530
1531 /* Standard Java classes */
1532
1533 cls_Float = get_class(&err, env, "java/lang/Float");
1534 mid_Float_init = get_method(&err, env, "<init>", "(F)V");
1535
1536 cls_FloatArray = get_class(&err, env, "[F");
1537 cls_IntegerArray = get_class(&err, env, "[I");
1538
1539 cls_Object = get_class(&err, env, "java/lang/Object");
1540 mid_Object_toString = get_method(&err, env, "toString", "()Ljava/lang/String;");
1541
1542 cls_IndexOutOfBoundsException = get_class(&err, env, "java/lang/IndexOutOfBoundsException");
1543 cls_IllegalArgumentException = get_class(&err, env, "java/lang/IllegalArgumentException");
1544 cls_IOException = get_class(&err, env, "java/io/IOException");
1545 cls_NullPointerException = get_class(&err, env, "java/lang/NullPointerException");
1546 cls_RuntimeException = get_class(&err, env, "java/lang/RuntimeException");
1547 cls_UnsupportedOperationException = get_class(&err, env, "java/lang/UnsupportedOperationException");
1548
1549 cls_OutOfMemoryError = get_class(&err, env, "java/lang/OutOfMemoryError");
1550
1551 cls_ArrayList = get_class(&err, env, "java/util/ArrayList");
1552 mid_ArrayList_init = get_method(&err, env, "<init>", "()V");
1553 mid_ArrayList_add = get_method(&err, env, "add", "(Ljava/lang/Object;)Z");
1554 mid_ArrayList_toArray = get_method(&err, env, "toArray", "([Ljava/lang/Object;)[Ljava/lang/Object;");
1555
1556 if (err)
1557 {
1558 LOGE("one or more class, member or field IDs could not be found");
1559 return -1;
1560 }
1561
1562 return 0;
1563 }
1564
1565 /* When making callbacks from C to java, we may be called on threads
1566 * other than the foreground. As such, we have no JNIEnv. This function
1567 * handles getting us the required environment */
1568 static JNIEnv *jni_attach_thread(jboolean *detach)
1569 {
1570 JNIEnv *env = NULL;
1571 int state;
1572
1573 *detach = JNI_FALSE;
1574 state = (*jvm)->GetEnv(jvm, (void *)&env, MY_JNI_VERSION);
1575 if (state == JNI_EDETACHED)
1576 {
1577 *detach = JNI_TRUE;
1578 state = (*jvm)->AttachCurrentThread(jvm, (void *)&env, NULL);
1579 }
1580
1581 if (state != JNI_OK) return NULL;
1582
1583 return env;
1584 }
1585
1586 static void jni_detach_thread(jboolean detach)
1587 {
1588 if (!detach) return;
1589 (*jvm)->DetachCurrentThread(jvm);
1590 }
1591
1592 static void lose_fids(JNIEnv *env)
1593 {
1594 (*env)->DeleteGlobalRef(env, cls_AbortException);
1595 (*env)->DeleteGlobalRef(env, cls_AlertResult);
1596 (*env)->DeleteGlobalRef(env, cls_Archive);
1597 (*env)->DeleteGlobalRef(env, cls_ArrayList);
1598 (*env)->DeleteGlobalRef(env, cls_ArrayOfQuad);
1599 (*env)->DeleteGlobalRef(env, cls_BarcodeInfo);
1600 (*env)->DeleteGlobalRef(env, cls_Buffer);
1601 (*env)->DeleteGlobalRef(env, cls_ColorSpace);
1602 (*env)->DeleteGlobalRef(env, cls_Context);
1603 (*env)->DeleteGlobalRef(env, cls_Context_Log);
1604 (*env)->DeleteGlobalRef(env, cls_Context_Version);
1605 (*env)->DeleteGlobalRef(env, cls_Cookie);
1606 (*env)->DeleteGlobalRef(env, cls_DefaultAppearance);
1607 (*env)->DeleteGlobalRef(env, cls_DefaultColorSpaces);
1608 (*env)->DeleteGlobalRef(env, cls_Device);
1609 (*env)->DeleteGlobalRef(env, cls_DisplayList);
1610 (*env)->DeleteGlobalRef(env, cls_Document);
1611 (*env)->DeleteGlobalRef(env, cls_DocumentWriter);
1612 (*env)->DeleteGlobalRef(env, cls_DOM);
1613 (*env)->DeleteGlobalRef(env, cls_DOMAttribute);
1614 (*env)->DeleteGlobalRef(env, cls_FitzInputStream);
1615 (*env)->DeleteGlobalRef(env, cls_Float);
1616 (*env)->DeleteGlobalRef(env, cls_FloatArray);
1617 (*env)->DeleteGlobalRef(env, cls_Font);
1618 (*env)->DeleteGlobalRef(env, cls_Story);
1619 (*env)->DeleteGlobalRef(env, cls_IOException);
1620 (*env)->DeleteGlobalRef(env, cls_IllegalArgumentException);
1621 (*env)->DeleteGlobalRef(env, cls_Image);
1622 (*env)->DeleteGlobalRef(env, cls_IndexOutOfBoundsException);
1623 (*env)->DeleteGlobalRef(env, cls_IntegerArray);
1624 (*env)->DeleteGlobalRef(env, cls_Link);
1625 (*env)->DeleteGlobalRef(env, cls_LinkDestination);
1626 (*env)->DeleteGlobalRef(env, cls_Location);
1627 (*env)->DeleteGlobalRef(env, cls_Matrix);
1628 (*env)->DeleteGlobalRef(env, cls_MultiArchive);
1629 (*env)->DeleteGlobalRef(env, cls_NativeDevice);
1630 (*env)->DeleteGlobalRef(env, cls_NullPointerException);
1631 (*env)->DeleteGlobalRef(env, cls_Object);
1632 (*env)->DeleteGlobalRef(env, cls_OutOfMemoryError);
1633 (*env)->DeleteGlobalRef(env, cls_Outline);
1634 (*env)->DeleteGlobalRef(env, cls_OutlineItem);
1635 (*env)->DeleteGlobalRef(env, cls_OutlineIterator);
1636 (*env)->DeleteGlobalRef(env, cls_PDFAnnotation);
1637 (*env)->DeleteGlobalRef(env, cls_PDFDocument);
1638 (*env)->DeleteGlobalRef(env, cls_PDFDocument_JsEventListener);
1639 (*env)->DeleteGlobalRef(env, cls_PDFDocument_PDFEmbeddedFileParams);
1640 (*env)->DeleteGlobalRef(env, cls_PDFGraftMap);
1641 (*env)->DeleteGlobalRef(env, cls_PDFObject);
1642 (*env)->DeleteGlobalRef(env, cls_PDFPage);
1643 (*env)->DeleteGlobalRef(env, cls_PDFProcessor);
1644 (*env)->DeleteGlobalRef(env, cls_PDFWidget);
1645 (*env)->DeleteGlobalRef(env, cls_PKCS7DistinguishedName);
1646 (*env)->DeleteGlobalRef(env, cls_PKCS7Signer);
1647 (*env)->DeleteGlobalRef(env, cls_PKCS7Verifier);
1648 (*env)->DeleteGlobalRef(env, cls_Page);
1649 (*env)->DeleteGlobalRef(env, cls_Path);
1650 (*env)->DeleteGlobalRef(env, cls_PathWalker);
1651 (*env)->DeleteGlobalRef(env, cls_Pixmap);
1652 (*env)->DeleteGlobalRef(env, cls_Point);
1653 (*env)->DeleteGlobalRef(env, cls_Quad);
1654 (*env)->DeleteGlobalRef(env, cls_Rect);
1655 (*env)->DeleteGlobalRef(env, cls_RuntimeException);
1656 (*env)->DeleteGlobalRef(env, cls_SeekableInputStream);
1657 (*env)->DeleteGlobalRef(env, cls_SeekableOutputStream);
1658 (*env)->DeleteGlobalRef(env, cls_SeekableStream);
1659 (*env)->DeleteGlobalRef(env, cls_Shade);
1660 (*env)->DeleteGlobalRef(env, cls_String);
1661 (*env)->DeleteGlobalRef(env, cls_StrokeState);
1662 (*env)->DeleteGlobalRef(env, cls_StructuredText);
1663 (*env)->DeleteGlobalRef(env, cls_StructuredTextWalker);
1664 (*env)->DeleteGlobalRef(env, cls_StructuredTextWalker_VectorInfo);
1665 (*env)->DeleteGlobalRef(env, cls_Text);
1666 (*env)->DeleteGlobalRef(env, cls_TextBlock);
1667 (*env)->DeleteGlobalRef(env, cls_TextChar);
1668 (*env)->DeleteGlobalRef(env, cls_TextLine);
1669 (*env)->DeleteGlobalRef(env, cls_TextWalker);
1670 (*env)->DeleteGlobalRef(env, cls_TextWidgetCharLayout);
1671 (*env)->DeleteGlobalRef(env, cls_TextWidgetLayout);
1672 (*env)->DeleteGlobalRef(env, cls_TextWidgetLineLayout);
1673 (*env)->DeleteGlobalRef(env, cls_TreeArchive);
1674 (*env)->DeleteGlobalRef(env, cls_TryLaterException);
1675 (*env)->DeleteGlobalRef(env, cls_UnsupportedOperationException);
1676 }
1677
1678 JNIEXPORT jint JNICALL
1679 JNI_OnLoad(JavaVM *vm, void *reserved)
1680 {
1681 JNIEnv *env;
1682 jint ret;
1683
1684 ret = (*vm)->GetEnv(vm, (void **)&env, MY_JNI_VERSION);
1685 if (ret != JNI_OK)
1686 {
1687 LOGE("cannot get JNI interface during load (error %d)", ret);
1688 return -1;
1689 }
1690
1691 return MY_JNI_VERSION;
1692 }
1693
1694 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved)
1695 {
1696 JNIEnv *env;
1697 jint ret;
1698
1699 ret = (*vm)->GetEnv(vm, (void **)&env, MY_JNI_VERSION);
1700 if (ret != JNI_OK)
1701 {
1702 /* If this fails, we're really in trouble! */
1703 LOGE("cannot get JNI interface during unload (error %d)", ret);
1704 return;
1705 }
1706
1707 fz_drop_context(base_context);
1708 base_context = NULL;
1709 lose_fids(env);
1710 }
1711
1712 #ifdef HAVE_ANDROID
1713 #include "jni/android/androidfonts.c"
1714 #endif
1715
1716 #include "jni/wrap.c"
1717 #include "jni/helpers.c"
1718
1719 #include "jni/context.c"
1720 #include "jni/device.c"
1721 #include "jni/nativedevice.c"
1722
1723 #include "jni/archive.c"
1724 #include "jni/barcodeinfo.c"
1725 #include "jni/buffer.c"
1726 #include "jni/colorspace.c"
1727 #include "jni/cookie.c"
1728 #include "jni/defaultcolorspaces.c"
1729 #include "jni/displaylist.c"
1730 #include "jni/displaylistdevice.c"
1731 #include "jni/document.c"
1732 #include "jni/documentwriter.c"
1733 #include "jni/dom.c"
1734 #include "jni/drawdevice.c"
1735 #include "jni/fitzinputstream.c"
1736 #include "jni/font.c"
1737 #include "jni/image.c"
1738 #include "jni/link.c"
1739 #include "jni/multiarchive.c"
1740 #include "jni/outlineiterator.c"
1741 #include "jni/page.c"
1742 #include "jni/path.c"
1743 #include "jni/pdfannotation.c"
1744 #include "jni/pdfdocument.c"
1745 #include "jni/pdfgraftmap.c"
1746 #include "jni/pdfobject.c"
1747 #include "jni/pdfpage.c"
1748 #include "jni/pdfwidget.c"
1749 #include "jni/pixmap.c"
1750 #include "jni/pkcs7signer.c"
1751 #include "jni/pkcs7verifier.c"
1752 #include "jni/rect.c"
1753 #include "jni/shade.c"
1754 #include "jni/story.c"
1755 #include "jni/strokestate.c"
1756 #include "jni/structuredtext.c"
1757 #include "jni/text.c"
1758 #include "jni/treearchive.c"
1759
1760 #ifdef HAVE_ANDROID
1761 #include "jni/android/androiddrawdevice.c"
1762 #include "jni/android/androidimage.c"
1763 #endif