%D \module %D [ file=font-fil, %D version=2011.01.13, % (copied fron font-ini) %D title=\CONTEXT\ Font Macros, %D subtitle=Classes and Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{ConTeXt Font Macros / Classes and Files} \unprotect %D Personally I think that using \TEX\ macro packages is complicated by the way %D fonts are handled. Apart from the many encodings, we also deal with different %D naming schemes. Confronted with this problem, I decided to change the definitions %D into: %D %D \starttyping %D \definebodyfont [12pt] [rm] [tf=Times-Roman at 12pt] %D \stoptyping %D %D combined with for instance: %D %D \starttyping %D \definefontsynonym [Times-Roman] [tir] %D \stoptyping % \definetypeface[palatino][rm][serif][palatino,allbold][default] % % \startfontclass[palatino] % \definefontsynonym [Serif] [SerifBold] % \definefontsynonym [SerifItalic] [SerifBoldItalic] % \definefontsynonym [SerifSlanted] [SerifBoldSlanted] % \definefontsynonym [SerifCaps] [SerifBold] % \stopfontclass % % \setupbodyfont[palatino] \unexpanded\def\startfontclass {\dosingleempty\font_basics_start_font_class} \def\font_basics_start_font_class[#class]% {\push_macro_fontclass \doifelse{#class}\v!each {\let\fontclass\empty} {\doifsomething{#class}{\def\fontclass{#class}}}} \unexpanded\def\stopfontclass {\pop_macro_fontclass} \def\classfont#class#name{#class#name} % \definefont[whatever][\classfont{xx}{yy} at 10pt] %D \macros %D {definefontsynonym, doifelsefontsynonym, %D expandfontsynonym, truefontname, truefontdata} %D %D While looking for fonts, fontsynonyms are used for accessing %D the files! %D %D \starttyping %D \definefontsynonym[Serif][Lucida-Bright] %D \definefontsynonym[Lucida-Bright][lbr][encoding=texnansi] %D \stoptyping \installcorenamespace {fontfile} % file synonyms \let\m_font_name\empty \let\m_font_file\empty \def \defaultfontfile{\truefontname{Normal}} % was cmtt10, but that one is gone \edef\nullfontname {\fontname\nullfont} \unexpanded\def\definefontsynonym[#name]#crap[#file]% {\edef\m_font_name{#name}% \edef\m_font_file{#file}% \ifx\fontclass\empty \expandafter\font_basics_define_font_synonym_nop \else \expandafter\font_basics_define_font_synonym_yes \fi} \unexpanded\def\font_basics_define_font_synonym_nop {\expandafter\let\csname\??fontfile\m_font_name\endcsname\m_font_file \doifelsenextoptionalcs\font_basics_define_font_synonym_nop_opt\font_basics_define_font_synonym_nop_nil} \unexpanded\def\font_basics_define_font_synonym_yes {\expandafter\let\csname\??fontfile\fontclass\m_font_name\endcsname\m_font_file \doifelsenextoptionalcs\font_basics_define_font_synonym_yes_opt\font_basics_define_font_synonym_yes_nil} \unexpanded\def\edefinefontsynonym[#name]#crap[#file]% {\edef\m_font_name{#name}% \edef\m_font_file{#file}% \ifx\fontclass\empty \expandafter\font_basics_define_font_synonym_nop_expanded \else \expandafter\font_basics_define_font_synonym_yes_expanded \fi} \unexpanded\def\font_basics_define_font_synonym_nop_expanded#crap[#spec]% {\expandafter\let\csname\??fontfile\m_font_name\endcsname\m_font_file \normalexpanded{\font_basics_define_font_synonym_nop_opt[#spec]}} \unexpanded\def\font_basics_define_font_synonym_yes_expanded#crap[#spec]% {\expandafter\let\csname\??fontfile\fontclass\m_font_name\endcsname\m_font_file \normalexpanded{\font_basics_define_font_synonym_yes_opt[#spec]}} \unexpanded\def\font_basics_define_font_synonym_nop_opt[#specification]% {\let\p_features \undefined \let\p_fallbacks \undefined \let\p_goodies \undefined \let\p_designsize\undefined \expandafter\font_basics_get_font_parameter_nop#specification,]=,} \unexpanded\def\font_basics_define_font_synonym_yes_opt[#specification]% {\let\p_features \undefined \let\p_fallbacks \undefined \let\p_goodies \undefined \let\p_designsize\undefined \expandafter\font_basics_get_font_parameter_yes#specification,]=,} % todo: check if we can use \edef but then we need to protect \mathsizesuffix .. in fact that % can be default then: \let\mathsizesuffix\relax .. i need to play with it first \def\font_basics_get_font_parameter_nop#key=#value,% {\if]#key% \font_basics_get_font_parameter_nop_finish \else \expandafter\normaldef\csname p_#key\endcsname{#value}% % no edef as we need to keep \mathsizesuffix \expandafter\font_basics_get_font_parameter_nop \fi} \def\font_basics_get_font_parameter_yes#key=#value,% {\if]#key% \font_basics_get_font_parameter_yes_finish \else \expandafter\normaldef\csname p_#key\endcsname{#value}% % no edef as we need to keep \mathsizesuffix \expandafter\font_basics_get_font_parameter_yes \fi} % helpers, some day these will be toks and counts % \def\fntsetdefname {\glet\somefontname\defaultfontfile} % \def\fntsetsomename{\gdef\somefontname} % takes argument % \def\fntsetnopsize {\let\somefontsize\empty} % \def\fntsetsomesize{\def\somefontsize} % takes argument % happens later, else mkvi parsing gets into troubles % end of helpers % we could collect them in one macro (but no expansion) \def\font_basics_define_font_synonym_nop_nil {\expandafter\let\csname\??fontfile\m_font_name\s!features \endcsname\undefined \expandafter\let\csname\??fontfile\m_font_name\s!fallbacks \endcsname\undefined \expandafter\let\csname\??fontfile\m_font_name\s!goodies \endcsname\undefined \expandafter\let\csname\??fontfile\m_font_name\s!designsize\endcsname\undefined} \def\font_basics_define_font_synonym_yes_nil {\expandafter\glet\csname\??fontfile\fontclass\m_font_name\s!features \endcsname\undefined \expandafter\glet\csname\??fontfile\fontclass\m_font_name\s!fallbacks \endcsname\undefined \expandafter\glet\csname\??fontfile\fontclass\m_font_name\s!goodies \endcsname\undefined \expandafter\glet\csname\??fontfile\fontclass\m_font_name\s!designsize\endcsname\undefined} \def\font_basics_get_font_parameter_nop_finish {\expandafter\let\csname\??fontfile\m_font_name\s!features \endcsname\p_features \expandafter\let\csname\??fontfile\m_font_name\s!fallbacks \endcsname\p_fallbacks \expandafter\let\csname\??fontfile\m_font_name\s!goodies \endcsname\p_goodies \expandafter\let\csname\??fontfile\m_font_name\s!designsize\endcsname\p_designsize} \def\font_basics_get_font_parameter_yes_finish {\expandafter\glet\csname\??fontfile\fontclass\m_font_name\s!features \endcsname\p_features \expandafter\glet\csname\??fontfile\fontclass\m_font_name\s!fallbacks \endcsname\p_fallbacks \expandafter\glet\csname\??fontfile\fontclass\m_font_name\s!goodies \endcsname\p_goodies \expandafter\glet\csname\??fontfile\fontclass\m_font_name\s!designsize\endcsname\p_designsize} %\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}] % %\defineclassfontsynonym [KopFont] [officina] [SerifBold] \unexpanded\def\defineclassfontsynonym {\dotripleargument\font_basics_define_class_font_synonym} %\definefontsynonym[#tag][\fontclassname{#class}{#fileortag}]} \def\font_basics_define_class_font_synonym[#tag][#class][#fileortag]% needs testing {\expandafter\normaldef\csname\??fontfile\fontclass#tag\endcsname{\fontclassname{#class}{#fileortag}}% \font_basics_define_font_synonym_yes_nil} \let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater \unexpanded\def\setupfontsynonym {\dodoubleempty\dosetupfontsynonym} \def\dosetupfontsynonym[#name][#settings]% not yet supported, will do when needed {} % todo: replace * by ... less messy with features \def\truefontname#name% {\expandafter\font_helpers_true_fontname#name*\empty*\relax} \def\font_helpers_true_fontname#name*#first#rest*#crap\relax {\ifcsname\??fontfile\fontclass#name\endcsname \ifx#first\empty %\expandafter\truefontname\csname\??fontfile\fontclass#name\endcsname \expandafter\truefontname\lastnamedcs \else %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname*#first#rest% \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest% \fi \else\ifcsname\??fontfile\defaultfontclass#name\endcsname \ifx#first\empty %\expandafter\truefontname\csname\??fontfile\defaultfontclass#name\endcsname \expandafter\truefontname\lastnamedcs \else %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname*#first#rest% \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest% \fi \else\ifcsname\??fontfile#name\endcsname \ifx#first\empty %\expandafter\truefontname\csname\??fontfile#name\endcsname \expandafter\truefontname\lastnamedcs \else %\expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname*#first#rest% \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest% \fi \else #name\ifx#first\empty\else*#first#rest\fi \fi\fi\fi} \def\font_helpers_true_fontname_check#name% {\expandafter\font_helpers_true_fontname_check_indeed#name*\relax} \def\font_helpers_true_fontname_check_indeed#name*#crap\relax {\ifcsname\??fontfile\fontclass#name\endcsname %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_true_fontname_check\lastnamedcs \else\ifcsname\??fontfile\defaultfontclass#name\endcsname %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname \expandafter\font_helpers_true_fontname_check\lastnamedcs \else\ifcsname\??fontfile#name\endcsname %\expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname \expandafter\font_helpers_true_fontname_check\lastnamedcs \else #name% \fi\fi\fi} % ok when the last lookup is not stripped .. we ned to be able to define synonyms for symbols % % \def\truefontname#name% % %{\normalexpanded{\noexpand\font_helpers_true_fontname{\clf_truefontname{#name}}}} % {\expandafter\expandafter\expandafter\font_helpers_true_fontname\expandafter\expandafter\expandafter{\clf_truefontname{#name}}} % % \def\font_helpers_true_fontname#name% % {\ifcsname\??fontfile\fontclass#name\endcsname % \expandafter\font_helpers_true_fontname\expandafter{\lastnamedcs}% % \else\ifcsname\??fontfile\defaultfontclass#name\endcsname % \expandafter\font_helpers_true_fontname\expandafter{\lastnamedcs}% % \else\ifcsname\??fontfile#name\endcsname % \expandafter\font_helpers_true_fontname\expandafter{\lastnamedcs}% % \else % % \clf_truefontname{#name}% % #name% so the last one can have features ! % \fi\fi\fi} \def\expandfontsynonym#command#name% one level expansion {\ifcsname\??fontfile\fontclass#name\endcsname %\expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\fontclass#name\endcsname}% \expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}% \else\ifcsname\??fontfile\defaultfontclass#2\endcsname %\expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\defaultfontclass#name\endcsname}% \expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}% \fi\fi} \def\doifelsefontsynonym#name% {\ifcsname\??fontfile\fontclass#name\endcsname \singleexpandafter\firstoftwoarguments \else\ifcsname\??fontfile\defaultfontclass#name\endcsname \doubleexpandafter\firstoftwoarguments \else \doubleexpandafter\secondoftwoarguments \fi\fi} \let\doiffontsynonymelse\doifelsefontsynonym %D \macros %D {tracedfontname} %D %D A goody: \def\tracedfontname#name% {#name\ifcsname\??fontfile\fontclass#name\endcsname %\expandafter\tracedfontname\csname\??fontfile\fontclass#name\endcsname \expandafter\tracedfontname\lastnamedcs \else\ifcsname\??fontfile#name\endcsname %\expandafter\tracedfontname\csname\??fontfile#name\endcsname \expandafter\tracedfontname\lastnamedcs \fi\fi} %D \macros %D {fontclass, defaultfontclass} %D %D The fontclass model was introduced a while after we implement the basic font %D model and at that time we still defaulted to no model at all. Nowadays we default %D to the \type {modern} fontclass. \let\fontclass \empty \let\defaultfontclass\empty \def\fontclassname#class#name% tricky ... no lastnamedcs here due to nesting {\ifcsname\??fontfile#class#name\endcsname \fontclassname{#class}{\csname\??fontfile#class#name\endcsname}% \else\ifcsname\??fontfile#name\endcsname \fontclassname{#class}{\csname\??fontfile#name\endcsname}% \else #2% \fi\fi} \installmacrostack\fontclass %D Files or names can have properties and these need to be consulted at some point. %D They can inherit them. % Why these expanded and rscale not ... maybe not worth the trouble (delayed % expansion actually would be better i.e. macros in feature specs). Test % without pre-expansion. \def\font_helpers_update_font_class_parameters {\edef\m_font_class_direction {\begincsname\??fontclass\fontclass\fontstyle\s!direction \endcsname}% \edef\m_font_class_features {\begincsname\??fontclass\fontclass\fontstyle\s!features \endcsname}% \edef\m_font_class_fallbacks {\begincsname\??fontclass\fontclass\fontstyle\s!fallbacks \endcsname}% \edef\m_font_class_goodies {\begincsname\??fontclass\fontclass\fontstyle\s!goodies \endcsname}% \edef\m_font_class_designsize{\begincsname\??fontclass\fontclass\fontstyle\s!designsize\endcsname}} % resolve % \def\font_helpers_set_features_yes#name% % {\ifcsname\??fontfile\fontclass#name\s!features \endcsname \edef\m_font_features % class + symbolic_name % {\csname\??fontfile\fontclass#name\s!features \endcsname}\else % \ifcsname\??fontfile #name\s!features \endcsname \edef\m_font_features % symbolic_name % {\csname\??fontfile #name\s!features \endcsname}\else % \ifcsname\??fontfile\fontclass #name\endcsname\expandafter\font_helpers_set_features_yes % class + parent_name % \csname\??fontfile\fontclass #name\endcsname \else % \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_features_yes % parent_name % \csname\??fontfile #name\endcsname \else % \let\m_font_features\empty\fi\fi\fi\fi} % % \def\font_helpers_set_fallbacks_yes#name% % {\ifcsname\??fontfile\fontclass#name\s!fallbacks\endcsname \edef\m_font_fallbacks % {\csname\??fontfile\fontclass#name\s!fallbacks\endcsname}\else % \ifcsname\??fontfile #name\s!fallbacks\endcsname \edef\m_font_fallbacks % {\csname\??fontfile #name\s!fallbacks\endcsname}\else % \ifcsname\??fontfile\fontclass #name\endcsname \expandafter\font_helpers_set_fallbacks_yes % \csname\??fontfile\fontclass #name\endcsname \else % \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_fallbacks_yes % \csname\??fontfile #name\endcsname \else % \let\m_font_fallbacks\empty\fi\fi\fi\fi} % % \def\font_helpers_set_goodies_yes#name% % {\ifcsname\??fontfile\fontclass#name\s!goodies \endcsname \edef\m_font_goodies % {\csname\??fontfile\fontclass#name\s!goodies \endcsname}\else % \ifcsname\??fontfile #name\s!goodies \endcsname \edef\m_font_goodies % {\csname\??fontfile #name\s!goodies \endcsname}\else % \ifcsname\??fontfile\fontclass #name\endcsname \expandafter\font_helpers_set_goodies_yes % \csname\??fontfile\fontclass #name\endcsname \else % \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_goodies_yes % \csname\??fontfile #name\endcsname \else % \let\m_font_goodies\empty\fi\fi\fi\fi} % % \def\font_helpers_set_designsize_yes#name% % {\ifcsname\??fontfile\fontclass#name\s!designsize\endcsname \edef\m_font_designsize % {\csname\??fontfile\fontclass#name\s!designsize\endcsname}\else % \ifcsname\??fontfile #name\s!designsize\endcsname \edef\m_font_designsize % {\csname\??fontfile #name\s!designsize\endcsname}\else % \ifcsname\??fontfile\fontclass #name\endcsname \expandafter\font_helpers_set_designsize_yes % \csname\??fontfile\fontclass #name\endcsname \else % \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_designsize_yes % \csname\??fontfile #name\endcsname \else % \let\m_font_designsize\empty\fi\fi\fi\fi} % % \def\font_helpers_set_features_nop#name% % {\ifcsname\??fontfile#name\s!features \endcsname \edef\m_font_features % {\csname\??fontfile#name\s!features \endcsname}\else % \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_features_nop % \csname\??fontfile #name\endcsname \else % \let\m_font_features\empty\fi\fi} % % \def\font_helpers_set_fallbacks_nop#name% % {\ifcsname\??fontfile#name\s!fallbacks\endcsname \edef\m_font_fallbacks % {\csname\??fontfile#name\s!fallbacks\endcsname}\else % \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_fallbacks_nop % \csname\??fontfile #name\endcsname \else % \let\m_font_fallbacks\empty\fi\fi} % % \def\font_helpers_set_goodies_nop#name% % {\ifcsname\??fontfile#name\s!goodies \endcsname \edef\m_font_goodies % {\csname\??fontfile#name\s!goodies \endcsname}\else % \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_goodies_nop % \csname\??fontfile #name\endcsname \else % \let\m_font_goodies\empty\fi\fi} % % \def\font_helpers_set_designsize_nop#name% % {\ifcsname\??fontfile#name\s!designsize\endcsname \edef\m_font_designsize % {\csname\??fontfile#name\s!designsize\endcsname}\else % \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_designsize_nop % \csname\??fontfile #name\endcsname \else % \let\m_font_designsize\empty\fi\fi} \def\font_helpers_set_features_yes#name% {\ifcsname\??fontfile\fontclass#name\s!features\endcsname \edef\m_font_features{\lastnamedcs}\else % class + symbolic_name \ifcsname\??fontfile #name\s!features\endcsname \edef\m_font_features{\lastnamedcs}\else % symbolic_name \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_features_yes\lastnamedcs \else % class + parent_name \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_features_yes\lastnamedcs \else % parent_name \let\m_font_features\empty\fi\fi\fi\fi} \def\font_helpers_set_fallbacks_yes#name% {\ifcsname\??fontfile\fontclass#name\s!fallbacks\endcsname \edef\m_font_fallbacks{\lastnamedcs}\else \ifcsname\??fontfile #name\s!fallbacks\endcsname \edef\m_font_fallbacks{\lastnamedcs}\else \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_fallbacks_yes\lastnamedcs \else \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_fallbacks_yes\lastnamedcs \else \let\m_font_fallbacks\empty\fi\fi\fi\fi} \def\font_helpers_set_goodies_yes#name% {\ifcsname\??fontfile\fontclass#name\s!goodies \endcsname \edef\m_font_goodies{\lastnamedcs}\else \ifcsname\??fontfile #name\s!goodies \endcsname \edef\m_font_goodies{\lastnamedcs}\else \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_goodies_yes\lastnamedcs \else \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_goodies_yes\lastnamedcs \else \let\m_font_goodies\empty\fi\fi\fi\fi} \def\font_helpers_set_designsize_yes#name% {\ifcsname\??fontfile\fontclass#name\s!designsize\endcsname \edef\m_font_designsize{\lastnamedcs}\else \ifcsname\??fontfile #name\s!designsize\endcsname \edef\m_font_designsize{\lastnamedcs}\else \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_designsize_yes\lastnamedcs \else \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_designsize_yes\lastnamedcs \else \let\m_font_designsize\empty\fi\fi\fi\fi} \def\font_helpers_set_features_nop#name% {\ifcsname\??fontfile#name\s!features\endcsname \edef\m_font_features{\lastnamedcs}\else \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_features_nop\lastnamedcs \else \let\m_font_features\empty\fi\fi} \def\font_helpers_set_fallbacks_nop#name% {\ifcsname\??fontfile#name\s!fallbacks\endcsname \edef\m_font_fallbacks{\lastnamedcs}\else \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_fallbacks_nop\lastnamedcs \else \let\m_font_fallbacks\empty\fi\fi} \def\font_helpers_set_goodies_nop#name% {\ifcsname\??fontfile#name\s!goodies\endcsname \edef\m_font_goodies{\lastnamedcs}\else \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_goodies_nop\lastnamedcs \else \let\m_font_goodies\empty\fi\fi} \def\font_helpers_set_designsize_nop#name% {\ifcsname\??fontfile#name\s!designsize\endcsname \edef\m_font_designsize{\lastnamedcs}\else \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_designsize_nop\lastnamedcs \else \let\m_font_designsize\empty\fi\fi} \def\font_helpers_update_font_parameters_yes {\font_helpers_set_features_yes \somefontname \font_helpers_set_fallbacks_yes \somefontname \font_helpers_set_goodies_yes \somefontname \font_helpers_set_designsize_yes\somefontname} \def\font_helpers_update_font_parameters_nop {\font_helpers_set_features_nop \somefontname \font_helpers_set_fallbacks_nop \somefontname \font_helpers_set_goodies_nop \somefontname \font_helpers_set_designsize_nop\somefontname} \def\font_helpers_update_font_parameters {\ifx\fontclass\empty\font_helpers_update_font_parameters_nop\else\font_helpers_update_font_parameters_yes\fi} \installcorenamespace{fontclass} % we can pack them % \unexpanded\def\savefontclassparameters#style#rscale#features#fallbacks#goodies#designsize#direction% % {\setxvalue{\??fontclass\fontclass#style\s!rscale }{#rscale}% % \setxvalue{\??fontclass\fontclass#style\s!features }{#features}% % \setxvalue{\??fontclass\fontclass#style\s!fallbacks }{#fallbacks}% % \setxvalue{\??fontclass\fontclass#style\s!goodies }{#goodies}% % \setxvalue{\??fontclass\fontclass#style\s!designsize}{#designsize}% % \setxvalue{\??fontclass\fontclass#style\s!direction }{#direction}} \unexpanded\def\savefontclassparameters#style#rscale#features#fallbacks#goodies#designsize#direction% {\letgvalue{\??fontclass\fontclass#style\s!rscale }#rscale% \letgvalue{\??fontclass\fontclass#style\s!features }#features% \letgvalue{\??fontclass\fontclass#style\s!fallbacks }#fallbacks% \letgvalue{\??fontclass\fontclass#style\s!goodies }#goodies% \letgvalue{\??fontclass\fontclass#style\s!designsize}#designsize% \letgvalue{\??fontclass\fontclass#style\s!direction }#direction} % math % bonus \let\currentfontinstancespec\clf_currentfontinstancespec % expandable \protect \endinput