diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2013-11-06 11:08:14 -0800 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2013-11-06 11:08:14 -0800 |
commit | adb03528f61cd71d61aa66bb237222c070fd3d3a (patch) | |
tree | 6753700cee1e69851a5ba7eea78f73bdad85e558 | |
parent | 90e060ed1717f6a14cf06bc394cf857782a7c140 (diff) | |
parent | 1eba3465773d90ac51f961bd74f6addb649ec0df (diff) | |
download | luaotfload-adb03528f61cd71d61aa66bb237222c070fd3d3a.tar.gz |
Merge pull request #146 from phi-gamma/masterv2.4-beta
restore some of the earlier behavior (fallbacks, live db reload)
-rw-r--r-- | luaotfload-database.lua | 58 |
1 files changed, 54 insertions, 4 deletions
diff --git a/luaotfload-database.lua b/luaotfload-database.lua index d8d4a6f..d25b846 100644 --- a/luaotfload-database.lua +++ b/luaotfload-database.lua @@ -580,6 +580,17 @@ local italic_synonym = { italic = true, } +local style_category = { + regular = "r", + bold = "b", + bolditalic = "bi", + italic = "i", + r = "regular", + b = "bold", + bi = "bolditalic", + i = "italic", +} + local type1_formats = { "tfm", "ofm", } local dummy_findfile = resolvers.findfile -- from basics-gen @@ -991,17 +1002,43 @@ local resolve_familyname = function (specification, name, style, askedsize) return resolved, subfont end -local resolve_fontname = function (specification, name) - local mappings = name_index.mappings +local resolve_fontname = function (specification, name, style) + local mappings = name_index.mappings + local fallback = nil + local lastresort = nil + style = style_category [style] for i = 1, #mappings do local face = mappings [i] + local prefmodifiers = face.prefmodifiers + local subfamily = face.subfamily if face.fontname == name or face.fullname == name or face.psname == name then return face.basename, face.subfont + elseif face.familyname == name then + if prefmodifiers == style + or subfamily == style + then + fallback = face + elseif regular_synonym [prefmodifiers] + or regular_synonym [subfamily] + then + lastresort = face + end + elseif face.metafamily == name + and (regular_synonym [prefmodifiers] + or regular_synonym [subfamily]) + then + lastresort = face end end + if fallback then + return fallback.basename, fallback.subfont + end + if lastresort then + return lastresort.basename, lastresort.subfont + end return nil, nil end @@ -1072,13 +1109,26 @@ resolve_name = function (specification) end end - resolved, subfont = resolve_familyname (specification, name, style, askedsize) + resolved, subfont = resolve_familyname (specification, + name, + style, + askedsize) if not resolved then - resolved, subfont = resolve_fontname (specification, name) + resolved, subfont = resolve_fontname (specification, + name, + style) end if not resolved then resolved = specification.name, false end + + if not resolved then + if not fonts_reloaded then + return reload_db ("Font not found.", + resolve_name, + specification) + end + end return resolved, subfont end |