%D \module %D [ file=mlib-pps, %D version=2008.03.25, %D title=\METAPOST\ Integrated Graphics, %D subtitle=Basics, %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. \unprotect \registerctxluafile{mlib-pps}{} %D Todo: catch nested graphics like external figures with dummies. % todo: figure out why this is shifted % % \setupbodyfont[palatino] % % \starttext % \startMPpage % draw textext("123") ; % \stopMPpage % \stoptext % % A slightly larger picture works ok so maybe there is some kind % of interference with the page builder. \newbox \MPtextbox \newtoks\everyMPLIBsettext % not used \def\doMPLIBflushenvironment {%\writestatus\m!metapost{flushing environment}% \clf_mptexget \let\MPLIBflushenvironment\relax}% MPenvironments are depricated} \let\MPLIBflushenvironment\doMPLIBflushenvironment \unexpanded\def\MPLIBsetNtext#1% #2% box text {\MPLIBflushenvironment \dowithnextbox{\clf_mpsettext\nextbox #1}\hbox\bgroup % text \meta_set_current_color \let\MPLIBflushenvironment\doMPLIBflushenvironment \let\next} % gobble open brace \unexpanded\def\MPLIBsetCtext#1#2% #3% box colorspec text {\MPLIBflushenvironment \dowithnextbox{\clf_mpsettext\nextbox #1}\hbox\bgroup % text \directcolored[#2]% \meta_set_current_color % so, textcolor wins ! \let\MPLIBflushenvironment\doMPLIBflushenvironment \let\next} % gobble open brace \let\MPLIBsettext\MPLIBsetNtext \unexpanded\def\MPLIBsetNtextX#1% #2% box text {\MPLIBflushenvironment \hbox\bgroup % text \meta_set_current_color \let\MPLIBflushenvironment\doMPLIBflushenvironment \let\next} \unexpanded\def\MPLIBsetCtextX#1#2% #3% box colorspec text {\MPLIBflushenvironment \hbox\bgroup % text \directcolored[#2]% \meta_set_current_color % so, textcolor wins ! \let\MPLIBflushenvironment\doMPLIBflushenvironment \let\next} \let\MPLIBsettextX\MPLIBsetNtextX \unexpanded\def\MPLIBgettextscaled#1#2#3% why a copy .. can be used more often {\clf_mpgettext\MPtextbox #1% \vpack to \zeropoint{\vss\hpack to \zeropoint{\scale[\c!sx=#2,\c!sy=#3]{\raise\dp\MPtextbox\box\MPtextbox}\forcecolorhack\hss}}} % \unexpanded\def\MPLIBfigure#1#2% % {\setbox\scratchbox\hpack{\externalfigure[#1][\c!mask=#2]}% % \clf_mpsetsxsy\wd\scratchbox\ht\scratchbox\zeropoint % \vpack to \zeropoint{\vss\hpack to \zeropoint{\scale[\c!sx=\sx,\c!sy=\sy]{\box\scratchbox}\hss}}} \unexpanded\def\MPLIBfigure#1#2% {\setbox\scratchbox\hpack{\externalfigure[#1][\c!mask=#2]}% \clf_mpsetsxsy\wd\scratchbox\ht\scratchbox\zeropoint \vpack to \zeropoint{\vss\hpack to \zeropoint{\fastsxsy{\mlib_sx}{\mlib_sy}{\box\scratchbox}\hss}}} % horrible (we could inline scale and matrix code): \unexpanded\def\MPLIBgettextscaledcm#1#2#3#4#5#6#7#8#9% 2-7: sx,rx,ry,sy,tx,ty {\clf_mpgettext\MPtextbox #1% \setbox\MPbox\hpack\bgroup \dotransformnextbox{#2}{#3}{#4}{#5}{#6}{#7}% does push pop ... will be changed to proper lua call (avoid small numbers) \vpack to \zeropoint\bgroup \vss \hpack to \zeropoint \bgroup % \scale[\c!sx=#8,\c!sy=#9]{\raise\dp\MPtextbox\box\MPtextbox}% % \scale[\c!sx=#8,\c!sy=#9,\c!depth=\v!no]{\box\MPtextbox}% \fastsxsy{#8}{#9}{\raise\dp\MPtextbox\box\MPtextbox}% % This gives: LuaTeX warning: Misplaced \pdfrestore .. don't ask me why. % but I'll retry it some day soon. % \dostartscaling{#8}{#9}% % \raise\dp\MPtextbox\box\MPtextbox % \dostopscaling \forcecolorhack % can go away ... already in the scale macro \hss \egroup \egroup \egroup \smashbox\MPbox \box\MPbox} % \putnextboxincache{hans}{1}\hbox{foo} % % \startMPcode % draw boundingbox rawtexbox("hans",1) ; % draw rawtexbox("hans",1) ; % \stopMPcode \unexpanded\def\MPLIBgetboxscaledcm#1#2% {\begingroup \copyboxfromcache{#1}{#2}\MPtextbox % can be \clf_ \MPLIBgetboxscaledcm_next} \unexpanded\def\MPLIBgetboxscaledcm_next#1#2#3#4#5#6#7#8% 1-6: sx,rx,ry,sy,tx,ty {\setbox\MPbox\hpack\bgroup \dotransformnextbox{#1}{#2}{#3}{#4}{#5}{#6}% \vpack to \zeropoint\bgroup \vss \hpack to \zeropoint \bgroup \fastsxsy{#7}{#8}{\raise\dp\MPtextbox\box\MPtextbox}% \hss \egroup \egroup \egroup \smashbox\MPbox \box\MPbox \endgroup} \unexpanded\def\MPLIBgraphictext#1% use at mp end {\startTEXpage[\c!scale=10000]#1\stopTEXpage} %D \startbuffer %D \definelayer[test] %D %D \setlayerframed %D [test] %D [x=\MPx{somepos-1},y=\MPy{somepos-1}] %D [width=\MPw{somepos-1},height=\MPh{somepos-1}] %D {Whatever we want here!} %D %D \setlayerframed %D [test] %D [x=\MPx{somepos-2},y=\MPy{somepos-2}] %D [width=\MPw{somepos-2},height=\MPh{somepos-2}] %D {Whatever we need there!} %D %D \startuseMPgraphic{oeps} %D draw fullcircle scaled 6cm withcolor red ; %D register ("somepos-1",5cm,1cm,center currentpicture) ; %D register ("somepos-2",4cm,3cm,(-1cm,-2cm)) ; %D \stopuseMPgraphic %D %D \framed[background=test,offset=overlay]{\useMPgraphic{oeps}} %D \stopbuffer %D %D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection \unexpanded\def\MPLIBpositionwhd#1#2#3#4#5% bp ! {\dosavepositionwhd{#1}\zerocount{#2\onebasepoint}{#3\onebasepoint}{#4\onebasepoint}{#5\onebasepoint}\zeropoint} % \def\MPLIBextrapass#1% % {\ctxlua{metapost.graphic_extra_pass("#1")}} %D Experiment \def\doMPLIBstopgroup#1#2#3#4#5#6% some day this might happen elsewhere {\egroup \setbox\scratchbox\hpack{\kern\onebasepoint\box\scratchbox}% weird correction \wd\scratchbox \dimexpr#5\onebasepoint-#3\onebasepoint+2\onebasepoint\relax \ht\scratchbox #6\onebasepoint \dp\scratchbox-#4\onebasepoint \setbox\scratchbox\hpack\bgroup \kern-#3\onebasepoint \box\scratchbox \egroup \saveboxresource attr {/Group << /S /Transparency /I \ifnum#1=1 true \else false \fi /K \ifnum#2=1 true \else false \fi >>} resources {\pdfbackendcurrentresources} \scratchbox \setbox\scratchbox\hpack\bgroup \kern#3\onebasepoint \kern-\onebasepoint \useboxresource\lastsavedboxresourceindex \egroup \wd\scratchbox\zeropoint \ht\scratchbox\zeropoint \dp\scratchbox\zeropoint \box\scratchbox \endgroup} \unexpanded\def\MPLIBstartgroup#1#2#3#4#5#6% isolated 0/1, knockout 0/1 llx lly urx ury {\begingroup \setbox\scratchbox\hpack\bgroup \unexpanded\def\MPLIBstopgroup{\doMPLIBstopgroup{#1}{#2}{#3}{#4}{#5}{#6}}} % For now here ... will be cleaned up: \newtoks\mptexttoks \newbox \mptextbox \newtoks\mpoutlinetoks \newtoks\mpgraphictexttoks \mptexttoks {\global\setbox\mptextbox\hbox{\clf_mptexttoks}} \mpoutlinetoks {\global\setbox\mptextbox\vbox{\clf_mpoutlinetoks}} \mpgraphictexttoks{\global\setbox\mptextbox\vbox{\clf_mpgraphictexttoks}} \protect \endinput