diff options
| author | Philipp Gesang <phg42.2a@gmail.com> | 2013-05-31 16:20:59 +0200 | 
|---|---|---|
| committer | Philipp Gesang <phg42.2a@gmail.com> | 2013-05-31 16:20:59 +0200 | 
| commit | 16f32963dc180fa9b495bfe27aadc26c51cff8f9 (patch) | |
| tree | b139503eac9e1b7ffd952a8524e2ae36464587c6 | |
| parent | ea43a4d7744081f511cca8281e69b5a5f14c2238 (diff) | |
| download | luaotfload-16f32963dc180fa9b495bfe27aadc26c51cff8f9.tar.gz | |
differentiate more name fields when matching
finally resolves “eb garamond 12” as *eb garamond 12 regular*
| -rw-r--r-- | luaotfload-database.lua | 92 | 
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  | 
