%D \module %D [ file=meta-tex, %D version=2006.06.07, %D title=\CONTEXT\ Support Macros, %D subtitle=\METAPOST\ fast text insertion, %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. \registerctxluafile{meta-tex}{} \unprotect %D Ok, we support this in MkIV because Mojca kept the pressure on. It looks a bit %D like a hack. But in fact this method is obsolete and eventually might go away. \installcorenamespace{graphictextext} \installcorenamespace{graphictexdepth} \installcorenamespace{graphictexarguments} \permanent\protected\def\startTeXtexts#1\stopTeXtexts {#1} \permanent\protected\lettonothing\stopTeXtexts \permanent\tolerant\protected\def\TeXtext[#1]#:#2#3% contrary to mkii we don't process yet but we do expand {\xdefcsname\??graphictextext#2\endcsname{\meta_textext_indeed{#1}{#3}}} \protected\def\meta_textext_indeed#1#2% {\begingroup \setbox\nextbox\hbox{#2}% \ifcsname\??graphictexdepth#1\endcsname \lastnamedcs \else \syst_boxes_lower_nextbox_dp \fi \box\nextbox \endgroup} \permanent\def\getTeXtext#1% {\begincsname\??graphictextext#1\endcsname} \letcsname\??graphictexdepth d\endcsname\syst_boxes_lower_nextbox_dp \letcsname\??graphictexdepth \s!depth\endcsname\syst_boxes_lower_nextbox_dp \letcsname\??graphictexdepth n\endcsname\donothing \letcsname\??graphictexdepth\s!nodepth\endcsname\donothing % old hackery, slightly modernized \permanent\protected\def\definetextext[#1]% {\tolerant\defcsname\??graphictexarguments#1\endcsname} \permanent\tolerant\def\sometxt[#1]#*[#2]% {\ifarguments \expandafter\meta_some_txt_a \or \expandafter\meta_some_txt_b \or \expandafter\meta_some_txt_c \or \fi{#1}{#2}} \def\meta_some_txt_a#1#2#3{textext.drt("\clf_metapostescaped{#3}")} \def\meta_some_txt_b#1#2#3{textext.drt("\mpsometxt{#1}{\clf_metapostescaped{#3}}")} \def\meta_some_txt_c#1#2#3{textext.drt("\mpsometxt{#1}[#2]{\clf_metapostescaped{#3}}")} \permanent\protected\def\mpsometxt#1% {\begincsname\??graphictexarguments#1\endcsname} % \definetextext[framed]{\framed} % % \startMPcode % draw \sometxt[framed]{black} rotated 45 ; % \stopMPcode % % But Mojca wanted more! Two arguments. % % \definetextext[framed]{\framed} % % \startMPcode % draw \sometxt{This is for} rotated 45 ; % draw \sometxt[framed][foregroundstyle=bold]{Mojca's}; % draw \sometxt[framed]{eyes only!} rotated -45 ; % \stopMPcode % % \definetextext[framed][#1]#2{\framed[width=4cm]{\switchtobodyfont[#1]#2}} % \definetextext[simple]{\framed[width=8cm]} % % \starttext % % \startMPcode % draw \sometxt{This is for} rotated 45 ; % draw \sometxt[framed][ss,16pt] {Mojca's}; % draw \sometxt[framed]{eyes only!} rotated -45 ; % draw \sometxt[simple]{Quotes "indeed" work!} rotated 180 ; % \stopMPcode % % \stoptext % % a lua one: % % \protected\def\definetextext[#1]#2{\setvalue{@@st@@#1}{#2}} % % \def\sometxt #1#{\dosometxt{#1}} % grab optional [args] % \def\dosometxt #1#2{\ctxlua{metapost.sometxt(\!!bs#1\!!es,\!!bs#2\!!es)}} % % \def\sometxta #1{textext.drt("#1")} % \def\sometxtb #1#2{textext.drt("\getvalue{@@st@@#1}{#2}")} % \def\sometxtc #1#2#3{textext.drt("\getvalue{@@st@@#1}{\switchtobodyfont[#2]#3}")} % Best use the mp macro instead since it provides positioning. % % \startuseMPgraphic{testgraphic} % draw \sometxt{\ruledhbox{\strut hans hagen}} scaled 3; % % draw textext.drt("\ruledhbox{\strut hans hagen}") scaled 3; % % draw textext.dlft("\ruledhbox{\strut hans hagen}") scaled 3; % % draw textext.lft("\ruledhbox{\strut hans hagen}") scaled 3; % draw llcorner currentpicture -- urcorner currentpicture withcolor yellow; % draw lrcorner currentpicture -- ulcorner currentpicture withcolor yellow; % draw boundingbox currentpicture withcolor blue ; % draw origin withcolor red withpen pencircle scaled 1pt; % \stopuseMPgraphic % % {\showstruts\useMPgraphic{testgraphic}} \permanent\protected\def\MPexponent #1#2{\mathematics{#1\times10^{#2}}} \permanent\protected\def\MPformatted #1#2{\clf_metapostformatted{#1}{#2}} \permanent\protected\def\MPgraphformat#1#2{\clf_metapostgraphformat{#1}{#2}} %D Some new fun (but exprimental for a while): \permanent\protected\def\MPLIBoutlinetext#1#2#3% index kind text {\begingroup \setbox\scratchbox\hbox{#3}% \clf_MPLIBconvertoutlinetext\numexpr#1\relax{#2}\scratchbox \endgroup} %D For now here. We don't do the whole thing, because then one can as %D well just export to pdf. We assume consistent integration. \definefontsynonym[serif-normal-normal] [\s!Serif] \definefontsynonym[serif-normal-italic] [\s!SerifItalic] \definefontsynonym[serif-normal-oblique][\s!SerifSlanted] \definefontsynonym[serif-bold-normal] [\s!SerifBold] \definefontsynonym[serif-bold-italic] [\s!SerifBoldItalic] \definefontsynonym[serif-bold-oblique] [\s!SerifBoldSlanted] \definefontsynonym[sans-normal-normal] [\s!Sans] \definefontsynonym[sans-normal-italic] [\s!SansItalic] \definefontsynonym[sans-normal-oblique] [\s!SansSlanted] \definefontsynonym[sans-bold-normal] [\s!SansBold] \definefontsynonym[sans-bold-italic] [\s!SansBoldItalic] \definefontsynonym[sans-bold-oblique] [\s!SansBoldSlanted] \definefontsynonym[sansserif-normal-normal] [\s!Sans] \definefontsynonym[sansserif-normal-italic] [\s!SansItalic] \definefontsynonym[sansserif-normal-oblique] [\s!SansSlanted] \definefontsynonym[sansserif-bold-normal] [\s!SansBold] \definefontsynonym[sansserif-bold-italic] [\s!SansBoldItalic] \definefontsynonym[sansserif-bold-oblique] [\s!SansBoldSlanted] \definefontsynonym[mono-normal-normal] [\s!Mono] \definefontsynonym[mono-normal-italic] [\s!MonoItalic] \definefontsynonym[mono-normal-oblique] [\s!MonoSlanted] \definefontsynonym[mono-bold-normal] [\s!MonoBold] \definefontsynonym[mono-bold-italic] [\s!MonoBoldItalic] \definefontsynonym[mono-bold-oblique] [\s!MonoBoldSlanted] \installcorenamespace {svgfamily} \defcsname\??svgfamily \endcsname{serif} \defcsname\??svgfamily serif\endcsname{serif} \defcsname\??svgfamily sans\endcsname{sans} \defcsname\??svgfamily mono\endcsname{mono} \definelayer[svgmps][\c!method=\v!fit] \permanent\protected\def\svgembeddedfigure#1% {\clf_embedimagefromstore {svg} #1 true\relax} % todo: use the independent color and transparency mechanism \permanent\protected\def\svghashed#1% {\clf_svghashed#1\relax} \permanent\protected\def\svg_normal_pcode#1#2#3% {\glyph xoffset #1\onebasepoint yoffset #2\onebasepoint #3\relax} \permanent\protected\def\svg_normal_pchar#1#2#3% {\glyph xoffset #1\onebasepoint yoffset #2\onebasepoint `#3\relax} \permanent\protected\def\svg_normal_pspace#1#2% {\space} \permanent\protected\def\svg_normal_space {\space} \permanent\protected\def\svg_normal_code#1% {\char#1\relax} \permanent\protected\def\svg_normal_char#1% {#1\relax} \permanent\protected\def\svg_normal_start {\resetlayer[svgmps]% \setlayer[svgmps]\bgroup} \permanent\protected\def\svg_normal_stop {\egroup \flushlayer[svgmps]} \permanent\protected\def\svg_normal_color_c#1#2#3%#4% % color {\colored[r=#1,g=#2,b=#3]}%{#4}} \permanent\protected\def\svg_normal_color_o#1%#2% % opace {\colored[a=1,t=#1]}%{#2}} \permanent\protected\def\svg_normal_color_b#1#2#3#4%#5% % both {\colored[r=#1,g=#2,b=#3,a=1,t=#4]}% {#5}} \permanent\protected\def\svg_normal_set#1#2#3% {\setlayer[svgmps]{\hbox xoffset #1\onebasepoint yoffset #2\onebasepoint to 10sp{#3}}} \permanent\protected\def\svg_normal_font#1#2#3%#4% {\hbox\bgroup \iftok{#2}\emptytoks\else \edef\p_font{\ifcsname\??svgfamily#1\endcsname\lastnamedcs\else#1\fi-#2-#3}% \ifcsname svg:\p_font\endcsname \lastnamedcs \else \predefinefont[svg:\p_font][\s!spec:\p_font*\s!default\space @ 10bp]% \csname svg:\p_font\endcsname \fi \fi \let\next} % #4% % \egroup} \permanent\protected\def\svg_normal_size#1%#2% {\hbox\bgroup \glyphscale\numericscale#1\relax % we need a period ! \let\next} % #2% % \egroup} \permanent\protected\def\svg_traced_pcode#1#2#3% {\writestatus{SVG TEXT}{....[poscode #1 #2 \Uchar #3]}% \svg_normal_pcode{#1}{#2}{#3}} \permanent\protected\def\svg_traced_pchar#1#2#3% {\writestatus{SVG TEXT}{....[poschar #1 #2 #3]}% \svg_normal_pchar{#1}{#2}{#3}} \permanent\protected\def\svg_traced_pspace#1#2% {\writestatus{SVG TEXT}{....[posspace #1 #2]}% \svg_normal_pspace{#1}{#2}} \permanent\protected\def\svg_traced_code#1% {\writestatus{SVG TEXT}{....[char \Uchar #1]}% \svg_normal_code{#1}} \permanent\protected\def\svg_traced_char#1% {\writestatus{SVG TEXT}{....[char #1]}% \svg_normal_char{#1}} \permanent\protected\def\svg_traced_space {\writestatus{SVG TEXT}{....[space]}% \svg_normal_space} \permanent\protected\def\svg_traced_start {\writestatus{SVG TEXT}{[start layer]}% \svg_normal_start} \permanent\protected\def\svg_traced_stop {\svg_normal_stop \writestatus{SVG TEXT}{[stop layer]}} \permanent\protected\def\svg_traced_color_c#1#2#3#4% {\writestatus{SVG TEXT}{..[start color #1 #2 #3]}% \svg_normal_color_c{#1}{#2}{#3}{#4}% \writestatus{SVG TEXT}{..[stop color]}} \permanent\protected\def\svg_traced_color_o#1#2% {\writestatus{SVG TEXT}{..[start opace #1]}% \svg_normal_color_o{#1}{#2}% \writestatus{SVG TEXT}{..[stop opace]}} \permanent\protected\def\svg_traced_color_b#1#2#3#4#5% {\writestatus{SVG TEXT}{..[start color #1 #2 #3 opace #4]}% \svg_normal_color_b{#1}{#2}{#3}{#4}{#5}% \writestatus{SVG TEXT}{..[stop color opace]}} \permanent\protected\def\svg_traced_set#1#2#3% {\writestatus{SVG TEXT}{...[start set layer #1 #2]}% \svg_normal_set{#1}{#2}{#3}% \writestatus{SVG TEXT}{...[stop set setlayer]}} \permanent\protected\def\svg_traced_font#1#2#3#4% {\writestatus{SVG TEXT}{.[start font #1 #2 #3]}% \svg_normal_font{#1}{#2}{#3}{#4}% \writestatus{SVG TEXT}{.[stop font]}} \permanent\protected\def\svg_traced_size#1#2% {\writestatus{SVG TEXT}{.[start size #1]}% \svg_normal_size{#1}{#2}% \writestatus{SVG TEXT}{.[stop size]}} \permanent\protected\def\svg_normal_text {\enforced\let\svgpcode \svg_normal_pcode \enforced\let\svgpchar \svg_normal_pchar \enforced\let\svgpspace\svg_normal_pspace \enforced\let\svgcode \svg_normal_code \enforced\let\svgchar \svg_normal_char \enforced\let\svgspace \svg_normal_space \enforced\let\svgstart \svg_normal_start \enforced\let\svgstop \svg_normal_stop \enforced\let\svgcolorc\svg_normal_color_c \enforced\let\svgcoloro\svg_normal_color_o \enforced\let\svgcolorb\svg_normal_color_b \enforced\let\svgset \svg_normal_set \enforced\let\svgfont \svg_normal_font \enforced\let\svgsize \svg_normal_size} \permanent\protected\def\svg_traced_text {\enforced\let\svgpcode \svg_traced_pcode \enforced\let\svgpchar \svg_traced_pchar \enforced\let\svgpspace\svg_traced_pspace \enforced\let\svgcode \svg_traced_code \enforced\let\svgchar \svg_traced_char \enforced\let\svgspace \svg_traced_space \enforced\let\svgstart \svg_traced_start \enforced\let\svgstop \svg_traced_stop \enforced\let\svgcolorc\svg_traced_color_c \enforced\let\svgcoloro\svg_traced_color_o \enforced\let\svgcolorb\svg_traced_color_b \enforced\let\svgset \svg_traced_set \enforced\let\svgfont \svg_traced_font \enforced\let\svgsize \svg_traced_size} \installtextracker {svg.text} {\svg_traced_text} {\svg_normal_text} \svg_normal_text \protect \endinput