summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Gesang <phg42.2a@gmail.com>2013-11-03 19:53:03 +0100
committerPhilipp Gesang <phg42.2a@gmail.com>2013-11-03 19:53:03 +0100
commit2f0fb9ef09f796e493776e4ffec164fb014e4283 (patch)
tree0ebd1ead488dd4cf9b200220031cd2f99fb126f6
parent352272f48743f785c3a0cea0dcf4e76efc3270e5 (diff)
downloadluaotfload-2f0fb9ef09f796e493776e4ffec164fb014e4283.tar.gz
[db] add gzip check to script loader
-rw-r--r--luaotfload-database.lua51
1 files changed, 35 insertions, 16 deletions
diff --git a/luaotfload-database.lua b/luaotfload-database.lua
index 1c694fe..df2199e 100644
--- a/luaotfload-database.lua
+++ b/luaotfload-database.lua
@@ -31,6 +31,7 @@ local fontloaderinfo = fontloader.info
local fontloaderclose = fontloader.close
local fontloaderopen = fontloader.open
local fontloaderto_table = fontloader.to_table
+local gzipload = gzip.load
local gzipsave = gzip.save
local iolines = io.lines
local ioopen = io.open
@@ -396,27 +397,37 @@ end
--- string -> (string * table)
local load_lua_file = function (path)
- local foundname = filereplacesuffix(path, "luc")
+ local foundname = filereplacesuffix (path, "luc")
- local fh = ioopen(foundname, "rb") -- try bin first
+ if false then
+ local fh = ioopen (foundname, "rb") -- try bin first
if fh then
local chunk = fh:read"*all"
fh:close()
- code = load(chunk, "b")
+ code = load (chunk, "b")
end
+end
if not code then --- fall back to text file
- foundname = filereplacesuffix(path, "lua")
+ foundname = filereplacesuffix (path, "lua")
fh = ioopen(foundname, "rb")
if fh then
local chunk = fh:read"*all"
fh:close()
- code = load(chunk, "t")
+ code = load (chunk, "t")
+ end
+ end
+
+ if not code then --- probe gzipped file
+ foundname = filereplacesuffix (path, "lua.gz")
+ local chunk = gzipload (foundname)
+ if chunk then
+ code = load (chunk, "t")
end
end
if not code then return nil, nil end
- return foundname, code()
+ return foundname, code ()
end
--- define locals in scope
@@ -3136,11 +3147,6 @@ save_lookups = function ( )
return false
end
-local tabletogzip = function (filename, ...)
- local serialized = tableserialize(true, ...)
- gzipsave (filenmaeserialized)
-end
-
--- save_names() is usually called without the argument
--- dbobj? -> bool
save_names = function (currentnames)
@@ -3151,22 +3157,35 @@ save_names = function (currentnames)
local luaname, lucname = path.lua, path.luc
if fileiswritable (luaname) and fileiswritable (lucname) then
osremove (lucname)
+ local gzname = luaname .. ".gz"
if luaotfloadconfig.compress then
local serialized = tableserialize (currentnames, true)
- gzipsave (luaname, serialized)
+ gzipsave (gzname, serialized)
caches.compile (currentnames, "", lucname)
else
tabletofile (luaname, currentnames, true)
caches.compile (currentnames, luaname, lucname)
end
- if lfsisfile (luaname) and lfsisfile (lucname) then
- report ("info", 1, "db", "Font index saved")
+ report ("info", 1, "db", "Font index saved at ...")
+ local success = false
+ if lfsisfile (luaname) then
report ("info", 3, "db", "Text: " .. luaname)
+ success = true
+ end
+ if lfsisfile (gzname) then
+ report ("info", 3, "db", "Gzip: " .. gzname)
+ success = true
+ end
+ if lfsisfile (lucname) then
report ("info", 3, "db", "Byte: " .. lucname)
+ success = true
+ end
+ if success then
return true
+ else
+ report ("info", 0, "db", "Could not compile font index")
+ return false
end
- report ("info", 0, "db", "Could not compile font index")
- return false
end
report ("info", 0, "db", "Index file not writable")
if not fileiswritable (luaname) then