%D \module %D [ file=font-glf, %D version=2020.12.21, %D title=\CONTEXT\ Font Macros, %D subtitle=Glyph Scaling, %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 / Glyph Scaling} \unprotect %D Experiment: \installcorenamespace{scaledfont} \installcorenamespace{scaledfontxscale} \installcorenamespace{scaledfontyscale} \installcommandhandler \??scaledfont {scaledfont} \??scaledfont \appendtoks \ifempty\currentscaledfont\else \expandafter\integerdef\csname\??scaledfontxscale\currentscaledfont\endcsname\numericscale\scaledfontparameter\c!xscale\relax \expandafter\integerdef\csname\??scaledfontyscale\currentscaledfont\endcsname\numericscale\scaledfontparameter\c!yscale\relax \fi \to \everysetupscaledfont \integerdef\bodyglyphscale\plusthousand \appendtoks \expandafter\integerdef\csname\??scaledfontxscale\currentscaledfont\endcsname\numericscale\scaledfontparameter\c!xscale\relax \expandafter\integerdef\csname\??scaledfontyscale\currentscaledfont\endcsname\numericscale\scaledfontparameter\c!yscale\relax \overloaded\frozen\protected\edefcsname\currentscaledfont\endcsname {\glyphxscale\numexpr\csname\??scaledfontxscale\currentscaledfont\endcsname*\bodyglyphscale/\plusthousand\relax \glyphyscale\numexpr\csname\??scaledfontyscale\currentscaledfont\endcsname*\bodyglyphscale/\plusthousand\relax \begincsname\scaledfontparameter\c!style\endcsname}% \to \everydefinescaledfont \setupscaledfont [\c!scale=\plusthousand, \c!xscale=\scaledfontparameter\c!scale, \c!yscale=\scaledfontparameter\c!scale] \installcorenamespace{scaledfontbody} \permanent\protected\def\definescaledfontbody[#1]#*[#2]% only for testing {%\expandafter\integerdef\csname\??scaledfontbody#1\endcsname\integerdef\bodyglyphscale\numericscale#2\relax \frozen\protected\defcsname#1\endcsname% {\integerdef\bodyglyphscale\numericscale#2\relax \glyphxscale\bodyglyphscale \glyphyscale\bodyglyphscale \the\everybodyfont}} \def\font_helpers_set_glyph_scale_by_size#fontsize% gets character (x xx a etc) {\glyphxscale\numexpr\numericscale \ifcsname\??fontenvironments\fontclass\fontbody#fontsize\endcsname \lastnamedcs \orelse\ifcsname\??fontenvironments\fontclass\s!default#fontsize\endcsname \lastnamedcs \orelse\ifcsname\??fontenvironments\fontbody#fontsize\endcsname \lastnamedcs \orelse\ifcsname\??fontenvironments\s!default#fontsize\endcsname \lastnamedcs \orelse\ifcsname\??fontenvironments\fontclass\s!default\s!text\endcsname \lastnamedcs \orelse\ifcsname\??fontenvironments\s!default\s!text\endcsname \lastnamedcs \else \plusthousand \fi*\bodyglyphscale/\plusthousand\relax \glyphyscale\glyphxscale} % \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} \protected\def\font_helpers_set_current_font_alternative_size_g#alternative#size% \sla {\edef\fontalternative{#alternative}% \edef\fontsize{#size}% \csname\fontalternative\endcsname \font_helpers_set_glyph_scale_by_size\fontsize \ifskipfontcharacteristics \setfontcharacteristics \the\everyfontswitch \fi} % \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} \protected\def\font_helpers_set_current_font_size_g#size% {\edef\fontsize{#size}% \font_helpers_set_glyph_scale_by_size\fontsize \ifskipfontcharacteristics \setfontcharacteristics \the\everyfontswitch \fi} % \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} \protected\def\font_helpers_set_current_font_style_size_g#style#size% \rma {\edef\fontstyle{#style}% \edef\fontsize{#size}% \csname\fontstyle\endcsname \font_helpers_set_glyph_scale_by_size\fontsize \ifskipfontcharacteristics \setfontcharacteristics \the\everyfontswitch \fi} % \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} \protected\def\font_helpers_set_current_font_style_alternative_size_g#style#alternative#size% \rmsla {\edef\fontstyle{#style}% \edef\fontalternative{#alternative}% \edef\fontsize{#size}% \csname\fontstyle\endcsname \csname\fontalternative\endcsname \font_helpers_set_glyph_scale_by_size\fontsize \ifskipfontcharacteristics \setfontcharacteristics \the\everyfontswitch \fi} % \def\font_helpers_set_current_font_xxx_alternative#alternative#xsize#scriptstyle% % {\ifmmode % #scriptstyle% % \else % \font_helpers_set_current_xsize_alternative{#xsize}{#alternative}% % \fi} \def\font_helpers_set_current_font_xxx_alternative_g#alternative#xsize#scriptstyle% {\ifmmode #scriptstyle% \else \csname#alternative\endcsname \font_helpers_set_glyph_scale_by_size{#alternative}% \ifskipfontcharacteristics \setfontcharacteristics \fi \fi} % \newtoks\everyenableautoglyphscaling % % \permanent\protected\def\enableautoglyphscaling % {\the\everyenableautoglyphscaling} % % \appendtoks % \let\font_helpers_set_current_font_alternative_size \font_helpers_set_current_font_alternative_size_g % \let\font_helpers_set_current_font_size \font_helpers_set_current_font_size_g % \let\font_helpers_set_current_font_style_size \font_helpers_set_current_font_style_size_g % \let\font_helpers_set_current_font_style_alternative_size\font_helpers_set_current_font_style_alternative_size_g % \let\font_helpers_set_current_font_xxx_alternative \font_helpers_set_current_font_xxx_alternative_g % \to \everyenableautoglyphscaling \protect \endinput