1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60\writestatus{loading}{ConTeXt Font Macros Initialization}
61
62
63
64
65\unprotect
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318\fontslantperpoint \nullfont 0\scaledpoint
319\fontinterwordspace \nullfont 256377\scaledpoint
320\fontinterwordstretch\nullfont 128188\scaledpoint
321\fontinterwordshrink \nullfont 85459\scaledpoint
322\fontexheight \nullfont 338952\scaledpoint
323\fontemwidth \nullfont 786432\scaledpoint
324\fontextraspace \nullfont 85459\scaledpoint
325
326\appendtoks
327 \fontslantperpoint \nullfont 0\scaledpoint
328 \fontinterwordspace \nullfont 256377\scaledpoint
329 \fontinterwordstretch\nullfont 128188\scaledpoint
330 \fontinterwordshrink \nullfont 85459\scaledpoint
331 \fontexheight \nullfont 338952\scaledpoint
332 \fontemwidth \nullfont 786432\scaledpoint
333 \fontextraspace \nullfont 85459\scaledpoint
334\to \everyjob
335
336
337
338\newtoks\t_font_tracers_definitions
339
340\permanent\protected\def\tracefontdefinitions
341 {\expand\t_font_tracers_definitions}
342
343
344
345\permanent\protected\def\setfontparameters
346 {\c_font_synchronize\conditionalfalse
347 \expand\everybodyfont
348 \c_font_synchronize\conditionaltrue}
349
350\mutable\lettonothing\savedfont
351
352\installmacrostack\savedfont
353
354
355
356
357
358
359
360\permanent\protected\def\savefont
361 {\edef\savedfont{\the\font}
362 \push_macro_savedfont}
363
364\permanent\protected\def\restorefont
365 {\pop_macro_savedfont
366 \savedfont}
367
368\aliased\let\popcurrentfont\relax
369
370\permanent\protected\def\pushcurrentfont
371 {\enforced\permanent\protected\edef\popcurrentfont
372 {\def\noexpand\fontbody {\fontbody}
373 \def\noexpand\fontstyle {\fontstyle}
374 \def\noexpand\fontalternative{\fontalternative}
375 \def\noexpand\fontsize {\fontsize}
376 \font_helpers_check_big_math_synchronization
377 \font_helpers_synchronize_font}}
378
379
380
381\mutable\let\thedefinedfont\relax
382
383\permanent\tolerant\protected\def\definedfont[#specification]
384 {\ifarguments
385 \c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly
386 \or
387 \c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly
388 \font_basics_define_font_without_parameters{thedefinedfont}{#specification}
389 \fi
390 \thedefinedfont
391 \expand\everydefinedfont}
392
393
394
395\permanent\protected\def\startfont{\begingroup\definedfont}
396\permanent\protected\def\stopfont {\endgroup}
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435\ifdefined\globalbodyfontsize \else \newdimension\globalbodyfontsize \fi \globalbodyfontsize=12pt
436\ifdefined\localbodyfontsize \else \newdimension\localbodyfontsize \fi \localbodyfontsize =\globalbodyfontsize
437\ifdefined\bodyfontsize \else \newdimension\bodyfontsize \fi \bodyfontsize =\globalbodyfontsize
438
439\permanent\protected\def\widthofzero{\scaledfontcharwd\font\zeroasciicode}
440
441
442
443
444
445\pushoverloadmode
446 \newuserunit\globalbodyfontsize fs
447 \newuserunit\widthofzero ch
448 \newuserunit\ascender fa
449 \newuserunit\descender fd
450 \newuserunit\capheight fc
451\popoverloadmode
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470\installcorenamespace{fontnormalizedbody}
471
472\permanent\protected\def\normalizebodyfontsize#macro#body
473 {\scratchdimen\ifchkdimension#body\or\lastchkdimension\else#body\dimexpr\fontbody\relax\fi
474 \expandafter\let\expandafter#macro\csname\??fontnormalizedbody\number\scratchdimen\endcsname
475 \ifrelax#macro
476 \normalizebodyfontsize_indeed#macro
477 \fi}
478
479\def\normalizebodyfontsize_indeed#macro
480 {\edef#macro{\clf_normalizedbodyfontsize\scratchdimen}
481 \gletcsname\??fontnormalizedbody\number\scratchdimen\endcsname#macro}
482
483\permanent\def\thenormalizedbodyfontsize#body
484 {\clf_normalizedbodyfontsize{#body}}
485
486\mutable\edef\normalizedglobalbodyfontsize{\thenormalizedbodyfontsize\bodyfontsize}
487\mutable\edef\normalizedlocalbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize}
488\mutable\edef\normalizedbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize}
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518\installcorenamespace{mappedfontsize}
519
520
521\letcsname\??mappedfontsize\s!script \endcsname\!!plustwo
522\letcsname\??mappedfontsize\s!scriptscript\endcsname\!!plusthree
523
524\permanent\tolerant\protected\def\mapfontsize[#class]#spacer[#from]#spacer[#to]
525 {\ifarguments
526
527 \or
528
529 \letcsname\??mappedfontsize#class:1\endcsname\undefined
530 \letcsname\??mappedfontsize#class:2\endcsname\undefined
531 \letcsname\??mappedfontsize#class:3\endcsname\undefined
532 \or
533
534 \or
535
536 \defcsname
537 \??mappedfontsize
538 #class:
539 \begincsname\??mappedfontsize#from\endcsname
540 \endcsname{#to}
541 \fi}
542
543\permanent\tolerant\protected\def\checkedmapfontsize[#class]#spacer[#from]#spacer[#to]
544 {\ifcsname\??mappedfontsize#class:\begincsname\??mappedfontsize#from\endcsname\endcsname
545
546 \else
547 \mapfontsize[#class][#from][#to]
548 \fi}
549
550\permanent\tolerant\def\mappedfontsize#class#from
551 {\begincsname
552 \??mappedfontsize
553 #class:
554 \begincsname\??mappedfontsize#from\endcsname
555 \endcsname}
556
557\def\font_basics_set_mapped_fontsize#from
558 {\ifcsname\??mappedfontsize\fontclass:\fontface\endcsname
559
560
561 \the\dimexpr\lastnamedcs\dimexpr\normalizedbodyfontsize\relax\relax
562 \else
563 #from
564 \fi}
565
566\appendtoks
567 \def\font_basics_set_mapped_fontsize#from
568 {\ifcsname\??mappedfontsize\fontclass:\fontface\endcsname
569 \the\dimexpr\lastnamedcs\dimexpr\normalizedbodyfontsize\relax\relax
570 \else
571 #from
572 \fi}
573\to \everycompactfontmode
574
575
576
577
578
579
580
581
582
583\defcsname fontbasicsmappedfontsize1\endcsname
584 {\the\plusthousand}
585
586\defcsname fontbasicsmappedfontsize2\endcsname
587 {\tointeger{
588 \plusthousand
589 *\dimexpr
590 \ifcsname\??mappedfontsize\fontclass:2\endcsname
591 \lastnamedcs\dimexpr\textface\relax
592 \else
593 \scriptface
594 \fi
595 \relax
596 \dimexpr\textface\relax}}
597
598\defcsname fontbasicsmappedfontsize3\endcsname
599 {\tointeger{
600 \plusthousand
601 *\dimexpr
602 \ifcsname\??mappedfontsize\fontclass:3\endcsname
603 \lastnamedcs\dimexpr\textface\relax
604 \else
605 \scriptscriptface
606 \fi
607 \relax
608 \dimexpr\textface\relax}}
609
610\installcorenamespace{fontbodyknown}
611\installcorenamespace{fontclassyes}
612\installcorenamespace{fontclassnop}
613
614\def\font_helpers_process_relative_size_list#command
615 {#command\v!big
616 #command\v!small}
617
618\let\v_font_size_relative \plusone
619\def\v_font_size_absolute {\fontbody}
620
621\let\v_font_rscale_default\!!plusone
622\let\p_font_rscale \v_font_rscale_default
623
624\def\font_helpers_check_relative_font_id
625 {\let\p_font_rscale\minusone
626 \let\p_font_rscale\v_font_rscale_default}
627
628\def\font_helpers_check_relative_font_size#style
629 {\edef\p_font_rscale
630 {\ifcsname\??fontclass\fontclass#style\s!rscale\endcsname
631 \lastnamedcs
632 \orelse\ifcsname\??fontclass\defaultfontclass#style\s!rscale\endcsname
633 \lastnamedcs
634 \else
635 \v_font_rscale_default
636 \fi}
637
638 \ifx\p_font_rscale\v!auto
639 \let\p_font_rscale\plusone
640 \font_helpers_check_relative_font_id
641 \fi}
642
643\def\font_rscale_xx#style
644 {\ifcsname\??fontclass\fontclass#style\s!rscale\endcsname
645 \lastnamedcs
646 \else
647 \v_font_rscale_default
648 \fi}
649
650\def\font_rscale_mm
651 {\ifcsname\??fontclass\fontclass\s!mm\s!rscale\endcsname
652 \lastnamedcs
653 \else
654 \v_font_rscale_default
655 \fi}
656
657\protected\def\font_helpers_register_fontbody#body
658 {\letcsname\??fontbodyknown#body\endcsname\empty}
659
660
661
662
663
664
665
666
667
668
669
670
671
672\installcorenamespace{fontstyle}
673\installcorenamespace{fontshortstyle}
674
675\installcorenamespace{fontstyleknown}
676\installcorenamespace{fontalternativeknown}
677\installcorenamespace{fontsizeknown}
678
679\newtoks\t_font_style_commands
680\newtoks\t_font_size_commands
681\newtoks\t_font_alternative_commands
682
683\setnewmacro\m_font_style_command \gobbleoneargument
684\setnewmacro\m_font_size_command \gobbleoneargument
685\setnewmacro\m_font_alternative_command\gobbleoneargument
686
687\def\font_helpers_process_style_list #command{\def\m_font_style_command {#command}\expand\t_font_style_commands}
688\def\font_helpers_process_size_list #command{\def\m_font_size_command {#command}\expand\t_font_size_commands}
689\def\font_helpers_process_alternative_list#command{\def\m_font_alternative_command{#command}\expand\t_font_alternative_commands}
690
691\def\font_helpers_register_style #style{\letcsname\??fontstyleknown #style\endcsname\empty}
692\def\font_helpers_register_size #size{\letcsname\??fontsizeknown #size\endcsname\empty}
693\def\font_helpers_register_alternative#alternative{\letcsname\??fontalternativeknown#alternative\endcsname\empty}
694
695\permanent\protected\def\definefontstyle[#commands]#spacer[#style]
696 {\ifcsname\??fontstyleknown#style\endcsname \else
697 \font_helpers_register_style{#style}
698 \toksapp\t_font_style_commands{\m_font_style_command{#style}}
699 \fi
700 \processcommalist[#commands]{\font_basics_define_fontstyle_indeed{#style}}}
701
702\def\font_basics_define_fontstyle_indeed#style#command
703 {\defcsname\??fontshortstyle#command\endcsname{#style}
704 \defcsname\??fontstyle #command\endcsname{\csname#style\endcsname}}
705
706\permanent\protected\def\definefontsize[#size]
707 {\ifcsname\??fontsizeknown#size\endcsname \else
708 \font_helpers_register_size{#size}
709 \toksapp\t_font_size_commands{\m_font_size_command{#size}}
710 \fi
711 \font_helpers_check_fontname_combinations}
712
713\permanent\protected\def\definefontalternative[#alternative]
714 {\ifcsname\??fontalternativeknown#alternative\endcsname \else
715 \font_helpers_register_alternative{#alternative}
716 \toksapp\t_font_alternative_commands{\m_font_alternative_command{#alternative}}
717 \fi
718 \font_helpers_check_fontname_combinations}
719
720\protected\def\font_helpers_check_fontname_combinations
721 {\font_helpers_process_style_list\font_helpers_check_fontname_combinations_s}
722
723\def\font_helpers_check_fontname_combinations_s#style
724 {\font_helpers_process_alternative_list{\font_helpers_check_fontname_combinations_indeed_s_a{#style}}}
725
726\def\font_helpers_check_fontname_combinations_indeed_s_a#style#alternative
727 {\font_helpers_process_size_list{\font_basics_check_fontname_combination{#style}{#alternative}}}
728
729\definefontstyle [\s!mm] [\s!mm]
730\definefontstyle [\s!rm] [\s!rm]
731\definefontstyle [\s!ss] [\s!ss]
732\definefontstyle [\s!tt] [\s!tt]
733
734
735
736
737
738
739
740
741\newmacro\m_font_mm
742
743\def\font_basics_check_fontname_combination#style
744 {\edef\m_font_mm{#style}
745 \ifx\m_font_mm\s!mm
746 \expandafter\font_basics_check_math_bodyfont
747 \else
748 \expandafter\font_basics_check_text_bodyfont
749 \fi{#style}}
750
751\def\font_basics_check_math_bodyfont#style#alternative#size
752 {}
753
754\def\font_basics_check_text_bodyfont_step#whatever#body
755 {\ifcsname#whatever\endcsname\else
756
757 \permanent\protected\gdefcsname#whatever\endcsname{#body}
758 \fi}
759
760\def\font_basics_check_text_bodyfont#style#alternative#size
761 {\font_basics_check_text_bodyfont_step{#style#size}{\font_helpers_set_current_font_style_size{#style}{#size}}
762 \font_basics_check_text_bodyfont_step{#alternative#size}{\font_helpers_set_current_font_alternative_size{#alternative}{#size}}
763 \font_basics_check_text_bodyfont_step{#style#alternative#size}{\font_helpers_set_current_font_style_alternative_size{#style}{#alternative}{#size}}
764 \font_basics_check_text_bodyfont_step{#style}{\font_helpers_set_current_font_style{#style}}
765 \font_basics_check_text_bodyfont_step{#alternative}{\font_helpers_set_current_font_alternative{#alternative}}
766 \font_basics_check_text_bodyfont_step{#style\s!x }{\font_helpers_set_current_font_x_style_alternative{#style}}
767 \font_basics_check_text_bodyfont_step{#style\s!xx}{\font_helpers_set_current_font_xx_style_alternative{#style}}
768 \font_basics_check_text_bodyfont_step{#alternative\s!x }{\font_helpers_set_current_font_x_alternative{#alternative}}
769 \font_basics_check_text_bodyfont_step{#alternative\s!xx}{\font_helpers_set_current_font_xx_alternative{#alternative}}
770 \font_basics_check_text_bodyfont_step{#style#alternative}{\font_helpers_set_current_font_style_alternative{#style}{#alternative}}}
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804\mutable\let\somefontname \s!unknown
805\mutable\let\somefontspec \s!unknown
806\mutable\let\somefontfile \s!unknown
807\mutable\let\somefontsize \zerocount
808
809\mutable\lettonothing\somefontsizex
810\mutable\lettonothing\somefontsizey
811
812
813
814
815
816\newtoks \everydefinefont
817
818\aliased\let\c_font_feature_inheritance_fontnone \zerocount
819\aliased\let\c_font_feature_inheritance_fontonly \plusone
820\aliased\let\c_font_feature_inheritance_classonly \plustwo
821\aliased\let\c_font_feature_inheritance_fontfirst \plusthree
822\aliased\let\c_font_feature_inheritance_classfirst\plusfour
823
824\aliased\let\c_font_feature_inheritance_default\c_font_feature_inheritance_fontfirst
825
826\setnewconstant\c_font_feature_inheritance_mode\c_font_feature_inheritance_default
827
828\newdimension \d_font_scaled_text_face
829\newdimension \d_font_scaled_font_size
830\newconditional\c_font_body_scale
831\newfraction \f_font_body_scale
832
833\newinteger \c_font_scaled_glyph_scale
834
835\immutable\dimensiondef\d_font_scaled_default 10pt
836
837
838
839
840
841
842
843\mutable\lettonothing\somefontspec
844
845\mutable\let\lastrawfontcall \relax
846\mutable\let\lastglobalrawfontcall\relax
847
848\immutable\dimensiondef\d_font_default_size 10pt
849
850
851\lettonothing\m_font_class_features
852\lettonothing\m_font_class_fallbacks
853\lettonothing\m_font_class_goodies
854
855\lettonothing\m_font_direction
856\lettonothing\m_font_features
857\lettonothing\m_font_fallbacks
858\lettonothing\m_font_goodies
859
860\protected\def\font_helpers_low_level_define#specification#csname
861 {\font_ignore_compact_font_mode
862
863 \glet\somefontname\defaultfontfile
864 \lettonothing\somefontsize
865 \lettonothing\somefontsizex
866 \lettonothing\somefontsizey
867 \clf_definefont_one{\detokenize\expandafter{\normalexpanded{#specification}}}
868
869 \ifcase\fontface\relax
870
871 \let\v_font_size_absolute\textface
872 \or
873 \let\v_font_size_absolute\textface
874 \or
875 \let\v_font_size_absolute\scriptface
876 \or
877 \let\v_font_size_absolute\scriptscriptface
878 \or
879 \let\v_font_size_absolute\xtextface
880 \or
881 \let\v_font_size_absolute\xxtextface
882 \fi
883
884 \ifcase\scaledfontmode\relax
885 \d_font_scaled_font_size\d_font_default_size
886 \or
887
888 \d_font_scaled_font_size\somefontsize
889 \or
890
891 \d_font_scaled_font_size\v_font_size_absolute\relax
892 \d_font_scaled_font_size\currentfontbodysize\d_font_scaled_font_size
893 \or
894
895 \d_font_scaled_font_size\font_basics_set_mapped_fontsize\v_font_size_absolute
896 \d_font_scaled_font_size\currentfontbodysize\d_font_scaled_font_size
897 \or
898
899 \d_font_scaled_font_size\somefontsize\scaledpoint
900 \else
901
902 \d_font_scaled_font_size\somefontsize
903 \fi
904 \relax
905 \d_font_scaled_font_size\v_font_size_relative\d_font_scaled_font_size
906 \relax
907
908 \ifconditional\c_font_auto_size
909 \font_helpers_check_body_scale\fontsize
910 \ifconditional\c_font_body_scale
911 \d_font_scaled_font_size\f_font_body_scale\d_font_scaled_font_size
912 \d_font_scaled_text_face\f_font_body_scale\dimexpr\textface\relax
913 \else
914 \d_font_scaled_font_size\f_font_body_scale
915 \d_font_scaled_text_face\textface
916 \fi
917 \else
918 \d_font_scaled_text_face\textface
919 \fi
920
921 \edef\somefontspec{at \number\d_font_scaled_font_size sp}
922 \edef\somefontfile{\truefontname\somefontname}
923 \ifx\somefontfile\s!unknown
924 \edef\somefontfile{\defaultfontfile}
925 \fi
926 \font_helpers_update_font_parameters
927 \font_helpers_update_font_class_parameters
928 \clf_definefont_two
929 \ifempty\fontclass\s!false\else\s!true\fi
930 {#csname}
931 \somefontfile
932 \d_font_scaled_font_size
933 \c_font_feature_inheritance_mode
934 \m_font_class_features
935 \m_font_features
936 \m_font_class_fallbacks
937 \m_font_fallbacks
938 \fontface
939 \d_font_scaled_text_face
940 \m_font_class_goodies
941 \m_font_goodies
942 \m_font_class_designsize
943 \m_font_designsize
944 \scaledfontmode
945 \relax
946 \ifcase\scaledfontsize
947
948 \lettonothing\somefontspec
949 \let\lastrawfontcall\relax
950 \mutable\letcsname#csname\endcsname\relax
951 \else
952 \edef\somefontspec{at \number\scaledfontsize sp}
953 \expandafter\let\expandafter\lastrawfontcall\csname#csname\endcsname
954 \expand\everydefinefont
955 \fi
956 \c_font_feature_inheritance_mode\c_font_feature_inheritance_default}
957
958\mutable\lettonothing\somefontslant
959\mutable\lettonothing\somefontweight
960\mutable\lettonothing\somefontextend
961\mutable\lettonothing\somefontsqueeze
962
963\protected\def\font_helpers_low_level_define_compact#specification#csname
964 {
965 \glet\somefontname\defaultfontfile
966 \lettonothing\somefontsize
967 \lettonothing\somefontsizex
968 \lettonothing\somefontsizey
969 \clf_definefont_one{\detokenize\expandafter{\normalexpanded{#specification}}}
970
971 \ifcase\scaledfontmode\relax
972 \d_font_scaled_font_size\d_font_default_size
973 \or
974
975 \d_font_scaled_font_size\somefontsize
976 \or
977
978 \d_font_scaled_font_size\textface
979 \d_font_scaled_font_size\currentfontbodysize\d_font_scaled_font_size
980 \or
981
982 \d_font_scaled_font_size\font_basics_set_mapped_fontsize\textface
983 \d_font_scaled_font_size\currentfontbodysize\d_font_scaled_font_size
984 \or
985
986 \d_font_scaled_font_size\somefontsize\scaledpoint
987 \else
988 \d_font_scaled_font_size\somefontsize
989 \fi
990 \relax
991 \d_font_scaled_font_size\v_font_size_relative\d_font_scaled_font_size
992 \relax
993
994 \ifconditional\c_font_auto_size
995 \font_helpers_check_body_scale\fontsize
996 \ifconditional\c_font_body_scale
997 \d_font_scaled_font_size\f_font_body_scale\d_font_scaled_font_size
998 \d_font_scaled_text_face\f_font_body_scale\dimexpr\textface\relax
999 \else
1000 \d_font_scaled_font_size\f_font_body_scale
1001 \d_font_scaled_text_face\textface
1002 \fi
1003 \else
1004 \d_font_scaled_text_face\textface
1005 \fi
1006
1007 \ifnum\c_font_scaled_font_mode_saved>\plusfour
1008 \c_font_scaled_font_mode_saved\scaledfontmode
1009 \scaledfontmode\zerocount
1010 \fi
1011 \c_font_future_glyph_scale\numexpr\plushundred*\d_font_scaled_font_size\maxcard\relax
1012
1013 \edef\somefontspec{at \number\d_font_scaled_font_size sp}
1014
1015 \edef\somefontfile{\truefontname\somefontname}
1016 \ifx\somefontfile\s!unknown
1017 \edef\somefontfile{\defaultfontfile}
1018 \fi
1019 \font_helpers_update_font_parameters
1020 \font_helpers_update_font_class_parameters
1021
1022
1023 \clf_definefont_two
1024 \ifempty\fontclass\s!false\else\s!true\fi
1025 {#csname}
1026 \somefontfile
1027 \d_font_scaled_font_size
1028 \c_font_feature_inheritance_mode
1029 \m_font_class_features
1030 \m_font_features
1031 \m_font_class_fallbacks
1032 \m_font_fallbacks
1033 \zerocount
1034 \d_font_scaled_default
1035 \m_font_class_goodies
1036 \m_font_goodies
1037 \m_font_class_designsize
1038 \m_font_designsize
1039 \scaledfontmode
1040 \relax
1041 \ifcase\scaledfontsize
1042
1043 \lettonothing\somefontspec
1044 \let\lastrawfontcall\relax
1045 \mutable\letcsname#csname\endcsname\relax
1046 \else
1047 \edef\somefontspec{at \number\scaledfontsize sp}
1048
1049 \glyphscale\c_font_future_glyph_scale
1050 \glyphxscale\ifempty\somefontsizex\plusthousand\else\somefontsizex\fi\relax
1051 \glyphyscale\ifempty\somefontsizey\plusthousand\else\somefontsizey\fi\relax
1052
1053 \expandafter\let\expandafter\lastrawfontcall\csname#csname\endcsname
1054 \ifrelax\lastrawfontcall
1055 \lettonothing\somefontspec
1056 \else
1057 \ifempty\somefontextend \else\glyphxscale\somefontextend \relax\fi
1058 \ifempty\somefontsqueeze\else\glyphyscale\somefontsqueeze\relax\fi
1059 \glyphslant \ifempty\somefontslant \zerocount\else\somefontslant \fi\relax
1060 \glyphweight\ifempty\somefontweight\zerocount\else\somefontweight\fi\relax
1061 \mutable\fontspecdef\lastrawfontcall
1062 \lastnamedcs
1063 all \glyphscale \glyphxscale \glyphyscale \glyphslant \glyphweight
1064 \relax
1065 \mutable\ifempty\fontclass\letcsname\else\gletcsname\fi#csname\endcsname\lastrawfontcall
1066 \expand\everydefinefont
1067 \fi
1068 \fi
1069 \c_font_feature_inheritance_mode\c_font_feature_inheritance_default}
1070
1071\appendtoks
1072 \enforced\let\font_helpers_low_level_define\font_helpers_low_level_define_compact
1073\to \everycompactfontmode
1074
1075\def\font_helpers_check_body_scale#fontsize
1076 {\ifcsname\??fontenvironments\fontclass:\fontstyle\fontbody#fontsize\endcsname
1077 \lettolastnamedcs\f_font_body_scale
1078 \c_font_body_scale\conditionalfalse
1079 \orelse\ifcsname\??fontenvironments\fontclass:\fontstyle\s!default#fontsize\endcsname
1080 \lettolastnamedcs\f_font_body_scale
1081 \c_font_body_scale\conditionaltrue
1082 \orelse\ifcsname\??fontenvironments\fontclass\fontbody#fontsize\endcsname
1083 \lettolastnamedcs\f_font_body_scale
1084 \c_font_body_scale\conditionalfalse
1085 \orelse\ifcsname\??fontenvironments\fontclass\s!default#fontsize\endcsname
1086 \lettolastnamedcs\f_font_body_scale
1087 \c_font_body_scale\conditionaltrue
1088
1089 \orelse\ifcsname\??fontenvironments\fontclass\s!default\s!parent\endcsname
1090 \ifcsname\??fontenvironments\lastnamedcs#fontsize\endcsname
1091 \lettolastnamedcs\f_font_body_scale
1092 \else
1093 \let\f_font_body_scale\plusone
1094 \fi
1095 \c_font_body_scale\conditionaltrue
1096
1097 \orelse\ifcsname\??fontenvironments\fontbody:\fontstyle#fontsize\endcsname
1098 \lettolastnamedcs\f_font_body_scale
1099 \c_font_body_scale\conditionalfalse
1100 \orelse\ifcsname\??fontenvironments\fontbody#fontsize\endcsname
1101 \lettolastnamedcs\f_font_body_scale
1102 \c_font_body_scale\conditionalfalse
1103 \orelse\ifcsname\??fontenvironments\s!default#fontsize\endcsname
1104 \lettolastnamedcs\f_font_body_scale
1105 \c_font_body_scale\conditionaltrue
1106 \orelse\ifcsname\??fontenvironments\fontclass\s!default\s!text\endcsname
1107 \lettolastnamedcs\f_font_body_scale
1108 \c_font_body_scale\conditionaltrue
1109 \orelse\ifcsname\??fontenvironments\s!default\s!text\endcsname
1110 \lettolastnamedcs\f_font_body_scale
1111 \c_font_body_scale\conditionaltrue
1112 \else
1113 \let\f_font_body_scale\plusone
1114 \c_font_body_scale\conditionaltrue
1115 \fi}
1116
1117\newif\ifskipfontcharacteristics \skipfontcharacteristicstrue
1118
1119
1120
1121
1122
1123
1124\mutable\let\fontfile\s!unknown
1125
1126
1127
1128\installcorenamespace{fonts}
1129\installcorenamespace{fontslanguage}
1130
1131\installsetuponlycommandhandler \??fonts {fonts}
1132
1133\newconstant\c_fonts_auto_language
1134
1135\letcsname\??fontslanguage\v!auto\endcsname\plusone
1136
1137
1138\appendtoks
1139 \c_fonts_auto_language
1140 \ifcsname\??fontslanguage\fontsparameter\c!language\endcsname
1141 \lastnamedcs
1142 \else
1143 \zerocount
1144 \fi
1145\to \everysetupfonts
1146
1147\appendtoks
1148 \ifcase\c_fonts_auto_language
1149
1150 \or
1151 \addfflanguage
1152
1153
1154 \fi
1155\to \everylanguage
1156
1157
1158
1159
1160
1161
1162
1163\ifdefined\everyfont \else \newtoks\everyfont \fi
1164\ifdefined\everyfontswitch \else \newtoks\everyfontswitch \fi
1165
1166\permanent\def\setfontcharacteristics{\expand\everyfont}
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193\permanent\tolerant\protected\def\definefont[#1]#*[#2]#*[#3]
1194 {\ifparameter#3\or
1195 \expandafter\font_basics_define_font_a
1196 \else
1197 \expandafter\font_basics_define_font_b
1198 \fi[#1][#2][#3]}
1199
1200\def\font_basics_define_font_a[#name][#specification][#settings]
1201 {\ifsetups{#settings}
1202 \mutable\protected\defcsname#name\endcsname{\font_basics_define_font_with_setups {#name}{#specification}{#settings}}
1203 \else
1204 \mutable\protected\defcsname#name\endcsname{\font_basics_define_font_with_parameters{#name}{#specification}{#settings}}
1205 \fi}
1206
1207\def\font_basics_define_font_b[#name][#specification][#dummy]
1208 {\mutable\protected\defcsname#name\endcsname{\font_basics_define_font_without_parameters{#name}{#specification}}}
1209
1210\def\font_basics_define_font_with_parameters#name#specification#settings
1211 {\font_basics_define_font_without_parameters{#name}{#specification}
1212 \setuplocalinterlinespace[#settings]
1213 \setupspacing\relax}
1214
1215\def\font_basics_define_font_with_setups#name#specification#settings
1216 {\font_basics_define_font_without_parameters{#name}{#specification}
1217 \directsetup{#settings}}
1218
1219
1220
1221
1222\permanent\tolerant\protected\def\definefrozenfont[#name]#spacer[#specification]#spacer[#settings]
1223 {\ifparameter#name\or
1224 \begingroup
1225 \definefont[#name][#specification][#settings]
1226 \csname#name\endcsname
1227 \glet\lastglobalrawfontcall\lastrawfontcall
1228 \endgroup
1229 \aliased\letcsname#name\endcsname\lastglobalrawfontcall
1230 \fi}
1231
1232
1233
1234
1235
1236
1237
1238\ifdefined\??fontinstanceready \else \installcorenamespace{fontinstanceready} \fi
1239\ifdefined\??fontinstancebasic \else \installcorenamespace{fontinstancebasic} \fi
1240\ifdefined\??fontinstanceclass \else \installcorenamespace{fontinstanceclass} \fi
1241
1242\newconditional\c_font_auto_size \c_font_auto_size\conditionaltrue
1243
1244\mutable\lettonothing\lastfontidentifier
1245
1246\def\v_font_identifier_basic{\??fontinstancebasic \lastfontidentifier\fontsize\fontface}
1247\def\v_font_identifier_class{\??fontinstanceclass\fontclass\lastfontidentifier\fontsize\fontface}
1248
1249\let\v_font_identifier_basic_saved\v_font_identifier_basic
1250\let\v_font_identifier_class_saved\v_font_identifier_class
1251
1252\appendtoks
1253 \def\v_font_identifier_basic{\??fontinstancebasic \lastfontidentifier\fontsize}
1254 \def\v_font_identifier_class{\??fontinstanceclass\fontclass\lastfontidentifier\fontsize}
1255
1256 \let\v_font_identifier_basic_saved\v_font_identifier_basic
1257 \let\v_font_identifier_class_saved\v_font_identifier_class
1258\to \everycompactfontmode
1259
1260\def\font_basics_define_font_without_parameters#identifier#2
1261 {\relax
1262 \c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly
1263 \cdef\lastfontidentifier{#identifier}
1264 \let\v_font_size_relative\v_font_rscale_default
1265 \let\v_font_size_absolute\fontbody
1266 \font_helpers_low_level_define{#2}\v_font_identifier_basic
1267 \csname\v_font_identifier_basic\endcsname
1268 \c_font_auto_size\conditionalfalse
1269 \expand\everyfont
1270 \expand\everyfontswitch
1271 \let\v_font_identifier_basic\v_font_identifier_basic_saved}
1272
1273\protected\def\font_helpers_trigger#identifier
1274 {\cdef\lastfontidentifier{#identifier}
1275 \ifcsname\v_font_identifier_class\endcsname
1276
1277 \expandafter\font_helpers_trigger_reuse
1278 \else
1279
1280 \expandafter\font_helpers_trigger_define
1281 \fi}
1282
1283\def\font_helpers_trigger_define#relative#absolute#specification
1284 {\def\v_font_size_relative{#relative}
1285 \def\v_font_size_absolute{#absolute}
1286 \font_helpers_low_level_define{#specification}\v_font_identifier_class
1287 \csname\v_font_identifier_class\endcsname
1288 \c_font_auto_size\conditionalfalse
1289 \ifskipfontcharacteristics \else
1290 \expand\everyfont
1291 \expand\everyfontswitch
1292 \fi
1293 \let\v_font_identifier_class\v_font_identifier_class_saved}
1294
1295\def\font_helpers_trigger_reuse#relative#absolute#specification
1296 {\csname\v_font_identifier_class\endcsname
1297 \c_font_auto_size\conditionalfalse
1298 \ifskipfontcharacteristics \else
1299 \expand\everyfont
1300 \expand\everyfontswitch
1301 \fi
1302 \let\v_font_identifier_class\v_font_identifier_class_saved}
1303
1304
1305
1306
1307
1308
1309
1310
1311\installcorenamespace{fontenvironments}
1312
1313\permanent\def\currentfontbodysize
1314 {\ifcsname\??fontenvironments\fontclass:\fontstyle\s!default\somefontsize\endcsname
1315 \lastnamedcs
1316 \orelse\ifcsname\??fontenvironments\fontclass\s!default\somefontsize\endcsname
1317 \lastnamedcs
1318 \orelse\ifcsname\??fontenvironments\fontclass\s!default\s!parent\endcsname
1319 \ifcsname\??fontenvironments\lastnamedcs\somefontsize\endcsname
1320 \lastnamedcs
1321 \else
1322 \somefontsize
1323 \fi
1324 \orelse\ifcsname\??fontenvironments\s!default\somefontsize\endcsname
1325 \lastnamedcs
1326 \else
1327 \somefontsize
1328 \fi}
1329
1330\permanent\def\currentfontbodyscale
1331 {\csname
1332 \ifcsname\??fontenvironments\fontclass:\fontstyle\s!default\fontsize\endcsname\csnamestring\orelse
1333 \ifcsname\??fontenvironments\fontclass \s!default\fontsize\endcsname\csnamestring\orelse
1334 \ifcsname\??fontenvironments \s!default\fontsize\endcsname\csnamestring\orelse
1335 \ifcsname\??fontenvironments\fontclass:\fontstyle\s!default\s!text \endcsname\csnamestring\orelse
1336 \ifcsname\??fontenvironments\fontclass \s!default\s!text \endcsname\csnamestring\orelse
1337 \ifcsname\??fontenvironments \s!default\s!text \endcsname\csnamestring\else
1338 \??fontenvironments \s!default \fi
1339 \endcsname}
1340
1341\permanent\def\currentfontscale
1342 {\csname
1343 \ifcsname\??fontenvironments\fontclass:\fontstyle\s!default\wildcardfontsize\endcsname\csnamestring\orelse
1344 \ifcsname\??fontenvironments\fontclass \s!default\wildcardfontsize\endcsname\csnamestring\orelse
1345 \ifcsname\??fontenvironments \s!default\wildcardfontsize\endcsname\csnamestring\orelse
1346 \ifcsname\??fontenvironments\fontclass:\fontstyle\s!default\s!text \endcsname\csnamestring\orelse
1347 \ifcsname\??fontenvironments\fontclass \s!default\s!text \endcsname\csnamestring\orelse
1348 \ifcsname\??fontenvironments \s!default\s!text \endcsname\csnamestring\else
1349 \??fontenvironments \s!default \fi
1350 \endcsname}
1351
1352\def\font_currentfontscale
1353 {\ifcsname\??fontenvironments\fontclass:\fontstyle\s!default\wildcardfontsize\endcsname\lastnamedcs\orelse
1354 \ifcsname\??fontenvironments\fontclass \s!default\wildcardfontsize\endcsname\lastnamedcs\orelse
1355 \ifcsname\??fontenvironments \s!default\wildcardfontsize\endcsname\lastnamedcs\orelse
1356 \ifcsname\??fontenvironments\fontclass:\fontstyle\s!default\s!text \endcsname\lastnamedcs\orelse
1357 \ifcsname\??fontenvironments\fontclass \s!default\s!text \endcsname\lastnamedcs\orelse
1358 \ifcsname\??fontenvironments \s!default\s!text \endcsname\lastnamedcs\else
1359 \csname\??fontenvironments \s!default \endcsname \fi}
1360
1361\defcsname\??fontenvironments\s!default\endcsname{1}
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455\letcsname\??fontenvironments\endcsname\empty
1456
1457\permanent\def\bodyfontvariable#parameter
1458 {\begincsname
1459 \ifcsname\??fontenvironments\fontclass:\fontstyle\normalizedbodyfontsize#parameter\endcsname\csnamestring\orelse
1460 \ifcsname\??fontenvironments\fontclass \normalizedbodyfontsize#parameter\endcsname\csnamestring\orelse
1461 \ifcsname\??fontenvironments\fontclass:\fontstyle #parameter\endcsname\csnamestring\orelse
1462 \ifcsname\??fontenvironments\fontclass #parameter\endcsname\csnamestring\orelse
1463 \ifcsname\??fontenvironments\fontclass \s!default \s!parent\endcsname\csnamestring\orelse
1464 \ifcsname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname\csnamestring\orelse
1465 \ifcsname\??fontenvironments \s!default #parameter\endcsname\csnamestring\else
1466 \??fontenvironments \fi
1467 \endcsname}
1468
1469\permanent\def\bodyfontsizevariable#size#parameter
1470 {\begincsname
1471 \ifcsname\??fontenvironments\fontclass:\fontstyle#size#parameter\endcsname\csnamestring\orelse
1472 \ifcsname\??fontenvironments\fontclass #size#parameter\endcsname\csnamestring\orelse
1473 \ifcsname\??fontenvironments\fontclass:\fontstyle #parameter\endcsname\csnamestring\orelse
1474 \ifcsname\??fontenvironments\fontclass #parameter\endcsname\csnamestring\orelse
1475 \ifcsname\??fontenvironments\fontclass \s!default \s!parent\endcsname\csnamestring\orelse
1476 \ifcsname\??fontenvironments #size#parameter\endcsname\csnamestring\orelse
1477 \ifcsname\??fontenvironments \s!default #parameter\endcsname\csnamestring\else
1478 \??fontenvironments \fi
1479 \endcsname}
1480
1481
1482
1483\def\font_bodyfontvariable#parameter
1484 {\ifcsname\??fontenvironments\fontclass:\fontstyle\normalizedbodyfontsize#parameter\endcsname\lastnamedcs
1485 \orelse\ifcsname\??fontenvironments\fontclass \normalizedbodyfontsize#parameter\endcsname\lastnamedcs
1486 \orelse\ifcsname\??fontenvironments\fontclass:\fontstyle #parameter\endcsname\lastnamedcs
1487 \orelse\ifcsname\??fontenvironments\fontclass #parameter\endcsname\lastnamedcs
1488 \orelse\ifcsname\??fontenvironments\fontclass\s!default \s!parent\endcsname\begincsname\??fontenvironments\lastnamedcs#parameter\endcsname
1489 \orelse\ifcsname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname\lastnamedcs
1490 \orelse\ifcsname\??fontenvironments \s!default #parameter\endcsname\lastnamedcs\fi}
1491
1492\def\font_bodyfontsizevariable#size#parameter
1493 {\ifcsname\??fontenvironments\fontclass:\fontstyle #size#parameter\endcsname\lastnamedcs
1494 \orelse\ifcsname\??fontenvironments\fontclass #size#parameter\endcsname\lastnamedcs
1495 \orelse\ifcsname\??fontenvironments\fontclass:\fontstyle #parameter\endcsname\lastnamedcs
1496 \orelse\ifcsname\??fontenvironments\fontclass #parameter\endcsname\lastnamedcs
1497 \orelse\ifcsname\??fontenvironments\fontclass\s!default \s!parent\endcsname\begincsname\??fontenvironments\lastnamedcs#parameter\endcsname
1498 \orelse\ifcsname\??fontenvironments #size#parameter\endcsname\lastnamedcs
1499 \orelse\ifcsname\??fontenvironments\s!default #parameter\endcsname\lastnamedcs\fi}
1500
1501\permanent\def\currentbodyfontdimension#parameter
1502 {\todimension{
1503 \ifcsname\??fontenvironments\fontclass:\fontstyle\normalizedbodyfontsize#parameter\endcsname
1504 \orelse\ifcsname\??fontenvironments\fontclass:\fontstyle\s!default #parameter\endcsname
1505 \orelse\ifcsname\??fontenvironments\fontclass\normalizedbodyfontsize#parameter\endcsname
1506 \orelse\ifcsname\??fontenvironments\fontclass\s!default#parameter\endcsname
1507
1508 \orelse\ifcsname\??fontenvironments\fontclass\s!default\s!parent\endcsname
1509 \ifcsname\??fontenvironments\lastnamedcs#parameter\endcsname\fi
1510
1511 \orelse\ifcsname\??fontenvironments\normalizedbodyfontsize#parameter\endcsname
1512 \orelse\ifcsname\??fontenvironments\s!default#parameter\endcsname
1513 \fi
1514 \lastnamedcs
1515 \ifchkdim\lastnamedcs\or\else
1516 \dimexpr\normalizedbodyfontsize\relax
1517 \fi}}
1518
1519\permanent\def\bodyfontdimension#class#size#parameter#body
1520 {\todimension{
1521 \ifcsname\??fontenvironments#class:\fontstyle#size#parameter\endcsname
1522 \orelse\ifcsname\??fontenvironments#class:\fontstyle\s!default#parameter\endcsname
1523 \orelse\ifcsname\??fontenvironments#class#size#parameter\endcsname
1524 \orelse\ifcsname\??fontenvironments#class\s!default#parameter\endcsname
1525
1526 \orelse\ifcsname\??fontenvironments#class\s!default\s!parent\endcsname
1527 \ifcsname\??fontenvironments\lastnamedcs#parameter\endcsname\fi
1528
1529 \orelse\ifcsname\??fontenvironments#size#parameter\endcsname
1530 \orelse\ifcsname\??fontenvironments\s!default#parameter\endcsname
1531 \fi
1532 \lastnamedcs
1533 \ifchkdim\lastnamedcs\or\else
1534 \dimexpr#body\relax
1535 \fi}}
1536
1537
1538
1539
1540
1541\newconstant\currentxfontsize
1542
1543\permanent\def\wildcardfontsize {\ifcase\currentxfontsize\fontsize\or\s!x\else\s!xx\fi}
1544\permanent\def\wildcardfontscale{\normalexpanded{\noexpand\bodyfontvariable{\ifcase\currentxfontsize\fontsize\or\s!x\else\s!xx\fi}}}
1545
1546\permanent\def\bodyfontinterlinespace{\bodyfontvariable \c!interlinespace}
1547
1548
1549\installcorenamespace{fontenvironmentknown}
1550
1551\def\font_helpers_register_environment#class#body
1552 {\letcsname\??fontenvironmentknown#class#body\endcsname\empty}
1553
1554\newmacro\m_font_body
1555\newmacro\m_font_body_normalized
1556
1557\permanent\tolerant\protected\def\definebodyfontenvironment[#1]#*[#2]#*[#3]#*[#4]
1558 {\ifarguments
1559 \expandafter\font_basics_define_body_font_environment_unset
1560 \or
1561 \expandafter\font_basics_define_body_font_environment_unset
1562 \or
1563 \expandafter\font_basics_define_body_font_environment_empty
1564 \or
1565 \expandafter\font_basics_define_body_font_environment_class
1566 \or
1567 \expandafter\font_basics_define_body_font_environment_detail
1568 \fi[#1][#2][#3][#4]}
1569
1570\aliased\let\setupbodyfontenvironment\definebodyfontenvironment
1571
1572
1573
1574
1575
1576\permanent\def\processbodyfontenvironmentlist#1
1577 {\clf_processbodyfontsizes{\strippedcsname#1}}
1578
1579\permanent\def\bodyfontenvironmentlist
1580 {\clf_getbodyfontsizes}
1581
1582\def\font_basics_define_body_font_environment_detail[#class][#style][#body][#settings]
1583 {\font_basics_define_body_font_environment_class[#class:#style][#body][#settings][]}
1584
1585\def\font_basics_define_body_font_environment_class[#class][#body][#settings][#dummy]
1586 {\edef\m_font_body{#body}
1587 \ifchkdim\m_font_body\or
1588 \normalizebodyfontsize\m_font_body_normalized\m_font_body
1589 \font_basics_define_body_font_environment_size[#class][\m_font_body_normalized][#settings]
1590 \clf_registerbodyfontsize{\m_font_body_normalized}
1591 \orelse\ifhastok={#settings}
1592 \getparameters[\??fontenvironments#class#body][#settings]
1593 \else
1594 \setvalue{\??fontenvironments#class#body\s!parent}{#settings}
1595
1596 \fi}
1597
1598
1599
1600
1601\def\font_basics_define_body_font_environment_empty[#body][#settings][#dummya][#dummyb]
1602 {\push_macro_fontclass
1603 \lettonothing\fontclass
1604 \font_basics_define_body_font_environment_class[][#body][#settings][#dummya]
1605 \pop_macro_fontclass}
1606
1607\def\font_basics_define_body_font_environment_unset[#body][#dummya][#dummyb][#dummyc]
1608 {\push_macro_fontclass
1609 \lettonothing\fontclass
1610 \font_basics_define_body_font_environment_class[][#body][][]
1611 \pop_macro_fontclass}
1612
1613
1614
1615\newconditional\c_font_defining_environment_state
1616
1617\def\font_basics_define_body_font_environment_size[#class][#normalizedbody][#settings]
1618 {\getparameters[\??fontenvironments#class#normalizedbody][#settings]
1619 \ifcsname\??fontenvironmentknown#class#normalizedbody\endcsname
1620
1621 \orelse\ifproductionrun
1622 \push_macro_fontclass
1623 \cdef\fontclass{#class}
1624 \font_helpers_register_environment{#class}{#normalizedbody}
1625 \c_font_defining_environment_state\conditionaltrue
1626 \font_helpers_define_unknown_font{#normalizedbody}
1627 \c_font_defining_environment_state\conditionalfalse
1628 \pop_macro_fontclass
1629 \fi
1630 \font_helpers_register_fontbody{#normalizedbody}}
1631
1632
1633
1634\def\font_helpers_check_bodyfont_environment#normalizedbody#body
1635 {\ifcsname\??fontenvironmentknown\fontclass#normalizedbody\endcsname
1636
1637 \else
1638 \font_helpers_check_bodyfont_environment_indeed{#normalizedbody}{#body}
1639 \fi}
1640
1641\def\font_helpers_check_bodyfont_environment_indeed#normalizedbody#body
1642 {\font_helpers_register_environment\fontclass{#normalizedbody}
1643 \ifcsname\??fontbodyknown#normalizedbody\endcsname
1644 \else
1645 \font_helpers_define_unknown_font{#normalizedbody}
1646 \fi}
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724\installcorenamespace{fontdefinitions}
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734\permanent\tolerant\protected\def\definebodyfont[#1]#*[#2]#*[#3]#*[#4]
1735 {\ifarguments
1736 \or
1737 \font_basics_define_body_font[#1][\s!rm][]
1738 \or
1739 \font_basics_define_body_font[#1][\s!rm][#2]
1740 \or
1741 \font_basics_define_body_font[#1][#2][#3]
1742 \or
1743 \processcommacommand[#1]{\font_basics_define_body_font_class_given[#2][#3][#4]}
1744 \fi}
1745
1746\protected\def\font_basics_define_body_font[#whatever]
1747 {\doifelsenumber{#whatever}\font_basics_define_body_font_body\font_basics_define_body_font_name[#whatever]}
1748
1749
1750
1751
1752
1753
1754
1755
1756\protected\def\font_basics_define_body_font_class_given[#1][#2][#3]#4
1757 {\push_macro_fontclass
1758 \ifcstok{#4}\s!default
1759 \lettonothing\fontclass
1760 \else
1761 \cdef\fontclass{#4}
1762 \fi
1763 \definebodyfont[#1][#2][#3]
1764 \pop_macro_fontclass}
1765
1766\protected\def\font_basics_define_body_font_body[#body][#style][#specification]
1767 {\ifhastok={#specification}
1768 \expandafter\font_basics_define_body_font_body_assignment
1769 \else
1770 \expandafter\font_basics_define_body_font_body_identifier
1771 \fi
1772 [#body][#style][#specification]}
1773
1774\protected\def\font_basics_define_body_font_name[#name][#style][#specification]
1775 {\ifhastok={#specification}
1776 \expandafter\font_basics_define_body_font_name_assignment
1777 \else
1778 \expandafter\font_basics_define_body_font_name_identifier
1779 \fi
1780 [#name][#style][#specification]}
1781
1782\protected\def\font_basics_define_body_font_body_assignment[#bodylist][#stylelist][#assignments]
1783 {\processcommalist[#bodylist]{\font_basics_define_body_font_body_assignment_a{#stylelist}{#assignments}}}
1784
1785\protected\def\font_basics_define_body_font_body_assignment_a#stylelist#assignments#body
1786 {\normalizebodyfontsize\m_font_asked_body{#body}
1787
1788 \font_helpers_check_bodyfont_environment\m_font_asked_body\m_font_asked_body
1789 \processcommalist[#stylelist]{\font_basics_define_body_font_body_assignment_b{#assignments}}}
1790
1791\protected\def\font_basics_define_body_font_body_assignment_b#assignments#style
1792 {\edef\m_font_asked_style{#style}
1793 \processcommalist[#assignments]\font_basics_define_body_font_defs}
1794
1795\protected\def\font_basics_define_body_font_defs
1796 {\ifempty\fontclass
1797 \expandafter\font_basics_define_body_font_defs_nop
1798 \else
1799 \expandafter\font_basics_define_body_font_defs_yes
1800 \fi}
1801
1802\protected\def\font_basics_define_body_font_defs_yes_normal#assignment
1803 {\ifx\m_font_asked_style\s!mm
1804 \expandafter\font_basics_define_body_font_yes_mm
1805 \else
1806 \expandafter\font_basics_define_body_font_yes_xx
1807 \fi[#assignment]}
1808
1809\protected\def\font_basics_define_body_font_defs_nop_normal#assignment
1810 {\ifx\m_font_asked_style\s!mm
1811 \expandafter\font_basics_define_body_font_nop_mm
1812 \else
1813 \expandafter\font_basics_define_body_font_nop_xx
1814 \fi[#assignment]}
1815
1816\protected\def\font_basics_define_body_font_defs_yes_traced#assignment
1817 {\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] [#assignment]}
1818 \ifx\m_font_asked_style\s!mm
1819 \expandafter\font_basics_define_body_font_yes_mm
1820 \else
1821 \expandafter\font_basics_define_body_font_yes_xx
1822 \fi[#assignment]}
1823
1824\protected\def\font_basics_define_body_font_defs_nop_traced#assignment
1825 {\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] [#assignment]}
1826 \ifx\m_font_asked_style\s!mm
1827 \expandafter\font_basics_define_body_font_nop_mm
1828 \else
1829 \expandafter\font_basics_define_body_font_nop_xx
1830 \fi[#assignment]}
1831
1832\let\font_basics_define_body_font_defs_yes\font_basics_define_body_font_defs_yes_normal
1833\let\font_basics_define_body_font_defs_nop\font_basics_define_body_font_defs_nop_normal
1834
1835\appendtoks
1836 \let\font_basics_define_body_font_defs_yes\font_basics_define_body_font_defs_yes_traced
1837 \let\font_basics_define_body_font_defs_nop\font_basics_define_body_font_defs_nop_traced
1838\to \t_font_tracers_definitions
1839
1840
1841
1842
1843
1844\protected\def\font_basics_define_body_font_nop_xx[#one#two#rest=#value]
1845 {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi
1846 \letcsname\??fontinstanceclass\m_font_asked_body\m_font_asked_style#one#two#rest0\endcsname\undefined
1847 \protected\edefcsname\??fontinstanceready\m_font_asked_body\m_font_asked_style#one#two#rest0\endcsname
1848 {\font_helpers_trigger{\m_font_asked_body\m_font_asked_style#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}
1849 \letcsname\??fontinstanceclass\m_font_asked_body\m_font_asked_style#one#two#rest4\endcsname\undefined
1850 \protected\edefcsname\??fontinstanceready\m_font_asked_body\m_font_asked_style#one#two#rest4\endcsname
1851 {\font_helpers_trigger{\m_font_asked_body\m_font_asked_style#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}
1852 \letcsname\??fontinstanceclass\m_font_asked_body\m_font_asked_style#one#two#rest5\endcsname\undefined
1853 \protected\edefcsname\??fontinstanceready\m_font_asked_body\m_font_asked_style#one#two#rest5\endcsname
1854 {\font_helpers_trigger{\m_font_asked_body\m_font_asked_style#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}
1855 }
1856
1857\protected\def\font_basics_define_body_font_yes_xx[#one#two#rest=#value]
1858 {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi
1859 \gletcsname\??fontinstanceclass\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest1\endcsname\undefined
1860 \protected\xdefcsname\??fontinstanceready\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest0\endcsname
1861 {\font_helpers_trigger{\m_font_asked_body\m_font_asked_style#one#two#rest0}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}
1862 \gletcsname\??fontinstanceclass\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest2\endcsname\undefined
1863 \protected\xdefcsname\??fontinstanceready\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest4\endcsname
1864 {\font_helpers_trigger{\m_font_asked_body\m_font_asked_style#one#two#rest4}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}
1865 \gletcsname\??fontinstanceclass\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest3\endcsname\undefined
1866 \protected\xdefcsname\??fontinstanceready\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest5\endcsname
1867 {\font_helpers_trigger{\m_font_asked_body\m_font_asked_style#one#two#rest5}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}
1868 }
1869
1870\appendtoks
1871
1872 \protected\def\font_basics_define_body_font_nop_xx[#one#two#rest=#value]
1873 {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi
1874 \letcsname\??fontinstanceclass\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname\undefined
1875 \protected\edefcsname\??fontinstanceready\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname
1876 {\font_helpers_trigger{\m_font_asked_body\m_font_asked_style#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}
1877 }
1878 \protected\def\font_basics_define_body_font_yes_xx[#one#two#rest=#value]
1879 {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi
1880 \gletcsname\??fontinstanceready\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname\undefined
1881 \protected\xdefcsname\??fontinstanceready\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname
1882 {\font_helpers_trigger{\m_font_asked_body\m_font_asked_style#one#two#rest}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}
1883 }
1884\to \everycompactfontmode
1885
1886
1887
1888
1889
1890
1891
1892
1893\protected\def\font_basics_define_body_font_nop_mm[#one#two#rest=#value]
1894 {
1895 \letcsname\??fontinstanceclass\m_font_asked_body\s!mm#one#two#rest1\endcsname\undefined
1896
1897
1898 \protected\xdefcsname\??fontinstanceready\m_font_asked_body\s!mm#one#two#rest\endcsname
1899 {\font_helpers_trigger{\m_font_asked_body\s!mm#one#two#rest}{\noexpand\font_rscale_mm}{\m_font_asked_body}{\normalunexpanded{#value}}}
1900 }
1901
1902
1903
1904\protected\def\font_basics_define_body_font_yes_mm[#one#two#rest=#value]
1905 {
1906 \gletcsname\??fontinstanceclass\fontclass\m_font_asked_body\s!mm#one#two#rest1\endcsname\undefined
1907
1908
1909 \protected\xdefcsname\??fontinstanceready\fontclass\m_font_asked_body\s!mm#one#two#rest\endcsname
1910 {\font_helpers_trigger{\m_font_asked_body\s!mm#one#two#rest}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}
1911 }
1912
1913\appendtoks
1914 \protected\def\font_basics_define_body_font_nop_mm[#one#two#rest=#value]
1915 {\letcsname\??fontinstanceclass\m_font_asked_body\s!mm#one#two#rest\endcsname\undefined
1916 \protected\xdefcsname\??fontinstanceready\m_font_asked_body\s!mm#one#two#rest\endcsname
1917 {\font_helpers_trigger{\m_font_asked_body\s!mm#one#two#rest}{\noexpand\font_rscale_mm}{\m_font_asked_body}{\normalunexpanded{#value}}}
1918 }
1919 \protected\def\font_basics_define_body_font_yes_mm[#one#two#rest=#value]
1920 {\gletcsname\??fontinstanceclass\fontclass\m_font_asked_body\s!mm#one#two#rest\endcsname\undefined
1921 \protected\xdefcsname\??fontinstanceready\fontclass\m_font_asked_body\s!mm#one#two#rest\endcsname
1922 {\font_helpers_trigger{\m_font_asked_body\s!mm#one#two#rest}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}
1923 }
1924\to \everycompactfontmode
1925
1926
1927
1928\protected\def\font_basics_define_body_font_body_identifier[#bodylist][#stylelist][#name]
1929 {\processcommalist[#bodylist]{\font_basics_define_body_font_body_identifier_a{#stylelist}{#name}}}
1930
1931\protected\def\font_basics_define_body_font_body_identifier_a#stylelist#name#body
1932 {\normalizebodyfontsize\m_font_asked_body{#body}
1933 \font_helpers_check_bodyfont_environment\m_font_asked_body\m_font_asked_body
1934 \processcommalist[#stylelist]{\font_basics_define_body_font_body_identifier_b{#name}}}
1935
1936\protected\def\font_basics_define_body_font_body_identifier_b#name#style
1937 {\edef\m_font_asked_style{#style}
1938
1939 \csname\??fontdefinitions#name:\m_font_asked_style\endcsname}
1940
1941\protected\def\font_basics_define_body_font_name_assignment[#name][#stylelist][#assignments]
1942 {\processcommalist[#stylelist]{\font_basics_define_body_font_name_assignment_a{#name}{#assignments}}}
1943
1944\protected\def\font_basics_define_body_font_name_assignment_a#name#assignments#style
1945 {
1946 \edefcsname\??fontdefinitions#name:#style\endcsname{\font_basics_define_body_font_default{#assignments}}}
1947
1948\protected\def\font_basics_define_body_font_name_identifier[#name][#stylelist][#identifier]
1949 {\processcommalist[#stylelist]{\font_basics_define_body_font_name_identifier_a{#name}{#identifier}}}
1950
1951\protected\def\font_basics_define_body_font_name_identifier_a#name#identifier#style
1952 {
1953 \ifcsname\??fontdefinitions#name:#style\endcsname
1954 \letcsname\??fontdefinitions#name:#style\expandafter\endcsname\csname\??fontdefinitions#identifier:#style\endcsname
1955 \else
1956 \defcsname\??fontdefinitions#name:#style\endcsname{\csname\??fontdefinitions#identifier:#style\endcsname}
1957 \fi}
1958
1959
1960
1961\newconditional\c_font_defining_unknown
1962\newconditional\c_font_defining_state
1963
1964\protected\def\font_helpers_define_unknown_font#body
1965 {\font_helpers_register_fontbody{#body}
1966 \c_font_defining_state\conditionalfalse
1967 \font_helpers_process_relative_size_list{\font_helpers_define_unknown_check_sizes{#body}}
1968 \ifconditional\c_font_defining_state
1969 \c_font_defining_state\conditionalfalse
1970 \font_helpers_process_style_list{\font_helpers_define_unknown_check_definitions{#body}}
1971 \ifconditional\c_font_defining_state
1972 \ifconditional\c_font_defining_environment_state\else
1973
1974 \clf_registerunknownbodysize{#body}
1975 \fi
1976 \c_font_defining_state\conditionalfalse
1977 \font_helpers_register_fontbody{#body}
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988 \fi
1989 \fi}
1990
1991\def\font_helpers_define_unknown_check_sizes#body#relativesize
1992 {\ifcsname\??fontenvironments\s!default#relativesize\endcsname
1993 \expandafter\normalizebodyfontsize\csname\??fontenvironments#body#relativesize\endcsname{\csname\??fontenvironments\s!default#relativesize\endcsname\dimexpr#body\relax}
1994 \c_font_defining_state\conditionaltrue
1995 \fi}
1996
1997\def\font_helpers_define_unknown_check_definitions#body#style
1998 {\ifcsname\??fontdefinitions\s!default:#style\endcsname
1999 \edef\m_font_asked_body{#body}
2000 \edef\m_font_asked_style{#style}
2001 \lastnamedcs
2002 \c_font_defining_state\conditionaltrue
2003 \fi}
2004
2005\def\font_helpers_define_unknown_check_relatives#body#relativesize
2006 {\ifcsname\??fontbodyknown\csname\??fontenvironments#body#relativesize\endcsname\endcsname \else
2007 \expandafter\font_helpers_define_unknown_font\csname\??fontenvironments#body#relativesize\endcsname
2008 \c_font_defining_state\conditionaltrue
2009 \fi}
2010
2011\protected\def\font_basics_define_body_font_default#assignments
2012 {\font_helpers_check_relative_font_size\m_font_asked_style
2013 \ifcsname\m_font_asked_style\endcsname\else
2014 \normalexpanded{\definefontstyle[\m_font_asked_style][\m_font_asked_style]}
2015 \fi
2016 \processcommalist[#assignments]\font_basics_define_body_font_defs
2017 \let\p_font_rscale\v_font_rscale_default}
2018
2019
2020
2021
2022\protected\def\font_basics_switch_points#body
2023 {\ifcsname\??fontbodyknown#body\endcsname \else
2024
2025 \font_helpers_define_unknown_font{#body}
2026 \fi
2027 \ifcsname\??fontbodyknown#body\endcsname
2028 \font_basics_complete_switch{#body}
2029 \localbodyfontsize#body\relax
2030 \normalizebodyfontsize\normalizedbodyfontsize\localbodyfontsize
2031 \font_helpers_check_bodyfont_environment\normalizedbodyfontsize\normalizedbodyfontsize
2032 \else
2033 \showmessage\m!fonts4{#body}
2034 \fi}
2035
2036\appendtoks
2037 \protected\def\font_basics_switch_points#body
2038 {\ifcsname\??fontbodyknown#body\endcsname \else
2039
2040 \font_helpers_define_unknown_font{#body}
2041 \fi
2042 \ifcsname\??fontbodyknown#body\endcsname
2043 \font_basics_complete_switch{#body}
2044 \localbodyfontsize#body\relax
2045 \normalizebodyfontsize\normalizedbodyfontsize\localbodyfontsize
2046 \font_helpers_check_bodyfont_environment\normalizedbodyfontsize\normalizedbodyfontsize
2047 \else
2048 \showmessage\m!fonts4{#body}
2049 \fi
2050 \glyphscale\numexpr\plushundred*\dimexpr\normalizedbodyfontsize\relax\maxcard\relax}
2051\to \everycompactfontmode
2052
2053\protected\def\font_basics_switch_style#style
2054 {\ifcsname\??fontstyle#style\endcsname
2055 \lastnamedcs
2056 \cdef\fontstyle{#style}
2057 \ifmmode\mr\fi
2058
2059 \else
2060 \showmessage\m!fonts5{#style}
2061 \fi}
2062
2063
2064
2065
2066\ifdefined\font_preloads_at_definition \else \let\font_preloads_at_definition\relax \fi
2067
2068\def\font_helpers_set_font#method#specification
2069 {\edef\m_font_specification{#specification}
2070 \ifempty\m_font_specification \else
2071 \ifx\m_font_specification\v!global
2072 \restoreglobalbodyfont
2073 \else
2074 \processcommacommand[\m_font_specification]{\font_helpers_set_font_set_font{#method}}
2075 \processcommacommand[\m_font_specification]{\font_helpers_set_font_check_size}
2076 \ifproductionrun
2077 \font_preloads_at_definition
2078 \font_basics_switch_points\normalizedbodyfontsize
2079 \font_basics_switch_style\fontstyle
2080 \ifempty\defaultfontclass
2081 \let\defaultfontclass\fontclass
2082 \fi
2083 \fi
2084 \fi
2085 \currentxfontsize\zerocount
2086 \fi}
2087
2088\def\font_helpers_set_font_check_size#option
2089 {\ifchkdimension#option\or
2090 \font_helpers_check_bodyfont_environment{#option}{#option}
2091 \fi}
2092
2093\def\font_helpers_set_font_set_font#method#option
2094 {\ifempty{#option}\else
2095 \font_helpers_set_font_set_font_option{#method}{#option}
2096 \fi}
2097
2098\def\font_helpers_set_font_set_font_option#method#option
2099 {\ifchkdimension#option\or
2100 \expandafter\font_helpers_set_font_set_font_option_body
2101 \else
2102 \expandafter\font_helpers_set_font_set_font_option_keyword
2103 \fi{#method}{#option}{#option}}
2104
2105\newmacro\m_font_keyword
2106
2107\protected\def\font_helpers_set_font_set_font_option_keyword#method#keyword#message
2108 {\edef\m_font_keyword{#keyword}
2109 \ifcsname\??fontenvironments\normalizedbodyfontsize\m_font_keyword\endcsname
2110 \edef\m_font_step{\font_bodyfontvariable\m_font_keyword}
2111 \normalexpanded{\font_helpers_set_font_set_font_option_body{#method}{\m_font_step}{#message}}
2112 \orelse\ifx\m_font_keyword\v!reset
2113 \lettonothing\fontstyle
2114 \lettonothing\fontsize
2115 \orelse\ifcsname\??fontstyle\m_font_keyword\endcsname
2116 \let\fontstyle\m_font_keyword
2117 \else
2118 \setcurrentfontclass\m_font_keyword
2119 \ifcase#method\relax
2120 \let\globalfontclass\globalfontclass
2121 \else
2122 \let\globalfontclass\fontclass
2123 \fi
2124 \font_helpers_set_fontstyle_of_fontclass
2125 \fi}
2126
2127\def\font_helpers_set_fontstyle_of_fontclass
2128 {\let\fontstyle\s!rm}
2129
2130\protected\def\font_helpers_set_font_set_font_option_body#method#body#message
2131 {\normalizebodyfontsize\normalizedsetfont{#body}
2132 \ifcsname\??fontbodyknown\normalizedsetfont\endcsname \else
2133 \font_helpers_define_unknown_font\normalizedsetfont
2134 \fi
2135 \ifcsname\??fontbodyknown\normalizedsetfont\endcsname
2136 \localbodyfontsize\normalizedsetfont
2137 \let\normalizedbodyfontsize\normalizedsetfont
2138 \else
2139 \showmessage\m!fonts4{#message}
2140
2141 \fi}
2142
2143
2144
2145\permanent\protected\def\registerfontclass#class
2146 {\gletcsname\??fontclassyes#class\endcsname\v!yes}
2147
2148\permanent\protected\def\setcurrentfontclass#class
2149 {\ifcsname\??bodyfontalias#class\endcsname
2150 \constant\lettolastnamedcs\fontclass
2151 \orelse\ifcsname\??fontclassyes#class\endcsname
2152 \cdef\fontclass{#class}
2153 \orelse\ifcsname\??fontclassnop#class\endcsname
2154
2155 \else
2156 \fonts_helpers_try_currentfontclass{#class}
2157 \fi}
2158
2159\ifdefined\fonts_helpers_try_currentfontclass \else
2160
2161 \protected\def\fonts_helpers_try_currentfontclass#typeface
2162 {\letcsname\??fontclassnop#typeface\endcsname\empty}
2163
2164\fi
2165
2166
2167
2168\permanent\protected\def\setcurrentfont#body#style#alternative#size
2169 {\cdef\fontbody {#body}
2170 \cdef\fontstyle {#style}
2171 \cdef\fontalternative{#alternative}
2172 \cdef\fontsize {#size}
2173 \font_helpers_check_big_math_synchronization
2174 \font_helpers_synchronize_font}
2175
2176\permanent\protected\def\setcurrentfontbody#body
2177 {\cdef\fontbody{#body}
2178 \font_helpers_synchronize_font}
2179
2180
2181
2182\ifdefined\font_typescripts_inherit_check \else
2183 \let\font_typescripts_inherit_check\gobbleoneargument
2184\fi
2185
2186\protected\def\font_helpers_set_current_font_style#style
2187 {\cdef\fontstyle{#style}
2188 \font_typescripts_inherit_check\fontstyle
2189 \ifmmode\mr\fi
2190 \font_helpers_synchronize_font}
2191
2192\mutable\let\f_font_rscale_used\plusone
2193
2194\appendtoks
2195
2196 \mutable\let\f_font_rscale_used\plusone
2197 \protected\def\font_helpers_set_current_font_style#style
2198 {\cdef\fontstyle{#style}
2199 \font_typescripts_inherit_check\fontstyle
2200 \ifmmode\mr\fi
2201 \font_helpers_synchronize_font
2202 \edef\f_font_rscale_used{\font_rscale_xx{#style}}}
2203\to \everycompactfontmode
2204
2205\protected\def\font_helpers_set_current_xsize_alternative#xsize#alternative
2206 {\cdef\fontface{#xsize}
2207 \cdef\fontalternative{#alternative}
2208 \font_helpers_synchronize_font}
2209
2210\appendtoks
2211 \protected\def\font_helpers_set_current_xsize_alternative#xsize#alternative
2212 {\cdef\fontface{0}
2213 \cdef\fontalternative{#alternative}
2214 \currentxfontsize#xsize\relax
2215 \font_helpers_synchronize_font}
2216\to \everycompactfontmode
2217
2218\protected\def\font_helpers_set_current_font_alternative#alternative
2219 {\cdef\fontalternative{#alternative}
2220 \font_helpers_synchronize_font}
2221
2222\protected\def\font_helpers_set_current_font_size#size
2223 {\cdef\fontsize{#size}
2224 \font_helpers_check_big_math_synchronization
2225 \font_helpers_synchronize_font}
2226
2227\protected\def\font_helpers_set_current_font_style_alternative#style#alternative
2228 {\cdef\fontstyle {#style}
2229 \cdef\fontalternative{#alternative}
2230 \font_helpers_synchronize_font}
2231
2232\protected\def\font_helpers_set_current_font_style_size#style#size
2233 {\cdef\fontstyle{#style}
2234 \cdef\fontsize {#size}
2235 \font_helpers_check_big_math_synchronization
2236 \font_helpers_synchronize_font}
2237
2238\protected\def\font_helpers_set_current_font_alternative_size#alternative#size
2239 {\cdef\fontalternative{#alternative}
2240 \cdef\fontsize {#size}
2241 \font_helpers_check_big_math_synchronization
2242 \font_helpers_synchronize_font}
2243
2244\protected\def\font_helpers_set_current_font_style_alternative_size#style#alternative#size
2245 {\cdef\fontstyle {#style}
2246 \cdef\fontalternative{#alternative}
2247 \cdef\fontsize {#size}
2248 \font_helpers_check_big_math_synchronization
2249 \font_helpers_synchronize_font}
2250
2251\protected\def\font_helpers_synchronize_font
2252 {\ifempty\fontclass
2253 \applyfontstrategies
2254 \else
2255 \applyfontclassstrategies
2256 \fi
2257 \c_font_auto_size\conditionalfalse
2258 \ifskipfontcharacteristics \else
2259 \expand\everyfont
2260 \expand\everyfontswitch
2261 \fi}
2262
2263\appendtoks
2264 \protected\def\font_helpers_synchronize_font
2265 {\ifempty\fontclass
2266 \applyfontstrategies
2267 \else
2268 \applyfontclassstrategies
2269 \fi
2270 \c_font_auto_size\conditionalfalse
2271 \ifcase\currentxfontsize
2272
2273 \or
2274 \normaltx
2275 \else
2276 \normaltxx
2277 \fi
2278 \ifskipfontcharacteristics \else
2279 \expand\everyfont
2280 \expand\everyfontswitch
2281 \fi}
2282\to \everycompactfontmode
2283
2284
2285
2286
2287\def\font_helpers_check_strategy_class_a
2288 {\ifcsname\??fontinstanceready\fontclass\fontbody\fontstyle\fontalternative\fontsize\fontface\endcsname
2289 \c_font_auto_size\conditionalfalse
2290 \lastnamedcs
2291 \else
2292 \expandafter\font_helpers_check_strategy_class_b
2293 \fi}
2294
2295\def\font_helpers_check_strategy_class_b
2296 {\ifcsname\??fontinstanceready\fontclass\fontbody\fontstyle\fontalternative\defaultfontsize\fontface\endcsname
2297 \c_font_auto_size\conditionaltrue
2298 \lastnamedcs
2299 \else
2300 \expandafter\font_helpers_check_strategy_class_c
2301 \fi}
2302
2303\def\font_helpers_check_strategy_class_c
2304 {\ifcsname\??fontinstanceready\fontclass\fontbody\fontstyle\defaultfontalternative\fontsize\fontface\endcsname
2305 \c_font_auto_size\conditionaltrue
2306 \lastnamedcs
2307 \else
2308 \expandafter\font_helpers_check_strategy_class_d
2309 \fi}
2310
2311\def\font_helpers_check_strategy_class_d
2312 {\ifcsname\??fontinstanceready\fontclass\fontbody\fontstyle\defaultfontalternative\defaultfontsize\fontface\endcsname
2313 \c_font_auto_size\conditionaltrue
2314 \lastnamedcs
2315 \else
2316 \expandafter\font_helpers_check_strategy_class_e
2317 \fi}
2318
2319\def\font_helpers_check_strategy_class_e
2320 {\ifcsname\??fontinstanceready\fontclass\fontbody\defaultfontstyle\defaultfontalternative\defaultfontsize\fontface\endcsname
2321 \c_font_auto_size\conditionalfalse
2322 \lastnamedcs
2323 \else
2324 \expandafter\font_helpers_check_strategy_class_f
2325 \fi}
2326
2327\def\font_helpers_check_strategy_class_f
2328 {\ifcsname\??fontinstanceready\fontclass\defaultfontbody\defaultfontstyle\defaultfontalternative\defaultfontsize\fontface\endcsname
2329 \c_font_auto_size\conditionaltrue
2330 \lastnamedcs
2331 \else
2332 \expandafter\font_helpers_check_strategy_a
2333 \fi}
2334
2335\appendtoks
2336 \def\font_helpers_check_strategy_class_a
2337 {\ifcsname\??fontinstanceready\fontclass\fontbody\fontstyle\fontalternative\fontsize\endcsname
2338 \c_font_auto_size\conditionalfalse
2339 \lastnamedcs
2340 \else
2341 \expandafter\font_helpers_check_strategy_class_b
2342 \fi}
2343
2344 \def\font_helpers_check_strategy_class_b
2345 {\ifcsname\??fontinstanceready\fontclass\fontbody\fontstyle\fontalternative\defaultfontsize\endcsname
2346 \c_font_auto_size\conditionaltrue
2347 \lastnamedcs
2348 \else
2349 \expandafter\font_helpers_check_strategy_class_c
2350 \fi}
2351
2352 \def\font_helpers_check_strategy_class_c
2353 {\ifcsname\??fontinstanceready\fontclass\fontbody\fontstyle\defaultfontalternative\fontsize\endcsname
2354 \c_font_auto_size\conditionaltrue
2355 \lastnamedcs
2356 \else
2357 \expandafter\font_helpers_check_strategy_class_d
2358 \fi}
2359
2360 \def\font_helpers_check_strategy_class_d
2361 {\ifcsname\??fontinstanceready\fontclass\fontbody\fontstyle\defaultfontalternative\defaultfontsize\endcsname
2362 \c_font_auto_size\conditionaltrue
2363 \lastnamedcs
2364 \else
2365 \expandafter\font_helpers_check_strategy_class_e
2366 \fi}
2367
2368 \def\font_helpers_check_strategy_class_e
2369 {\ifcsname\??fontinstanceready\fontclass\fontbody\defaultfontstyle\defaultfontalternative\defaultfontsize\endcsname
2370 \c_font_auto_size\conditionalfalse
2371 \lastnamedcs
2372 \else
2373 \expandafter\font_helpers_check_strategy_class_f
2374 \fi}
2375
2376 \def\font_helpers_check_strategy_class_f
2377 {\ifcsname\??fontinstanceready\fontclass\defaultfontbody\defaultfontstyle\defaultfontalternative\defaultfontsize\endcsname
2378 \c_font_auto_size\conditionaltrue
2379 \lastnamedcs
2380 \else
2381 \expandafter\font_helpers_check_strategy_a
2382 \fi}
2383\to \everycompactfontmode
2384
2385
2386
2387\def\font_helpers_check_strategy_a
2388 {\ifcsname\??fontinstanceready\fontbody\fontstyle\fontalternative\fontsize\fontface\endcsname
2389 \c_font_auto_size\conditionalfalse
2390 \lastnamedcs
2391 \else
2392 \expandafter\font_helpers_check_strategy_b
2393 \fi}
2394
2395\def\font_helpers_check_strategy_b
2396 {\ifcsname\??fontinstanceready\fontbody\fontstyle\fontalternative\defaultfontsize\fontface\endcsname
2397 \c_font_auto_size\conditionaltrue
2398 \lastnamedcs
2399 \else
2400 \expandafter\font_helpers_check_strategy_c
2401 \fi}
2402
2403\def\font_helpers_check_strategy_c
2404 {\ifcsname\??fontinstanceready\fontbody\fontstyle\defaultfontalternative\fontsize\fontface\endcsname
2405 \c_font_auto_size\conditionaltrue
2406 \lastnamedcs
2407 \else
2408 \expandafter\font_helpers_check_strategy_d
2409 \fi}
2410
2411\def\font_helpers_check_strategy_d
2412 {\ifcsname\??fontinstanceready\fontbody\fontstyle\defaultfontalternative\defaultfontsize\fontface\endcsname
2413 \c_font_auto_size\conditionaltrue
2414 \lastnamedcs
2415 \else
2416 \expandafter\font_helpers_check_strategy_e
2417 \fi}
2418
2419\def\font_helpers_check_strategy_e
2420 {\ifcsname\??fontinstanceready\fontbody\defaultfontstyle\defaultfontalternative\defaultfontsize\fontface\endcsname
2421 \c_font_auto_size\conditionalfalse
2422 \lastnamedcs
2423 \else
2424 \expandafter\font_helpers_check_strategy_f
2425 \fi}
2426
2427\def\font_helpers_check_strategy_f
2428 {\ifcsname\??fontinstanceready\defaultfontbody\defaultfontstyle\defaultfontalternative\defaultfontsize\fontface\endcsname
2429 \c_font_auto_size\conditionaltrue
2430 \lastnamedcs
2431 \fi}
2432
2433\appendtoks
2434 \def\font_helpers_check_strategy_a
2435 {\ifcsname\??fontinstanceready\fontbody\fontstyle\fontalternative\fontsize\endcsname
2436 \c_font_auto_size\conditionalfalse
2437 \lastnamedcs
2438 \else
2439 \expandafter\font_helpers_check_strategy_b
2440 \fi}
2441
2442 \def\font_helpers_check_strategy_b
2443 {\ifcsname\??fontinstanceready\fontbody\fontstyle\fontalternative\defaultfontsize\endcsname
2444 \c_font_auto_size\conditionaltrue
2445 \lastnamedcs
2446 \else
2447 \expandafter\font_helpers_check_strategy_c
2448 \fi}
2449
2450 \def\font_helpers_check_strategy_c
2451 {\ifcsname\??fontinstanceready\fontbody\fontstyle\defaultfontalternative\fontsize\endcsname
2452 \c_font_auto_size\conditionaltrue
2453 \lastnamedcs
2454 \else
2455 \expandafter\font_helpers_check_strategy_d
2456 \fi}
2457
2458 \def\font_helpers_check_strategy_d
2459 {\ifcsname\??fontinstanceready\fontbody\fontstyle\defaultfontalternative\defaultfontsize\endcsname
2460 \c_font_auto_size\conditionaltrue
2461 \lastnamedcs
2462 \else
2463 \expandafter\font_helpers_check_strategy_e
2464 \fi}
2465
2466 \def\font_helpers_check_strategy_e
2467 {\ifcsname\??fontinstanceready\fontbody\defaultfontstyle\defaultfontalternative\defaultfontsize\endcsname
2468 \c_font_auto_size\conditionalfalse
2469 \lastnamedcs
2470 \else
2471 \expandafter\font_helpers_check_strategy_f
2472 \fi}
2473
2474 \def\font_helpers_check_strategy_f
2475 {\ifcsname\??fontinstanceready\defaultfontbody\defaultfontstyle\defaultfontalternative\defaultfontsize\endcsname
2476 \c_font_auto_size\conditionaltrue
2477 \lastnamedcs
2478 \fi}
2479\to \everycompactfontmode
2480
2481\permanent\let\applyfontstrategies \font_helpers_check_strategy_a
2482\permanent\let\applyfontclassstrategies\font_helpers_check_strategy_class_a
2483
2484\appendtoks
2485 \enforced\permanent\let\applyfontstrategies \font_helpers_check_strategy_a
2486 \enforced\permanent\let\applyfontclassstrategies\font_helpers_check_strategy_class_a
2487\to \everycompactfontmode
2488
2489
2490
2491\newconditional\c_font_synchronize \c_font_synchronize\conditionaltrue
2492
2493\prependtoks
2494 \ifconditional\c_font_synchronize
2495 \font_helpers_synchronize_math
2496 \font_helpers_synchronize_font
2497 \fi
2498\to \everybodyfont
2499
2500
2501
2502
2503
2504
2505
2506\permanent\protected\def\resettx
2507 {\ifzeronum\currentxfontsize\else
2508 \currentxfontsize\zerocount
2509 \enforced\let\tx\normaltx
2510 \enforced\let\txx\normaltxx
2511
2512
2513 \let\fontsize\empty
2514 \font_scale_defined
2515
2516
2517 \fi}
2518
2519\prependtoks
2520 \currentxfontsize\zerocount
2521 \enforced\let\tx \normaltx
2522 \enforced\let\txx\normaltxx
2523 \font_scale_defined
2524\to \everysetupbodyfont
2525
2526\prependtoks
2527 \currentxfontsize\zerocount
2528 \enforced\let\tx \normaltx
2529 \enforced\let\txx\normaltxx
2530 \font_scale_defined
2531\to \everyswitchtobodyfont
2532
2533\def\font_helpers_set_current_font_xxx_alternative#alternative#xsize#scriptstyle
2534 {\ifmmode
2535 #scriptstyle
2536 \else
2537 \font_helpers_set_current_xsize_alternative{#xsize}{#alternative}
2538 \fi}
2539
2540\def\font_helpers_set_current_font_x_alternative#alternative
2541 {
2542 \font_helpers_set_current_font_xxx_alternative{#alternative}{4}\scriptstyle
2543 \currentxfontsize\plusone
2544 \enforced\let\tx\txx}
2545
2546\def\font_helpers_set_current_font_xx_alternative#alternative
2547 {
2548 \font_helpers_set_current_font_xxx_alternative{#alternative}{5}\scriptscriptstyle
2549 \currentxfontsize\plustwo
2550 \enforced\lettonothing\tx
2551 \enforced\lettonothing\txx}
2552
2553\appendtoks
2554 \def\font_helpers_set_current_font_x_alternative#alternative
2555 {
2556 \currentxfontsize\plusone
2557 \font_helpers_set_current_font_xxx_alternative{#alternative}\plusone\scriptstyle
2558 \enforced\let\tx\txx}
2559 \def\font_helpers_set_current_font_xx_alternative#alternative
2560 {
2561 \currentxfontsize\plusone
2562 \font_helpers_set_current_font_xxx_alternative{#alternative}\plustwo\scriptscriptstyle
2563 \enforced\lettonothing\tx
2564 \enforced\lettonothing\txx}
2565\to \everycompactfontmode
2566
2567
2568
2569
2570\def\font_helpers_set_current_font_x_style_alternative #alternative{\csname#alternative\endcsname\tx}
2571\def\font_helpers_set_current_font_xx_style_alternative#alternative{\csname#alternative\endcsname\txx}
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594\def\font_scale_defined
2595 {\let\fontface\!!zerocount
2596
2597 \font_helpers_synchronize_font}
2598
2599\def\font_scale_defined_x
2600 {\let\fontface\!!plusfour
2601
2602 \font_helpers_synchronize_font}
2603
2604\def\font_scale_defined_xx
2605 {\let\fontface\!!plusfive
2606
2607 \font_helpers_synchronize_font}
2608
2609\appendtoks
2610 \def\font_scale_defined
2611
2612
2613 {\glyphscale\dimexpr\f_font_rscale_used\dimexpr\textface*\plushundred\onepoint\relax\relax
2614 \ifskipfontcharacteristics \else
2615 \expand\everyfont
2616 \expand\everyfontswitch
2617 \fi}
2618 \def\font_scale_defined_x
2619
2620
2621 {\glyphscale\dimexpr\f_font_rscale_used\dimexpr\xtextface*\plushundred\onepoint\relax\relax
2622 \ifskipfontcharacteristics \else
2623 \expand\everyfont
2624 \expand\everyfontswitch
2625 \fi}
2626 \def\font_scale_defined_xx
2627
2628
2629 {\glyphscale\dimexpr\f_font_rscale_used\dimexpr\xxtextface*\plushundred\onepoint\relax\relax
2630 \ifskipfontcharacteristics \else
2631 \expand\everyfont
2632 \expand\everyfontswitch
2633 \fi}
2634\to \everycompactfontmode
2635
2636
2637
2638\permanent\protected\def\tx
2639 {\currentxfontsize\plusone
2640 \ifmmode
2641 \scriptstyle
2642 \else
2643 \font_scale_defined_x
2644 \fi
2645 \enforced\let\tx\txx}
2646
2647\permanent\protected\def\txx
2648 {\currentxfontsize\plustwo
2649 \ifmmode
2650 \scriptscriptstyle
2651 \else
2652 \font_scale_defined_xx
2653 \fi
2654 \enforced\lettonothing\tx
2655 \enforced\lettonothing\txx}
2656
2657\permanent\protected\def\sx
2658 {\currentxfontsize\plusone
2659 \ifmmode
2660 \scriptstyle
2661 \else
2662 \font_scale_defined_x
2663 \fi
2664 \enforced\let\tx\txx
2665 \enforced\let\sx\sxx}
2666
2667\permanent\protected\def\sxx
2668 {\currentxfontsize\plustwo
2669 \ifmmode
2670 \scriptscriptstyle
2671 \else
2672 \font_scale_defined_xx
2673 \fi
2674 \enforced\lettonothing\tx
2675 \enforced\lettonothing\txx
2676 \enforced\lettonothing\sx
2677 \enforced\lettonothing\sxx}
2678
2679\aliased\let\normaltx \tx
2680\aliased\let\normaltxx\txx
2681
2682\aliased\let\normalsx \sx
2683\aliased\let\normalsxx\sxx
2684
2685\lettonothing\useinheritxsizes
2686\lettonothing\usedefinedxsizes
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696\permanent\protected\def\textface {\currentbodyfontdimension\s!text }
2697\permanent\protected\def\scriptface {\currentbodyfontdimension\s!script }
2698\permanent\protected\def\scriptscriptface{\currentbodyfontdimension\s!scriptscript}
2699\permanent\protected\def\xtextface {\currentbodyfontdimension\s!x }
2700\permanent\protected\def\xxtextface {\currentbodyfontdimension\s!xx }
2701
2702\protected\def\font_basics_complete_switch#size
2703 {\bodyfontsize#size\relax
2704 \normalizebodyfontsize\normalizedbodyfontsize\bodyfontsize}
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732\ifdefined\saveinterlinespace \else \let\saveinterlinespace \relax \fi
2733\ifdefined\restoreinterlinespace \else \let\restoreinterlinespace\relax \fi
2734
2735
2736
2737
2738\permanent\protected\tolerant\def\setupbodyfont[#specification]
2739 {\ifparameter#specification\or
2740 \font_helpers_set_font\plusone{#specification}
2741 \globalbodyfontsize\localbodyfontsize
2742 \normalizebodyfontsize\normalizedglobalbodyfontsize\globalbodyfontsize
2743 \let\globalfontstyle\fontstyle
2744 \ifproductionrun
2745 \expand\everybodyfont
2746 \expand\everyglobalbodyfont
2747 \saveinterlinespace
2748 \fi
2749 \expand\everysetupbodyfont
2750 \else
2751 \restoreglobalbodyfont
2752 \saveinterlinespace
2753 \fi}
2754
2755\permanent\protected\def\switchtobodyfont[#specification]
2756 {\ifparameter#specification\or
2757 \font_basics_switchtobodyfont{#specification}
2758 \fi}
2759
2760\protected\def\font_basics_switchtobodyfont#specification
2761 {\edef\m_font_step{\font_bodyfontvariable{#specification}}
2762 \ifempty\m_font_step
2763 \font_helpers_set_font\zerocount{#specification}
2764 \else
2765 \font_helpers_switch_bodyfont_step
2766 \fi
2767 \expand\everybodyfont
2768 \expand\everyswitchtobodyfont
2769\expand\everyfont
2770\expand\everyfontswitch
2771 }
2772
2773\permanent\protected\def\usebodyfontparameter#1
2774 {\edef\m_font_bodyfont_asked{#1\c!bodyfont}
2775 \ifempty\m_font_bodyfont_asked\else
2776 \font_basics_switchtobodyfont\m_font_bodyfont_asked
2777 \fi}
2778
2779\def\font_helpers_switch_bodyfont_step
2780 {\font_basics_switch_points\m_font_step
2781 \font_basics_switch_style \fontstyle}
2782
2783
2784
2785
2786\permanent\protected\def\fastswitchtobodyfont#name
2787 {\ifcsname\??fontenvironments\normalizedbodyfontsize#name\endcsname
2788
2789 \lettolastnamedcs\p_bodyfont
2790 \ifcsname\??fontbodyknown\p_bodyfont\endcsname
2791 \font_basics_complete_switch\p_bodyfont
2792 \localbodyfontsize\p_bodyfont\relax
2793 \fi
2794 \fi
2795 \csname\??fontstyle\fontstyle\endcsname
2796 \expand\everybodyfont
2797\expand\everyfontswitch
2798 }
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829\installcorenamespace{bodyfontalias}
2830
2831\permanent\protected\def\usebodyfont[#1]
2832 {\ifempty\fontclass
2833 \setupbodyfont[#1]
2834 \else
2835 \switchtobodyfont[#1]
2836 \fullrestoreglobalbodyfont
2837 \fi}
2838
2839\permanent\protected\def\aliasbodyfont[#1]#*[#2]
2840 {\ifparameter#2\or
2841 \cdefcsname\??bodyfontalias#1\endcsname{#2}
2842 \fi}
2843
2844\fetchmodulecommand \showbodyfontstate \f!font_run
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864\permanent\protected\def\fontchar #character{\clf_fontchar{#character}}
2865\permanent\protected\def\fontcharbyindex #index{\clf_fontcharbyindex#index\relax}
2866\permanent \def\tochar #specifications{\clf_tochar{#specifications}}
2867
2868
2869
2870\permanent\def\purefontname#font{\clf_purefontname{\fontname#font}}
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884\permanent\protected\def\switchstyleonly
2885 {\doifelsenextoptionalcs\font_basics_switch_style_only_opt\font_basics_switch_style_only_arg}
2886
2887\def\font_basics_switch_style_only_arg#name
2888 {\font_helpers_set_current_font_style{\csname\??fontshortstyle\checkedstrippedcsname#name\endcsname}
2889 \expand\everybodyfont}
2890
2891\def\font_basics_switch_style_only_opt[#name]
2892 {\font_helpers_set_current_font_style{\csname\??fontshortstyle#name\endcsname}
2893 \expand\everybodyfont}
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907\permanent\tolerant\protected\def\definebodyfontswitch[#command]#spacer[#specification]
2908 {\frozen\protected\defcsname#command\endcsname{\switchtobodyfont[#specification]}}
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918\newmacro\m_font_step
2919
2920\def\font_helpers_set_bodyfont_step#step
2921 {\edef\m_font_step{\font_bodyfontvariable{#step}}
2922 \font_basics_switch_points\m_font_step
2923 \font_basics_switch_style \fontstyle}
2924
2925\permanent\protected\def\setsmallbodyfont{\font_helpers_set_bodyfont_step\v!small\expand\everybodyfont}
2926\permanent\protected\def\setbigbodyfont {\font_helpers_set_bodyfont_step\v!big \expand\everybodyfont}
2927
2928\permanent\protected\def\setmainbodyfont
2929 {\font_basics_switch_points\normalizedbodyfontsize
2930 \font_basics_switch_style\fontstyle
2931 \expand\everybodyfont
2932 \expand\everyglobalbodyfont
2933 \saveinterlinespace}
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948\mutable\let\globalfontstyle\s!rm
2949
2950\permanent\protected\def\fullrestoreglobalbodyfont
2951 {\let\fontsize\defaultfontsize
2952 \let\fontbody\defaultfontbody
2953 \let\fontface\defaultfontface
2954 \currentxfontsize\zerocount
2955 \let\fontclass\globalfontclass
2956 \font_basics_switch_points\normalizedglobalbodyfontsize
2957 \font_basics_switch_style\globalfontstyle
2958 \redoconvertfont
2959 \tf
2960 \expand\everybodyfont
2961 \expand\everyglobalbodyfont
2962 \saveinterlinespace}
2963
2964\permanent\protected\def\partialrestoreglobalbodyfont
2965 {\let\fontsize\defaultfontsize
2966 \let\fontbody\defaultfontbody
2967 \let\fontface\defaultfontface
2968 \currentxfontsize\zerocount
2969 \redoconvertfont
2970 \tf
2971 \expand\everybodyfont
2972 \expand\everyglobalbodyfont
2973 \saveinterlinespace}
2974
2975\permanent\protected\def\restoreglobalbodyfont
2976 {\ifx\fontclass\globalfontclass
2977 \ifx\fontstyle\globalfontstyle
2978 \ifx\normalizedbodyfontsize\normalizedglobalbodyfontsize
2979 \partialrestoreglobalbodyfont
2980 \else
2981 \fullrestoreglobalbodyfont
2982 \fi
2983 \else
2984 \fullrestoreglobalbodyfont
2985 \fi
2986 \else
2987 \fullrestoreglobalbodyfont
2988 \fi}
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005\installcorenamespace{predefinedfont}
3006
3007\permanent\protected\def\predefinefont[#1]#*[#2]
3008 {\protected\gdefcsname#1\endcsname{\font_basics_predefine{#1}{#2}}}
3009
3010\permanent\protected\def\predefinedfont[#1]
3011 {\ifcsname\??predefinedfont#1\endcsname
3012 \lastnamedcs
3013 \else
3014 \font_basics_predefined{#1}
3015 \fi}
3016
3017\protected\def\font_basics_predefine#1#2
3018 {\definedfont[#2]
3019 \gletcsname#1\expandafter\endcsname\csname\v_font_identifier_basic\endcsname}
3020
3021\protected\def\font_basics_predefined#1
3022 {\font_basics_predefine{\??predefinedfont#1}{#1}}
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042\permanent\protected\def\saverunningstyleandcolor
3043 {\enforced\permanent\protected\edef\restorerunningstyleandcolor
3044 {\setfontid \the\fontid\font
3045 \glyphscale \the\glyphscale
3046 \glyphxscale \the\glyphxscale
3047 \glyphyscale \the\glyphyscale
3048 \glyphslant \the\glyphslant
3049 \glyphweight \the\glyphweight
3050 \c_attr_colormodel \the\c_attr_colormodel
3051 \c_attr_color \the\c_attr_color
3052 \c_attr_transparency\the\c_attr_transparency
3053 \relax}}
3054
3055\aliased\let\restorerunningstyleandcolor\relax
3056
3057
3058
3059
3060
3061\aliased\let\getprivateglyphslot\clf_getprivateglyphslot
3062
3063\aliased\let\getprivatechar \clf_getprivatechar
3064\aliased\let\getprivatemathchar \clf_getprivatemathchar
3065\aliased\let\getprivateslot \clf_getprivateslot
3066
3067
3068
3069
3070\permanent\protected\def\privatechar
3071 {\ifmmode
3072 \expandafter\getprivatemathchar
3073 \else
3074 \expandafter\getprivatechar
3075 \fi}
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098\permanent\tolerant\protected\def\definefontcolorpalette[#1]#*[#2]
3099 {\clf_definefontcolorpalette{#1}{#2}}
3100
3101
3102
3103
3104
3105
3106\permanent\protected\def\usefontpath[#1]
3107 {\clf_addfontpath{#1}}
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122\appendtoks
3123 \edef\m_list{\fontsparameter\s!serif}
3124 \ifempty\m_list\else
3125 \registerfallbackfont[\s!serif][\m_list]
3126 \fi
3127 \edef\m_list{\fontsparameter\s!sans}
3128 \ifempty\m_list\else
3129 \registerfallbackfont[\s!sans][\m_list]
3130 \fi
3131 \edef\m_list{\fontsparameter\s!mono}
3132 \ifempty\m_list\else
3133 \registerfallbackfont[\s!mono][\m_list]
3134 \fi
3135\to \everysetupfonts
3136
3137
3138
3139
3140\definecolor[currentfont] [darkgray]
3141
3142\permanent\tolerant\protected\def\showcurrentfont[#1]
3143 {\dontleavehmode\bgroup\setbox\scratchbox\hpack\bgroup
3144 \startcolor[currentfont]
3145 \scratchdimen #1\exheight
3146 \ifdim\scratchdimen<\zeropoint
3147 \scratchheight\strutht
3148 \scratchdepth \strutdp
3149 \else
3150 \scratchheight\strutht
3151 \scratchdepth \strutdp
3152 \fi
3153 \virtualvrule
3154 \s!height \scratchheight
3155 \s!depth \scratchdepth
3156 \s!width .5\onepoint
3157 \relax
3158 \ifdim\scratchdimen>\zeropoint
3159 \raise{\strutht\scratchdimen1.5\exheight}
3160 \else
3161 \lower{\strutdp\scratchdimen1.5\exheight}
3162 \fi
3163 \hpack to \zeropoint \bgroup\normalexpanded{
3164 \tinyinfofont
3165 \hpack to \zeropoint\bgroup
3166 \hss
3167 \iftok{\fontspecifiedname\font}{\fontname\font}\else
3168 (\fontspecifiedname\font)
3169 \fi
3170 (\fontname\font)
3171 \kern.5\onepoint
3172 \egroup
3173 \kern\onepoint
3174 (
3175 \ifempty\fontclass.\else\fontclass\fi,
3176 \ifempty\fontstyle.\else\fontstyle\fi,
3177 \fontbody
3178 )
3179 (
3180 \ifnum\glyphscale =\plusthousand .\else\the\glyphscale \fi,
3181 \ifnum\glyphxscale=\plusthousand .\else\the\glyphxscale\fi,
3182 \ifnum\glyphyscale=\plusthousand .\else\the\glyphyscale\fi
3183 )
3184 (
3185 \ifnum\glyphslant =\zerocount .\else\the\glyphslant \fi,
3186 \ifnum\glyphweight=\zerocount .\else\the\glyphweight\fi
3187 )
3188 (\toscaled\xtextface,\toscaled\xxtextface)\hss
3189 }
3190 \egroup
3191 \stopcolor
3192 \egroup
3193 \smashbox\scratchbox
3194 \box\scratchbox
3195 \egroup}
3196
3197\protect \endinput
3198 |