summaryrefslogtreecommitdiff
path: root/tex/context/base/supp-mps.mkii
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-01-12 17:15:07 +0100
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-01-12 17:15:07 +0100
commit8d8d528d2ad52599f11250cfc567fea4f37f2a8b (patch)
tree94286bc131ef7d994f9432febaf03fe23d10eef8 /tex/context/base/supp-mps.mkii
parentf5aed2e51223c36c84c5f25a6cad238b2af59087 (diff)
downloadcontext-8d8d528d2ad52599f11250cfc567fea4f37f2a8b.tar.gz
2016-01-12 16:26:00
Diffstat (limited to 'tex/context/base/supp-mps.mkii')
-rw-r--r--tex/context/base/supp-mps.mkii2134
1 files changed, 0 insertions, 2134 deletions
diff --git a/tex/context/base/supp-mps.mkii b/tex/context/base/supp-mps.mkii
deleted file mode 100644
index 3991280e6..000000000
--- a/tex/context/base/supp-mps.mkii
+++ /dev/null
@@ -1,2134 +0,0 @@
-%D \module
-%D [ file=supp-mps,
-%D version=1997.07.05,
-%D title=\CONTEXT\ Support Macros,
-%D subtitle=\METAPOST\ Inclusion,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-%D Forget about generic modules \unknown\ ...
-
-\ifx \undefined \contextversion \endinput \fi
-
-%D \METAPOST\ is John Hobbys alternative for \METAFONT\ and
-%D produces superior \POSTSCRIPT\ code. In this module we
-%D integrate \METAPOST\ support int \CONTEXT. We offer two
-%D tracks:
-%D
-%D \startitemize
-%D \item generating \METAPOST\ code, running this program from
-%D within \TEX\ using \type{\write18}, and importing the
-%D result
-%D \item generating \METAPOST\ code, processing the code
-%D afterward, and importing the result in a second pass
-%D \stopitemize
-%D
-%D The first approach uses a non standard \TEX\ feature,
-%D implemented in Web2c. I'm not going to discuss the pros and
-%D cons of running programs from within others, but all
-%D arguments against this can be overcome by implementing a
-%D \TEX\ worthy primitive:
-%D
-%D \starttyping
-%D \excuteMetaPost filename
-%D \stoptyping
-%D
-%D Ok then, let's start:
-
-\writestatus{loading}{ConTeXt Support Macros / MetaPost Inclusion}
-
-\unprotect
-
-\def\@@MPG{@MPG@}
-
-%D First we define a handy constant:
-
-\bgroup \catcode`\%=\@@other \xdef\letterpercent{\string%} \egroup
-
-% todo : sort out ^^M, \par and ; mess
-
-%D \macros
-%D {everyMPgraphic}
-%D
-%D Because some graphics interact with \TEX\ (i.e.\ \CONTEXT), we
-%D provide a hook for additional actions: \type {\everyMPgraphic}.
-
-\newtoks\everyMPgraphic \everyMPgraphic{\everyMPgraphic\emptytoks}
-
-%D \macros
-%D {startMPgraphic}
-%D
-%D From within \TEX\ one can execute \METAPOST\ code by putting
-%D it between the two commands
-%D
-%D \starttyping
-%D \startMPgraphic
-%D \stopMPgraphic
-%D \stoptyping
-%D
-%D This is implemented as:
-
-\let\stopMPgraphic\relax
-
-\long\def\startMPgraphic#1\stopMPgraphic
- {\startwritingMPgraphic
- \writecheckedMPgraphic{#1}% % potential speedup: pass #1 as macro
- \stopwritingMPgraphic}
-
-%D \macros
-%D {startMPrun}
-%D
-%D If we just want to run \METAPOST\ code, that is, not to
-%D explictly generate a figure in terms of \type{beginfig} and
-%D \type{endfig}, we can use:
-%D
-%D \starttyping
-%D \startMPgraphic
-%D \stopMPgraphic
-%D \stoptyping
-%D
-%D \starttyping
-%D \startMPrun
-%D \stopMPrun
-%D \stoptyping
-%D
-%D The next booleans are for internal purposes only.
-
-% some day a bit more more clear:
-%
-% run directly/run afterwards/run external defined
-% insert directly/insert whenever
-% use object/don't use objects
-
-\newif\ifMPgraphics \MPgraphicstrue
-\newif\ifMPrun \MPrunfalse
-\newif\ifMPwrapper \MPwrappertrue
-
-\let\stopMPrun\relax
-
-\ifCONTEXT
-
- \long\def\dostartMPrun#1#2\stopMPrun
- {\bgroup
- \MPruntrue
- \doifsomething{#1}{\def\MPgraphicfile{#1}}%
- \startwritingMPgraphic
- \writecheckedMPgraphic{#2}%
- \stopwritingMPgraphic
- \egroup}
-
- \def\startMPrun
- {\dosinglegroupempty\dostartMPrun}
-
-\else
-
- \long\def\startMPrun#1\stopMPrun
- {\MPruntrue
- \startwritingMPgraphic
- \writecheckedMPgraphic{#1}%
- \stopwritingMPgraphic
- \MPrunfalse}
-
-\fi
-
-%D \macros
-%D {startwritingMPgraphic,
-%D writeMPgraphic,
-%D stopwritingMPgraphic}
-%D
-%D If the writing process is divided into more steps, one can
-%D use the components of this macro directly.
-%D
-%D \starttyping
-%D \startwritingMPgraphic
-%D ...
-%D \writeMPgraphic{...}
-%D ...
-%D \writeMPgraphic{...}
-%D ...
-%D \stopwritingMPgraphic
-%D \stoptyping
-
-%D \macros
-%D {ifrunMPgraphics,ifrunMPTEXgraphics,ifinsertMPgraphics}
-%D
-%D These macros look a bit more complicated that one would
-%D expect at first sight. This is due to the two ways of
-%D processing these graphics, mentioned in a previous
-%D paragraph. Which method is used, the direct or indirect
-%D one, depends on a boolean.
-
-\newif\ifrunMPgraphics \runMPgraphicsfalse
-\newif\ifrunMPTEXgraphics \runMPTEXgraphicsfalse
-\newif\ifinsertMPgraphics \insertMPgraphicstrue
-
-%D If set to true, one can do with a single pass, else one must
-%D process the \METAPOST\ file \type{mpgraph} between two
-%D succesive \TEX\ runs.
-
-\ifx\MPgraphicfile\undefined
-
-\def\MPgraphicfile{mp\ifMPrun run\else graph\fi}
-\def\MPruntimefile{mprun}
-
-\fi
-
-%D \macros
-%D {MPgraphic}
-%D
-%D When we run \METAPOST\ from within \TEX, each graphic is
-%D processed at once, which means that we reuse this file many
-%D times. When however the execution is delayed, all graphics
-%D are saved in a separate figure. The current graphic is
-%D characterized bij a \COUNTER. This counter is available
-%D in \type{\MPgraphic}.
-
-\newcount\nofMPgraphics
-\newcount\currentMPgraphic
-
-\def\MPgraphic{0}
-
-% %D \macros
-% %D {ifreuseMPgraphics}
-% %D
-% %D If one want to reuse grapics, one can save much redundant
-% %D run time by setting the next switch to true.
-%
-% \newif\ifreuseMPgraphics \reuseMPgraphicstrue
-
-%D The three macros responsible for writing the graphic
-%D implement both schemes.
-
-%D \macros
-%D {MPinclusions, startMPinclusions, MPinitializations}
-%D
-%D One can include for instance common input commands by
-%D passing them to \type{\MPinclusions}:
-%D
-%D \starttyping
-%D \startMPinclusions
-%D input mp-mine ;
-%D \stopMPinclusions
-%D \stoptyping
-%D
-%D \starttyping
-%D \MPinclusions{input mp-mine}
-%D \stoptyping
-%D
-%D These commands reset their content each time. You can append
-%D code as follows:
-%D
-%D \starttyping
-%D \startMPinclusions[+]
-%D input mp-mine ;
-%D \stopMPinclusions
-%D \stoptyping
-%D
-%D The token register \type {\MPinitializations} is expanded
-%D before all other inclusions, the extensions are expanded
-%D only once per run.
-
-%D The next hack prevents too long lines:
-
-\long\def\runtimeobeyMPlines
- {\catcode35=11\relax % goodie
- \ifx\rawcharacter\undefined
- \let\obeyedline\space
- \else
- \obeylines
- \ifx\outputnewlinechar\undefined
- \edef\obeyedline{\rawcharacter{\endlinechar}}%
- \else
- \let\obeyedline\outputnewlinechar
- \fi
- \fi}
-
-\long\def\obeyMPlines % anyhow, we end up with ^^M's in the input
- {\obeylines
- \let\obeyedline\relax} % delay expansion
-
-\ifx\everydump\undefined
- % maybe we're not using context
-\else
- \appendtoks
- \let\obeyMPlines\runtimeobeyMPlines
- \to \everydump
-\fi
-
-%D We use two distinguished token registers:
-
-\newtoks \MPextensions % once per run (can be multiple graphics)
-\newtoks \MPinitializations % each graphic
-
-\let\stopMPextensions \relax % so that we can use it in \expanded
-\let\stopMPinitializations\relax % so that we can use it in \expanded
-\let\stopMPinclusions \relax % so that we can use it in \expanded
-
-\def\startMPextensions % no text checking done here !
- {\begingroup
- \obeyMPlines
- \dostartMPextensions}
-
-\def\dostartMPextensions#1\stopMPextensions
- {\endgroup
- \MPextensions\expandafter{\the\MPextensions#1}}
-
-\def\startMPinitializations % no text checking done here !
- {\begingroup
- \obeyMPlines
- \dostartMPinitializations}
-
-\def\dostartMPinitializations#1\stopMPinitializations
- {\endgroup
- \MPinitializations\expandafter{\the\MPinitializations#1}}
-
-\def\startMPinclusions
- {\begingroup
- \dosingleempty\dostartMPinclusions}
-
-\long\def\dostartMPinclusions
- {\obeyMPlines
- \dodostartMPinclusions}
-
-\long\def\dodostartMPinclusions[#1]#2\stopMPinclusions % document wide
- {\endgroup
- \doifelse{#1}{+}
- {\@EA\long\@EA\def\@EA\theMPinclusions\@EA
- {\theMPinclusions
- \writeMPgraphic{#2}}}
- {\long\def\theMPinclusions
- {% \expanded !
-% \@EA\expanded\@EA{\@EA\writeMPgraphic\@EA{\the\MPextensions;}}% new
- \writeMPgraphic{#2}}}}
-
-\def\MPinclusions
- {\dosingleempty\doMPinclusions}
-
-\long\def\doMPinclusions[#1]#2%
- {\startMPinclusions[#1]#2\stopMPinclusions}
-
-\def\theMPextensions
- {\@EA\expanded\@EA{\@EA\writeMPgraphic\@EA{\the\MPextensions;}}}
-
-\def\theMPinitializations
- {\@EA\expanded\@EA{\@EA\writeMPgraphic\@EA{\the\MPinitializations;}}}
-
-\startMPinclusions \stopMPinclusions
-
-%D \macros
-%D {iflongMPlines}
-%D
-%D When grabbing a graphic deifnition, newlines are turned
-%D into spaces. By default we split the graphic definition
-%D at the colon, but long lines are still possible by
-%D setting the next boolean to true.
-
-\newwrite\MPwrite
-\newwrite\MPstaticwrite
-
-\newif\iflongMPlines \longMPlinestrue % we now have \obeyMPlines
-
-\ifx \overlaywidth \undefined \def \overlaywidth {4cm} \fi
-\ifx \overlayheight \undefined \def \overlayheight {3cm} \fi
-\ifx \overlaylinewidth \undefined \def \overlaylinewidth {0pt} \fi
-
-\def\presetMPdefinitions
- {\edef\overlaywidth {\overlaywidth \space}%
- \edef\overlayheight {\overlayheight \space}%
- \edef\overlaylinewidth {\overlaylinewidth\space}%
- \edef\currentwidth {\the\hsize \space}%
- \edef\currentheight {\the\vsize \space}}
-
-%D The \type {;} aware method (the \type {\else} branch) also
-%D takes care of \type {btex}||\type {etex}, \type
-%D {verbatimtex}||\type {etex}. The space after \type {tex}
-%D is essential, since it protects \type {text}.
-
-\newif\ifMPTEXgraphic
-
-\let\bufferedMPgraphicsline\empty
-
-\appendtoks
- \globallet\bufferedMPgraphicsline\empty
-\to \everyMPgraphic
-
-\chardef\MPgraphicsscanmode\plustwo % 0=no scanning, 1=simple scanning, 2=less simple, 3=even less
-
-% the next fails with \chardef\MPgraphicsscanmode\plusone
-%
-% \startMPextensions
-% gp_num_points_with_tex := 3 ;
-% \stopMPextensions
-
-\def\writeMPgraphic % no big #1 passing here
- {\iflongMPlines
- \ifMPTEXgraphic
- \ifcase\MPgraphicsscanmode
- \let\next\writeMPgraphiclongR
- \else
- \let\next\writeMPgraphiclongT
- \fi
- \else
- \let\next\writeMPgraphiclongN
- \fi
- \else
- \ifMPTEXgraphic
- \ifcase\MPgraphicsscanmode
- \let\next\writeMPgraphicshortN % we could \let \writeMPgraphicshortR\writeMPgraphicshortN
- \else
- \let\next\writeMPgraphicshortT
- \fi
- \else
- \let\next\writeMPgraphicshortN
- \fi
- \fi
- \next}
-
-\appendtoks \obeyMPlines \to \everyMPgraphic % more efficient than in each following grouped write
-
-\long\def\writeMPgraphiclongR#1% fast, no scanning
- {\bgroup
- \let\par\space
- \immediate\write\MPwrite{#1}%
- \egroup}
-
-\long\def\writeMPgraphiclongT#1%
- {\bgroup
- \let\par\space
- \longMPflushT#1\empty\par\relax\par
- \egroup}
-
-\long\def\writeMPgraphicshortT#1%
- {\bgroup
- \let\par\space
- \shortMPflushT#1\empty;\relax;%
- \egroup}
-
-\long\def\longMPflushT#1#2\par
- {\ifx#1\relax \else
- \dowriteMPgraphicline#1#2tex \relax etex\MPend
- \expandafter\longMPflushT
- \fi}
-
-\long\def\shortMPflushT#1#2;%
- {\ifx#1\relax \else
- \dowriteMPgraphicline#1#2tex \relax etex\MPend
- \expandafter\shortMPflushT
- \fi}
-
-\long\def\writeMPgraphiclongN#1%
- {\bgroup
- \let\par\space
- \longMPflushN#1\empty\par\relax\par
- \egroup}
-
-\long\def\writeMPgraphicshortN#1%
- {\bgroup
- \let\par\space
- \shortMPflushN#1\empty;\relax;%
- \egroup}
-
-\long\def\longMPflushN#1#2\par
- {\ifx#1\relax \else
- \nowriteMPgraphicline#1#2\MPend
- \expandafter\longMPflushN
- \fi}
-
-\long\def\shortMPflushN#1#2;%
- {\ifx#1\relax \else
- \nowriteMPgraphicline#1#2\MPend
- \expandafter\shortMPflushN
- \fi}
-
-\def\dowriteMPgraphicline{\futurelet\next\dodowriteMPgraphicline}
-\def\nowriteMPgraphicline{\futurelet\next\nonowriteMPgraphicline}
-
-%D Will move (check if next is needed):
-
-\long\def\nonowriteMPgraphicline#1\MPend
- {\ifx\next\empty\else\ifx\next\relax\else
- \bgroup
- \let\par\space
- \iflongMPlines
- %\immediate\write\MPwrite{#1;}% oeps, ; invalid
- \immediate\write\MPwrite{#1}%
- \else
- \long\edef\ascii{#1}%
- \expandafter\flushMPgraphicline\ascii\empty;\relax;%
- \fi
- \egroup
- \fi\fi}
-
-%D A first version:
-%D
-%D \starttyping
-%D \long\def\dodowriteMPgraphicline#1tex #2#3etex#4\MPend%
-%D {\ifx\next\empty\else\ifx\next\relax\else
-%D \bgroup
-%D \let\par=\space
-%D \ifx#2\relax
-%D \immediate\write\MPwrite{#1;}%
-%D \egroup
-%D \else
-%D \global\MPTEXgraphictrue
-%D \convertargument#2#3\to\ascii
-%D \immediate\write\MPwrite{#1tex \ascii etex}%
-%D \egroup
-%D \dowriteMPgraphicline#4tex \relax etex\MPend
-%D \fi
-%D \fi\fi}
-%D \stoptyping
-
-%D The next alternative also handles inclusions well.
-
-\newtoks \everyMPTEXgraphic
-
-\newif\ifforceMPTEXgraphic
-
-%D Before we supported the graph module, we had:
-%D
-%D \starttyping
-%D \convertargument etex\to\MPasciiB
-%D \convertargument textext\to\MPasciiC % geen "text"
-%D \convertargument graphictext\to\MPasciiD % geen "text"
-%D
-%D \long\def\checkMPTEXgraphic#1%
-%D {\ifforceMPTEXgraphic
-%D \global\MPTEXgraphictrue
-%D \else
-%D \expandafter\convertargument#1\to\MPasciia
-%D \doifstringinstringelse\MPasciiB\MPasciia{\global\MPTEXgraphictrue}
-%D {\doifstringinstringelse\MPasciiC\MPasciia{\global\MPTEXgraphictrue}
-%D {\doifstringinstringelse\MPasciiD\MPasciia{\global\MPTEXgraphictrue}
-%D {\global\MPTEXgraphicfalse}}}%
-%D \fi}
-%D \stoptyping
-%D
-%D The next alternative permits extensions in other modules
-%D without the need to know the details of testing.
-
-\newtoks\MPTEXgraphicchecks
-
-\long\def\writecheckedMPgraphic#1%
- {\ifforceMPTEXgraphic
- \global\MPTEXgraphictrue
- \else
- \global\MPTEXgraphicfalse
- \edef\ascii{#1}\convertcommand\ascii\to\MPascii
- \the\MPTEXgraphicchecks\relax % \relax is end condition!
- \fi
- \flushMPTEXgraphic % verbatimtex etc
- \writeMPgraphic{#1}} % potential optimization: pass \ascii
-
-%D We could have used a kind of array approach using a
-%D counter appended to \type {MPascii}, but this is an
-%D as efficient alternative. (The uglyness comes from
-%D expanding after the string \type {#1}).
-
-\let\MPTEXchecklist\empty
-
-\def\forceMPTEXcheck#1%
- {\addtocommalist{#1}\MPTEXchecklist
- \expanded{\convertargument#1\noexpand\to
- \@EA\noexpand\csname MPascii#1\endcsname}%
- \@EA\appendtoks
- \@EA\doifincsnameelse\csname MPascii#1\endcsname\MPascii
- {\global\MPTEXgraphictrue\gobbleuntil\relax}\donothing
- \to \MPTEXgraphicchecks}
-
-\forceMPTEXcheck{etex}
-\forceMPTEXcheck{textext}
-\forceMPTEXcheck{graphictext}
-
-%D \starttyping
-%D \forceMPTEXgraphictrue
-%D
-%D \forceMPTEXcheck{lintext}
-%D \forceMPTEXcheck{logtext}
-%D
-%D \startMPcode
-%D draw hlintext.lft(0, 20, 5, 20cm, "@3e") ;
-%D draw vlogtext.bot(0, 10, 9, 10cm, "@3e") ;
-%D \stopMPcode
-%D \stoptyping
-
-%D A goodie for Mojca (the gnuplot wizzard):
-%D
-%D \starttyping
-%D \startMPcode
-%D draw fullcircle scaled 4cm ;
-%D draw \textext{$\sqrt{\frac{3}{2}^3}$} ;
-%D \stopMPcode
-%D \stoptyping
-
-\long\def\textext#1{\normalunexpanded{textext("#1")}} % or \detokenize
-
-\def\flushMPTEXgraphic
- {\ifMPTEXgraphic
- \immediate\write\MPwrite{verbatimtex \the\everyMPTEXgraphic\space etex;}%
- \fi}
-
-\long\def\flushMPgraphicline#1#2;%
- {\ifx#1\relax \else
- \immediate\write\MPwrite{#1#2;}%
- \expandafter\flushMPgraphicline
- \fi}
-
-% the next one fails on btex \vbox {\hbox .. leading to \vbox \hbox
-%
-% \long\def\dodowriteMPgraphicline#1tex #2#3etex#4\MPend
-% {\ifx\next\empty\else\ifx\next\relax\else
-% \bgroup
-% \let\par\space
-% \ifx#2\relax
-% \iflongMPlines
-% \immediate\write\MPwrite{#1;}%
-% \else
-% \edef\ascii{#1}%
-% \expandafter\flushMPgraphicline\ascii\empty;\relax;%
-% \fi
-% \egroup
-% \else
-% \convertargument#2#3\to\ascii
-% \immediate\write\MPwrite{#1tex \ascii etex}%
-% \egroup
-% \dowriteMPgraphicline#4tex \relax etex\MPend
-% \fi
-% \fi\fi}
-%
-% so we need a two step approach
-
-% \long\def\dodowriteMPgraphicline#1tex %
-% {\doifnextcharelse\relax
-% {\nododowriteMPgraphicline{#1}}
-% {\redodowriteMPgraphicline{#1}}}
-%
-% better and faster
-
-% \long\def\dodowriteMPgraphicline#1tex #2%
-% {\ifx#2\relax
-% \expandafter\nododowriteMPgraphicline
-% \else
-% \expandafter\redodowriteMPgraphicline
-% \fi{#1} #2}
-%
-% \long\def\redodowriteMPgraphicline#1#2etex#3\MPend
-% {\ifx\next\empty\else\ifx\next\relax\else
-% \bgroup
-% \let\par\space
-% \convertargument#2\to\ascii
-% \immediate\write\MPwrite{#1tex \ascii etex}%
-% \egroup
-% \dowriteMPgraphicline#3tex \relax etex\MPend
-% \fi\fi}
-%
-% \long\def\nododowriteMPgraphicline#1#2\MPend
-% {\ifx\next\empty\else\ifx\next\relax\else
-% \bgroup
-% \let\par\space
-% \iflongMPlines
-% \immediate\write\MPwrite{#1;}%
-% \else
-% \long\edef\ascii{#1}%
-% \expandafter\flushMPgraphicline\ascii\empty;\relax;%
-% \fi
-% \egroup
-% \fi\fi}
-
-% extra scanning
-
-\long\def\dodowriteMPgraphicline#1tex #2% kind of ok
- {\ifx#2\relax
- \expandafter\nododowriteMPgraphicline
- \else
- \ifcase\MPgraphicsscanmode
- % can't happen
- \or
- \@EAEAEA\redodowriteMPgraphicline
- \or
- \doifinstringelse{b$} {#1$}{\@EAEAEA\redodowriteMPgraphicline}%
- {\doifinstringelse{verbatim$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}%
- {\@EAEAEA\dododowriteMPgraphicline}}%
- \else
- \doifinstringelse { b$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}%
- {\doifinstringelse {(b$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}%
- {\doifinstringelse {=b$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}%
- {\doifinstringelse{verbatim$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}%
- {\@EAEAEA\dododowriteMPgraphicline}}}}%
- \fi
- \fi{#1} #2}
-
-\def\dododowriteMPgraphicline#1#2\MPend
- {\doifsomething{#1}{\xdef\bufferedMPgraphicsline{\bufferedMPgraphicsline#1tex }}%
- \dowriteMPgraphicline#2tex \relax etex\MPend}
-
-\long\def\redodowriteMPgraphicline#1#2etex#3\MPend
- {\ifx\next\empty
- \else\ifx\next\relax
- \else
- \bgroup
- \let\par\space
- \convertargument#2\to\ascii
- \immediate\write\MPwrite{\bufferedMPgraphicsline#1tex \ascii etex}%
- \globallet\bufferedMPgraphicsline\empty
- \egroup
- \dowriteMPgraphicline#3tex \relax etex\MPend
- \fi\fi}
-
-\long\def\nododowriteMPgraphicline#1#2\MPend
- {\ifx\next\empty
- \else\ifx\next\relax
- \else
- \bgroup
- \let\par\space
- \iflongMPlines
- \immediate\write\MPwrite{\bufferedMPgraphicsline#1;}%
- \globallet\bufferedMPgraphicsline\empty
- \else
- \long\edef\ascii{\bufferedMPgraphicsline#1}%
- \expandafter\flushMPgraphicline\ascii\empty;\relax;%
- \fi
- \egroup
- \fi\fi}
-
-%D This stripper is suboptimal in the sense that more
-%D \type{;}'s are output than feasible. Anyhow, \METAPOST\
-%D can handle this and users may consider it being a sort
-%D of error prevention bonus.
-
-\ifx\blabelgroup\undefined
-
- \let\blabelgroup\bgroup
- \let\elabelgroup\egroup
-
-\fi
-
-\newconditional\firstMPgraphic \settrue\firstMPgraphic
-
-\appendtoks
- \let \# \letterhash
- \let \_ \letterunderscore
- \let \& \letterampersand
- \let \{ \letteropenbrace
- \let \} \letterclosebrace
-\to \everyMPgraphic
-
-%D Not the best place but we need to make sure that no funny
-%D active characters creep in. Some day we will move this code.
-
-\ifx\disablediscretionaries\undefined
- \let\disablediscretionaries\relax
-\fi
-
-\appendtoks
- \disablediscretionaries
-\to \everyMPgraphic
-
-\def\writeMPgraph
- {\immediate\write\MPwrite{mpgraph:=\the\currentMPgraphic;}}
-
-\def\startwritingMPgraphic
- {\blabelgroup
- \global\advance\nofMPgraphics \plusone
- \ifMPrun \else
- \allocateMPslot\currentMPgraphic
- \fi
- \enableincludeMPgraphics
- \xdef\MPgraphic{\the\currentMPgraphic}%
- \the\everyMPgraphic
- \presetMPdefinitions % moved to here from \writeMPgraphic
- \ifrunMPgraphics
- \openMPgraphicfile1{runtime}%
- % no reset here !
- \theMPextensions
- \theMPinclusions
- \else
- \openMPgraphicfile0{collected}%
- % reset here ! global added (due to adding \blabelgroup)
- \theMPextensions
- \theMPinclusions
- \global\let\theMPextensions\relax
- \global\let\theMPinclusions\relax
- \fi
- \theMPinitializations % always
- \ifMPrun
- \else
- \ifMPwrapper
- \immediate\write\MPwrite{let mprunend = end ;}%
- \immediate\write\MPwrite{beginfig(\the\currentMPgraphic);}%
- \fi
- \fi
- \globallet\flushMPgraphics\closeMPgraphicfiles % \dodostopwritingMPgraphic
- \globallet\stopwritingMPgraphic\dostopwritingMPgraphic}
-
-\let\MPgraphicfiles\empty
-
-\let\MPinputtranslation\empty
-
-\def\openMPgraphicfile#1#2% #1=alwaysopen #2=message
- {\@EA\ifx\csname\@@MPG\@@MPG\MPgraphicfile\endcsname\relax
- \donetrue
- % \@EA\newwrite\csname\@@MPG\@@MPG\MPgraphicfile\endcsname
- % for the sake of plain usage
- \@EA\@EA\csname newwrite\endcsname\csname\@@MPG\@@MPG\MPgraphicfile\endcsname
- \doglobal\addtocommalist\MPgraphicfile\MPgraphicfiles
- \else
- \ifcase#1\relax\donefalse\else\donetrue\fi
- \fi
- \@EA\let\@EA\MPwrite\csname\@@MPG\@@MPG\MPgraphicfile\endcsname
- \ifdone
- \immediate\openout\MPwrite\MPgraphicfile.mp\relax
- \ifx\MPinputtranslation\empty\else
- \immediate\write\MPwrite{\MPinputtranslation}%
- \immediate\write\MPwrite{verbatimtex \MPinputtranslation etex ;}%
- \fi
- \immediate\write\MPwrite{\letterpercent\space #2 graphics of job "\jobname"}%
- \writeMPgraph
- \setMPrandomseed
- \fi}
-
-\def\dostopwritingMPgraphic
- {\ifMPrun \else
- \ifMPwrapper
- \immediate\write\MPwrite{endfig;}%
- \immediate\write\MPwrite{let end=mprunend;}%
- \fi
- \fi
- \ifrunMPgraphics
- \dodostopwritingMPgraphic
- \fi
- \elabelgroup}
-
-\def\dodostopwritingMPgraphic
- {\ifnum\currentMPgraphic>\zerocount
- \donetrue
- \else\ifMPrun
- \donetrue
- \else
- \donefalse
- \fi\fi
- \ifdone
- \finishwritingMPgraphics
- \runMPgraphic\MPgraphicfile
- \fi
- \globallet\flushMPgraphics\relax}
-
-\def\finishwritingMPgraphics
- {\ifMPwrapper\immediate\write\MPwrite{end.}\fi
- \immediate\closeout\MPwrite}
-
-\def\closeMPgraphicfiles
- {\ifrunMPgraphics \else \ifx\MPgraphicsfiles\empty\else
- \def\docommand##1%
- {\message{[flush and process ##1.mp afterwards]}%
- \@EA\let\@EA\MPwrite\csname\@@MPG\@@MPG##1\endcsname
- \finishwritingMPgraphics}%
- \processcommacommand[\MPgraphicfiles]\docommand
- \fi \fi}
-
-\let\stopwritingMPgraphic\relax
-\let\flushMPgraphics \relax
-
-%D By default each graphic gets its own slot (number). Later
-%D on we will define a recycle bin.
-
-\def \allocateMPslot#1{\global\advance#1\plusone}
-\def\deallocateMPslot#1{}
-
-%D \macros
-%D {translateMPinput}
-%D
-%D For my polish friends:
-%D
-%D \starttyping
-%D % translate=il2-pl
-%D
-%D \translateMPinput{il2-pl}
-%D
-%D \startMPenvironment[global]
-%D \setupbodyfont[plr]
-%D \stopMPenvironment
-%D
-%D \TeX: ± ¶
-%D
-%D \startMPcode
-%D draw btex MetaPost: ± ¶ etex scaled 5 ;
-%D \stopMPcode
-%D \stoptyping
-
-\def\translateMPinput#1%
-% {\xdef\MPinputtranslation{\letterpercent -translate-file=#1\space}} % at some point
-% {\xdef\MPinputtranslation{\letterpercent --8bit}} % some time later
- {\globallet\MPinputtranslation\empty} % the new mpost is 8 bit clean
-
-%D \macros
-%D {setMPrandomseed}
-%D
-%D Did you notice the random seed initialization? This is
-%D needed because \METAPOST\ has a rather poor initialization,
-%D which in some implementations depends on the time in
-%D minutes. So, in quick successive runs, random is not that
-%D random.
-
-\newif\ifsetMPrandomseed \setMPrandomseedtrue % false by default
-
-\def\setMPrandomseed
- {\ifsetMPrandomseed \ifx\getrandomnumber\undefined \else
- \getrandomnumber\localMPseed\zerocount{4095}%
- \writeMPgraphic{randomseed:=\localMPseed;}%
- \fi\fi}
-
-%D This feature has become optional. Thanks to Fabrice Popineau,
-%D \METAPOST\ can now do a far better job!
-
-%D \macros
-%D {flushMPgraphics}
-%D
-%D When we use the indirect method, all graphics are saved in
-%D one file. This means that we cannot close this file after
-%D every \type{\stopMPgraphic}. Therefore we need to say:
-%D
-%D \starttyping
-%D \flushMPgraphics
-%D \stoptyping
-%D
-%D else the file is closed without writing the \METAPOST\ end
-%D command. One will notice this fast enough when in indirect
-%D mode. When using the direct mode this command is not
-%D implicitly needed, but ommiting it makes files less
-%D portable.
-
-%D \macros
-%D {loadcurrentMPgraphic,
-%D placeMPgraphic}
-%D
-%D Once defined, we can call for this graphic by saying:
-%D
-%D \starttyping
-%D \loadcurrentMPgraphic{setups}
-%D \placeMPgraphic
-%D \stoptyping
-%D
-%D This two stage insert permits some intermediate manipulations
-%D of the graphic, which temporary saved in:
-
-\newbox\MPgraphicbox
-
-\def\doloadcurrentMPgraphic#1%
- {\loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{#1}%
- \deallocateMPslot\currentMPgraphic} % added
-
-\ifCONTEXT
- \def\loadcurrentMPgraphic{\dosinglegroupempty\doloadcurrentMPgraphic}
-\else
- \let\loadcurrentMPgraphic\doloadcurrentMPgraphic
-\fi
-
-\def\loadMPgraphic#1#2%
- {\setbox\MPgraphicbox\hbox{\ifinsertMPgraphics\insertMPfile{#1}{#2}\fi}}
-
-\def\MPllx{0}
-\def\MPlly{0}
-
-% \def\placeMPgraphic%
-% {\ifMPshiftdrawing
-% \hbox{\hskip\MPllx\onebasepoint\raise\MPlly\onebasepoint\box\MPgraphicbox}%
-% \else
-% \box\MPgraphicbox
-% \fi}
-%
-% experimental:
-
-\def\placeMPgraphic
- {\ifMPshiftdrawing
- \edef\next
- {\wd\MPgraphicbox\the\wd\MPgraphicbox
- \ht\MPgraphicbox\the\ht\MPgraphicbox
- \dp\MPgraphicbox\the\dp\MPgraphicbox}%
- \setbox\MPgraphicbox\hbox
- {\hskip\MPllx\onebasepoint\raise\MPlly\onebasepoint\box\MPgraphicbox}%
- \next
- \fi
- \box\MPgraphicbox}
-
-%D \macros
-%D {startreusableMPgraphic, reuseMPgraphic, useMPbox}
-%D
-%D One can use the next macro for defining graphics that are
-%D to be reused. When the next switch is set, graphics are
-%D cached.
-
-\newif\ifuseMPbox \useMPboxtrue
-
-%D We assume that one can set objects:
-%D
-%D \starttyping
-%D \def\douseMPbox#1%
-%D {\setobject{MP}{#1}\vbox
-%D {\forgetall
-%D \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
-%D \deallocateMPslot\currentMPgraphic
-%D \placeMPgraphic}%
-%D \setgvalue{#1}{\getobject{MP}{#1}}}
-%D \stoptyping
-%D
-%D More safe is to use a number for \type {{MP}{#1}} which permits
-%D redefinition. We also saves the boundingbox. This helps positioning
-%D reused graphics in layers.
-
-\newcount\MPobjectcounter
-
-\ifx\getobject\undefined \def\setobject#1#2{\setbox\scratchbox} \fi % makes dep check happy
-\ifx\getobject\undefined \def\getobject#1#2{\box \scratchbox} \fi % makes dep check happy
-
-\def\douseMPbox#1%
- {\global\advance\MPobjectcounter\plusone
- \setobject{MP}{\number\MPobjectcounter}\vbox
- {\forgetall
- \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
- \deallocateMPslot\currentMPgraphic
- \placeMPgraphic}%
- \setxvalue{#1}%
- {\noexpand\dodouseMPbox{\number\MPobjectcounter}{\MPllx}{\MPlly}{\MPurx}{\MPury}}}
-
-\def\dodouseMPbox#1#2#3#4#5% space delimiting would save some tokens
- {\xdef\MPllx{#2}% but it's not worth the effort and looks
- \xdef\MPlly{#3}% ugly as well
- \xdef\MPurx{#4}%
- \xdef\MPury{#5}%
- \getobject{MP}{#1}}
-
-\def\nouseMPbox#1%
- {\setxvalue{#1}%
- {\noexpand\forgetall
- \noexpand\loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
- \noexpand\deallocateMPslot{\currentMPgraphic}%
- \noexpand\placeMPgraphic}}
-
-\ifCONTEXT \else \let\douseMPbox\nouseMPbox \fi
-\ifCONTEXT \else \let\doifobjectssupportedelse\relax \fi
-
-\long\def\handlereusableMPgraphic#1#2%
- {\blabelgroup
- \enableincludeMPgraphics
- \startMPgraphic#2\stopMPgraphic
- \doifobjectssupportedelse\donothing\useMPboxfalse
- \ifuseMPbox
- \expandafter \douseMPbox
- \else
- \expandafter \nouseMPbox
- \fi {\@@MPG#1}%
- \getvalue{\@@MPG#1}%
- \elabelgroup}
-
-% \long\def\startreusableMPgraphic#1#2\stopreusableMPgraphic
-% {\ifundefined{\@@MPG#1}%
-% \long\setgvalue{\@@MPG#1}{\handlereusableMPgraphic{#1}{#2}}%
-% \fi}
-
-\long\def\dostartreusableMPgraphic#1#2\stopreusableMPgraphic
- {\blabelgroup
- \long\setgvalue{\@@MPG#1}{\handlereusableMPgraphic{#1}{#2}}%
- \elabelgroup}
-
-\def\reuseMPgraphic#1%
- {\blabelgroup
- \getvalue{\@@MPG#1}%
- \elabelgroup}
-
-\let\stopreusableMPgraphic \relax % so that we can use it in \expanded
-
-%D \macros
-%D {startuseMPgraphic,useMPgraphic}
-%D
-%D The every||time||it's||used original one is defined below.
-%D This one makes sense when the graphic uses random numbers.
-%D
-%D We can run (process graphic) without including them at that
-%D particular place. Therefore we explicitly disable
-%D inclusions (resulting in an dummy figure) when we are in MP
-%D run mode (see mfun-004 for an example, we process an
-%D example buffer which produced graphics).
-
-\long\def\handleuseMPgraphic#1#2%
- {\bgroup
- \enableincludeMPgraphics
- \startMPgraphic#2\stopMPgraphic
- \ifMPrun \else
- \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
- \placeMPgraphic
- \fi
- \deallocateMPslot\currentMPgraphic
- \egroup}
-
-\long\def\startuseMPgraphic
- {\blabelgroup
- \obeyMPlines
- \dostartuseMPgraphic}
-
-\long\def\dostartuseMPgraphic#1#2\stopuseMPgraphic
- {\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}}%
- \elabelgroup}
-
-\long\def\startusableMPgraphic
- {\blabelgroup
- \obeyMPlines
- \dostartusableMPgraphic}
-
-\long\def\dostartusableMPgraphic#1#2\stopusableMPgraphic
- {\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}}%
- \elabelgroup}
-
-\let\useMPgraphic\reuseMPgraphic
-
-\let\stopuseMPgraphic \relax % so that we can use it in \expanded
-\let\stopusableMPgraphic \relax % so that we can use it in \expanded
-
-%D \macros
-%D {doifMPgraphicelse}
-%D
-%D For (mainly internal) purposes we provide a test macro.
-
-% \def\doifMPgraphicelse#1%
-% {\doifdefinedelse{\@@MPG#1}}
-
-\def\doifMPgraphicelse#1%
- {\blabelgroup
- \doifdefinedelse{\@@MPG#1}%
- {\elabelgroup\firstoftwoarguments}
- {\elabelgroup\secondoftwoarguments}}
-
-%D \macros
-%D {includeMPgraphic}
-%D
-%D In a graphic one can call up another (predefined one)
-%D like:
-%D
-%D \starttyping
-%D \startuseMPgraphic{a}
-%D fill fullcircle scaled 100 ;
-%D \stopuseMPgraphic
-%D
-%D \startuseMPgraphic{b}
-%D \includeMPgraphic{a}
-%D fill fullsquare rotated 45 scaled 50 withcolor red ;
-%D \stopuseMPgraphic
-%D
-%D \useMPgraphic{b}
-%D \stoptyping
-
-\def\includeMPgraphic#1%
- {\executeifdefined{\@@MPG#1};} % ; if not found
-
-\def\enableincludeMPgraphics
- {\let\handleuseMPgraphic \secondoftwoarguments
- \let\handlereusableMPgraphic\secondoftwoarguments}
-
-%D We didn't yet define the macro responsible for processing
-%D the graphic from within \TEX.
-
-\def\runMPgraphic#1%
- {\ifrunMPgraphics
- \executeMETAPOST{#1}%
- \else
- % \message{[flush and process \MPgraphicfile.mp afterwards]}%
- \fi}
-
-%D \macros
-%D {useMETAFUNformat}
-%D
-%D For faster running, one can generate a format, saying
-%D
-%D \starttyping
-%D mpost -ini context
-%D \stoptyping
-%D
-%D (The resulting \type {mem} file should be moved to the
-%D right location. Watch out for misatching \type {progname}
-%D directives, since they can clutter memory.
-
-\newif\ifuseMETAFUNformat
-
-%D \macros
-%D {executeMetaPost, executeMETAPOST, executesystemcommand}
-%D
-%D With \type{\executeMETAPOST} being defined as:
-
-\ifx\undefined\executeMETAPOST
- \def\executeMETAPOST#1{\executesystemcommand{\executeMetaPost{#1}}}
-\fi
-
-%D There are two system dependant definitions:
-
-\ifx\undefined\executesystemcommand
- \def\executesystemcommand#1{\immediate\write18{#1}}
-\fi
-
-\ifx\TEXEXECcommand \undefined \def\TEXEXECcommand{texmfstart texexec} \fi
-
-\ifx\undefined\executeMetaPost
-
- \ifx\undefined\interactionmode \chardef\interactionmode=255 \fi
-
- \def\MPOSTbatchswitch {-interaction=batchmode} % was -int, but newer mpost does not support partial flags
- \def\MPOSTnonstopswitch {-interaction=nonstopmode} % was -int, but newer mpost does not support partial flags
- \def\MPOSTformatswitch {-progname=metafun -mem=}
- \def\MPOSTdriver {dvips}
-
- \def\executeMPOST#1% direct call
- {mpost
- \ifcase\interactionmode\MPOSTbatchswitch\or\MPOSTnonstopswitch\fi
- \space\ifuseMETAFUNformat \MPOSTformatswitch metafun \fi #1}
-
- \def\executeMPTEX#1% slower, due to nested texexec call
- {\TEXEXECcommand\space
- --batch \ifcase\interactionmode --logfile='mptex.log' \fi
- --output=\MPOSTdriver\space
- \ifuseMETAFUNformat --mpformat=metafun \fi --mptex --nomp --once #1}
-
- \def\executeMetaPost
- {\ifrunMPTEXgraphics
- \ifMPTEXgraphic
- \@EAEAEA\executeMPTEX
- \else
- \@EAEAEA\executeMPOST
- \fi
- \else
- \@EA\executeMPOST
- \fi}
-
-\fi
-
-%D The batchmode and nonstopmode (introduced in 2003 for
-%D Patrick Gundlach) switches may differ per binary and are
-%D supported by \TEXEXEC.
-
-%D \macros
-%D {insertMPfile}
-%D
-%D One can define this command in advance or redefine it after
-%D loading this module. The same goes for the forward
-%D reference to the figure loading macro:
-
-\ifx\undefined\insertMPfile
-
- \def\insertMPfile#1#2%
- {\ifx\undefined\externalfigure
- \message{[insert file #1 here]}%
- \else
- \externalfigure
- [#1]
- [\c!type=\c!mps,\c!object=\v!no,
- \c!symbol=\v!yes,\c!reset=\v!yes,
- \c!maxwidth=,\c!maxheight=,
- \c!frame=\v!off,\c!background=,
- #2]%
- \fi}
-
-\fi
-
-%D This macro takes {\em two} arguments, the second one can be
-%D used to pass info to the inclusion macro. Some examples
-%D of its use can be found in the modules \type{supp-tpi} and
-%D \type{prag-log}.
-
-%D This module can be used in \PLAIN\ \TEX too. When using
-%D \DVIPS, just try to process:
-%D
-%D \starttyping
-%D \input supp-mps
-%D
-%D \runMPgraphicstrue
-%D
-%D \def\insertMPfile#1#2%
-%D {\special{psfile=#1}}
-%D
-%D \startuseMPgraphic{1}
-%D prologues := 1;
-%D draw (0,0) withpen pencircle scaled 100;
-%D \stopuseMPgraphic
-%D
-%D \useMPgraphic{1}
-%D \stoptyping
-%D
-%D Don't forget to enable \type{\write18}. When does not say
-%D \type{\runMPgraphicstrue}, the \METAPOST\ scratch file
-%D must be closed by saying
-%D
-%D \starttyping
-%D \flushMPgraphics
-%D \stoptyping
-%D
-%D When using the indirect method, one has to process the file
-%D \type{mpgraph.mp} between two successive \TEX\ runs.
-%D
-%D \METAPOST\ needs the public domain \DVI\ to \POSTSCRIPT\
-%D converter \DVIPS. This symbiosis originates in the need to
-%D include the fonts (glyphs) that \METAPOST\ uses in the
-%D \POSTSCRIPT\ file. Driver independancy was one of my
-%D prerequisites for using \METAPOST, so I decided to build
-%D this kind of support myself. Personally I consider driver
-%D dependancy a drawback for the dissemination of such a
-%D package. The second part of this module more or less
-%D decouples \METAPOST\ and \DVIPS.
-%D
-%D The macros hereafter are copied from the module
-%D \type{m-metapost}. After writing module \type{supp-pdf} I
-%D added this method to the module named and after a while
-%D decided to hook it into module \type{spec-yy}. Therefore
-%D they made it into a support module, but in a slightly
-%D different way.
-
-%D \macros
-%D {includeMPfonts, ifincludeMPfonts}
-%D
-%D The method we use is both robust and simple: one can do
-%D with calling the next macro with the filename as argument:
-%D
-%D \starttyping
-%D \includeMPfonts{filename}
-%D \stoptyping
-%D
-%D We can turn of this mechanism with:
-%D
-%D \starttyping
-%D \includeMPfontsfalse
-%D \stoptyping
-%D
-%D {\em Currently this method fails for situations where the
-%D font definition is not on one line, which is he case when
-%D unkerned fonts are used along with long lines. One solution
-%D for this is to increase the value of \type {max_print_line}
-%D in \type {texmf.cnf}.}}
-
-\newif\ifincludeMPfonts \includeMPfontstrue
-
-\def\includeMPfonts#1%
- {\ifincludeMPfonts
- \bgroup
- \message{[MP fonts #1]}%
- %\uncatcodespecials
- \endlinechar\minusone
- \setMPspecials
- \obeyMPspecials
- \setbox\scratchbox\hbox
- {\hskip-\maxdimen
- \doprocessfile\scratchread{#1}\handleMPfont}%
- \smashbox\scratchbox
- \box\scratchbox
- \egroup
- \fi}
-
-\def\UseMetaPostGraphic {\includeMPfonts} % upward compatible
-\def\DontUseMetaPostGraphics {\includeMPfontsfalse} % upward compatible
-
-%D The characters are collected in a box and moved as far as
-%D possible into the left margin. The resulting box has no
-%D dimensions and can be prepended (appended) to the special
-%D that handles the inclusion. The characters are in the file
-%D but made invisible.
-%D
-%D In \CONTEXT\ font handling is intergrated in the figure
-%D inclusion macros. A decent plain \TEX\ alternative is:
-%D
-%D \starttyping
-%D \def\includeMPgraphic#1%
-%D {\hbox\bgroup
-%D \includeMPfonts{#1}%
-%D \dogetEPSboundingbox{#1}{\dimen2}{\dimen4}{\dimen6}{\dimen8}%
-%D \advance\dimen6 by -\dimen2
-%D \advance\dimen8 by -\dimen4
-%D \vbox to \dimen8
-%D {\forgetall
-%D \vfill
-%D \hsize\dimen6
-%D \special
-%D {PSfile="#1"\space
-%D llx=\EPSllx\space
-%D lly=\EPSlly\space
-%D urx=\EPSurx\space
-%D ury=\EPSury\space}}%
-%D \egroup}
-%D \stoptyping
-%D
-%D This macro needs \type {supp-eps.tex} and provided no
-%D scaling. For \LATEX\ users the next one will do:
-%D
-%D \starttyping
-%D \def\includeMPgraphic#1#%
-%D {\hbox\bgroup
-%D \def\includeMPgraphics##1%
-%D {\includeMPfonts{##1}%
-%D \includegraphics[typetype=mps,#1]{##1}% or whatever type they use
-%D \egroup}%
-%D \includeMPgraphics}
-%D \stoptyping
-
-%D We scan the graphics file for the \type{fshow} operator,
-%D that is, lines that start with \type{(}. If found it
-%D interprets the line, which looks like:
-%D
-%D \starttyping
-%D (string ... string) font size fshow
-%D \stoptyping
-%D
-%D Font definitions specified in the preamble are simply
-%D ignored. Only lines starting with \type{(} are interpreted.
-
-\def\dohandleMPfont#1#2\relax
- {\if#1(\expandafter\includeMPcharacters\fileline\relax\fi}
-
-\def\handleMPfont
- {\expandafter\dohandleMPfont\fileline\relax}
-
-%D Before we start scanning for data, we first change some
-%D \CATCODES. The first set of macro's is copied from module
-%D \type{supp-pdf}. This scheme is a bit overdone for this
-%D module, but using the same macros saves us some memory.
-
-\def\octalMPcharacter#1#2#3%
- {\char'#1#2#3\relax}
-
-\bgroup
-\catcode`\|=\@@comment
-\catcode`\%=\@@active
-\catcode`\[=\@@active
-\catcode`\]=\@@active
-\catcode`\{=\@@active
-\catcode`\}=\@@active
-\catcode`B=\@@begingroup
-\catcode`E=\@@endgroup
-\gdef\keepMPspecials|
- B\let%\letterpercent|
- \def[B\noexpand[E|
- \def]B\noexpand]E|
- \def{B\noexpand{E|
- \def}B\noexpand}EE
-\gdef\ignoreMPspecials|
- B\let%\letterpercent|
- \def[BE|
- \def]BE|
- \def{BE|
- \def}BEE
-\gdef\obeyMPspecials|
- B\def%B\char 37\relax E|
- \def[B\char 91\relax E|
- \def]B\char 93\relax E|
- \def{B\char123\relax E|
- \def}B\char125\relax EE
-\gdef\setMPspecials|
- B\setnaturalcatcodes
- \catcode`\\=\@@escape
- \catcode`\%=\@@active
- \catcode`\[=\@@active
- \catcode`\]=\@@active
- \catcode`\{=\@@active
- \catcode`\}=\@@active
- \lccode`\-=0 | latex sets this to `\-
- \lccode`\%=`\% | otherwise it's seen as a number
- \def\(B\char40\relax E|
- \def\)B\char41\relax E|
- \def\\B\char92\relax E|
- \def\0B\octalMPcharacter0E|
- \def\1B\octalMPcharacter1E|
- \def\2B\octalMPcharacter2E|
- \def\3B\octalMPcharacter3E|
- \def\4B\octalMPcharacter4E|
- \def\5B\octalMPcharacter5E|
- \def\6B\octalMPcharacter6E|
- \def\7B\octalMPcharacter7E|
- \def\8B\octalMPcharacter8E|
- \def\9B\octalMPcharacter9EE
-\egroup
-
-%D The lines starting with \type{(} are interpreted and
-%D handled by
-%D
-%D \starttyping
-%D \def\includeMPcharacters(#1) #2 #3 #4\relax%
-%D {\font\temp=#2 at #3bp\temp#1}
-%D \stoptyping
-%D
-%D While processing some \TUG~98 proceedings, I also had to
-%D deal with:
-%D
-%D \starttyping
-%D /nfont {10 div dup scale 10} def
-%D (T) ANTTB 7.13086 nfont fshow
-%D \stoptyping
-%D
-%D which comes to rounding sizes. This is something
-%D experimental. (The macro in supp-pdf.tex is more
-%D advanced.)
-
-\def\PSnfont{nfont}
-
-\def\includeMPcharacters(#1) #2 #3 #4#5#6#7#8#9\relax
- {\edef\temp{#4#5#6#7#8}%
- \ifx\temp\PSnfont % round font size (to pt)
- \scratchdimen#3\onepoint
- \ifdim\scratchdimen<\onepoint
- \def\size{1pt}%
- \else
- \advance\scratchdimen .5\onepoint
- \def\size##1.##2\relax{\def\size{##1pt}}%
- \expandafter\size\the\scratchdimen\relax
- \fi
- \else
- \edef\size{#3bp}%
- \fi
- \font\temp=#2 at \size
- \temp\if#1 \char32\else#1\fi}
-
-%D This method is both robust and reasonable fast. The only
-%D disadvantage is that when not embedded properly in the
-%D graphics inclusion macros, one has to load all graphics by
-%D hand.
-
-%D Now let's see if things work all right and show the example
-%D files that are part of the \METAPOST\ distribution:
-%D
-%D \setupexternalfigures[directory={../sample}]
-%D \startlinecorrection
-%D \setupalign[middle]
-%D \leavevmode
-%D \startcombination[3*3]
-%D {\externalfigure[mp-exa-1][frame=on,width=.2\hsize]} {}
-%D {\externalfigure[mp-exa-2][frame=on,width=.2\hsize]} {}
-%D {\externalfigure[mp-exa-3][frame=on,width=.2\hsize]} {}
-%D {\externalfigure[mp-exa-4][frame=on,width=.2\hsize]} {}
-%D {\externalfigure[mp-exa-5][frame=on,width=.2\hsize]} {}
-%D {\externalfigure[mp-exa-6][frame=on,width=.2\hsize]} {}
-%D {\externalfigure[mp-exa-7][frame=on,width=.2\hsize]} {}
-%D {\externalfigure[mp-exa-8][frame=on,width=.2\hsize]} {}
-%D {\externalfigure[mp-exa-9][frame=on,width=.2\hsize]} {}
-%D \stopcombination
-%D \stoplinecorrection
-%D
-%D Here we used calls like:
-%D
-%D \starttyping
-%D \externalfigure[mp-exa-1][methode-mps,frame=on,width=.2\hsize]
-%D \stoptyping
-
-%D \macros
-%D {convertMPcolors,
-%D ifconvertMPcolors,ifreduceMPcolors,ifforceMPcolors}
-%D
-%D When I told the editors that I wanted to use colored
-%D \METAPOST\ graphics in the color issue of the \MAPS, I was
-%D asked to use the \cap{CMYK} colorspace instead of \cap{RGB}
-%D one. However, \METAPOST\ only supports \cap{RGB} colors. I
-%D decided to write a utility to convert the \type
-%D {setrgbcolor} operators into \type {setcmykcolor} ones, and
-%D some experiments showed me that I could best let \TEX\ do it
-%D itself. Here it is:
-%D
-%D There are two booleans that control the conversion process.
-%D These are false by default.
-
-\newif\ifconvertMPcolors
-\newif\ifreduceMPcolors
-\newif\ifforcegrayMPcolors
-
-%D The main macro is called as:
-%D
-%D \starttyping
-%D \convertMPcolors{filename}
-%D \stoptyping
-%D
-%D When active, this macro returns a message saying if indeed
-%D conversion took place. The old file is overwritten! This
-%D saves time in a succesive passes and can't harm, simply
-%D because MP can generate them anew.
-
-\def\convertMPcolorpath{}
-\def\convertMPcolorfile{metacmyk.tmp}
-
-\def\convertMPcolors#1% todo: open on local path, no copy
- {\bgroup
- \ifforcegrayMPcolors
- \donetrue
- \else\ifconvertMPcolors
- \donetrue
- \else
- \donefalse
- \fi\fi
- \ifdone
- \message{[MP color conversion #1}%
- \endlinechar\minusone
- \uncatcodespecials
- \donefalse
- \immediate\openout\scratchwrite\convertMPcolorpath\convertMPcolorfile\relax
- \doprocessfile\scratchread{#1}\handleMPcolor
- \immediate\closeout\scratchwrite
- \ifdone
- \immediate\openout\scratchwrite\convertMPcolorpath#1\relax
- \doprocessfile\scratchread{\convertMPcolorpath \convertMPcolorfile}\handleMPcopy
- \immediate\closeout\scratchwrite
- \message{done]}%
- \else
- \message{not needed]}%
- \fi
- \immediate\openout\scratchwrite\convertMPcolorpath\convertMPcolorfile
- \immediate\closeout\scratchwrite
- \fi
- \egroup}
-
-%D The process is rather simple: read a line, look for the
-%D \type {setrgbcolor} operator, recalculate the components and
-%D check for gray reduction or black removal, write the result
-%D to a temporary file, and go on. Afterwards, the file is
-%D copied back. We don't have to reduce to gray scales;
-%D \METAPOST\ already takes care of that.
-
-%D The next macro is needed for forced conversion. This macro
-%D is copied from \type{colo-ini}, just in case one uses this
-%D module outside \CONTEXT.
-
-\ifx\@@cl@@s \undefined \def\@@cl@@s{0} \fi
-
-\ifx\convertRGBtoGRAY\undefined
-
-\def\convertRGBtoGRAY#1#2#3%
- {\scratchdimen#1\onepoint
- \scratchdimen300\scratchdimen
- \scratchcounter\scratchdimen
- \scratchdimen#2\onepoint
- \scratchdimen590\scratchdimen
- \advance\scratchcounter \scratchdimen
- \scratchdimen#3\onepoint
- \scratchdimen110\scratchdimen
- \advance\scratchcounter \scratchdimen
- \advance\scratchcounter \!!medcard
- \divide\scratchcounter \!!maxcard
- \edef\@@cl@@s{\realcolorvalue\scratchcounter}}
-
-\fi
-
-%D BTW, this code is quite old, and not as complete as the
-%D \PDF\ converter, which also handles spot colors and so.
-
-\def\handleMPcolor
- {\expandafter\dohandleMPcolor\fileline setrgbcolor*\\}
-
-\def\dohandleMPcolor#1setrgbcolor#2#3\\%
- {\if#2*%
- \immediate\write\scratchwrite{#1}%
- \else
- \dodohandleMPcolor#1setrgbcolor#2#3\\%
- \fi}
-
-\def\dodohandleMPcolor#1 #2 #3setrgbcolor#4setrgbcolor*\\% old and maybe broke
- {\bgroup
- \ifdim#1pt=.123pt
- \immediate\write\scratchwrite{#1 #2 #3 setrgbcolor}%
- \else
- \ifforcegrayMPcolors
- \convertRGBtoGRAY{#1}{#2}{#3}%
- \immediate\write\scratchwrite
- {\@@cl@@s \space setgray #4}%
- \else
- \dimen0=\onepoint \advance\dimen0 -#1\points
- \dimen2=\onepoint \advance\dimen2 -#2\points
- \dimen4=\onepoint \advance\dimen4 -#3\points
- \ifreduceMPcolors
- \dimen6\dimen0
- \ifdim\dimen2<\dimen6 \dimen6\dimen2 \fi
- \ifdim\dimen4<\dimen6 \dimen6\dimen4 \fi
- \advance\dimen0 -\dimen6
- \advance\dimen2 -\dimen6
- \advance\dimen4 -\dimen6
- \else
- \dimen6\zeropoint
- \fi
- \immediate\write\scratchwrite
- {\withoutpt\the\dimen0 \space
- \withoutpt\the\dimen2 \space
- \withoutpt\the\dimen4 \space
- \withoutpt\the\dimen6 \space setcmykcolor #4}%
- \fi
- \fi
- \egroup
- \donetrue} % needed for message
-
-\def\handleMPcopy
- {\immediate\write\scratchwrite{\fileline}}
-
-%D The next examples show the color conversion macros in
-%D action. These examples also demonstrate in||text \METAPOST\
-%D handling. As we will see, the conversion is hooked into the
-%D \CONTEXT\ color mechanism.
-%D
-%D By setting both \type{rgb} and \type{cmyk} to off, we force
-%D conversion to gray scales using:
-%D
-%D \placeformula[-]
-%D \startformula
-%D G = .30r + .59g + .11b
-%D \stopformula
-%D
-%D By using buffers, we keep the \ASCII\ layout clean:
-%D
-%D \startbuffer
-%D \startbuffer[rgb]
-%D \setupcolors[rgb=ja,cmyk=nee,reduction=no,conversion=no]
-%D \useMPgraphic{hans}
-%D \stopbuffer
-%D
-%D \startbuffer[cmyk]
-%D \setupcolors[rgb=nee,cmyk=ja,reduction=no,conversion=no]
-%D \useMPgraphic{hans}
-%D \stopbuffer
-%D
-%D \startbuffer[cmy]
-%D \setupcolors[rgb=nee,cmyk=ja,reduction=yes,conversion=no]
-%D \useMPgraphic{hans}
-%D \stopbuffer
-%D
-%D \startbuffer[gray]
-%D \setupcolors[rgb=nee,cmyk=nee,reduction=no,conversion=no]
-%D \useMPgraphic{hans}
-%D \stopbuffer
-%D \stopbuffer
-%D
-%D \typebuffer
-%D \getbuffer
-%D
-%D The graphic is rather simple and is generated each time
-%D it's called:
-%D
-%D \global\runMPgraphicstrue
-%D
-%D \startbuffer
-%D \startbuffer[graphic]
-%D \startuseMPgraphic{hans}
-%D width :=\the\textwidth/5;
-%D height := width/4;
-%D fill fullcircle
-%D xscaled width
-%D yscaled height
-%D withcolor (\RedGreenBlue);
-%D \stopuseMPgraphic
-%D \stopbuffer
-%D \stopbuffer
-%D
-%D \typebuffer
-%D \getbuffer
-%D
-%D Next we combine the four alternative interpretations in a
-%D combination:
-%D
-%D \startbuffer
-%D \startbuffer[result]
-%D \startcombination[4]
-%D {\getbuffer[rgb]} {\tfxx original}
-%D {\getbuffer[cmyk]} {\ttxx\string\convertMPcolorstrue}
-%D {\getbuffer[cmy]} {\ttxx\string\reduceMPcolorstrue}
-%D {\getbuffer[gray]} {\ttxx\string\forcegrayMPcolorstrue}
-%D \stopcombination
-%D \stopbuffer
-%D \stopbuffer
-%D
-%D \typebuffer
-%D \getbuffer
-%D
-%D Finally we call the buffers, using different setting:
-%D
-%D \startbuffer
-%D \placefigure
-%D {\METAPOST\ color conversions}
-%D {\def\RedGreenBlue{.1,.4,.6}\getbuffer[graphic]\getbuffer[result]\vskip6pt
-%D \def\RedGreenBlue{.1,.6,.4}\getbuffer[graphic]\getbuffer[result]\vskip6pt
-%D \def\RedGreenBlue{.4,.1,.6}\getbuffer[graphic]\getbuffer[result]\vskip6pt
-%D \def\RedGreenBlue{.4,.6,.1}\getbuffer[graphic]\getbuffer[result]\vskip6pt
-%D \def\RedGreenBlue{.6,.1,.4}\getbuffer[graphic]\getbuffer[result]\vskip6pt
-%D \def\RedGreenBlue{.6,.4,.1}\getbuffer[graphic]\getbuffer[result]}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D \getbuffer
-%D
-%D By the way, when the \POSTSCRIPT\ file resulting from
-%D this input is converted into \PDF\ and viewed in Acrobat
-%D Reader, one can quite different colors from those
-%D displayed in \GHOSTSCRIPT, which view equals the
-%D \POSTSCRIPT\ originals.
-
-%D \macros
-%D {experimental}
-%D
-%D Some experimental macros:
-%D
-%D \starttyping
-%D \startMPdrawing
-%D \stopMPdrawing
-%D \pushMPdrawing
-%D \popMPdrawing
-%D \resetMPdrawing
-%D \ifMPdrawingdone
-%D \getMPdrawing
-%D \MPdivten[number]
-%D \stoptyping
-%D
-%D These macros are used in \PPCHTEX.
-
-\let\MPdrawingdata\empty
-
-\newif\ifMPdrawingdone \MPdrawingdonefalse
-\newif\ifMPshiftdrawing \MPshiftdrawingfalse
-
-\def\resetMPdrawing
- {\globallet\MPdrawingdata\empty
- \global\MPdrawingdonefalse}
-
-% why global push/pop here?
-
-\def\pushMPdrawing
- {\globalpushmacro\MPdrawingdata
- \globallet\MPdrawingdata\empty}
-
-\def\popMPdrawing
- {\globalpopmacro\MPdrawingdata}
-
-\def\getMPdrawing
- {\ifMPdrawingdone
- \expandafter\startMPgraphic\MPdrawingdata\stopMPgraphic
- \loadcurrentMPgraphic{}%
- \deallocateMPslot\currentMPgraphic
- \placeMPgraphic
- \fi}
-
-\def\startMPdrawing
- {\dosingleempty\dostartMPdrawing}
-
-\long\def\dostartMPdrawing[#1]#2\stopMPdrawing
- {\relax
- \bgroup
- \enableincludeMPgraphics
- \presetMPdefinitions % in case #2 has measures
- \doifelse{#1}{-}{\convertargument#2\to\asciia}{\long\def\asciia{#2}}%
- \long\xdef\MPdrawingdata{\MPdrawingdata\asciia}%
- \egroup}
-
-\let\stopMPdrawing\relax
-
-\def\MPdivten[#1]%
- {\@EA\@EA\@EA\doMPdivten\@EA\@EA\@EA[\@EA#1]}
-
-\def\doMPdivten[#1]%
- {\ifnum#1> 9999 \dodoMPdivtenB#1\else
- \ifnum#1> 999 \dodoMPdivtenC#1\else
- \ifnum#1> 99 \dodoMPdivtenD#1\else
- \ifnum#1> 9 \dodoMPdivtenE#1\else
- \ifnum#1> 0 \dodoMPdivtenF#1\else
- \ifnum#1<-9999 \dodoMPdivtenA#1\else
- \ifnum#1< -999 \dodoMPdivtenB#1\else
- \ifnum#1< -99 \dodoMPdivtenC#1\else
- \ifnum#1< -9 \dodoMPdivtenD#1\else
- \ifnum#1< 0 \dodoMPdivtenE#1\else
- 0 \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
-\def\dodoMPdivtenA#1#2#3#4#5#6{#1#2#3#4#5.#6}
-\def\dodoMPdivtenB #1#2#3#4#5{#1#2#3#4.#5}
-\def\dodoMPdivtenC #1#2#3#4{#1#2#3.#4}
-\def\dodoMPdivtenD #1#2#3{#1#2.#3}
-\def\dodoMPdivtenE #1#2{#1.#2}
-\def\dodoMPdivtenF #1{.#1}
-
-% if we assume etex ... \def\MPdivten[#1]{\withoutpt\the\dimexpr#1pt/10\relax}
-
-%D \macros
-%D {startMPclip,grabMPclippath}
-%D
-%D We can use \METAPOST\ to calculate arbitrary clipping
-%D paths. Such a path is defined by (for instance):
-%D
-%D \starttyping
-%D \startMPclip{window}
-%D clip currentpicture to fullcircle xscaled \width yscaled \height ;
-%D \stopMPclip
-%D \stoptyping
-%D
-%D Such a path can be extracted (processed) by:
-%D
-%D \starttyping
-%D \grabMPclippath{window}{method}{width}{height}{default path}
-%D \stoptyping
-%D
-%D Currently only method 1 makes sense; it produces \PDF\
-%D code. This macro only makes sense when hooked into a
-%D special routine.
-
-\let\MPclippath\empty
-
-\long\def\startMPclip#1#2\stopMPclip
- {\blabelgroup
- \long\setgvalue{MPC:#1}{\startMPgraphic#2\stopMPgraphic\dograbMPclippath}%
- \elabelgroup}
-
-\let\stopMPclip\relax
-
-\def\grabMPclippath#1#2#3#4#5%
- {\blabelgroup
- \edef\width {#3\space}\let\overlaywidth \width
- \edef\height{#4\space}\let\overlayheight\height
- \doifdefinedelse{MPC:#1}
- {\getvalue{MPC:#1}%
- \setxvalue{MPC:#1}{\noexpand\xdef\noexpand\MPclippath{\MPclippath}}}%
- {\xdef\MPclippath{#5}}%
- \ifcase#2\else % method 1 :
- \doglobal\stripcharacter urveto\from\MPclippath\to\MPclippath
- \doglobal\stripcharacter oveto\from\MPclippath\to\MPclippath
- \doglobal\stripcharacter ineto\from\MPclippath\to\MPclippath
- \fi
- \elabelgroup}
-
-%D We pose some restrictions to the \METAPOST\ code and pickup
-%D the clip path from the file.
-%D
-%D We turn the slash into a comment. The \type {\hbox} grabs spaces
-%D and the \type {%} triggers the grabber. Next we filter the
-%D clipping path, or actually, the first path.
-
-% \bgroup
-% \catcode`\%=\@@active
-% \catcode`\/=\@@comment
-% \gdef\dograbMPclippath/
-% {\setbox\scratchbox=\hbox\bgroup/
-% \catcode`\%=\@@active
-% \obeylines\let\obeyedline\space
-% \def\do##1newpath##2closepath##3\od/
-% {\xdef\MPclippath{##2}\endinput}/
-% \def%##1%%EOF/
-% {\do##1newpathclosepath\od\endinput}/
-% \readfile{\MPgraphicfile.\the\currentMPgraphic}{}{}/
-% \deallocateMPslot\currentMPgraphic / new
-% \egroup}
-% \egroup
-
-\bgroup
-\catcode`\%=\@@active
-\catcode`\/=\@@comment
-\gdef\dograbMPclippath/
- {\setbox\scratchbox=\hbox\bgroup/
- \catcode`\%=\@@active
- \obeylines\let\obeyedline\space
- \def\do##1q n##2p W##3\od/
- {\xdef\MPclippath{##2}\endinput}/
- \def%##1%%EOF/
- {\do##1q np W\od\endinput}/
- \readfile{\MPgraphicfile.\the\currentMPgraphic}{}{}/
- \ifx\MPclippath\empty
- \def\do##1newpath##2closepath##3\od/
- {\xdef\MPclippath{##2}\endinput}/
- \def%##1%%EOF/
- {\do##1newpathclosepath\od\endinput}/
- \readfile{\MPgraphicfile.\the\currentMPgraphic}{}{}/
- \fi
- \deallocateMPslot\currentMPgraphic / new
- \egroup}
-\egroup
-
-%D \macros
-%D {recycleMPslots}
-%D
-%D When coding and embedding many \METAPOST\ figures in a
-%D document, one can save quite some disk space by using
-%D \PDFTEX\ and setting the next switch:
-
-\newif\ifrecycleMPslots \recycleMPslotstrue
-
-%D When a graphic takes space in the text flow, we can run
-%D into deadlock typesetting. In the first pass, the graphic
-%D is not available, but in the second pass it is. The
-%D placeholder that was put there in the first pass in now
-%D replace by the real graphic and as a result the document
-%D shrinks or grows and pages are removed or added. This in
-%D turn can trigger generation of other graphics, like those
-%D in the background. Graphics start swapping place and again
-%D page breaks change. You can imagine the mess we en dup
-%D with.
-%D
-%D This is why we provide was to use a dedicate range if
-%D numbers for fixed graphcs. Such graphics will not en dup
-%D in the text flow (at least their dimensions don't
-%D contribute to the main vertical list, and thereby they
-%D cannot interfere. We use a rather safe maximum of 4000
-%D graphics here and 8000 in \type {meta-ini}.
-
-\newcount \maxnofMPgraphics \maxnofMPgraphics = 4000 % 8000
-\newcount \minnofMPgraphics \minnofMPgraphics = 1
-
-\newif \ifMPstaticgraphic \MPstaticgraphicfalse % determines slot allocation
-
-\def\locateMPslot#1% slightly faster on one slot, much faster on multiple slots
- {\ifundefined{\number#1MP}% no \ifcsname
- \letgvalueempty{\number#1MP}%
- \expandafter\gobbletwoarguments
- \else
- \global\advance#1\plusone
- \fi
- \locateMPslot#1}
-
-\def\allocateMPslot#1%
- {\ifrunMPgraphics
- \ifx\pdfliteral\undefined
- \recycleMPslotsfalse % quite certainly not pdftex
- \else\ifcase\pdfoutput
- \recycleMPslotsfalse % dvi mode or not pdftex (we need to handle dvipdfmx)
- \fi\fi
- \else
- \recycleMPslotsfalse
- \fi
- \ifrecycleMPslots
- % \doloop % slow but used seldom
- % {\doifundefined{\recurselevel MP}
- % {\letgvalueempty{\recurselevel MP}%
- % \global#1\recurselevel
- % \exitloop}}%
- \global#1\plusone
- \locateMPslot#1%
- % \message{[MP slot + \number#1]%
- \else\ifMPstaticgraphic % beware not the same as static graphics
- \global#1\maxnofMPgraphics
- \global\advance\maxnofMPgraphics \minusone
- \else
- \global#1\minnofMPgraphics
- \global\advance\minnofMPgraphics \plusone
- \fi\fi
- \ifnum\minnofMPgraphics<\maxnofMPgraphics \else
- \writestatus\m!systems{increase \string\maxnofMPgraphics}%
- \fi}
-
-\def\deallocateMPslot#1%
- {\ifrunMPgraphics
- \ifcase\pdfoutput \recycleMPslotsfalse \fi
- \else
- \recycleMPslotsfalse
- \fi
- \ifrecycleMPslots
- \global\letbeundefined{\number#1MP}%
- %\message{[MP slot - \number#1]}%
- \fi}
-
-%D Experimental and overloaded later, since we need to be
-%D more clever due to \METAPOST's limit of 4~open files.
-
-\def\MPdatafile
- {mp-\the\currentMPgraphic.mpd}
-
-\def\getMPdata
- {\input \MPdatafile\relax}
-
-%D \macros
-%D {MPtoks, MPbox}
-%D
-%D For convenience, we provide some scratch registers:
-
-\ifx\undefined\MPtoks \newtoks\MPtoks \fi
-\ifx\undefined\MPbox \newbox \MPbox \fi
-
-%D \macros
-%D {startMPcode}
-%D
-%D We can save some typing with:
-%D
-%D \starttyping
-%D \startMPcode whatever \stopMPcode
-%D \stoptyping
-%D
-%D this automatically places the graphic
-
-\long\def\startMPcode
- {\begingroup
- \obeyMPlines
- \dostartMPcode}
-
-\long\def\dostartMPcode#1\stopMPcode
- {\startuseMPgraphic{@@}#1\stopuseMPgraphic
- \useMPgraphic{@@}%
- \endgroup}
-
-\let\stopMPcode\relax
-
-%D \macros
-%D {startstaticMPgraphic}
-%D
-%D Dedicated to Aditya Mahajan. See meta-ini for usage.
-
-% \long\def\startstaticMPgraphic#1#2\stopstaticMPgraphic
-% {\bgroup
-% \MPstaticgraphictrue
-% \setMPrandomseedfalse
-% \def\MPgraphicfile{#1}% no \jobname here
-% \let\allocateMPslot \gobbleoneargument
-% \let\deallocateMPslot\gobbleoneargument
-% \let\runMPgraphic \gobbleoneargument
-% \MPextensions\emptytoks
-% \MPinitializations\emptytoks
-% \runMPgraphicstrue
-% \MPwrapperfalse
-% \enableincludeMPgraphics
-% \def\sometxt##1{\string\sometxt{##1}}%
-% \currentMPgraphic\plusone % hack, else no close
-% \startMPgraphic#2\stopMPgraphic
-% \executeMPgraphicfile
-% \egroup}
-
-% different version, less messy hooked into the rest
-
-\long\def\startstaticMPgraphic#1#2\stopstaticMPgraphic
- {\blabelgroup
- \def\MPgraphicfile{#1}% no \jobname here
- \let\MPwrite\MPstaticwrite
- \immediate\openout\MPwrite=\MPgraphicfile.mp
- \setMPrandomseedfalse
- \enableincludeMPgraphics
- \def\sometxt##1{\string\sometxt{##1}}%
- \the\everyMPgraphic
- \presetMPdefinitions
- \theMPinclusions % brrr
- \writeMPgraphic{\letterpercent mpenvironment: \the\everyMPTEXgraphic}%
- \writeMPgraphic{beginfig(1);}%
- \writeMPgraphic{#2}%
- \writeMPgraphic{endfig; end.}%
- \immediate\closeout\MPwrite
- \executeMPgraphicfile
- \elabelgroup}
-
-% this will go to meta-ini
-
-\def\delaysystemcommand
- {\ifx\installprogram\undefined
- \expandafter\executesystemcommand
- \else
- \expandafter\installprogram
- \fi}
-
-\def\MPgraphicfilerunner
- {texmfstart --ifchanged=\MPgraphicfile.mp texexec --mpstatic \MPgraphicfile.mp}
-
-\ifx\doifmode\undefined
- \def\executeMPgraphicfile
- {\ifrunMPgraphics\@EA\executesystemcommand\else\@EA\delaysystemcommand\fi{\MPgraphicfilerunner}}
-\else
- \def\executeMPgraphicfile{\doifmode{*\v!first}
- {\ifrunMPgraphics\@EA\executesystemcommand\else\@EA\delaysystemcommand\fi{\MPgraphicfilerunner}}}
-\fi
-
-%D Special for \XETEX\ (problem with newlines). This will go
-%D away once the version supporting \type {--8bit} is
-%D widespread.
-
-\ifnum\texengine=\xetexengine
- \let\obeyMPlines\relax
- \longMPlinesfalse % alas
-\fi
-
-\protect \endinput