summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/font-glf.mklx
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