summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/font-oth.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/font-oth.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/font-oth.lua51
1 files changed, 51 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/font-oth.lua b/Master/texmf-dist/tex/context/base/font-oth.lua
new file mode 100644
index 00000000000..59dca31d918
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-oth.lua
@@ -0,0 +1,51 @@
+if not modules then modules = { } end modules ['font-oth'] = {
+ version = 1.001,
+ comment = "companion to font-oth.lua (helpers)",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local fonts = fonts
+local otf = fonts.handlers.otf
+
+-- todo: use nodemode data is available
+
+function otf.getalternate(tfmdata,k,kind,value) -- just initialize nodemode and use that (larger mem print)
+ if value then
+ local description = tfmdata.descriptions[k]
+ if description then
+ local slookups = description.slookups -- we assume only slookups (we can always extend)
+ if slookups then
+ local shared = tfmdata.shared
+ local rawdata = shared and shared.rawdata
+ if rawdata then
+ local lookuptypes = rawdata.resources.lookuptypes
+ if lookuptypes then
+ local properties = tfmdata.properties
+ -- we could cache these
+ local validlookups, lookuplist = otf.collectlookups(rawdata,kind,properties.script,properties.language)
+ if validlookups then
+ local choice = tonumber(value) or 1 -- no random here (yet)
+ for l=1,#lookuplist do
+ local lookup = lookuplist[l]
+ local found = slookups[lookup]
+ if found then
+ local lookuptype = lookuptypes[lookup]
+ if lookuptype == "substitution" then
+ return found
+ elseif lookuptype == "alternate" then
+ return found[choice] or found[#found]
+ else
+ -- ignore
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return k
+end