diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2021-11-17 00:35:51 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2021-11-17 00:35:51 +0000 |
commit | e014d03baced79bc394b49067b03943afd8d2161 (patch) | |
tree | ec845de703f14f6ed662b92389ad550e04c50246 /Build/source/texk/dvipdfm-x/spc_dvips.c | |
parent | b8c000429ba9adaf6d0adc8e47e65bc779f69d53 (diff) |
realize PSTricks on XeTeX without -dNOSAFER
git-svn-id: svn://tug.org/texlive/trunk@61079 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 | 101 |
1 files changed, 74 insertions, 27 deletions
diff --git a/Build/source/texk/dvipdfm-x/spc_dvips.c b/Build/source/texk/dvipdfm-x/spc_dvips.c index 8090d2664d4..c06b40a5255 100644 --- a/Build/source/texk/dvipdfm-x/spc_dvips.c +++ b/Build/source/texk/dvipdfm-x/spc_dvips.c @@ -1,6 +1,6 @@ /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks. - Copyright (C) 2002-2020 by Jin-Hwan Cho and Shunsaku Hirata, + Copyright (C) 2002-2021 by Jin-Hwan Cho and Shunsaku Hirata, the dvipdfmx project team. Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu> @@ -527,12 +527,12 @@ check_next_obj(const unsigned char * buffer) static int spc_handler_ps_tricks_parse_path (struct spc_env *spe, struct spc_arg *args) { - FILE* fp; + FILE* fp; FILE* fi; int k; pdf_tmatrix M; char *gs_out; const char *clip; - int error; + int error, c; if (!distiller_template) distiller_template = get_distiller_template(); @@ -545,13 +545,26 @@ spc_handler_ps_tricks_parse_path (struct spc_env *spe, struct spc_arg *args) return -1; } fp = fopen(gs_in, "wb"); - for (k = 0; k < num_ps_headers; k++) - fprintf(fp, "(%s) run\n", ps_headers[k]); + for (k = 0; k < num_ps_headers; k++) { + fi = fopen(ps_headers[k], "rb"); + while((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + } fprintf(fp, "[%f %f %f %f %f %f] concat %f %f translate 0 0 moveto\n", M.a, M.b, M.c, M.d, M.e, M.f, spe->x_user, spe->y_user); - fprintf(fp, "(%s) run\n", global_defs); - if (page_defs != 0) - fprintf(fp, "(%s) run\n", page_defs); - + fi = fopen(global_defs, "rb"); + while((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + if (page_defs != 0) { + fi = fopen(page_defs, "rb"); + while((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + } #if 0 fprintf(fp, "/clip {stroke} def\n"); fwrite(args->curptr, 1, args->endptr - args->curptr, fp); @@ -631,8 +644,8 @@ spc_handler_ps_tricks_parse_path (struct spc_env *spe, struct spc_arg *args) static int spc_handler_ps_tricks_render (struct spc_env *spe, struct spc_arg *args) { - FILE *fp; - int k; + FILE *fp, *fi; + int k, c; pdf_tmatrix M; load_options options = {1, 0, NULL}; @@ -647,12 +660,26 @@ spc_handler_ps_tricks_render (struct spc_env *spe, struct spc_arg *args) return -1; } fp = fopen(gs_in, "wb"); - for (k = 0; k < num_ps_headers; k++) - fprintf(fp, "(%s) run\n", ps_headers[k]); + for (k = 0; k < num_ps_headers; k++) { + fi = fopen(ps_headers[k], "rb"); + while((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + } fprintf(fp, "[%f %f %f %f %f %f] concat %f %f translate 0 0 moveto\n", M.a, M.b, M.c, M.d, M.e, M.f, spe->x_user, spe->y_user); - fprintf(fp, "(%s) run\n", global_defs); - if (page_defs != 0) - fprintf(fp, "(%s) run\n", page_defs); + fi = fopen(global_defs, "rb"); + while((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + if (page_defs != 0) { + fi = fopen(page_defs, "rb"); + while ((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + } } else fp = fopen(gs_in, "ab"); @@ -1017,11 +1044,11 @@ spc_dvips_setup_handler (struct spc_handler *handle, } #ifdef __EMX__ -#define GS_CALCULATOR "gsos2 -q -dALLOWPSTRANSPARENCY -dDELAYSAFER -dNOPAUSE -dBATCH -sDEVICE=nullpage -f " +#define GS_CALCULATOR "gsos2 -q -dALLOWPSTRANSPARENCY -dNOPAUSE -dBATCH -sDEVICE=nullpage -f " #elif defined(WIN32) -#define GS_CALCULATOR "rungs -q -dALLOWPSTRANSPARENCY -dDELAYSAFER -dNOPAUSE -dBATCH -sDEVICE=nullpage -f " +#define GS_CALCULATOR "rungs -q -dALLOWPSTRANSPARENCY -dNOPAUSE -dBATCH -sDEVICE=nullpage -f " #else -#define GS_CALCULATOR "gs -q -dALLOWPSTRANSPARENCY -dDELAYSAFER -dNOPAUSE -dBATCH -sDEVICE=nullpage -f " +#define GS_CALCULATOR "gs -q -dALLOWPSTRANSPARENCY -dNOPAUSE -dBATCH -sDEVICE=nullpage -f " #endif static @@ -1029,7 +1056,8 @@ int calculate_PS (char *strptr, int length, double *res1, double *res2, double * char *formula, *cmd; FILE *fp, *coord; int k; - + FILE *fi; + int c; if (res1 == 0 && res2 == 0) return -1; formula = dpx_create_temp_file(); @@ -1039,14 +1067,33 @@ int calculate_PS (char *strptr, int length, double *res1, double *res2, double * } fp = fopen(formula, "wb"); - for (k = 0; k < num_ps_headers; k++) - fprintf(fp, "(%s) run\n", ps_headers[k]); + for (k = 0; k < num_ps_headers; k++) { + fi = fopen(ps_headers[k], "rb"); + while((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + } fprintf(fp, "0 0 moveto\n"); - fprintf(fp, "(%s) run\n", global_defs); - if (page_defs != 0) - fprintf(fp, "(%s) run\n", page_defs); - if (temporary_defs) - fprintf(fp, "(%s) run\n", temporary_defs); + fi = fopen(global_defs, "rb"); + while((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + if (page_defs != 0) { + fi = fopen(page_defs, "rb"); + while((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + } + if (temporary_defs) { + fi = fopen(temporary_defs, "rb"); + while ((c = getc(fi)) != EOF) + putc(c, fp); + putc('\n', fp); + fclose(fi); + } fwrite(strptr, 1, length, fp); fclose(fp); #ifdef MIKTEX |