diff options
-rw-r--r-- | otfl-font-nms.lua | 97 |
1 files changed, 53 insertions, 44 deletions
diff --git a/otfl-font-nms.lua b/otfl-font-nms.lua index 13921a2..609d4e1 100644 --- a/otfl-font-nms.lua +++ b/otfl-font-nms.lua @@ -7,7 +7,6 @@ if not modules then modules = { } end modules ['font-nms'] = { } --- Luatex builtins -local dofile = dofile local load = load local next = next local pcall = pcall @@ -151,10 +150,10 @@ load_names = function ( ) report("info", 0, [[Font names database not found, generating new one. This can take several minutes; please be patient.]]) - data = names.update(fontnames_init()) - names.save(data) + data = update_names(fontnames_init()) + save_names(data) end - texiowrite_nl("") + texiowrite_nl"" return data end @@ -201,7 +200,6 @@ resolve = function (_,_,specification) -- the 1st two parameters are used by Con size = specification.size / 65536 end - if not loaded then names.data = load_names() loaded = true @@ -313,8 +311,8 @@ resolve = function (_,_,specification) -- the 1st two parameters are used by Con -- no font found so far if not reloaded then -- try reloading the database - names.data = names.update(names.data) - names.save(names.data) + names.data = update_names(names.data) + save_names(names.data) reloaded = true return resolve(_,_,specification) else @@ -326,8 +324,8 @@ resolve = function (_,_,specification) -- the 1st two parameters are used by Con end else if not reloaded then - names.data = names.update() - names.save(names.data) + names.data = update_names() + save_names(names.data) reloaded = true return resolve(_,_,specification) else @@ -336,35 +334,43 @@ resolve = function (_,_,specification) -- the 1st two parameters are used by Con end end -local function font_fullinfo(filename, subfont, texmf) - local t = { } - local f = fontloader.open(filename, subfont) - if not f then +--[[doc-- +The data inside an Opentype font file can be quite heterogeneous. +Thus in order to get the relevant information, parts of the original +table as returned by the font file reader need to be relocated. +--doc]]-- +local font_fullinfo = function (filename, subfont, texmf) + local tfmdata = { } + local rawfont = fontloader.open(filename, subfont) + if not rawfont then report("log", 1, "error", "failed to open %s", filename) return end - local m = fontloader.to_table(f) - fontloader.close(f) - collectgarbage('collect') + local metadata = fontloader.to_table(rawfont) + fontloader.close(rawfont) + collectgarbage("collect") -- see http://www.microsoft.com/typography/OTSPEC/features_pt.htm#size - if m.fontstyle_name then - for _,v in next, m.fontstyle_name do - if v.lang == 1033 then - t.fontstyle_name = v.name + if metadata.fontstyle_name then + for _, name in next, metadata.fontstyle_name do + if name.lang == 1033 then --- I hate magic numbers + tfmdata.fontstyle_name = name.name end end end - if m.names then - for _,v in next, m.names do - if v.lang == "English (US)" then - t.names = { - -- see - -- http://developer.apple.com/textfonts/ - -- TTRefMan/RM06/Chap6name.html - fullname = v.names.compatfull or v.names.fullname, - family = v.names.preffamilyname or v.names.family, - subfamily= t.fontstyle_name or v.names.prefmodifiers or v.names.subfamily, - psname = v.names.postscriptname + if metadata.names then + for _, namedata in next, metadata.names do + if namedata.lang == "English (US)" then + tfmdata.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 } end end @@ -373,23 +379,26 @@ local function font_fullinfo(filename, subfont, texmf) report("log", 1, "broken font rejected", "%s", basefile) return end - t.fontname = m.fontname - t.fullname = m.fullname - t.familyname = m.familyname - t.filename = { texmf and filebasename(filename) or filename, subfont } - t.weight = m.pfminfo.weight - t.width = m.pfminfo.width - t.slant = m.italicangle + tfmdata.fontname = metadata.fontname + tfmdata.fullname = metadata.fullname + tfmdata.familyname = metadata.familyname + tfmdata.filename = { + texmf and filebasename(filename) or filename, + subfont + } + tfmdata.weight = metadata.pfminfo.weight + tfmdata.width = metadata.pfminfo.width + tfmdata.slant = metadata.italicangle -- don't waste the space with zero values - t.size = { - m.design_size ~= 0 and m.design_size or nil, - m.design_range_top ~= 0 and m.design_range_top or nil, - m.design_range_bottom ~= 0 and m.design_range_bottom or nil, + tfmdata.size = { + metadata.design_size ~= 0 and metadata.design_size or nil, + metadata.design_range_top ~= 0 and metadata.design_range_top or nil, + metadata.design_range_bottom ~= 0 and metadata.design_range_bottom or nil, } - return t + return tfmdata end -local function load_font(filename, fontnames, newfontnames, texmf) +local load_font = function (filename, fontnames, newfontnames, texmf) local newmappings = newfontnames.mappings local newstatus = newfontnames.status local mappings = fontnames.mappings |