summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Gesang <phg@phi-gamma.net>2016-04-16 00:31:47 +0200
committerPhilipp Gesang <phg@phi-gamma.net>2016-04-16 00:34:54 +0200
commit6c5d9617441d47fc375749880b3faaff29e8c5d0 (patch)
treec761eb121a63c6aabb148839c3cd6a73000be862 /src
parent4d4467ae3a0df377eac66346c25de5b35ceb53e3 (diff)
downloadluaotfload-6c5d9617441d47fc375749880b3faaff29e8c5d0.tar.gz
[tool] annihilate references to FF
The tables emitted by the new font reader functions do not correspond to their Fontforge counterparts. Thus, some of the display routines had to be rewritten, in some cases like the names table this resulted in the removal of a good deal of obsolete code.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/luaotfload-tool.lua137
1 files changed, 36 insertions, 101 deletions
diff --git a/src/luaotfload-tool.lua b/src/luaotfload-tool.lua
index 0981582..eb069bf 100755
--- a/src/luaotfload-tool.lua
+++ b/src/luaotfload-tool.lua
@@ -104,6 +104,7 @@ local iosavedata = io.savedata
local lfsisdir = lfs.isdir
local lfsisfile = lfs.isfile
local stringsplit = string.split
+local tablekeys = table.keys
local tableserialize = table.serialize
local tablesortedkeys = table.sortedkeys
local tabletohash = table.tohash
@@ -425,7 +426,7 @@ local baseindent = " "
--[[doc--
show_info_items -- Together with show_info_table prints the table returned by
- fontloader.info(), recursing into nested tables if appropriate (as necessitated
+ readers.getinfo(), recursing into nested tables if appropriate (as necessitated
by Luatex versions 0.78+ which include the pfminfo table in the result.
--doc]]--
@@ -485,15 +486,16 @@ local p_words = Ct(p_word * (p_whitespace * p_word)^0)
--- string -> int -> string list
local reflow = function (text, width)
local words
- if type(text) == "string" then
+ local t_text = type (text)
+ if t_text == "string" then
words = lpegmatch(p_words, text)
if #words < 2 then
return { text }
end
- else
+ elseif t_text == "table" then
words = text
- if #words < 2 then
- return words
+ if #text < 2 then
+ return text
end
end
@@ -540,42 +542,20 @@ local print_field = function (key, val)
end
end
-local display_names = function (names)
- print_heading("Font Metadata", 2)
- for i=1, #names do
- local lang, namedata = names[i].lang, names[i].names
- print_heading(stringformat("Language: %s ", i, lang), 3)
- texiowrite_nl ""
- if namedata then
- for field, value in next, namedata do
- print_field(field, value)
- end
- end
- end
-end
-
--- see luafflib.c
local general_fields = {
--- second: l -> literal | n -> length | d -> date
{ "fullname", "l", "font name" },
{ "version", "l", "font version" },
- { "creationtime", "d", "creation time" },
- { "modificationtime", "d", "modification time" },
{ "subfonts", "n", "number of subfonts" },
{ "glyphcnt", "l", "number of glyphs" },
{ "weight", "l", "weight indicator" },
- { "design_size", "l", "design size" },
- { "design_range_bottom", "l", "design size min" },
- { "design_range_top", "l", "design size max" },
- { "fontstyle_id", "l", "font style id" },
- { "fontstyle_name", "S", "font style name" },
- { "strokewidth", "l", "stroke width" },
- { "units_per_em", "l", "units per em" },
- { "ascent", "l", "ascender height" },
- { "descent", "l", "descender height" },
- { "comments", "l", "comments" },
- { "os2_version", "l", "os2 version" },
- { "sfd_version", "l", "sfd version" },
+ { "designsize", "l", "design size" },
+ { "minsize", "l", "design size min" },
+ { "maxsize", "l", "design size max" },
+ { "units", "l", "units per em" },
+ { "ascender", "l", "ascender height" },
+ { "descender", "l", "descender height" },
}
local display_general = function (fullinfo)
@@ -635,7 +615,7 @@ local print_features = function (features)
for script, languages in next, data do
local field = stringformat(key_fmt, script).. fieldseparator .. " "
local wd_field = #field
- local lines = reflow(languages.list, textwidth - wd_field)
+ local lines = reflow(tablekeys(languages), textwidth - wd_field)
local indent = stringrep(" ", wd_field)
texiowrite_nl(field)
texiowrite(lines[1])
@@ -648,67 +628,32 @@ local print_features = function (features)
end
end
-local extract_feature_info = function (set)
- local collected = { }
- for i=1, #set do
- local features = set[i].features
- if features then
- for j=1, #features do
- local feature = features[j]
- local scripts = feature.scripts
- local tagname = stringlower(feature.tag)
- local entry = collected[tagname] or { }
-
- for k=1, #scripts do
- local script = scripts[k]
- local scriptname = stringlower(script.script)
- local c_script = entry[scriptname] or {
- list = { },
- set = { },
- }
- local list, set = c_script.list, c_script.set
-
- for l=1, #script.langs do
- local langname = stringlower(script.langs[l])
- if not set[langname] then
- list[#list+1] = langname
- set[langname] = true
- end
- end
- entry[scriptname] = c_script
- end
- collected[tagname] = entry
- end
- end
- end
- return collected
+local display_feature_set = function (set)
+ print_features(set)
end
-local display_feature_set = function (set)
- local collected = extract_feature_info(set)
- print_features(collected)
+local display_features_type = function (id, feat)
+ if next (feat) then
+ print_heading(id, 3)
+ display_feature_set(feat)
+ return true
+ end
+ return false
end
-local display_features = function (gsub, gpos)
+local display_features = function (features)
texiowrite_nl ""
+ print_heading("Features", 2)
- if gsub or gpos then
- print_heading("Features", 2)
-
- if gsub then
- print_heading("GSUB Features", 3)
- display_feature_set(gsub)
- end
-
- if gpos then
- print_heading("GPOS Features", 3)
- display_feature_set(gpos)
- end
+ if not display_features_type ("GSUB Features", features.gsub)
+ or not display_features_type ("GPOS Features", features.gpos)
+ then
+ texiowrite_nl("font defines neither gsub nor gpos features")
end
end
local show_full_info = function (path, subfont, warnings)
- local rawinfo, warn = fontloader.open(path, subfont)
+ local rawinfo, warn = fonts.handlers.otf.readers.loadfont (path, subfont)
if warnings then
show_fontloader_warnings(warn)
end
@@ -716,20 +661,10 @@ local show_full_info = function (path, subfont, warnings)
texiowrite_nl(stringformat([[cannot open font %s]], path))
return
end
- local fontdata = { }
- local fullinfo = fontloader.to_table(rawinfo)
- local fields = fontloader.fields(rawinfo)
- fontloader.close(rawinfo)
- display_names(fullinfo.names)
- display_general(fullinfo)
- display_features(fullinfo.gsub, fullinfo.gpos)
+ display_general(rawinfo)
+ display_features(rawinfo.resources.features)
end
---- Subfonts returned by fontloader.info() do not correspond
---- to the actual indices required by fontloader.open(), so
---- we try and locate the correct one by matching the request
---- against the full name.
-
local subfont_by_name
subfont_by_name = function (lst, askedname, n)
if not n then
@@ -741,7 +676,7 @@ subfont_by_name = function (lst, askedname, n)
if fonts.names.sanitize_fontname (font.fullname) == askedname then
return font
end
- return subfont_by_name (lst, askedname, n+1)
+ return subfont_by_name (lst, askedname, n)
end
return false
end
@@ -749,9 +684,9 @@ end
--[[doc--
The font info knows two levels of detail:
- a) basic information returned by fontloader.info(); and
+ a) basic information returned by readers.getinfo(); and
b) detailed information that is a subset of the font table
- returned by fontloader.open().
+ returned by readers.loadfont().
--doc]]--
local show_font_info = function (basename, askedname, detail, warnings)
@@ -763,7 +698,7 @@ local show_font_info = function (basename, askedname, detail, warnings)
fullname = resolvers.findfile(basename)
end
if fullname then
- local shortinfo = fontloader.info(fullname)
+ local shortinfo, _warn = fonts.handlers.otf.readers.getinfo (fullname)
local nfonts = #shortinfo
if nfonts > 0 then -- true type collection
local subfont