summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Gesang <phg42.2a@gmail.com>2013-05-31 16:20:59 +0200
committerPhilipp Gesang <phg42.2a@gmail.com>2013-05-31 16:20:59 +0200
commit16f32963dc180fa9b495bfe27aadc26c51cff8f9 (patch)
treeb139503eac9e1b7ffd952a8524e2ae36464587c6
parentea43a4d7744081f511cca8281e69b5a5f14c2238 (diff)
downloadluaotfload-16f32963dc180fa9b495bfe27aadc26c51cff8f9.tar.gz
differentiate more name fields when matching
finally resolves “eb garamond 12” as *eb garamond 12 regular*
-rw-r--r--luaotfload-database.lua92
1 files changed, 48 insertions, 44 deletions
diff --git a/luaotfload-database.lua b/luaotfload-database.lua
index ab0eacb..a19cbfd 100644
--- a/luaotfload-database.lua
+++ b/luaotfload-database.lua
@@ -74,7 +74,7 @@ fonts.definers = fonts.definers or { }
local names = fonts.names
-names.version = 2.206
+names.version = 2.207
names.data = nil --- contains the loaded database
names.lookups = nil --- contains the lookup cache
names.path = {
@@ -147,23 +147,21 @@ This is a sketch of the luaotfload db:
barename : string;
familyname : string;
filename : string;
- fontname : string;
- fullname : string;
- names : {
- family : string;
- fullname : string;
- psname : string;
- subfamily : string;
- };
+ fontname : string; // <- metadata
+ fullname : string; // <- metadata
sanitized : {
- family : string;
- fullname : string;
- psname : string;
- subfamily : string;
+ family : string;
+ fontname : string; // <- metadata
+ fullname : string; // <- namedata.names
+ metafamily : string;
+ pfullname : string;
+ prefmodifiers : string;
+ psname : string;
+ subfamily : string;
};
size : int list;
slant : int;
- subfont : int;
+ subfont : int;
texmf : bool;
weight : int;
width : int;
@@ -629,16 +627,19 @@ resolve = function (_,_,specification) -- the 1st two parameters are used by Con
local synonym_set = style_synonyms.set
for n, face in next, data.mappings do
- local family, subfamily, fullname, psname, fontname, pfullname
+ local family, subfamily, fullname, prefmodifiers
+ local psname, fontname, pfullname, metafamily
local facenames = face.sanitized
if facenames then
- family = facenames.family
- subfamily = facenames.subfamily
- fullname = facenames.fullname
- psname = facenames.psname
- fontname = facenames.fontname
- pfullname = facenames.pfullname
+ family = facenames.family
+ subfamily = facenames.subfamily
+ prefmodifiers = facenames.prefmodifiers
+ fullname = facenames.fullname
+ psname = facenames.psname
+ fontname = facenames.fontname
+ pfullname = facenames.pfullname
+ metafamily = facenames.metafamily
end
fontname = fontname or sanitize_string(face.fontname)
pfullname = pfullname or sanitize_string(face.fullname)
@@ -652,24 +653,27 @@ resolve = function (_,_,specification) -- the 1st two parameters are used by Con
minsize = optsize[3] and optsize[3] / 10 or dsnsize
end
- if name == family then
- if subfamily == style then
- local continue
- found, continue = add_to_match(
- found, optsize, dsnsize, size,
- minsize, maxsize, face)
- if continue == false then break end
- elseif synonym_set[style] and
- synonym_set[style][subfamily]
+ if name == family
+ or name == metafamily
+ then
+ if style == prefmodifiers
+ or style == subfamily
+ or synonym_set[style] and
+ (synonym_set[style][prefmodifiers] or
+ synonym_set[style][subfamily])
then
local continue
found, continue = add_to_match(
found, optsize, dsnsize, size,
minsize, maxsize, face)
if continue == false then break end
- elseif subfamily == "regular" or
+
+ elseif prefmodifiers == "regular"
+ or subfamily == "regular"
--- TODO this match should be performed when building the db
- synonym_set.regular[subfamily] then
+ or synonym_set.regular[prefmodifiers]
+ or synonym_set.regular[subfamily]
+ then
fallback = face
elseif name == fullname
or name == pfullname
@@ -852,7 +856,6 @@ find_closest = function (name, limit)
--]]
if cnames then
local fullname, family = cnames.fullname, cnames.family
- family = sanitize_string(family)
local dist = cached[family]--- maybe already calculated
if not dist then
@@ -930,18 +933,19 @@ font_fullinfo = function (filename, subfont, texmf, basename)
local names = {
--- see
--- https://developer.apple.com/fonts/TTRefMan/RM06/Chap6name.html
- fullname = namedata.names.compatfull
- or namedata.names.fullname,
- family = namedata.names.preffamilyname
- or namedata.names.family,
- subfamily = tfmdata.fontstyle_name
- or namedata.names.prefmodifiers
- or namedata.names.subfamily,
- psname = namedata.names.postscriptname,
- pfullname = metadata.fullname,
- fontname = metadata.fontname,
+ fullname = namedata.names.compatfull
+ or namedata.names.fullname,
+ family = namedata.names.preffamilyname
+ or namedata.names.family,
+ prefmodifiers = namedata.names.prefmodifiers,
+ subfamily = tfmdata.fontstyle_name
+ or namedata.names.subfamily,
+ psname = namedata.names.postscriptname,
+ pfullname = metadata.fullname,
+ fontname = metadata.fontname,
+ metafamily = metadata.familyname,
}
- tfmdata.names = names
+-- tfmdata.names = names
tfmdata.sanitized = sanitize_names(names)
end
end