Hagen - Pragma ADE
Hagen - Pragma ADE Hagen - Pragma ADE
62 Features features analyze=yes, curs=yes, devanagari=yes, extrafeatures=yes, kern=yes, liga=yes, mark=yes, mkmk=yes, mode=node, onum=yes, script=dflt, smcp=yes, tlig=yes, trep=yes step 1 It's 2013! U+49:I U+74:t U+27:' U+73:s [glue] U+32:2 U+30:0 U+31:1 U+33:3 U+21:! feature 'onum', lookup 'ss_l_4_s', replacing U+00032 (two) by single U+0F732 (two.oldstyle) feature 'onum', lookup 'ss_l_4_s', replacing U+00030 (zero) by single U+0F730 (zero.oldstyle) feature 'onum', lookup 'ss_l_4_s', replacing U+00031 (one) by single U+0F731 (one.oldstyle) feature 'onum', lookup 'ss_l_4_s', replacing U+00033 (three) by single U+0F733 (three.oldstyle) step 2 It's 2013! U+49:I U+74:t U+27:' U+73:s [glue] U+F732:2 U+F730:0 U+F731:1 U+F733:3 U+21:! feature 'trep', lookup 'ctx_trep_1_1', replacing U+00027 (quotesingle) by single U+02019 (quoteright) result It’s 2013! U+49:I U+74:t U+2019:’ U+73:s [glue] U+F732:2 U+F730:0 U+F731:1 U+F733:3 U+21:! font 64: texgyrepagella-regular.otf @ 24.0pt features analyze=yes, curs=yes, devanagari=yes, extrafeatures=yes, kern=yes, liga=yes, mark=yes, mkmk=yes, mode=node, onum=yes, script=dflt, smcp=yes, tlig=yes, trep=yes step 1 It's 2013! U+49:I U+74:t U+27:' U+73:s [glue] U+32:2 U+30:0 U+31:1 U+33:3 U+21:! feature 'smcp', lookup 'ss_l_3_s', replacing U+00074 (t) by single U+0F774 (t.sc) feature 'smcp', lookup 'ss_l_3_s', replacing U+00073 (s) by single U+0F773 (s.sc)
step 2 It's 2013! U+49:I U+F774:t U+27:' U+F773:s [glue] U+32:2 U+30:0 U+31:1 U+33:3 U+21:! feature 'onum', lookup 'ss_l_5_s', replacing U+00032 (two) by single U+0F732 (two.oldstyle) feature 'onum', lookup 'ss_l_5_s', replacing U+00030 (zero) by single U+0F730 (zero.oldstyle) feature 'onum', lookup 'ss_l_5_s', replacing U+00031 (one) by single U+0F731 (one.oldstyle) feature 'onum', lookup 'ss_l_5_s', replacing U+00033 (three) by single U+0F733 (three.oldstyle) step 3 It's 2013! U+49:I U+F774:t U+27:' U+F773:s [glue] U+F732:2 U+F730:0 U+F731:1 U+F733:3 U+21:! feature 'trep', lookup 'ctx_trep_1_1', replacing U+00027 (quotesingle) by single U+02019 (quoteright) result It’s 2013! U+49:I U+F774:t U+2019:’ U+F773:s [glue] U+F732:2 U+F730:0 U+F731:1 U+F733:3 U+21:! 5.2.5 Multiple substitution In a multiple substitution a sequence of characters (glyphs) gets replaced by another sequence. In fact, you might wonder why one--to--one, multiple--to--one and multiple--to-multiple are not all generalized into this variant. Efficiency is probably the main reason. 5 For instance the many--to--one is often used for ligatures (liga) and as a consequence liga is often misused also for non--ligatures. One usage of multiple replacements is to avoid and or undo other replacements. In the next example we see a language dependent fi ligature. Take the dutch ij and ie diftongs. Here we need to prevent the i becoming combined with the f as it would look weird. Among the solutions for this are: context dependent ligatures (which involves a lot of rules), or multiple to multiple replacements (looking at the fij sequence). \definefontfeature[default-fijn-en][default][language=eng,script=latn] \definefontfeature[default-fijn-nl][default][language=nld,script=latn] \definedfont[lmroman10-regular*default-fijn-en]\en effe fijn fietsen 5 Isn’t it strange that complex mechanisms are designed to save a few bytes while at the same time we produce ridiculous large pictures with cameras. 63 Features
- Page 14 and 15: 12 A.4 A.3 Font formats multiple ac
- Page 16 and 17: 14 Font formats can be rules that t
- Page 18 and 19: 16 Font formats /fonts/tfm/vendor/t
- Page 20 and 21: 18 Modes raw tfm normalized tfm raw
- Page 22 and 23: 20 Modes shown next: kern cyrl dflt
- Page 24 and 25: 22 Modes ccmp cyrl mkd абвгде
- Page 26 and 27: 24 Modes dlig latn gag abcdefghijkl
- Page 28 and 29: 26 Modes liga latn nsm abcdefghijkl
- Page 30 and 31: 28 Modes salt latn mol abcdefghijkl
- Page 32 and 33: 30 Modes glyph 256 font 42: U+00074
- Page 34 and 35: 32 Modes glyph 256 font 33: U+00061
- Page 36 and 37: 34 Modes glyph 256 font 33: U+00065
- Page 38 and 39: 36 Modes optimizer that can apply a
- Page 40 and 41: 38 Modes ا خLJَ﮲ ف﮲َ step
- Page 42 and 43: 40 Modes dir +TRT glyph 256 font 49
- Page 44 and 45: 42 Modes and now we get: 123 normal
- Page 46 and 47: 44 Modes MkIV run can be faster tha
- Page 48 and 49: 46 Lookups \font \MyFontG = lmr12 s
- Page 50 and 51: 48 Lookups 3.4 Name Say that we wan
- Page 52 and 53: 50 Lookups We add another specifier
- Page 54 and 55: 52 Methods \definefont [MyFont] [Bo
- Page 56 and 57: 54 Methods } copyright = "ConTeXt d
- Page 58 and 59: 56 Features of all, all we get to s
- Page 60 and 61: 58 Features in base mode. A single
- Page 62 and 63: 60 Features accumulate within a wor
- Page 66 and 67: 64 Features \definedfont[lmroman10-
- Page 68 and 69: 66 Features single substitutions or
- Page 70 and 71: 68 F -0.492 eatures result ffi feat
- Page 72 and 73: 70 Features font 80: lmroman10-regu
- Page 74 and 75: 72 Features font 46: cambria.ttf @
- Page 76 and 77: 74 Features } } This goodie file is
- Page 78 and 79: 76 Features { name = "msbm10.tfm",
- Page 80 and 81: 78 Features \starttypescript[somefo
- Page 82 and 83: 80 Features \setupbodyfont [mojcasf
- Page 84 and 85: 82 Features } normalweight = "extra
- Page 86 and 87: 84 Features "QF.waqf", "SKTH.waqf",
- Page 88 and 89: 86 Features featureset=smallcaps] O
- Page 90 and 91: 88 Features } }, When defining the
- Page 92 and 93: 90 Features local defaultfraction =
- Page 94 and 95: 92 Features } } ["LMRoman-Bold"] =
- Page 96 and 97: 94 Features In fact, in addition to
- Page 98 and 99: 96 Features } This time the applica
- Page 100 and 101: 98 Features step 1 I don't wanna kn
- Page 102 and 103: 100 Features If you’re lucky your
- Page 104 and 105: 102 Scripts
step 2 It's 2013! U+49:I U+F774:t U+27:' U+F773:s [glue]<br />
U+32:2 U+30:0 U+31:1 U+33:3 U+21:!<br />
feature 'onum', lookup 'ss_l_5_s', replacing U+00032 (two) by<br />
single U+0F732 (two.oldstyle)<br />
feature 'onum', lookup 'ss_l_5_s', replacing U+00030 (zero) by<br />
single U+0F730 (zero.oldstyle)<br />
feature 'onum', lookup 'ss_l_5_s', replacing U+00031 (one) by<br />
single U+0F731 (one.oldstyle)<br />
feature 'onum', lookup 'ss_l_5_s', replacing U+00033 (three) by<br />
single U+0F733 (three.oldstyle)<br />
step 3 It's 2013! U+49:I U+F774:t U+27:' U+F773:s [glue]<br />
U+F732:2 U+F730:0 U+F731:1 U+F733:3 U+21:!<br />
feature 'trep', lookup 'ctx_trep_1_1', replacing U+00027<br />
(quotesingle) by single U+02019 (quoteright)<br />
result It’s 2013! U+49:I U+F774:t U+2019:’ U+F773:s [glue]<br />
U+F732:2 U+F730:0 U+F731:1 U+F733:3 U+21:!<br />
5.2.5 Multiple substitution<br />
In a multiple substitution a sequence of characters (glyphs) gets replaced by another<br />
sequence. In fact, you might wonder why one--to--one, multiple--to--one and multiple--to-multiple<br />
are not all generalized into this variant. Efficiency is probably the main reason. 5<br />
For instance the many--to--one is often used for ligatures (liga) and as a consequence<br />
liga is often misused also for non--ligatures.<br />
One usage of multiple replacements is to avoid and or undo other replacements. In<br />
the next example we see a language dependent fi ligature. Take the dutch ij and ie<br />
diftongs. Here we need to prevent the i becoming combined with the f as it would look<br />
weird. Among the solutions for this are: context dependent ligatures (which involves a<br />
lot of rules), or multiple to multiple replacements (looking at the fij sequence).<br />
\definefontfeature[default-fijn-en][default][language=eng,script=latn]<br />
\definefontfeature[default-fijn-nl][default][language=nld,script=latn]<br />
\definedfont[lmroman10-regular*default-fijn-en]\en effe fijn fietsen<br />
5 Isn’t it strange that complex mechanisms are designed to save a few bytes while at the same time we produce<br />
ridiculous large pictures with cameras.<br />
63<br />
Features