summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/syst-lua.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/syst-lua.lua')
-rw-r--r--tex/context/base/mkiv/syst-lua.lua211
1 files changed, 49 insertions, 162 deletions
diff --git a/tex/context/base/mkiv/syst-lua.lua b/tex/context/base/mkiv/syst-lua.lua
index 7e44b9f08..085f75eca 100644
--- a/tex/context/base/mkiv/syst-lua.lua
+++ b/tex/context/base/mkiv/syst-lua.lua
@@ -6,13 +6,43 @@ if not modules then modules = { } end modules ['syst-lua'] = {
license = "see context related readme files"
}
+local load, type, tonumber = load, type, tonumber
+local concat = table.concat
+local utfchar = utf.char
local find = string.find
local S, C, P, lpegmatch, lpegtsplitat = lpeg.S, lpeg.C, lpeg.P, lpeg.match, lpeg.tsplitat
-commands = commands or { }
-local commands = commands
-local context = context
-local implement = interfaces.implement
+local xmath = xmath or math
+local xcomplex = xcomplex or { }
+
+local cmd = tokens.commands
+
+local scan_next = token.scan_next or token.get_next
+local scan_cmdchr = token.scan_cmdchr_expanded
+
+local get_command = token.get_command
+local get_mode = token.get_mode
+local get_index = token.get_index
+local get_csname = token.get_csname
+local get_macro = token.get_macro
+
+local put_next = token.put_next
+
+local scan_token = token.scan_token or token.get_token
+
+local getdimen = tex.getdimen
+local getglue = tex.getglue
+local getcount = tex.getcount
+local gettoks = tex.gettoks
+local gettex = tex.get
+
+local context = context
+local dimenfactors = number.dimenfactors
+
+commands = commands or { }
+local commands = commands
+local context = context
+local implement = interfaces.implement
local ctx_protected_cs = context.protected.cs -- more efficient
local ctx_firstoftwoarguments = context.firstoftwoarguments
@@ -162,53 +192,20 @@ implement {
-- stick to the next gimmick. It looks inefficient but performance is actually quite
-- efficient.
-local concat = table.concat
-local utfchar = utf.char
-local load, type, tonumber = load, type, tonumber
-
-local xmath = xmath or math
-local xcomplex = xcomplex or { }
-
-local cmd = tokens.commands
-
-local scan_next = token.scan_next or token.get_next
-local scan_cmdchr = token.scan_cmdchr_expanded
-
-local get_command = token.get_command
-local get_mode = token.get_mode
-local get_index = token.get_index
-local get_csname = token.get_csname
-local get_macro = token.get_macro
-
-local put_next = token.put_next
-
-local scan_token = token.scan_token
-
-local getdimen = tex.getdimen
-local getglue = tex.getglue
-local getcount = tex.getcount
-local gettoks = tex.gettoks
-local gettex = tex.get
-
-local context = context
-local dimenfactors = number.dimenfactors
-
-local result = { "return " }
-local word = { }
-local r = 1
-local w = 0
-
-local report = logs.reporter("system","expression")
+do
-local function unexpected(c)
- report("unexpected token %a",c)
-end
+ local result = { "return " }
+ local word = { }
+ local r = 1
+ local w = 0
-local expression
+ local report = logs.reporter("system","expression")
-if CONTEXTLMTXMODE == 0 then
+ local function unexpected(c)
+ report("unexpected token %a",c)
+ end
- expression = function()
+ local function expression()
local w = 0
local r = 1
while true do
@@ -292,120 +289,10 @@ if CONTEXTLMTXMODE == 0 then
end
end
-else
-
- local letter_code = cmd.letter
- local other_char_code = cmd.other_char
- local spacer_code = cmd.spacer
- local other_char_code = cmd.other_char
- local relax_code = cmd.relax
- local register_int_code = cmd.register_int
- local internal_int_code = cmd.internal_int
- local register_dimen_code = cmd.register_dimen
- local internal_dimen_code = cmd.internal_dimen
- local register_glue_code = cmd.register_glue
- local internal_glue_code = cmd.internal_glue
- local register_toks_code = cmd.register_toks
- local internal_toks_code = cmd.internal_toks
- local char_given_code = cmd.char_given
- local math_given_code = cmd.math_given
- local xmath_given_code = cmd.xmath_given
- local some_item_code = cmd.some_item
- -- local call_code = cmd.call
- -- local the_code = cmd.the
- -- local convert_code = cmd.convert
- -- local lua_expandable_call_code = cmd.lua_expandable_call
-
- local function unexpected(c)
- report("unexpected token %a",c)
- end
-
- expression = function()
- local w = 0
- local r = 1
- while true do
- local n, i = scan_cmdchr()
- if n == letter_code then
- w = w + 1 ; word[w] = utfchar(i)
- else
- if w > 0 then
- -- we could use a metatable for all math, complex and factors
- local s = concat(word,"",1,w)
- local d = dimenfactors[s]
- if d then
- r = r + 1 ; result[r] = "*"
- r = r + 1 ; result[r] = 1/d
- else
- if xmath[s] then
- r = r + 1 ; result[r] = "xmath."
- elseif xcomplex[s] then
- r = r + 1 ; result[r] = "xcomplex."
- end
- r = r + 1 ; result[r] = s
- end
- w = 0
- end
- if n == other_char_code then
- r = r + 1 ; result[r] = utfchar(i)
- elseif n == spacer_code then
- -- r = r + 1 ; result[r] = " "
- elseif n == relax_code then
- break
- elseif n == register_int_code or n == internal_int_code then
- r = r + 1 ; result[r] = getcount(i)
- elseif n == register_dimen_code or n == internal_dimen_code then
- r = r + 1 ; result[r] = getdimen(i)
- elseif n == register_glue_code or n == n == register_dimen_code_glue_code then
- r = r + 1 ; result[r] = getglue(i)
- elseif n == register_toks_code or n == n == register_dimen_code_toks_code then
- r = r + 1 ; result[r] = gettoks(i)
- elseif n == char_given_code or n == math_given_code or n == xmath_given_code then
- r = r + 1 ; result[r] = i
- elseif n == some_item_code then
- local n = get_csname(t)
- if n then
- local s = gettex(n)
- if s then
- r = r + 1 ; result[r] = s
- else
- unexpected(c)
- end
- else
- unexpected(c)
- end
- -- elseif n == call_code then
- -- local n = get_csname(t)
- -- if n then
- -- local s = get_macro(n)
- -- if s then
- -- r = r + 1 ; result[r] = s
- -- else
- -- unexpected(c)
- -- end
- -- else
- -- unexpected(c)
- -- end
- -- elseif n == the_code or n == convert_code or n == lua_expandable_call_code then
- -- put_next(t)
- -- scan_token() -- expands
- else
- unexpected(c)
- end
- end
- end
- local code = concat(result,"",1,r)
- local func = load(code)
- if type(func) == "function" then
- context(func())
- else
- report("invalid lua %a",code)
- end
- end
+ implement {
+ public = true,
+ name = "expression",
+ actions = expression,
+ }
end
-
-implement {
- public = true,
- name = "expression",
- actions = expression,
-}