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
|
luaotfload = { }
luaotfload.module = {
name = "luaotfload",
version = 1.001,
date = "2009/04/08",
description = "ConTeXt font loading system.",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
luatextra.provides_module(luaotfload.module)
function luaotfload.loadmodule(name)
local foundname = kpse.find_file('otfl-'..name,"tex")
if not foundname then
luatextra.module_error('luaotfload', string.format('file otfl-%s not found.', name))
return
end
dofile(foundname)
end
-- The following functions are made to map ConTeXt functions to luaextra functions.
string.strip = string.stripspaces
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
file = fpath
file.extname = fpath.suffix
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
-- The following modules contain code that is either not used
-- at all outside ConTeXt or will fail when enabled due to
-- lack of other modules.
-- First we load a few helper modules. This is about the miminum
-- needed to let the font modules do theuir work.
luaotfload.loadmodule('luat-dum.lua') -- not used in context at all
luaotfload.loadmodule('luat-con.lua') -- maybe some day we don't need this one
-- We do need some basic node support although the following
-- modules contain a little bit of code that is not used. It's
-- not worth weeding.
luaotfload.loadmodule('node-ini.lua')
-- function to set the good attribute numbers, they are not arbitrary values
-- between 127 and 255 like in the ConTeXt base code
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
luaotfload.loadmodule('node-inj.lua') -- will be replaced (luatex > .50)
luaotfload.loadmodule('node-fnt.lua')
luaotfload.loadmodule('node-dum.lua')
-- Now come the font modules that deal with traditional TeX fonts
-- as well as open type fonts. We don't load the afm related code
-- from font-enc.lua and font-afm.lua as only ConTeXt deals with
-- it.
--
-- The font database file (if used at all) must be put someplace
-- visible for kpse and is not shared with ConTeXt. The mtx-fonts
-- script can be used to genate this file (using the --names
-- option).
luaotfload.loadmodule('font-ini.lua')
luaotfload.loadmodule('font-tfm.lua') -- will be split (we may need font-log)
--luaotfload.loadmodule('font-ott.lua') -- might be split
luaotfload.loadmodule('font-otf.lua')
luaotfload.loadmodule('font-otb.lua')
luaotfload.loadmodule('font-cid.lua')
luaotfload.loadmodule('font-otn.lua')
luaotfload.loadmodule('font-ota.lua') -- might be split
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-dum.lua')
-- small patch
fonts.enc.known = {}
function luaotfload.register_callbacks()
callback.add('ligaturing', nodes.simple_font_dummy, 'luaotfload.ligaturing')
callback.add('kerning', nodes.simple_font_dummy, 'luaotfload.kerning')
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)
end
function luaotfload.unregister_callbacks()
callback.remove('ligaturing', 'luaotfload.ligaturing')
callback.remove('kerning', 'luaotfload.kerning')
callback.remove('pre_linebreak_filter', 'luaotfload.pre_linebreak_filter')
callback.remove('hpack_filter', 'luaotfload.hpack_filter')
callback.remove('define_font', 'luaotfload.define_font')
end
|