diff options
author | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-04-21 22:44:47 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-04-21 22:44:47 +0200 |
commit | 01eb99bf60b6d94485a9deee54b4c259939ce3e8 (patch) | |
tree | 1ebbf95385adb3d49033536b4019772b6cba6626 /tex/context/base/mkiv/font-mis.lua | |
parent | 726df97b4fd308f923fb1b4bf00ce533a7c88ebe (diff) | |
download | context-01eb99bf60b6d94485a9deee54b4c259939ce3e8.tar.gz |
2016-04-21 19:39:00
Diffstat (limited to 'tex/context/base/mkiv/font-mis.lua')
-rw-r--r-- | tex/context/base/mkiv/font-mis.lua | 110 |
1 files changed, 22 insertions, 88 deletions
diff --git a/tex/context/base/mkiv/font-mis.lua b/tex/context/base/mkiv/font-mis.lua index 9d9c39c58..06bf22049 100644 --- a/tex/context/base/mkiv/font-mis.lua +++ b/tex/context/base/mkiv/font-mis.lua @@ -6,11 +6,6 @@ if not modules then modules = { } end modules ['font-mis'] = { license = "see context related readme files" } -local next = next -local lower, strip = string.lower, string.strip - --- also used in other scripts so we need to check some tables: - fonts = fonts or { } fonts.helpers = fonts.helpers or { } @@ -22,96 +17,35 @@ local handlers = fonts.handlers handlers.otf = handlers.otf or { } local otf = handlers.otf -otf.version = otf.version or 2.824 -otf.cache = otf.cache or containers.define("fonts", "otf", otf.version, true) - -local fontloader = fontloader -local font_to_table = fontloader.to_table -local open_font = fontloader.open -local get_font_info = fontloader.info -local close_font = fontloader.close +local readers = otf.readers -function otf.loadcached(filename,format,sub) - -- no recache when version mismatch - local name = file.basename(file.removesuffix(filename)) - if sub == "" then sub = false end - local hash = name - if sub then - hash = hash .. "-" .. sub - end - hash = containers.cleanname(hash) - local data = containers.read(otf.cache, hash) - if data and not data.verbose then - otf.enhancers.unpack(data) - return data - else - return nil - end -end +if readers then -local featuregroups = { "gsub", "gpos" } + otf.version = otf.version or 3.018 + otf.cache = otf.cache or containers.define("fonts", "otl", otf.version, true) -function fonts.helpers.getfeatures(name,t,script,language) -- maybe per font type - local t = lower(t or (name and file.suffix(name)) or "") - if t == "otf" or t == "ttf" or t == "ttc" or t == "dfont" then - local filename = resolvers.findfile(name,t) or "" + function fonts.helpers.getfeatures(name,save) + local filename = resolvers.findfile(name) or "" if filename ~= "" then - local data = otf.loadcached(filename) - if data and data.resources and data.resources.features then - return data.resources.features + local name = file.removesuffix(file.basename(filename)) + local cleanname = containers.cleanname(name) + local data = containers.read(otf.cache,cleanname) + if data then + readers.unpack(data) else - local ff = open_font(filename) - if ff then - local data = font_to_table(ff) - close_font(ff) - local features = { } - for k=1,#featuregroups do - local what = featuregroups[k] - local dw = data[what] - if dw then - local f = { } - features[what] = f - for i=1,#dw do - local d = dw[i] - local dfeatures = d.features - if dfeatures then - for i=1,#dfeatures do - local df = dfeatures[i] - local tag = strip(lower(df.tag)) - local ft = f[tag] if not ft then ft = {} f[tag] = ft end - local dfscripts = df.scripts - for i=1,#dfscripts do - local ds = dfscripts[i] - local scri = strip(lower(ds.script)) - local fts = ft[scri] if not fts then fts = {} ft[scri] = fts end - local dslangs = ds.langs - for i=1,#dslangs do - local lang = dslangs[i] - lang = strip(lower(lang)) - if scri == script then - if lang == language then - fts[lang] = 'sl' - else - fts[lang] = 's' - end - else - if lang == language then - fts[lang] = 'l' - else - fts[lang] = true - end - end - end - end - end - end - end - end - end - return features + data = readers.loadfont(filename) + if data and save then + containers.write(otf.cache,cleanname,data) end end + return data and data.resources and data.resources.features end end - return nil, nil + +else + + function fonts.helpers.getfeatures(name) + -- not supported + end + end |