summaryrefslogtreecommitdiff
path: root/src/luaotfload-auxiliary.lua
diff options
context:
space:
mode:
authorPhilipp Gesang <phg@phi-gamma.net>2016-04-09 00:30:17 +0200
committerPhilipp Gesang <phg@phi-gamma.net>2016-04-09 00:30:22 +0200
commitd9789be6dbd9d77cb4091800f6b50580b25e1868 (patch)
tree89b77e4826b4fec577e316dc903057d272654680 /src/luaotfload-auxiliary.lua
parenta4d0725cce7f78e295491e7e969eff3c0aa07bef (diff)
downloadluaotfload-d9789be6dbd9d77cb4091800f6b50580b25e1868.tar.gz
[aux,init] move lazy char-def loading code into earlier stage of initialization
The fontloader requires parts of the ``characters`` table to be present at load time. This turns out to interfere with our custom of installing the lazy loader for the table components only after the fontloader has been injected. Since inserting the code at the appropriate place in the loading chain would be tedious and unmaintainable due to the various load options, we just preinstall the metatable onto an empty table prior to loading the loader. Some precautions had to be taken regarding the ``classifiers`` subhash of the table that needs to be relocated from the data we received via mkcharacters.
Diffstat (limited to 'src/luaotfload-auxiliary.lua')
-rw-r--r--src/luaotfload-auxiliary.lua126
1 files changed, 0 insertions, 126 deletions
diff --git a/src/luaotfload-auxiliary.lua b/src/luaotfload-auxiliary.lua
index 2c2624e..6ba21e0 100644
--- a/src/luaotfload-auxiliary.lua
+++ b/src/luaotfload-auxiliary.lua
@@ -298,132 +298,6 @@ end
aux.name_of_slot = name_of_slot
---[[doc--
-
- In Context, characters.data is where the data from char-def.lua
- resides. The file is huge (>4.4 MB as of 2016) and only a stripped
- down version is part of the isolated font loader. Nevertheless, we
- include an excerpt generated by the mkcharacters script that contains
- a subset of the fields of each character defined and some extra
- metadata.
-
- Currently, these are (compare the mkcharacters script!)
-
- · "direction"
- · "mirror"
- · "category"
- · "textclass"
-
- The directional information is required for packages like Simurgh [0]
- to work correctly. In an early stage [1] it was necessary to load
- further files from Context directly, including the full blown version
- of char-def. Since we have no use for most of the so imported
- functionality, the required parts have been isolated and are now
- instated along with luaotfload-characters.lua. We can extend the set
- of imported features easily should it not be enough.
-
- [0] https://github.com/persian-tex/simurgh
- [1] http://tex.stackexchange.com/a/132301/14066
-
---doc]]--
-
-characters = characters or { } --- should be created in basics-gen
-characters.data = nil
-local chardef = "luaotfload-characters"
-
-do
- local setmetatableindex = function (t, f)
- local mt = getmetatable (t)
- if mt then
- mt.__index = f
- else
- setmetatable (t, { __index = f })
- end
- end
-
- --- there are some special tables for each field that provide access
- --- to fields of the character table by means of a metatable
-
- local mkcharspecial = function (characters, tablename, field)
-
- local chardata = characters.data
-
- if chardata then
- local newspecial = { }
- characters [tablename] = newspecial --> e.g. “characters.data.mirrors”
-
- local idx = function (t, char)
- local c = chardata [char]
- if c then
- local m = c [field] --> e.g. “mirror”
- if m then
- t [char] = m
- return m
- end
- end
- newspecial [char] = false
- return char
- end
-
- setmetatableindex (newspecial, idx)
- end
-
- end
-
- local mkcategories = function (characters) -- different from the others
-
- local chardata = characters.data
-
- setmetatable (characters, { __index = function (t, char)
- if char then
- local c = chardata [char]
- c = c.category or char
- t [char] = c
- return c
- end
- end})
-
- end
-
- local load_failed = false
- local chardata --> characters.data; loaded on demand
-
- local load_chardef = function ()
-
- logreport ("both", 1, "aux", "Loading character metadata from %s.", chardef)
- chardata = dofile (kpse.find_file (chardef, "lua"))
-
- if chardata == nil then
- warning ("Could not load %s; continuing \z
- with empty character table.",
- chardef)
- chardata = { }
- load_failed = true
- end
-
- characters = { } --- nuke metatable
- characters.data = chardata
-
- --- institute some of the functionality from char-ini.lua
-
- mkcharspecial (characters, "mirrors", "mirror")
- mkcharspecial (characters, "directions", "direction")
- mkcharspecial (characters, "textclasses", "textclass")
- mkcategories (characters)
-
- end
-
- local charindex = function (t, k)
- if chardata == nil and load_failed ~= true then
- load_chardef ()
- end
-
- return characters [k]
- end
-
- setmetatableindex (characters, charindex)
-
-end
-----------------------------------------------------------------------
--- features / scripts / languages