1if not modules then modules = { } end modules ['font-enh'] = {
2 version = 1.001,
3 comment = "companion to font-ini.mkiv",
4 author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5 copyright = "PRAGMA ADE / ConTeXt Development Team",
6 license = "see context related readme files"
7}
8
9local next = next
10
11local trace_unicoding = false
12
13trackers.register("fonts.defining", function(v) trace_unicoding = v end)
14trackers.register("fonts.unicoding", function(v) trace_unicoding = v end)
15
16local report_unicoding = logs.reporter("fonts","unicoding")
17
18local fonts = fonts
19local constructors = fonts.constructors
20
21
22local afmfeatures = constructors.features.afm
23local otffeatures = constructors.features.otf
24
25
26local registerafmfeature = afmfeatures.register
27local registerotffeature = otffeatures.register
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
118local function initialize(tfmdata)
119 local goodies = tfmdata.goodies
120 local newcoding = nil
121 for i=1,#goodies do
122 local remapping = goodies[i].remapping
123 if remapping and remapping.unicodes then
124 newcoding = remapping.unicodes
125 end
126 end
127 if newcoding then
128 local characters = tfmdata.characters
129 local descriptions = tfmdata.descriptions
130 local oldcoding = tfmdata.resources.unicodes
131 local originals = { }
132 for name, newcode in next, newcoding do
133 local oldcode = oldcoding[name]
134 if characters[newcode] and not originals[newcode] then
135 originals[newcode] = {
136 character = characters [newcode],
137 description = descriptions[newcode],
138 }
139 end
140 if oldcode then
141 local original = originals[oldcode]
142 local character, description
143 if original then
144 character = original.character
145 description = original.description
146 else
147 character = characters [oldcode]
148 description = descriptions[oldcode]
149 end
150 characters [newcode] = character
151 descriptions[newcode] = description
152 character .unicode = newcode
153 description.unicode = newcode
154 else
155 oldcoding[name] = newcode
156 end
157 if trace_unicoding then
158 if oldcode then
159 report_unicoding("aliasing glyph %a from %U to %U",name,oldcode,newcode)
160 else
161 report_unicoding("aliasing glyph %a to %U",name,newcode)
162 end
163 end
164 end
165 end
166end
167
168local specification = {
169 name = "unicoding",
170 description = "adapt unicode table",
171 initializers = {
172 base = initialize,
173 node = initialize,
174 },
175}
176
177registerotffeature(specification)
178registerafmfeature(specification)
179 |