From c3ccb3ee07e0a67171c24960966ae974e0dd8e98 Mon Sep 17 00:00:00 2001 From: Elie Roux Date: Wed, 8 Apr 2009 13:18:29 +0200 Subject: adding a first working version of luaotfload --- luaotfload.lua | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 luaotfload.lua (limited to 'luaotfload.lua') 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 -- cgit v1.2.3