summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm-x/spc_dvips.c
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2020-08-16 08:10:47 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2020-08-16 08:10:47 +0000
commit54319b9ec014682aec96a7b67f2debf26fd0757d (patch)
tree233c484ba6363435891a9d2ff1faccd65cc8d0a6 /Build/source/texk/dvipdfm-x/spc_dvips.c
parentad0c30ab1fc1553d293f9a5e6789953803a3ef9e (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.c68
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)