summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Gesang <phg42.2a@gmail.com>2014-08-10 14:36:13 +0200
committerPhilipp Gesang <phg42.2a@gmail.com>2014-08-10 14:38:31 +0200
commitab2be7b7e82ea1b0103b70b327137a939df6b8fa (patch)
tree50f1d02ac2fc071dd420710646b107f2fbd56a50
parent32296e68a23ddb5f035e6991733466ea82231c95 (diff)
downloadluaotfload-ab2be7b7e82ea1b0103b70b327137a939df6b8fa.tar.gz
[conf, main] add support for and preliminary implementation of verbose font definers
The definers ``info_patch`` and ``info_generic`` wrap the two existing font definers in a function that emits verbose information about the definitions taking place.
-rw-r--r--src/luaotfload-configuration.lua9
-rw-r--r--src/luaotfload-main.lua40
2 files changed, 39 insertions, 10 deletions
diff --git a/src/luaotfload-configuration.lua b/src/luaotfload-configuration.lua
index ec38d90..a375c37 100644
--- a/src/luaotfload-configuration.lua
+++ b/src/luaotfload-configuration.lua
@@ -432,7 +432,14 @@ local option_spec = {
definer = {
in_t = string_t,
out_t = string_t,
- transform = function (d) return d == "generic" and d or "patch" end,
+ transform = function (d)
+ if d == "generic" or d == "patch"
+ or d == "info_generic" or d == "info_patch"
+ then
+ return d
+ end
+ return "patch"
+ end,
},
log_level = {
in_t = number_t,
diff --git a/src/luaotfload-main.lua b/src/luaotfload-main.lua
index 773a3cf..b5cb1d3 100644
--- a/src/luaotfload-main.lua
+++ b/src/luaotfload-main.lua
@@ -4,7 +4,7 @@
-- REQUIREMENTS: luatex v.0.79 or later; packages lualibs, luatexbase
-- AUTHOR: Élie Roux, Khaled Hosny, Philipp Gesang
-- VERSION: same as Luaotfload
--- MODIFIED: 2014-07-24 22:08:34+0200
+-- MODIFIED: 2014-08-08 23:14:37+0200
-----------------------------------------------------------------------
--
--- Note:
@@ -672,13 +672,13 @@ create_callback("luaotfload.patch_font", "simple", dummy_function)
--doc]]--
-local read_font_file = fonts.definers.read
-local definers = {
- generic = read_font_file,
- --- spec -> size -> id -> tmfdata
- patch = function (specification, size, id)
- local tfmdata = read_font_file (specification, size, id)
+local definers = { } --- (string, spec -> size -> id -> tmfdata) hash_t
+do
+ local read = fonts.definers.read
+
+ local patch = function (specification, size, id)
+ local tfmdata = read (specification, size, id)
if type (tfmdata) == "table" and tfmdata.shared then
--- We need to test for the “shared” field here
--- or else the fontspec capheight callback will
@@ -686,8 +686,30 @@ local definers = {
call_callback ("luaotfload.patch_font", tfmdata, specification)
end
return tfmdata
- end,
-}
+ end
+
+ local mk_info = function (name)
+ local definer = name == "patch" and patch or read
+ return function (specification, size, id)
+ logreport ("both", 0, "main", "active font definer: %q", name)
+ logreport ("both", 0, "main", " > defining font no. %d", id)
+ logreport ("both", 0, "main", " > spec %q", specification)
+ logreport ("both", 0, "main", " > at size %.2f pt", size / 2^16)
+ local tfmdata = definer (specification, size, id)
+ if not tfmdata then
+ logreport ("both", 0, "main", "font definition failed")
+ return
+ end
+ logreport ("both", 0, "main", "font definition successful")
+ return tfmdata
+ end
+ end
+
+ definers.patch = patch
+ definers.generic = read
+ definers.info_patch = mk_info "patch"
+ definers.info_generic = mk_info "generic"
+end
reset_callback "define_font"