1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Font Macros Features}
15
16\unprotect
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\permanent\tolerant\protected\def\definefontfeature[#featureset]#spacer[#parent]#spacer[#settings]
123 {\clf_definefontfeature{#featureset}{#parent}{#settings}}
124
125\permanent\tolerant\protected\def\adaptfontfeature[#pattern]#spacer[#settings]
126 {\clf_adaptfontfeature{#pattern}{#settings}}
127
128\permanent\protected\def\fontfeatureslist[#name]#spacer[#separator]
129 {\clf_featurelist{#name}{\detokenize{#separator}}}
130
131\permanent\protected\def\definefontscriptset[#name]#*[#list]
132 {\clf_definefontscriptset{#name}{#list}}
133
134\attribute\zerocount\attributeunsetvalue
135
136\glyphdatafield\zerocount
137
138\let\font_dynamic_value\glyphdatafield
139
140
141
142\mutable\let \currentfeature \s!current
143\let \m_font_feature_list \s!current
144\lettonothing\m_font_feature_asked
145\newconstant \c_font_feature_state
146
147\newevery\everyfontfeatureswitch
148
149
150
151\permanent\tolerant\protected\def\addfeature [#1]#;#2{\edef\m_font_feature_asked{#1#2}\font_feature_add}
152\permanent\tolerant\protected\def\subtractfeature [#1]#;#2{\edef\m_font_feature_asked{#1#2}\font_feature_subtract}
153\permanent\tolerant\protected\def\replacefeature [#1]#;#2{\edef\m_font_feature_asked{#1#2}\font_feature_replace}
154\permanent\tolerant\protected\def\resetandaddfeature[#1]#;#2{\edef\m_font_feature_asked{#1#2}\font_feature_reset_add}
155\permanent\tolerant\protected\def\feature [#1]#;#2{\begincsname\??featureshortcut#1#2\endcsname}
156
157
158
159\permanent\protected\def\doaddfeature #1{\edef\m_font_feature_asked{#1}\font_feature_add}
160\permanent\protected\def\dosubtractfeature #1{\edef\m_font_feature_asked{#1}\font_feature_subtract}
161\permanent\protected\def\doreplacefeature #1{\edef\m_font_feature_asked{#1}\font_feature_replace}
162\permanent\protected\def\doresetandaddfeature#1{\edef\m_font_feature_asked{#1}\font_feature_reset_add}
163
164\protected\def\font_feature_add
165 {\ifnum\c_font_feature_state=\plusone
166 \ifx\m_font_feature_asked\currentfeature\else
167 \font_feature_add_indeed
168 \fi
169 \else
170 \font_feature_add_indeed
171 \fi}
172
173\protected\def\font_feature_add_indeed
174 {\clf_addfeature{\m_font_feature_list}{\m_font_feature_asked}
175 \edef\m_font_feature_list{\m_font_feature_list\m_font_feature_asked}
176 \c_font_feature_state\plusone
177 \let\currentfeature\m_font_feature_asked
178 \expand\everyfontfeatureswitch}
179
180\protected\def\font_feature_subtract
181 {\ifnum\c_font_feature_state=\minusone
182 \ifx\m_font_feature_asked\currentfeature\else
183 \font_feature_subtract_indeed
184 \fi
185 \else
186 \font_feature_subtract_indeed
187 \fi}
188
189\protected\def\font_feature_subtract_indeed
190 {\clf_subtractfeature{\m_font_feature_list}{\m_font_feature_asked}
191 \edef\m_font_feature_list{\m_font_feature_list\m_font_feature_asked}
192 \c_font_feature_state\minusone
193 \let\currentfeature\m_font_feature_asked
194 \expand\everyfontfeatureswitch}
195
196\protected\def\font_feature_replace
197 {\ifzero\c_font_feature_state
198 \ifx\m_font_feature_asked\currentfeature\else
199 \font_feature_replace_indeed
200 \fi
201 \else
202 \font_feature_replace_indeed
203 \fi}
204
205\protected\def\font_feature_replace_indeed
206 {\clf_replacefeature{\m_font_feature_list}{\m_font_feature_asked}
207 \edef\m_font_feature_list{\m_font_feature_list=\m_font_feature_asked}
208 \c_font_feature_state\zerocount
209 \let\currentfeature\m_font_feature_asked
210 \expand\everyfontfeatureswitch}
211
212\permanent\protected\def\resetfeature
213 {\ifx\currentfeature\s!current \else
214 \font_feature_reset_indeed
215 \fi}
216
217\protected\def\font_feature_reset_indeed
218 {\lettonothing\m_font_feature_asked
219 \let\currentfeature\s!current
220 \let\m_font_feature_list\s!current
221 \clf_resetfeature}
222
223\permanent\protected\def\revivefeature
224 {\ifx\currentfeature\s!current \else
225 \font_feature_revive_indeed
226 \fi}
227
228\protected\def\font_feature_revive_indeed
229 {\clf_revivefeature{\m_font_feature_list}}
230
231\protected\def\font_feature_reset_add
232 {\ifnum\c_font_feature_state=\plusone
233 \ifx\m_font_feature_asked\currentfeature\else
234 \font_feature_reset_add_indeed
235 \fi
236 \else
237 \font_feature_reset_add_indeed
238 \fi}
239
240\protected\def\font_feature_reset_add_indeed
241 {\clf_addfeature{\s!current}{\m_font_feature_asked}
242 \edef\m_font_feature_list{\s!current\m_font_feature_asked}
243 \c_font_feature_state\plusone
244 \let\currentfeature\m_font_feature_asked
245 \expand\everyfontfeatureswitch}
246
247\installcorenamespace{featureshortcut}
248
249\letcsname\??featureshortcut \endcsname\addfeature
250\letcsname\??featureshortcut \endcsname\subtractfeature
251\letcsname\??featureshortcut =\endcsname\replacefeature
252\letcsname\??featureshortcut !\endcsname\resetandaddfeature
253\letcsname\??featureshortcut >\endcsname\revivefeature
254\letcsname\??featureshortcut <\endcsname\resetfeature
255
256\letcsname\??featureshortcut\v!more \endcsname\addfeature
257\letcsname\??featureshortcut\v!less \endcsname\subtractfeature
258\letcsname\??featureshortcut\v!new \endcsname\replacefeature
259\letcsname\??featureshortcut\v!reset \endcsname\resetfeature
260\letcsname\??featureshortcut\v!default\endcsname\revivefeature
261\letcsname\??featureshortcut\v!old \endcsname\revivefeature
262\letcsname\??featureshortcut\v!local \endcsname\resetandaddfeature
263\letcsname\??featureshortcut\s!unknown\endcsname\empty
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288\let\m_font_feature_language\currentlanguage
289
290\permanent\protected\def\addfflanguage
291 {\ifx\currentlanguage\m_font_feature_language\else
292 \let\m_font_feature_language\currentlanguage
293 \let\m_font_feature_asked \currentlanguage
294 \font_feature_add
295 \fi}
296
297
298
299\permanent\protected\def\featureattribute#feature
300 {\clf_featureattribute{#feature}}
301
302\permanent\protected\def\setfontfeature#feature
303 {\edef\currentfeature{#feature}
304 \let\m_font_feature_list\currentfeature
305 \clf_setfontfeature{\currentfeature}}
306
307
308
309\aliased\let\resetfontfeature\resetfeature
310
311
312
313
314
315
316
317
318
319
320\aliased\let\setff\setfontfeature
321\aliased\let\addfs\doaddfeature
322\aliased\let\subfs\dosubtractfeature
323\aliased\let\addff\doaddfeature
324\aliased\let\subff\dosubtractfeature
325
326
327
328
329
330
331
332\definefontfeature
333 [justos]
334 [mode=node,onum=yes]
335
336
337\permanent\protected\def\os{\setfontfeature{justos}}
338
339
340
341
342
343\permanent\def\doifelsecurrentfonthasfeature#feature{\clf_doifelsecurrentfonthasfeature{#feature}}
344\permanent\def\doifelsefontfeature #feature{\clf_doifelsefontfeature {#feature}}
345\permanent\def\doifunknownfontfeature #feature{\clf_doifunknownfontfeature {#feature}}
346
347\aliased\let\doifcurrentfonthasfeatureelse\doifelsecurrentfonthasfeature
348\aliased\let\doiffontfeatureelse \doifelsefontfeature
349
350
351
352\clf_registerlanguagefeatures
353
354
355
356\permanent\protected\def\useaddfontfeatureparameter#namespace
357 {\edef\m_font_feature_asked{#namespace\c!features}
358 \ifempty\m_font_feature_asked\else
359 \font_feature_add
360 \fi}
361
362
363
364\permanent\protected\def\slashedzero
365 {\dontleavehmode
366 \begingroup
367
368 \doaddfeature{zero}
369 0
370 \endgroup}
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388\permanent\protected\def\blockligatures[#1]{\clf_blockligatures{#1}}
389
390\protect \endinput
391 |