summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/metapost/exteps
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/metapost/exteps')
-rw-r--r--Master/texmf-dist/metapost/exteps/exteps.mp141
1 files changed, 100 insertions, 41 deletions
diff --git a/Master/texmf-dist/metapost/exteps/exteps.mp b/Master/texmf-dist/metapost/exteps/exteps.mp
index 0ec3626f26b..fafd0abd3fa 100644
--- a/Master/texmf-dist/metapost/exteps/exteps.mp
+++ b/Master/texmf-dist/metapost/exteps/exteps.mp
@@ -1,4 +1,4 @@
-% Copyright 2005 by Palle Jørgensen
+% Copyright 2005, 2006 by Palle Jorgensen
%
% This file is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
@@ -15,11 +15,14 @@
% Foundation, Inc., 59 Temple Place - Suite 330, Boston,
% MA 02111-1307, USA.
%
-% This is version 0.1 Wed Aug 10 2005
+% This is version 0.41 Tue Sep 26 2006 Dec
%
% The module is documentet in exteps.pdf
picture epspicture;
+string extra_begineps; extra_begineps = "";
+string extra_endeps; extra_endeps = "";
+boolean extepsverbose; extepsverbose = true;
%% String handling tool
string string_split[];
@@ -48,7 +51,7 @@ def begineps text F =
begingroup;
save file; string file; file = F;
save angle; numeric angle; angle = 0;
- save clip; boolean clip; clip = false;
+ save clipping; boolean clipping; clipping = false;
save scale; pair scale; scale = (1,1);
save base; pair base; base = origin;
save __bbxfound; boolean __bbxfound; __bbxfound = false;
@@ -61,10 +64,17 @@ def begineps text F =
save pct; numeric pct;
save width; numeric width;
save height; numeric height;
+ save clippath; path clippath;
+ save largefile; boolean largefile; largefile = false;
+ save gridllx; numeric gridllx;
+ save gridlly; numeric gridlly;
+ save gridurx; numeric gridurx;
+ save gridury; numeric gridury;
%% Finding the bounding box
forever:
__eps__currentline := readfrom F;
if substring(0,14) of __eps__currentline = "%%BoundingBox:":
+ exitif __eps__currentline = EOF; % PATCH D. Roegel 23-sep-2006
__bbxline := substring(14, infinity) of __eps__currentline;
__bbxfound := true;
splitstring __bbxline;
@@ -75,27 +85,24 @@ def begineps text F =
fi
exitif __bbxfound;
endfor
+ if not __bbxfound:
+ message "Warning: No bounding box found.";
+ message " Setting bounding box to 0 0 1 1";
+ llx = lly = 0;
+ urx = ury = 1;
+ fi
closefrom F;
+ scantokens extra_begineps;
__base = -(llx,lly);
pct = (urx - llx)/100;
%% To ensure the right bounding box of the output file
%% a picture with the same size as the eps figure is added.
epspicture := nullpicture;
- setbounds epspicture to ((0,0)--(0,ury-lly)--(urx-llx,ury-lly)--(urx-llx,0)--cycle);
+ clippath = (0,0)--(0,ury-lly)--(urx-llx,ury-lly)--(urx-llx,0)--cycle;
+ setbounds epspicture to clippath;
enddef;
def endeps =
-%% Drawing the grid
- if grid:
- for i = 0 step gridstep*pct until (urx - llx):
- epsdraw (i,0)--(i,ury - lly);
- epslabel.bot(((decimal.(i/pct) & "%") infont defaultfont) rotated -90, (i,0));
- endfor
- for i = 0 step gridstep*pct until (epsilon + ury - lly):
- epsdraw (0,i)--(urx - llx,i);
- epslabel.lft(((decimal.(i/pct) & "%") infont defaultfont), (0,i));
- endfor
- fi
%% Calculating scale if width and/or height is known
if (known width) and (known height):
scale := (width/(urx - llx),height/(ury - lly));
@@ -109,14 +116,10 @@ def endeps =
if base <> origin:
special decimal.xpart.base & " " & decimal.ypart.base & " translate";
fi
- if scale <> (1,1):
- special decimal xpart.scale & " " & decimal ypart.scale & " scale";
- fi
if angle <> 0:
special decimal angle & " rotate";
- epspicture := epspicture rotatedaround(origin)(angle);
fi
- if __base <> origin:
+ if __base <> origin:
special decimal.xpart.__base & " " & decimal.ypart.__base & " translate";
fi
if scale <> (1,1):
@@ -124,30 +127,86 @@ def endeps =
if xpart.scale <> ypart.scale:
yscaled (ypart.scale/xpart.scale)
fi;
+ special decimal xpart.scale & " " & decimal ypart.scale & " scale";
fi
- if clip:
- special "newpath ";
- special decimal llx & " " & decimal lly & " moveto";
- special decimal llx & " " & decimal ury & " lineto";
- special decimal urx & " " & decimal ury & " lineto";
- special decimal urx & " " & decimal lly & " lineto";
- special decimal llx & " " & decimal lly & " lineto";
- special "closepath clip";
+ if angle <> 0:
+ epspicture := epspicture rotatedaround(origin)(angle);
fi
- special "%%BeginDocument: " & file;
- forever:
- __eps__currentline := readfrom file;
- exitunless __eps__currentline <> EOF;
- special __eps__currentline;
- endfor
- special "%%EndDocument: " & file;
- special "grestore";
- closefrom file;
- if base <> (0,0):
- epspicture := epspicture shifted base;
+%% Drawing the grid !! After the scaling :-)
+ if unknown gridllx:
+ gridllx = 0;
fi
- addto currentpicture also epspicture;
-endgroup;
+ if unknown gridlly:
+ gridlly = 0;
+ fi
+ if unknown gridurx:
+ gridurx = (urx - llx)/pct;
+ fi
+ if unknown gridury:
+ gridury = (ury - lly)/pct;
+ fi
+ if grid:
+ save __gridpicture; picture __gridpicture; __gridpicture := nullpicture;
+ for i = gridllx*pct step gridstep*pct until (epsilon + gridurx*pct):
+ addto __gridpicture doublepath (i*xpart.scale,gridlly*pct*ypart.scale)--(i*xpart.scale,gridury*pct*ypart.scale) withpen currentpen;
+ addto __gridpicture also thelabel.bot(((decimal.(i/pct) & "%") infont defaultfont) rotated -90, (i*xpart.scale,gridlly*pct*ypart.scale));
+ endfor
+ for i = gridlly*pct step gridstep*pct until (epsilon + gridury*pct):
+ addto __gridpicture doublepath (gridllx*pct*xpart.scale,i*ypart.scale)--(gridurx*pct*xpart.scale,i*ypart.scale) withpen currentpen;
+ addto __gridpicture also thelabel.lft(((decimal.(i/pct) & "%") infont defaultfont), (gridllx*pct*xpart.scale,i*ypart.scale));
+ endfor
+ if angle <> 0:
+ __gridpicture := __gridpicture rotatedaround(origin)(angle);
+ fi
+ addto epspicture also __gridpicture;
+ fi
+ if clipping:
+ save __clippath; path __clippath;
+ __clippath=clippath shifted (llx,lly);
+ special "newpath " & decimal.xpart.point 0 of __clippath
+ & " " & decimal.ypart.point 0 of __clippath & " moveto";
+ for i = 0 upto length.__clippath-1:
+ special decimal.xpart.postcontrol i of __clippath & " " &
+ decimal.ypart.postcontrol i of __clippath & " " &
+ decimal.xpart.precontrol (i+1) of __clippath & " " &
+ decimal.ypart.precontrol (i+1) of __clippath & " " &
+ decimal.xpart.point (i+1) of __clippath & " " &
+ decimal.ypart.point (i+1) of __clippath & " curveto";
+ endfor;
+ special "closepath clip";
+ fi
+ special "save";
+ special "userdict begin";
+ special "/showpage {} def";
+ special "%%BeginDocument: " & file;
+ if largefile:
+ special "%% MetaPost exteps large file->" & file;
+ if extepsverbose:
+ message "exteps notification: File " & file & " not inserted into " & jobname & "." & decimal.charcode;
+ message " Run 'delfin " & jobname & "." & decimal.charcode & "' to insert " & file;
+ message " This is caused by setting 'largefile:=true'";
+ message "";
+ fi
+ else:
+ if extepsverbose:
+ message "Inserting " & file & " into " & jobname & "." & decimal.charcode;
+ fi
+ forever:
+ __eps__currentline := readfrom file;
+ exitunless __eps__currentline <> EOF;
+ special __eps__currentline;
+ endfor
+ fi
+ special "%%EndDocument: " & file;
+ scantokens extra_endeps;
+ special "end restore";
+ special "grestore";
+ closefrom file;
+ if base <> (0,0):
+ epspicture := epspicture shifted base;
+ fi
+ addto currentpicture also epspicture;
+ endgroup;
enddef;
%% Special drawing commands