context-2017-features-substitutiontest.tex /size: 3627 b    last modification: 2020-07-01 14:35
1\startluacode
2    fonts.handlers.otf.addfeature {
3        name = "singlesubstitution",
4        type = "substitution",
5        data = {
6            a = "X",
7            b = "P",
8        }
9    }
10\stopluacode
11
12\startluacode
13    fonts.handlers.otf.addfeature {
14        name = "alternatesubstitution",
15        type = "alternate",
16        data = {
17            a = { "X", "Y" },
18            b = { "P", "Q" },
19        }
20    }
21\stopluacode
22
23\startluacode
24    fonts.handlers.otf.addfeature {
25        name = "multiplesubstitution",
26        type = "multiple",
27        data = {
28            a = { "X", "Y" },
29            b = { "P", "Q" },
30        }
31    }
32\stopluacode
33
34\startluacode
35    fonts.handlers.otf.addfeature {
36        name = "ligaturesubstitution",
37        type = "ligature",
38        data = {
39            ['1'] = { "a", "b" },
40            ['2'] = { "d", "a" },
41        }
42    }
43\stopluacode
44
45\startluacode
46    fonts.handlers.otf.addfeature {
47        name    = "chainsubstitution-1",
48        type    = "chainsubstitution",
49     -- flags   = { false, false, false, false },
50        lookups = {
51            {
52                type = "substitution",
53                data = {
54                    ["b"] = "B",
55                    ["c"] = "C",
56                },
57            },
58        },
59     -- steps    = {
60     --     {
61     --         rules = {
62     --             {
63     --                 before  = { { "a" } },
64     --                 current = { { "b", "c" } },
65     --                 lookups = { 1 },
66     --             },
67     --         },
68     --     },
69     -- },
70        data = {
71            rules = {
72                {
73                    before  = { { "a" } },
74                    current = { { "b", "c" } },
75                    lookups = { 1 },
76                },
77            },
78        },
79    }
80\stopluacode
81
82\startluacode
83    fonts.handlers.otf.addfeature {
84        name    = "chainsubstitution-2",
85        type    = "chainsubstitution",
86        prepend = 1,
87        lookups = {
88            {
89                type = "multiple",
90                data = {
91                    ["f"] = { "f", 0x200C },
92                },
93            },
94            {
95                type = "substitution",
96                data = {
97                    ["a"] = "1",
98                    ["b"] = "2",
99                    ["c"] = "3",
100                },
101            },
102        },
103        data = {
104            rules = {
105                {
106                    current = { { "f" }, { "f" } },
107                    lookups = { 1 },
108                },
109                {
110                    current = { { "a" }, { "b" }, { "c" } },
111                    lookups = { 2, false, 2 },
112                },
113            },
114        }
115    }
116\stopluacode
117
118\definefontfeature[singlesubstitution]   [singlesubstitution=yes]
119\definefontfeature[alternatesubstitution][alternatesubstitution=2]
120\definefontfeature[multiplesubstitution] [multiplesubstitution=yes]
121\definefontfeature[ligaturesubstitution] [ligaturesubstitution=yes]
122\definefontfeature[chainsubstitution-1]  [chainsubstitution-1=yes]
123\definefontfeature[chainsubstitution-2]  [chainsubstitution-2=yes]
124
125\setupbodyfont[dejavu]
126
127\starttext
128
129\definedfont[Serif*default] \showfontkerns \showfontitalics \showglyphs
130
131\startTEXpage
132                                  abracadabra\par
133    {\addff   {singlesubstitution}abracadabra\par}
134    {\addff{alternatesubstitution}abracadabra\par}
135    {\addff {multiplesubstitution}abracadabra\par}
136    {\addff {ligaturesubstitution}abracadabra\par}
137    {\addff  {chainsubstitution-1}abracadabra\par}
138    {\addff  {chainsubstitution-2}effe abcdef !f\par}
139\stopTEXpage
140
141\stoptext
142