Various adaptions
This commit is contained in:
parent
10add04b91
commit
a6d3b3cc0f
@ -4,5 +4,5 @@ module = "luametalatex"
|
|||||||
|
|
||||||
tdsroot = "luametatex" -- Would be luametalatex but we use the same files for luametaplain
|
tdsroot = "luametatex" -- Would be luametalatex but we use the same files for luametaplain
|
||||||
|
|
||||||
installfiles = {"luameta*.lua", "luameta*.ini", "*.so", "*.dll", "luametatexconfig.tex", "luametalatex-ltexpl-hook.tex"}
|
installfiles = {"luameta*.lua", "luameta*.ini", "*.so", "*.dll", "*texconfig.tex", "luametalatex-ltexpl-hook.tex"}
|
||||||
sourcefiles = {"luameta*.lua", "luameta*.ini", "*.so", "*.dll", "luametatexconfig.tex", "luametalatex-ltexpl-hook.tex"}
|
sourcefiles = {"luameta*.lua", "luameta*.ini", "*.so", "*.dll", "*texconfig.tex", "luametalatex-ltexpl-hook.tex"}
|
||||||
|
@ -148,7 +148,7 @@ local function write_infodir(p)
|
|||||||
additional = string.format("%s/Creator(TeX)", additional)
|
additional = string.format("%s/Creator(TeX)", additional)
|
||||||
end
|
end
|
||||||
if not string.find(infodir, "/PTEX.Fullbanner", 1, false) then
|
if not string.find(infodir, "/PTEX.Fullbanner", 1, false) then
|
||||||
additional = string.format("%s/PTEX.Fullbanner(%s)", additional, status.banner)
|
additional = string.format("%s/PTEX.Fullbanner(%s)", additional, status.enginestate.banner)
|
||||||
end
|
end
|
||||||
return p:indirect(nil, string.format("<<%s%s>>", infodir, additional))
|
return p:indirect(nil, string.format("<<%s%s>>", infodir, additional))
|
||||||
end
|
end
|
||||||
@ -226,7 +226,7 @@ function callbacks.stop_run()
|
|||||||
local size = pfile:close()
|
local size = pfile:close()
|
||||||
texio.write_nl("term", "(see the transcript file for additional information)")
|
texio.write_nl("term", "(see the transcript file for additional information)")
|
||||||
-- TODO: Additional logging, epecially targeting the log file
|
-- TODO: Additional logging, epecially targeting the log file
|
||||||
texio.write_nl("term and log", string.format(" %d words of node memory still in use:", status.var_used))
|
texio.write_nl("term and log", string.format(" %d words of node memory still in use:", status.nodestate.use))
|
||||||
local by_type, by_sub = {}, {}
|
local by_type, by_sub = {}, {}
|
||||||
for n, id, sub in node.traverse(node.usedlist()) do
|
for n, id, sub in node.traverse(node.usedlist()) do
|
||||||
if id == whatsit_id then
|
if id == whatsit_id then
|
||||||
@ -245,7 +245,7 @@ function callbacks.stop_run()
|
|||||||
end
|
end
|
||||||
texio.write_nl(" " .. table.concat(nodestat, ', '))
|
texio.write_nl(" " .. table.concat(nodestat, ', '))
|
||||||
texio.write_nl(string.format("Output written on %s (%d pages, %d bytes).", pdfname, pages, size))
|
texio.write_nl(string.format("Output written on %s (%d pages, %d bytes).", pdfname, pages, size))
|
||||||
texio.write_nl(string.format("Transcript written on %s.\n", status.log_name))
|
texio.write_nl(string.format("Transcript written on %s.\n", status.enginestate.logfilename))
|
||||||
end
|
end
|
||||||
callbacks.__freeze('stop_run', true)
|
callbacks.__freeze('stop_run', true)
|
||||||
|
|
||||||
@ -569,7 +569,7 @@ local function write_colorstack()
|
|||||||
local text
|
local text
|
||||||
if action == "push" or "set" then
|
if action == "push" or "set" then
|
||||||
text = scan_string()
|
text = scan_string()
|
||||||
-- text = token.to_string(token.scan_tokenlist()) -- Attention! This should never be executed in an expand-only context
|
-- text = token.serialize(token.scan_tokenlist()) -- Attention! This should never be executed in an expand-only context
|
||||||
end
|
end
|
||||||
local whatsit = node.new(whatsit_id, colorstack_whatsit)
|
local whatsit = node.new(whatsit_id, colorstack_whatsit)
|
||||||
node.setproperty(whatsit, {
|
node.setproperty(whatsit, {
|
||||||
@ -893,11 +893,7 @@ token.luacmd("useimageresource", function()
|
|||||||
imglib_write(pfile, img)
|
imglib_write(pfile, img)
|
||||||
end, "protected")
|
end, "protected")
|
||||||
|
|
||||||
local value_values = token.values'value'
|
local integer_code = token.value.integer
|
||||||
for i=0,#value_values do
|
|
||||||
value_values[value_values[i]] = i
|
|
||||||
end
|
|
||||||
local integer_code = value_values.integer
|
|
||||||
|
|
||||||
token.luacmd("lastsavedimageresourceindex", function()
|
token.luacmd("lastsavedimageresourceindex", function()
|
||||||
return integer_code, lastimage
|
return integer_code, lastimage
|
||||||
|
@ -99,16 +99,17 @@ local do_terminal_input do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function callbacks.intercept_tex_error(mode, eof)
|
local errorvalues = tex.geterrorvalues()
|
||||||
-- if eof then
|
function callbacks.intercept_tex_error(mode, errortype)
|
||||||
-- print'EOF'
|
errortype = errorvalues[errortype]
|
||||||
-- tex.runtoks(function()token.put_next(token.create'tracingall')end)
|
if errortype == "eof" then
|
||||||
-- do_terminal_input()
|
tex.runlocal(function()token.put_next(token.create'tracingall')end)
|
||||||
-- tex.runtoks(token.skip_next)
|
do_terminal_input()
|
||||||
-- return 3
|
tex.runlocal(token.skip_next)
|
||||||
-- end
|
return 3
|
||||||
|
end
|
||||||
texio.write'.'
|
texio.write'.'
|
||||||
tex.show_context()
|
tex.showcontext()
|
||||||
if mode ~= 3 then return mode end
|
if mode ~= 3 then return mode end
|
||||||
repeat
|
repeat
|
||||||
texio.write_nl'? '
|
texio.write_nl'? '
|
||||||
@ -123,7 +124,7 @@ function callbacks.intercept_tex_error(mode, eof)
|
|||||||
Maybe you should try asking a human?")
|
Maybe you should try asking a human?")
|
||||||
elseif first == 'I' then
|
elseif first == 'I' then
|
||||||
line = line:sub(2)
|
line = line:sub(2)
|
||||||
tex.runtoks(function()
|
tex.runlocal(function()
|
||||||
tex.sprint(token.scan_token(), line)
|
tex.sprint(token.scan_token(), line)
|
||||||
end)
|
end)
|
||||||
return 3
|
return 3
|
||||||
|
@ -2,12 +2,8 @@ local scan_dimen = token.scan_dimen
|
|||||||
local scan_int = token.scan_integer
|
local scan_int = token.scan_integer
|
||||||
local scan_keyword = token.scan_keyword
|
local scan_keyword = token.scan_keyword
|
||||||
|
|
||||||
local value_values = token.values'value'
|
local count_code = token.value.integer
|
||||||
for i=0, #value_values do
|
local dimen_code = token.value.dimension
|
||||||
value_values[value_values[i]] = i
|
|
||||||
end
|
|
||||||
local count_code = value_values.integer
|
|
||||||
local dimen_code = value_values.dimension
|
|
||||||
|
|
||||||
local set_local = require'luametalatex-local'
|
local set_local = require'luametalatex-local'
|
||||||
|
|
||||||
|
@ -6,15 +6,11 @@ local setters = {
|
|||||||
}
|
}
|
||||||
local getters = {
|
local getters = {
|
||||||
}
|
}
|
||||||
local value_values = token.values'value'
|
|
||||||
for i=0,#value_values do
|
|
||||||
value_values[value_values[i]] = i
|
|
||||||
end
|
|
||||||
function tex.gettextdir() return tex.textdirection end
|
function tex.gettextdir() return tex.textdirection end
|
||||||
function tex.getlinedir() return tex.linedirection end
|
function tex.getlinedir() return tex.linedirection end
|
||||||
function tex.getmathdir() return tex.mathdirection end
|
function tex.getmathdir() return tex.mathdirection end
|
||||||
function tex.getpardir() return tex.pardirection end
|
function tex.getpardir() return tex.pardirection end
|
||||||
local integer_code = value_values.integer
|
local integer_code = token.value.integer
|
||||||
local function set_xdir(id, scanning)
|
local function set_xdir(id, scanning)
|
||||||
if scanning == 'value' then
|
if scanning == 'value' then
|
||||||
return integer_code, getters[id]()
|
return integer_code, getters[id]()
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
local scan_int = token.scan_integer
|
local scan_int = token.scan_integer
|
||||||
|
token.scan_int = scan_int -- For compatibility with LuaTeX packages
|
||||||
local scan_token = token.scan_token
|
local scan_token = token.scan_token
|
||||||
local scan_tokenlist = token.scan_tokenlist
|
local scan_tokenlist = token.scan_tokenlist
|
||||||
local scan_keyword = token.scan_keyword
|
local scan_keyword = token.scan_keyword
|
||||||
@ -7,6 +8,8 @@ local set_macro = token.set_macro
|
|||||||
|
|
||||||
local callback_find = callback.find
|
local callback_find = callback.find
|
||||||
|
|
||||||
|
local constants = status.getconstants()
|
||||||
|
|
||||||
local lua_call_cmd = token.command_id'lua_call'
|
local lua_call_cmd = token.command_id'lua_call'
|
||||||
local properties = node.direct.get_properties_table()
|
local properties = node.direct.get_properties_table()
|
||||||
node.direct.properties = properties
|
node.direct.properties = properties
|
||||||
@ -32,7 +35,7 @@ local function scan_filename()
|
|||||||
tok = scan_token()
|
tok = scan_token()
|
||||||
cmd = tok.command
|
cmd = tok.command
|
||||||
until cmd ~= spacer_cmd and cmd ~= relax_cmd
|
until cmd ~= spacer_cmd and cmd ~= relax_cmd
|
||||||
while (tok.command <= 12 and tok.command > 0 and tok.command ~= 9 and tok.index <= token.biggest_char()
|
while (tok.command <= 12 and tok.command > 0 and tok.command ~= 9 and tok.index <= constants.max_character_code
|
||||||
or (token.put_next(tok) and false))
|
or (token.put_next(tok) and false))
|
||||||
and (quoted or tok.index ~= string.byte' ') do
|
and (quoted or tok.index ~= string.byte' ') do
|
||||||
if tok.index == string.byte'"' then
|
if tok.index == string.byte'"' then
|
||||||
@ -50,7 +53,7 @@ end
|
|||||||
local initex_catcodetable = 1
|
local initex_catcodetable = 1
|
||||||
local string_catcodetable = 2
|
local string_catcodetable = 2
|
||||||
if status.ini_version then
|
if status.ini_version then
|
||||||
tex.runtoks(function()tex.sprint[[\initcatcodetable 1\initcatcodetable 2]]end)
|
tex.runlocal(function()tex.sprint[[\initcatcodetable 1\initcatcodetable 2]]end)
|
||||||
local setcatcode = tex.setcatcode
|
local setcatcode = tex.setcatcode
|
||||||
for i=0,127 do
|
for i=0,127 do
|
||||||
setcatcode('global', 2, i, 12)
|
setcatcode('global', 2, i, 12)
|
||||||
@ -135,7 +138,7 @@ token.luacmd("closein", function(_, prefix)
|
|||||||
end, "value")
|
end, "value")
|
||||||
|
|
||||||
local function do_write(p)
|
local function do_write(p)
|
||||||
local data = token.to_string(p.data)
|
local data = token.serialize(p.data)
|
||||||
local content = data and data .. '\n' or '\n'
|
local content = data and data .. '\n' or '\n'
|
||||||
local file = ofiles[p.file]
|
local file = ofiles[p.file]
|
||||||
if file then
|
if file then
|
||||||
@ -198,7 +201,7 @@ token.luacmd("read", function(_, prefix)
|
|||||||
error[[FIXME: Ask the user for input]]
|
error[[FIXME: Ask the user for input]]
|
||||||
end
|
end
|
||||||
local endlocal
|
local endlocal
|
||||||
tex.runtoks(function()
|
tex.runlocal(function()
|
||||||
endlocal = token.scan_next()
|
endlocal = token.scan_next()
|
||||||
tex.sprint(endlocal)
|
tex.sprint(endlocal)
|
||||||
tex.print(line and line ~= "" and line or " ")
|
tex.print(line and line ~= "" and line or " ")
|
||||||
@ -217,7 +220,7 @@ token.luacmd("read", function(_, prefix)
|
|||||||
tokens[#tokens+1] = tok
|
tokens[#tokens+1] = tok
|
||||||
end
|
end
|
||||||
if balance ~= 0 then error[[FIXME: Read additional input lines]] end
|
if balance ~= 0 then error[[FIXME: Read additional input lines]] end
|
||||||
tex.runtoks(function()
|
tex.runlocal(function()
|
||||||
tokens[#tokens+1] = rbrace
|
tokens[#tokens+1] = rbrace
|
||||||
token.put_next(tokens)
|
token.put_next(tokens)
|
||||||
token.put_next(token.primitive_tokens.def, token.create(macro), lbrace)
|
token.put_next(token.primitive_tokens.def, token.create(macro), lbrace)
|
||||||
@ -252,7 +255,7 @@ token.luacmd("readline", function(_, prefix)
|
|||||||
end, "value")
|
end, "value")
|
||||||
|
|
||||||
local integer_code, boolean_code do
|
local integer_code, boolean_code do
|
||||||
local value_values = token.values'value'
|
local value_values = token.getfunctionvalues()
|
||||||
for i=0,#value_values do
|
for i=0,#value_values do
|
||||||
if value_values[i] == "integer" then
|
if value_values[i] == "integer" then
|
||||||
integer_code = i
|
integer_code = i
|
||||||
@ -270,7 +273,7 @@ end, "condition")
|
|||||||
local late_lua_whatsit = new_whatsit('late_lua', function(p, pfile, n, x, y)
|
local late_lua_whatsit = new_whatsit('late_lua', function(p, pfile, n, x, y)
|
||||||
local code = p.data
|
local code = p.data
|
||||||
if not code then
|
if not code then
|
||||||
code = token.to_string(p.token)
|
code = token.serialize(p.token)
|
||||||
end
|
end
|
||||||
if type(code) == 'string' then
|
if type(code) == 'string' then
|
||||||
code = assert(load(code, nil, 't'))
|
code = assert(load(code, nil, 't'))
|
||||||
@ -289,6 +292,7 @@ end, "protected")
|
|||||||
|
|
||||||
local functions = lua.get_functions_table()
|
local functions = lua.get_functions_table()
|
||||||
|
|
||||||
|
require'luametalatex-meaning'
|
||||||
require'luametalatex-baseregisters'
|
require'luametalatex-baseregisters'
|
||||||
require'luametalatex-back-pdf'
|
require'luametalatex-back-pdf'
|
||||||
require'luametalatex-node-luaotfload'
|
require'luametalatex-node-luaotfload'
|
||||||
|
@ -32,3 +32,4 @@ for _, name in ipairs{
|
|||||||
local value = var_value(name)
|
local value = var_value(name)
|
||||||
texconfig[name] = tonumber(value) or value or nil
|
texconfig[name] = tonumber(value) or value or nil
|
||||||
end
|
end
|
||||||
|
texconfig.token_size = 10000000
|
||||||
|
@ -24,6 +24,19 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
kpse.set_program_name(arg.arg0 or arg[arg[0]], arg.progname)
|
kpse.set_program_name(arg.arg0 or arg[arg[0]], arg.progname)
|
||||||
|
do
|
||||||
|
local interaction = ({ [true] = 3, [false] = false,
|
||||||
|
batchmode=0,
|
||||||
|
nonstopmode=1,
|
||||||
|
scrollmode=2,
|
||||||
|
errorstopmode=3,
|
||||||
|
})[arg.interaction or false]
|
||||||
|
if interaction then
|
||||||
|
tex.setinteraction(interaction)
|
||||||
|
elseif interaction == nil then
|
||||||
|
texio.write('term', string.format('Unknown interaction mode %q ignored.\n', arg.interaction))
|
||||||
|
end
|
||||||
|
end
|
||||||
package.searchers[2] = function(modname)
|
package.searchers[2] = function(modname)
|
||||||
local filename = kpse.find_file(modname, "lua", true)
|
local filename = kpse.find_file(modname, "lua", true)
|
||||||
if not filename then
|
if not filename then
|
||||||
@ -40,6 +53,7 @@ kpse.set_maketex("pk", true, "compile")
|
|||||||
require'luametalatex-init-config'
|
require'luametalatex-init-config'
|
||||||
local callback_register = callback.register
|
local callback_register = callback.register
|
||||||
local build_bytecode
|
local build_bytecode
|
||||||
|
status.ini_version = status.run_state == 0
|
||||||
if status.ini_version then
|
if status.ini_version then
|
||||||
local build_bytecode_mod = require'luametalatex-build-bytecode'
|
local build_bytecode_mod = require'luametalatex-build-bytecode'
|
||||||
local preloaded_modules = {}
|
local preloaded_modules = {}
|
||||||
@ -55,19 +69,9 @@ if status.ini_version then
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
callback_register('find_format_file', function(name) return kpse.find_file(name, 'fmt', true) end)
|
callback_register('find_format_file', function(name) texconfig.formatname = kpse.find_file(name, 'fmt', true) return texconfig.formatname end)
|
||||||
|
-- texconfig.firstline = [[\show ]]
|
||||||
function texconfig.init()
|
function texconfig.init()
|
||||||
local interaction = ({ [true] = 3, [false] = false,
|
|
||||||
batchmode=0,
|
|
||||||
nonstopmode=1,
|
|
||||||
scrollmode=2,
|
|
||||||
errorstopmode=3,
|
|
||||||
})[arg.interaction or false]
|
|
||||||
if interaction then
|
|
||||||
tex.setinteraction(interaction)
|
|
||||||
elseif interaction == nil then
|
|
||||||
texio.write('term', string.format('Unknown interaction mode %q ignored.\n', arg.interaction))
|
|
||||||
end
|
|
||||||
if build_bytecode then -- Effectivly if status.ini_version
|
if build_bytecode then -- Effectivly if status.ini_version
|
||||||
require'luametalatex-lateinit'(build_bytecode)
|
require'luametalatex-lateinit'(build_bytecode)
|
||||||
else
|
else
|
||||||
|
@ -16,9 +16,17 @@ require'luametalatex-font-resolve' -- Replace font.define. Must be loaded before
|
|||||||
require'luametalatex-basecallbacks'
|
require'luametalatex-basecallbacks'
|
||||||
local callbacks = require'luametalatex-callbacks'
|
local callbacks = require'luametalatex-callbacks'
|
||||||
|
|
||||||
|
local function swap_table(t)
|
||||||
|
local s = {}
|
||||||
|
for k, v in next, t do
|
||||||
|
s[v] = k
|
||||||
|
end
|
||||||
|
return s
|
||||||
|
end
|
||||||
|
|
||||||
local primitives = {}
|
local primitives = {}
|
||||||
do
|
do
|
||||||
local token_primitives = token.primitives()
|
local token_primitives = token.getprimitives()
|
||||||
local token_new = token.new
|
local token_new = token.new
|
||||||
for i=1,#token_primitives do
|
for i=1,#token_primitives do
|
||||||
local prim = token_primitives[i]
|
local prim = token_primitives[i]
|
||||||
@ -27,6 +35,12 @@ do
|
|||||||
end
|
end
|
||||||
token.primitive_tokens = primitives
|
token.primitive_tokens = primitives
|
||||||
|
|
||||||
|
do
|
||||||
|
local command_id = swap_table(token.getcommandvalues())
|
||||||
|
function token.command_id(name) return command_id[name] end
|
||||||
|
end
|
||||||
|
token.value = swap_table(token.getfunctionvalues())
|
||||||
|
|
||||||
local functions = lua.getfunctionstable()
|
local functions = lua.getfunctionstable()
|
||||||
-- I am not sure why this is necessary, but otherwise LuaMetaTeX resets
|
-- I am not sure why this is necessary, but otherwise LuaMetaTeX resets
|
||||||
-- the functions table every time the getter is called
|
-- the functions table every time the getter is called
|
||||||
@ -95,9 +109,9 @@ if initex then
|
|||||||
for i=0,0 do -- maybeFIXME: In practise only one language is preloaded in LuaTeX anyway
|
for i=0,0 do -- maybeFIXME: In practise only one language is preloaded in LuaTeX anyway
|
||||||
-- for i=0,tex.count[19] do -- Sometimes catches reserved language ids which are not used yet
|
-- for i=0,tex.count[19] do -- Sometimes catches reserved language ids which are not used yet
|
||||||
-- for i=0,lang.new():id()-1 do -- lang.new():id() is always 0 in luametatex?!?
|
-- for i=0,lang.new():id()-1 do -- lang.new():id() is always 0 in luametatex?!?
|
||||||
local l = lang.new(i)
|
local l = language.new(i)
|
||||||
local str = string.format("do \z
|
local str = string.format("do \z
|
||||||
local l = lang.new(%i)\z
|
local l = language.new(%i)\z
|
||||||
l:hyphenationmin(%i)\z
|
l:hyphenationmin(%i)\z
|
||||||
l:prehyphenchar(%i)\z
|
l:prehyphenchar(%i)\z
|
||||||
l:posthyphenchar(%i)\z
|
l:posthyphenchar(%i)\z
|
||||||
|
@ -14,7 +14,7 @@ lua.get_functions_table()[restore_func] = function()
|
|||||||
end
|
end
|
||||||
local restore_toks = {token.primitive_tokens.atendofgroup , token.new(restore_func, token.command_id'lua_call')}
|
local restore_toks = {token.primitive_tokens.atendofgroup , token.new(restore_func, token.command_id'lua_call')}
|
||||||
local put_next = token.put_next
|
local put_next = token.put_next
|
||||||
local runtoks = tex.runtoks
|
local runlocal = tex.runlocal
|
||||||
local function put_restore_toks()
|
local function put_restore_toks()
|
||||||
put_next(restore_toks)
|
put_next(restore_toks)
|
||||||
end
|
end
|
||||||
@ -35,7 +35,7 @@ return function(t, k, v, global)
|
|||||||
local level = stack[l]
|
local level = stack[l]
|
||||||
if not level then
|
if not level then
|
||||||
level = {}
|
level = {}
|
||||||
runtoks(put_restore_toks)
|
runlocal(put_restore_toks)
|
||||||
stack[l] = level
|
stack[l] = level
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ else
|
|||||||
function geterrorcode(ec) return ec & 0xFF == 0 and ec >> 8 or 0xFF end
|
function geterrorcode(ec) return ec & 0xFF == 0 and ec >> 8 or 0xFF end
|
||||||
end
|
end
|
||||||
|
|
||||||
local firstargs = string.format("luametatex%s%s", late_arg_pattern:match('--lua=' .. file), late_arg_pattern:match('--arg0=' .. os.selfarg[0]))
|
local firstargs = string.format("luametatex --permitloadlib%s%s", late_arg_pattern:match('--lua=' .. file), late_arg_pattern:match('--arg0=' .. os.selfarg[0]))
|
||||||
local args = table.concat(os.selfarg)
|
local args = table.concat(os.selfarg)
|
||||||
if run then -- The user wants to take care of everything
|
if run then -- The user wants to take care of everything
|
||||||
os.exit(geterrorcode(os.execute(firstargs .. args)))
|
os.exit(geterrorcode(os.execute(firstargs .. args)))
|
||||||
|
Loading…
Reference in New Issue
Block a user