supp-eps.mkii / last modification: 2020-01-30 14:15
%D \module
%D   [       file=supp-eps,
%D        version=1998.05.06,
%D          title=\CONTEXT\ Support Macros,
%D       subtitle=\EPS\ tools,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

\ifx \undefined \writestatus \input supp-mis.tex \relax \fi

%D The macros in this module are rather old and were originally
%D part of the figure inclusion macros. When \PDFTEX\ started
%D to support \PDF\ inclusion, where some accompanying macros
%D were put in \type{supp-pdf}, I considered it more suitable
%D to give the \EPS\ macros their own module.

\writestatus{loading}{ConTeXt Support Macros / EPS}

%D \macros
%D   {dogetEPSboundingbox}
%D The predecessors of the following macro's are derived from
%D Thomas Rockicky's macro's. They are rewritten to a more
%D compact form, made a bit more robust and also handle the
%D \type{HiResBoundingBox} and \type{ExactBoundingBox} that
%D are sometimes present.
%D A bounding box has the form:
%D \starttyping
%D %%BoundingBox: llx lly urx ury
%D \stoptyping
%D Before we scan the file, we have to reset special
%D characters and set some others. The percentage symbol also
%D needs special treatment. When a bounding box is
%D encountered, we keep on scanning until no more directives
%D are found, i.e. a line is found that does not start with a
%D percentage symbol. We also abort scanning after finding a
%D high resolution bounding box.
%D This method also works inside verbatim mode (like when we
%D are typesetting sources and putting eps coded logos into
%D a heading. Temporary restoring the \CATCODES\ is done in
%D the calling routine.
%D The creator as well as external support for specials are
%D analyzed as well and their status is available in \type
%D {\EPScreator} and \type {\EPSshading}. The boundingbox
%D components are available in \type {\EPSllx} etc.


\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\EPSstatus =0



\def\dofinishEPSfile{\dofinishfile} % no \let, can be overloaded

   \global\chardef\EPSfound  \zerocount
   \global\chardef\EPSstatus \zerocount
   % Using \EPSllx bp instead of \dimen0=1bp and \EPSllx\dimen0 is more accurate (.005pt).
     #2\dimexpr\EPSllx\onebasepoint   \relax
     #3\dimexpr\EPSlly\onebasepoint   \relax
  %\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 \xdef\letterpercent{\string%} \egroup

\def\EPSboundingboxtag     {BoundingBox}
\def\EPScreatortag         {Creator}
\def\EPSmetaposttag        {MetaPost}
\def\EPSmetapostspecialtag {MetaPostSpecial}
\def\EPSpagetag            {Page}

\let\EPSspecialstring \empty

% new metapost construct (hires bb followed by creator + version)
%%BoundingBox: -71 -1 651 496
%%HiResBoundingBox: -70.9945 -0.5 650.5 495.24907
%%Creator: MetaPost 0.901
%%CreationDate: 2005.06.02:1633
%%Pages: 1

       \else\ifx\EPSspecialstring\EPSmetapostspecialtag % only before finish!
         \global\chardef\EPSspecial\plusone % ah, we've met some MP extensions
       \else\ifx\EPSspecialstring\EPSmetapostspecialstag % only before finish!
         \global\chardef\EPSspecial\plusone % ah, we've met some MP extensions
         \global\chardef\EPSstatus \plusone % we passed MP font defs
     % bb found
     \ifnum\EPScreator=\plusone % that is, we are dealing with MP output
         % we've run into MP fontdefs
       % too late for mps creator (we don't want to run into crap data)

  {\edef\EPSspecialstring{\EPSspecialcontent\space . . . . }%

\def\dogetEPSboundingboxspec#1 #2 #3 #4 #5\end
     \dogetEPSboundingboxspec#2 #3 #4 #5\end

  {\edef\EPSspecialstring{\EPSspecialcontent\space . .}%

\def\dogetEPScreatorspec#1#2 #3\end

\def\dogetEPSpreambledata#1% can be combined with \extraEPSpreambleparsers
   \let\dofinishEPSfile\relax % dirty trick, read past all bboxes

\protect \endinput