1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Typescript Macros Initialization}
15
16\registerctxluafile{typeini}{autosuffix}
17
18
19
20
21
22
23
24
25
26
27
28\unprotect
29
30\newinteger \c_font_typescripts_n_of_preloaded
31\newconditional\c_font_typescripts_quit
32\newtoks \c_font_typescripts_document
33\newconditional\c_font_typescripts_preload
34\newconditional\c_font_typescripts_first_pass \c_font_typescripts_first_pass\conditionaltrue
35
36\newif \iftypescriptfound
37\newif \iftracetypescripts
38
39\newtoks \everybeforedefinetypeface
40\newtoks \everyafterdefinetypeface
41
42\mutable\lettonothing\typescriptfiles
43\mutable\lettonothing\currenttypescripts
44\mutable\lettonothing\currenttypefile
45
46\installmacrostack\currenttypefile
47
48\mutable\lettonothing\typescriptone
49\mutable\lettonothing\typescripttwo
50\mutable\lettonothing\typescriptthree
51
52\installmacrostack\typescriptone
53\installmacrostack\typescripttwo
54\installmacrostack\typescriptthree
55
56\mutable\lettonothing\fontclassstyle
57
58\installmacrostack\fontclassstyle
59
60\lettonothing\m_font_typescripts_one
61\lettonothing\m_font_typescripts_two
62\lettonothing\m_font_typescripts_three
63\lettonothing\m_font_typescripts_check
64\lettonothing\m_font_typescripts_match
65
66\installmacrostack\m_font_typescripts_one
67\installmacrostack\m_font_typescripts_two
68\installmacrostack\m_font_typescripts_three
69
70\mutable\let\t_font_typescripts\relax
71
72\installcorenamespace{typescriptcache}
73\installcorenamespace{typescriptfiles}
74\installcorenamespace{typescriptonce}
75\installcorenamespace{typescriptsynonyms}
76\installcorenamespace{typescriptprefix}
77\installcorenamespace{typescriptinheritances}
78\installcorenamespace{typescriptdefaultstyles}
79\installcorenamespace{typescriptrelatives}
80
81\definesystemvariable{ts}
82
83
84
85\mutable\let\typescriptmethod\plusone
86\mutable\let\typescriptstate \plustwo
87
88\installmacrostack\typescriptmethod
89\installmacrostack\typescriptstate
90
91
92
93
94
95
96
97
98\permanent\protected\def\starttypescriptcollection
99 {\dosingleempty\font_typescripts_collection_start}
100
101\def\font_typescripts_collection_start[#tag]
102 {}
103
104\permanent\let\stoptypescriptcollection\relax
105
106\permanent\protected\def\usetypescriptfile[#filename]
107 {\ifcstok{#filename}\v!reset
108 \lettonothing\typescriptfiles
109 \else
110 \splitfilename{#filename}
111 \addtocommalist\splitoffbase\typescriptfiles
112 \fi}
113
114\installmacrostack\stoptypescript
115
116
117
118
119
120
121
122
123
124
125
126\def\font_typescripts_use_one{\let\typescriptmethod\plusone\font_typescripts_use}
127\def\font_typescripts_use_two{\let\typescriptmethod\plustwo\font_typescripts_use}
128
129\permanent\protected\def\usetypescript {\font_typescripts_use_one}
130\permanent\protected\def\usetypescriptexact{\font_typescripts_use_two}
131
132\tolerant\protected\def\font_typescripts_use[#one]#spacer[#two]#spacer[#three]
133 {\push_macro_m_font_typescripts_one
134 \push_macro_m_font_typescripts_two
135 \push_macro_m_font_typescripts_three
136 \edef\m_font_typescripts_one {\truetypescript{#one}}
137 \edef\m_font_typescripts_two {\truetypescript{#two}}
138 \edef\m_font_typescripts_three{\truetypescript{#three}}
139 \push_macro_typescriptone
140 \push_macro_typescripttwo
141 \push_macro_typescriptthree
142 \push_macro_typescriptmethod
143 \push_macro_typescriptstate
144 \push_macro_stoptypescript
145 \typescriptfoundfalse
146 \let\typescriptstate\plusone
147 \iftracetypescripts
148 \writestatus\m!fonts{request: [\m_font_typescripts_one] [\m_font_typescripts_two] [\m_font_typescripts_three]}
149 \fi
150 \ifhmode
151 \font_typescripts_use_inline
152 \else
153 \font_typescripts_use_display
154 \fi
155 \c_font_typescripts_first_pass\conditionalfalse
156 \pop_macro_stoptypescript
157 \pop_macro_typescriptstate
158 \pop_macro_typescriptmethod
159 \pop_macro_typescriptthree
160 \pop_macro_typescripttwo
161 \pop_macro_typescriptone
162 \pop_macro_m_font_typescripts_three
163 \pop_macro_m_font_typescripts_two
164 \pop_macro_m_font_typescripts_one}
165
166\def\font_typescripts_use_display
167 {\processcommacommand[\typescriptfiles]\font_typescripts_load_file
168 \expand\c_font_typescripts_document}
169
170\let\font_typescripts_use_inline\font_typescripts_use_display
171
172\permanent\protected\def\preloadtypescripts
173 {\ifproductionrun\c_font_typescripts_preload\conditionaltrue\fi}
174
175\prependtoks
176 \preloadtypescripts
177\to \everyjob
178
179\permanent\protected\def\loadtypescriptfile[#1]
180 {\push_macro_typescriptstate
181 \let\typescriptstate\plustwo
182 \clf_loadtypescriptfile{#1}
183 \pop_macro_typescriptstate}
184
185\permanent\protected\def\loadfoundtypescriptfile#1#2
186 {\startreadingfile
187 \unprotect
188 \pushendofline
189 \input{#2}
190 \popendofline
191 \protect
192 \stopreadingfile}
193
194\permanent\protected\def\quittypescriptscanning
195 {\c_font_typescripts_quit\conditionaltrue}
196
197\permanent\protected\def\font_typescripts_start_store#definitions\stoptypescript
198 {\global\advanceby\c_font_typescripts_n_of_preloaded\plusone
199 \gdefcsname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname
200 {\starttypescript#definitions\stoptypescript}
201 \gtoksapp\t_font_typescripts\expandafter
202 {\csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname}}
203
204\permanent\protected\def\font_typescripts_collection_start_store#definitions\stoptypescriptcollection
205 {\global\advanceby\c_font_typescripts_n_of_preloaded\plusone
206 \gdefcsname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname
207 {\starttypescriptcollection#definitions\stoptypescriptcollection}
208 \gtoksapp\t_font_typescripts\expandafter
209 {\csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname}}
210
211\def\font_typescripts_load_file#filename
212 {\c_font_typescripts_quit\conditionalfalse
213 \push_macro_currenttypefile
214 \def\currenttypefile{#filename}
215 \ifconditional\c_font_typescripts_preload
216 \font_typescript_process_typescript_file_and_store
217 \else
218 \font_typescript_process_typescript_file
219 \fi
220 \pop_macro_currenttypefile
221 \ifconditional\c_font_typescripts_quit
222 \quitcommalist
223 \c_font_typescripts_quit\conditionalfalse
224 \fi}
225
226\def\font_typescript_process_typescript_file_and_store
227 {\expandafter\let\expandafter\t_font_typescripts\csname\??typescriptfiles\currenttypefile\endcsname
228 \ifrelax\t_font_typescripts
229 \font_typescript_process_typescript_store_indeed
230 \fi
231 \expand\t_font_typescripts}
232
233\def\font_typescript_process_typescript_store_indeed
234 {\newtoks\t_font_typescripts
235 \begingroup
236 \enforced\let\starttypescript \font_typescripts_start_store
237 \enforced\let\starttypescriptcollection\font_typescripts_collection_start_store
238 \font_typescript_process_typescript_file
239 \endgroup
240 \letcsname\??typescriptfiles\currenttypefile\endcsname\t_font_typescripts}
241
242\def\font_typescript_process_typescript_file
243 {\clf_loadtypescriptfile{\currenttypefile}}
244
245\permanent\tolerant\protected\def\usetypescriptonce[#one]#spacer[#two]#spacer[#three]
246 {\ifcsname\??typescriptonce#one:#two:#three\endcsname
247 \writestatus\m!fonts{once (#one) (#two) (#three)}
248 \else
249 \letcsname\??typescriptonce#one:#two:#three\endcsname\relax
250 \font_typescripts_use[#one][#two][#three]
251 \fi}
252
253
254
255\permanent\tolerant\protected\def\definetypescriptsynonym[#name]#spacer[#synonym]
256 {\ifarguments\or\or\edefcsname\??typescriptsynonyms#name\endcsname{#synonym}\fi}
257
258\permanent\def\truetypescript#name
259 {\ifcsname\??typescriptsynonyms#name\endcsname
260 \expandafter\truetypescript\lastnamedcs
261 \else
262 #name
263 \fi}
264
265
266
267
268
269
270
271\prependtoks
272 \c_font_typescripts_first_pass\conditionaltrue
273\to \everyjob
274
275\permanent\protected\def\starttypescript
276 {\ifcase\typescriptstate
277
278 \expandafter\font_typescripts_start_gobble
279 \or
280
281 \expandafter\font_typescripts_start_process
282 \or
283
284 \expandafter\font_typescripts_start_document
285 \else
286
287 \expandafter\font_typescripts_start_gobble
288 \fi}
289
290\def\font_typescripts_start_gobble#ignore\stoptypescript{}
291
292\def\font_typescripts_start_document#definitions\stoptypescript
293 {\toksapp\c_font_typescripts_document{\starttypescript#definitions\stoptypescript}}
294
295\def\font_typescripts_start_process
296 {\let\typescriptone \m_font_typescripts_one
297 \let\typescripttwo \m_font_typescripts_two
298 \let\typescriptthree\m_font_typescripts_three
299 \lettonothing\m_font_typescripts_match
300 \doifelsenextoptionalcs\font_typescripts_start_process_one\font_typescripts_start_process_all}
301
302\def\font_typescripts_start_process_all
303 {\ifconditional\c_font_typescripts_first_pass
304 \expandafter\font_typescripts_start_process_indeed
305 \else
306
307
308
309 \expandafter\font_typescripts_start_gobble
310 \fi}
311
312\def\font_typescripts_show_match
313 {\writestatus\m!fonts{match:\ifrelax\currenttypefile\space *\fi \m_font_typescripts_match}}
314
315\def\font_typescripts_start_process_yes
316 {\ifdone
317 \typescriptfoundtrue
318 \iftracetypescripts\font_typescripts_show_match\fi
319 \expandafter\font_typescripts_start_process_indeed
320 \else
321 \expandafter\font_typescripts_start_gobble
322 \fi}
323
324\def\font_typescripts_start_process_one
325 {\font_typescripts_check\m_font_typescripts_one\typescriptone\font_typescripts_start_process_again_one}
326
327\def\font_typescripts_start_process_two
328 {\font_typescripts_check\m_font_typescripts_two\typescripttwo\font_typescripts_start_process_again_two}
329
330\def\font_typescripts_start_process_three
331 {\font_typescripts_check\m_font_typescripts_three\typescriptthree\font_typescripts_start_process_again_three}
332
333\def\font_typescripts_start_process_again_one
334 {\doifelsenextoptionalcs\font_typescripts_start_process_two\font_typescripts_start_process_yes}
335
336\def\font_typescripts_start_process_again_two
337 {\doifelsenextoptionalcs\font_typescripts_start_process_three\font_typescripts_start_process_yes}
338
339\let\font_typescripts_start_process_again_three\font_typescripts_start_process_yes
340
341\def\font_typescripts_start_process_indeed
342 {\push_macro_fontclass}
343
344\permanent\protected\def\stoptypescript
345 {\pop_macro_fontclass}
346
347\def\font_typescripts_check#asked#target#followup[#value]
348 {\donefalse
349 \edef\m_font_typescripts_check{#value}
350 \ifempty\m_font_typescripts_check
351 \ifcase\typescriptmethod\or\donetrue\fi
352 \orelse\ifx#asked\s!all
353 \donetrue
354 \orelse\ifx\m_font_typescripts_check\s!all
355 \donetrue
356 \orelse\ifx#asked\m_font_typescripts_check
357 \donetrue
358 \let#target\m_font_typescripts_check
359 \else
360 \doifelsecommon\m_font_typescripts_check#asked\donetrue\donefalse
361 \ifdone
362 \let#target\commalistelement
363 \fi
364 \fi
365 \ifdone
366 \iftracetypescripts\extendtypescriptmatch\fi
367 \expandafter#followup
368 \else
369 \expandafter\font_typescripts_start_gobble
370 \fi}
371
372\permanent\protected\def\extendtypescriptmatch
373 {\edef\m_font_typescripts_match{\m_font_typescripts_match\space[\m_font_typescripts_check]}}
374
375
376
377
378\permanent\tolerant\protected\def\loadmapfile [#filename]{\clf_loadmapfile{#filename}}
379\permanent\tolerant\protected\def\loadmapline [#kind]#spacer[#data]{\clf_loadmapline{#kind}{#data}}
380\permanent \protected\def\forgetmapfiles {\clf_resetmapfiles}
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396\permanent\tolerant\protected\def\definetypescriptprefix[#name]#spacer[#prefix]
397 {\gdefcsname\??typescriptprefix#name\endcsname{#prefix}}
398
399\permanent\def\typescriptprefix#name
400 {\ifcsname\??typescriptprefix#name\endcsname\lastnamedcs\else#name\fi}
401
402
403
404
405
406
407
408
409
410
411\appendtoks
412 \font_helpers_reset_fontclass_math_families\fontclass
413\to \everybeforedefinetypeface
414
415
416
417\newconditional\autotypescripts \autotypescripts\conditionaltrue
418
419\protected\def\fonts_helpers_try_currentfontclass#typeface
420 {\ifconditional\autotypescripts
421 \usetypescript[#typeface]
422 \ifcsname\??fontclassyes#typeface\endcsname
423 \cdef\fontclass{#typeface}
424 \else
425 \iftracetypescripts\writestatus\m!fonts{auto load typescript file 1: [#typeface]}\fi
426 \usetypescriptfile[#typeface]
427 \usetypescript[#typeface]
428 \ifcsname\??fontclassyes#typeface\endcsname
429 \cdef\fontclass{#typeface}
430 \else
431
432
433 \letcsname\??fontclassnop#typeface\endcsname\empty
434 \fi
435 \fi
436 \else
437
438
439 \letcsname\??fontclassnop#typeface\endcsname\empty
440 \fi}
441
442
443
444\permanent\tolerant\protected\def\definetypeface[#name]#spacer[#style]#spacer[#fontshape]#spacer[#fontname]#spacer[#fontsize]#spacer[#settings]
445 {\ifarguments
446 \expandafter\font_typefaces_define_e
447 \or
448 \expandafter\font_typefaces_define_d
449 \or
450 \expandafter\font_typefaces_define_d
451 \or
452 \expandafter\font_typefaces_define_c
453 \or
454 \expandafter\font_typefaces_define_b
455 \or
456 \expandafter\font_typefaces_define_a
457 \or
458 \expandafter\font_typefaces_define_a
459 \fi[#name][#style][#fontshape][#fontname][#fontsize][#settings]}
460
461\def\font_typefaces_define_e[#name][#style][#fontshape][#fontname][#fontsize][#settings]
462 {}
463
464\def\font_typefaces_define_a[#name][#style][#fontshape][#fontname][#fontsize][#settings]
465 {\iftracetypescripts\writestatus\m!fonts{define: [#name] [#style] [#fontshape] [#fontname]}\fi
466 \font_typefaces_define_indeed[#name][#style]
467 \font_typefaces_defining_start{#name}{#style}{#settings}
468 \font_typescripts_use_one[#fontshape][#fontname][\s!name]
469 \iftypescriptfound
470
471 \orelse\ifconditional\autotypescripts
472 \iftracetypescripts\writestatus\m!fonts{auto load typescript file 2: [#fontname]}\fi
473 \usetypescriptfile[#fontname]
474 \font_typescripts_use_one[#fontshape][#fontname][\s!name]
475 \fi
476 \font_typescripts_use_one[#fontshape][#fontsize][\s!size]
477 \font_typefaces_defining_stop}
478
479\def\font_typefaces_define_b[#name][#style][#fontshape][#fontname][#discard][#discard]
480 {\font_typefaces_define_a[#name][#style][#fontshape][#fontname][\s!default][#discard]}
481
482\def\font_typefaces_define_c[#name][#style][#discard][#discard][#discard][#discard]
483 {\font_typefaces_define_indeed[#name][#style]}
484
485\def\font_typefaces_define_d[#name][#specification][#discard][#discard][#discard][#discard]
486 {\clf_definetypeface{#name}{#specification}}
487
488\def\font_typefaces_define_indeed[#name][#style]
489 {\ifempty{#name}\else
490 \ifcsname\??typescriptdefaultstyles#name\endcsname \else
491 \registerfontclass{#name}
492 \gdefcsname\??typescriptdefaultstyles#name\endcsname{#style}
493 \fi
494 \ifcsname#name\endcsname \else
495 \protected\frozen\instance\gdefcsname#name\endcsname{\switchtotypeface[#name][#style]}
496 \fi
497 \fi}
498
499\lettonothing\m_ts_features
500\lettonothing\m_ts_fallbacks
501\lettonothing\m_ts_goodies
502\lettonothing\m_ts_designsize
503
504\def\font_typefaces_defining_start#name#style#settings
505 {\let\m_ts_rscale\!!plusone
506 \lettonothing\m_ts_features
507 \lettonothing\m_ts_fallbacks
508 \lettonothing\m_ts_goodies
509 \lettonothing\m_ts_designsize
510 \geteparameters[mts][#settings]
511 \push_macro_fontclass
512 \push_macro_fontclassstyle
513 \setcurrentfontclass{#name}
514 \savefontclassparameters{#style}\m_ts_rscale\m_ts_features\m_ts_fallbacks\m_ts_goodies\m_ts_designsize
515 \expand\everybeforedefinetypeface}
516
517\permanent\def\tsvar#key#default
518 {\expandafter\ifempty\csname\??ts#key\endcsname
519 #default
520 \else
521 \csname\??ts#key\endcsname
522 \fi}
523
524\def\font_typefaces_defining_stop
525 {\expand\everyafterdefinetypeface
526 \pop_macro_fontclassstyle
527 \pop_macro_fontclass}
528
529\permanent\protected\def\dofastdefinetypeface#name#style#fontshape#fontsize#settings
530 {\font_typefaces_define_indeed[#name][#style]
531 \font_typefaces_defining_start{#name}{#style}{#settings}
532 \font_typescripts_use_one[#fontshape][#fontsize][\s!size]
533 \font_typefaces_defining_stop}
534
535\permanent\tolerant\protected\def\setuptypeface[#class]#spacer[#settings]
536 {\ifarguments
537 \or
538 \setcurrentfontclass{#class}
539 \let\globalfontclass\fontclass
540 \ifempty\fontclass
541 \setupbodyfont[\s!rm]
542 \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname
543 \expandafter\setupbodyfont\expandafter[\lastnamedcs]
544 \else
545 \setupbodyfont[\s!rm]
546 \fi
547 \or
548 \setcurrentfontclass{#class}
549 \let\globalfontclass\fontclass
550 \setupbodyfont[#settings]
551 \fi
552 \ifmmode\mr\else\tf\fi}
553
554\permanent\tolerant\protected\def\switchtotypeface[#class]#spacer[#settings]
555 {\ifarguments
556 \or
557 \setcurrentfontclass{#class}
558 \let\globalfontclass\globalfontclass
559 \ifempty\fontclass
560 \switchtobodyfont[\s!rm]
561 \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname
562 \expandafter\switchtobodyfont\expandafter[\lastnamedcs]
563 \else
564 \switchtobodyfont[\s!rm]
565 \fi
566 \or
567 \setcurrentfontclass{#class}
568 \let\globalfontclass\globalfontclass
569 \switchtobodyfont[#settings]
570 \fi
571 \ifmmode\mr\else\tf\fi}
572
573
574
575
576
577
578
579
580
581
582\permanent\tolerant\protected\def\inherittypeface[#name]#spacer[#styles]#spacer[#parentclass]
583 {\ifempty{#styles}
584 \inherittypeface[#name][\s!rm,\s!ss,\s!tt,\s!mm][\fontclass]
585 \orelse\iftok{#name}{#parentclass}\else
586 \glet\font_typescripts_inherit_check\font_typescripts_inherit_check_indeed
587 \def\font_typescripts_inherit_check_step#style{\edefcsname\??typescriptinheritances#name:#style\endcsname{#parentclass}}
588 \processcommalist[#styles]\font_typescripts_inherit_check_step
589 \fi}
590
591\let\font_typescripts_inherit_check_step\relax
592
593
594
595\def\font_typescripts_inherit_check_indeed#name
596 {\ifcsname\??typescriptinheritances\fontclass:#name\endcsname
597
598 \expandafter\let\expandafter\fontclass\lastnamedcs
599 \fi}
600
601\let\font_typescripts_inherit_check\gobbleoneargument
602
603\def\v_font_string_d
604 {\expandafter\ifx\csname\??typescriptdefaultstyles\fontclass\endcsname\s!rm \s!Serif \else
605 \expandafter\ifx\csname\??typescriptdefaultstyles\fontclass\endcsname\s!ss \s!Sans \else
606 \expandafter\ifx\csname\??typescriptdefaultstyles\fontclass\endcsname\s!tt \s!Mono \else
607 \s!Serif \fi\fi\fi}
608
609\protected\def\font_helpers_set_fontstyle_of_fontclass
610 {\ifempty\fontclass
611 \let\fontstyle\s!rm
612 \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname
613
614 \edef\fontstyle{\lastnamedcs}
615 \else
616 \let\fontstyle\s!rm
617 \fi}
618
619\protect \endinput
620 |