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
50 lookups = {
51 {
52 type = "substitution",
53 data = {
54 ["b"] = "B",
55 ["c"] = "C",
56 },
57 },
58 },
59
60
61
62
63
64
65
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[chainsubstitution1] [chainsubstitution1=yes]
123\definefontfeature[chainsubstitution2] [chainsubstitution2=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 {chainsubstitution1}abracadabra\par}
138 {\addff {chainsubstitution2}effe abcdef !f\par}
139\stopTEXpage
140
141\stoptext
142 |