font-pre.mkxl /size: 29 Kb    last modification: 2025-02-21 11:03
1%D \module
2%D   [       file=font-pre,
3%D        version=2012.01.04, % moved from font-ini
4%D          title=\CONTEXT\ Font Macros,
5%D       subtitle=Predefined,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\writestatus{loading}{ConTeXt Font Macros / Predefined}
15
16\unprotect
17
18%D A basic set of features is defined here.
19
20% beware, base mode + dynamics can give weird effects
21
22% frac : with numr dnom
23%
24% vkrn valt vert vrt2 vpal : when vertical
25%
26% rtlm rtla : in r2l runs
27% ltrm ltra : in l2r runs
28%
29% rvrn : variable fonts
30%
31% rtbd lfbd : opbd
32%
33% rkrf rphf vatu vjmo tjmo rclt psts pstf ljmo haln
34% pres pref nukt
35% abvs abvm blwm blws cjct blwf akhn (indic)
36% half
37% abvf cfar (khmer)
38%
39% ccmp locl calt clig liga rlig
40%
41% mkmk mark kern (palt pwid) curs (by choice but some fonts need it)
42%
43% init medi isol fina (unicode)
44% fin3 fin2 med2 : syriac
45%
46% cpsp : percentage spacing (todo)
47%
48% dtls flac :math
49
50%D The missing feature:
51%D
52%D \starttyping
53%D \ruledhbox{\char"2012}\par % figuredash
54%D \ruledhbox{0}\par
55%D \stoptyping
56
57%D We wipe math from text fonts, just to be sure, but in some cases like koeieletters and
58%D euler we can't do that, so there we have to disable it (in the typescript).
59
60\definefontfeature
61  [always]
62  [mode=node,    % we had 'auto', but let's try 'node' for a while and see what the impact is
63   script=auto,  % on speed; 'base' just doesn't play well with dynamics; some day we can even
64   autoscript=position,
65   autolanguage=position,
66   wipemath=yes, % for instance needed for dejavu
67   textcontrol={collapsehyphens,replaceapostrophe},
68 % compoundhyphen=yes,
69   checkmissing=yes,
70   kern=yes,     % consider skipping the base passes when no base mode is used
71   mark=yes,
72   mkmk=yes,
73   curs=yes]
74
75\definefontfeature
76  [default]
77  [always]
78  [itlc=yes, % new per 10-2023
79   liga=yes]
80
81 % ccmp=yes, % maybe too
82 % locl=yes, % maybe too
83 % calt=yes, % maybe too
84 % clig=yes, % maybe too
85 % rlig=yes, % maybe too
86 % tlig=yes, % no longer default (texligatures=yes)
87 % trep=yes, % no longer default (texquotes=yes)
88
89% if needed users can add this to a local cont-loc.mkxl in texmf-local:
90
91% \definefontfeature
92%   [default]
93%   [default]
94%   [textcontrol=,
95%    tlig=yes,
96%    trep=yes]
97
98\definefontfeature
99  [original] % a clone of default so we can revert
100  [default]
101
102\definefontfeature
103  [smallcaps]
104  [always]
105  [smcp=yes]
106
107\definefontfeature
108  [oldstyle]
109  [always]
110  [onum=yes,
111   liga=yes]
112
113\definefontfeature
114  [inlinenumbers]
115  [pnum=yes,
116   tnum=no]
117
118\definefontfeature
119  [tabularnumbers]
120  [tnum=yes,
121   pnum=no]
122
123\definefontfeature
124  [oldstylenumbers]
125  [onum=yes]
126
127\definefontfeature
128  [zero]
129  [zero=yes]
130
131% \definefontfeature
132%   [newstyle]
133%   [onum=no]
134
135\definefontfeature % == default unless redefined
136  [ligatures]
137  [always]
138  [liga=yes]
139
140\definefontfeature
141  [letterspacing]
142  [liga=no,
143   rlig=no,
144   clig=no,
145   dlig=no,
146   ccmp=yes,
147   keepligatures=auto]
148
149\definefontfeature % can be used for type1 fonts
150  [complete]
151  [always]
152  [compose=yes,
153   liga=yes]
154
155\definefontfeature
156  [none]
157  [mode=none,
158   features=no]
159
160% \definefontfeature[none][none][textcontrol=collapsehyphens]
161
162\definefontfeature
163  [semitic-complete]
164  [mode=node,analyze=yes,language=dflt,ccmp=yes,
165   autoscript=position,autolanguage=position,
166   init=yes,medi=yes,fina=yes,isol=yes,
167 % fin2=yes,fin3=yes,med2=yes,
168   mark=yes,mkmk=yes,kern=yes,curs=yes,
169   liga=yes,dlig=yes,rlig=yes,clig=yes,calt=yes]
170
171\definefontfeature
172  [semitic-simple]
173  [mode=node,analyze=yes,language=dflt,ccmp=yes,
174   autoscript=position,autolanguage=position,
175   init=yes,medi=yes,fina=yes,isol=yes,
176 % fin2=yes,fin3=yes,med2=yes,
177   mark=yes,mkmk=yes,kern=yes,curs=yes,
178   rlig=yes,calt=yes]
179
180\definefontfeature
181  [arabic]
182  [semitic-complete]
183  [script=arab]
184
185\definefontfeature
186  [syriac]
187  [arabic]
188  [fin2=yes,fin3=yes,med2=yes] % script=syrc
189
190\definefontfeature
191  [reordercombining]
192  [reordercombining=yes]
193
194\definefontfeature
195  [hebrew]
196  [semitic-complete]
197  [script=hebr,
198   reordercombining=yes] % seems to work best with reasonable fonts
199
200\definefontfeature
201  [simplearabic]
202  [semitic-simple]
203  [script=arab]
204
205\definefontfeature
206  [simplehebrew]
207  [semitic-simple]
208  [script=hebr]
209
210% indic:
211%
212% conjuncts : auto | continue | quit (default)
213% movematra : auto | leftbeforebase | default
214
215\definefontfeature
216  [indic-common]
217  [mode=node,
218   language=dflt,
219   % localized
220   indic=auto, % we need to handle fuzzy fonts
221   % localized
222   locl=yes,
223   % positioning
224   kern=yes,
225   dist=yes,
226   % above/below base marks
227   abvm=yes,
228   blwm=yes,
229   % basic shaping
230   nukt=yes,
231   akhn=yes,
232   rphf=yes,
233   % presentation
234   pres=yes,
235   abvs=yes,
236   blws=yes,
237   psts=yes,
238   haln=yes,
239   calt=yes]
240
241\definefontfeature
242  [devanagari-one]
243  [indic-common]
244  [script=deva,
245   % basic shaping
246   rkrf=yes,
247   blwf=yes,
248   half=yes,
249   vatu=yes,
250   cjct=yes]
251
252\definefontfeature
253  [bengali-one]
254  [indic-common]
255  [script=beng,
256   % basic shaping
257   blwf=yes,
258   half=yes,
259   pstf=yes,
260   vatu=yes,
261   cjct=yes,
262   % presentation
263   init=yes]
264
265\definefontfeature
266  [gujarati-one]
267  [indic-common]
268  [script=gujr,
269   % basic shaping
270   rkrf=yes,
271   blwf=yes,
272   half=yes,
273   vatu=yes,
274   cjct=yes]
275
276\definefontfeature
277  [gurmukhi-one]
278  [indic-common]
279  [script=guru,
280   % basic shaping
281   blwf=yes,
282   half=yes,
283   pstf=yes,
284   vatu=yes,
285   cjct=yes]
286
287\definefontfeature
288  [kannada-one]
289  [indic-common]
290  [script=knda,
291   % basic shaping
292   pref=yes,
293   blwf=yes,
294   half=yes,
295   pstf=yes,
296   cjct=yes]
297
298\definefontfeature
299  [malayalam-one]
300  [indic-common]
301  [script=mlym,
302   % basic shaping
303   pref=yes,
304   blwf=yes,
305   half=yes,
306   pstf=yes,
307   cjct=yes]
308
309\definefontfeature
310  [oriya-one]
311  [indic-common]
312  [script=orya,
313   % basic shaping
314   blwf=yes,
315   pstf=yes,
316   cjct=yes]
317
318\definefontfeature
319  [tamil-one]
320  [indic-common]
321  [script=taml,
322   % basic shaping
323   pref=yes,
324   half=yes]
325
326\definefontfeature
327  [telugu-one]
328  [indic-common]
329  [script=telu,
330   % basic shaping
331   pref=yes,
332   blwf=yes,
333   half=yes,
334   pstf=yes,
335   cjct=yes]
336
337\definefontfeature [devanagari-two] [devanagari-one] [script=dev2]
338\definefontfeature [bengali-two]    [bengali-one]    [script=bng2]
339\definefontfeature [gujarati-two]   [gujarati-one]   [script=gjr2]
340\definefontfeature [gurmukhi-two]   [gurmukhi-one]   [script=gur2]
341\definefontfeature [kannada-two]    [kannada-one]    [script=knd2]
342\definefontfeature [malayalam-two]  [malayalam-one]  [script=mlm2]
343\definefontfeature [oriya-two]      [oriya-one]      [script=ory2]
344\definefontfeature [tamil-two]      [tamil-one]      [script=tml2]
345\definefontfeature [telugu-two]     [telugu-one]     [script=tel2]
346
347% mongolian
348
349\definefontfeature
350  [mongolian]
351  [default]
352  [script=mong,
353   init=yes,medi=yes,fina=yes,isol=yes,
354   rlig=yes,rclt=yes,calt=yes,
355  %dlig=yes,cswh=yes, % optional
356   mset]
357
358% tibetan
359
360\definefontfeature
361  [tibetan]
362  [always]
363  [script=tibt,
364   language=dflt,
365   locl=yes,
366   ccmp=yes,
367   abvs=yes,
368   blws=yes,
369   calt=yes,
370   liga=yes,
371   abvm=yes,
372   blwm=yes]
373
374% cjk
375
376\definefontfeature
377  [jamoforms]
378  [ljmo=yes,
379   tjmo=yes,
380   vjmo=yes]
381
382% \definefontfeature
383%   [japanese]
384%   [default]
385%   [language=jan]
386
387% \definefontfeature
388%   [simplified-chinese]
389%   [default]
390%   [language=zhs]
391
392% \definefontfeature
393%   [traditional-chinese]
394%   [default]
395%   [language=zht]
396
397% \definefontfeature
398%   [chinese]
399%   [simplified-chinese]
400
401% \definefontfeature
402%   [korean]
403%   [default]
404%   [language=kor]
405
406% symbols:
407
408\definefontfeature
409  [dingbats]
410  [mode=base,
411   goodies=dingbats,
412   unicoding=yes]
413
414% math:
415
416\definefontfeature
417  [mathematics]
418  [mode=base,
419 % mode=none, % better, maybe do this last
420   kern=yes,  % =force
421 % flac=yes,  % handled differently
422 % liga=yes,  % makes no sense
423   mathalternates=yes,
424 % mathitalics=yes, % we pass them
425 % mathdimensions=all,
426 % mathkerns=yes,
427 % staircase=yes,
428   compactmath=yes,
429   flattenaccents=yes,
430 % mathgaps=yes,
431   wipemath=no,
432   mathexpansion=math,
433%    checkmissing=yes,
434   language=dflt,
435   script=math]
436
437\ifdefined\mathnolimitsmode
438    \mathnolimitsmode\plusone % font driven (only opentype)
439\fi
440
441% \ifdefined\variablefam
442%     \variablefam 63
443% \fi
444
445\definefontfeature[virtualmath]       [mathematics]
446
447\definefontfeature[math]              [mathematics] [ssty=no]
448\definefontfeature[math-text]         [mathematics] [ssty=no]
449\definefontfeature[math-script]       [mathematics] [ssty=1]
450\definefontfeature[math-scriptscript] [mathematics] [ssty=2]
451
452%D Nice to have too:
453
454\definefontfeature
455  [quality]
456  [expansion=quality,
457   protrusion=quality]
458
459\definefontfeature
460  [fullprotrusion]
461  [protrusion=pure]
462
463\definefontfeature
464  [slanted]
465  [slant=.2]
466
467% \definefontfeature
468%   [boldened]
469%   [extend=1.2]
470
471%D Tweaks:
472%D
473%D \starttyping
474%D \setupbodyfont[dejavu]
475%D
476%D \starttext
477%D     \startTEXpage[align={tolerant,stretch},offset=1ex]
478%D         {\addff{camelcasing} \samplefile{tufte}\par}
479%D         {\addff{uppercasing} \samplefile{tufte}\par}
480%D         {\addff{lowercasing} \samplefile{tufte}\par}
481%D         {\addff{primes} 123'345''\par}
482%D     \stopTEXpage
483%D \stoptext
484%D \stoptyping
485
486\definefontfeature[primes]     [primes=yes] % text
487\definefontfeature[uppercasing][uppercasing=yes]
488\definefontfeature[lowercasing][lowercasing=yes]
489\definefontfeature[camelcasing][camelcasing=yes]
490\definefontfeature[tabledigits][tabledigits=yes,tnum=yes]
491
492%D Neat:
493
494% By eye:
495%
496% \definefontfeature[boldened-10][effect={width=0.10,delta=1.0,hdelta=0.500,ddelta=0.150,vshift=0.125,extend=1.025,squeeze=0.99250}]
497% \definefontfeature[boldened-15][effect={width=0.15,delta=1.0,hdelta=0.500,ddelta=0.150,vshift=0.250,extend=1.050,squeeze=0.98750}]
498% \definefontfeature[boldened-20][effect={width=0.20,delta=1.0,hdelta=0.500,ddelta=0.150,vshift=0.375,extend=1.075,squeeze=0.98125}]
499% \definefontfeature[boldened-30][effect={width=0.30,delta=1.0,hdelta=0.500,ddelta=0.150,vshift=0.500,extend=1.100,squeeze=0.97500}]
500%
501% By calculation:
502%
503% \definefontfeature[boldened-10][effect={width=0.10,delta=1.0,hdelta=0.02500,ddelta=0.02500,vshift=0.02500,extend=1.050,squeeze=0.99500}]
504% \definefontfeature[boldened-15][effect={width=0.15,delta=1.0,hdelta=0.05625,ddelta=0.05625,vshift=0.05625,extend=1.075,squeeze=0.99250}]
505% \definefontfeature[boldened-20][effect={width=0.20,delta=1.0,hdelta=0.10000,ddelta=0.10000,vshift=0.10000,extend=1.100,squeeze=0.99000}]
506% \definefontfeature[boldened-30][effect={width=0.30,delta=1.0,hdelta=0.22500,ddelta=0.22500,vshift=0.22500,extend=1.150,squeeze=0.98500}]
507%
508% So we can do this:
509
510\definefontfeature[boldened-10][effect={width=0.10,auto=yes}]
511\definefontfeature[boldened-15][effect={width=0.15,auto=yes}]
512\definefontfeature[boldened-20][effect={width=0.20,auto=yes}]
513\definefontfeature[boldened-25][effect={width=0.25,auto=yes}]
514\definefontfeature[boldened-30][effect={width=0.30,auto=yes}]
515
516\definefontfeature
517  [boldened]
518  [boldened-30]
519
520%D Handy too:
521
522\definefontscriptset % just an example
523  [mixed]
524  [dflt,latn,cyrl,grek]
525
526% \definefontfeature[default][default][script=mixed]
527% \definefontfeature[default][default][kern=always]
528
529%D Emoji etc:
530
531\definefontfeature[bandw:overlay][ccmp=yes,dist=yes]
532\definefontfeature[color:overlay][ccmp=yes,dist=yes,colr=yes]
533%definefontfeature[bandw:svg]    [ccmp=yes,dist=yes]
534\definefontfeature[color:svg]    [ccmp=yes,dist=yes,svg=yes]
535%definefontfeature[bandw:bitmap] [ccmp=yes,dist=yes,sbix=yes]
536\definefontfeature[color:bitmap] [ccmp=yes,dist=yes,sbix=yes] % also cblc
537
538% Plus an automatic one:
539
540\definefontfeature[color]        [ccmp=yes,dist=yes,color=auto]
541
542%D We define some colors that are used in tracing (for instance \OPENTYPE\
543%D features). We cannot yet inherit because no colors are predefined.
544
545\definecolor[font:init][r=.75]
546\definecolor[font:medi][g=.75]
547\definecolor[font:fina][b=.75]
548\definecolor[font:isol][r=.75,g=.75] % [y=.75]
549\definecolor[font:mark][r=.75,b=.75] % [m=.75]
550\definecolor[font:rest][b=.75,g=.75] % [c=.75]
551
552\definecolor[font:0] [s=1]
553\definecolor[font:1] [r=.75]
554\definecolor[font:2] [g=.75]
555\definecolor[font:3] [b=.75]
556\definecolor[font:4] [r=.75,g=.75]
557\definecolor[font:5] [r=.75,b=.75]
558\definecolor[font:6] [b=.75,g=.75]
559\definecolor[font:7] [r=.75]
560\definecolor[font:8] [g=.75]
561\definecolor[font:9] [b=.75]
562
563\definecolor[f:r:t][a=1,t=.25,r=1]
564\definecolor[f:g:t][a=1,t=.25,g=1]
565\definecolor[f:b:t][a=1,t=.25,b=1]
566\definecolor[f:c:t][a=1,t=.25,c=1]
567\definecolor[f:m:t][a=1,t=.25,m=1]
568\definecolor[f:y:t][a=1,t=.25,y=1]
569\definecolor[f:k:t][a=1,t=.25,s=0]
570\definecolor[f:s:t][a=1,t=.25,s=0]
571
572\definepalet % weird place
573  [layout]
574  [grid=trace:dr,
575   page=trace:dg,
576   profile=f:s:t,
577   one=f:y:t,
578   mix=f:b:t]
579
580%D Now we're up for some definitions.
581
582%D \starttyping
583%D \definebodyfontenvironment[pagella][default][default]
584%D \definebodyfontenvironment[pagella][default][metric]
585%D \stoptyping
586
587\definebodyfontenvironment
588  [\s!default]
589  [        \s!text=1.0,
590         \s!script=0.7,
591   \s!scriptscript=0.5,
592              \s!a=1.200,
593              \s!b=1.440,
594              \s!c=1.728,
595              \s!d=2.074,
596                 *=\wildcardfontscale,
597              \s!x=0.8,
598             \s!xx=0.6,
599            \v!big=1.2,
600          \v!small=0.8,
601 \c!interlinespace=,
602             \s!em=\v!slanted]
603
604\definebodyfontenvironment
605  [metric]
606  [        \s!text=1.0,
607         \s!script=0.7,
608   \s!scriptscript=0.5,
609              \s!a=1.25,
610              \s!b=1.50,
611              \s!c=1.75,
612              \s!d=2.00,
613                 *=\wildcardfontscale,
614              \s!x=0.8,
615             \s!xx=0.6,
616            \v!big=1.2,
617          \v!small=0.8,
618 \c!interlinespace=,
619             \s!em=\v!slanted]
620
621\definebodyfontenvironment
622  [20.7pt]
623  [        \s!text=20.7pt,
624         \s!script=\!!fourteenpointfour,
625   \s!scriptscript=\!!twelvepoint,
626              \s!x=17.3pt,
627             \s!xx=\!!fourteenpointfour,
628            \v!big=20.7pt,    % !!!!
629          \v!small=17.3pt]
630
631\definebodyfontenvironment
632  [17.3pt]
633  [        \s!text=17.3pt,
634         \s!script=\!!twelvepoint,
635   \s!scriptscript=\!!tenpoint,
636              \s!x=\!!fourteenpointfour,
637             \s!xx=\!!twelvepoint,
638            \v!big=20.7pt,
639          \v!small=\!!fourteenpointfour]
640
641\definebodyfontenvironment
642  [\!!fourteenpointfour]
643  [        \s!text=\!!fourteenpointfour,
644         \s!script=\!!elevenpoint,
645   \s!scriptscript=\!!ninepoint,
646              \s!x=\!!twelvepoint,
647             \s!xx=\!!tenpoint,
648            \v!big=17.3pt,
649          \v!small=\!!twelvepoint]
650
651\definebodyfontenvironment
652  [\!!twelvepoint]
653  [        \s!text=\!!twelvepoint,
654         \s!script=\!!ninepoint,
655   \s!scriptscript=\!!sevenpoint,
656              \s!x=\!!tenpoint,
657             \s!xx=\!!eightpoint,
658            \v!big=\!!fourteenpointfour,
659          \v!small=\!!tenpoint]
660
661\definebodyfontenvironment
662  [\!!elevenpoint]
663  [        \s!text=\!!elevenpoint,
664         \s!script=\!!eightpoint,
665   \s!scriptscript=\!!sixpoint,
666              \s!x=\!!ninepoint,
667             \s!xx=\!!sevenpoint,
668            \v!big=\!!twelvepoint,
669          \v!small=\!!ninepoint]
670
671\definebodyfontenvironment
672  [\!!tenpoint]
673  [        \s!text=\!!tenpoint,
674         \s!script=\!!sevenpoint,
675   \s!scriptscript=\!!fivepoint,
676              \s!x=\!!eightpoint,
677             \s!xx=\!!sixpoint,
678            \v!big=\!!twelvepoint,
679          \v!small=\!!eightpoint]
680
681\definebodyfontenvironment
682  [\!!ninepoint]
683  [        \s!text=\!!ninepoint,
684         \s!script=\!!sevenpoint,
685   \s!scriptscript=\!!fivepoint,
686              \s!x=\!!sevenpoint,
687             \s!xx=\!!fivepoint,
688            \v!big=\!!elevenpoint,
689          \v!small=\!!sevenpoint]
690
691\definebodyfontenvironment
692  [\!!eightpoint]
693  [        \s!text=\!!eightpoint,
694         \s!script=\!!sixpoint,
695   \s!scriptscript=\!!fivepoint,
696              \s!x=\!!sixpoint,
697             \s!xx=\!!fivepoint,
698            \v!big=\!!tenpoint,
699          \v!small=\!!sixpoint]
700
701\definebodyfontenvironment
702  [\!!sevenpoint]
703  [        \s!text=\!!sevenpoint,
704         \s!script=\!!sixpoint,
705   \s!scriptscript=\!!fivepoint,
706              \s!x=\!!sixpoint,
707             \s!xx=\!!fivepoint,
708            \v!big=\!!ninepoint,
709          \v!small=\!!fivepoint]
710
711\definebodyfontenvironment
712  [\!!sixpoint]
713  [        \s!text=\!!sixpoint,
714         \s!script=\!!fivepoint,
715   \s!scriptscript=\!!fivepoint,
716              \s!x=\!!fivepoint,
717             \s!xx=\!!fivepoint,
718            \v!big=\!!eightpoint,
719          \v!small=\!!fivepoint]
720
721\definebodyfontenvironment
722  [\!!fivepoint]
723  [        \s!text=\!!fivepoint,
724         \s!script=\!!fivepoint,
725   \s!scriptscript=\!!fivepoint,
726              \s!x=\!!fivepoint,
727             \s!xx=\!!fivepoint,
728            \v!big=\!!sevenpoint,
729          \v!small=\!!fivepoint]
730
731\definebodyfontenvironment
732  [\!!fourpoint]
733  [        \s!text=\!!fourpoint,
734         \s!script=\!!fourpoint,
735   \s!scriptscript=\!!fourpoint,
736              \s!x=\!!fourpoint,
737             \s!xx=\!!fourpoint,
738            \v!big=\!!sixpoint,
739          \v!small=\!!fourpoint]
740
741\definebodyfontswitch [fourteenpointfour] [\!!fourteenpointfour]
742\definebodyfontswitch [twelvepoint]       [\!!twelvepoint]
743\definebodyfontswitch [elevenpoint]       [\!!elevenpoint]
744\definebodyfontswitch [tenpoint]          [\!!tenpoint]
745\definebodyfontswitch [ninepoint]         [\!!ninepoint]
746\definebodyfontswitch [eightpoint]        [\!!eightpoint]
747\definebodyfontswitch [sevenpoint]        [\!!sevenpoint]
748\definebodyfontswitch [sixpoint]          [\!!sixpoint]
749\definebodyfontswitch [fivepoint]         [\!!fivepoint]
750\definebodyfontswitch [fourpoint]         [\!!fourpoint]
751
752%D So far.
753
754\definefontstyle [\s!hw] [\s!hw]
755\definefontstyle [\s!cg] [\s!cg]
756
757\definefontstyle [\v!roman,\v!serif,\v!regular]    [\s!rm]
758\definefontstyle [\v!sansserif,\v!sans,\v!support] [\s!ss]
759\definefontstyle [\v!teletype,\v!type,\v!mono]     [\s!tt]
760\definefontstyle [\v!handwritten]                  [\s!hw]
761\definefontstyle [\v!calligraphic]                 [\s!cg]
762\definefontstyle [\v!math,\v!mathematics]          [\s!mm]
763
764\definefontalternative[\s!tf]
765\definefontalternative[\s!bf]
766\definefontalternative[\s!it]
767\definefontalternative[\s!sl]
768\definefontalternative[\s!bs]
769\definefontalternative[\s!bi]
770\definefontalternative[\s!sc]
771
772\definefontsize[\s!a] \definefontsize[\s!b]
773\definefontsize[\s!c] \definefontsize[\s!d]
774
775\definealternativestyle [\v!mediaeval]                              [\os]    []
776\definealternativestyle [\v!normal]                                 [\tf]    []
777\definealternativestyle [\v!bold]                                   [\bf]    []
778\definealternativestyle [\v!type]                                   [\tt]    []
779\definealternativestyle [\v!mono]                                   [\tt]    []
780\definealternativestyle [\v!slanted]                                [\sl]    []
781\definealternativestyle [\v!italic]                                 [\it]    []
782\definealternativestyle [\v!boldslanted,\v!slantedbold]             [\bs]    []
783\definealternativestyle [\v!bolditalic,\v!italicbold]               [\bi]    []
784
785\definealternativestyle [\v!small,\v!smallnormal]                   [\setsmallbodyfont\tf] []
786\definealternativestyle [\v!smallbold]                              [\setsmallbodyfont\bf] []
787\definealternativestyle [\v!smalltype]                              [\setsmallbodyfont\tt] []
788\definealternativestyle [\v!smallitalic,\v!smallslanted]            [\setsmallbodyfont\sl] []
789\definealternativestyle [\v!smallboldslanted,\v!smallslantedbold]   [\setsmallbodyfont\bs] []
790\definealternativestyle [\v!smallbolditalic,\v!smallitalicbold]     [\setsmallbodyfont\bi] []
791
792\definealternativestyle [\v!bigger]                                 [\setbigbodyfont  \tf] []
793\definealternativestyle [\v!smaller]                                [\setsmallbodyfont\tf] []
794
795\definealternativestyle [\v!sans,\v!sansserif]                      [\ss]
796\definealternativestyle [\v!roman,\v!serif,\v!regular]              [\rm]
797\definealternativestyle [\v!handwritten]                            [\hw]
798\definealternativestyle [\v!calligraphic]                           [\cg]
799
800\definealternativestyle [\v!sansnormal]  [\ss\tf] []
801\definealternativestyle [\v!sansbold]    [\ss\bf] []
802\definealternativestyle [\v!serifnormal] [\rm\tf] []
803\definealternativestyle [\v!serifbold]   [\rm\bf] []
804\definealternativestyle [\v!mononormal]  [\tt\tf] []
805\definealternativestyle [\v!monobold]    [\tt\bf] []
806
807\definealternativestyle [typeface]    [\typeface]    [] % no translation here (quite basic)
808\definealternativestyle [boldface]    [\boldface]    []
809\definealternativestyle [slantedface] [\slantedface] []
810\definealternativestyle [italicface]  [\italicface]  []
811\definealternativestyle [swapface]    [\swapface]    []
812
813\definealternativestyle [emphasize]   [\em]          [\em] % new
814
815% For Alan:
816
817\definealternativestyle
818  [\v!camel]
819  [{\setcharactercasing[\v!camel]}]
820  [{\setcharactercasing[\v!camel]}]
821
822% % maybe we need interface neutral as well (for use in cld):
823%
824% \letcscsname\mediaeval       \csname\v!mediaeval       \endcsname
825% \letcscsname\normal          \csname\v!normal          \endcsname
826% \letcscsname\bold            \csname\v!bold            \endcsname
827% \letcscsname\mono            \csname\v!mono            \endcsname
828% \letcscsname\slanted         \csname\v!slanted         \endcsname
829% \letcscsname\italic          \csname\v!italic          \endcsname
830% \letcscsname\boldslanted     \csname\v!boldslanted     \endcsname
831% \letcscsname\slantedbold     \csname\v!slantedbold     \endcsname
832% \letcscsname\bolditalic      \csname\v!bolditalic      \endcsname
833% \letcscsname\italicbold      \csname\v!italicbold      \endcsname
834%
835% \letcscsname\small           \csname\v!small           \endcsname
836% \letcscsname\smallnormal     \csname\v!smallnormal     \endcsname
837% \letcscsname\smallbold       \csname\v!smallbold       \endcsname
838% \letcscsname\smalltype       \csname\v!smalltype       \endcsname
839% \letcscsname\smallslanted    \csname\v!smallslanted    \endcsname
840% \letcscsname\smallboldslanted\csname\v!smallboldslanted\endcsname
841% \letcscsname\smallslantedbold\csname\v!smallslantedbold\endcsname
842% \letcscsname\smallbolditalic \csname\v!smallbolditalic \endcsname
843% \letcscsname\smallitalicbold \csname\v!smallitalicbold \endcsname
844%
845% \letcscsname\bigger          \csname\v!bigger          \endcsname
846% \letcscsname\smaller         \csname\v!smaller         \endcsname
847%
848% \letcscsname\sans            \csname\v!sans            \endcsname
849% \letcscsname\sansserif       \csname\v!sansserif       \endcsname
850% \letcscsname\sansbold        \csname\v!sansbold        \endcsname
851
852%D We can go on and on and on:
853%D
854%D \starttyping
855%D \setupbodyfontenvironment[default][p=0.8,q=0.6]
856%D \definefontsize[p]
857%D \definefontsize[q]
858%D \stoptyping
859
860%D Slow but handy:
861
862\definealternativestyle [\v!smallbodyfont] [\setsmallbodyfont] []
863\definealternativestyle [\v!bigbodyfont]   [\setbigbodyfont]   []
864
865%D We treat {\sc Small Caps} and \cap {Pseudo Caps} a bit different. We also provide
866%D an \WORD {uppercase} style.
867
868\definealternativestyle [\v!WORD]    [{\setcharactercasing[\v!WORD   ]}] [{\setcharactercasing[\v!WORD   ]}]
869\definealternativestyle [\v!word]    [{\setcharactercasing[\v!word   ]}] [{\setcharactercasing[\v!word   ]}]
870\definealternativestyle [\v!Word]    [{\setcharactercasing[\v!Word   ]}] [{\setcharactercasing[\v!Word   ]}]
871\definealternativestyle [\v!Words]   [{\setcharactercasing[\v!Words  ]}] [{\setcharactercasing[\v!Words  ]}]
872\definealternativestyle [\v!capital] [{\setcharactercasing[\v!capital]}] [{\setcharactercasing[\v!capital]}]
873\definealternativestyle [\v!Capital] [{\setcharactercasing[\v!Capital]}] [{\setcharactercasing[\v!Capital]}]
874\definealternativestyle [\v!mixed]   [{\setcharactercasing[\v!mixed  ]}] [{\setcharactercasing[\v!mixed  ]}]
875
876\definealternativestyle [\v!cap]     [{\setcharactercasing[\v!cap    ]}] [{\setcharactercasing[\v!cap    ]}]
877\definealternativestyle [\v!Cap]     [{\setcharactercasing[\v!Cap    ]}] [{\setcharactercasing[\v!Cap    ]}]
878
879%D From now (2013-03-17) on we have:
880
881\definefontfeature[f:smallcaps][smcp=yes]
882\definefontfeature[f:oldstyle] [onum=yes]
883\definefontfeature[f:tabular]  [tnum=yes]
884\definefontfeature[f:superiors][sups=yes]
885\definefontfeature[f:inferiors][subs=yes]
886\definefontfeature[f:fractions][frac=yes]
887\definefontfeature[f:kern]     [kern=yes]
888\definefontfeature[f:kerns]    [kern=yes]
889
890\definealternativestyle [\v!smallcaps] [\setsmallcaps] [\setsmallcaps]
891\definealternativestyle [\v!oldstyle]  [\setoldstyle ] [\setoldstyle ]
892\definealternativestyle [\v!fractions] [\setfractions\resetbreakpoints] [\setfractions\resetbreakpoints]
893
894\permanent\protected\def\setsmallcaps{\doaddfeature{f:smallcaps}}
895\permanent\protected\def\setoldstyle {\doaddfeature{f:oldstyle}}
896\permanent\protected\def\settabular  {\doaddfeature{f:tabular}}
897\permanent\protected\def\setsuperiors{\doaddfeature{f:superiors}}
898\permanent\protected\def\setfractions{\doaddfeature{f:fractions}}
899
900\permanent\protected\def\resetsmallcaps{\dosubtractfeature{f:smallcaps}}
901\permanent\protected\def\resetoldstyle {\dosubtractfeature{f:oldstyle}}
902\permanent\protected\def\resettabular  {\dosubtractfeature{f:tabular}}
903\permanent\protected\def\resetsuperiors{\dosubtractfeature{f:superiors}}
904\permanent\protected\def\resetfractions{\dosubtractfeature{f:fractions}}
905
906% \permanent\protected\def\frc#1#2%
907%   {\dontleavehmode
908%    \begingroup
909%    \addff{frac}%
910%    \resetbreakpoints
911%    #1/#2%
912%    \endgroup}
913
914%D \macros
915%D   {uppercasing, lowercasing}
916
917\definefontfeature[lowercasing][lowercasing=yes]
918\definefontfeature[uppercasing][uppercasing=yes]
919
920\permanent\protected\def\uppercasing{\addff{uppercasing}}
921\permanent\protected\def\lowercasing{\addff{lowercasing}}
922
923%D \macros
924%D   {tinyfont}
925%D
926%D By default we load the Computer Modern Roman fonts (but not yet at this moment)
927%D and activate the 12pt roman bodyfont. Sans serif and teletype are also available
928%D and can be called for by \type {\ss} and \type {\tt}. Loading takes place
929%D elsewhere. For tracing purposes we define:
930
931\definefont[tinyfont][file:dejavusansmono at 1ex]
932
933%D \macros
934%D   {infofont}
935%D
936%D The second situation occurs when we enable the info mode, and put all kind of
937%D status information in the margin. We don't want huge switches to the main
938%D bodyfont and style, so here too we use a direct method.
939
940\pushoverloadmode
941
942\protected\def\infofont         {\definefrozenfont[infofont]         [file:dejavusansmono*none      at 6pt]\infofont}
943\protected\def\infofontbold     {\definefrozenfont[infofontbold]     [file:dejavusansmono-bold*none at 6pt]\infofontbold}
944\protected\def\smallinfofont    {\definefrozenfont[smallinfofont]    [file:dejavusansmono*none      at 3pt]\smallinfofont}
945\protected\def\smallinfofontbold{\definefrozenfont[smallinfofontbold][file:dejavusansmono-bold*none at 3pt]\smallinfofontbold}
946\protected\def\tinyinfofont     {\definefrozenfont[tinyinfofont]     [file:dejavusansmono*none      at 2pt]\tinyinfofont}
947\protected\def\tinyinfofontbold {\definefrozenfont[tinyinfofontbold] [file:dejavusansmono-bold*none at 2pt]\tinyinfofontbold}
948
949%D Optimization (later we overload in math). Also needed in order to get \type {\ss}
950%D properly defined.
951
952\permanent\protected\def\normaltf{\let\fontalternative\s!tf\font_helpers_synchronize_font}
953\permanent\protected\def\normalbf{\let\fontalternative\s!bf\font_helpers_synchronize_font}
954\permanent\protected\def\normalit{\let\fontalternative\s!it\font_helpers_synchronize_font}
955\permanent\protected\def\normalsl{\let\fontalternative\s!sl\font_helpers_synchronize_font}
956\permanent\protected\def\normalbi{\let\fontalternative\s!bi\font_helpers_synchronize_font}
957\permanent\protected\def\normalbs{\let\fontalternative\s!bs\font_helpers_synchronize_font}
958
959\let\tf\normaltf
960\let\bf\normalbf
961\let\it\normalit
962\let\sl\normalsl
963\let\bi\normalbi
964\let\bs\normalbs
965
966\permanent\protected\def\normalrm{\font_helpers_set_current_font_style{\s!rm}}
967\permanent\protected\def\normalss{\font_helpers_set_current_font_style{\s!ss}}
968\permanent\protected\def\normaltt{\font_helpers_set_current_font_style{\s!tt}}
969
970\let\rm\normalrm
971\let\ss\normalss
972\let\tt\normaltt
973
974\popoverloadmode
975
976\protect \endinput
977
978% LM math vs CM math (analysis by Taco):
979%
980% Computer Modern Roman : Donald Knuth
981% Latin Modern          : LM Font Revision Team
982%
983% lmex10.tfm  % identical
984% lmmi5.tfm   % identical
985% lmmi6.tfm   % identical
986% lmmi7.tfm   % identical
987% lmmi8.tfm   % identical
988% lmmi9.tfm   % identical
989% lmmi10.tfm  % identical
990% lmmi12.tfm  % identical
991% lmmib10.tfm % identical
992% lmsy5.tfm   % extra chars: 254,255 (octal)
993% lmsy6.tfm   % extra chars: 254,255 (octal)
994% lmsy7.tfm   % extra chars: 254,255 (octal)
995% lmsy8.tfm   % extra chars: 254,255 (octal)
996% lmsy9.tfm   % extra chars: 254,255 (octal)
997% lmsy10.tfm  % extra chars: 254,255 (octal)
998% lmbsy10.tfm % extra chars: 254,255 (octal)
999%
1000% From the 'AMS' set:
1001%
1002% lmmib5.tfm  % identical
1003% lmmib7.tfm  % identical
1004% lmbsy5.tfm  % extra chars: 254,255 (octal)
1005% lmbsy7.tfm  % extra chars: 254,255 (octal)
1006%
1007% The two extra characters are:
1008%
1009%   /lessorequalslant
1010%   /greaterorequalslant
1011
1012% \unprotect
1013%
1014% \definehighlight[\v!italic    ][\c!command=\v!no,\c!style=\v!italic]
1015% \definehighlight[\v!bold      ][\c!command=\v!no,\c!style=\v!bold]
1016% \definehighlight[\v!bolditalic][\c!command=\v!no,\c!style=\v!bolditalic]
1017% \definehighlight[\v!mono]      [\c!command=\v!no,\c!style=\v!mono]
1018% \definehighlight[\v!monobold]  [\c!command=\v!no,\c!style=\v!monobold]
1019%
1020% \definehighlight[important]    [\c!command=\v!no,\c!style=\v!bold]
1021% \definehighlight[unimportant]  [\c!command=\v!no,\c!color=darkgray]
1022% \definehighlight[warning]      [\c!command=\v!no,\c!style=\v!bold,\c!color=darkblue]
1023% \definehighlight[error]        [\c!command=\v!no,\c!style=\v!bold,\c!color=darkred]
1024%
1025% \protect
1026%
1027% \starttext
1028%     \highlight[italic]     {italic}
1029%     \highlight[bolditalic] {bolditalic}
1030%     \highlight[bold]       {bold}
1031%     \highlight[mono]       {mono}
1032%     \highlight[monobold]   {monobold}
1033%     \highlight[important]  {important}
1034%     \highlight[unimportant]{unimportant}
1035%     \highlight[warning]    {warning}
1036%     \highlight[error]      {error}
1037% \stoptext
1038