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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
--
-- This is file `luaotfload.lua',
-- generated with the docstrip utility.
--
-- The original source files were:
--
-- luaotfload.dtx (with options: `lua')
-- This is a generated file.
--
-- Copyright (C) 2009 by Elie Roux <elie.roux@telecom-bretagne.eu>
--
-- This work is under the CC0 license.
--
-- This work consists of the main source file luaotfload.dtx
-- and the derived files
-- luaotfload.sty, luaotfload.lua
--
luaotfload = { }
luaotfload.module = {
name = "luaotfload",
version = 1.06,
date = "2010/02/03",
description = "ConTeXt font loading system.",
author = "Elie Roux & Hans Hagen",
copyright = "Elie Roux",
license = "CC0"
}
luatextra.provides_module(luaotfload.module)
function luaotfload.loadmodule(name, compat)
local tofind
if compat then
if tex.luatexversion < 45 then
tofind = 'otfl-compat-'..name
else
tofind = 'otfl-'..name
end
else
tofind = 'otfl-'..name
end
local found = kpse.find_file(tofind,"tex")
if not found then
luatextra.module_error('luaotfload', string.format('file %s not found.', tofind))
return
end
luatextra.module_log('luaotfload', "loading file "..found)
dofile(found)
end
string.strip = string.stripspaces
file = fpath
file.extname = fpath.suffix
local splitters_s, splitters_m = { }, { }
function lpeg.splitat(separator,single)
local splitter = (single and splitters_s[separator]) or splitters_m[separator]
if not splitter then
separator = lpeg.P(separator)
if single then
local other, any = lpeg.C((1 - separator)^0), lpeg.P(1)
splitter = other * (separator * lpeg.C(any^0) + "")
splitters_s[separator] = splitter
else
local other = lpeg.C((1 - separator)^0)
splitter = other * (separator * other)^0
splitters_m[separator] = splitter
end
end
return splitter
end
function table.compact(t)
if t then
for k,v in next, t do
if not next(v) then
t[k] = nil
end
end
end
end
function table.sortedhashkeys(tab) -- fast one
local srt = { }
for key,_ in next, tab do
srt[#srt+1] = key
end
table.sort(srt)
return srt
end
function table.reverse_hash(h)
local r = { }
for k,v in next, h do
r[v] = string.lower(string.gsub(k," ",""))
end
return r
end
function table.reverse(t)
local tt = { }
if #t > 0 then
for i=#t,1,-1 do
tt[#tt+1] = t[i]
end
end
return tt
end
luaotfload.loadmodule('luat-dum.lua') -- not used in context at all
luaotfload.loadmodule('data-con.lua') -- maybe some day we don't need this one
luaotfload.loadmodule('node-ini.lua')
function attributes.private(name)
local number = tex.attributenumber['otfl@'..name]
if not number then
luatextra.module_error('luaotfload', string.format('asking for attribute %s, but not declared. Please report to the maintainer of luaotfload.', name))
end
return number
end
tex.attribute[0] = 0
luaotfload.loadmodule('node-res.lua')
luaotfload.loadmodule('node-inj.lua')
luaotfload.loadmodule('node-fnt.lua')
luaotfload.loadmodule('node-dum.lua')
luaotfload.loadmodule('font-ini.lua')
luaotfload.loadmodule('font-tfm.lua')
luaotfload.loadmodule('font-cid.lua')
luaotfload.loadmodule('font-ott.lua')
luaotfload.loadmodule('font-otf.lua', 1)
luaotfload.loadmodule('font-otd.lua')
luaotfload.loadmodule('font-oti.lua')
luaotfload.loadmodule('font-otb.lua')
luaotfload.loadmodule('font-otn.lua')
luaotfload.loadmodule('font-ota.lua')
luaotfload.loadmodule('font-otc.lua')
do
local temp = callback.register
callback.register = function (...)
return
end
luaotfload.loadmodule('font-def.lua')
callback.register = temp
end
luaotfload.loadmodule('font-xtx.lua')
luaotfload.loadmodule('font-map.lua')
luaotfload.loadmodule('font-dum.lua')
fonts.enc.known = {}
function luaotfload.find_vf_file(name)
name = file.removesuffix(file.basename(name))
local result = kpse.find_file(name, "vf") or ""
if result == "" then
result = kpse.find_file(name, "ovf") or ""
end
return result
end
function luaotfload.register_callbacks()
callback.add('pre_linebreak_filter', nodes.simple_font_handler, 'luaotfload.pre_linebreak_filter')
callback.add('hpack_filter', nodes.simple_font_handler, 'luaotfload.hpack_filter')
callback.reset('define_font')
callback.add('define_font', fonts.define.read, 'luaotfload.define_font', 1)
callback.add('find_vf_file', luaotfload.find_vf_file, 'luaotfload.find_vf_file')
end
function luaotfload.unregister_callbacks()
callback.remove('pre_linebreak_filter', 'luaotfload.pre_linebreak_filter')
callback.remove('hpack_filter', 'luaotfload.hpack_filter')
callback.remove('define_font', 'luaotfload.define_font')
callback.remove('find_vf_file', 'luaotfload.find_vf_file')
end
--
-- End of File `luaotfload.lua'.
|