diff options
Diffstat (limited to 'tex/context/base/mkiv/meta-ini.mkxl')
-rw-r--r-- | tex/context/base/mkiv/meta-ini.mkxl | 1385 |
1 files changed, 0 insertions, 1385 deletions
diff --git a/tex/context/base/mkiv/meta-ini.mkxl b/tex/context/base/mkiv/meta-ini.mkxl deleted file mode 100644 index 3e1c54d53..000000000 --- a/tex/context/base/mkiv/meta-ini.mkxl +++ /dev/null @@ -1,1385 +0,0 @@ -%D \module -%D [ file=meta-ini, -%D version=2008.03.25, -%D title=\METAPOST\ Graphics, -%D subtitle=Initialization, -%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 Some lmtx upgrading work needs to be done here. - -% initializations: -% -% - pass settings from tex to mp (delayed expansion) -% - used by context core (and modules) -% - cummulative definitions -% - flushed each graphic -% - can be disabled per instance -% - managed at the tex end -% -% extensions: -% -% - add mp functionality (immediate expansion) -% - cummulative -% - all instances or subset of instances -% - can be disabled per instance -% - managed at the lua/mp end -% - could be managed at the tex end but no real reason and also messy -% -% definitions: -% -% - add mp functionality (delayed expansion) -% - cummulative -% - per instance -% - managed at the tex end -% -% inclusions: -% -% - add mp functionality (delayed expansion) -% - cummulative only when [+] -% - per instance -% - managed at the tex end -% -% order of execution: -% -% definitions -% extensions -% inclusions -% beginfig -% initializations -% graphic -% endfig - -% The instance will be implemented stepwise ... I should redo some code in order to -% make the macros look better than they do now. - -\writestatus{loading}{MetaPost Graphics / Initializations} - -\registerctxluafile{meta-ini}{} - -\unprotect - -\newtoks \everyMPgraphic % mp % public or not ? - -\appendtoks - \restoreendofline % see interferences-001.tex -\to \everyMPgraphic - -\def\MPruntimefile {mprun} -\def\currentMPformat {metafun} -\def\defaultMPinstance{metafun} - -\installcorenamespace{mpinstance} -\installcorenamespace{mpinclusions} -\installcorenamespace{mpdefinitions} -\installcorenamespace{mpgraphic} -\installcorenamespace{mpstaticgraphic} -\installcorenamespace{mpclip} - -\newtoks \t_meta_initializations % tex, each -\def \t_meta_inclusions {\csname\??mpinclusions \currentMPinstance\endcsname} % token register -\def \t_meta_definitions {\csname\??mpdefinitions\currentMPinstance\endcsname} % token register - -%D The next command is, of course, dedicated to Mojca, who needs it for gnuplot. -%D Anyway, the whole multiple engine mechanism is to keep her gnuplot from -%D interfering. - -\permanent\tolerant\protected\def\startMPdefinitions#=#:#2\stopMPdefinitions - {\let\m_meta_saved_instance\currentMPinstance - \edef\currentMPinstance{#1}% - \ifempty\currentMPinstance - \let\currentMPinstance\defaultMPinstance - \fi - \gtoksapp\t_meta_definitions{#2}% - \let\currentMPinstance\m_meta_saved_instance} - -\permanent\let\stopMPdefinitions\relax - -\permanent\tolerant\protected\def\startMPextensions#=#:#2\stopMPextensions % we could use buffers instead - {\clf_setmpextensions{#1}{#2}} - -\permanent\let\stopMPextensions\relax - -\permanent\protected\def\startMPinitializations#1\stopMPinitializations % for all instances, when enabled - {\gtoksapp\t_meta_initializations{#1}} - -\permanent\let\stopMPinitializations\relax - -\permanent\tolerant\protected\def\startMPinclusions[#1]#*#=#:#3\stopMPinclusions - {\let\m_meta_saved_instance\currentMPinstance % \pushmacro - \edef\currentMPinstance{#2}% - \ifempty\currentMPinstance - \let\currentMPinstance\defaultMPinstance - \fi - \iftok{#1}{+}\else - \global\t_meta_inclusions\emptytoks - \fi - \gtoksapp\t_meta_inclusions{#3}% - \let\currentMPinstance\m_meta_saved_instance} % \popmacro - -\permanent\let\stopMPinclusions\relax - -% The next was broken since we added instances so it will go away! - -\permanent\tolerant\protected\def\MPinclusions[#1]#:#*#=#:#*#=% - {\let\m_meta_saved_instance\currentMPinstance - \iftok{#1}{+}\else - \global\t_meta_inclusions\emptytoks - \fi - \ifparameter#3\or - \edef\currentMPinstance{#2}% - \ifempty\currentMPinstance - \let\currentMPinstance\defaultMPinstance - \fi - \gtoksapp\t_meta_inclusions{#3}% - \else - \let\currentMPinstance\defaultMPinstance - \gtoksapp\t_meta_inclusions{#2}% - \fi - \let\currentMPinstance\m_meta_saved_instance} - -% so far - -\installcommandhandler \??mpinstance {MPinstance} \??mpinstance - -\setupMPinstance - [\s!format=metafun, - \s!extensions=\v!no, - \s!initializations=\v!no, - \c!method=\s!default, - \c!textstyle=, - \c!textcolor=] - -\appendtoks - \ifcsname\??mpdefinitions\currentMPinstance\endcsname \else - \expandafter\newtoks\csname\??mpdefinitions\currentMPinstance\endcsname - \fi - \ifcsname\??mpinclusions\currentMPinstance\endcsname \else - \expandafter\newtoks\csname\??mpinclusions\currentMPinstance\endcsname - \fi - \t_meta_definitions\emptytoks % in case we redefine - \t_meta_inclusions \emptytoks % in case we redefine -\to \everydefineMPinstance - -\permanent\protected\def\resetMPinstance[#1]% - {\writestatus\m!metapost{reset will be implemented when needed}} - -\def\meta_analyze_graphicname[#1]% - %{\normalexpanded{\meta_analyze_graphicname_indeed[#1::::]}} - {\normalexpanded{\meta_analyze_graphicname_indeed[#1}::::]} - -\def\meta_show_properties_indeed - {\writestatus{metapost}{name: \currentMPgraphicname, instance: \currentMPinstance, format: \currentMPformat}} - -\let\meta_show_properties\donothing - -\installtextracker - {metapost.properties} - {\let\meta_show_properties\meta_show_properties_indeed} - {\let\meta_show_properties\donothing} - -\protected\def\meta_analyze_graphicname_indeed[#1::#2::#3]% instance :: - {\edef\currentMPgraphicname{#2}% - \ifempty\currentMPgraphicname - \edef\currentMPgraphicname{#1}% - \let\currentMPinstance\defaultMPinstance - \orelse\ifcsname\??mpdefinitions#1\endcsname - \edef\currentMPinstance{#1}% - \else - \let\currentMPinstance\defaultMPinstance - \fi - \edef\currentMPformat{\MPinstanceparameter\s!format}% - \meta_show_properties} - -\def\currentMPgraphicname{\s!unknown} -\def\currentMPinstance {\defaultMPinstance} -\def\currentMPformat {\currentMPinstance} - -\defineMPinstance[metafun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes] -\defineMPinstance[minifun] [\s!format=minifun,\s!extensions=\v!yes,\s!initializations=\v!yes] -\defineMPinstance[extrafun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes] -\defineMPinstance[lessfun] [\s!format=metafun] -\defineMPinstance[doublefun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!double] -\defineMPinstance[binaryfun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!binary] -\defineMPinstance[decimalfun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!decimal] - -\defineMPinstance[mprun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes] - -\defineMPinstance[metapost] [\s!format=mpost] -\defineMPinstance[nofun] [\s!format=mpost] -\defineMPinstance[doublepost] [\s!format=mpost,\c!method=\s!double] -\defineMPinstance[binarypost] [\s!format=mpost,\c!method=\s!binary] -\defineMPinstance[decimalpost][\s!format=mpost,\c!method=\s!decimal] - -\defineMPinstance[simplefun] [\s!format=metafun,\c!method=\s!double] % maybe use minifun - -%defineMPinstance[megapost] [\s!format=mpost,\c!method=\s!decimal] - -\newconditional\c_meta_include_initializations - -\def\meta_begin_graphic_group#1% - {\begingroup - \meta_analyze_graphicname[#1]} - -\def\meta_end_graphic_group - {\endgroup} - -\def\MPaskedfigure{false} - -\def\meta_flush_current_initializations - {\ifconditional\c_meta_include_initializations - \the\t_meta_initializations - \fi} - -\def\meta_flush_current_inclusions - {\the\t_meta_inclusions} - -\def\meta_flush_current_definitions - {\the\t_meta_definitions} - -\def\meta_start_current_graphic - {\begingroup - \meta_enable_include - \the\everyMPgraphic - \edef\p_initializations{\MPinstanceparameter\s!initializations}% - \ifx\p_initializations\v!yes - \settrue \c_meta_include_initializations - \else - \setfalse\c_meta_include_initializations - \fi - \edef\p_setups{\MPinstanceparameter\c!setups}% - \ifempty\p_setups \else - \setups[\p_setups]% - \fi - \useMPinstancestyleparameter\c!textstyle} - -\def\meta_set_current_color - {\useMPinstancecolorparameter\c!textcolor} - -\def\meta_stop_current_graphic - {\global\t_meta_definitions\emptytoks - \global\t_meta_inclusions\emptytoks - \endgroup} - -\def\meta_process_graphic_start - {\pushMPboundingbox - \setbox\b_meta_graphic\hpack\bgroup} - -\let\meta_relocate_graphic\relax % experimental hook - -\def\meta_process_graphic_stop - {\egroup - \meta_place_graphic - \meta_relocate_graphic - \popMPboundingbox} - -\protected\def\meta_process_graphic_instance#1% - {\edef\currentMPinstance{#1}% - \ifempty\currentMPinstance - \let\currentMPinstance\defaultMPinstance - \fi - \edef\currentMPformat{\MPinstanceparameter\s!format}% - \meta_process_graphic} - -\protected\def\meta_process_graphic#1% todo: extensions and inclusions outside beginfig - {\meta_start_current_graphic - \forgetall - \edef\p_extensions{\MPinstanceparameter\s!extensions}% - \meta_process_graphic_start - \normalexpanded{\noexpand\clf_mpgraphic - instance {\currentMPinstance}% - format {\currentMPformat}% - data {#1;}% - initializations {\meta_flush_current_initializations}% - \ifx\p_extensions\v!yes - extensions {\clf_getmpextensions{\currentMPinstance}}% goes through tex again - \fi - inclusions {\meta_flush_current_inclusions}% - definitions {\meta_flush_current_definitions}% - figure {\MPaskedfigure}% - method {\MPinstanceparameter\c!method}% - namespace {\??graphicvariable\currentmpvariableclass:}% - \relax}% - \meta_process_graphic_stop - \meta_stop_current_graphic} - -\let\meta_process_graphic_figure_start\relax -\let\meta_process_graphic_figure_stop \relax - -\permanent\protected\def\processMPfigurefile#1% special case: obeys beginfig .. endfig and makes pages - {\begingroup - \let\normal_meta_process_graphic_start\meta_process_graphic_start - \let\normal_meta_process_graphic_stop \meta_process_graphic_stop - \let\meta_process_graphic_start\relax - \let\meta_process_graphic_stop \relax - \def\meta_process_graphic_figure_start{\startTEXpage[\c!offset=\v!overlay,\c!align=]\normal_meta_process_graphic_start}% - \def\meta_process_graphic_figure_stop {\normal_meta_process_graphic_stop\stopTEXpage} - \def\MPaskedfigure{all}% - \meta_process_graphic{input "#1" ;}% - \endgroup} - -%D Calling up previously defined graphics. - -% \def\includeMPgraphic#1% gets expanded ! -% {\ifcsname\??mpgraphic#1\endcsname -% \csname\??mpgraphic#1\endcsname ; % ; is safeguard -% \fi} -% -% \protected\def\meta_enable_include % public -% {\let\meta_handle_use_graphic \thirdofthreearguments -% \let\meta_handle_reusable_graphic\thirdofthreearguments} -% -% but ... we want this too: -% -% \startuseMPgraphic{x} -% draw textext("\externalfigure[foo.pdf]") ; -% \stopuseMPgraphic -% -% \useMPgraphic{x} -% -% so we cannot overload unless we let back to the original meanings each graphic -% ... a better solution is: - -\permanent\def\includeMPgraphic#1% gets expanded ! - {\ifcsname\??mpgraphic#1\endcsname - \doubleexpandafter\fourthoffourarguments\lastnamedcs ; % ; is safeguard - \fi} - -\let\meta_enable_include\relax - -%D Drawings (stepwise built): - -\newif\ifMPdrawingdone \MPdrawingdonefalse - -\permanent\protected\def\finalizeMPdrawing - {\MPdrawingdonetrue} - -\let\MPdrawingdata\empty - -\permanent\protected\def\resetMPdrawing - {\glet\MPdrawingdata\empty - \global\MPdrawingdonefalse} - -\permanent\protected\def\pushMPdrawing - {\globalpushmacro\MPdrawingdata - \glet\MPdrawingdata\empty} - -\permanent\protected\def\popMPdrawing - {\globalpopmacro\MPdrawingdata} - -\permanent\protected\def\getMPdrawing - {\ifMPdrawingdone - \expandafter\meta_process_graphic\expandafter{\MPdrawingdata}% is this expansion still needed? - \fi} - -\permanent\tolerant\def\startMPdrawing[#1]% todo: use pickup #: - {\meta_start_drawing#1} - -\def\meta_start_drawing#1#2\stopMPdrawing - {\relax - \bgroup - \meta_enable_include - \doifelse{#1}{-} - {\xdef\MPdrawingdata{\MPdrawingdata\detokenize{#2}}}% - {\xdef\MPdrawingdata{\MPdrawingdata#2}}% - \egroup} - -\permanent\let\stopMPdrawing\relax - -\permanent\def\MPdrawing#1% - {\relax - \bgroup - \meta_enable_include - \xdef\MPdrawingdata{\MPdrawingdata#1}% - \egroup} - -\permanent\protected\def\startMPclip#1#2\stopMPclip % todo: store at the lua end or just store less - {\setgvalue{\??mpclip#1}{#2}} - -\permanent\let\stopMPclip\relax - -\protected\def\meta_grab_clip_path#1#2#3% - {\begingroup - \d_overlay_width #2\relax - \d_overlay_height#3\relax - \edef\width {\the\d_overlay_width \space}% - \edef\height{\the\d_overlay_height\space}% - \edef\currentMPclip{#1}% - \ifcsname\??mpclip\currentMPclip\endcsname - \meta_grab_clip_path_yes - \else - \meta_grab_clip_path_nop - \fi - \endgroup} - -\def\meta_grab_clip_path_yes - {\meta_start_current_graphic - \normalexpanded{\noexpand\clf_mpsetclippath - instance {\currentMPinstance}% - format {\currentMPformat}% - data {\csname\??mpclip\currentMPclip\endcsname}% - initializations {\meta_flush_current_initializations}% - useextensions {\MPinstanceparameter\s!extensions}% - inclusions {\meta_flush_current_inclusions}% - method {\MPinstanceparameter\c!method}% - width \d_overlay_width - height \d_overlay_height - \relax}% - \meta_stop_current_graphic} - -\def\meta_grab_clip_path_nop - {\clf_mpsetclippath - width \d_overlay_width - height \d_overlay_height - \relax} - -%D Since we want labels to follow the document settings, we also set the font -%D related variables. - -\permanent\protected\def\MPfontsizehskip#1% - {\dontleavehmode - \begingroup - \definedfont[#1]% - \hskip\clf_currentdesignsize\scaledpoint\relax - \endgroup} - -\definefontsynonym[MetafunDefault][Regular*default] - -\startMPinitializations % scale is not yet ok - defaultfont:="\truefontname{MetafunDefault}"; - % defaultscale:=\the\bodyfontsize/10pt; % only when hard coded 10pt - % defaultscale:=1; -\stopMPinitializations - -%D A signal that we're in combined \CONTEXT||\METAFUN mode: - -\startMPextensions - string contextversion;contextversion:="\contextversion"; % expanded -\stopMPextensions - -%D \macros -%D {setupMPvariables} -%D -%D When we build collections of \METAPOST\ graphics, like background and buttons, -%D the need for passing settings arises. By (mis|)|using the local prefix that -%D belongs to \type {\framed}, we get a rather natural interface to backgrounds. To -%D prevent conflicts, we will use the \type {-} in \METAPOST\ specific variables, -%D like: -%D -%D \starttyping -%D \setupMPvariables[meta:button][size=20pt] -%D \stoptyping - -% \lineheight 2pt 2 \scratchcounter red 0.4 .5\bodyfontsize -% -% see cont-loc for test code - -%D Currently the inheritance of backgrounds does not work and we might drop it -%D anyway (too messy) - -\newbox\b_meta_variable_box - -\let \currentmpvariableclass \empty -\let \m_meta_current_variable \empty -\let \m_meta_current_variable_template\empty - -\installcorenamespace{graphicvariable} - -\def\meta_prepare_variable_default{\MPcolor{black}} % just to be sure we use a color but ... - -\permanent\tolerant\protected\def\setupMPvariables[#1]#*[#2]% - {\ifarguments - \or - \getrawparameters[\??graphicvariable:][#1]% - \else - \getrawparameters[\??graphicvariable#1:][#2]% - \fi} - -\permanent\tolerant\protected\def\presetMPvariable[#1]#*[#2=#3]% - {\ifcsname\??graphicvariable#1:#2\endcsname \else - \setvalue{\??graphicvariable#1:#2}{#3}% - \fi} - -\permanent\def\MPrawvar#1#2% no checking - {\begincsname\??graphicvariable#1:#2\endcsname} - -\permanent\def\MPvariable#1% todo: could be a framed chain - {\begincsname\??graphicvariable\currentmpvariableclass:#1\endcsname} - -\permanent\tolerant\protected\def\useMPvariables[#1]#*[#2]% - {\edef\currentmpvariableclass{#1}% - \meta_prepare_variables{#2}} - -\protected\def\meta_prepare_variables#1% - {\processcommalist[#1]\meta_prepare_variable} - -\protected\def\meta_prepare_variable#1% - {\edef\m_meta_current_variable_template - {\??graphicvariable\currentmpvariableclass:#1}% - \edef\m_meta_current_variable - {\begincsname\m_meta_current_variable_template\endcsname}% - \ifempty\m_meta_current_variable - \expandafter\meta_prepare_variable_nop - \else - \expandafter\meta_prepare_variable_yes - \fi} - -\protected\def\meta_prepare_instance_variables - {\expandafter\processcommalist\expandafter[\m_meta_instance_variables]\meta_prepare_instance_variable} - -\protected\def\meta_prepare_instance_variable#1% - {\edef\m_meta_current_variable_template - {\??graphicvariable\currentmpvariableclass:#1}% - \edef\m_meta_current_variable - {\ifcsname\m_meta_current_variable_template\endcsname - \lastnamedcs - \else - \begincsname\??graphicvariable\currentMPgraphicname:#1\endcsname - \fi}% - \ifempty\m_meta_current_variable - \expandafter\meta_prepare_variable_nop - \else - \expandafter\meta_prepare_variable_yes - \fi} - -\def\meta_prepare_variable_nop - {\expandafter\letcsname\m_meta_current_variable_template\endcsname\meta_prepare_variable_default} - -\def\meta_prepare_variable_color % we use the attribute so we dont' go through namedcolor (why not) - {\expandafter\edefcsname\m_meta_current_variable_template\endcsname{\MPcolor\m_meta_current_variable}} - -\def\meta_prepare_variable_number - {\expandafter\edefcsname\m_meta_current_variable_template\endcsname{\number\m_meta_current_variable}}% also accepts 0.number - -\def\meta_prepare_variable_dimension - {\expandafter\edefcsname\m_meta_current_variable_template\endcsname{\the\dimexpr\m_meta_current_variable}} - -\def\meta_prepare_variable_yes - {\ifchkdim\m_meta_current_variable\or - \meta_prepare_variable_dimension - \orelse\ifchknum\m_meta_current_variable\or - \meta_prepare_variable_number - \else - \doifelsecolor\m_meta_current_variable - \meta_prepare_variable_color - \meta_prepare_variable_dimension - \fi} - -\let\MPvar \MPvariable -\let\setMPvariables\setupMPvariables - -%D \macros -%D {startuniqueMPgraphic, uniqueMPgraphic} -%D -%D This macros is probably of most use to myself, since I like to use graphics that -%D adapt themselves. The next \METAPOST\ kind of graphic is both unique and reused -%D when possible. -%D -%D \starttyping -%D \defineoverlay[example][\uniqueMPgraphic{test}] -%D -%D \startuniqueMPgraphic {test} -%D draw OverlayBox ; -%D \stopuniqueMPgraphic -%D -%D \startuniqueMPgraphic {test} -%D draw OverlayBox ; -%D \stopuniqueMPgraphic -%D \stoptyping - -% todo: frozen or not? - -\def\overlaystamp % watch the \MPcolor, since colors can be redefined - {\the\d_overlay_width :% - \the\d_overlay_height :% - \the\d_overlay_depth :% - \the\d_overlay_offset :% - \the\d_overlay_linewidth:% - \MPcolor\overlaycolor :% % todo, expand once \m_overlaycolor - \MPcolor\overlaylinecolor} % todo, expand once \m_overlaylinecolor - -%D A better approach is to let additional variables play a role in determining the -%D uniqueness. In the next macro, the second, optional, argument is used to -%D guarantee the uniqueness, as well as prepare variables for passing them to -%D \METAPOST. -%D -%D \starttyping -%D \startuniqueMPgraphic{meta:hash}{gap,angle,...} -%D \stoptyping -%D -%D The calling macro also accepts a second argument. For convenient use in overlay -%D definitions, we use \type {{}} instead of \type {[]}. -%D -%D \starttyping -%D \uniqueMPgraphic{meta:hash}{gap=10pt,angle=30} -%D \stoptyping - -\newcount\c_meta_object_counter -\newbox \b_meta_graphic - -% hm, isn't this already done elsewhere? - -\protected\def\meta_obey_box_depth - {\setbox\b_meta_graphic\hpack\bgroup - \raise\MPlly\box\b_meta_graphic - \egroup} - -\protected\def\meta_ignore_box_depth - {\normalexpanded - {\meta_obey_box_depth % hence the \protected - \wd\b_meta_graphic\the\wd\b_meta_graphic - \ht\b_meta_graphic\the\ht\b_meta_graphic - \dp\b_meta_graphic\the\dp\b_meta_graphic}} - -\protected\def\meta_obey_box_origin - {\setbox\b_meta_graphic\hpack\bgroup - \kern\MPllx\raise\MPlly\box\b_meta_graphic - \egroup} - -\permanent\protected\def\obeyMPboxdepth {\let\meta_relocate_box\meta_obey_box_depth} -\permanent\protected\def\ignoreMPboxdepth{\let\meta_relocate_box\meta_ignore_box_depth} -\permanent\protected\def\obeyMPboxorigin {\let\meta_relocate_box\meta_obey_box_origin} -\permanent\protected\def\normalMPboxdepth{\let\meta_relocate_box\relax} - -\let\meta_relocate_box\relax - -\protected\def\meta_place_graphic % the converter also displaces so in fact we revert - {\meta_relocate_box - \box\b_meta_graphic} - -\protected\def\meta_reuse_box#1#2#3#4#5% space delimiting would save some tokens - {\MPllx#2\MPlly#3\MPurx#4\MPury#5% - \hpack{\forcecolorhack\getobject{MP}{#1}}} % else no proper color intent - -\protected\def\meta_use_box - {\setunreferencedobject{MP}} - -\def\meta_handle_unique_graphic#1#2#3% when there are too many, we can store data at the lua end, although, - {\begingroup % when there are that many they're probably not that unique anyway - \edef\currentmpvariableclass{#1}% - \extendMPoverlaystamp{#2}% incl prepare - \ifcsname\??mpgraphic\overlaystamp:#1\endcsname - \lastnamedcs - \else - \meta_enable_include % redundant - \global\advance\c_meta_object_counter\plusone - \meta_use_box{\number\c_meta_object_counter}\hpack{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox - \setxvalue{\??mpgraphic\overlaystamp:#1}{\meta_reuse_box{\number\c_meta_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}% - \csname\??mpgraphic\overlaystamp:#1\endcsname\empty - \fi - \endgroup} - -% todo: we partially expand - -\protected\def\startuniqueMPgraphic - {\dodoublegroupempty\meta_start_unique_graphic} - -\permanent\let\stopuniqueMPgraphic\relax - -\def\meta_start_unique_graphic#1% - {\normalexpanded{\meta_start_unique_graphic_indeed{#1}}} - -\permanent\protected\def\meta_start_unique_graphic_indeed#1#2#3\stopuniqueMPgraphic - {\setgvalue{\??mpgraphic#1}{\meta_handle_unique_graphic{#1}{#2}{#3}}} - -\permanent\tolerant\protected\def\uniqueMPgraphic#=#*#=% - {\meta_begin_graphic_group{#1}% - \setupMPvariables[#1][#2]% - \begincsname\??mpgraphic#1\endcsname\empty - \meta_end_graphic_group} - -\def\meta_handle_use_graphic#1#2#3% - {\begingroup - \edef\currentmpvariableclass{#1}% - \edef\m_meta_instance_variables{#2}% - \ifempty\m_meta_instance_variables \else - \meta_prepare_instance_variables - \fi - \meta_enable_include % redundant - \meta_process_graphic{#3}% - \endgroup} - -\permanent\protected\def\startuseMPgraphic % todo, modernize - {\dodoublegroupempty\meta_start_use_graphic} - -\permanent\let\stopuseMPgraphic\relax - -\def\meta_start_use_graphic#1% - {\normalexpanded{\meta_start_use_graphic_indeed{#1}}} - -\protected\def\meta_start_use_graphic_indeed#1#2#3\stopuseMPgraphic - {\setgvalue{\??mpgraphic#1}{\meta_handle_use_graphic{#1}{#2}{#3}}} - -\permanent\protected\def\startusableMPgraphic % redundant but handy % todo, modernize - {\dodoublegroupempty\meta_start_usable_graphic} - -\permanent\let\stopusableMPgraphic\relax - -\def\meta_start_usable_graphic#1% - {\normalexpanded{\meta_start_usable_graphic_indeed{#1}}} - -\protected\def\meta_start_usable_graphic_indeed#1#2#3\stopusableMPgraphic - {\setgvalue{\??mpgraphic#1}{\meta_handle_use_graphic{#1}{#2}{#3}}} - -\def\meta_handle_reusable_graphic#1#2#3% - {\begingroup - \edef\currentmpvariableclass{#1}% - \edef\m_meta_instance_variables{#2}% - \ifempty\m_meta_instance_variables \else - \meta_prepare_instance_variables - \fi - \meta_enable_include % redundant - \global\advance\c_meta_object_counter\plusone - \meta_use_box{\number\c_meta_object_counter}\hpack{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox - \setxvalue{\??mpgraphic#1}{\meta_reuse_box{\number\c_meta_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}% - \csname\??mpgraphic#1\endcsname\empty - \endgroup} - -\permanent\protected\def\startreusableMPgraphic % todo, modernize - {\dodoublegroupempty\meta_start_reusable_graphic} - -\permanent\let\stopreusableMPgraphic\relax - -\def\meta_start_reusable_graphic#1% - {\normalexpanded{\meta_start_reusable_graphic_indeed{#1}}} - -\protected\def\meta_start_reusable_graphic_indeed#1#2#3\stopreusableMPgraphic - {\setgvalue{\??mpgraphic#1}{\meta_handle_reusable_graphic{#1}{#2}{#3}}} - -\permanent\tolerant\protected\def\useMPgraphic#=#*#=% - {\meta_begin_graphic_group{#1}% - \ifcsname\??mpgraphic#1\endcsname - \edef\usedMPgraphicname{#1}% - \orelse\ifcsname\??mpgraphic\currentMPgraphicname\endcsname - \let\usedMPgraphicname\currentMPgraphicname - \else - \let\usedMPgraphicname\empty - \fi - \ifempty\usedMPgraphicname - % message - \else - \doifsomething{#2}{\setupMPvariables[\usedMPgraphicname][#2]}% - \csname\??mpgraphic\usedMPgraphicname\endcsname - \fi - \meta_end_graphic_group} - -\aliased\let\reuseMPgraphic \useMPgraphic % we can save a setup here if needed -\aliased\let\reusableMPgraphic\reuseMPgraphic % we can save a setup here if needed - -%D \macros -%D {startuniqueMPpagegraphic,uniqueMPpagegraphic} -%D -%D Experimental. - -\def\m_meta_page_prefix{\doifelseoddpage oe} - -\def\overlaypagestamp - {\m_meta_page_prefix :% - \the\d_overlay_width :% - \the\d_overlay_height :% - \the\d_overlay_depth :% - \the\d_overlay_offset :% - \the\d_overlay_linewidth:% - \MPcolor\overlaycolor :% - \MPcolor\overlaylinecolor} - -\permanent\tolerant\protected\def\startuniqueMPpagegraphic % todo the modern way - {\dodoublegroupempty\meta_start_unique_page_graphic} - -\permanent\let\stopuniqueMPpagegraphic\relax - -\def\meta_start_unique_page_graphic#1% - {\normalexpanded{\meta_start_unique_page_graphic_indeed{#1}}} - -\protected\def\meta_start_unique_page_graphic_indeed#1#2#3\stopuniqueMPpagegraphic % inefficient, double storage - {\setgvalue{\??mpgraphic o:#1}{\meta_handle_unique_graphic{o:#1}{#2}{#3}}% % but these also keep the state - \setgvalue{\??mpgraphic e:#1}{\meta_handle_unique_graphic{e:#1}{#2}{#3}}} % and meaning will be redefined - -\permanent\tolerant\protected\def\uniqueMPpagegraphic#=#=% - {\meta_begin_graphic_group{#1}% - \let\overlaystamp\overlaypagestamp - \setupMPvariables[\m_meta_page_prefix:#1][#2]% prefix is new here - \csname\??mpgraphic\m_meta_page_prefix:#1\endcsname\empty - \meta_end_graphic_group} - -%D One way of defining a stamp is: -%D -%D \starttyping -%D \def\extendMPoverlaystamp#1% -%D {\def\docommand##1% -%D {\edef\overlaystamp{\overlaystamp:\MPvariable{##1}}}% -%D \processcommalist[#1]\docommand} -%D \stoptyping -%D -%D Since we need to feed \METAPOST\ with expanded dimensions, we introduce a -%D dedicated expansion engine. We redefine \type {\extendMPoverlaystamp} to - -\permanent\protected\def\extendMPoverlaystamp#1% - {\processcommalist[#1]\meta_extend_overlay_stamp} - -\def\meta_extend_overlay_stamp#1% - {\meta_prepare_instance_variable{#1}% - \edef\overlaystamp{\overlaystamp:\MPvariable{#1}}} - -\permanent\protected\def\getMPdata {\clf_getMPdata} - \let\rawMPdata \clf_getMPdata % we need frozen at the lua end - -\permanent\protected\def\getMPstored{\clf_getMPstored} - \let\rawMPstored \clf_getMPstored % we need frozen at the lua end - -%D We need this trick because we need to make sure that the tex scanner sees -%D newlines and does not quit. Also, we do need to flush the buffer under a normal -%D catcode regime in order to expand embedded tex macros. As usual with buffers, -%D \type {#1} can be a list. - -\permanent\tolerant\protected\def\processMPbuffer[#1]% - {\meta_begin_graphic_group{#1}% - \meta_process_graphic{\clf_feedback{\currentMPgraphicname}}% - \meta_end_graphic_group} - -\permanent\tolerant\protected\def\runMPbuffer[#1]% - {\startnointerference\meta_process_buffer[#1]\stopnointerference} - -%D \macros -%D {startMPenvironment, resetMPenvironment} -%D -%D In order to synchronize the main \TEX\ run and the runs local to \METAPOST, -%D environments can be passed. - -\protected\def\startMPenvironment - {\begingroup - \catcode\endoflineasciicode\ignorecatcode - \meta_start_environment} - -\tolerant\def\meta_start_environment[#1]#:#2\stopMPenvironment - {\endgroup - \edef\m_meta_option{#1} - \ifx\m_meta_option\s!reset - \resetMPenvironment % reset mp toks - \orelse\ifx\m_meta_option\v!global - #2% % use in main doc too - \orelse\ifx\m_meta_option\!!plustoken - #2% % use in main doc too - \fi - \clf_mptexset{\detokenize{#2}}} - -\permanent\let\stopMPenvironment\relax - -\protected\def\resetMPenvironment - {\clf_mptexreset} - -\protected\def\useMPenvironmentbuffer[#1]% - {\clf_mptexsetfrombuffer{#1}} - -%D This command takes \type {[reset]} as optional argument. -%D -%D \starttyping -%D \startMPenvironment -%D \setupbodyfont[pos,14.4pt] -%D \stopMPenvironment -%D -%D \startMPcode -%D draw btex \sl Hans Hagen etex scaled 5 ; -%D \stopMPcode -%D \stoptyping -%D -%D The most simple case: - -\permanent\tolerant\protected\def\startMPcode#=#:#2\stopMPcode - {\begingroup - \edef\currentMPinstance{#1}% - \ifempty\currentMPinstance - \let\currentMPinstance\defaultMPinstance - \fi - \let\currentMPgraphicname\empty - \edef\currentMPformat{\MPinstanceparameter\s!format}% - \meta_enable_include - \meta_process_graphic{#2}% - \endgroup} - -\permanent\let\stopMPcode\relax - -%D This one is not optimized because it's only used for small snippets, if it -%D is used at all. - -\permanent\tolerant\protected\def\MPcode#=#:#*#=% - {\ifparameter#1\or - \meta_begin_graphic_group{#1}% - \meta_enable_include - \meta_process_graphic{#2}% - \meta_end_graphic_group - \else - \let\currentMPinstance\defaultMPinstance - \meta_enable_include - \meta_process_graphic{#1}% - \fi} - -% a bit nasty (also needed for compatibility: - -% \startMPrun input mp-www.mp ; \stopMPrun -% \externalfigure[mprun.3][width=10cm,height=8cm] - -% \startMPrun{mprun} input mp-www.mp ; \stopMPrun % instance -% \externalfigure[mprun.4][width=10cm,height=8cm] - -\let\MPruninstance\defaultMPinstance - -\permanent\protected\def\useMPrun#1#2% name n - {\begingroup - \def\MPaskedfigure{#2}% - \normalexpanded{\useMPgraphic{\iftok{#1}\emptytoks mprun\else#1\fi}}% - \endgroup} - -\permanent\tolerant\protected\def\startMPrun#=#:#2\stopMPrun - {\normalexpanded{\startuseMPgraphic{\iftok{#1}\emptytoks mprun\else#1\fi}}#2\stopuseMPgraphic} - -\permanent\let\stopMPrun\relax - -%D The \type {\resetMPenvironment} is a quick way to erase -%D the token list. -%D -%D You should be aware of independencies. For instance, if you use a font -%D in a graphic that is not used in the main document, you need to load the -%D typescript at the outer level (either directly or by using the global -%D option). -%D -%D \starttyping -%D \usetypescript[palatino][texnansi] -%D -%D \startMPenvironment -%D \usetypescript[palatino][texnansi] -%D \enableregime[utf] -%D \setupbodyfont[palatino] -%D \stopMPenvironment -%D -%D \startMPpage -%D draw btex aap‒noot coördinatie – één etex ; -%D \stopMPpage -%D \stoptyping - -%D Loading specific \METAPOST\ related definitions is -%D accomplished by: - -\permanent\protected\def\useMPlibrary[#1]{\clf_useMPlibrary{#1}} - -%D \macros -%D {setMPtext, MPtext, MPstring, MPbetex} -%D -%D To be documented: -%D -%D \starttyping -%D \setMPtext{identifier}{text} -%D -%D \MPtext {identifier} -%D \MPstring{identifier} -%D \MPbetex {identifier} -%D \stoptyping - -\installcorenamespace{mptext} - -\permanent\protected\def\setMPtext#1#2{\dodoglobal\edefcsname\??mptext#1\endcsname{\detokenize{#2}}} -\permanent \def\MPtext #1{\begincsname\??mptext#1\endcsname\empty} -\permanent \def\MPstring #1{"\begincsname\??mptext#1\endcsname\empty"} -\permanent \def\MPbetex #1{btex \begincsname\??mptext#1\endcsname\space etex} - -%D In order to communicate conveniently with the \TEX\ engine, we introduce some -%D typesetting variables. - -% \setupcolors[state=stop,conversion=never] % quite tricky ... type mismatch - -% \startMPextensions -% color OverlayColor,OverlayLineColor; -% \stopMPextensions - -\startMPinitializations - CurrentLayout:="\currentlayout"; -\stopMPinitializations - -% \startMPinitializations -% OverlayWidth:=\overlaywidth; -% OverlayHeight:=\overlayheight; -% OverlayDepth:=\overlaydepth; -% OverlayLineWidth:=\overlaylinewidth; -% OverlayOffset:=\overlayoffset; -% \stopMPinitializations - -%D A dirty trick, ** in colo-ini.lua (mpcolor). We cannot use a vardef, because -%D that fails with spot colors. - -\startMPinitializations - def OverlayLineColor=\ifempty\overlaylinecolor black \else\MPcolor{\overlaylinecolor} \fi enddef; - def OverlayColor =\ifempty\overlaycolor black \else\MPcolor{\overlaycolor} \fi enddef; -\stopMPinitializations - -% \newcount\c_overlay_colormodel -% \newcount\c_overlay_color -% \newcount\c_overlay_transparency -% \newcount\c_overlay_linecolor -% \newcount\c_overlay_linetransparency - -% \appendtoks -% \c_overlay_colormodel \c_attr_colormodel -% \c_overlay_color \colo_helpers_inherited_current_ca\overlaycolor -% \c_overlay_transparency \colo_helpers_inherited_current_ta\overlaycolor -% \c_overlay_linecolor \colo_helpers_inherited_current_ca\overlaylinecolor -% \c_overlay_linetransparency\colo_helpers_inherited_current_ta\overlaylinecolor -% \to \everyMPgraphic - -% \startMPinitializations -% BaseLineSkip:=\the\baselineskip; -% LineHeight:=\the\baselineskip; -% BodyFontSize:=\the\bodyfontsize; -% % -% TopSkip:=\the\topskip; -% StrutHeight:=\strutheight; -% StrutDepth:=\strutdepth; -% % -% CurrentWidth:=\the\hsize; -% CurrentHeight:=\the\vsize; -% HSize:=\the\hsize ; -% VSize:=\the\vsize ; -% % -% EmWidth:=\the\emwidth; -% ExHeight:=\the\exheight; -% \stopMPinitializations - -\appendtoks - \disablediscretionaries - %\disablecompoundcharacters -\to \everyMPgraphic - -% \appendtoks % before color, inefficient, replace by low level copy -% \doregistercolor{currentcolor}\currentcolorname -% \to \everyMPgraphic - -% \color[green]{abc \startMPcode -% fill fullcircle scaled 3cm withoutcolor; -% fill fullcircle scaled 2cm withcolor \MPcolor{currentcolor} ; -% fill fullcircle scaled 1cm withcolor \MPcolor{red} ; -% \stopMPcode def} - -\appendtoks - \baselineskip1\baselineskip - \lineheight 1\lineheight - \topskip 1\topskip -\to \everyMPgraphic - -\appendtoks - \enforced\let\#\letterhash - \enforced\let\_\letterunderscore - \enforced\let\&\letterampersand - \enforced\let\{\letteropenbrace - \enforced\let\}\letterclosebrace -\to \everyMPgraphic - -%D \macros -%D {PDFMPformoffset} -%D -%D In \PDF, forms are clipped and therefore we have to take precautions to get this -%D right. Since this is related to objects, we use the same offset as used there. - -\def\PDFMPformoffset{\objectoffset} - -\newtoks\everyinsertMPfile - -\startMPextensions - def initialize_form_numbers = - do_initialize_numbers; - enddef; -\stopMPextensions - -\startMPextensions - vardef ForegroundBox = - unitsquare xysized(HSize,VSize) - enddef ; -\stopMPextensions - -% \startMPextensions -% PageFraction := 1 ; -% \stopMPextensions - -% \startMPinitializations -% PageFraction := if \lastpage>1: (\realfolio-1)/(\lastpage-1) else: 1 fi ; -% \stopMPinitializations - -\startMPdefinitions {metapost} - if unknown context_bare : input mp-bare.mpiv ; fi ; -\stopMPdefinitions -\startMPdefinitions {binarypost} - if unknown context_bare : input mp-bare.mpiv ; fi ; -\stopMPdefinitions -\startMPdefinitions {decimalpost} - if unknown context_bare : input mp-bare.mpiv ; fi ; -\stopMPdefinitions -\startMPdefinitions {doublepost} - if unknown context_bare : input mp-bare.mpiv ; fi ; -\stopMPdefinitions - -% \startMPdefinitions {nofun} -% if unknown context_bare : input mp-bare.mpiv ; fi ; -% \stopMPdefinitions - -%D And some more. These are not really needed since we don't use the normal figure -%D inclusion macros any longer. - -\appendtoks - \externalfigurepostprocessors\emptytoks % safeguard -\to \everyinsertMPfile - -%D We also take care of disabling fancy figure features, that can terribly interfere -%D when dealing with symbols, background graphics and running (postponed) graphics. -%D You won't believe me if I tell you what funny side effects can occur. One took me -%D over a day to uncover when processing the screen version of the \METAFUN\ manual. - -\permanent\def\doifelseMPgraphic#1% - {\ifcsname\??mpgraphic #1\endcsname\expandafter\firstoftwoarguments \orelse - \ifcsname\??mpgraphic o:#1\endcsname\expandafter\firstoftwoarguments \orelse - \ifcsname\??mpgraphic e:#1\endcsname\expandafter\firstoftwoarguments \else - \expandafter\secondoftwoarguments\fi} - -\let\doifMPgraphicelse\doifelseMPgraphic - -%D New: - -\definelayerpreset % no dx,dy - else nasty non-mp placement - [mp] - [\c!y=-\MPury, - \c!x=\MPllx, - \c!method=\v!fit] - -\definelayer - [mp] - [\c!preset=mp] - -%D Usage: -%D -%D \starttyping -%D \defineviewerlayer[one][state=start] -%D \defineviewerlayer[two][state=stop] -%D -%D \startuseMPgraphic{step-1} -%D fill fullcircle scaled 10cm withcolor red ; -%D \stopuseMPgraphic -%D -%D \startuseMPgraphic{step-2} -%D fill fullcircle scaled 5cm withcolor green ; -%D \stopuseMPgraphic -%D -%D \setlayer[mp]{\viewerlayer[one]{\useMPgraphic{step-1}}} -%D \setlayer[mp]{\viewerlayer[two]{\useMPgraphic{step-2}}} -%D -%D \ruledhbox{\flushlayer[mp]} -%D \stoptyping -%D -%D Reusing graphics is also possible (now): -%D -%D \starttyping -%D \startreusableMPgraphic{axis} -%D tickstep := 1cm ; ticklength := 2mm ; -%D drawticks unitsquare xscaled 4cm yscaled 3cm shifted (-1cm,-1cm) ; -%D tickstep := tickstep/2 ; ticklength := ticklength/2 ; -%D drawticks unitsquare xscaled 4cm yscaled 3cm shifted (-1cm,-1cm) ; -%D \stopreusableMPgraphic -%D -%D \startuseMPgraphic{demo} -%D drawpoint "1cm,1.5cm" ; -%D \stopuseMPgraphic -%D -%D \definelayer[mp][preset=mp] -%D \setlayer[mp]{\reuseMPgraphic{axis}} -%D \setlayer[mp]{\useMPgraphic{demo}} -%D \ruledhbox{\flushlayer[mp]} -%D \stoptyping - -%D \macros -%D {startstaticMPfigure,useMPstaticfigure} -%D -%D Static figures are processed only when there has been something changed. Here is -%D Aditya Mahajan's testcase: -%D -%D \startbuffer -%D \startstaticMPfigure{circle} -%D fill fullcircle scaled 1cm withcolor blue; -%D \stopstaticMPfigure -%D -%D \startstaticMPfigure{axis} -%D drawarrow (0,0)--(2cm,0) ; -%D drawarrow (0,0)--(0,2cm) ; -%D label.llft(textext("(0,0)") ,origin) ; -%D \stopstaticMPfigure -%D \stopbuffer -%D -%D \typebuffer \getbuffer - -\permanent\protected\def\startstaticMPfigure#1#2\stopstaticMPfigure - {\startreusableMPgraphic{\??mpstaticgraphic#1}#2\stopreusableMPgraphic} - -\permanent\tolerant\protected\def\startstaticMPgraphic#=#:#=#:#3\stopstaticMPgraphic - {\startreusableMPgraphic{\??mpstaticgraphic#1}{#2}#3\stopreusableMPgraphic} - -\permanent\let\stopstaticMPfigure \relax -\permanent\let\stopstaticMPgraphic\relax - -\permanent\tolerant\protected\def\usestaticMPfigure[#1]#*[#2]% - {\ifarguments\or - \reuseMPgraphic{\??mpstaticgraphic#1}% - \else - \scale[#2]{\reuseMPgraphic{\??mpstaticgraphic#1}}% - \fi} - -%D Goody for preventing overflows: - -%frozen\def\MPdivten[#1]{\withoutpt\the\dimexpr#1pt/10\relax} -\permanent\def\MPdivten[#1]{\thewithoutunit\dimexpr#1pt/10\relax} - -%D There is no way to distinguish the black color that you get when you issue a -%D \type {draw} without color specification from a color that has an explicit black -%D specification unless you set the variable \type {defaultcolormodel} to 1. -%D Hoewever, in that case you cannot distinguish that draw from one with a \type -%D {withoutcolor} specification. This means that we have to provide multiple -%D variants of inheritance. -%D -%D In any case we need to tell the converter what the inherited color is to start -%D with. Case~3 is kind of unpredictable as it closely relates to the order in which -%D paths are flushed. If you want to inherit automatically from the surrounding, you -%D can best stick to variant 1. Variant 0 (an isolated graphic) is the default. -%D -%D \startbuffer -%D \startuseMPgraphic{test} -%D drawoptions(withpen pencircle scaled 1pt) ; -%D def shift_cp = currentpicture := currentpicture shifted (-15pt,0) ; enddef ; -%D draw fullcircle scaled 10pt withoutcolor ; shift_cp ; -%D fill fullcircle scaled 10pt ; shift_cp ; -%D draw fullcircle scaled 10pt withoutcolor ; shift_cp ; -%D fill fullcircle scaled 10pt withcolor red ; shift_cp ; -%D draw fullcircle scaled 10pt withoutcolor ; shift_cp ; -%D fill fullcircle scaled 10pt ; shift_cp ; -%D \stopuseMPgraphic -%D -%D \starttabulate -%D \NC 0\quad \NC \MPcolormethod0 \green XX\quad \useMPgraphic{test}\quad XX \NC \NR -%D \NC 1\quad \NC \MPcolormethod1 \green XX\quad \useMPgraphic{test}\quad XX \NC \NR -%D \NC 2\quad \NC \MPcolormethod2 \green XX\quad \useMPgraphic{test}\quad XX \NC \NR -%D \NC 3\quad \NC \MPcolormethod3 \green XX\quad \useMPgraphic{test}\quad XX \NC \NR -%D \stoptabulate -%D \stopbuffer -%D -%D \typebuffer \getbuffer - -\newconstant\MPcolormethod - -\appendtoks - \clf_mpsetoutercolor - \MPcolormethod\space - \c_attr_colormodel\space - \c_attr_color\space - \dogetattribute{transparency}\relax -\to \everyMPgraphic - -% \startMPinitializations -% defaultcolormodel := \ifcase\MPcolormethod1\or1\or3\else3\fi; -% \stopMPinitializations - -%D macros -%D {mprunvar,mpruntab,mprunset} -%D -%D \starttyping -%D \startMPcode -%D passvariable("version","1.0") ; -%D passvariable("number",123) ; -%D passvariable("string","whatever") ; -%D passvariable("point",(1.5,2.8)) ; -%D passvariable("triplet",(1/1,1/2,1/3)) ; -%D passvariable("quad",(1.1,2.2,3.3,4.4)) ; -%D passvariable("boolean",false) ; -%D passvariable("path",fullcircle scaled 1cm) ; -%D draw fullcircle scaled 20pt ; -%D \stopMPcode -%D -%D \ctxlua{inspect(metapost.variables)} -%D -%D \MPrunvar{version} \MPruntab{quad}{3} (\MPrunset{triplet}{,}) -%D -%D $(x,y) = (\MPruntab{point}{1},\MPruntab{point}{2})$ -%D $(x,y) = (\MPrunset{point}{,})$ -%D \stoptyping - -\permanent\def\MPrunvar #1{\clf_mprunvar{#1}} \let\mprunvar\MPrunvar -\permanent\def\MPruntab#1#2{\clf_mpruntab{#1}#2\relax} \let\mpruntab\MPruntab % #2 is number -\permanent\def\MPrunset#1#2{\clf_mprunset{#1}{#2}} \let\mprunset\MPrunset - -\prependtoks \clf_mppushvariables \to \everybeforepagebody -\appendtoks \clf_mppopvariables \to \everyafterpagebody - -\let\MPpushvariables\clf_mppushvariables -\let\MPpopvariables \clf_mppopvariables - -%D We also provide an outputless run: - -\permanent\tolerant\protected\def\startMPcalculation#=#:#2\stopMPcalculation - {\begingroup - \setbox\nextbox\hpack\bgroup - \edef\currentMPinstance{#1}% - \ifempty\currentMPinstance - \let\currentMPinstance\defaultMPinstance - \fi - \let\currentMPgraphicname\empty - \edef\currentMPformat{\MPinstanceparameter\s!format}% - \meta_enable_include - \meta_process_graphic{#2;draw origin}% - \egroup - \endgroup} - -\permanent\let\stopMPcalculation\relax - -%D \macros -%D {setupMPgraphics} -%D -%D Here is a generic setup command: - -\installcorenamespace{MPgraphics} - -\installsetuponlycommandhandler \??MPgraphics {MPgraphics} - -%D Here we hook in the outer color. When \type {color} is set to \type {global} we -%D get the outer color automatically. If you change this setting, you should do it -%D grouped in order not to make other graphics behave in unexpected ways. - -\appendtoks - \doifelse{\directMPgraphicsparameter\c!color}\v!global{\MPcolormethod\plusone}{\MPcolormethod\zerocount}% -\to \everysetupMPgraphics - -\setupMPgraphics - [\c!color=\v!local] - -%D This can save some runtime: rename the mpy file from a first run (when stable) to -%D another file and reuse it. One can also use the original filename, but a copy is -%D often better. -%D -%D \starttyping -%D \setupMPgraphics -%D [mpy=\jobname.mpy] -%D \stoptyping - -\appendtoks - \edef\p_mpy{\directMPgraphicsparameter{mpy}}% - \ifempty\p_mpy \else - \let\MPdataMPYfile\p_mpy - \clf_registermpyfile{\p_mpy}% - \fi -\to \everysetupMPgraphics - -%D Some more helpers (see \type {meta-grd.mkiv} for an example of usage): - -\permanent\def\MPdpar#1#2{\the\dimexpr#1#2\relax\empty} -\permanent\def\MPnpar#1#2{\the\numexpr#1#2\relax\empty} -\permanent\def\MPspar#1#2{"#1#2"} - -%D Done. - -\protect \endinput |