From bf11a971192a6d8cb6aa4b23d0a1c48fd74a2538 Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Tue, 5 Nov 2013 22:15:58 +0100 Subject: [db] adapt type1 scanner --- luaotfload-database.lua | 117 +++++++++++++++++------------------------------- 1 file changed, 41 insertions(+), 76 deletions(-) diff --git a/luaotfload-database.lua b/luaotfload-database.lua index ad954a2..e93a299 100644 --- a/luaotfload-database.lua +++ b/luaotfload-database.lua @@ -1355,7 +1355,8 @@ local organize_namedata = function (metadata, -- see http://www.microsoft.com/typography/OTSPEC/features_pt.htm#size if metadata.fontstyle_name then --- not present in all fonts, often differs from the preferred - --- subfamily as well as subfamily fields, e.g. with LMSans10-BoldOblique: + --- subfamily as well as subfamily fields, e.g. with + --- LMSans10-BoldOblique: --- subfamily: “Bold Italic” --- prefmodifiers: “10 Bold Oblique” --- fontstyle_name: “Bold Oblique” @@ -1364,9 +1365,6 @@ local organize_namedata = function (metadata, fontnames.fontstyle_name = name.name end end - - --print (fontnames.metadata.fontname, "|>", english_names.subfamily, "<>", english_names.prefmodifiers) - --print (fontnames.metadata.fontname, "|>", english_names.subfamily, "<>", fontnames.fontstyle_name) end return { @@ -1391,14 +1389,13 @@ local split_fontname = function (fontname) end end -local organize_styledata = function (fontname, metadata, english_names, info) +local organize_styledata = function (fontname, + metadata, + english_names, + info) local pfminfo = metadata.pfminfo local names = metadata.names --- print (">", pfminfo.avgwidth, --- (metadata.italicangle == info.italicangle) and "T" or --- string.format ("%f / %f", metadata.italicangle, info.italicangle), --- pfminfo.width, pfminfo.weight, info.weight) return { -- see http://www.microsoft.com/typography/OTSPEC/features_pt.htm#size size = get_size_info (metadata), @@ -1474,8 +1471,8 @@ end --- string -> int -> bool -> string -> fontentry t1_fullinfo = function (filename, _subfont, location, basename, format) - local namedata = { } - local metadata = load_font_file (filename) + local sanitized + local metadata = load_font_file (filename) local fontname = metadata.fontname local fullname = metadata.fullname @@ -1483,68 +1480,35 @@ t1_fullinfo = function (filename, _subfont, location, basename, format) local italicangle = metadata.italicangle local weight = metadata.weight --- string identifier - --- we have to improvise and detect whether we deal with - --- italics since pfb fonts don’t come with a “subfamily” - --- field - local style - if italicangle == 0 then - style = false - else - style = "italic" - end - - local style_synonyms_set = style_synonyms.set - if weight then - weight = sanitize_fontname (weight) - local tmp = "" - if style_synonyms_set.bold[weight] then - tmp = "bold" - end - if style then - style = tmp .. style - else - if style_synonyms_set.regular[weight] then - style = "regular" - else - style = tmp - end - end - end - - if not style or style == "" then - style = "regular" - --- else italic - end - - namedata.sanitized = sanitize_fontnames ({ + sanitized = sanitize_fontnames ({ fontname = fontname, psname = fullname, pfullname = fullname, metafamily = family, - family = familyname, + familyname = familyname, subfamily = weight, prefmodifiers = style, }) - namedata.fontname = fontname - namedata.fullname = fullname - namedata.familyname = familyname - - namedata.slant = italicangle - namedata.units_per_em = 1000 --- ps fonts standard - namedata.version = metadata.version - namedata.weight = metadata.pfminfo.weight --- integer - namedata.width = metadata.pfminfo.width - - namedata.size = false - - namedata.filename = filename --> sys - namedata.basename = basename --> texmf - namedata.format = format - namedata.location = location or "system" - namedata.subfont = false - - return namedata + return { + basename = basename, + fullpath = filename, + subfont = false, + location = location or "system", + format = format, + fullname = sanitized.fullname, + fontname = sanitized.fontname, + familyname = sanitized.familyname, + plainname = fullname, + psname = sanitized.fontname, + version = metadata.version, + size = false, + splitstyle = split_fontname (fontname), + fontstyle_name = sanitized.subfamily, + weight = { metadata.pfminfo.weight, + sanitized.subfamily }, + italicangle = italicangle, + } end local loaders = { @@ -1698,7 +1662,6 @@ local read_font_names = function (fullname, local format = stringlower (filesuffix (basename)) local loader = loaders [format] --- ot_fullinfo, t1_fullinfo - local loader = loaders[format] --- ot_fullinfo, t1_fullinfo if not loader then report ("both", 0, "db", "Unknown format: %q, skipping.", format) @@ -2091,8 +2054,8 @@ local scan_dir = function (dirname, currentnames, targetnames, "Would have been loading %q", fullname) else report_status ("both", "db", "Loading font %q", fullname) - local new = load_font (fullname, fontnames, - newfontnames, texmf) + local new = read_font_names (fullname, currentnames, + targetnames, texmf) if new == true then n_new = n_new + 1 end @@ -2627,13 +2590,14 @@ do subfamily) if italicangle ~= 0 then return true - elseif fontstyle_name and lpegmatch (italic, fontstyle_name) then + elseif fontstyle_name ~= nil and lpegmatch (italic, fontstyle_name) then return true - elseif prefmodifiers and lpegmatch (italic, prefmodifiers) then + elseif prefmodifiers ~= nil and lpegmatch (italic, prefmodifiers) then return lpegmatch (italic, prefmodifiers) - else - return lpegmatch (italic, subfamily) + elseif subfamily ~= nil and lpegmatch (italic, subfamily) then + return true end + return false end determine_bold = function (fontstyle_name, @@ -2642,13 +2606,14 @@ do subfamily) if weight [2] == "bold" then return true - elseif fontstyle_name and lpegmatch (bold, fontstyle_name) then + elseif fontstyle_name ~= nil and lpegmatch (bold, fontstyle_name) then return true - elseif prefmodifiers and lpegmatch (bold, prefmodifiers) then + elseif prefmodifiers ~= nil and lpegmatch (bold, prefmodifiers) then + return true + elseif subfamily ~= nil and lpegmatch (bold, subfamily) then return true - else - return lpegmatch (bold, subfamily) end + return false end local splitfontname = lpeg.splitat "-" -- cgit v1.2.3