diff options
author | Hans Hagen <pragma@wxs.nl> | 2020-10-31 00:09:22 +0100 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2020-10-31 00:09:22 +0100 |
commit | 7043cd3b7046f6a11112a5d49c4ae5e2dc0c6896 (patch) | |
tree | 92ffcd258fb29e37b4a136eb071fbfd0717be29e /tex/context/base/mkiv/font-ini.mklx | |
parent | a0270f13065d116355a953c6f246cbba26289fc2 (diff) | |
download | context-7043cd3b7046f6a11112a5d49c4ae5e2dc0c6896.tar.gz |
2020-10-30 22:27:00
Diffstat (limited to 'tex/context/base/mkiv/font-ini.mklx')
-rw-r--r-- | tex/context/base/mkiv/font-ini.mklx | 338 |
1 files changed, 151 insertions, 187 deletions
diff --git a/tex/context/base/mkiv/font-ini.mklx b/tex/context/base/mkiv/font-ini.mklx index 882f879a2..a9e01e7ec 100644 --- a/tex/context/base/mkiv/font-ini.mklx +++ b/tex/context/base/mkiv/font-ini.mklx @@ -12,6 +12,8 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. +% todo: frozen tolerant iftok etc + % todo: < 3 pt => 3pt % todo: check where more class usage % todo: split font-nam (style/alternative/size) @@ -326,12 +328,12 @@ \newtoks\t_font_tracers_definitions -\unexpanded\def\tracefontdefinitions +\permanent\protected\def\tracefontdefinitions {\the\t_font_tracers_definitions} %D Some housekeeping macros: -\unexpanded\def\setfontparameters +\permanent\protected\def\setfontparameters {\setfalse\c_font_synchronize \the\everybodyfont \settrue\c_font_synchronize} @@ -340,16 +342,22 @@ \installmacrostack\savedfont -\unexpanded\def\savefont - {\edef\savedfont{\the\font}% gives \csname +% \fontname\font : string +% \fontid \font : integer +% \the \font : token (reference to font) +% \fontspecifiedname : string +% \the \fontspecifiedsize : dimension + +\permanent\protected\def\savefont + {\edef\savedfont{\the\font}% \push_macro_savedfont} -\unexpanded\def\restorefont +\permanent\protected\def\restorefont {\pop_macro_savedfont \savedfont} -\unexpanded\def\pushcurrentfont - {\edef\popcurrentfont +\permanent\protected\def\pushcurrentfont + {\enforced\permanent\protected\edef\popcurrentfont {\def\noexpand\fontbody {\fontbody}% \def\noexpand\fontstyle {\fontstyle}% \def\noexpand\fontalternative{\fontalternative}% @@ -361,24 +369,20 @@ \let\thedefinedfont\relax % not to be confused with \everydefinefont -\unexpanded\def\definedfont - {\doifelsenextoptionalcs\font_basics_defined_font_yes\font_basics_defined_font_nop} - -\def\font_basics_defined_font_yes[#specification]% - {\c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly - \font_basics_define_font_without_parameters{thedefinedfont}{#specification}% - \thedefinedfont - \the\everydefinedfont} - -\def\font_basics_defined_font_nop - {\c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly +\permanent\tolerant\protected\def\definedfont[#specification]% + {\ifarguments + \c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly + \or + \c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly + \font_basics_define_font_without_parameters{thedefinedfont}{#specification}% + \fi \thedefinedfont \the\everydefinedfont} %D \macros{startfont} -\unexpanded\def\startfont{\begingroup\definedfont} -\unexpanded\def\stopfont {\endgroup} +\permanent\protected\def\startfont{\begingroup\definedfont} +\permanent\protected\def\stopfont {\endgroup} %D \macros %D {everybodyfont,everyglobalbodyfont} @@ -411,7 +415,7 @@ \installcorenamespace{fontnormalizedbody} -\def\normalizebodyfontsize#macro#body% +\protected\def\normalizebodyfontsize#macro#body% {\expandafter\let\expandafter#macro\csname\??fontnormalizedbody\number\dimexpr#body\endcsname \ifx#macro\relax \normalizebodyfontsize_indeed#macro{#body}% @@ -424,9 +428,9 @@ \def\thenormalizedbodyfontsize#body% {\clf_nbfs\dimexpr#body\relax} -\edef\normalizedglobalbodyfontsize{\thenormalizedbodyfontsize\bodyfontsize} -\edef\normalizedlocalbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} -\edef\normalizedbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} +\protected\edef\normalizedglobalbodyfontsize{\thenormalizedbodyfontsize\bodyfontsize} +\protected\edef\normalizedlocalbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} +\protected\edef\normalizedbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} %D \macros %D {mapfontsize} @@ -457,11 +461,8 @@ \installcorenamespace{mappedfontsize} -\unexpanded\def\mapfontsize - {\dodoubleargument\font_basics_map_fontsize} - -\def\font_basics_map_fontsize[#from][#to]% - {\setvalue{\??mappedfontsize\the\dimexpr#from\relax}{#to}} +\permanent\tolerant\protected\def\mapfontsize[#from]#spacer[#to]% + {\ifarguments\or\or\setvalue{\??mappedfontsize\the\dimexpr#from\relax}{#to}\fi} \def\font_basics_set_mapped_fontsize#from% {\ifcsname\??mappedfontsize\the\dimexpr#from\relax\endcsname @@ -555,10 +556,7 @@ \def\font_helpers_register_size #size{\expandafter\let\csname\??fontsizeknown #size\endcsname\empty} \def\font_helpers_register_alternative#alternative{\expandafter\let\csname\??fontalternativeknown#alternative\endcsname\empty} -\unexpanded\def\definefontstyle - {\dodoubleargument\font_basics_define_fontstyle} - -\def\font_basics_define_fontstyle[#commands][#style]% style: rm ss tt ... +\permanent\protected\def\definefontstyle[#commands]#spacer[#style]% style: rm ss tt ... {\ifcsname\??fontstyleknown#style\endcsname \else % can be delayed till used (cg, hw) \font_helpers_register_style{#style}% \toksapp\t_font_style_commands{\m_font_style_command{#style}}% @@ -569,21 +567,21 @@ {\setvalue{\??fontshortstyle#command}{#style}% \setvalue{\??fontstyle #command}{\csname#style\endcsname}} -\unexpanded\def\definefontsize[#size]% +\permanent\protected\def\definefontsize[#size]% {\ifcsname\??fontsizeknown#size\endcsname \else \font_helpers_register_size{#size}% \toksapp\t_font_size_commands{\m_font_size_command{#size}}% \fi \font_helpers_check_fontname_combinations} -\unexpanded\def\definefontalternative[#alternative]% +\permanent\protected\def\definefontalternative[#alternative]% {\ifcsname\??fontalternativeknown#alternative\endcsname \else \font_helpers_register_alternative{#alternative}% \toksapp\t_font_alternative_commands{\m_font_alternative_command{#alternative}}% \fi \font_helpers_check_fontname_combinations} -\unexpanded\def\font_helpers_check_fontname_combinations % we need to split math and text here ... todo (math only has mr and mb) +\protected\def\font_helpers_check_fontname_combinations % we need to split math and text here ... todo (math only has mr and mb) {\font_helpers_process_style_list\font_helpers_check_fontname_combinations_s} \def\font_helpers_check_fontname_combinations_s#style% @@ -692,7 +690,7 @@ \newconditional\c_font_body_scale \newfraction \f_font_body_scale -\unexpanded\def\font_helpers_low_level_define#specification#csname% +\protected\def\font_helpers_low_level_define#specification#csname% {% we can now set more at the lua end \glet\somefontname\defaultfontfile \let\somefontsize\empty @@ -895,7 +893,7 @@ %D %D The implementation looks as follows: -\unexpanded\def\definefont % [name][spec][1.6 | line=10pt | setup_id] +\protected\def\definefont % [name][spec][1.6 | line=10pt | setup_id] {\dotripleempty\font_basics_define_font} \def\font_basics_define_font @@ -925,22 +923,15 @@ %D Beware, in the frozen variants no settings are supported yet, but that might happen %D some day. -\unexpanded\def\definefrozenfont - {\dotripleempty\font_basics_define_frozen_font} - -% \def\font_basics_define_frozen_font[#name][#specification][#settings]% -% {\begingroup -% \font_basics_define_font[#name][#specification][#settings]% -% \csname#name\endcsname -% \expandafter\expandafter\expandafter\endgroup\expandafter\let\csname#name\endcsname\lastrawfontcall} - -\def\font_basics_define_frozen_font[#name][#specification][#settings]% - {\begingroup - \font_basics_define_font[#name][#specification][#settings]% - \csname#name\endcsname - \glet\lastglobalrawfontcall\lastrawfontcall - \endgroup - \expandafter\let\csname#name\endcsname\lastglobalrawfontcall} +\permanent\tolerant\protected\def\definefrozenfont[#name]#spacer[#specification]#spacer[#settings]% + {\ifparameter#name\or + \begingroup + \font_basics_define_font[#name][#specification][#settings]% + \csname#name\endcsname + \glet\lastglobalrawfontcall\lastrawfontcall + \endgroup + \expandafter\let\csname#name\endcsname\lastglobalrawfontcall + \fi} %D The instance namespace protection makes the switch local so that we can redefine a %D logical name and/or change the size in between. @@ -976,7 +967,7 @@ \the\everyfontswitch \let\v_font_identifier_basic\v_font_identifier_basic_saved} -\unexpanded\def\font_helpers_trigger#identifier% make a traced variant +\protected\def\font_helpers_trigger#identifier% make a traced variant {\edef\lastfontidentifier{#identifier}% \ifcsname\v_font_identifier_class\endcsname % \writestatus{fonts}{trigger: reusing \v_font_identifier_class}% @@ -1192,11 +1183,6 @@ \lastnamedcs\dimexpr#body\relax\fi % factor \relax} -\unexpanded\def\definebodyfontenvironment - {\dotripleempty\font_basics_define_body_font_environment} - -\let\setupbodyfontenvironment\definebodyfontenvironment - \installcorenamespace{fontenvironmentknown} \def\font_helpers_register_environment#class#body% @@ -1205,6 +1191,9 @@ \newmacro\m_font_body \newmacro\m_font_body_normalized +\permanent\protected\def\definebodyfontenvironment % todo + {\dotripleempty\font_basics_define_body_font_environment} + \def\font_basics_define_body_font_environment {\ifthirdargument \singleexpandafter\font_basics_define_body_font_environment_class @@ -1214,11 +1203,13 @@ \expandafter\font_basics_define_body_font_environment_unset \fi} +\let\setupbodyfontenvironment\definebodyfontenvironment + %D First we handle the class specific case. Beware: you can change values before %D a bodyfont is loaded but changing them afterwards can be sort of tricky as %D values are not consulted afterwards. -\def\processbodyfontenvironmentlist#1% no \unexpanded as then we cannot use it in alignments +\def\processbodyfontenvironmentlist#1% no \protected as then we cannot use it in alignments (still?) {\clf_processbodyfontsizes{\strippedcsname#1}} \def\bodyfontenvironmentlist @@ -1371,17 +1362,22 @@ % [class] [10pt,11pt] [settings] == [name] [rm] [settings] % [class] [10pt,11pt] [name] == [10pt,11pt] [rm] [name] -\unexpanded\def\definebodyfont - {\doquadrupleempty\font_basics_define_body_font} - -\def\font_basics_define_body_font[#1][#2][#3][#4]% - {\iffourthargument +\permanent\tolerant\protected\def\definebodyfont[#1]#*[#2]#*[#3]#*[#4]% + {\ifarguments + \or + \font_basics_define_body_font[#1][\s!rm][]% + \or + \font_basics_define_body_font[#1][\s!rm][#2]% + \or + \font_basics_define_body_font[#1][#2][#3]% + \or \processcommacommand[#1]{\font_basics_define_body_font_class_given[#2][#3][#4]}% - \else - \font_basics_define_body_font_class_known[#1][#2][#3]% \fi} -\def\font_basics_define_body_font_class_given[#1][#2][#3]#4% +\protected\def\font_basics_define_body_font[#whatever]% + {\doifelsenumber{#whatever}\font_basics_define_body_font_body\font_basics_define_body_font_name[#whatever]} + +\protected\def\font_basics_define_body_font_class_given[#1][#2][#3]#4% {\push_macro_fontclass \doifelse{#4}\s!default {\let\fontclass\empty} @@ -1389,28 +1385,7 @@ \definebodyfont[#1][#2][#3]% \pop_macro_fontclass} -\def\font_basics_define_body_font_class_known - {\ifthirdargument - \singleexpandafter\font_basics_define_body_font_a - \orelse\ifsecondargument - \expandafter\font_basics_define_body_font_b - \else - \expandafter\font_basics_define_body_font_c - \fi} - -\unexpanded\def\font_basics_define_body_font_b[#whatever][#specification][#dummy]% body|identifier defs|identifier - {\font_basics_define_body_font_a[#whatever][\s!rm][#specification]} - -\unexpanded\def\font_basics_define_body_font_c[#whatever][#dummya][#dummyb]% body|identifier - {\font_basics_define_body_font_a[#whatever][\s!rm][]} - -\unexpanded\def\font_basics_define_body_font_a[#whatever]% - {\doifelsenumber{#whatever}% - \font_basics_define_body_font_body - \font_basics_define_body_font_name - [#whatever]} - -\unexpanded\def\font_basics_define_body_font_body[#body][#style][#specification]% +\protected\def\font_basics_define_body_font_body[#body][#style][#specification]% {\ifcondition\validassignment{#specification}% \expandafter\font_basics_define_body_font_body_assignment \else @@ -1418,7 +1393,7 @@ \fi [#body][#style][#specification]}% -\unexpanded\def\font_basics_define_body_font_name[#name][#style][#specification]% +\protected\def\font_basics_define_body_font_name[#name][#style][#specification]% {\ifcondition\validassignment{#specification}% \expandafter\font_basics_define_body_font_name_assignment \else @@ -1426,41 +1401,41 @@ \fi [#name][#style][#specification]}% -\unexpanded\def\font_basics_define_body_font_body_assignment[#bodylist][#stylelist][#assignments]% +\protected\def\font_basics_define_body_font_body_assignment[#bodylist][#stylelist][#assignments]% {\processcommalist[#bodylist]{\font_basics_define_body_font_body_assignment_a{#stylelist}{#assignments}}} -\unexpanded\def\font_basics_define_body_font_body_assignment_a#stylelist#assignments#body% +\protected\def\font_basics_define_body_font_body_assignment_a#stylelist#assignments#body% {\normalizebodyfontsize\m_font_asked_body{#body}% % normally we define quite a lot in advance, i.e global defs \font_helpers_check_bodyfont_environment\m_font_asked_body\m_font_asked_body % !! \processcommalist[#stylelist]{\font_basics_define_body_font_body_assignment_b{#assignments}}} -\unexpanded\def\font_basics_define_body_font_body_assignment_b#assignments#style% +\protected\def\font_basics_define_body_font_body_assignment_b#assignments#style% {\edef\m_font_asked_style{#style}% \processcommalist[#assignments]\font_basics_define_body_font_defs} -\unexpanded\def\font_basics_define_body_font_defs +\protected\def\font_basics_define_body_font_defs {\ifempty\fontclass \expandafter\font_basics_define_body_font_defs_nop \else \expandafter\font_basics_define_body_font_defs_yes \fi} -\unexpanded\def\font_basics_define_body_font_defs_yes_normal#assignment% +\protected\def\font_basics_define_body_font_defs_yes_normal#assignment% {\ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_yes_mm \else \expandafter\font_basics_define_body_font_yes_xx \fi[#assignment]} -\unexpanded\def\font_basics_define_body_font_defs_nop_normal#assignment% +\protected\def\font_basics_define_body_font_defs_nop_normal#assignment% {\ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_nop_mm \else \expandafter\font_basics_define_body_font_nop_xx \fi[#assignment]} -\unexpanded\def\font_basics_define_body_font_defs_yes_traced#assignment% +\protected\def\font_basics_define_body_font_defs_yes_traced#assignment% {\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] [#assignment]}% \ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_yes_mm @@ -1468,7 +1443,7 @@ \expandafter\font_basics_define_body_font_yes_xx \fi[#assignment]} -\unexpanded\def\font_basics_define_body_font_defs_nop_traced#assignment% +\protected\def\font_basics_define_body_font_defs_nop_traced#assignment% {\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] [#assignment]}% \ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_nop_mm @@ -1488,29 +1463,29 @@ %D the style and the rest is a size, although in practice one will seldom define the %D size directly. We might even drop that as it gives faster code. -\unexpanded\def\font_basics_define_body_font_nop_xx[#one#two#rest=#value]% local +\protected\def\font_basics_define_body_font_nop_xx[#one#two#rest=#value]% local {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname\undefined - \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname + \protected\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname {\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}}}% \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname\undefined - \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname + \protected\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname {\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}}}% \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname\undefined - \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname + \protected\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname {\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}}}% } -\unexpanded\def\font_basics_define_body_font_yes_xx[#one#two#rest=#value]% global +\protected\def\font_basics_define_body_font_yes_xx[#one#two#rest=#value]% global {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-1\endcsname\undefined - \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname + \protected\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest-0}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-2\endcsname\undefined - \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname + \protected\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest-4}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-3\endcsname\undefined - \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname + \protected\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest-5}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% } @@ -1519,52 +1494,52 @@ %D Here the rest concerns rl or lr so in this case it is not a size specifier but %D a directional one. -\unexpanded\def\font_basics_define_body_font_nop_mm[#one#two#rest=#value]% local +\protected\def\font_basics_define_body_font_nop_mm[#one#two#rest=#value]% local {%\ifcsname\s!mm\endcsname\else\font_basics_check_fontname_combination\s!mm{#one#two}{#rest}\fi \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\s!mm-#one#two#rest-1\endcsname\undefined % \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\s!mm-#one#two#rest-2\endcsname\undefined % \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\s!mm-#one#two#rest-3\endcsname\undefined - \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\s!mm-#one#two#rest\endcsname + \protected\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\s!mm-#one#two#rest\endcsname {\font_helpers_trigger{\m_font_asked_body-\s!mm-#one#two#rest}{\noexpand\font_rscale_mm}{\m_font_asked_body}{\normalunexpanded{#value}}}% } % \writestatus{fonts}{define \m_asked_style\space nop: \expandafter\meaning\csname\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname}% -\unexpanded\def\font_basics_define_body_font_yes_mm[#one#two#rest=#value]% global +\protected\def\font_basics_define_body_font_yes_mm[#one#two#rest=#value]% global {%\ifcsname\s!mm\endcsname\else\font_basics_check_fontname_combination\s!mm{#one#two}{#rest}\fi \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\s!mm-#one#two#rest-1\endcsname\undefined % \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\s!mm-#one#two#rest-2\endcsname\undefined % \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\s!mm-#one#two#rest-3\endcsname\undefined - \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\s!mm-#one#two#rest\endcsname + \protected\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\s!mm-#one#two#rest\endcsname {\font_helpers_trigger{\m_font_asked_body-\s!mm-#one#two#rest}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% } % \writestatus{fonts}{define \m_asked_style\space yes: \expandafter\meaning\csname\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname}% -\unexpanded\def\font_basics_define_body_font_body_identifier[#bodylist][#stylelist][#name]% +\protected\def\font_basics_define_body_font_body_identifier[#bodylist][#stylelist][#name]% {\processcommalist[#bodylist]{\font_basics_define_body_font_body_identifier_a{#stylelist}{#name}}} -\unexpanded\def\font_basics_define_body_font_body_identifier_a#stylelist#name#body% +\protected\def\font_basics_define_body_font_body_identifier_a#stylelist#name#body% {\normalizebodyfontsize\m_font_asked_body{#body}% \font_helpers_check_bodyfont_environment\m_font_asked_body\m_font_asked_body % !! \processcommalist[#stylelist]{\font_basics_define_body_font_body_identifier_b{#name}}} -\unexpanded\def\font_basics_define_body_font_body_identifier_b#name#style% +\protected\def\font_basics_define_body_font_body_identifier_b#name#style% {\edef\m_font_asked_style{#style}% %\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] => [#name]}% \csname\??fontdefinitions#name:\m_font_asked_style\endcsname} % no checking -\unexpanded\def\font_basics_define_body_font_name_assignment[#name][#stylelist][#assignments]% +\protected\def\font_basics_define_body_font_name_assignment[#name][#stylelist][#assignments]% {\processcommalist[#stylelist]{\font_basics_define_body_font_name_assignment_a{#name}{#assignments}}} -\unexpanded\def\font_basics_define_body_font_name_assignment_a#name#assignments#style% +\protected\def\font_basics_define_body_font_name_assignment_a#name#assignments#style% {%\writestatus\m!fonts{[#name:#style] => [#assignments]}% \setevalue{\??fontdefinitions#name:#style}{\font_basics_define_body_font_default{#assignments}}} -\unexpanded\def\font_basics_define_body_font_name_identifier[#name][#stylelist][#identifier]% +\protected\def\font_basics_define_body_font_name_identifier[#name][#stylelist][#identifier]% {\processcommalist[#stylelist]{\font_basics_define_body_font_name_identifier_a{#name}{#identifier}}} -\unexpanded\def\font_basics_define_body_font_name_identifier_a#name#identifier#style% +\protected\def\font_basics_define_body_font_name_identifier_a#name#identifier#style% {%\writestatus\m!fonts{[#name:#style] => [##identifier:#style]}% \ifcsname\??fontdefinitions#name:#style\endcsname \expandafter\let\csname\??fontdefinitions#name:#style\expandafter\endcsname\csname\??fontdefinitions#identifier:#style\endcsname @@ -1577,7 +1552,7 @@ \newconditional\c_font_defining_unknown \newconditional\c_font_defining_state -\unexpanded\def\font_helpers_define_unknown_font#body% one level only +\protected\def\font_helpers_define_unknown_font#body% one level only {\font_helpers_register_fontbody{#body}% prevents loop, can go \setfalse\c_font_defining_state \font_helpers_process_relative_size_list{\font_helpers_define_unknown_check_sizes{#body}}% @@ -1615,20 +1590,13 @@ \settrue\c_font_defining_state \fi} -% \def\font_helpers_define_unknown_check_relatives#body#relativesize% -% {\ifcsname\??fontbodyknown\csname\??fontenvironments#body#relativesize\endcsname\endcsname \else -% % how \lastnamedcs here -% \expandafter\font_helpers_define_unknown_font\csname\??fontenvironments#body#relativesize\endcsname -% \settrue\c_font_defining_state -% \fi} - \def\font_helpers_define_unknown_check_relatives#body#relativesize% {\ifcsname\??fontbodyknown\csname\??fontenvironments#body#relativesize\endcsname\endcsname \else \expandafter\font_helpers_define_unknown_font\csname\??fontenvironments#body#relativesize\endcsname \settrue\c_font_defining_state \fi} -\unexpanded\def\font_basics_define_body_font_default#assignments% +\protected\def\font_basics_define_body_font_default#assignments% {\font_helpers_check_relative_font_size\m_font_asked_style % still needed here? \ifcsname\m_font_asked_style\endcsname\else \normalexpanded{\definefontstyle[\m_font_asked_style][\m_font_asked_style]}% @@ -1639,7 +1607,7 @@ %D These macros show that quite some definitions take place. Fonts are not loaded %D yet! This means that at format generation time, no font files are present. -\unexpanded\def\font_basics_switch_points#body% +\protected\def\font_basics_switch_points#body% {\ifcsname\??fontbodyknown#body\endcsname \else % we need to check the relative sizes for this body \font_helpers_define_unknown_font{#body}% @@ -1653,7 +1621,7 @@ \showmessage\m!fonts4{#body}% \fi} -\unexpanded\def\font_basics_switch_style#style% +\protected\def\font_basics_switch_style#style% {\ifcsname\??fontstyle#style\endcsname \lastnamedcs \edef\fontstyle{#style}% @@ -1702,7 +1670,7 @@ \newmacro\m_font_keyword -\unexpanded\def\font_helpers_set_font_set_font_option_keyword#method#keyword#message% +\protected\def\font_helpers_set_font_set_font_option_keyword#method#keyword#message% {\edef\m_font_keyword{#keyword}% \ifcsname\??fontenvironments\normalizedbodyfontsize\m_font_keyword\endcsname \edef\m_font_step{\font_bodyfontvariable\m_font_keyword}% @@ -1725,7 +1693,7 @@ \def\font_helpers_set_fontstyle_of_fontclass % will be overloaded later {\let\fontstyle\s!rm} -\unexpanded\def\font_helpers_set_font_set_font_option_body#method#body#message% +\protected\def\font_helpers_set_font_set_font_option_body#method#body#message% {\normalizebodyfontsize\normalizedsetfont{#body}% redundant for some calls \ifcsname\??fontbodyknown\normalizedsetfont\endcsname \else \font_helpers_define_unknown_font\normalizedsetfont @@ -1754,7 +1722,7 @@ \ifdefined\trycurrentfontclass \else - \unexpanded\def\trycurrentfontclass#typeface% + \protected\def\trycurrentfontclass#typeface% {\letvalueempty{\??fontclassnop#typeface}} \fi @@ -1766,7 +1734,7 @@ %D So far for synchronisation. (We can inline the following macros.) -\unexpanded\def\setcurrentfont#body#style#alternative#size% not used +\protected\def\setcurrentfont#body#style#alternative#size% not used {\edef\fontbody {#body}% \edef\fontstyle {#style}% \edef\fontalternative{#alternative}% @@ -1774,7 +1742,7 @@ \font_helpers_check_big_math_synchronization \font_helpers_synchronize_font} -\unexpanded\def\setcurrentfontbody#body% % not used +\protected\def\setcurrentfontbody#body% % not used {\edef\fontbody{#body}% \font_helpers_synchronize_font} @@ -1784,51 +1752,51 @@ \let\font_typescripts_inherit_check\gobbleoneargument % implemented in type-ini \fi -\unexpanded\def\font_helpers_set_current_font_style#style% +\protected\def\font_helpers_set_current_font_style#style% {\edef\fontstyle{#style}% \font_typescripts_inherit_check\fontstyle \ifmmode\mr\fi % otherwise \rm not downward compatible ... not adapted yet \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_xsize_alternative#xsize#alternative% +\protected\def\font_helpers_set_current_xsize_alternative#xsize#alternative% {\edef\fontface{#xsize}% \edef\fontalternative{#alternative}% \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_alternative#alternative% +\protected\def\font_helpers_set_current_font_alternative#alternative% {\edef\fontalternative{#alternative}% \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_size#size% +\protected\def\font_helpers_set_current_font_size#size% {\edef\fontsize{#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_style_alternative#style#alternative% \rmsl +\protected\def\font_helpers_set_current_font_style_alternative#style#alternative% \rmsl {\edef\fontstyle {#style}% \edef\fontalternative{#alternative}% \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_style_size#style#size% \rma +\protected\def\font_helpers_set_current_font_style_size#style#size% \rma {\edef\fontstyle{#style}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_alternative_size#alternative#size% \sla +\protected\def\font_helpers_set_current_font_alternative_size#alternative#size% \sla {\edef\fontalternative{#alternative}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_style_alternative_size#style#alternative#size% \rmsla +\protected\def\font_helpers_set_current_font_style_alternative_size#style#alternative#size% \rmsla {\edef\fontstyle {#style}% \edef\fontalternative{#alternative}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_synchronize_font % we can have dups i.e. no need to let fontstrategy +\protected\def\font_helpers_synchronize_font % we can have dups i.e. no need to let fontstrategy {\ifempty\fontclass \applyfontstrategies \else @@ -2071,7 +2039,9 @@ \let\fontalternative\fontalternative \font_helpers_synchronize_font} -\unexpanded\def\tx +% to freeze or not ... + +\protected\def\tx {\currentxfontsize\plusone \ifmmode \scriptstyle @@ -2082,7 +2052,7 @@ \fi \let\tx\txx} -\unexpanded\def\txx +\protected\def\txx {\currentxfontsize\plustwo \ifmmode \scriptscriptstyle @@ -2094,7 +2064,7 @@ \let\tx \empty \let\txx\empty} -\unexpanded\def\sx +\protected\def\sx {\currentxfontsize\plusone \ifmmode \scriptstyle @@ -2104,7 +2074,7 @@ \let\tx\txx \let\sx\sxx} -\unexpanded\def\sxx +\protected\def\sxx {\currentxfontsize\plustwo \ifmmode \scriptscriptstyle @@ -2116,8 +2086,8 @@ \let\sx \empty \let\sxx\empty} -\unexpanded\def\useinheritxsizes{\settrue \c_font_inherit_scale} % not yet public, playground for WS and me -\unexpanded\def\usedefinedxsizes{\setfalse\c_font_inherit_scale} % not yet public, playground for WS and me +\permanent\protected\def\useinheritxsizes{\settrue \c_font_inherit_scale} % not yet public, playground for WS and me +\permanent\protected\def\usedefinedxsizes{\setfalse\c_font_inherit_scale} % not yet public, playground for WS and me \let\normaltx \tx \let\normaltxx\txx @@ -2139,7 +2109,7 @@ \installcorenamespace{fontbodyfaces} -\unexpanded\def\font_basics_complete_switch#size% +\protected\def\font_basics_complete_switch#size% {\bodyfontsize#size\relax \normalizebodyfontsize\normalizedbodyfontsize\bodyfontsize \expandafter\let\expandafter\font_basics_set_faces\csname\??fontbodyfaces\fontbody\endcsname @@ -2205,7 +2175,7 @@ % \newtoks \everysetupbodyfont % \newtoks \everyswitchtobodyfont -\unexpanded\def\setupbodyfont +\permanent\protected\def\setupbodyfont {\doifelsenextoptionalcs\font_basics_setupbodyfont_yes\font_basics_setupbodyfont_nop} \def\font_basics_setupbodyfont_nop @@ -2225,7 +2195,7 @@ \fi \the\everysetupbodyfont}} -\unexpanded\def\font_basics_switchtobodyfont#specification% +\protected\def\font_basics_switchtobodyfont#specification% {\edef\m_font_step{\font_bodyfontvariable{#specification}}% \ifempty\m_font_step \font_helpers_set_font\zerocount{#specification}% @@ -2235,10 +2205,10 @@ \the\everybodyfont \the\everyswitchtobodyfont} -\unexpanded\def\switchtobodyfont[#specification]% could become an ifx +\permanent\protected\def\switchtobodyfont[#specification]% could become an ifx {\doifsomething{#specification}{\font_basics_switchtobodyfont{#specification}}} -\unexpanded\def\usebodyfontparameter#1% +\permanent\protected\def\usebodyfontparameter#1% {\edef\m_font_bodyfont_asked{#1\c!bodyfont}% \ifempty\m_font_bodyfont_asked\else \font_basics_switchtobodyfont\m_font_bodyfont_asked @@ -2251,7 +2221,7 @@ %D The following alternative is meant for math||to||text switching and will be %D optimized. -\unexpanded\def\fastswitchtobodyfont#name% +\permanent\protected\def\fastswitchtobodyfont#name% {\ifcsname\??fontenvironments\normalizedbodyfontsize#name\endcsname %\edef\futurebodyfontsize{\csname\??fontenvironments\normalizedbodyfontsize#name\endcsname}% \edef\futurebodyfontsize{\lastnamedcs}% @@ -2284,7 +2254,7 @@ %D \stoptext %D \stoptyping -\unexpanded\def\usebodyfont[#1]% +\permanent\protected\def\usebodyfont[#1]% {\ifempty\fontclass \setupbodyfont[#1]% \else @@ -2292,7 +2262,7 @@ \fullrestoreglobalbodyfont \fi} -\unexpanded\def\showbodyfontstate +\permanent\protected\def\showbodyfontstate {\dontleavehmode \start \infofont @@ -2320,9 +2290,9 @@ %D %D This is an expandable command! -\unexpanded\def\fontchar #character{\clf_fontchar{#character}} -\unexpanded\def\fontcharbyindex #index{\clf_fontcharbyindex#index\relax} - \def\tochar #specifications{\clf_tochar{#specifications}} % expanded (also used in edef) +\permanent\protected\def\fontchar #character{\clf_fontchar{#character}} +\permanent\protected\def\fontcharbyindex #index{\clf_fontcharbyindex#index\relax} +\permanent \def\tochar #specifications{\clf_tochar{#specifications}} % expanded (also used in edef) %D The next auxilliary macro is an alternative to \type {\fontname}. @@ -2340,7 +2310,7 @@ %D {\sl text \switchstyleonly[sansserif]text} %D \stoptyping -\unexpanded\def\switchstyleonly +\permanent\protected\def\switchstyleonly {\doifelsenextoptionalcs\font_basics_switch_style_only_opt\font_basics_switch_style_only_arg} \def\font_basics_switch_style_only_arg#name% stupid version @@ -2363,10 +2333,7 @@ %D %D We don't support language specific synonyms here. -\unexpanded\def\definebodyfontswitch - {\dodoubleargument\font_basics_define_bodyfont_switch} - -\def\font_basics_define_bodyfont_switch[#command][#specification]% no longer a commalist (not useful) +\permanent\tolerant\protected\def\definebodyfontswitch[#command]#spacer[#specification]% no longer a commalist (not useful) {\setvalue{#command}{\switchtobodyfont[#specification]}}% %D \macros @@ -2384,10 +2351,10 @@ \font_basics_switch_points\m_font_step \font_basics_switch_style \fontstyle} -\unexpanded\def\setsmallbodyfont{\font_helpers_set_bodyfont_step\v!small\the\everybodyfont} -\unexpanded\def\setbigbodyfont {\font_helpers_set_bodyfont_step\v!big \the\everybodyfont} +\permanent\protected\def\setsmallbodyfont{\font_helpers_set_bodyfont_step\v!small\the\everybodyfont} +\permanent\protected\def\setbigbodyfont {\font_helpers_set_bodyfont_step\v!big \the\everybodyfont} -\unexpanded\def\setmainbodyfont +\permanent\protected\def\setmainbodyfont {\font_basics_switch_points\normalizedbodyfontsize \font_basics_switch_style\fontstyle \the\everybodyfont @@ -2409,7 +2376,7 @@ \let\globalfontstyle\s!rm -\unexpanded\def\fullrestoreglobalbodyfont +\permanent\protected\def\fullrestoreglobalbodyfont {\let\fontsize\defaultfontsize \let\fontbody\defaultfontbody \let\fontface\defaultfontface @@ -2423,7 +2390,7 @@ \the\everyglobalbodyfont \saveinterlinespace} -\unexpanded\def\partialrestoreglobalbodyfont +\permanent\protected\def\partialrestoreglobalbodyfont {\let\fontsize\defaultfontsize \let\fontbody\defaultfontbody \let\fontface\defaultfontface @@ -2434,7 +2401,7 @@ \the\everyglobalbodyfont % indeed needed \saveinterlinespace} -\unexpanded\def\restoreglobalbodyfont % ook style etc +\permanent\protected\def\restoreglobalbodyfont % ook style etc {\ifx\fontclass\globalfontclass \ifx\fontstyle\globalfontstyle \ifx\normalizedbodyfontsize\normalizedglobalbodyfontsize @@ -2466,26 +2433,26 @@ \installcorenamespace{predefinedfont} -\unexpanded\def\predefinefont[#1]#2[#3]% global ! - {\setugvalue{#1}{\font_basics_predefine{#1}{#3}}} +\permanent\protected\def\predefinefont[#1]#*[#2]% global ! + {\setugvalue{#1}{\font_basics_predefine{#1}{#2}}} -\unexpanded\def\predefinedfont[#1]% global ! +\permanent\protected\def\predefinedfont[#1]% global ! {\ifcsname\??predefinedfont#1\endcsname \lastnamedcs \else \font_basics_predefined{#1}% \fi} -\unexpanded\def\font_basics_predefine#1#2% +\protected\def\font_basics_predefine#1#2% {\font_basics_defined_font_yes[#2]% \expandafter\glet\csname#1\expandafter\endcsname\csname\v_font_identifier_basic\endcsname} -\unexpanded\def\font_basics_predefined#1% +\protected\def\font_basics_predefined#1% {\font_basics_predefine{\??predefinedfont#1}{#1}} %D Handy helper: -\unexpanded\def\savedefinedfont[#1]% +\permanent\protected\def\savedefinedfont[#1]% {\bgroup \definedfont[#1]% \xdef\saveddefinedfontid {\number\fontid\font}% @@ -2497,8 +2464,8 @@ %D Ugly helper: -\unexpanded\def\saverunningstyleandcolor - {\unexpanded\edef\restorerunningstyleandcolor +\permanent\protected\def\saverunningstyleandcolor + {\enforced\permanent\protected\edef\restorerunningstyleandcolor {\setfontid \number\fontid\font \c_attr_colormodel \the\c_attr_colormodel \c_attr_color \the\c_attr_color @@ -2515,10 +2482,10 @@ \let\getprivatemathchar \clf_getprivatemathchar % gives back a utf ! \let\getprivateslot \clf_getprivateslot % companion to fonts.helpers.addprivate -% \unexpanded\def\getprivatemathchar#1% +% \protected\def\getprivatemathchar#1% % {\begingroup\the\textfont\zerocount\getprivatechar{#1}\endgroup} -\def\privatechar % the text variant gets expanded to utf +\permanent\protected\def\privatechar % the text variant gets expanded to utf {\ifmmode \expandafter\getprivatemathchar \else @@ -2546,10 +2513,7 @@ %D \stopTEXpage %D \stoptyping -\unexpanded\def\definefontcolorpalette - {\dodoubleargument\font_define_color_palette} - -\def\font_define_color_palette[#1][#2]% +\permanent\tolerant\protected\def\definefontcolorpalette[#1]#*[#2]% {\clf_definefontcolorpalette{#1}{#2}} %D \macros @@ -2557,7 +2521,7 @@ %D %D A way to add a path at runtime (no need to generate database): -\unexpanded\def\usefontpath[#1]% +\permanent\protected\def\usefontpath[#1]% {\clf_addfontpath{#1}} \protect \endinput |