diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2014-02-05 20:33:55 +0100 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2014-02-05 20:33:55 +0100 |
commit | c88eb25bd287941119e1db0f52919e4beccb0114 (patch) | |
tree | 567e52b662de0eb3471b9dcf2e6ee4e718bac914 | |
parent | 374b1e07aef53f722814663e5a38fe900824beb4 (diff) | |
parent | c29e7f302f6ab05b6e0975daeaa60240b530885d (diff) | |
download | luaotfload-c88eb25bd287941119e1db0f52919e4beccb0114.tar.gz |
Merge pull request #188 from phi-gamma/texlive2014
fix crash with broken names table
-rw-r--r-- | luaotfload-database.lua | 37 | ||||
-rwxr-xr-x | luaotfload-tool.lua | 28 |
2 files changed, 40 insertions, 25 deletions
diff --git a/luaotfload-database.lua b/luaotfload-database.lua index cf9e672..023d5f8 100644 --- a/luaotfload-database.lua +++ b/luaotfload-database.lua @@ -1376,21 +1376,34 @@ local get_english_names = function (names, basename) english_names = raw_namedata.names end end - else - -- no names table, probably a broken font - report("log", 1, "db", - "Broken font %s rejected due to missing names table.", - basename) - return nil end - return english_names + if not english_names then + -- no (English) names table, probably a broken font + report("both", 3, "db", + "%s: missing or broken names table.", basename) + end + + return english_names or { } end local organize_namedata = function (metadata, english_names, basename, info) + local default_name = english_names.compatfull + or english_names.fullname + or english_names.postscriptname + or metadata.fullname + or metadata.fontname + or info.fullname --- TODO check if fontloader.info() is ready for prime + or info.fontname + local default_family = english_names.preffamily + or english_names.family + or metadata.familyname + or info.familyname +-- local default_modifier = english_names.prefmodifiers +-- or english_names.subfamily local fontnames = { --- see --- https://developer.apple.com/fonts/TTRefMan/RM06/Chap6name.html @@ -1406,14 +1419,15 @@ local organize_namedata = function (metadata, --- However, in some fonts (e.g. CMU) all three fields are --- identical. fullname = --[[ 18 ]] english_names.compatfull - or --[[ 4 ]] english_names.fullname, + or --[[ 4 ]] english_names.fullname + or default_name, --- we keep both the “preferred family” and the “family” --- values around since both are valid but can turn out --- quite differently, e.g. with Latin Modern: --- preffamily: “Latin Modern Sans”, --- family: “LM Sans 10” preffamily = --[[ 16 ]] english_names.preffamilyname, - family = --[[ 1 ]] english_names.family, + family = --[[ 1 ]] english_names.family or default_family, prefmodifiers = --[[ 17 ]] english_names.prefmodifiers, subfamily = --[[ 2 ]] english_names.subfamily, psname = --[[ 6 ]] english_names.postscriptname, @@ -1477,7 +1491,7 @@ local organize_styledata = function (fontname, local names = metadata.names return { - -- see http://www.microsoft.com/typography/OTSPEC/features_pt.htm#size + --- see http://www.microsoft.com/typography/OTSPEC/features_pt.htm#size size = get_size_info (metadata), weight = pfminfo.weight or 400, split = split_fontname (fontname), @@ -2568,6 +2582,9 @@ local pull_values = function (entry) end local add_family = function (name, subtable, modifier, entry) + if not name then --- probably borked font + return + end local familytable = subtable [name] if not familytable then familytable = { } diff --git a/luaotfload-tool.lua b/luaotfload-tool.lua index 5b7e0a2..8bc590a 100755 --- a/luaotfload-tool.lua +++ b/luaotfload-tool.lua @@ -104,18 +104,7 @@ if not luaotfloadconfig.strip then luaotfloadconfig.strip = true end -do -- we don’t have file.basename and the likes yet, so inline parser ftw - local slash = P"/" - local dot = P"." - local noslash = 1 - slash - local slashes = slash^1 - local path = slashes^-1 * (noslash^1 * slashes)^1 - local thename = (1 - slash - dot)^1 - local extension = dot * (1 - slash - dot)^1 - local p_basename = path^-1 * C(thename) * extension^-1 * P(-1) - - luaotfloadconfig.self = "luaotfload-tool" -end +luaotfloadconfig.self = "luaotfload-tool" config.lualibs = config.lualibs or { } config.lualibs.verbose = false @@ -175,12 +164,13 @@ local help_messages = { Usage: %s [OPTIONS...] -Operations on the Luaotfload font names database. + Luaotfload font management and diagnostic utility. + This program is part of the Luaotfload package. -This tool is part of the luaotfload package. Valid options are: + Valid options are: ------------------------------------------------------------------------------- - VERBOSITY AND LOGGING + VERBOSITY AND DIAGNOSTICS -q --quiet don't output anything -v --verbose=LEVEL be more verbose (print the searched directories) @@ -266,8 +256,16 @@ local help_msg = function (version) luaotfloadconfig.cache_dir))) end +local about = [[ +%s: + Luaotfload font management and diagnostic utility. + License: GNU GPL v2.0. + Report problems to <https://github.com/lualatex/luaotfload/issues> +]] + local version_msg = function ( ) local out = function (...) texiowrite_nl (stringformat (...)) end + out (about, luaotfloadconfig.self) out ("%s version %q", luaotfloadconfig.self, version) out ("revision %q", luaotfloadstatus.notes.revision) out ("database version %q", names.version) |