summaryrefslogtreecommitdiff
path: root/luaotfload.lua
diff options
context:
space:
mode:
authorElie Roux <elie.roux@telecom-bretagne.eu>2009-04-08 13:18:29 +0200
committerElie Roux <elie.roux@telecom-bretagne.eu>2009-04-08 13:18:29 +0200
commitc3ccb3ee07e0a67171c24960966ae974e0dd8e98 (patch)
treec5e7ea101bca45dcadb4adda212b36e8b3203066 /luaotfload.lua
downloadluaotfload-c3ccb3ee07e0a67171c24960966ae974e0dd8e98.tar.gz
adding a first working version of luaotfload
Diffstat (limited to 'luaotfload.lua')
-rw-r--r--luaotfload.lua144
1 files changed, 144 insertions, 0 deletions
diff --git a/luaotfload.lua b/luaotfload.lua
new file mode 100644
index 0000000..360bb83
--- /dev/null
+++ b/luaotfload.lua
@@ -0,0 +1,144 @@
+luaotfload = { }
+
+luaotfload.module = {
+ name = "luaotfload",
+ version = 1.001,
+ date = "2009/04/08",
+ description = "ConTeXt font loading system.",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+luatextra.provides_module(luaotfload.module)
+
+function luaotfload.loadmodule(name)
+ local foundname = kpse.find_file('otfl-'..name,"tex") or ""
+ if not foundname then return end
+ dofile(foundname)
+end
+
+-- The following functions are made to map ConTeXt functions to luaextra functions.
+
+string.strip = string.stripspaces
+
+local splitters_s, splitters_m = { }, { }
+
+function lpeg.splitat(separator,single)
+ local splitter = (single and splitters_s[separator]) or splitters_m[separator]
+ if not splitter then
+ separator = lpeg.P(separator)
+ if single then
+ local other, any = lpeg.C((1 - separator)^0), lpeg.P(1)
+ splitter = other * (separator * lpeg.C(any^0) + "")
+ splitters_s[separator] = splitter
+ else
+ local other = lpeg.C((1 - separator)^0)
+ splitter = other * (separator * other)^0
+ splitters_m[separator] = splitter
+ end
+ end
+ return splitter
+end
+
+file = fpath
+file.extname = fpath.suffix
+
+function table.compact(t)
+ if t then
+ for k,v in next, t do
+ if not next(v) then
+ t[k] = nil
+ end
+ end
+ end
+end
+
+function table.sortedhashkeys(tab) -- fast one
+ local srt = { }
+ for key,_ in next, tab do
+ srt[#srt+1] = key
+ end
+ table.sort(srt)
+ return srt
+end
+
+-- The following modules contain code that is either not used
+-- at all outside ConTeXt or will fail when enabled due to
+-- lack of other modules.
+
+-- First we load a few helper modules. This is about the miminum
+-- needed to let the font modules do theuir work.
+
+luaotfload.loadmodule('luat-dum.lua') -- not used in context at all
+luaotfload.loadmodule('luat-con.lua') -- maybe some day we don't need this one
+
+-- We do need some basic node support although the following
+-- modules contain a little bit of code that is not used. It's
+-- not worth weeding.
+
+luaotfload.loadmodule('node-ini.lua')
+
+-- function to set the good attribute numbers, they are not arbitrary values
+-- between 127 and 255 like in the ConTeXt base code
+
+function attributes.private(name)
+ local number = tex.attributenumber['otfl@'..name]
+ if not number then
+ luatextra.module_error('luaotfload', string.format('asking for attribute %s, but not declared. Please report to the maintainer of luaotfload.', name))
+ end
+ return number
+end
+
+luaotfload.loadmodule('node-inj.lua') -- will be replaced (luatex > .50)
+luaotfload.loadmodule('node-fnt.lua')
+luaotfload.loadmodule('node-dum.lua')
+
+-- Now come the font modules that deal with traditional TeX fonts
+-- as well as open type fonts. We don't load the afm related code
+-- from font-enc.lua and font-afm.lua as only ConTeXt deals with
+-- it.
+--
+-- The font database file (if used at all) must be put someplace
+-- visible for kpse and is not shared with ConTeXt. The mtx-fonts
+-- script can be used to genate this file (using the --names
+-- option).
+
+luaotfload.loadmodule('font-ini.lua')
+luaotfload.loadmodule('font-tfm.lua') -- will be split (we may need font-log)
+--loadmodule('font-ott.lua') -- might be split
+luaotfload.loadmodule('font-otf.lua')
+luaotfload.loadmodule('font-otb.lua')
+luaotfload.loadmodule('font-cid.lua')
+luaotfload.loadmodule('font-otn.lua')
+luaotfload.loadmodule('font-ota.lua') -- might be split
+luaotfload.loadmodule('font-otc.lua')
+do
+ local temp = callback.register
+ callback.register = function (...)
+ return
+ end
+ luaotfload.loadmodule('font-def.lua')
+ callback.register = temp
+end
+luaotfload.loadmodule('font-xtx.lua')
+luaotfload.loadmodule('font-dum.lua')
+
+function luaotfload.register_callbacks()
+ callback.add('ligaturing', nodes.simple_font_dummy, 'nodes.simple_font_dummy')
+ callback.add('kerning', nodes.simple_font_dummy, 'nodes.simple_font_dummy')
+ callback.add('pre_linebreak_filter', nodes.simple_font_handler, 'nodes.simple_font_handler')
+ callback.add('hpack_filter', nodes.simple_font_handler, 'nodes.simple_font_handler')
+ callback.reset('define_font')
+ callback.add('define_font' , fonts.define.read, 'fonts.define.read', 1)
+ callback.add('find_vf_file', fonts.vf.find, 'fonts.vf.find')
+end
+
+function luaotfload.unregister_callbacks()
+ callback.remove('ligaturing', 'nodes.simple_font_dummy')
+ callback.remove('kerning', 'nodes.simple_font_dummy')
+ callback.remove('pre_linebreak_filter', 'nodes.simple_font_handler')
+ callback.remove('hpack_filter', 'nodes.simple_font_handler')
+ callback.reset('define_font')
+ callback.remove('find_vf_file', 'fonts.vf.find')
+end