diff options
-rw-r--r-- | luaotfload-database.lua | 128 |
1 files changed, 64 insertions, 64 deletions
diff --git a/luaotfload-database.lua b/luaotfload-database.lua index 5c60046..aaba68d 100644 --- a/luaotfload-database.lua +++ b/luaotfload-database.lua @@ -521,57 +521,65 @@ load_lookups = function ( ) return data end -local style_synonyms = { set = { } } -do - local combine = function (ta, tb) - local result = { } - for i=1, #ta do - for j=1, #tb do - result[#result+1] = ta[i] .. tb[j] - end - end - return result - end - - --- read this: http://blogs.adobe.com/typblography/2008/05/indesign_font_conflicts.html - --- tl;dr: font style synonyms are unreliable. - --- - --- Context matches font names against lists of known identifiers - --- for weight, style, width, and variant, so that including - --- the family name there are five dimensions for choosing a - --- match. The sad thing is, while this is a decent heuristic it - --- makes no sense to imitate it in luaotfload because the user - --- interface must fit into the much more limited Xetex scheme that - --- distinguishes between merely four style categories (variants): - --- “regular”, “italic”, “bold”, and “bolditalic”. As a result, - --- some of the styles are lumped together although they can differ - --- significantly (like “medium” and “bold”). - - --- Xetex (XeTeXFontMgr.cpp) appears to recognize only “plain”, - --- “normal”, and “roman” as synonyms for “regular”. - local list = { - regular = { "normal", "roman", - "plain", "book", - "light", "extralight", - "ultralight", }, - bold = { "demi", "demibold", - "semibold", "boldregular", - "medium", "mediumbold", - "ultrabold", "extrabold", - "heavy", "black", - "bold", }, - italic = { "regularitalic", "normalitalic", - "oblique", "slanted", - "italic", }, - } - - list.bolditalic = combine(list.bold, list.italic) - style_synonyms.list = list - - for category, synonyms in next, style_synonyms.list do - style_synonyms.set[category] = tabletohash(synonyms, true) - end -end +--local style_synonyms = { set = { } } +--do +-- local combine = function (ta, tb) +-- local result = { } +-- for i=1, #ta do +-- for j=1, #tb do +-- result[#result+1] = ta[i] .. tb[j] +-- end +-- end +-- return result +-- end +-- +-- --- read this: http://blogs.adobe.com/typblography/2008/05/indesign_font_conflicts.html +-- --- tl;dr: font style synonyms are unreliable. +-- --- +-- --- Context matches font names against lists of known identifiers +-- --- for weight, style, width, and variant, so that including +-- --- the family name there are five dimensions for choosing a +-- --- match. The sad thing is, while this is a decent heuristic it +-- --- makes no sense to imitate it in luaotfload because the user +-- --- interface must fit into the much more limited Xetex scheme that +-- --- distinguishes between merely four style categories (variants): +-- --- “regular”, “italic”, “bold”, and “bolditalic”. As a result, +-- --- some of the styles are lumped together although they can differ +-- --- significantly (like “medium” and “bold”). +-- +-- --- Xetex (XeTeXFontMgr.cpp) appears to recognize only “plain”, +-- --- “normal”, and “roman” as synonyms for “regular”. +-- local list = { +-- regular = { "normal", "roman", +-- "plain", "book", +-- "light", "extralight", +-- "ultralight", }, +-- bold = { "demi", "demibold", +-- "semibold", "boldregular", +-- "medium", "mediumbold", +-- "ultrabold", "extrabold", +-- "heavy", "black", +-- "bold", }, +-- italic = { "regularitalic", "normalitalic", +-- "oblique", "slanted", +-- "italic", }, +-- } +-- +-- list.bolditalic = combine(list.bold, list.italic) +-- style_synonyms.list = list +-- +-- for category, synonyms in next, style_synonyms.list do +-- style_synonyms.set[category] = tabletohash(synonyms, true) +-- end +--end + +local regular_synonym = { + book = true, + normal = true, + plain = true, + regular = true, + roman = true, +} local type1_formats = { "tfm", "ofm", } @@ -2908,19 +2916,11 @@ do subfamily, splitstyle) - if fontstyle_name == "regular" or fontstyle_name == "book" then - return "r" - end - - if prefmodifiers == "regular" or prefmodifiers == "book" then - return "r" - end - - if subfamily == "regular" or subfamily == "book" then - return "r" - end - - if splitstyle == "regular" or splitstyle == "book" then + if regular_synonym [fontstyle_name] + or regular_synonym [prefmodifiers] + or regular_synonym [subfamily] + or regular_synonym [splitstyle] + then return "r" end |