summaryrefslogtreecommitdiff
path: root/doc/context/presentations/context/2017/context-2017-features-substitutiontest.tex
blob: 9e2657a6ec1bead159a83e7030b3af429e8ee334 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
\startluacode
    fonts.handlers.otf.addfeature {
        name = "singlesubstitution",
        type = "substitution",
        data = {
            a = "X",
            b = "P",
        }
    }
\stopluacode

\startluacode
    fonts.handlers.otf.addfeature {
        name = "alternatesubstitution",
        type = "alternate",
        data = {
            a = { "X", "Y" },
            b = { "P", "Q" },
        }
    }
\stopluacode

\startluacode
    fonts.handlers.otf.addfeature {
        name = "multiplesubstitution",
        type = "multiple",
        data = {
            a = { "X", "Y" },
            b = { "P", "Q" },
        }
    }
\stopluacode

\startluacode
    fonts.handlers.otf.addfeature {
        name = "ligaturesubstitution",
        type = "ligature",
        data = {
            ['1'] = { "a", "b" },
            ['2'] = { "d", "a" },
        }
    }
\stopluacode

\startluacode
    fonts.handlers.otf.addfeature {
        name    = "chainsubstitution-1",
        type    = "chainsubstitution",
     -- flags   = { false, false, false, false },
        lookups = {
            {
                type = "substitution",
                data = {
                    ["b"] = "B",
                    ["c"] = "C",
                },
            },
        },
     -- steps    = {
     --     {
     --         rules = {
     --             {
     --                 before  = { { "a" } },
     --                 current = { { "b", "c" } },
     --                 lookups = { 1 },
     --             },
     --         },
     --     },
     -- },
        data = {
            rules = {
                {
                    before  = { { "a" } },
                    current = { { "b", "c" } },
                    lookups = { 1 },
                },
            },
        },
    }
\stopluacode

\startluacode
    fonts.handlers.otf.addfeature {
        name    = "chainsubstitution-2",
        type    = "chainsubstitution",
        prepend = 1,
        lookups = {
            {
                type = "multiple",
                data = {
                    ["f"] = { "f", 0x200C },
                },
            },
            {
                type = "substitution",
                data = {
                    ["a"] = "1",
                    ["b"] = "2",
                    ["c"] = "3",
                },
            },
        },
        data = {
            rules = {
                {
                    current = { { "f" }, { "f" } },
                    lookups = { 1 },
                },
                {
                    current = { { "a" }, { "b" }, { "c" } },
                    lookups = { 2, false, 2 },
                },
            },
        }
    }
\stopluacode

\definefontfeature[singlesubstitution]   [singlesubstitution=yes]
\definefontfeature[alternatesubstitution][alternatesubstitution=2]
\definefontfeature[multiplesubstitution] [multiplesubstitution=yes]
\definefontfeature[ligaturesubstitution] [ligaturesubstitution=yes]
\definefontfeature[chainsubstitution-1]  [chainsubstitution-1=yes]
\definefontfeature[chainsubstitution-2]  [chainsubstitution-2=yes]

\setupbodyfont[dejavu]

\starttext

\definedfont[Serif*default] \showfontkerns \showfontitalics \showglyphs

\startTEXpage
                                  abracadabra\par
    {\addff   {singlesubstitution}abracadabra\par}
    {\addff{alternatesubstitution}abracadabra\par}
    {\addff {multiplesubstitution}abracadabra\par}
    {\addff {ligaturesubstitution}abracadabra\par}
    {\addff  {chainsubstitution-1}abracadabra\par}
    {\addff  {chainsubstitution-2}effe abcdef !f\par}
\stopTEXpage

\stoptext