%D \module %D [ file=mlib-pdf, %D version=2008.03.25, %D title=\METAPOST\ Integrated Graphics, %D subtitle=Conversion to PDF, %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 %D We use bit more code that needed because we want to limit the amount of boxing. \registerctxluafile{mlib-pdf}{autosuffix} %D Some code is shared between MPLIB and MPS. The following variables are also %D available for introspection and other purposes. \newdimension\MPwidth \newdimension\MPheight \newdimension\MPllx \newdimension\MPlly \newdimension\MPurx \newdimension\MPury \ifdefined\MPbox\else \newbox\MPbox\fi \permanent\protected\def\setMPboundingbox#1#2#3#4% at some point we might pass them as base or scaled points {\global\MPllx #1\onebasepoint \global\MPlly #2\onebasepoint \global\MPurx #3\onebasepoint \global\MPury #4\onebasepoint \global\MPwidth \dimexpr\MPurx-\MPllx\relax \global\MPheight\dimexpr\MPury-\MPlly\relax} \permanent\protected\def\resetMPboundingbox {\global\MPwidth \zeropoint \global\MPheight\zeropoint \global\MPllx \zeropoint \global\MPlly \zeropoint \global\MPurx \zeropoint \global\MPury \zeropoint} \permanent\protected\lettonothing\popMPboundingbox \permanent\protected\def\pushMPboundingbox {\enforced\permanent\protected\edef\popMPboundingbox {\global\MPwidth \the\MPwidth \global\MPheight\the\MPheight \global\MPllx \the\MPllx \global\MPlly \the\MPlly \global\MPurx \the\MPurx \global\MPury \the\MPury \relax}} % we need to combine these \permanent\protected\def\repositionMPboxindeed {\setbox\MPbox\hpack\bgroup \kern-\MPllx \raise-\MPlly \box\MPbox \egroup} \permanent\protected\def\repositionMPbox {\ifzeropt\MPllx \ifzeropt\MPlly % okay \else \repositionMPboxindeed \fi \else \repositionMPboxindeed \fi} % combined \permanent\protected\def\finalizeMPbox {\boxxoffset\MPbox-\MPllx\relax \boxyoffset\MPbox\dimexpr\boxyoffset\MPbox-\MPheight-\MPlly\relax \wd\MPbox\MPwidth \ht\MPbox\MPheight} % MPLIB specific: % \permanent\protected\def\startMPLIBtoPDF#1#2#3#4% % {\meta_process_graphic_figure_start % \dostarttagged\t!mpgraphic\empty % \naturalhpack attr \imageattribute \plusone \bgroup % \dousecolorparameter\s!black\forcecolorhack % \setMPboundingbox{#1}{#2}{#3}{#4}% % \setbox\MPbox\vpack\bgroup % % \forgetall % already done elsewhere % \noindent} % forces the proper cm in the backend \permanent\protected\def\startMPLIBtoPDF#1#2#3#4% {\meta_process_graphic_figure_start \dostarttagged\t!mpgraphic\empty \naturalhpack attr \imageattribute \plusone \bgroup \dousecolorparameter\s!black \setMPboundingbox{#1}{#2}{#3}{#4}% \setbox\MPbox\vpack\bgroup \noindent} % forces the proper cm in the backend \permanent\protected\def\stopMPLIBtoPDF {\egroup \finalizeMPbox \box\MPbox \egroup \dostoptagged \meta_process_graphic_figure_stop} %D Kind of special: % % test.mp: % % beginfig(1) fill fullcircle scaled 10cm withcolor red ; endfig ; % beginfig(2) draw fullcircle scaled 5cm withcolor blue ; endfig ; % beginfig(3) draw textext("just some text") ; endfig ; % % standalone pages: % % \starttext % \directMPgraphic{input "test.mp" ;} % \stoptext \aliased\let\normalstartMPLIBtoPDF\startMPLIBtoPDF \aliased\let\normalstopMPLIBtoPDF \stopMPLIBtoPDF \permanent\protected\def\directstartMPLIBtoPDF{\startTEXpage\normalstartMPLIBtoPDF} \permanent\protected\def\directstopMPLIBtoPDF {\normalstopMPLIBtoPDF\stopTEXpage} % can become \permanent\protected\def\directMPgraphic#=#*#=% but best test first \permanent\protected\def\directMPgraphic {\dodoublegroupempty\mlib_direct_graphic} \def\mlib_direct_graphic#1#2% makes pages (todo: make boxes) {\meta_begin_graphic_group{#1}% \enforced\let\startMPLIBtoPDF\directstartMPLIBtoPDF \enforced\let\stopMPLIBtoPDF \directstopMPLIBtoPDF \meta_start_current_graphic \forgetall \edef\p_extensions{\MPinstanceparameter\s!extensions}% \normalexpanded{\noexpand\clf_mpgraphic instance {\currentMPinstance}% format {\currentMPformat}% data {#2;}% initializations {\meta_flush_current_initializations}% \ifx\p_extensions\v!yes extensions {\clf_getmpextensions{\currentMPinstance}}% \fi inclusions {\meta_flush_current_inclusions}% definitions {\meta_flush_current_definitions}% figure {all}% method {\MPinstanceparameter\c!method}% \relax}% \meta_stop_current_graphic \meta_end_graphic_group} \protect \endinput