diff --git a/luametalatex-back-pdf.lua b/luametalatex-back-pdf.lua index 4e49341..aa72599 100644 --- a/luametalatex-back-pdf.lua +++ b/luametalatex-back-pdf.lua @@ -1,3 +1,5 @@ +local lmlt = luametalatex + local scan_int = token.scan_int local scan_token = token.scan_token local scan_keyword = token.scan_keyword @@ -22,6 +24,8 @@ local utils = require'luametalatex-pdf-utils' local strip_floats = utils.strip_floats local to_bp = utils.to_bp +local immediate_flag = lmlt.flag.immediate + local pdfname, pfile local fontdirs = setmetatable({}, {__index=function(t, k)t[k] = pfile:getobj() return t[k] end}) local nodefont_meta = {} @@ -65,15 +69,15 @@ end local properties = node.direct.properties local reset_deadcycles do local tokens = { - token.primitive_tokens.global, - token.primitive_tokens.deadcycles,token.create(0x30), - token.primitive_tokens.relax, + lmlt.primitive_tokens.global, + lmlt.primitive_tokens.deadcycles,token.create(0x30), + lmlt.primitive_tokens.relax, } function reset_deadcycles() token.put_next(tokens) end end -token.luacmd("shipout", function() +lmlt.luacmd("shipout", function() local pfile = get_pfile() local total_voffset, total_hoffset = tex.voffset + pdfvariable.vorigin, tex.hoffset + pdfvariable.horigin local voff = node.new'kern' @@ -247,7 +251,7 @@ function callbacks.stop_run() end callbacks.__freeze('stop_run', true) -token.luacmd("pdfvariable", function() +lmlt.luacmd("pdfvariable", function() for _, n in ipairs(pdf.variable_names) do if scan_keyword(n) then return token.put_next(token.create('pdfvariable ' .. n)) @@ -637,7 +641,7 @@ local function maybe_gobble_cmd(cmd) token.put_next(t) end end -token.luacmd("pdffeedback", function() +lmlt.luacmd("pdffeedback", function() if scan_keyword"colorstackinit" then local page = scan_keyword'page' or (scan_keyword'nopage' and false) -- If you want to pass "page" as mode @@ -656,10 +660,10 @@ token.luacmd("pdffeedback", function() error(string.format("Unknown PDF feedback %s", scan_word())) end end) -token.luacmd("pdfextension", function(_, immediate) +lmlt.luacmd("pdfextension", function(_, immediate) if immediate == "value" then return end - if immediate and immediate & 0x7 ~= 0 then - immediate = immediate & 0x8 + if immediate and immediate & ~immediate_flag ~= 0 then + immediate = immediate & immediate_flag tex.error("Unexpected prefix", "You used \\pdfextension with a prefix that doesn't belong there. I will ignore it for now.") end if scan_keyword"colorstack" then @@ -727,7 +731,7 @@ token.luacmd("pdfextension", function(_, immediate) local attr = scan_keyword'stream' and (scan_keyword'attr' and scan_string() or '') local isfile = scan_keyword'file' local content = scan_string() - if immediate == 8 then + if immediate == immediate_flag then if attr then pfile:stream(num, attr, content, isfile) else @@ -850,11 +854,10 @@ local lastimage = -1 local lastimagepages = -1 -- These are very minimal right now but LaTeX isn't using the scaling etc. stuff anyway. -token.luacmd("saveimageresource", function(_, immediate) +lmlt.luacmd("saveimageresource", function(_, immediate) if immediate == "value" then return end - if immediate and immediate & 0x7 ~= 0 then - print(immediate) - immediate = immediate & 0x8 + if immediate and immediate & ~immediate_flag ~= 0 then + immediate = immediate & immediate_flag tex.error("Unexpected prefix", "You used \\saveimageresource with a prefix that doesn't belong there. I will ignore it for now.") end local attr = scan_keyword'attr' and scan_string() or nil @@ -880,24 +883,24 @@ token.luacmd("saveimageresource", function(_, immediate) local pfile = get_pfile() lastimage = imglib.get_num(pfile, img) lastimagepages = img.pages or 1 - if immediate == 8 then + if immediate == immediate_flag then imglib_immediatewrite(pfile, img) end end, "value") -token.luacmd("useimageresource", function() +lmlt.luacmd("useimageresource", function() local pfile = get_pfile() local img = assert(imglib.from_num(scan_int())) imglib_write(pfile, img) end, "protected") -local integer_code = token.value.integer +local integer_code = lmlt.value.integer -token.luacmd("lastsavedimageresourceindex", function() +lmlt.luacmd("lastsavedimageresourceindex", function() return integer_code, lastimage end, "value") -token.luacmd("lastsavedimageresourcepages", function() +lmlt.luacmd("lastsavedimageresourcepages", function() return integer_code, lastimagepages end, "value") @@ -919,10 +922,10 @@ tex.useboxresource = savedbox.use local lastbox = -1 -token.luacmd("saveboxresource", function(_, immediate) +lmlt.luacmd("saveboxresource", function(_, immediate) if immediate == "value" then return end - if immediate and immediate & 0x7 ~= 0 then - immediate = immediate & 0x8 + if immediate and immediate & ~immediate_flag ~= 0 then + immediate = immediate & immediate_flag tex.error("Unexpected prefix", "You used \\saveboxresource with a prefix that doesn't belong there. I will ignore it for now.") end local type @@ -935,11 +938,11 @@ token.luacmd("saveboxresource", function(_, immediate) local margin = scan_keyword'margin' and scan_dimen() or nil local box = scan_int() - local index = tex.saveboxresource(box, attr, resources, immediate == 8, type, margin) + local index = tex.saveboxresource(box, attr, resources, immediate == immediate_flag, type, margin) lastbox = index end, "value") -token.luacmd("useboxresource", function() +lmlt.luacmd("useboxresource", function() local width, height, depth while true do if scan_keyword'width' then @@ -956,7 +959,7 @@ token.luacmd("useboxresource", function() node.write((tex.useboxresource(index, width, height, depth))) end, "protected") -token.luacmd("lastsavedboxresourceindex", function() +lmlt.luacmd("lastsavedboxresourceindex", function() return integer_code, lastbox end, "value") @@ -964,15 +967,15 @@ local saved_pos_x, saved_pos_y = -1, -1 local save_pos_whatsit = declare_whatsit('save_pos', function(_, _, _, x, y) saved_pos_x, saved_pos_y = assert(math.tointeger(x)), assert(math.tointeger(y)) end) -token.luacmd("savepos", function() -- \savepos +lmlt.luacmd("savepos", function() -- \savepos return node.direct.write(node.direct.new(whatsit_id, save_pos_whatsit)) end, "protected") -token.luacmd("lastxpos", function() +lmlt.luacmd("lastxpos", function() return integer_code, (saved_pos_x+.5)//1 end, "value") -token.luacmd("lastypos", function() +lmlt.luacmd("lastypos", function() return integer_code, (saved_pos_y+.5)//1 end, "value") diff --git a/luametalatex-baseregisters.lua b/luametalatex-baseregisters.lua index 0e62051..79600f8 100644 --- a/luametalatex-baseregisters.lua +++ b/luametalatex-baseregisters.lua @@ -1,9 +1,11 @@ +local lmlt = luametalatex + local scan_dimen = token.scan_dimen local scan_int = token.scan_int local scan_keyword = token.scan_keyword -local count_code = token.value.integer -local dimen_code = token.value.dimension +local count_code = lmlt.value.integer +local dimen_code = lmlt.value.dimension local set_local = require'luametalatex-local' @@ -26,7 +28,7 @@ function texmeta.__newindex(t, k, v) end local function tex_variable(value, scanner, name, default) - token.luacmd(name, function(_, scanning) + lmlt.luacmd(name, function(_, scanning) if scanning == 'value' then return value, tex_variables[name] else @@ -95,7 +97,7 @@ end local function pdf_variable(value, scanner, name, default, force_default) pdf_variable_names[#pdf_variable_names+1] = name - token.luacmd('pdfvariable ' .. name, function(_, scanning) + lmlt.luacmd('pdfvariable ' .. name, function(_, scanning) if scanning == 'value' then return value, real_pdf_variables[name] elseif force_default then diff --git a/luametalatex-dir-registers.lua b/luametalatex-dir-registers.lua index 42e04ea..e360e8b 100644 --- a/luametalatex-dir-registers.lua +++ b/luametalatex-dir-registers.lua @@ -10,7 +10,7 @@ function tex.gettextdir() return tex.textdirection end function tex.getlinedir() return tex.linedirection end function tex.getmathdir() return tex.mathdirection end function tex.getpardir() return tex.pardirection end -local integer_code = token.value.integer +local integer_code = luametalatex.value.integer local function set_xdir(id, scanning) if scanning == 'value' then return integer_code, getters[id]() @@ -30,7 +30,7 @@ return function(name) local getter = tex["get" .. name] local setter = tex["set" .. name] assert(getter and setter, "direction parameter undefined") - local idx = token.luacmd(name, set_xdir, "protected", "global", "value") + local idx = luametalatex.luacmd(name, set_xdir, "protected", "global", "value") getters[idx] = getter setters[idx] = setter return idx diff --git a/luametalatex-firstcode.lua b/luametalatex-firstcode.lua index cd5388a..e77daa4 100644 --- a/luametalatex-firstcode.lua +++ b/luametalatex-firstcode.lua @@ -1,3 +1,5 @@ +local lmlt = luametalatex + local scan_int = token.scan_int token.scan_int = scan_int -- For compatibility with LuaTeX packages local scan_token = token.scan_token @@ -61,6 +63,8 @@ if status.ini_version then setcatcode('global', 2, 32, 10) end +local immediate_flag = lmlt.flag.immediate + local l = lpeg or require'lpeg' local add_file_extension = l.Cs((1-('.' * (1-l.S'./\\')^0) * -1)^0 * (l.P(1)^1+l.Cc'.tex')) local ofiles, ifiles = {}, {} @@ -75,17 +79,17 @@ local function do_openout(p) end end local open_whatsit = new_whatsit('open', do_openout) -token.luacmd("openout", function(_, immediate) -- \openout +lmlt.luacmd("openout", function(_, immediate) -- \openout if immediate == "value" then return end - if immediate and immediate & ~0x2000 ~= 0 then - immediate = immediate & 0x2000 + if immediate and immediate & ~immediate_flag ~= 0 then + immediate = immediate & immediate_flag tex.error("Unexpected prefix", "You used \\openout with a prefix that doesn't belong there. I will ignore it for now.") end local file = scan_int() scan_keyword'=' local name = scan_filename() local props = {file = file, name = name} - if immediate and immediate == 0x2000 then + if immediate and immediate == immediate_flag then do_openout(props) else local whatsit = node.direct.new(whatsit_id, open_whatsit) @@ -93,7 +97,7 @@ token.luacmd("openout", function(_, immediate) -- \openout node.direct.write(whatsit) end end, "value") -token.luacmd("openin", function(_, prefix) +lmlt.luacmd("openin", function(_, prefix) if prefix == "value" then return end local file = scan_int() scan_keyword'=' @@ -112,15 +116,15 @@ local function do_closeout(p) end end local close_whatsit = new_whatsit('close', do_closeout) -token.luacmd("closeout", function(_, immediate) -- \closeout +lmlt.luacmd("closeout", function(_, immediate) -- \closeout if immediate == "value" then return end - if immediate and immediate & ~0x2000 ~= 0 then - immediate = immediate & 0x2000 + if immediate and immediate & ~immediate_flag ~= 0 then + immediate = immediate & immediate_flag tex.error("Unexpected prefix", "You used \\closeout with a prefix that doesn't belong there. I will ignore it for now.") end local file = scan_int() local props = {file = file} - if immediate == 0x2000 then + if immediate == immediate_flag then do_closeout(props) else local whatsit = node.direct.new(whatsit_id, close_whatsit) @@ -128,7 +132,7 @@ token.luacmd("closeout", function(_, immediate) -- \closeout node.direct.write(whatsit) end end, "value") -token.luacmd("closein", function(_, prefix) +lmlt.luacmd("closein", function(_, prefix) if prefix == "value" then return end local file = scan_int() if ifiles[file] then @@ -148,16 +152,16 @@ local function do_write(p) end end local write_whatsit = new_whatsit('write', do_write) -token.luacmd("write", function(_, immediate, ...) -- \write +lmlt.luacmd("write", function(_, immediate, ...) -- \write if immediate == "value" then return end - if immediate and immediate & ~0x2000 ~= 0 then - immediate = immediate & 0x2000 + if immediate and immediate & ~immediate_flag ~= 0 then + immediate = immediate & immediate_flag tex.error("Unexpected prefix", "You used \\write with a prefix that doesn't belong there. I will ignore it for now.") end local file = scan_int() local content = scan_tokenlist() local props = {file = file, data = content} - if immediate == 0x2000 then + if immediate == immediate_flag then do_write(props) else local whatsit = node.direct.new(whatsit_id, write_whatsit) @@ -176,13 +180,13 @@ local function prefix_to_tokens(prefix) end end end -local expand_after = token.primitive_tokens.expandafter -local input_tok = token.primitive_tokens.input -local endlocalcontrol = token.primitive_tokens.endlocalcontrol -local afterassignment = token.primitive_tokens.afterassignment +local expand_after = lmlt.primitive_tokens.expandafter +local input_tok = lmlt.primitive_tokens.input +local endlocalcontrol = lmlt.primitive_tokens.endlocalcontrol +local afterassignment = lmlt.primitive_tokens.afterassignment local lbrace = token.new(0, 1) local rbrace = token.new(0, 2) -token.luacmd("read", function(_, prefix) +lmlt.luacmd("read", function(_, prefix) if immediate == "value" then return end local id = scan_int() if not scan_keyword'to' then @@ -224,12 +228,12 @@ token.luacmd("read", function(_, prefix) tex.runlocal(function() tokens[#tokens+1] = rbrace token.put_next(tokens) - token.put_next(token.primitive_tokens.def, token.create(macro), lbrace) + token.put_next(lmlt.primitive_tokens.def, token.create(macro), lbrace) prefix_to_tokens(prefix) end) end, "value") -token.luacmd("readline", function(_, prefix) +lmlt.luacmd("readline", function(_, prefix) if immediate == "value" then return end local id = scan_int() if not scan_keyword'to' then @@ -266,7 +270,7 @@ local integer_code, boolean_code do end end -token.luacmd("ifeof", function(_) +lmlt.luacmd("ifeof", function(_) local id = scan_int() return boolean_code, not ifiles[id] end, "condition") @@ -283,7 +287,7 @@ local late_lua_whatsit = new_whatsit('late_lua', function(p, pfile, n, x, y) end return pdf._latelua(pfile, x, y, code) end) -token.luacmd("latelua", function() -- \latelua +lmlt.luacmd("latelua", function() -- \latelua local content = scan_tokenlist() local props = {token = content} local whatsit = node.direct.new(whatsit_id, late_lua_whatsit) @@ -298,7 +302,7 @@ require'luametalatex-baseregisters' require'luametalatex-back-pdf' require'luametalatex-node-luaotfload' -token.luacmd("Umathcodenum", function(_, scanning) +lmlt.luacmd("Umathcodenum", function(_, scanning) if scanning then local class, family, char = tex.getmathcodes (scan_int()) return integer_code, char | (class | family << 3) << 21 diff --git a/luametalatex-lateinit.lua b/luametalatex-lateinit.lua index 4b0318a..81ea521 100644 --- a/luametalatex-lateinit.lua +++ b/luametalatex-lateinit.lua @@ -1,3 +1,5 @@ +luametalatex = luametalatex or {} +local lmlt = luametalatex local initex = status.ini_version if initex then @@ -34,13 +36,14 @@ do primitives[prim[3]] = token_new(prim[2], prim[1]) end end -token.primitive_tokens = primitives +lmlt.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()) +lmlt.value = swap_table(token.getfunctionvalues()) +lmlt.flag = swap_table(tex.getflagvalues()) local functions = lua.getfunctionstable() -- I am not sure why this is necessary, but otherwise LuaMetaTeX resets @@ -71,7 +74,7 @@ local lua_call_cmd = token.command_id'lua_call' local lua_value_cmd = token.command_id'lua_value' local lua_protected_call_cmd = token.command_id'lua_protected_call' local if_test_cmd = token.command_id'if_test' -function token.luacmd(name, func, ...) +function lmlt.luacmd(name, func, ...) local idx local tok = token.create(name) local cmd = tok.command diff --git a/luametalatex-local.lua b/luametalatex-local.lua index 91ba207..37d9d68 100644 --- a/luametalatex-local.lua +++ b/luametalatex-local.lua @@ -12,7 +12,7 @@ lua.get_functions_table()[restore_func] = function() end end end -local restore_toks = {token.primitive_tokens.atendofgroup , token.new(restore_func, token.command_id'lua_call')} +local restore_toks = {luametalatex.primitive_tokens.atendofgroup , token.new(restore_func, token.command_id'lua_call')} local put_next = token.put_next local runlocal = tex.runlocal local function put_restore_toks() diff --git a/luametalatex-meaning.lua b/luametalatex-meaning.lua index 2565e06..831414c 100644 --- a/luametalatex-meaning.lua +++ b/luametalatex-meaning.lua @@ -4,12 +4,13 @@ -- Necessary especially for etoolbox's patching commands +local lmlt = luametalatex local primitive_meaning = { - token.primitive_tokens.expandafter, - token.primitive_tokens.relax, - token.primitive_tokens.meaning, + lmlt.primitive_tokens.expandafter, + lmlt.primitive_tokens.relax, + lmlt.primitive_tokens.meaning, } -token.luacmd("meaning", function() +lmlt.luacmd("meaning", function() local peeked = token.peeknext() token.put_next(primitive_meaning) token.skipnextexpanded()