diff options
Diffstat (limited to 'tex/context/base/supp-eps.tex')
-rw-r--r-- | tex/context/base/supp-eps.tex | 151 |
1 files changed, 94 insertions, 57 deletions
diff --git a/tex/context/base/supp-eps.tex b/tex/context/base/supp-eps.tex index a7d84344f..7370c0fbc 100644 --- a/tex/context/base/supp-eps.tex +++ b/tex/context/base/supp-eps.tex @@ -56,25 +56,35 @@ \unprotect -\let\EPSllx\!!zeropoint \let\MPllx\EPSllx % just in case these -\let\EPSlly\!!zeropoint \let\MPlly\EPSlly % are used while running -\let\EPSurx\!!zeropoint \let\MPurx\EPSurx % in fast mode we set -\let\EPSury\!!zeropoint \let\MPury\EPSury % them to 0pt. +\def\EPSllx{0} \let\MPllx\EPSllx % just in case these +\def\EPSlly{0} \let\MPlly\EPSlly % are used while running +\def\EPSurx{0} \let\MPurx\EPSurx % in fast mode we set +\def\EPSury{0} \let\MPury\EPSury % them to 0. \chardef\EPSfound =0 \chardef\EPScreator=0 \chardef\EPSspecial=0 -\chardef\EPSstatus =0 +\chardef\EPSstatus =0 + +\let\EPScreatorstring\empty + +\newtoks\extraEPSpreambleresets +\newtoks\extraEPSpreambleparsers + +\def\dofinishEPSfile{\dofinishfile} % no \let, can be overloaded \def\dogetEPSboundingbox#1#2#3#4#5% {\bgroup - \global\chardef\EPSfound=0 - \global\chardef\EPScreator=0 - \global\chardef\EPSspecial=0 - \global\chardef\EPSstatus=0 + \global\chardef\EPSfound 0 + \global\chardef\EPScreator0 + \global\chardef\EPSspecial0 + \global\chardef\EPSstatus 0 + \global\let\EPScreatorstring\empty + \the\extraEPSpreambleresets \uncatcodespecials - \def\doprocessEPSline% - {\expandafter\checkEPSboundingbox\fileline:. \end}% + \catcode`\^^M=\@@ignore + \def\doprocessEPSline + {\expandafter\checkEPSboundingbox\fileline\empty\empty:.:.\end}% \doprocessfile\scratchread{#1}\doprocessEPSline \egroup \ifnum\EPSfound>0 @@ -82,77 +92,104 @@ #4=\EPSurx bp% \dimen0=1bp and \EPSllx\dimen0 #3=\EPSlly bp% is more accurate (.005pt). #5=\EPSury bp% - \scratchdimen=\EPSllx bp\advance#4 -\scratchdimen - \scratchdimen=\EPSlly bp\advance#5 -\scratchdimen + \scratchdimen\EPSllx bp\advance#4 -\scratchdimen + \scratchdimen\EPSlly bp\advance#5 -\scratchdimen \else #2=\zeropoint #3=\zeropoint #4=\zeropoint #5=\zeropoint \fi - %\message{[bbox #1: \EPSllx\space\EPSurx\space\EPSlly\space\EPSury]}% + %\message{[bbox #1: \EPSllx\space\EPSurx\space\EPSlly\space\EPSury]}\wait \global\let\MPllx\EPSllx \global\let\MPlly\EPSlly \global\let\MPurx\EPSurx \global\let\MPury\EPSury} -\bgroup -\catcode`\%=\@@other -\global\let\EPSpercenttag =% -\gdef\EPSboundingboxtag {%BoundingBox} -\gdef\EPShiresboundingboxtag{%HiResBoundingBox} -\gdef\EPSexactboundingboxtag{%ExactBoundingBox} -\gdef\EPScreatortag {%Creator} -\gdef\EPSmetaposttag { MetaPost :. } -\gdef\EPSmetapostspecialtag {%MetaPostSpecial} -\gdef\EPSmetapostspecialstag{%MetaPostSpecials} -\gdef\EPSpagetag {%Page} -\egroup - -\long\def\checkEPSboundingbox#1#2:#3\end% - {\ifx#1\EPSpercenttag - \def\!!stringa{#2}% - \ifx\!!stringa\EPScreatortag - \edef\!!stringa{#3}% - \global\chardef\EPScreator=\ifx\!!stringa\EPSmetaposttag1 \else0 \fi - \else\ifx\!!stringa\EPSboundingboxtag - \expandafter \getEPSboundingbox #3 . . . \end - \global\chardef\EPSfound=1 - \else\ifx\!!stringa\EPShiresboundingboxtag - \expandafter \getEPSboundingbox #3 . . . \end - \global\chardef\EPSfound=2 - \dofinishfile - \else\ifx\!!stringa\EPSexactboundingboxtag - \expandafter \getEPSboundingbox #3 . . . \end - \global\chardef\EPSfound=2 - \dofinishfile - \else\ifx\!!stringa\EPSmetapostspecialtag % only before finish! - \global\chardef\EPSspecial=1 % ah, we've met some MP extensions - \else\ifx\!!stringa\EPSmetapostspecialstag % only before finish! - \global\chardef\EPSspecial=1 % ah, we've met some MP extensions - \else\ifx\!!stringa\EPSpagetag - \global\chardef\EPSstatus=1 % we passed MP font defs - \fi\fi\fi\fi\fi\fi\fi +\bgroup \catcode`\%=\@@other \gdef\letterpercent{\string%} \egroup + +\def\EPSboundingboxtag {BoundingBox} +\def\EPShiresboundingboxtag{HiResBoundingBox} +\def\EPSexactboundingboxtag{ExactBoundingBox} +\def\EPScreatortag {Creator} +\def\EPSmetaposttag {MetaPost} +\def\EPSmetapostspecialtag {MetaPostSpecial} +\def\EPSmetapostspecialstag{MetaPostSpecials} +\def\EPSpagetag {Page} + +\let\EPSspecialstring \empty +\let\EPSspecialcontent\empty + +\long\def\checkEPSboundingbox#1#2#3:#4:.#5\end + {\if\string#1\letterpercent + \if\string#2\letterpercent + \edef\EPSspecialstring{#3}% + \edef\EPSspecialcontent{#4}% + \ifx\EPSspecialstring\EPScreatortag + \getEPScreatorspec + \else\ifx\EPSspecialstring\EPSboundingboxtag + \getEPSboundingboxspec + \global\chardef\EPSfound 1 + \else\ifx\EPSspecialstring\EPShiresboundingboxtag + \getEPSboundingboxspec + \global\chardef\EPSfound 2 + \dofinishEPSfile + \else\ifx\EPSspecialstring\EPSexactboundingboxtag + \getEPSboundingboxspec + \global\chardef\EPSfound 2 + \dofinishEPSfile + \else\ifx\EPSspecialstring\EPSmetapostspecialtag % only before finish! + \global\chardef\EPSspecial 1 % ah, we've met some MP extensions + \else\ifx\EPSspecialstring\EPSmetapostspecialstag % only before finish! + \global\chardef\EPSspecial 1 % ah, we've met some MP extensions + \else\ifx\EPSspecialstring\EPSpagetag + \global\chardef\EPSstatus 1 % we passed MP font defs + \else + \the\extraEPSpreambleparsers + \fi\fi\fi\fi\fi\fi\fi + \fi \else\ifnum\EPSfound>0 \ifnum\EPScreator=1 % that is, we are dealing with MP output \ifcase\EPSstatus % we've run into MP fontdefs \or - \dofinishfile + \dofinishEPSfile \fi \else - \dofinishfile + \dofinishEPSfile \fi \fi\fi} -\def\getEPSboundingbox #1 #2 #3 #4 #5\end% +\def\getEPSboundingboxspec + {\edef\EPSspecialstring{\EPSspecialcontent\space . . . . }% + \expandafter\dogetEPSboundingboxspec\EPSspecialstring\end} + +\def\dogetEPSboundingboxspec#1 #2 #3 #4 #5\end {\gdef\EPSllx{#1}% \ifx\EPSllx\empty - \getEPSboundingbox #2 #3 #4 #5 .\end + \dogetEPSboundingboxspec#2 #3 #4 #5\end \else \gdef\EPSlly{#2}% \gdef\EPSurx{#3}% \gdef\EPSury{#4}% + \fi} + +\def\getEPScreatorspec + {\edef\EPSspecialstring{\EPSspecialcontent. . .}% + \expandafter\dogetEPScreatorspec\EPSspecialstring\end} + +\def\dogetEPScreatorspec#1#2. . #3\end + {\edef\EPSspecialstring{#1}% + \ifx\EPSspecialstring\empty + \dogetEPScreatorspec#2. . #3\end + \else + \edef\EPScreatorstring{#1#2}% + \global\chardef\EPScreator + \ifx\EPScreatorstring\EPSmetaposttag1\else0\fi\relax \fi} -\protect +\def\dogetEPSpreambledata#1% can be combined with \extraEPSpreambleparsers + {\bgroup + \let\dofinishEPSfile\relax % dirty trick, read past all bboxes + \dogetEPSboundingbox{#1}\!!widtha\!!heighta\!!widthb\!!heightb + \egroup} -\endinput +\protect \endinput |