summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/font-mis.lua
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-04-21 22:44:47 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-04-21 22:44:47 +0200
commit01eb99bf60b6d94485a9deee54b4c259939ce3e8 (patch)
tree1ebbf95385adb3d49033536b4019772b6cba6626 /tex/context/base/mkiv/font-mis.lua
parent726df97b4fd308f923fb1b4bf00ce533a7c88ebe (diff)
downloadcontext-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.lua110
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