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\unexpanded\def\definefontfeature
123 {\dotripleargument\font_basics_define_font_feature}
124
125\def\font_basics_define_font_feature[#featureset][#parent][#settings]
126 {\clf_definefontfeature{#featureset}{#parent}{#settings}}
127
128\unexpanded\def\adaptfontfeature
129 {\dodoubleargument\font_basics_adapt_font_feature}
130
131\def\font_basics_adapt_font_feature[#pattern][#settings]
132 {\clf_adaptfontfeature{#pattern}{#settings}}
133
134\unexpanded\def\fontfeatureslist
135 {\dodoubleargument\font_basics_features_list}
136
137\def\font_basics_features_list[#name][#separator]
138 {\clf_featurelist{#name}{\detokenize{#separator}}}
139
140\ifcase\contextlmtxmode
141 \attribute\zerocount\zerocount
142 \def\font_dynamic_value{\attribute\zerocount}
143\else
144 \attribute\zerocount\attributeunsetvalue
145 \glyphdatafield\zerocount
146 \let\font_dynamic_value\glyphdatafield
147\fi
148
149
150
151\let\currentfeature \s!current
152\let\m_font_feature_list \s!current
153\let\m_font_feature_asked\empty
154
155\newconstant\c_font_feature_state
156
157
158
159\unexpanded\def\addfeature {\doifelsenextoptionalcs\font_feature_add_yes \font_feature_add_nop }
160\unexpanded\def\subtractfeature {\doifelsenextoptionalcs\font_feature_subtract_yes \font_feature_subtract_nop }
161\unexpanded\def\replacefeature {\doifelsenextoptionalcs\font_feature_replace_yes \font_feature_replace_nop }
162\unexpanded\def\resetandaddfeature{\doifelsenextoptionalcs\font_feature_reset_add_yes\font_feature_reset_add_nop}
163\unexpanded\def\feature {\doifelsenextoptionalcs\font_feature_yes \font_feature_nop }
164
165\unexpanded\def\font_feature_add_yes [#feature]{\edef\m_font_feature_asked{#feature}\font_feature_add}
166\unexpanded\def\font_feature_add_nop #feature{\edef\m_font_feature_asked{#feature}\font_feature_add}
167
168\unexpanded\def\font_feature_subtract_yes [#feature]{\edef\m_font_feature_asked{#feature}\font_feature_subtract}
169\unexpanded\def\font_feature_subtract_nop #feature{\edef\m_font_feature_asked{#feature}\font_feature_subtract}
170
171\unexpanded\def\font_feature_replace_yes [#feature]{\edef\m_font_feature_asked{#feature}\font_feature_replace}
172\unexpanded\def\font_feature_replace_nop #feature{\edef\m_font_feature_asked{#feature}\font_feature_replace}
173
174\unexpanded\def\font_feature_reset_add_yes[#feature]{\edef\m_font_feature_asked{#feature}\font_feature_reset_add}
175\unexpanded\def\font_feature_reset_add_nop #feature{\edef\m_font_feature_asked{#feature}\font_feature_reset_add}
176
177\let\doaddfeature \font_feature_add_nop
178\let\dosubtractfeature \font_feature_subtract_nop
179\let\doreplacefeature \font_feature_replace_nop
180\let\doresetandaddfeature\font_feature_reset_add_nop
181
182\unexpanded\def\font_feature_add
183 {\ifnum\c_font_feature_state=\plusone
184 \ifx\m_font_feature_asked\currentfeature\else
185 \font_feature_add_indeed
186 \fi
187 \else
188 \font_feature_add_indeed
189 \fi}
190
191\unexpanded\def\font_feature_add_indeed
192 {\clf_addfeature{\m_font_feature_list}{\m_font_feature_asked}
193 \edef\m_font_feature_list{\m_font_feature_list\m_font_feature_asked}
194 \c_font_feature_state\plusone
195 \let\currentfeature\m_font_feature_asked}
196
197\unexpanded\def\font_feature_subtract
198 {\ifnum\c_font_feature_state=\minusone
199 \ifx\m_font_feature_asked\currentfeature\else
200 \font_feature_subtract_indeed
201 \fi
202 \else
203 \font_feature_subtract_indeed
204 \fi}
205
206\unexpanded\def\font_feature_subtract_indeed
207 {\clf_subtractfeature{\m_font_feature_list}{\m_font_feature_asked}
208 \edef\m_font_feature_list{\m_font_feature_list\m_font_feature_asked}
209 \c_font_feature_state\minusone
210 \let\currentfeature\m_font_feature_asked}
211
212\unexpanded\def\font_feature_replace
213 {\ifnum\c_font_feature_state=\zerocount
214 \ifx\m_font_feature_asked\currentfeature\else
215 \font_feature_replace_indeed
216 \fi
217 \else
218 \font_feature_replace_indeed
219 \fi}
220
221\unexpanded\def\font_feature_replace_indeed
222 {\clf_replacefeature{\m_font_feature_list}{\m_font_feature_asked}
223 \edef\m_font_feature_list{\m_font_feature_list=\m_font_feature_asked}
224 \c_font_feature_state\zerocount
225 \let\currentfeature\m_font_feature_asked}
226
227\unexpanded\def\resetfeature
228 {\ifx\currentfeature\s!current \else
229 \font_feature_reset_indeed
230 \fi}
231
232\unexpanded\def\font_feature_reset_indeed
233 {\let\m_font_feature_asked\empty
234 \let\currentfeature \s!current
235 \let\m_font_feature_list \s!current
236 \clf_resetfeature}
237
238\unexpanded\def\revivefeature
239 {\ifx\currentfeature\s!current \else
240 \font_feature_revive_indeed
241 \fi}
242
243\unexpanded\def\font_feature_revive_indeed
244 {\clf_revivefeature{\m_font_feature_list}}
245
246\unexpanded\def\font_feature_reset_add
247 {\ifnum\c_font_feature_state=\plusone
248 \ifx\m_font_feature_asked\currentfeature\else
249 \font_feature_reset_add_indeed
250 \fi
251 \else
252 \font_feature_reset_add_indeed
253 \fi}
254
255\unexpanded\def\font_feature_reset_add_indeed
256 {\clf_addfeature{\s!current}{\m_font_feature_asked}
257 \edef\m_font_feature_list{\s!current\m_font_feature_asked}
258 \c_font_feature_state\plusone
259 \let\currentfeature\m_font_feature_asked}
260
261\installcorenamespace{featureyes}
262\installcorenamespace{featurenop}
263
264
265
266
267\unexpanded\def\font_feature_yes[#method]{\begincsname\??featureyes#method\endcsname}
268\unexpanded\def\font_feature_nop #method{\begincsname\??featurenop#method\endcsname}
269
270\letvalue{\??featureyes }\addfeature
271\letvalue{\??featurenop }\addfeature
272\letvalue{\??featureyes }\subtractfeature
273\letvalue{\??featurenop }\subtractfeature
274\letvalue{\??featureyes =}\replacefeature
275\letvalue{\??featurenop =}\replacefeature
276\letvalue{\??featureyes !}\resetandaddfeature
277\letvalue{\??featurenop !}\resetandaddfeature
278\letvalue{\??featureyes >}\revivefeature
279\letvalue{\??featurenop >}\revivefeature
280\letvalue{\??featureyes <}\resetfeature
281\letvalue{\??featurenop <}\resetfeature
282
283\letvalue{\??featureyes\v!more }\addfeature
284\letvalue{\??featurenop\v!more }\addfeature
285\letvalue{\??featureyes\v!less }\subtractfeature
286\letvalue{\??featurenop\v!less }\subtractfeature
287\letvalue{\??featureyes\v!new }\replacefeature
288\letvalue{\??featurenop\v!new }\replacefeature
289\letvalue{\??featureyes\v!reset }\resetfeature
290\letvalue{\??featurenop\v!reset }\resetfeature
291\letvalue{\??featureyes\v!default}\revivefeature
292\letvalue{\??featurenop\v!default}\revivefeature
293\letvalue{\??featureyes\v!old }\revivefeature
294\letvalue{\??featurenop\v!old }\revivefeature
295\letvalue{\??featureyes\v!local }\resetandaddfeature
296\letvalue{\??featurenop\v!local }\resetandaddfeature
297\letvalue{\??featureyes\s!unknown}\empty
298\letvalue{\??featurenop\s!unknown}\empty
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323\let\m_font_feature_language\currentlanguage
324
325\unexpanded\def\addfflanguage
326 {\ifx\currentlanguage\m_font_feature_language\else
327 \let\m_font_feature_language\currentlanguage
328 \let\m_font_feature_asked \currentlanguage
329 \font_feature_add
330 \fi}
331
332
333
334\unexpanded\def\featureattribute#feature
335 {\clf_featureattribute{#feature}}
336
337\unexpanded\def\setfontfeature#feature
338 {\edef\currentfeature{#feature}
339 \let\m_font_feature_list\currentfeature
340 \clf_setfontfeature{\currentfeature}}
341
342\let\resetfontfeature\resetfeature
343
344
345
346\let\addfontfeaturetoset \font_feature_add_nop
347\let\subtractfontfeaturefromset \font_feature_subtract_nop
348\let\addfontfeaturetofont \font_feature_add_nop
349\let\subtractfontfeaturefromfont\font_feature_subtract_nop
350
351\let\setff\setfontfeature
352\let\addfs\addfontfeaturetoset
353\let\subfs\subtractfontfeaturefromset
354\let\addff\addfontfeaturetofont
355\let\subff\subtractfontfeaturefromfont
356
357
358
359
360
361
362
363\definefontfeature
364 [justos]
365 [mode=node,onum=yes]
366
367
368\unexpanded\def\os{\setfontfeature{justos}}
369
370
371
372
373
374\def\doifelsecurrentfonthasfeature#feature
375 {\clf_doifelsecurrentfonthasfeature{#feature}}
376
377\let\doifcurrentfonthasfeatureelse\doifelsecurrentfonthasfeature
378
379\def\doifelsefontfeature#feature
380 {\clf_doifelsefontfeature{#feature}}
381
382\let\doiffontfeatureelse\doifelsefontfeature
383
384\def\doifunknownfontfeature#feature
385 {\clf_doifunknownfontfeature{#feature}}
386
387
388
389\clf_registerlanguagefeatures
390
391
392
393\unexpanded\def\useaddfontfeatureparameter#namespace
394 {\edef\m_font_feature_asked{#namespace\c!features}
395 \ifx\m_font_feature_asked\empty\else
396 \font_feature_add
397 \fi}
398
399
400
401\unexpanded\def\slashedzero
402 {\dontleavehmode
403 \begingroup
404
405 \font_feature_add_nop{zero}
406 0
407 \endgroup}
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425\unexpanded\def\blockligatures[#1]{\clf_blockligatures{#1}}
426
427\protect \endinput
428 |