summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhaled Hosny <khaledhosny@eglug.org>2010-05-16 18:26:00 +0300
committerKhaled Hosny <khaledhosny@eglug.org>2010-05-16 18:28:20 +0300
commit36507882318ca56f0b357846ae62ca21e7cddc0f (patch)
tree13c84545617d719a0d86ecd27883e8a40c9e6f30
parent391b8d92bb39d3e6b7eb8a216c028747ad8527fb (diff)
downloadluaotfload-36507882318ca56f0b357846ae62ca21e7cddc0f.tar.gz
Simplify the code
The |status| table need not to reside in a separate file, it is now part of the font names database itself.
-rwxr-xr-xmkluatexfontdb.lua11
-rw-r--r--otfl-font-nms.lua60
2 files changed, 27 insertions, 44 deletions
diff --git a/mkluatexfontdb.lua b/mkluatexfontdb.lua
index a3b6b10..792167b 100755
--- a/mkluatexfontdb.lua
+++ b/mkluatexfontdb.lua
@@ -130,14 +130,6 @@ end
process_cmdline()
do_run_fc_cache(run_fc_cache)
--- the status table is containing correspondances between absolute path and last modification
--- timestamp, it's uses to save time during update, by not reparsing unchanged fonts.
-local status = nil
-local status_file = output_directory .. "/otfl-names-status.lua"
-if not force_reload and file.isreadable(status_file) then
- status = dofile(status_file)
-end
-
local function generate(force)
log("generating font names database.")
local savepath = output_directory
@@ -162,11 +154,10 @@ local function generate(force)
else
fontnames = nil
end
- fontnames, status = names.update(fontnames, status, force)
+ fontnames = names.update(fontnames, force)
log("%s fonts in the database", #fontnames.mappings)
io.savedata(savepath, table.serialize(fontnames, true))
log("saved font names database in %s\n", savepath)
- io.savedata(status_file, table.serialize(status, true))
end
generate(force_reload)
diff --git a/otfl-font-nms.lua b/otfl-font-nms.lua
index 977cfab..d708f5b 100644
--- a/otfl-font-nms.lua
+++ b/otfl-font-nms.lua
@@ -11,7 +11,7 @@ fonts.names = fonts.names or { }
local names = fonts.names
local names_dir = "/luatex/generic/luaotfload/names/"
-names.version = 2.007 -- not the same as in context
+names.version = 2.008 -- not the same as in context
names.data = nil
names.path = {
basename = "otfl-names.lua",
@@ -297,9 +297,11 @@ local function font_fullinfo(filename, subfont, texmf)
return t
end
-local function load_font(filename, fontnames, status, newfontnames, newstatus, texmf)
- local mappings = newfontnames and newfontnames.mappings or { }
- local oldmappings = fontnames.mappings or { }
+local function load_font(filename, fontnames, newfontnames, texmf)
+ local newmappings = newfontnames.mappings
+ local newstatus = newfontnames.status
+ local mappings = fontnames.mappings
+ local status = fontnames.status
if filename then
local timestamp, db_timestamp
db_timestamp = status[filename] and status[filename].timestamp
@@ -309,8 +311,8 @@ local function load_font(filename, fontnames, status, newfontnames, newstatus, t
newstatus[filename].index = {}
if db_timestamp == timestamp then
for _,v in ipairs(status[filename].index) do
- mappings[#mappings+1] = oldmappings[v]
- newstatus[filename].index[#newstatus[filename].index+1] = #mappings
+ newmappings[#newmappings+1] = mappings[v]
+ newstatus[filename].index[#newstatus[filename].index+1] = #newmappings
end
if trace_loading then
logs.report("font already indexed: %s", filename)
@@ -325,13 +327,13 @@ local function load_font(filename, fontnames, status, newfontnames, newstatus, t
if type(info) == "table" and #info > 1 then
for i in ipairs(info) do
local fullinfo = font_fullinfo(filename, i-1, texmf)
- mappings[#mappings+1] = fullinfo
- newstatus[filename].index[#newstatus[filename].index+1] = #mappings
+ newmappings[#newmappings+1] = fullinfo
+ newstatus[filename].index[#newstatus[filename].index+1] = #newmappings
end
else
local fullinfo = font_fullinfo(filename, false, texmf)
- mappings[#mappings+1] = fullinfo
- newstatus[filename].index[#newstatus[filename].index+1] = #mappings
+ newmappings[#newmappings+1] = fullinfo
+ newstatus[filename].index[#newstatus[filename].index+1] = #newmappings
end
else
if trace_loading then
@@ -360,7 +362,7 @@ end
fonts.path_normalize = path_normalize
-local function scan_dir(dirname, fontnames, status, newfontnames, newstatus, texmf)
+local function scan_dir(dirname, fontnames, newfontnames, texmf)
--[[
this function scans a directory and populates the list of fonts
with all the fonts it finds.
@@ -394,11 +396,11 @@ local function scan_dir(dirname, fontnames, status, newfontnames, newstatus, tex
end
for _,fnt in ipairs(list) do
fnt = path_normalize(fnt)
- load_font(fnt, fontnames, status, newfontnames, newstatus, texmf)
+ load_font(fnt, fontnames, newfontnames, texmf)
end
end
-local function scan_texmf_tree(fontnames, status, newfontnames, newstatus)
+local function scan_texmf_tree(fontnames, newfontnames)
--[[
The function that scans all fonts in the texmf tree, through kpathsea
variables OPENTYPEFONTS and TTFONTS of texmf.cnf
@@ -429,7 +431,7 @@ local function scan_texmf_tree(fontnames, status, newfontnames, newstatus)
if not explored_dirs[d] then
count = count + 1
progress(count, #fontdirs)
- scan_dir(d, fontnames, status, newfontnames, newstatus, false)
+ scan_dir(d, fontnames, newfontnames, false)
explored_dirs[d] = true
end
end
@@ -438,7 +440,7 @@ local function scan_texmf_tree(fontnames, status, newfontnames, newstatus)
if not explored_dirs[d] then
count = count + 1
progress(count, #fontdirs)
- scan_dir(d, fontnames, status, newfontnames, newstatus, true)
+ scan_dir(d, fontnames, newfontnames, true)
explored_dirs[d] = true
end
end
@@ -472,7 +474,7 @@ local static_osx_dirs = {
"/System/Library/Fonts",
}
-local function scan_os_fonts(fontnames, status, newfontnames, newstatus)
+local function scan_os_fonts(fontnames, newfontnames)
--[[
This function scans the OS fonts through fontcache (fc-list), it executes
only if OSFONTDIR is empty (which is the case under most Unix by default).
@@ -493,7 +495,7 @@ local function scan_os_fonts(fontnames, status, newfontnames, newstatus)
for _,d in ipairs(static_osx_dirs) do
count = count + 1
progress(count, #static_osx_dirs)
- scan_dir(d, fontnames, status, newfontnames, newstatus, false)
+ scan_dir(d, fontnames, newfontnames, false)
end
else
if trace_search then
@@ -509,7 +511,7 @@ local function scan_os_fonts(fontnames, status, newfontnames, newstatus)
for _,fnt in ipairs(list) do
count = count + 1
progress(count, #list)
- load_font(fnt, fontnames, status, newfontnames, newstatus, false)
+ load_font(fnt, fontnames, newfontnames, false)
end
end
end
@@ -518,41 +520,31 @@ end
local function fontnames_init()
return {
mappings = { },
+ status = { },
version = names.version,
}
end
-local function status_init()
- return {
- version = names.version,
- }
-end
-
-local function update(fontnames, status, force)
+local function update(fontnames, force)
--[[
The main function, scans everything
- fontnames is the final table to return
- force is whether we rebuild it from scratch or not
- - status is a table containing the current status of the database
--]]
if force then
fontnames = fontnames_init()
- status = status_init()
else
- if not fontnames or not fontnames.version or fontnames.version ~= names.version
- or not status or not status.version or status.version ~= names.version then
+ if not fontnames or not fontnames.version or fontnames.version ~= names.version then
fontnames = fontnames_init()
- status = status_init()
if trace_search then
logs.report("no font names database or old one found, generating new one")
end
end
end
local newfontnames = fontnames_init()
- local newstatus = status_init()
- scan_texmf_tree(fontnames, status, newfontnames, newstatus)
- scan_os_fonts (fontnames, status, newfontnames, newstatus)
- return newfontnames, newstatus
+ scan_texmf_tree(fontnames, newfontnames)
+ scan_os_fonts (fontnames, newfontnames)
+ return newfontnames
end
names.scan = scan_dir