diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2020-08-16 08:10:47 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2020-08-16 08:10:47 +0000 |
commit | 54319b9ec014682aec96a7b67f2debf26fd0757d (patch) | |
tree | 233c484ba6363435891a9d2ff1faccd65cc8d0a6 /Build/source/texk/dvipdfm-x/spc_dvips.c | |
parent | ad0c30ab1fc1553d293f9a5e6789953803a3ef9e (diff) |
Fix various inconsistent behaviors observed in pdf:bcontent/econtent
specials. Revise PSTricks clip support (S. Hirata)
git-svn-id: svn://tug.org/texlive/trunk@56121 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x/spc_dvips.c')
-rw-r--r-- | Build/source/texk/dvipdfm-x/spc_dvips.c | 68 |
1 files changed, 33 insertions, 35 deletions
diff --git a/Build/source/texk/dvipdfm-x/spc_dvips.c b/Build/source/texk/dvipdfm-x/spc_dvips.c index 18fdef3d019..31d5db212f7 100644 --- a/Build/source/texk/dvipdfm-x/spc_dvips.c +++ b/Build/source/texk/dvipdfm-x/spc_dvips.c @@ -172,7 +172,7 @@ spc_handler_ps_file (struct spc_env *spe, struct spc_arg *args) } RELEASE(filename); - pdf_dev_put_image(form_id, &ti, spe->x_user, spe->y_user); + spc_put_image(spe, form_id, &ti, spe->x_user, spe->y_user); return 0; } @@ -211,7 +211,7 @@ spc_handler_ps_plotfile (struct spc_env *spe, struct spc_arg *args) block_pending ? pending_x : spe->x_user, block_pending ? pending_y : spe->y_user); #endif - pdf_dev_put_image(form_id, &p, 0, 0); + spc_put_image(spe, form_id, &p, 0, 0); } RELEASE(filename); @@ -221,22 +221,22 @@ spc_handler_ps_plotfile (struct spc_env *spe, struct spc_arg *args) static int spc_handler_ps_literal (struct spc_env *spe, struct spc_arg *args) { - int error = 0; - int st_depth, gs_depth; - double x_user, y_user; - - ASSERT(spe && args && args->curptr <= args->endptr); + int error = 0; + int st_depth, gs_depth; + double x_user, y_user; + pdf_coord cp; + spc_get_current_point(spe, &cp); if (args->curptr + strlen(":[begin]") <= args->endptr && !strncmp(args->curptr, ":[begin]", strlen(":[begin]"))) { block_pending++; position_set = 1; - x_user = pending_x = spe->x_user; - y_user = pending_y = spe->y_user; + x_user = pending_x = cp.x; + y_user = pending_y = cp.y; args->curptr += strlen(":[begin]"); } else if (args->curptr + strlen(":[end]") <= args->endptr && - !strncmp(args->curptr, ":[end]", strlen(":[end]"))) { + !strncmp(args->curptr, ":[end]", strlen(":[end]"))) { if (block_pending <= 0) { spc_warn(spe, "No corresponding ::[begin] found."); return -1; @@ -248,15 +248,14 @@ spc_handler_ps_literal (struct spc_env *spe, struct spc_arg *args) x_user = pending_x; y_user = pending_y; args->curptr += strlen(":[end]"); - } else if (args->curptr < args->endptr && - args->curptr[0] == ':') { - x_user = position_set ? pending_x : spe->x_user; - y_user = position_set ? pending_y : spe->y_user; + } else if (args->curptr < args->endptr && args->curptr[0] == ':') { + x_user = position_set ? pending_x : cp.x; + y_user = position_set ? pending_y : cp.y; args->curptr++; } else { position_set = 1; - x_user = pending_x = spe->x_user; - y_user = pending_y = spe->y_user; + x_user = pending_x = cp.x; + y_user = pending_y = cp.y; } skip_white(&args->curptr, args->endptr); @@ -265,9 +264,7 @@ spc_handler_ps_literal (struct spc_env *spe, struct spc_arg *args) st_depth = mps_stack_depth(); gs_depth = pdf_dev_current_depth(); - error = mps_exec_inline(&args->curptr, - args->endptr, - x_user, y_user); + error = mps_exec_inline(&args->curptr, args->endptr, x_user, y_user); if (error) { spc_warn(spe, "Interpreting PS code failed!!! Output might be broken!!!"); pdf_dev_grestore_to(gs_depth); @@ -313,7 +310,7 @@ spc_handler_ps_tricks_pdef (struct spc_env *spe, struct spc_arg *args) pdf_coord pt; pdf_dev_currentmatrix(&M); - pdf_dev_get_fixed_point(&pt); + spc_get_fixed_point(spe, &pt.x, &pt.y); T.e = pt.x; T.f = pt.y; pdf_concatmatrix(&M, &T); @@ -456,10 +453,10 @@ spc_handler_ps_tricks_brotate (struct spc_env *spe, struct spc_arg *args) return -1; RAngles[RAngleCount] = value; - return spc_handler_xtx_do_transform (spe->x_user, spe->y_user, - cos(value * M_PI / 180), sin(value * M_PI / 180), - -sin(value * M_PI / 180), cos(value * M_PI / 180), - 0, 0); + return spc_handler_xtx_do_transform (spe, spe->x_user, spe->y_user, + cos(value * M_PI / 180), sin(value * M_PI / 180), + -sin(value * M_PI / 180), cos(value * M_PI / 180), + 0, 0); } static int @@ -467,10 +464,10 @@ spc_handler_ps_tricks_erotate (struct spc_env *spe, struct spc_arg *args) { double value = RAngles[RAngleCount--]; - return spc_handler_xtx_do_transform (spe->x_user, spe->y_user, - cos(value * M_PI / 180), -sin(value * M_PI / 180), - sin(value * M_PI / 180), cos(value * M_PI / 180), - 0, 0); + return spc_handler_xtx_do_transform (spe, spe->x_user, spe->y_user, + cos(value * M_PI / 180), -sin(value * M_PI / 180), + sin(value * M_PI / 180), cos(value * M_PI / 180), + 0, 0); } static int @@ -495,7 +492,7 @@ spc_handler_ps_tricks_transform (struct spc_env *spe, struct spc_arg *args) return -1; if (spc_handler_xtx_gsave (0, 0) != 0) return -1; - return spc_handler_xtx_do_transform (spe->x_user, spe->y_user, d1, d2, d3, d4, d5, d6); + return spc_handler_xtx_do_transform (spe, spe->x_user, spe->y_user, d1, d2, d3, d4, d5, d6); } return spc_handler_xtx_grestore (0, 0); } @@ -717,7 +714,7 @@ spc_handler_ps_tricks_render (struct spc_env *spe, struct spc_arg *args) RELEASE(gs_out); return -1; } - pdf_dev_put_image(form_id, &p, 0, 0); + spc_put_image(spe, form_id, &p, 0, 0); dpx_delete_temp_file(gs_out, true); dpx_delete_temp_file(gs_in, true); @@ -843,12 +840,13 @@ spc_handler_ps_default (struct spc_env *spe, struct spc_arg *args) { pdf_tmatrix M; - M.a = M.d = 1.0; M.b = M.c = 0.0; M.e = spe->x_user; M.f = spe->y_user; + pdf_coord cp; + + spc_get_current_point(spe, &cp); + M.a = M.d = 1.0; M.b = M.c = 0.0; M.e = cp.x; M.f = cp.y; pdf_dev_concat(&M); - error = mps_exec_inline(&args->curptr, - args->endptr, - spe->x_user, spe->y_user); - M.e = -spe->x_user; M.f = -spe->y_user; + error = mps_exec_inline(&args->curptr, args->endptr, cp.x, cp.y); + M.e = -cp.x; M.f = -cp.y; pdf_dev_concat(&M); } if (error) |