1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21\startluacode
22
23
24
25
26local chardata = characters.data
27
28local s_init = 1 local s_rphf = 7
29local s_medi = 2 local s_half = 8
30local s_fina = 3 local s_pref = 9
31local s_isol = 4 local s_blwf = 10
32local s_mark = 5 local s_pstf = 11
33local s_rest = 6
34
35local mappers = {
36 l = s_init,
37 d = s_medi,
38 c = s_medi,
39 r = s_fina,
40 u = s_isol,
41}
42
43local first_arabic, last_arabic = characters.blockrange("arabic")
44local first_syriac, last_syriac = characters.blockrange("syriac")
45local first_mandiac, last_mandiac = characters.blockrange("mandiac")
46local first_nko, last_nko = characters.blockrange("nko")
47
48local classifiers = { }
49local indicgroups = characters.indicgroups
50
51for k, c in next, chardata do
52 if k > 0 then
53 local c = chardata[k]
54 if c then
55 local arabic = c.arabic
56 if arabic then
57 classifiers[k] = mappers[arabic]
58 elseif k >= first_arabic and k <= last_arabic or k >= first_syriac and k <= last_syriac or
59 k >= first_mandiac and k <= last_mandiac or k >= first_nko and k <= last_nko then
60 if c.category == "mn" then
61 classifiers[k] = s_mark
62 else
63 classifiers[k] = s_rest
64 end
65 elseif c.category == "mn" then
66 classifiers[k] = s_mark
67 end
68 end
69 end
70end
71
72local template = string.formatters [ [[
73-- automatically generated from context data (luatex-basics-prepare.tex)
74
75characters = characters or { }
76
77-- dummies
78
79characters.blockrange = { }
80
81-- classifiers needed for analysis
82
83%s
84
85%s
86
87-- done
88
89return characters.indicgroups
90]] ]
91
92io.savedata("luatex-basics-chr.lua",template(
93 table.serialize(classifiers,"characters.classifiers"),
94 table.serialize(indicgroups,"characters.indicgroups")
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\stopluacode
121
122
123
124\startTEXpage[offset=10pt]
125 \tttf generated file: luatexbasicschr.lua
126\stopTEXpage
127 |