1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Font Macros Classes and Files}
15
16\unprotect
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44\permanent\protected\tolerant\protected\def\startfontclass[#class]
45 {\push_macro_fontclass
46 \ifcstok{#class}\v!each
47 \lettonothing\fontclass
48
49
50 \else
51 \cdef\fontclass{#class}
52 \fi}
53
54\permanent\protected\def\stopfontclass
55 {\pop_macro_fontclass}
56
57\permanent\def\classfont#class#name{#class#name}
58
59
60
61
62
63
64
65
66
67
68
69
70\installcorenamespace {fontfile}
71
72\lettonothing\m_font_name
73\lettonothing\m_font_file
74
75\mutable\def\defaultfontfile{\truefontname{Normal}}
76
77\permanent\protected\def\definefontsynonym[#name]#spacer[#file]
78 {\edef\m_font_name{#name}
79 \edef\m_font_file{#file}
80 \ifempty\fontclass
81 \expandafter\font_basics_define_font_synonym_nop
82 \else
83 \expandafter\font_basics_define_font_synonym_yes
84 \fi}
85
86\protected\def\font_basics_define_font_synonym_nop
87 {\letcsname\??fontfile\m_font_name\endcsname\m_font_file
88 \doifelsenextoptionalcs\font_basics_define_font_synonym_nop_opt\font_basics_define_font_synonym_nop_nil}
89
90\protected\def\font_basics_define_font_synonym_yes
91 {\letcsname\??fontfile\fontclass\m_font_name\endcsname\m_font_file
92 \doifelsenextoptionalcs\font_basics_define_font_synonym_yes_opt\font_basics_define_font_synonym_yes_nil}
93
94\permanent\protected\def\edefinefontsynonym[#name]#spacer[#file]
95 {\edef\m_font_name{#name}
96 \edef\m_font_file{#file}
97 \ifempty\fontclass
98 \expandafter\font_basics_define_font_synonym_nop_expanded
99 \else
100 \expandafter\font_basics_define_font_synonym_yes_expanded
101 \fi}
102
103\protected\def\font_basics_define_font_synonym_nop_expanded#ignore[#spec]
104 {\letcsname\??fontfile\m_font_name\endcsname\m_font_file
105 \normalexpanded{\font_basics_define_font_synonym_nop_opt[#spec]}}
106
107\protected\def\font_basics_define_font_synonym_yes_expanded#ignore[#spec]
108 {\letcsname\??fontfile\fontclass\m_font_name\endcsname\m_font_file
109 \normalexpanded{\font_basics_define_font_synonym_yes_opt[#spec]}}
110
111\let\p_features \undefined
112\let\p_fallbacks \undefined
113\let\p_goodies \undefined
114\let\p_designsize\undefined
115
116\protected\def\font_basics_define_font_synonym_nop_opt[#specification]
117 {\let\p_features \undefined
118 \let\p_fallbacks \undefined
119 \let\p_goodies \undefined
120 \let\p_designsize\undefined
121 \expandafter\font_basics_get_font_parameter_nop#specification,\ignorearguments}
122
123\protected\def\font_basics_define_font_synonym_yes_opt[#specification]
124 {\let\p_features \undefined
125 \let\p_fallbacks \undefined
126 \let\p_goodies \undefined
127 \let\p_designsize\undefined
128 \expandafter\font_basics_get_font_parameter_yes#specification,\ignorearguments}
129
130
131
132
133\def\font_basics_get_font_parameter_nop#key=#value,
134 {\ifarguments
135 \font_basics_get_font_parameter_nop_finish
136 \else
137 \defcsname p#key\endcsname{#value}
138 \expandafter\font_basics_get_font_parameter_nop
139 \fi}
140
141\def\font_basics_get_font_parameter_yes#key=#value,
142 {\ifarguments
143 \font_basics_get_font_parameter_yes_finish
144 \else
145 \defcsname p#key\endcsname{#value}
146 \expandafter\font_basics_get_font_parameter_yes
147 \fi}
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162\def\font_basics_define_font_synonym_nop_nil
163 {\letcsname\??fontfile\m_font_name\s!features \endcsname\undefined
164 \letcsname\??fontfile\m_font_name\s!fallbacks \endcsname\undefined
165 \letcsname\??fontfile\m_font_name\s!goodies \endcsname\undefined
166 \letcsname\??fontfile\m_font_name\s!designsize\endcsname\undefined}
167
168\def\font_basics_define_font_synonym_yes_nil
169 {\gletcsname\??fontfile\fontclass\m_font_name\s!features \endcsname\undefined
170 \gletcsname\??fontfile\fontclass\m_font_name\s!fallbacks \endcsname\undefined
171 \gletcsname\??fontfile\fontclass\m_font_name\s!goodies \endcsname\undefined
172 \gletcsname\??fontfile\fontclass\m_font_name\s!designsize\endcsname\undefined}
173
174\def\font_basics_get_font_parameter_nop_finish
175 {\letcsname\??fontfile\m_font_name\s!features \endcsname\p_features
176 \letcsname\??fontfile\m_font_name\s!fallbacks \endcsname\p_fallbacks
177 \letcsname\??fontfile\m_font_name\s!goodies \endcsname\p_goodies
178 \letcsname\??fontfile\m_font_name\s!designsize\endcsname\p_designsize}
179
180\def\font_basics_get_font_parameter_yes_finish
181 {\gletcsname\??fontfile\fontclass\m_font_name\s!features \endcsname\p_features
182 \gletcsname\??fontfile\fontclass\m_font_name\s!fallbacks \endcsname\p_fallbacks
183 \gletcsname\??fontfile\fontclass\m_font_name\s!goodies \endcsname\p_goodies
184 \gletcsname\??fontfile\fontclass\m_font_name\s!designsize\endcsname\p_designsize}
185
186
187
188
189
190\permanent\tolerant\protected\def\defineclassfontsynonym[#tag]#spacer[#class]#spacer[#fileortag]
191 {\defcsname\??fontfile\fontclass#tag\endcsname{\fontclassname{#class}{#fileortag}}
192 \font_basics_define_font_synonym_yes_nil}
193
194\aliased\let\definefontfile\definefontsynonym
195
196\permanent\tolerant\protected\def\setupfontsynonym[#name]#spacer[#settings]
197 {}
198
199
200
201
202
203\permanent\def\truefontname#name
204 {\expandafter\font_helpers_true_fontname#name*\empty*\relax}
205
206\def\font_helpers_true_fontname#name*#first#rest*#ignore\relax
207 {\ifcsname\??fontfile\fontclass#name\endcsname
208 \ifx#first\empty
209 \expandafter\truefontname\lastnamedcs
210 \else
211 \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest
212 \fi
213 \orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname
214 \ifx#first\empty
215 \expandafter\truefontname\lastnamedcs
216 \else
217 \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest
218 \fi
219 \orelse\ifcsname\??fontfile#name\endcsname
220 \ifx#first\empty
221 \expandafter\truefontname\lastnamedcs
222 \else
223 \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest
224 \fi
225 \else
226 #name\ifx#first\empty\else*#first#rest\fi
227 \fi}
228
229\def\font_helpers_true_fontname_check#name
230 {\expandafter\font_helpers_true_fontname_check_indeed#name*\relax}
231
232\def\font_helpers_true_fontname_check_indeed#name*#ignore\relax
233 {\ifcsname\??fontfile\fontclass#name\endcsname
234 \expandafter\font_helpers_true_fontname_check\lastnamedcs
235 \orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname
236 \expandafter\font_helpers_true_fontname_check\lastnamedcs
237 \orelse\ifcsname\??fontfile#name\endcsname
238 \expandafter\font_helpers_true_fontname_check\lastnamedcs
239 \else
240 #name
241 \fi}
242
243
244
245\permanent\def\expandfontsynonym#command#name
246 {\ifcsname\??fontfile\fontclass#name\endcsname
247 \expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}
248 \orelse\ifcsname\??fontfile\defaultfontclass#2\endcsname
249 \expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}
250 \fi}
251
252\permanent\def\doifelsefontsynonym#name
253 {\ifcsname\??fontfile\fontclass#name\endcsname
254 \expandafter\firstoftwoarguments
255 \orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname
256 \expandafter\firstoftwoarguments
257 \else
258 \expandafter\secondoftwoarguments
259 \fi}
260
261\aliased\let\doiffontsynonymelse\doifelsefontsynonym
262
263
264
265
266
267
268\permanent\def\tracedfontname#name
269 {#name\ifcsname\??fontfile\fontclass#name\endcsname
270
271 \expandafter\tracedfontname\lastnamedcs
272 \orelse\ifcsname\??fontfile#name\endcsname
273
274 \expandafter\tracedfontname\lastnamedcs
275 \fi}
276
277
278
279
280
281
282
283
284\lettonothing\fontclass
285\lettonothing\defaultfontclass
286
287\permanent\def\fontclassname#class#name
288 {\ifcsname\??fontfile#class#name\endcsname
289 \fontclassname{#class}{\csname\??fontfile#class#name\endcsname}
290 \orelse\ifcsname\??fontfile#name\endcsname
291 \fontclassname{#class}{\csname\??fontfile#name\endcsname}
292 \else
293 #2
294 \fi}
295
296\installmacrostack\fontclass
297
298
299
300
301
302
303
304
305\def\font_helpers_update_font_class_parameters
306 {\edef\m_font_class_features {\begincsname\??fontclass\fontclass\fontstyle\s!features \endcsname}
307 \edef\m_font_class_fallbacks {\begincsname\??fontclass\fontclass\fontstyle\s!fallbacks \endcsname}
308 \edef\m_font_class_goodies {\begincsname\??fontclass\fontclass\fontstyle\s!goodies \endcsname}
309 \edef\m_font_class_designsize{\begincsname\??fontclass\fontclass\fontstyle\s!designsize\endcsname}}
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363\def\font_helpers_set_features_yes#name
364 {\ifcsname\??fontfile\fontclass#name\s!features\endcsname \lettolastnamedcs\m_font_features \orelse
365 \ifcsname\??fontfile #name\s!features\endcsname \lettolastnamedcs\m_font_features \orelse
366 \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_features_yes\lastnamedcs \orelse
367 \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_features_yes\lastnamedcs \else
368 \lettonothing\m_font_features\fi}
369
370\def\font_helpers_set_fallbacks_yes#name
371 {\ifcsname\??fontfile\fontclass#name\s!fallbacks\endcsname \lettolastnamedcs\m_font_fallbacks \orelse
372 \ifcsname\??fontfile #name\s!fallbacks\endcsname \lettolastnamedcs\m_font_fallbacks \orelse
373 \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_fallbacks_yes\lastnamedcs \orelse
374 \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_fallbacks_yes\lastnamedcs \else
375 \lettonothing\m_font_fallbacks\fi}
376
377\def\font_helpers_set_goodies_yes#name
378 {\ifcsname\??fontfile\fontclass#name\s!goodies \endcsname \lettolastnamedcs\m_font_goodies \orelse
379 \ifcsname\??fontfile #name\s!goodies \endcsname \lettolastnamedcs\m_font_goodies \orelse
380 \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_goodies_yes\lastnamedcs \orelse
381 \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_goodies_yes\lastnamedcs \else
382 \lettonothing\m_font_goodies\fi}
383
384\def\font_helpers_set_designsize_yes#name
385 {\ifcsname\??fontfile\fontclass#name\s!designsize\endcsname\lettolastnamedcs\m_font_designsize \orelse
386 \ifcsname\??fontfile #name\s!designsize\endcsname\lettolastnamedcs\m_font_designsize \orelse
387 \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_designsize_yes\lastnamedcs \orelse
388 \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_designsize_yes\lastnamedcs \else
389 \lettonothing\m_font_designsize\fi}
390
391\def\font_helpers_set_features_nop#name
392 {\ifcsname\??fontfile#name\s!features\endcsname \lettolastnamedcs\m_font_features \orelse
393 \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_features_nop\lastnamedcs \else
394 \lettonothing\m_font_features\fi}
395
396\def\font_helpers_set_fallbacks_nop#name
397 {\ifcsname\??fontfile#name\s!fallbacks\endcsname \lettolastnamedcs\m_font_fallbacks \orelse
398 \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_fallbacks_nop\lastnamedcs \else
399 \lettonothing\m_font_fallbacks\fi}
400
401\def\font_helpers_set_goodies_nop#name
402 {\ifcsname\??fontfile#name\s!goodies\endcsname \lettolastnamedcs\m_font_goodies \orelse
403 \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_goodies_nop\lastnamedcs \else
404 \lettonothing\m_font_goodies\fi}
405
406\def\font_helpers_set_designsize_nop#name
407 {\ifcsname\??fontfile#name\s!designsize\endcsname\lettolastnamedcs\m_font_designsize \orelse
408 \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_designsize_nop\lastnamedcs \else
409 \lettonothing\m_font_designsize\fi}
410
411\def\font_helpers_update_font_parameters_yes
412 {\font_helpers_set_features_yes \somefontname
413 \font_helpers_set_fallbacks_yes \somefontname
414 \font_helpers_set_goodies_yes \somefontname
415 \font_helpers_set_designsize_yes\somefontname}
416
417\def\font_helpers_update_font_parameters_nop
418 {\font_helpers_set_features_nop \somefontname
419 \font_helpers_set_fallbacks_nop \somefontname
420 \font_helpers_set_goodies_nop \somefontname
421 \font_helpers_set_designsize_nop\somefontname}
422
423\def\font_helpers_update_font_parameters
424 {\ifempty\fontclass\font_helpers_update_font_parameters_nop\else\font_helpers_update_font_parameters_yes\fi}
425
426\installcorenamespace{fontclass}
427
428
429
430\permanent\protected\def\savefontclassparameters#style#rscale#features#fallbacks#goodies#designsize
431 {\gletcsname\??fontclass\fontclass#style\s!rscale \endcsname#rscale
432 \gletcsname\??fontclass\fontclass#style\s!features \endcsname#features
433 \gletcsname\??fontclass\fontclass#style\s!fallbacks \endcsname#fallbacks
434 \gletcsname\??fontclass\fontclass#style\s!goodies \endcsname#goodies
435 \gletcsname\??fontclass\fontclass#style\s!designsize\endcsname#designsize}
436
437
438
439
440
441\protect \endinput
442 |