diff options
Diffstat (limited to 'macros/luatex/generic/minim-mp/minim-mp.tex')
-rw-r--r-- | macros/luatex/generic/minim-mp/minim-mp.tex | 82 |
1 files changed, 66 insertions, 16 deletions
diff --git a/macros/luatex/generic/minim-mp/minim-mp.tex b/macros/luatex/generic/minim-mp/minim-mp.tex index 7b8cef6c6b..ddc925ab3a 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.tex +++ b/macros/luatex/generic/minim-mp/minim-mp.tex @@ -1,6 +1,6 @@ \ifdefined\minimmploaded - \message{(skipped)} + \wlog{(skipped)} \expandafter\endinput\fi \chardef\minimmploaded = \catcode`\: \catcode`\: = 11 @@ -14,10 +14,11 @@ \savecatcodetable\csname minim:mp:catcodes:maketext\endcsname} % and an empty catcode table for reading metapost code \newcatcodetable \minim:mp:catcodes:mpcode -{\catcodetable\minim:initcatcodes +{\def\\{}\catcodetable\minim:initcatcodes \catcode`\{=1 \catcode`\}=2 \catcode9=10 + \catcode`\$=12 \catcode`\^=12 \catcode`\_=12 \catcode`\&=12 \catcode`\#=12 \catcode`\%=12 \catcode`\~=12 - \savecatcodetable\csname minim:mp:catcodes:mpcode\endcsname} + \catcode"0D=12 \savecatcodetable\csname\\minim:mp:catcodes:mpcode\endcsname} \directlua { require('minim-mp') } @@ -28,24 +29,39 @@ % % \closemetapostinstance \instance % \runmetapost \instance { code } % \protected -% \runmetapostimage \instance { code } % \protected % \getnextmpimage \instance % \getnamedmpimage \instance {name} % \remainingmpimages \instance % \boxnextmpimage \instance box-nr % \boxnamedmpimage \instance box-nr {name} +% \getallmpimages \instance +\newcount\mp:tmpcount +\protected\def\getallmpimages{% + \afterassignment\getallmpimages:do\mp:tmpcount=} +\def\getallmpimages:do{\loop + \ifnum \remainingmpimages\mp:tmpcount>0\relax + \getnextmpimage\mp:tmpcount \repeat} + +% \runmetapostimage \instance { code } +\protected\def\runmetapostimage{\begingroup + \afterassignment\runmetapostimage:do\mp:tmpcount=} +\def\runmetapostimage:do{% + \toksapp\everymp\mp:tmpcount{pre}{mp}{beginfig(0) }% + \tokspre\everymp\mp:tmpcount{post}{mp}{ endfig;}% + \toksapp\everymp\mp:tmpcount{post}{tex}{% + \getallmpimages\mp:tmpcount \endgroup}% + \runmetapost\mp:tmpcount} + % \directmetapost [ options ] { code } \protected\def\directmetapost{% - \begingroup\catcodetable\minim:mp:catcodes:mpcode - \withoptions[]\directmetapost:} -\long\def\directmetapost:[#1]#2{% - \newmetapostinstance[#1]\:mpinst: - \runmetapost\:mpinst:{#2}% - \loop \ifnum\remainingmpimages\:mpinst:>0\relax - \getnextmpimage\:mpinst: \repeat - \closemetapostinstance\:mpinst: - \endgroup} + \withoptions[]\directmetapost:opt} +\long\def\directmetapost:opt[#1]{% + \newmetapostinstance[#1]\:mpinst: + \everymp\:mpinst:{post}{tex}{% + \getallmpimages\:mpinst: + \closemetapostinstance\:mpinst:}% + \runmetapost\:mpinst:} % \newmetapostinstance [ options ] \instance \protected\def\newmetapostinstance{\withoptions[]\newmetapostinstance:} @@ -54,6 +70,41 @@ tex.sprint(require('minim-mp').open{#1}) }\relax} +% tex side of metapost instance initialisation +\newcount \mp:cur:inst +\newtoks \mp:init:env \mp:init:env{% + % four token lists for every instance + \expandafter\newtoks\csname mp:inst:pre:tex:\the\mp:cur:inst\endcsname + \expandafter\newtoks\csname mp:inst:pre:mp:\the\mp:cur:inst\endcsname + \expandafter\newtoks\csname mp:inst:post:mp:\the\mp:cur:inst\endcsname + \expandafter\newtoks\csname mp:inst:post:tex:\the\mp:cur:inst\endcsname} +% the zeroth quarted applies to all +\mp:cur:inst=0 \the\mp:init:env \mp:cur:inst=-1 + +% \everymp \id {pre|post}{mp|tex} % accesses the above token lists +\def\everymp#1#2#3{\csname mp:inst:#2:#3:\the + \ifcsname \string#1@instance\endcsname % for the latex environments + \lastnamedcs\else\numexpr#1\fi + \endcsname} + +% combining the relevant toks registers +\newtoks\mp:inst:pre:tex \mp:inst:pre:tex{% + \the\everymp0{pre}{tex}% + \the\everymp\mp:cur:inst{pre}{tex}} +\newtoks\mp:inst:post:tex \mp:inst:post:tex{% + \the\everymp\mp:cur:inst{post}{tex}% + \the\everymp0{post}{tex}} +\newtoks\mp:mpcode % see lua function scan_mp_chunk() +\newtoks\mp:makempcode \mp:makempcode{% + \edef\minim:mp:tmp{% + \the\everymp0{pre}{mp}% + \the\everymp\mp:cur:inst{pre}{mp}% + \unexpanded{\the\mp:mpcode}% + \the\everymp\mp:cur:inst{post}{mp}% + \the\everymp0{post}{mp}}% + \edef\minim:mp:tmp{\minim:mp:tmp}% + \mp:mpcode=\expandafter{\minim:mp:tmp}} + % colour conversion: 1 grayscale 2 cmyk 3 rgb 4 rgb as spot \newcount \convertmpcolours \convertmpcolours = 0 @@ -62,10 +113,9 @@ \newcount\GtoG \GtoG = 7152 \newcount\BtoG \BtoG = 0722 +% miscellaneous bits and ends \newtoks \everymaketext +\def\mpdim#1{\the\dimexpr#1\relax} \catcode`\: = \minimmploaded - - - |