diff options
author | Jonathan Kew <jfkthame@googlemail.com> | 2008-05-21 13:19:17 +0000 |
---|---|---|
committer | Jonathan Kew <jfkthame@googlemail.com> | 2008-05-21 13:19:17 +0000 |
commit | ebdcfba2fc6c9bf4db2008a00058f3422a9d1da8 (patch) | |
tree | 52772b6cbe81d9ca8b67d3990ea033a27d432916 /Build/source/texk/xdvipdfmx/src/mpost.c | |
parent | 246e3a9180a28cb419402687d2005bdfb5313774 (diff) |
update to xdvipdfmx 0.7, from xetex svn r.688
git-svn-id: svn://tug.org/texlive/trunk@8272 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/xdvipdfmx/src/mpost.c')
-rw-r--r-- | Build/source/texk/xdvipdfmx/src/mpost.c | 84 |
1 files changed, 52 insertions, 32 deletions
diff --git a/Build/source/texk/xdvipdfmx/src/mpost.c b/Build/source/texk/xdvipdfmx/src/mpost.c index 3a36080effb..841a357e699 100644 --- a/Build/source/texk/xdvipdfmx/src/mpost.c +++ b/Build/source/texk/xdvipdfmx/src/mpost.c @@ -1,4 +1,4 @@ -/* $Header: /home/cvsroot/dvipdfmx/src/mpost.c,v 1.38 2007/11/22 16:57:08 chofchof Exp $ +/* $Header: /home/cvsroot/dvipdfmx/src/mpost.c,v 1.40 2008/05/17 01:17:27 chofchof Exp $ This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks. @@ -348,6 +348,10 @@ skip_prolog (char **start, char *end) #define FSHOW 1001 #define STEXFIG 1002 #define ETEXFIG 1003 +#define HLW 1004 +#define VLW 1005 +#define RD 1006 +#define B 1007 static struct operators { @@ -417,9 +421,34 @@ static struct operators }; static struct operators mps_operators[] = { - {"fshow", FSHOW}, + {"fshow", FSHOW}, /* exch findfont exch scalefont setfont show */ {"startTexFig", STEXFIG}, - {"endTexFig", ETEXFIG} + {"endTexFig", ETEXFIG}, + {"hlw", HLW}, /* 0 dtransform exch truncate exch idtransform pop setlinewidth */ + {"vlw", VLW}, /* 0 exch dtransform truncate idtransform pop setlinewidth pop */ + {"l", LINETO}, + {"r", RLINETO}, + {"c", CURVETO}, + {"m", MOVETO}, + {"p", CLOSEPATH}, + {"n", NEWPATH}, + {"C", SETCMYKCOLOR}, + {"G", SETGRAY}, + {"R", SETRGBCOLOR}, + {"lj", SETLINEJOIN}, + {"ml", SETMITERLIMIT}, + {"lc", SETLINECAP}, + {"S", STROKE}, + {"F", FILL}, + {"q", GSAVE}, + {"Q", GRESTORE}, + {"s", SCALE}, + {"t", CONCAT}, + {"sd", SETDASH}, + {"rd", RD}, /* [] 0 setdash */ + {"P", SHOWPAGE}, + {"B", B}, /* gsave fill grestore */ + {"W", CLIP} }; #define NUM_PS_OPERATORS (sizeof(ps_operators)/sizeof(ps_operators[0])) @@ -800,19 +829,13 @@ do_show (void) return 0; } -static const char *ps_code_fshow = "exch findfont exch scalefont setfont show"; -/* - * string tfmname scale fshow - - * - * exch findfont exch scalefont setfont show - */ static int -do_mpost_fshow (int opcode, double x_user, double y_user) +do_mpost_bind_def (const char *ps_code, double x_user, double y_user) { int error = 0; char *start, *end; - start = (char *) ps_code_fshow; + start = (char *) ps_code; end = start + strlen(start); error = mp_parse_body(&start, end, x_user, y_user); @@ -1328,13 +1351,24 @@ do_operator (const char *token, double x_user, double y_user) /* Extensions */ case FSHOW: - error = do_mpost_fshow(opcode, x_user, y_user); - /* Treat fshow as a path terminator of sorts */ + error = do_mpost_bind_def("exch findfont exch scalefont setfont show", x_user, y_user); break; case STEXFIG: case ETEXFIG: error = do_texfig_operator(opcode, x_user, y_user); break; + case HLW: + error = do_mpost_bind_def("0 dtransform exch truncate exch idtransform pop setlinewidth", x_user, y_user); + break; + case VLW: + error = do_mpost_bind_def("0 exch dtransform truncate idtransform setlinewidth pop", x_user, y_user); + break; + case RD: + error = do_mpost_bind_def("[] 0 setdash", x_user, y_user); + break; + case B: + error = do_mpost_bind_def("gsave fill grestore", x_user, y_user); + break; case DEF: tmp = POP_STACK(); @@ -1388,33 +1422,19 @@ mp_parse_body (char **start, char *end, double x_user, double y_user) * This shouldn't use parse_pdf_array(). */ } else if (**start == '[' && - (obj = parse_pdf_array(start, end))) { + (obj = parse_pdf_array(start, end, NULL))) { PUSH(obj); /* This cannot handle ASCII85 string. */ } else if (*start < end - 1 && (**start == '<' && *(*start+1) == '<') && - (obj = parse_pdf_dict(start, end))) { + (obj = parse_pdf_dict(start, end, NULL))) { PUSH(obj); } else if ((**start == '(' || **start == '<') && (obj = parse_pdf_string (start, end))) { PUSH(obj); } else if (**start == '/' && (obj = parse_pdf_name(start, end))) { - /* Temporary implementation for mps files generated by mptopdf: - * Just ignore the following command: - * /fshow {exch findfont exch scalefont setfont show} bind def - */ - if (strcmp(pdf_name_value(obj), "fshow") == 0) { - while (*start < end - 3) { - if (**start == 'd' && *(*start+1) == 'e' && *(*start+2) == 'f') { - *start += 3; - break; - } - (*start)++; - } - } else { - PUSH(obj); - } + PUSH(obj); } else { token = parse_ident(start, end); if (!token) @@ -1548,8 +1568,8 @@ mps_include_page (const char *ident, FILE *fp) RELEASE(buffer); if (error) { - WARN("Errors occured while interpreting PostScript file."); - WARN("Leaving garbage in output PDF file."); + WARN("Errors occured while interpreting MPS file."); + /* WARN("Leaving garbage in output PDF file."); */ form_id = -1; } |