meta-tex.mkxl /size: 11 Kb    last modification: 2024-01-16 09:02
1%D \module
2%D   [       file=meta-tex,
3%D        version=2006.06.07,
4%D          title=\CONTEXT\ Support Macros,
5%D       subtitle=\METAPOST\ fast text insertion,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\registerctxluafile{meta-tex}{}
15
16\unprotect
17
18%D Ok, we support this in MkIV because Mojca kept the pressure on. It looks a bit
19%D like a hack. But in fact this method is obsolete and eventually might go away.
20
21\installcorenamespace{graphictextext}
22\installcorenamespace{graphictexdepth}
23\installcorenamespace{graphictexarguments}
24
25\permanent\protected\def\startTeXtexts#1\stopTeXtexts
26  {#1}
27
28\permanent\protected\lettonothing\stopTeXtexts
29
30\permanent\tolerant\protected\def\TeXtext[#1]#:#2#3% contrary to mkii we don't process yet but we do expand
31  {\xdefcsname\??graphictextext#2\endcsname{\meta_textext_indeed{#1}{#3}}}
32
33\protected\def\meta_textext_indeed#1#2%
34  {\begingroup
35   \setbox\nextbox\hbox{#2}%
36   \ifcsname\??graphictexdepth#1\endcsname
37     \lastnamedcs
38   \else
39     \syst_boxes_lower_nextbox_dp
40   \fi
41   \box\nextbox
42   \endgroup}
43
44\permanent\def\getTeXtext#1%
45  {\begincsname\??graphictextext#1\endcsname}
46
47\letcsname\??graphictexdepth         d\endcsname\syst_boxes_lower_nextbox_dp
48\letcsname\??graphictexdepth  \s!depth\endcsname\syst_boxes_lower_nextbox_dp
49\letcsname\??graphictexdepth         n\endcsname\donothing
50\letcsname\??graphictexdepth\s!nodepth\endcsname\donothing
51
52% old hackery, slightly modernized
53
54\permanent\protected\def\definetextext[#1]%
55  {\tolerant\defcsname\??graphictexarguments#1\endcsname}
56
57\permanent\tolerant\def\sometxt[#1]#*[#S#2]%
58  {\ifarguments
59     \expandafter\meta_some_txt_a
60   \or
61     \expandafter\meta_some_txt_b
62   \or
63     \expandafter\meta_some_txt_c
64   \or
65   \fi{#1}{#2}}
66
67\def\meta_some_txt_a#1#2#3{textext.drt("\clf_metapostescaped{#3}")}
68\def\meta_some_txt_b#1#2#3{textext.drt("\mpsometxt{#1}{\clf_metapostescaped{#3}}")}
69\def\meta_some_txt_c#1#2#3{textext.drt("\mpsometxt{#1}[#2]{\clf_metapostescaped{#3}}")}
70
71\permanent\protected\def\mpsometxt#1%
72  {\begincsname\??graphictexarguments#1\endcsname}
73
74% \definetextext[framed]{\framed}
75%
76% \startMPcode
77%     draw \sometxt[framed]{black} rotated 45 ;
78% \stopMPcode
79%
80% But Mojca wanted more! Two arguments.
81%
82% \definetextext[framed]{\framed}
83%
84% \startMPcode
85%     draw \sometxt{This is for} rotated 45 ;
86%     draw \sometxt[framed][foregroundstyle=bold]{Mojca's};
87%     draw \sometxt[framed]{eyes only!} rotated -45 ;
88% \stopMPcode
89%
90% \definetextext[framed][#1]#2{\framed[width=4cm]{\switchtobodyfont[#1]#2}}
91% \definetextext[simple]{\framed[width=8cm]}
92%
93%  \starttext
94%
95%  \startMPcode
96%      draw \sometxt{This is for} rotated 45 ;
97%      draw \sometxt[framed][ss,16pt] {Mojca's};
98%      draw \sometxt[framed]{eyes only!} rotated -45 ;
99%      draw \sometxt[simple]{Quotes "indeed" work!} rotated 180 ;
100%  \stopMPcode
101%
102% \stoptext
103%
104% a lua one:
105%
106% \protected\def\definetextext[#1]#2{\setvalue{@@st@@#1}{#2}}
107%
108%       \def\sometxt         #1#{\dosometxt{#1}}  % grab optional [args]
109%       \def\dosometxt      #1#2{\ctxlua{metapost.sometxt(\!!bs#1\!!es,\!!bs#2\!!es)}}
110%
111%            \def\sometxta         #1{textext.drt("#1")}
112%            \def\sometxtb       #1#2{textext.drt("\getvalue{@@st@@#1}{#2}")}
113%            \def\sometxtc     #1#2#3{textext.drt("\getvalue{@@st@@#1}{\switchtobodyfont[#2]#3}")}
114
115% Best use the mp macro instead since it provides positioning.
116%
117% \startuseMPgraphic{testgraphic}
118% draw \sometxt{\ruledhbox{\strut hans hagen}} scaled 3;
119% % draw textext.drt("\ruledhbox{\strut hans hagen}") scaled 3;
120% % draw textext.dlft("\ruledhbox{\strut hans hagen}") scaled 3;
121% % draw textext.lft("\ruledhbox{\strut hans hagen}") scaled 3;
122% draw llcorner currentpicture -- urcorner currentpicture withcolor yellow;
123% draw lrcorner currentpicture -- ulcorner currentpicture withcolor yellow;
124% draw boundingbox currentpicture withcolor blue ;
125% draw origin withcolor red withpen pencircle scaled 1pt;
126% \stopuseMPgraphic
127%
128% {\showstruts\useMPgraphic{testgraphic}}
129
130\permanent\protected\def\MPexponent   #1#2{\mathematics{#1\times10^{#2}}}
131\permanent\protected\def\MPformatted  #1#2{\clf_metapostformatted{#1}{#2}}
132\permanent\protected\def\MPgraphformat#1#2{\clf_metapostgraphformat{#1}{#2}}
133
134%D Some new fun (but exprimental for a while):
135
136\permanent\protected\def\MPLIBoutlinetext#1#2#3% index kind text
137  {\begingroup
138   \setbox\scratchbox\hbox{#3}%
139   \clf_MPLIBconvertoutlinetext\numexpr#1\relax{#2}\scratchbox
140   \endgroup}
141
142%D For now here. We don't do the whole thing, because then one can as
143%D well just export to pdf. We assume consistent integration.
144
145\definefontsynonym[serif-normal-normal] [\s!Serif]
146\definefontsynonym[serif-normal-italic] [\s!SerifItalic]
147\definefontsynonym[serif-normal-oblique][\s!SerifSlanted]
148\definefontsynonym[serif-bold-normal]   [\s!SerifBold]
149\definefontsynonym[serif-bold-italic]   [\s!SerifBoldItalic]
150\definefontsynonym[serif-bold-oblique]  [\s!SerifBoldSlanted]
151
152\definefontsynonym[sans-normal-normal]  [\s!Sans]
153\definefontsynonym[sans-normal-italic]  [\s!SansItalic]
154\definefontsynonym[sans-normal-oblique] [\s!SansSlanted]
155\definefontsynonym[sans-bold-normal]    [\s!SansBold]
156\definefontsynonym[sans-bold-italic]    [\s!SansBoldItalic]
157\definefontsynonym[sans-bold-oblique]   [\s!SansBoldSlanted]
158
159\definefontsynonym[sansserif-normal-normal]  [\s!Sans]
160\definefontsynonym[sansserif-normal-italic]  [\s!SansItalic]
161\definefontsynonym[sansserif-normal-oblique] [\s!SansSlanted]
162\definefontsynonym[sansserif-bold-normal]    [\s!SansBold]
163\definefontsynonym[sansserif-bold-italic]    [\s!SansBoldItalic]
164\definefontsynonym[sansserif-bold-oblique]   [\s!SansBoldSlanted]
165
166\definefontsynonym[mono-normal-normal]  [\s!Mono]
167\definefontsynonym[mono-normal-italic]  [\s!MonoItalic]
168\definefontsynonym[mono-normal-oblique] [\s!MonoSlanted]
169\definefontsynonym[mono-bold-normal]    [\s!MonoBold]
170\definefontsynonym[mono-bold-italic]    [\s!MonoBoldItalic]
171\definefontsynonym[mono-bold-oblique]   [\s!MonoBoldSlanted]
172
173\installcorenamespace {svgfamily}
174
175\defcsname\??svgfamily      \endcsname{serif}
176\defcsname\??svgfamily serif\endcsname{serif}
177\defcsname\??svgfamily  sans\endcsname{sans}
178\defcsname\??svgfamily  mono\endcsname{mono}
179
180\definelayer[svgmps][\c!method=\v!fit]
181
182\permanent\protected\def\svgembeddedfigure#1%
183  {\clf_embedimagefromstore {svg} #1 true\relax}
184
185% todo: use the independent color and transparency mechanism
186
187\permanent\protected\def\svghashed#1%
188  {\clf_svghashed#1\relax}
189
190\permanent\protected\def\svg_normal_pcode#1#2#3%
191  {\glyph xoffset #1\onebasepoint yoffset #2\onebasepoint #3\relax}
192
193\permanent\protected\def\svg_normal_pchar#1#2#3%
194  {\glyph xoffset #1\onebasepoint yoffset #2\onebasepoint `#3\relax}
195
196\permanent\protected\def\svg_normal_pspace#1#2%
197  {\space}
198
199\permanent\protected\def\svg_normal_space
200  {\space}
201
202\permanent\protected\def\svg_normal_code#1%
203  {\char#1\relax}
204
205\permanent\protected\def\svg_normal_char#1%
206  {#1\relax}
207
208\permanent\protected\def\svg_normal_start
209  {\resetlayer[svgmps]%
210   \setlayer[svgmps]\bgroup}
211
212\permanent\protected\def\svg_normal_stop
213  {\egroup
214   \flushlayer[svgmps]}
215
216\permanent\protected\def\svg_normal_color_c#1#2#3%#4%   % color
217  {\colored[r=#1,g=#2,b=#3]}%{#4}}
218
219\permanent\protected\def\svg_normal_color_o#1%#2%       % opace
220  {\colored[a=1,t=#1]}%{#2}}
221
222\permanent\protected\def\svg_normal_color_b#1#2#3#4%#5% % both
223  {\colored[r=#1,g=#2,b=#3,a=1,t=#4]}% {#5}}
224
225\permanent\protected\def\svg_normal_set#1#2#3%
226  {\setlayer[svgmps]{\hbox xoffset #1\onebasepoint yoffset #2\onebasepoint to 10sp{#3}}}
227
228\permanent\protected\def\svg_normal_font#1#2#3%#4%
229  {\hbox\bgroup
230   \ifempty{#2}\else
231      \edef\p_font{\ifcsname\??svgfamily#1\endcsname\lastnamedcs\else#1\fi-#2-#3}%
232      \ifcsname svg:\p_font\endcsname
233        \lastnamedcs
234      \else
235        \predefinefont[svg:\p_font][\s!spec:\p_font*\s!default\space @ 10bp]%
236        \csname svg:\p_font\endcsname
237      \fi
238   \fi
239   \let\next}
240 % #4%
241 % \egroup}
242
243\permanent\protected\def\svg_normal_size#1%#2%
244  {\hbox\bgroup
245   \glyphscale\numericscale#1\relax % we need a period !
246   \let\next}
247 % #2%
248 % \egroup}
249
250\permanent\protected\def\svg_traced_pcode#1#2#3%
251  {\writestatus{SVG TEXT}{....[poscode #1 #2 \tocharacter#3]}%
252   \svg_normal_pcode{#1}{#2}{#3}}
253
254\permanent\protected\def\svg_traced_pchar#1#2#3%
255  {\writestatus{SVG TEXT}{....[poschar #1 #2 #3]}%
256   \svg_normal_pchar{#1}{#2}{#3}}
257
258\permanent\protected\def\svg_traced_pspace#1#2%
259  {\writestatus{SVG TEXT}{....[posspace #1 #2]}%
260   \svg_normal_pspace{#1}{#2}}
261
262\permanent\protected\def\svg_traced_code#1%
263  {\writestatus{SVG TEXT}{....[char \tocharacter#1]}%
264   \svg_normal_code{#1}}
265
266\permanent\protected\def\svg_traced_char#1%
267  {\writestatus{SVG TEXT}{....[char #1]}%
268   \svg_normal_char{#1}}
269
270\permanent\protected\def\svg_traced_space
271  {\writestatus{SVG TEXT}{....[space]}%
272   \svg_normal_space}
273
274\permanent\protected\def\svg_traced_start
275  {\writestatus{SVG TEXT}{[start layer]}%
276   \svg_normal_start}
277
278\permanent\protected\def\svg_traced_stop
279  {\svg_normal_stop
280   \writestatus{SVG TEXT}{[stop layer]}}
281
282\permanent\protected\def\svg_traced_color_c#1#2#3#4%
283  {\writestatus{SVG TEXT}{..[start color #1 #2 #3]}%
284   \svg_normal_color_c{#1}{#2}{#3}{#4}%
285   \writestatus{SVG TEXT}{..[stop color]}}
286
287\permanent\protected\def\svg_traced_color_o#1#2%
288  {\writestatus{SVG TEXT}{..[start opace #1]}%
289   \svg_normal_color_o{#1}{#2}%
290   \writestatus{SVG TEXT}{..[stop opace]}}
291
292\permanent\protected\def\svg_traced_color_b#1#2#3#4#5%
293  {\writestatus{SVG TEXT}{..[start color #1 #2 #3 opace #4]}%
294   \svg_normal_color_b{#1}{#2}{#3}{#4}{#5}%
295   \writestatus{SVG TEXT}{..[stop color opace]}}
296
297\permanent\protected\def\svg_traced_set#1#2#3%
298  {\writestatus{SVG TEXT}{...[start set layer #1 #2]}%
299   \svg_normal_set{#1}{#2}{#3}%
300   \writestatus{SVG TEXT}{...[stop set setlayer]}}
301
302\permanent\protected\def\svg_traced_font#1#2#3#4%
303  {\writestatus{SVG TEXT}{.[start font #1 #2 #3]}%
304   \svg_normal_font{#1}{#2}{#3}{#4}%
305   \writestatus{SVG TEXT}{.[stop font]}}
306
307\permanent\protected\def\svg_traced_size#1#2%
308  {\writestatus{SVG TEXT}{.[start size #1]}%
309   \svg_normal_size{#1}{#2}%
310   \writestatus{SVG TEXT}{.[stop size]}}
311
312\permanent\protected\def\svg_normal_text
313  {\enforced\let\svgpcode \svg_normal_pcode
314   \enforced\let\svgpchar \svg_normal_pchar
315   \enforced\let\svgpspace\svg_normal_pspace
316   \enforced\let\svgcode  \svg_normal_code
317   \enforced\let\svgchar  \svg_normal_char
318   \enforced\let\svgspace \svg_normal_space
319   \enforced\let\svgstart \svg_normal_start
320   \enforced\let\svgstop  \svg_normal_stop
321   \enforced\let\svgcolorc\svg_normal_color_c
322   \enforced\let\svgcoloro\svg_normal_color_o
323   \enforced\let\svgcolorb\svg_normal_color_b
324   \enforced\let\svgset   \svg_normal_set
325   \enforced\let\svgfont  \svg_normal_font
326   \enforced\let\svgsize  \svg_normal_size}
327
328\permanent\protected\def\svg_traced_text
329  {\enforced\let\svgpcode \svg_traced_pcode
330   \enforced\let\svgpchar \svg_traced_pchar
331   \enforced\let\svgpspace\svg_traced_pspace
332   \enforced\let\svgcode  \svg_traced_code
333   \enforced\let\svgchar  \svg_traced_char
334   \enforced\let\svgspace \svg_traced_space
335   \enforced\let\svgstart \svg_traced_start
336   \enforced\let\svgstop  \svg_traced_stop
337   \enforced\let\svgcolorc\svg_traced_color_c
338   \enforced\let\svgcoloro\svg_traced_color_o
339   \enforced\let\svgcolorb\svg_traced_color_b
340   \enforced\let\svgset   \svg_traced_set
341   \enforced\let\svgfont  \svg_traced_font
342   \enforced\let\svgsize  \svg_traced_size}
343
344\installtextracker
345   {svg.text}
346   {\svg_traced_text}
347   {\svg_normal_text}
348
349\svg_normal_text
350
351\protect \endinput
352