summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Gesang <phg42.2a@gmail.com>2014-03-23 16:52:27 +0100
committerPhilipp Gesang <phg42.2a@gmail.com>2014-03-23 16:52:27 +0100
commit68d04a338b74a585e12df7ab3200cda389b7c964 (patch)
tree14d8cb638a76cdcf3cca1191337da9a5e2f76ca5
parent22dc6f817a3ec342996359fd3b39acea65601c53 (diff)
downloadluaotfload-68d04a338b74a585e12df7ab3200cda389b7c964.tar.gz
[db,tool,main] implement run directive for bisection mode
-rw-r--r--src/luaotfload-database.lua13
-rw-r--r--src/luaotfload-main.lua34
-rwxr-xr-xsrc/luaotfload-tool.lua40
3 files changed, 63 insertions, 24 deletions
diff --git a/src/luaotfload-database.lua b/src/luaotfload-database.lua
index 3cccc17..de1594a 100644
--- a/src/luaotfload-database.lua
+++ b/src/luaotfload-database.lua
@@ -2920,17 +2920,28 @@ order_design_sizes = function (families)
return families
end
---- dbobj -> dbobj -> int -> int -> string * bool list
+--[[doc--
+
+ collect_font_filenames -- Scan the three search path categories for
+ font files. This constitutes the first pass of the update mode.
+
+--doc]]--
+
+--- unit -> string * bool list
local collect_font_filenames = function ()
report ("info", 4, "db", "Scanning the filesystem for font files.")
local filenames = { }
+ local bisect = luaotfloadconfig.bisect
tableappend (filenames, collect_font_filenames_texmf ())
tableappend (filenames, collect_font_filenames_system ())
if luaotfloadconfig.scan_local == true then
tableappend (filenames, collect_font_filenames_local ())
end
+ if bisect then
+ return { unpack (filenames, bisect[1], bisect[2]) }
+ end
return filenames
end
diff --git a/src/luaotfload-main.lua b/src/luaotfload-main.lua
index 3c4c770..fe4e792 100644
--- a/src/luaotfload-main.lua
+++ b/src/luaotfload-main.lua
@@ -49,20 +49,22 @@ luaotfload.log = luaotfload.log or { }
config = config or { }
config.luaotfload = config.luaotfload or { }
-------.luaotfload.resolver = config.luaotfload.resolver or "normal"
-config.luaotfload.resolver = config.luaotfload.resolver or "cached"
-config.luaotfload.definer = config.luaotfload.definer or "patch"
-config.luaotfload.loglevel = config.luaotfload.loglevel or 2
-config.luaotfload.color_callback = config.luaotfload.color_callback or "pre_linebreak_filter"
-config.luaotfload.prioritize = config.luaotfload.prioritize or "sys"
-config.luaotfload.names_dir = config.luaotfload.names_dir or "names"
-config.luaotfload.cache_dir = config.luaotfload.cache_dir or "fonts"
-config.luaotfload.index_file = config.luaotfload.index_file or "luaotfload-names.lua"
-config.luaotfload.formats = config.luaotfload.formats or "otf,ttf,ttc,dfont"
-config.luaotfload.scan_local = config.luaotfload.scan_local == true
-
-if config.luaotfload.strip == nil then
- config.luaotfload.strip = true
+local luaotfloadconfig = config.luaotfload
+----------------.resolver = luaotfloadconfig.resolver or "normal"
+luaotfloadconfig.resolver = luaotfloadconfig.resolver or "cached"
+luaotfloadconfig.definer = luaotfloadconfig.definer or "patch"
+luaotfloadconfig.bisect = false --- useless when running TeX
+luaotfloadconfig.loglevel = luaotfloadconfig.loglevel or 2
+luaotfloadconfig.color_callback = luaotfloadconfig.color_callback or "pre_linebreak_filter"
+luaotfloadconfig.prioritize = luaotfloadconfig.prioritize or "sys"
+luaotfloadconfig.names_dir = luaotfloadconfig.names_dir or "names"
+luaotfloadconfig.cache_dir = luaotfloadconfig.cache_dir or "fonts"
+luaotfloadconfig.index_file = luaotfloadconfig.index_file or "luaotfload-names.lua"
+luaotfloadconfig.formats = luaotfloadconfig.formats or "otf,ttf,ttc,dfont"
+luaotfloadconfig.scan_local = luaotfloadconfig.scan_local == true
+
+if luaotfloadconfig.strip == nil then
+ luaotfloadconfig.strip = true
end
luaotfload.module = {
@@ -151,7 +153,7 @@ loadmodule "log.lua" --- messages; used to be part of -override
local log = luaotfload.log
local report = log.report
-log.set_loglevel(config.luaotfload.loglevel)
+log.set_loglevel(luaotfloadconfig.loglevel)
--[[doc--
@@ -689,7 +691,7 @@ reset_callback "define_font"
--doc]]--
-local font_definer = config.luaotfload.definer
+local font_definer = luaotfloadconfig.definer
if font_definer == "generic" then
add_to_callback("define_font",
diff --git a/src/luaotfload-tool.lua b/src/luaotfload-tool.lua
index 6f1f0a1..e3f4516 100755
--- a/src/luaotfload-tool.lua
+++ b/src/luaotfload-tool.lua
@@ -96,6 +96,7 @@ config = config or { }
local config = config
local luaotfloadconfig = config.luaotfload or { }
config.luaotfload = luaotfloadconfig
+luaotfloadconfig.bisect = false
luaotfloadconfig.version = luaotfloadconfig.version or version
luaotfloadconfig.names_dir = luaotfloadconfig.names_dir or "names"
luaotfloadconfig.cache_dir = luaotfloadconfig.cache_dir or "fonts"
@@ -855,7 +856,7 @@ local bisect_start = function ()
if write_bisect_status (data) then
return true
end
- return false
+ return false, false
end
--[[doc--
@@ -885,7 +886,7 @@ local bisect_stop = function ()
if lfsisfile (bisect_status_file) then
return false
end
- return true
+ return true, false
end
--[[doc--
@@ -920,7 +921,34 @@ local bisect_status = function ()
local current = status[nsteps]
report ("info", 0, "bisect", "Step %d: lo=%d, hi=%d, pivot=%d.",
nsteps, unpack (current))
- return true
+ return true, false
+end
+
+--[[doc--
+
+ bisect_run -- Run Luaotfload utilizing the current bisection state.
+ This should be combined with the --update mode, possibly with the
+ --force option.
+
+ Luaotfload always tests the segment below the pivot first.
+
+--doc]]--
+
+local bisect_run = function ()
+ local status = read_bisect_status ()
+ if not status then
+ return false
+ end
+ local nsteps = #status
+ local currentstep = nsteps + 1
+ local current = status[nsteps]
+ local lo, hi, pivot = unpack (current)
+ report ("info", 3, "bisect", "Previous step %d: lo=%d, hi=%d, pivot=%d.",
+ nsteps, lo, hi, pivot)
+ report ("info", 1, "bisect", "Step %d: Testing fonts from %d to %d.",
+ currentstep, lo, pivot)
+ luaotfloadconfig.bisect = { lo, pivot }
+ return true, true
end
local bisect_modes = {
@@ -929,6 +957,7 @@ local bisect_modes = {
bad = function () bisect_set "bad" end,
stop = bisect_stop,
status = bisect_status,
+ run = bisect_run,
}
actions.bisect = function (job)
@@ -938,10 +967,7 @@ actions.bisect = function (job)
report ("info", 0, "bisect", "Unknown directive %q.", mode)
return false, false
end
- if runner (job) then
- return true, false
- end
- return false, false
+ return runner (job)
end
actions.flush = function (job)