summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/font-ini.mklx
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2020-10-31 00:09:22 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2020-10-31 00:09:22 +0100
commit7043cd3b7046f6a11112a5d49c4ae5e2dc0c6896 (patch)
tree92ffcd258fb29e37b4a136eb071fbfd0717be29e /tex/context/base/mkiv/font-ini.mklx
parenta0270f13065d116355a953c6f246cbba26289fc2 (diff)
downloadcontext-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.mklx338
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