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
|
if not modules then modules = { } end modules ['luatex-fonts-syn'] = {
version = 1.001,
comment = "companion to luatex-*.tex",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
if context then
texio.write_nl("fatal error: this module is not for context")
os.exit()
end
-- Generic font names support.
--
-- Watch out, the version number is the same as the one used in
-- the mtx-fonts.lua function scripts.fonts.names as we use a
-- simplified font database in the plain solution and by using
-- a different number we're less dependent on context.
--
-- mtxrun --script font --reload --simple
--
-- The format of the file is as follows:
--
-- return {
-- ["version"] = 1.001,
-- ["cache_version"] = 1.001,
-- ["mappings"] = {
-- ["somettcfontone"] = { "Some TTC Font One", "SomeFontA.ttc", 1 },
-- ["somettcfonttwo"] = { "Some TTC Font Two", "SomeFontA.ttc", 2 },
-- ["somettffont"] = { "Some TTF Font", "SomeFontB.ttf" },
-- ["someotffont"] = { "Some OTF Font", "SomeFontC.otf" },
-- },
-- }
local fonts = fonts
fonts.names = fonts.names or { }
fonts.names.version = 1.001 -- not the same as in context but matches mtx-fonts --simple
fonts.names.basename = "luatex-fonts-names"
fonts.names.cache = containers.define("fonts","data",fonts.names.version,true)
local data = nil
local loaded = false
local fileformats = { "lua", "tex", "other text files" }
function fonts.names.reportmissingbase()
texio.write("<missing font database, run: mtxrun --script fonts --reload --simple>")
fonts.names.reportmissingbase = nil
end
function fonts.names.reportmissingname()
texio.write("<unknown font in database, run: mtxrun --script fonts --reload --simple>")
fonts.names.reportmissingname = nil
end
function fonts.names.resolve(name,sub)
if not loaded then
local basename = fonts.names.basename
if basename and basename ~= "" then
data = containers.read(fonts.names.cache,basename)
if not data then
basename = file.addsuffix(basename,"lua")
for i=1,#fileformats do
local format = fileformats[i]
local foundname = resolvers.findfile(basename,format) or ""
if foundname ~= "" then
data = dofile(foundname)
texio.write("<font database loaded: ",foundname,">")
break
end
end
end
end
loaded = true
end
if type(data) == "table" and data.version == fonts.names.version then
local condensed = string.gsub(string.lower(name),"[^%a%d]","")
local found = data.mappings and data.mappings[condensed]
if found then
local fontname, filename, subfont = found[1], found[2], found[3]
if subfont then
return filename, fontname
else
return filename, false
end
elseif fonts.names.reportmissingname then
fonts.names.reportmissingname()
return name, false -- fallback to filename
end
elseif fonts.names.reportmissingbase then
fonts.names.reportmissingbase()
end
end
fonts.names.resolvespec = fonts.names.resolve -- only supported in mkiv
function fonts.names.getfilename(askedname,suffix) -- only supported in mkiv
return ""
end
function fonts.names.ignoredfile(filename) -- only supported in mkiv
return false -- will be overloaded
end
|