blob: 125acb29b661f743400b1007af99d08c2eb513a4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
%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
|