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
|
--[[doc--
Taken from the most recent branch of luaotfload.
--doc]]--
local addotffeature = fonts.handlers.otf.addfeature
local registerotffeature = fonts.handlers.otf.features.register
local everywhere = { ["*"] = { ["*"] = true } }
local tlig = {
{
type = "substitution",
features = everywhere,
data = {
[0x0022] = 0x201D, -- quotedblright
[0x0027] = 0x2019, -- quoteleft
[0x0060] = 0x2018, -- quoteright
},
flags = { },
},
{
type = "ligature",
features = everywhere,
data = {
[0x2013] = {0x002D, 0x002D}, -- endash
[0x2014] = {0x002D, 0x002D, 0x002D}, -- emdash
[0x201C] = {0x2018, 0x2018}, -- quotedblleft
[0x201D] = {0x2019, 0x2019}, -- quotedblright
[0x201E] = {0x002C, 0x002C}, -- quotedblbase
[0x00A1] = {0x0021, 0x2018}, -- exclamdown
[0x00BF] = {0x003F, 0x2018}, -- questiondown
},
flags = { },
},
{
type = "ligature",
features = everywhere,
data = {
[0x201C] = {0x0060, 0x0060}, -- quotedblleft
[0x201D] = {0x0027, 0x0027}, -- quotedblright
[0x00A1] = {0x0021, 0x0060}, -- exclamdown
[0x00BF] = {0x003F, 0x0060}, -- questiondown
},
flags = { },
},
}
addotffeature("tlig", tlig)
addotffeature("trep", { }) -- empty, all in tlig now
local anum_arabic = {
[0x0030] = 0x0660,
[0x0031] = 0x0661,
[0x0032] = 0x0662,
[0x0033] = 0x0663,
[0x0034] = 0x0664,
[0x0035] = 0x0665,
[0x0036] = 0x0666,
[0x0037] = 0x0667,
[0x0038] = 0x0668,
[0x0039] = 0x0669,
}
local anum_persian = {
[0x0030] = 0x06F0,
[0x0031] = 0x06F1,
[0x0032] = 0x06F2,
[0x0033] = 0x06F3,
[0x0034] = 0x06F4,
[0x0035] = 0x06F5,
[0x0036] = 0x06F6,
[0x0037] = 0x06F7,
[0x0038] = 0x06F8,
[0x0039] = 0x06F9,
}
local function valid(data)
local features = data.resources.features
if features then
for k, v in next, features do
for k, v in next, v do
if v.arab then
return true
end
end
end
end
end
local anum_specification = {
{
type = "substitution",
features = { arab = { far = true, urd = true, snd = true } },
data = anum_persian,
flags = { },
valid = valid,
},
{
type = "substitution",
features = { arab = { ["*"] = true } },
data = anum_arabic,
flags = { },
valid = valid,
},
}
addotffeature("anum",anum_specification)
registerotffeature {
name = 'anum',
description = 'arabic digits',
}
|