Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/platform/java/jni/helpers.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) 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 typedef struct { | |
| 24 JNIEnv *env; | |
| 25 jobject hits; | |
| 26 int error; | |
| 27 } search_state; | |
| 28 | |
| 29 static int hit_callback(fz_context *ctx, void *opaque, int quads, fz_quad *quad) | |
| 30 { | |
| 31 search_state *state = (search_state *) opaque; | |
| 32 JNIEnv *env = state->env; | |
| 33 jobjectArray arr; | |
| 34 int i; | |
| 35 jboolean changed = JNI_FALSE; | |
| 36 | |
| 37 arr = (*env)->NewObjectArray(env, quads, cls_Quad, NULL); | |
| 38 if (!arr || (*env)->ExceptionCheck(env)) | |
| 39 { | |
| 40 state->error = 1; | |
| 41 return 1; | |
| 42 } | |
| 43 | |
| 44 changed = (*env)->CallBooleanMethod(env, state->hits, mid_ArrayList_add, arr); | |
| 45 if (!changed || (*env)->ExceptionCheck(env)) | |
| 46 { | |
| 47 state->error = 1; | |
| 48 return 1; | |
| 49 } | |
| 50 | |
| 51 for (i = 0; i < quads; i++) | |
| 52 { | |
| 53 jobject jquad = to_Quad_safe(ctx, env, quad[i]); | |
| 54 if (!jquad || (*env)->ExceptionCheck(env)) | |
| 55 { | |
| 56 state->error = 1; | |
| 57 return 1; | |
| 58 } | |
| 59 (*env)->SetObjectArrayElement(env, arr, i, jquad); | |
| 60 if ((*env)->ExceptionCheck(env)) | |
| 61 { | |
| 62 state->error = 1; | |
| 63 return 1; | |
| 64 } | |
| 65 (*env)->DeleteLocalRef(env, jquad); | |
| 66 } | |
| 67 | |
| 68 (*env)->DeleteLocalRef(env, arr); | |
| 69 | |
| 70 return 0; | |
| 71 } | |
| 72 | |
| 73 typedef struct resources_stack | |
| 74 { | |
| 75 struct resources_stack *next; | |
| 76 pdf_obj *resources; | |
| 77 } resources_stack; | |
| 78 | |
| 79 typedef struct | |
| 80 { | |
| 81 pdf_processor super; | |
| 82 resources_stack *rstack; | |
| 83 int extgstate; | |
| 84 | |
| 85 JNIEnv *env; | |
| 86 jobject self; | |
| 87 } pdf_java_processor; | |
| 88 | |
| 89 #define PROC_BEGIN(OP) \ | |
| 90 jobject jproc = ((pdf_java_processor*) proc)->self; \ | |
| 91 jboolean detach = JNI_FALSE; \ | |
| 92 JNIEnv *env = jni_attach_thread(&detach); \ | |
| 93 if (env == NULL) \ | |
| 94 fz_throw(ctx, FZ_ERROR_GENERIC, "cannot attach to JVM in java_proc_%s", OP); | |
| 95 | |
| 96 #define PROC_END(N) \ | |
| 97 if ((*env)->ExceptionCheck(env)) \ | |
| 98 fz_throw_java_and_detach_thread(ctx, env, detach); \ | |
| 99 jni_detach_thread(detach); | |
| 100 | |
| 101 static int java_is_ascii(unsigned char *str, size_t len) | |
| 102 { | |
| 103 size_t i, is_ascii = 1; | |
| 104 for (i = 0; i < len; ++i) | |
| 105 if (str[i] == 0 || str[i] > 127) | |
| 106 is_ascii = 0; | |
| 107 return is_ascii; | |
| 108 } | |
| 109 | |
| 110 static jstring java_to_string(JNIEnv *env, fz_context *ctx, unsigned char *str, size_t len) | |
| 111 { | |
| 112 jstring jstr = (*env)->NewStringUTF(env, (char *) str); | |
| 113 if ((*env)->ExceptionCheck(env)) | |
| 114 return NULL; | |
| 115 return jstr; | |
| 116 } | |
| 117 | |
| 118 static jobject java_to_byte_array(JNIEnv *env, fz_context *ctx, unsigned char *str, size_t len) | |
| 119 { | |
| 120 size_t i; | |
| 121 jobject jarray = (*env)->NewByteArray(env, len); | |
| 122 if ((*env)->ExceptionCheck(env)) | |
| 123 return NULL; | |
| 124 for (i = 0; i < len; ++i) | |
| 125 { | |
| 126 jbyte v = str[i]; | |
| 127 (*env)->SetByteArrayRegion(env, jarray, i, 1, &v); | |
| 128 } | |
| 129 return jarray; | |
| 130 } | |
| 131 | |
| 132 static void java_proc_w(fz_context *ctx, pdf_processor *proc, float linewidth) | |
| 133 { | |
| 134 PROC_BEGIN("w"); | |
| 135 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_w, linewidth); | |
| 136 PROC_END("w"); | |
| 137 } | |
| 138 | |
| 139 static void java_proc_j(fz_context *ctx, pdf_processor *proc, int linejoin) | |
| 140 { | |
| 141 PROC_BEGIN("j"); | |
| 142 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_j, linejoin); | |
| 143 PROC_END("j"); | |
| 144 } | |
| 145 | |
| 146 static void java_proc_J(fz_context *ctx, pdf_processor *proc, int linecap) | |
| 147 { | |
| 148 PROC_BEGIN("J"); | |
| 149 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_J, linecap); | |
| 150 PROC_END("J"); | |
| 151 } | |
| 152 | |
| 153 static void java_proc_M(fz_context *ctx, pdf_processor *proc, float miterlimit) | |
| 154 { | |
| 155 PROC_BEGIN("M"); | |
| 156 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_M, miterlimit); | |
| 157 PROC_END("M"); | |
| 158 } | |
| 159 | |
| 160 static void java_proc_d(fz_context *ctx, pdf_processor *proc, pdf_obj *array_, float phase) | |
| 161 { | |
| 162 jfloatArray jarray; | |
| 163 int i, n; | |
| 164 PROC_BEGIN("d"); | |
| 165 n = pdf_array_len(ctx, array_); | |
| 166 jarray = (*env)->NewFloatArray(env, n); | |
| 167 if ((*env)->ExceptionCheck(env)) | |
| 168 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 169 if (!jarray) | |
| 170 fz_throw(ctx, FZ_ERROR_GENERIC, "cannot allocate float array"); | |
| 171 for (i = 0; i < n; i++) | |
| 172 { | |
| 173 float v = pdf_array_get_real(ctx, array_, i); | |
| 174 (*env)->SetFloatArrayRegion(env, jarray, i, 1, &v); | |
| 175 if ((*env)->ExceptionCheck(env)) | |
| 176 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 177 } | |
| 178 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_d, jarray, phase); | |
| 179 (*env)->DeleteLocalRef(env, jarray); | |
| 180 PROC_END("d"); | |
| 181 } | |
| 182 | |
| 183 static void java_proc_ri(fz_context *ctx, pdf_processor *proc, const char *intent) | |
| 184 { | |
| 185 PROC_BEGIN("i"); | |
| 186 jstring jintent = (*env)->NewStringUTF(env, intent); | |
| 187 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_ri, jintent); | |
| 188 (*env)->DeleteLocalRef(env, jintent); | |
| 189 PROC_END("i"); | |
| 190 } | |
| 191 | |
| 192 static void java_proc_i(fz_context *ctx, pdf_processor *proc, float flatness) | |
| 193 { | |
| 194 PROC_BEGIN("i"); | |
| 195 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_i, flatness); | |
| 196 PROC_END("i"); | |
| 197 } | |
| 198 | |
| 199 static void java_proc_gs_begin(fz_context *ctx, pdf_processor *proc, const char *name, pdf_obj *extgstate) | |
| 200 { | |
| 201 PROC_BEGIN("gs"); | |
| 202 ((pdf_java_processor*)proc)->extgstate = 1; | |
| 203 jstring jname = (*env)->NewStringUTF(env, name); | |
| 204 jobject jextgstate = to_PDFObject_safe(ctx, env, extgstate); | |
| 205 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_gs, jname, jextgstate); | |
| 206 (*env)->DeleteLocalRef(env, jextgstate); | |
| 207 (*env)->DeleteLocalRef(env, jname); | |
| 208 PROC_END("gs"); | |
| 209 } | |
| 210 | |
| 211 static void java_proc_gs_end(fz_context *ctx, pdf_processor *proc) | |
| 212 { | |
| 213 ((pdf_java_processor*)proc)->extgstate = 0; | |
| 214 } | |
| 215 | |
| 216 static void java_proc_q(fz_context *ctx, pdf_processor *proc) | |
| 217 { | |
| 218 PROC_BEGIN("q"); | |
| 219 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_q); | |
| 220 PROC_END("q"); | |
| 221 } | |
| 222 | |
| 223 static void java_proc_Q(fz_context *ctx, pdf_processor *proc) | |
| 224 { | |
| 225 PROC_BEGIN("Q"); | |
| 226 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_q); | |
| 227 PROC_END("Q"); | |
| 228 } | |
| 229 | |
| 230 static void java_proc_cm(fz_context *ctx, pdf_processor *proc, float a, float b, float c, float d, float e, float f) | |
| 231 { | |
| 232 PROC_BEGIN("cm"); | |
| 233 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_cm, a, b, c, d, e, f); | |
| 234 PROC_END("cm"); | |
| 235 } | |
| 236 | |
| 237 static void java_proc_m(fz_context *ctx, pdf_processor *proc, float x, float y) | |
| 238 { | |
| 239 PROC_BEGIN("m"); | |
| 240 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_m, x, y); | |
| 241 PROC_END("m"); | |
| 242 } | |
| 243 | |
| 244 static void java_proc_l(fz_context *ctx, pdf_processor *proc, float x, float y) | |
| 245 { | |
| 246 PROC_BEGIN("l"); | |
| 247 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_l, x, y); | |
| 248 PROC_END("l"); | |
| 249 } | |
| 250 | |
| 251 static void java_proc_c(fz_context *ctx, pdf_processor *proc, float x1, float y1, float x2, float y2, float x3, float y3) | |
| 252 { | |
| 253 PROC_BEGIN("c"); | |
| 254 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_c, x1, y1, x2, y2, x3, y3); | |
| 255 PROC_END("c"); | |
| 256 } | |
| 257 | |
| 258 static void java_proc_v(fz_context *ctx, pdf_processor *proc, float x2, float y2, float x3, float y3) | |
| 259 { | |
| 260 PROC_BEGIN("v"); | |
| 261 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_v, x2, y2, x3, y3); | |
| 262 PROC_END("v"); | |
| 263 } | |
| 264 | |
| 265 static void java_proc_y(fz_context *ctx, pdf_processor *proc, float x1, float y1, float x3, float y3) | |
| 266 { | |
| 267 PROC_BEGIN("y"); | |
| 268 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_y, x1, y1, x3, y3); | |
| 269 PROC_END("y"); | |
| 270 } | |
| 271 | |
| 272 static void java_proc_h(fz_context *ctx, pdf_processor *proc) | |
| 273 { | |
| 274 PROC_BEGIN("h"); | |
| 275 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_h); | |
| 276 PROC_END("h"); | |
| 277 } | |
| 278 | |
| 279 static void java_proc_re(fz_context *ctx, pdf_processor *proc, float x, float y, float w, float h) | |
| 280 { | |
| 281 PROC_BEGIN("re"); | |
| 282 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_re, x, y, w, h); | |
| 283 PROC_END("re"); | |
| 284 } | |
| 285 | |
| 286 static void java_proc_S(fz_context *ctx, pdf_processor *proc) | |
| 287 { | |
| 288 PROC_BEGIN("S"); | |
| 289 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_S); | |
| 290 PROC_END("S"); | |
| 291 } | |
| 292 | |
| 293 static void java_proc_s(fz_context *ctx, pdf_processor *proc) | |
| 294 { | |
| 295 PROC_BEGIN("s"); | |
| 296 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_s); | |
| 297 PROC_END("s"); | |
| 298 } | |
| 299 | |
| 300 static void java_proc_F(fz_context *ctx, pdf_processor *proc) | |
| 301 { | |
| 302 PROC_BEGIN("F"); | |
| 303 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_F); | |
| 304 PROC_END("F"); | |
| 305 } | |
| 306 | |
| 307 static void java_proc_f(fz_context *ctx, pdf_processor *proc) | |
| 308 { | |
| 309 PROC_BEGIN("f"); | |
| 310 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_f); | |
| 311 PROC_END("f"); | |
| 312 } | |
| 313 | |
| 314 static void java_proc_fstar(fz_context *ctx, pdf_processor *proc) | |
| 315 { | |
| 316 PROC_BEGIN("fstar"); | |
| 317 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_fstar); | |
| 318 PROC_END("fstar"); | |
| 319 } | |
| 320 | |
| 321 static void java_proc_B(fz_context *ctx, pdf_processor *proc) | |
| 322 { | |
| 323 PROC_BEGIN("B"); | |
| 324 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_B); | |
| 325 PROC_END("B"); | |
| 326 } | |
| 327 | |
| 328 static void java_proc_Bstar(fz_context *ctx, pdf_processor *proc) | |
| 329 { | |
| 330 PROC_BEGIN("Bstar"); | |
| 331 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Bstar); | |
| 332 PROC_END("Bstar"); | |
| 333 } | |
| 334 | |
| 335 static void java_proc_b(fz_context *ctx, pdf_processor *proc) | |
| 336 { | |
| 337 PROC_BEGIN("b"); | |
| 338 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_b); | |
| 339 PROC_END("b"); | |
| 340 } | |
| 341 | |
| 342 static void java_proc_bstar(fz_context *ctx, pdf_processor *proc) | |
| 343 { | |
| 344 PROC_BEGIN("bstar"); | |
| 345 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_bstar); | |
| 346 PROC_END("bstar"); | |
| 347 } | |
| 348 | |
| 349 static void java_proc_n(fz_context *ctx, pdf_processor *proc) | |
| 350 { | |
| 351 PROC_BEGIN("n"); | |
| 352 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_n); | |
| 353 PROC_END("n"); | |
| 354 } | |
| 355 | |
| 356 static void java_proc_W(fz_context *ctx, pdf_processor *proc) | |
| 357 { | |
| 358 PROC_BEGIN("W"); | |
| 359 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_W); | |
| 360 PROC_END("W"); | |
| 361 } | |
| 362 | |
| 363 static void java_proc_Wstar(fz_context *ctx, pdf_processor *proc) | |
| 364 { | |
| 365 PROC_BEGIN("Wstar"); | |
| 366 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Wstar); | |
| 367 PROC_END("Wstar"); | |
| 368 } | |
| 369 | |
| 370 static void java_proc_BT(fz_context *ctx, pdf_processor *proc) | |
| 371 { | |
| 372 PROC_BEGIN("BT"); | |
| 373 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_BT); | |
| 374 PROC_END("BT"); | |
| 375 } | |
| 376 | |
| 377 static void java_proc_ET(fz_context *ctx, pdf_processor *proc) | |
| 378 { | |
| 379 PROC_BEGIN("ET"); | |
| 380 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_ET); | |
| 381 PROC_END("ET"); | |
| 382 } | |
| 383 | |
| 384 static void java_proc_Tc(fz_context *ctx, pdf_processor *proc, float charspace) | |
| 385 { | |
| 386 PROC_BEGIN("Tc"); | |
| 387 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Tc, charspace); | |
| 388 PROC_END("Tc"); | |
| 389 } | |
| 390 | |
| 391 static void java_proc_Tw(fz_context *ctx, pdf_processor *proc, float wordspace) | |
| 392 { | |
| 393 PROC_BEGIN("Tw"); | |
| 394 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Tw, wordspace); | |
| 395 PROC_END("Tw"); | |
| 396 } | |
| 397 | |
| 398 static void java_proc_Tz(fz_context *ctx, pdf_processor *proc, float scale) | |
| 399 { | |
| 400 PROC_BEGIN("Tz"); | |
| 401 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Tz, scale); | |
| 402 PROC_END("Tz"); | |
| 403 } | |
| 404 | |
| 405 static void java_proc_TL(fz_context *ctx, pdf_processor *proc, float leading) | |
| 406 { | |
| 407 PROC_BEGIN("TL"); | |
| 408 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_TL, leading); | |
| 409 PROC_END("TL"); | |
| 410 } | |
| 411 | |
| 412 static void java_proc_Tf(fz_context *ctx, pdf_processor *proc, const char *name, pdf_font_desc *font, float size) | |
| 413 { | |
| 414 if (!((pdf_java_processor*) proc)->extgstate) | |
| 415 { | |
| 416 jobject jname; | |
| 417 PROC_BEGIN("Tf"); | |
| 418 jname = (*env)->NewStringUTF(env, name); | |
| 419 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Tf, jname, size); | |
| 420 (*env)->DeleteLocalRef(env, jname); | |
| 421 PROC_END("Tf"); | |
| 422 } | |
| 423 } | |
| 424 | |
| 425 static void java_proc_Tr(fz_context *ctx, pdf_processor *proc, int render) | |
| 426 { | |
| 427 PROC_BEGIN("Tr"); | |
| 428 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Tr, render); | |
| 429 PROC_END("Tr"); | |
| 430 } | |
| 431 | |
| 432 static void java_proc_Ts(fz_context *ctx, pdf_processor *proc, float rise) | |
| 433 { | |
| 434 PROC_BEGIN("Ts"); | |
| 435 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Ts, rise); | |
| 436 PROC_END("Ts"); | |
| 437 } | |
| 438 | |
| 439 static void java_proc_Td(fz_context *ctx, pdf_processor *proc, float tx, float ty) | |
| 440 { | |
| 441 PROC_BEGIN("Td"); | |
| 442 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Td, tx, ty); | |
| 443 PROC_END("Td"); | |
| 444 } | |
| 445 | |
| 446 static void java_proc_TD(fz_context *ctx, pdf_processor *proc, float tx, float ty) | |
| 447 { | |
| 448 PROC_BEGIN("TD"); | |
| 449 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_TD, tx, ty); | |
| 450 PROC_END("TD"); | |
| 451 } | |
| 452 | |
| 453 static void java_proc_Tm(fz_context *ctx, pdf_processor *proc, float a, float b, float c, float d, float e, float f) | |
| 454 { | |
| 455 PROC_BEGIN("Tm"); | |
| 456 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Tm, a, b, c, d, e, f); | |
| 457 PROC_END("Tm"); | |
| 458 } | |
| 459 | |
| 460 static void java_proc_Tstar(fz_context *ctx, pdf_processor *proc) | |
| 461 { | |
| 462 PROC_BEGIN("Tstar"); | |
| 463 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Tstar); | |
| 464 PROC_END("Tstar"); | |
| 465 } | |
| 466 | |
| 467 static void java_proc_TJ(fz_context *ctx, pdf_processor *proc, pdf_obj *array) | |
| 468 { | |
| 469 PROC_BEGIN("TJ"); | |
| 470 int i, n = pdf_array_len(ctx, array); | |
| 471 pdf_obj *obj; | |
| 472 jobject jarray = (*env)->NewObjectArray(env, n, cls_Object, NULL); | |
| 473 for (i = 0; i < n; i++) | |
| 474 { | |
| 475 jobject jelem; | |
| 476 obj = pdf_array_get(ctx, array, i); | |
| 477 if (pdf_is_number(ctx, obj)) | |
| 478 jelem = (*env)->NewObject(env, cls_Float, mid_Float_init, pdf_to_real(ctx, obj)); | |
| 479 else | |
| 480 { | |
| 481 char *str = pdf_to_str_buf(ctx, obj); | |
| 482 size_t len = pdf_to_str_len(ctx, obj); | |
| 483 if (java_is_ascii((unsigned char *) str, len)) | |
| 484 jelem = java_to_string(env, ctx, (unsigned char *) str, len); | |
| 485 else | |
| 486 jelem = java_to_byte_array(env, ctx, (unsigned char *) str, len); | |
| 487 if (!jelem) | |
| 488 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 489 } | |
| 490 (*env)->SetObjectArrayElement(env, jarray, i, jelem); | |
| 491 (*env)->DeleteLocalRef(env, jelem); | |
| 492 } | |
| 493 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_TJ, jarray); | |
| 494 (*env)->DeleteLocalRef(env, jarray); | |
| 495 PROC_END("TJ"); | |
| 496 } | |
| 497 | |
| 498 static void java_proc_Tj(fz_context *ctx, pdf_processor *proc, char *str, size_t len) | |
| 499 { | |
| 500 PROC_BEGIN("Tj"); | |
| 501 | |
| 502 if (java_is_ascii((unsigned char *) str, len)) | |
| 503 { | |
| 504 jstring jstr = java_to_string(env, ctx, (unsigned char *) str, len); | |
| 505 if (!jstr) | |
| 506 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 507 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Tj_string, jstr); | |
| 508 (*env)->DeleteLocalRef(env, jstr); | |
| 509 } | |
| 510 else | |
| 511 { | |
| 512 jobject jarr = java_to_byte_array(env, ctx, (unsigned char *) str, len); | |
| 513 if (!jarr) | |
| 514 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 515 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Tj_byte_array, jarr); | |
| 516 (*env)->DeleteLocalRef(env, jarr); | |
| 517 } | |
| 518 PROC_END("Tj"); | |
| 519 } | |
| 520 | |
| 521 static void java_proc_squote(fz_context *ctx, pdf_processor *proc, char *str, size_t len) | |
| 522 { | |
| 523 PROC_BEGIN("dquote"); | |
| 524 if (java_is_ascii((unsigned char *) str, len)) | |
| 525 { | |
| 526 jstring jstr = java_to_string(env, ctx, (unsigned char *) str, len); | |
| 527 if (!jstr) | |
| 528 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 529 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_squote_string, jstr); | |
| 530 (*env)->DeleteLocalRef(env, jstr); | |
| 531 } | |
| 532 else | |
| 533 { | |
| 534 jobject jarr = java_to_byte_array(env, ctx, (unsigned char *) str, len); | |
| 535 if (!jarr) | |
| 536 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 537 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_squote_byte_array, jarr); | |
| 538 (*env)->DeleteLocalRef(env, jarr); | |
| 539 } | |
| 540 PROC_END("squote"); | |
| 541 } | |
| 542 | |
| 543 static void java_proc_dquote(fz_context *ctx, pdf_processor *proc, float aw, float ac, char *str, size_t len) | |
| 544 { | |
| 545 PROC_BEGIN("dquote"); | |
| 546 if (java_is_ascii((unsigned char *) str, len)) | |
| 547 { | |
| 548 jstring jstr = java_to_string(env, ctx, (unsigned char *) str, len); | |
| 549 if (!jstr) | |
| 550 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 551 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_dquote_string, aw, ac, jstr); | |
| 552 (*env)->DeleteLocalRef(env, jstr); | |
| 553 } | |
| 554 else | |
| 555 { | |
| 556 jobject jarr = java_to_byte_array(env, ctx, (unsigned char *) str, len); | |
| 557 if (!jarr) | |
| 558 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 559 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_dquote_byte_array, aw, ac, jarr); | |
| 560 (*env)->DeleteLocalRef(env, jarr); | |
| 561 } | |
| 562 PROC_END("dquote"); | |
| 563 } | |
| 564 | |
| 565 static void java_proc_d0(fz_context *ctx, pdf_processor *proc, float wx, float wy) | |
| 566 { | |
| 567 PROC_BEGIN("d0"); | |
| 568 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_d0, wx, wy); | |
| 569 PROC_END("d0"); | |
| 570 } | |
| 571 | |
| 572 static void java_proc_d1(fz_context *ctx, pdf_processor *proc, | |
| 573 float wx, float wy, float llx, float lly, float urx, float ury) | |
| 574 { | |
| 575 PROC_BEGIN("d1"); | |
| 576 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_d1, wx, wy, llx, lly, urx, ury); | |
| 577 PROC_END("d1"); | |
| 578 } | |
| 579 | |
| 580 static void java_proc_CS(fz_context *ctx, pdf_processor *proc, const char *name, fz_colorspace *cs) | |
| 581 { | |
| 582 PROC_BEGIN("CS"); | |
| 583 jstring jname = (*env)->NewStringUTF(env, name); | |
| 584 jobject jcs = to_ColorSpace_safe(ctx, env, cs); | |
| 585 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_CS, jname, jcs); | |
| 586 (*env)->DeleteLocalRef(env, jcs); | |
| 587 (*env)->DeleteLocalRef(env, jname); | |
| 588 PROC_END("CS"); | |
| 589 } | |
| 590 | |
| 591 static void java_proc_cs(fz_context *ctx, pdf_processor *proc, const char *name, fz_colorspace *cs) | |
| 592 { | |
| 593 PROC_BEGIN("cs"); | |
| 594 jstring jname = (*env)->NewStringUTF(env, name); | |
| 595 jobject jcs = to_ColorSpace_safe(ctx, env, cs); | |
| 596 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_cs, jname, jcs); | |
| 597 (*env)->DeleteLocalRef(env, jcs); | |
| 598 (*env)->DeleteLocalRef(env, jname); | |
| 599 PROC_END("cs"); | |
| 600 } | |
| 601 | |
| 602 static void java_proc_SC_pattern(fz_context *ctx, pdf_processor *proc, const char *name, pdf_pattern *pat, int n, float *color) | |
| 603 { | |
| 604 PROC_BEGIN("SC_pattern"); | |
| 605 int i; | |
| 606 jstring jname = (*env)->NewStringUTF(env, name); | |
| 607 jobject jcolor = (*env)->NewFloatArray(env, n); | |
| 608 if ((*env)->ExceptionCheck(env)) | |
| 609 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 610 for (i = 0; i < n; ++i) | |
| 611 (*env)->SetFloatArrayRegion(env, jcolor, i, 1, &color[i]); | |
| 612 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_SC_pattern, jname, pat->id, jcolor); | |
| 613 (*env)->DeleteLocalRef(env, jcolor); | |
| 614 (*env)->DeleteLocalRef(env, jname); | |
| 615 PROC_END("SC_pattern"); | |
| 616 } | |
| 617 | |
| 618 static void java_proc_sc_pattern(fz_context *ctx, pdf_processor *proc, const char *name, pdf_pattern *pat, int n, float *color) | |
| 619 { | |
| 620 PROC_BEGIN("sc_pattern"); | |
| 621 int i; | |
| 622 jstring jname = (*env)->NewStringUTF(env, name); | |
| 623 jobject jcolor = (*env)->NewFloatArray(env, n); | |
| 624 if ((*env)->ExceptionCheck(env)) | |
| 625 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 626 for (i = 0; i < n; ++i) | |
| 627 (*env)->SetFloatArrayRegion(env, jcolor, i, 1, &color[i]); | |
| 628 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_sc_pattern, jname, pat->id, jcolor); | |
| 629 (*env)->DeleteLocalRef(env, jcolor); | |
| 630 (*env)->DeleteLocalRef(env, jname); | |
| 631 PROC_END("sc_pattern"); | |
| 632 } | |
| 633 | |
| 634 static void java_proc_SC_shade(fz_context *ctx, pdf_processor *proc, const char *name, fz_shade *shade) | |
| 635 { | |
| 636 PROC_BEGIN("SC_shade"); | |
| 637 jstring jname = (*env)->NewStringUTF(env, name); | |
| 638 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_SC_shade, jname); | |
| 639 (*env)->DeleteLocalRef(env, jname); | |
| 640 PROC_END("SC_shade"); | |
| 641 } | |
| 642 | |
| 643 static void java_proc_sc_shade(fz_context *ctx, pdf_processor *proc, const char *name, fz_shade *shade) | |
| 644 { | |
| 645 PROC_BEGIN("sc_shade"); | |
| 646 jstring jname = (*env)->NewStringUTF(env, name); | |
| 647 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_sc_shade, jname); | |
| 648 (*env)->DeleteLocalRef(env, jname); | |
| 649 PROC_END("sc_shade"); | |
| 650 } | |
| 651 | |
| 652 static void java_proc_SC_color(fz_context *ctx, pdf_processor *proc, int n, float *color) | |
| 653 { | |
| 654 PROC_BEGIN("SC_color"); | |
| 655 int i; | |
| 656 jobject jcolor = (*env)->NewFloatArray(env, n); | |
| 657 if ((*env)->ExceptionCheck(env)) | |
| 658 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 659 for (i = 0; i < n; ++i) | |
| 660 (*env)->SetFloatArrayRegion(env, jcolor, i, 1, &color[i]); | |
| 661 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_SC_color, jcolor); | |
| 662 (*env)->DeleteLocalRef(env, jcolor); | |
| 663 PROC_END("SC_color"); | |
| 664 } | |
| 665 | |
| 666 static void java_proc_sc_color(fz_context *ctx, pdf_processor *proc, int n, float *color) | |
| 667 { | |
| 668 PROC_BEGIN("sc_color"); | |
| 669 int i; | |
| 670 jobject jcolor = (*env)->NewFloatArray(env, n); | |
| 671 if ((*env)->ExceptionCheck(env)) | |
| 672 fz_throw_java_and_detach_thread(ctx, env, detach); | |
| 673 for (i = 0; i < n; ++i) | |
| 674 (*env)->SetFloatArrayRegion(env, jcolor, i, 1, &color[i]); | |
| 675 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_sc_color, jcolor); | |
| 676 (*env)->DeleteLocalRef(env, jcolor); | |
| 677 PROC_END("sc_color"); | |
| 678 } | |
| 679 | |
| 680 static void java_proc_G(fz_context *ctx, pdf_processor *proc, float g) | |
| 681 { | |
| 682 PROC_BEGIN("g"); | |
| 683 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_g, g); | |
| 684 PROC_END("g"); | |
| 685 } | |
| 686 | |
| 687 static void java_proc_g(fz_context *ctx, pdf_processor *proc, float g) | |
| 688 { | |
| 689 PROC_BEGIN("G"); | |
| 690 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_G, g); | |
| 691 PROC_END("G"); | |
| 692 } | |
| 693 | |
| 694 static void java_proc_RG(fz_context *ctx, pdf_processor *proc, float r, float g, float b) | |
| 695 { | |
| 696 PROC_BEGIN("RG"); | |
| 697 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_RG, r, g, b); | |
| 698 PROC_END("RG"); | |
| 699 } | |
| 700 | |
| 701 static void java_proc_rg(fz_context *ctx, pdf_processor *proc, float r, float g, float b) | |
| 702 { | |
| 703 PROC_BEGIN("rg"); | |
| 704 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_rg, r, g, b); | |
| 705 PROC_END("rg"); | |
| 706 } | |
| 707 | |
| 708 static void java_proc_K(fz_context *ctx, pdf_processor *proc, float c, float m, float y, float k) | |
| 709 { | |
| 710 PROC_BEGIN("K"); | |
| 711 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_K, c, m, y, k); | |
| 712 PROC_END("K"); | |
| 713 } | |
| 714 | |
| 715 static void java_proc_k(fz_context *ctx, pdf_processor *proc, float c, float m, float y, float k) | |
| 716 { | |
| 717 PROC_BEGIN("k"); | |
| 718 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_k, c, m, y, k); | |
| 719 PROC_END("k"); | |
| 720 } | |
| 721 | |
| 722 static void java_proc_BI(fz_context *ctx, pdf_processor *proc, fz_image *img, const char *colorspace) | |
| 723 { | |
| 724 PROC_BEGIN("BI"); | |
| 725 jobject jimg = to_Image_safe(ctx, env, img); | |
| 726 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_BI, jimg); | |
| 727 (*env)->DeleteLocalRef(env, jimg); | |
| 728 PROC_END("BI"); | |
| 729 } | |
| 730 | |
| 731 static void java_proc_sh(fz_context *ctx, pdf_processor *proc, const char *name, fz_shade *shade) | |
| 732 { | |
| 733 PROC_BEGIN("sh"); | |
| 734 jstring jname = (*env)->NewStringUTF(env, name); | |
| 735 jobject jshade = to_Shade_safe(ctx, env, shade); | |
| 736 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_sh, jname, jshade); | |
| 737 (*env)->DeleteLocalRef(env, jshade); | |
| 738 (*env)->DeleteLocalRef(env, jname); | |
| 739 PROC_END("sh"); | |
| 740 } | |
| 741 | |
| 742 static void java_proc_Do_image(fz_context *ctx, pdf_processor *proc, const char *name, fz_image *image) | |
| 743 { | |
| 744 PROC_BEGIN("Do_image"); | |
| 745 jstring jname = (*env)->NewStringUTF(env, name); | |
| 746 jobject jimage = to_Image_safe(ctx, env, image); | |
| 747 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Do_image, jname, jimage); | |
| 748 (*env)->DeleteLocalRef(env, jimage); | |
| 749 (*env)->DeleteLocalRef(env, jname); | |
| 750 PROC_END("Do_image"); | |
| 751 } | |
| 752 | |
| 753 static void java_proc_Do_form(fz_context *ctx, pdf_processor *proc, const char *name, pdf_obj *xobj) | |
| 754 { | |
| 755 PROC_BEGIN("Do_image"); | |
| 756 jstring jname = (*env)->NewStringUTF(env, name); | |
| 757 jobject jform = to_PDFObject_safe(ctx, env, xobj); | |
| 758 jobject jres = NULL; | |
| 759 if (((pdf_java_processor *) proc)->rstack) | |
| 760 jres = to_PDFObject_safe(ctx, env, ((pdf_java_processor *) proc)->rstack->resources); | |
| 761 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_Do_image, jname, jform, jres); | |
| 762 (*env)->DeleteLocalRef(env, jres); | |
| 763 (*env)->DeleteLocalRef(env, jform); | |
| 764 (*env)->DeleteLocalRef(env, jname); | |
| 765 PROC_END("Do_image"); | |
| 766 } | |
| 767 | |
| 768 static void java_proc_MP(fz_context *ctx, pdf_processor *proc, const char *tag) | |
| 769 { | |
| 770 PROC_BEGIN("MP"); | |
| 771 jobject jtag = (*env)->NewStringUTF(env, tag); | |
| 772 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_MP, jtag); | |
| 773 (*env)->DeleteLocalRef(env, jtag); | |
| 774 PROC_END("MP"); | |
| 775 } | |
| 776 | |
| 777 static void java_proc_DP(fz_context *ctx, pdf_processor *proc, const char *tag, pdf_obj *raw, pdf_obj *cooked) | |
| 778 { | |
| 779 PROC_BEGIN("DP"); | |
| 780 jstring jtag = (*env)->NewStringUTF(env, tag); | |
| 781 jobject jraw = to_PDFObject_safe(ctx, env, raw); | |
| 782 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_DP, jtag, jraw); | |
| 783 (*env)->DeleteLocalRef(env, jraw); | |
| 784 (*env)->DeleteLocalRef(env, jtag); | |
| 785 PROC_END("DP"); | |
| 786 } | |
| 787 | |
| 788 static void java_proc_BMC(fz_context *ctx, pdf_processor *proc, const char *tag) | |
| 789 { | |
| 790 PROC_BEGIN("BMC"); | |
| 791 jstring jtag = (*env)->NewStringUTF(env, tag); | |
| 792 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_BMC, jtag); | |
| 793 (*env)->DeleteLocalRef(env, jtag); | |
| 794 PROC_END("BMC"); | |
| 795 } | |
| 796 | |
| 797 static void java_proc_BDC(fz_context *ctx, pdf_processor *proc, const char *tag, pdf_obj *raw, pdf_obj *cooked) | |
| 798 { | |
| 799 PROC_BEGIN("BDC"); | |
| 800 jstring jtag = (*env)->NewStringUTF(env, tag); | |
| 801 jobject jraw = to_PDFObject_safe(ctx, env, raw); | |
| 802 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_BDC, jtag, jraw); | |
| 803 (*env)->DeleteLocalRef(env, jraw); | |
| 804 (*env)->DeleteLocalRef(env, jtag); | |
| 805 PROC_END("BDC"); | |
| 806 } | |
| 807 | |
| 808 static void java_proc_EMC(fz_context *ctx, pdf_processor *proc) | |
| 809 { | |
| 810 PROC_BEGIN("EMC"); | |
| 811 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_EMC); | |
| 812 PROC_END("EMC"); | |
| 813 } | |
| 814 | |
| 815 static void java_proc_BX(fz_context *ctx, pdf_processor *proc) | |
| 816 { | |
| 817 PROC_BEGIN("BX"); | |
| 818 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_BX); | |
| 819 PROC_END("BX"); | |
| 820 } | |
| 821 | |
| 822 static void java_proc_EX(fz_context *ctx, pdf_processor *proc) | |
| 823 { | |
| 824 PROC_BEGIN("EX"); | |
| 825 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_EX); | |
| 826 PROC_END("EX"); | |
| 827 } | |
| 828 | |
| 829 static void java_proc_push_resources(fz_context *ctx, pdf_processor *proc, pdf_obj *res) | |
| 830 { | |
| 831 PROC_BEGIN("pushResources"); | |
| 832 jobject jres = to_PDFObject_safe(ctx, env, res); | |
| 833 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_pushResources, jres); | |
| 834 (*env)->DeleteLocalRef(env, jres); | |
| 835 PROC_END("pushResources"); | |
| 836 } | |
| 837 | |
| 838 static pdf_obj *java_proc_pop_resources(fz_context *ctx, pdf_processor *proc) | |
| 839 { | |
| 840 PROC_BEGIN("popResources"); | |
| 841 (*env)->CallVoidMethod(env, jproc, mid_PDFProcessor_op_popResources); | |
| 842 PROC_END("popResources"); | |
| 843 return NULL; | |
| 844 } | |
| 845 | |
| 846 static void java_proc_drop(fz_context *ctx, pdf_processor *proc) | |
| 847 { | |
| 848 pdf_java_processor *pr = (pdf_java_processor *)proc; | |
| 849 | |
| 850 while (pr->rstack) | |
| 851 { | |
| 852 resources_stack *stk = pr->rstack; | |
| 853 pr->rstack = stk->next; | |
| 854 pdf_drop_obj(ctx, stk->resources); | |
| 855 fz_free(ctx, stk); | |
| 856 } | |
| 857 } | |
| 858 | |
| 859 pdf_processor *make_pdf_processor(JNIEnv *env, fz_context *ctx, jobject jproc) | |
| 860 { | |
| 861 pdf_java_processor *proc = pdf_new_processor(ctx, sizeof *proc); | |
| 862 proc->super.close_processor = NULL; | |
| 863 proc->super.drop_processor = java_proc_drop; | |
| 864 | |
| 865 proc->super.push_resources = java_proc_push_resources; | |
| 866 proc->super.pop_resources = java_proc_pop_resources; | |
| 867 | |
| 868 /* general graphics state */ | |
| 869 proc->super.op_w = java_proc_w; | |
| 870 proc->super.op_j = java_proc_j; | |
| 871 proc->super.op_J = java_proc_J; | |
| 872 proc->super.op_M = java_proc_M; | |
| 873 proc->super.op_d = java_proc_d; | |
| 874 proc->super.op_ri = java_proc_ri; | |
| 875 proc->super.op_i = java_proc_i; | |
| 876 proc->super.op_gs_begin = java_proc_gs_begin; | |
| 877 proc->super.op_gs_end = java_proc_gs_end; | |
| 878 | |
| 879 /* transparency graphics state */ | |
| 880 proc->super.op_gs_BM = NULL; | |
| 881 proc->super.op_gs_CA = NULL; | |
| 882 proc->super.op_gs_ca = NULL; | |
| 883 proc->super.op_gs_SMask = NULL; | |
| 884 | |
| 885 /* special graphics state */ | |
| 886 proc->super.op_q = java_proc_q; | |
| 887 proc->super.op_Q = java_proc_Q; | |
| 888 proc->super.op_cm = java_proc_cm; | |
| 889 | |
| 890 /* path construction */ | |
| 891 proc->super.op_m = java_proc_m; | |
| 892 proc->super.op_l = java_proc_l; | |
| 893 proc->super.op_c = java_proc_c; | |
| 894 proc->super.op_v = java_proc_v; | |
| 895 proc->super.op_y = java_proc_y; | |
| 896 proc->super.op_h = java_proc_h; | |
| 897 proc->super.op_re = java_proc_re; | |
| 898 | |
| 899 /* path painting */ | |
| 900 proc->super.op_S = java_proc_S; | |
| 901 proc->super.op_s = java_proc_s; | |
| 902 proc->super.op_F = java_proc_F; | |
| 903 proc->super.op_f = java_proc_f; | |
| 904 proc->super.op_fstar = java_proc_fstar; | |
| 905 proc->super.op_B = java_proc_B; | |
| 906 proc->super.op_Bstar = java_proc_Bstar; | |
| 907 proc->super.op_b = java_proc_b; | |
| 908 proc->super.op_bstar = java_proc_bstar; | |
| 909 proc->super.op_n = java_proc_n; | |
| 910 | |
| 911 /* clipping paths */ | |
| 912 proc->super.op_W = java_proc_W; | |
| 913 proc->super.op_Wstar = java_proc_Wstar; | |
| 914 | |
| 915 /* text objects */ | |
| 916 proc->super.op_BT = java_proc_BT; | |
| 917 proc->super.op_ET = java_proc_ET; | |
| 918 | |
| 919 /* text state */ | |
| 920 proc->super.op_Tc = java_proc_Tc; | |
| 921 proc->super.op_Tw = java_proc_Tw; | |
| 922 proc->super.op_Tz = java_proc_Tz; | |
| 923 proc->super.op_TL = java_proc_TL; | |
| 924 proc->super.op_Tf = java_proc_Tf; | |
| 925 proc->super.op_Tr = java_proc_Tr; | |
| 926 proc->super.op_Ts = java_proc_Ts; | |
| 927 | |
| 928 /* text positioning */ | |
| 929 proc->super.op_Td = java_proc_Td; | |
| 930 proc->super.op_TD = java_proc_TD; | |
| 931 proc->super.op_Tm = java_proc_Tm; | |
| 932 proc->super.op_Tstar = java_proc_Tstar; | |
| 933 | |
| 934 /* text showing */ | |
| 935 proc->super.op_TJ = java_proc_TJ; | |
| 936 proc->super.op_Tj = java_proc_Tj; | |
| 937 proc->super.op_squote = java_proc_squote; | |
| 938 proc->super.op_dquote = java_proc_dquote; | |
| 939 | |
| 940 /* type 3 fonts */ | |
| 941 proc->super.op_d0 = java_proc_d0; | |
| 942 proc->super.op_d1 = java_proc_d1; | |
| 943 | |
| 944 /* color */ | |
| 945 proc->super.op_CS = java_proc_CS; | |
| 946 proc->super.op_cs = java_proc_cs; | |
| 947 proc->super.op_SC_color = java_proc_SC_color; | |
| 948 proc->super.op_sc_color = java_proc_sc_color; | |
| 949 proc->super.op_SC_pattern = java_proc_SC_pattern; | |
| 950 proc->super.op_sc_pattern = java_proc_sc_pattern; | |
| 951 proc->super.op_SC_shade = java_proc_SC_shade; | |
| 952 proc->super.op_sc_shade = java_proc_sc_shade; | |
| 953 | |
| 954 proc->super.op_G = java_proc_G; | |
| 955 proc->super.op_g = java_proc_g; | |
| 956 proc->super.op_RG = java_proc_RG; | |
| 957 proc->super.op_rg = java_proc_rg; | |
| 958 proc->super.op_K = java_proc_K; | |
| 959 proc->super.op_k = java_proc_k; | |
| 960 | |
| 961 /* shadings, images, xobjects */ | |
| 962 proc->super.op_BI = java_proc_BI; | |
| 963 proc->super.op_sh = java_proc_sh; | |
| 964 proc->super.op_Do_image = java_proc_Do_image; | |
| 965 proc->super.op_Do_form = java_proc_Do_form; | |
| 966 | |
| 967 /* marked content */ | |
| 968 proc->super.op_MP = java_proc_MP; | |
| 969 proc->super.op_DP = java_proc_DP; | |
| 970 proc->super.op_BMC = java_proc_BMC; | |
| 971 proc->super.op_BDC = java_proc_BDC; | |
| 972 proc->super.op_EMC = java_proc_EMC; | |
| 973 | |
| 974 /* compatibility */ | |
| 975 proc->super.op_BX = java_proc_BX; | |
| 976 proc->super.op_EX = java_proc_EX; | |
| 977 | |
| 978 /* extgstate */ | |
| 979 proc->super.op_gs_OP = NULL; | |
| 980 proc->super.op_gs_op = NULL; | |
| 981 proc->super.op_gs_OPM = NULL; | |
| 982 proc->super.op_gs_UseBlackPtComp = NULL; | |
| 983 | |
| 984 proc->self = jproc; | |
| 985 proc->env = env; | |
| 986 | |
| 987 return (pdf_processor*)proc; | |
| 988 } |
