diff --git a/luametalatex-back-pdf.lua b/luametalatex-back-pdf.lua index ab4388e..4e49341 100644 --- a/luametalatex-back-pdf.lua +++ b/luametalatex-back-pdf.lua @@ -1,4 +1,4 @@ -local scan_int = token.scan_integer +local scan_int = token.scan_int local scan_token = token.scan_token local scan_keyword = token.scan_keyword local scan_string = token.scan_string diff --git a/luametalatex-baseregisters.lua b/luametalatex-baseregisters.lua index 5855df1..0e62051 100644 --- a/luametalatex-baseregisters.lua +++ b/luametalatex-baseregisters.lua @@ -1,5 +1,5 @@ local scan_dimen = token.scan_dimen -local scan_int = token.scan_integer +local scan_int = token.scan_int local scan_keyword = token.scan_keyword local count_code = token.value.integer @@ -117,7 +117,9 @@ end tex_variable(count_code, scan_int, 'suppressfontnotfounderror', 0) tex_variable(count_code, scan_int, 'outputmode', 1) -- The "traditional" default would be 0, - -- but we do not actually support that. + -- but we do not actually support that. +tex_variable(count_code, scan_int, 'tracingscantokens', 0) + tex_variable(dimen_code, scan_dimen, 'pageheight', 0) tex_variable(dimen_code, scan_dimen, 'pagewidth', 0) diff --git a/luametalatex-dir-registers.lua b/luametalatex-dir-registers.lua index ea168e1..42e04ea 100644 --- a/luametalatex-dir-registers.lua +++ b/luametalatex-dir-registers.lua @@ -1,4 +1,4 @@ -local scan_int = token.scan_integer +local scan_int = token.scan_int local scan_keyword = token.scan_keyword -- local names = {} diff --git a/luametalatex-firstcode.lua b/luametalatex-firstcode.lua index cd78218..cd5388a 100644 --- a/luametalatex-firstcode.lua +++ b/luametalatex-firstcode.lua @@ -1,7 +1,7 @@ -local scan_int = token.scan_integer +local scan_int = token.scan_int token.scan_int = scan_int -- For compatibility with LuaTeX packages local scan_token = token.scan_token -local scan_tokenlist = token.scan_tokenlist +local scan_tokenlist = token.scantokenlist local scan_keyword = token.scan_keyword local scan_csname = token.scan_csname local set_macro = token.set_macro @@ -77,15 +77,15 @@ end local open_whatsit = new_whatsit('open', do_openout) token.luacmd("openout", function(_, immediate) -- \openout if immediate == "value" then return end - if immediate and immediate & 0x7 ~= 0 then - immediate = immediate & 0x8 + if immediate and immediate & ~0x2000 ~= 0 then + immediate = immediate & 0x2000 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 == 8 then + if immediate and immediate == 0x2000 then do_openout(props) else local whatsit = node.direct.new(whatsit_id, open_whatsit) @@ -114,13 +114,13 @@ end local close_whatsit = new_whatsit('close', do_closeout) token.luacmd("closeout", function(_, immediate) -- \closeout if immediate == "value" then return end - if immediate and immediate & 0x7 ~= 0 then - immediate = immediate & 0x8 + if immediate and immediate & ~0x2000 ~= 0 then + immediate = immediate & 0x2000 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 == 8 then + if immediate == 0x2000 then do_closeout(props) else local whatsit = node.direct.new(whatsit_id, close_whatsit) @@ -148,16 +148,16 @@ local function do_write(p) end end local write_whatsit = new_whatsit('write', do_write) -token.luacmd("write", function(_, immediate) -- \write +token.luacmd("write", function(_, immediate, ...) -- \write if immediate == "value" then return end - if immediate and immediate & 0x7 ~= 0 then - immediate = immediate & 0x8 + if immediate and immediate & ~0x2000 ~= 0 then + immediate = immediate & 0x2000 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 == 8 then + if immediate == 0x2000 then do_write(props) else local whatsit = node.direct.new(whatsit_id, write_whatsit) @@ -205,13 +205,13 @@ token.luacmd("read", function(_, prefix) end local endlocal tex.runlocal(function() - endlocal = token.scan_next() + endlocal = token.get_next() tex.sprint(endlocal) tex.print(line and line ~= "" and line or " ") tex.print(endlocal) end) while true do - local tok = token.scan_next() + local tok = token.get_next() if tok == endlocal then break end if tok.command == 1 then balance = balance + 1 diff --git a/luametalatex-lateinit.lua b/luametalatex-lateinit.lua index 2835524..4b0318a 100644 --- a/luametalatex-lateinit.lua +++ b/luametalatex-lateinit.lua @@ -14,6 +14,7 @@ pdf = { } require'luametalatex-font-resolve' -- Replace font.define. Must be loaded before callbacks require'luametalatex-basecallbacks' +require'luametalatex-oldnames' local callbacks = require'luametalatex-callbacks' local function swap_table(t) @@ -80,8 +81,8 @@ function token.luacmd(name, func, ...) idx = tok.index elseif cmd == lua_protected_call_cmd then idx = tok.index - elseif cmd == if_test_cmd and tok.index > 49 then - idx = tok.index - 49 + elseif cmd == if_test_cmd and tok.index > 53 then + idx = tok.index - 53 elseif ... == 'force' then idx = new_luafunction(name) set_lua(name, idx, select(2, ...)) diff --git a/luametalatex-meaning.lua b/luametalatex-meaning.lua index 4176d6e..2565e06 100644 --- a/luametalatex-meaning.lua +++ b/luametalatex-meaning.lua @@ -10,9 +10,9 @@ local primitive_meaning = { token.primitive_tokens.meaning, } token.luacmd("meaning", function() - local peeked = token.peek_next() + local peeked = token.peeknext() token.put_next(primitive_meaning) - token.skip_next_expanded() + token.skipnextexpanded() if peeked.parameters == 0 then tex.sprint'->' end diff --git a/luametalatex-microtype.sty b/luametalatex-microtype.sty index 456c285..b7b71f9 100644 --- a/luametalatex-microtype.sty +++ b/luametalatex-microtype.sty @@ -24,10 +24,10 @@ \noexpand\luametalatex@@everyjobandnow{\noexpand\directlua{! lua.get_functions_table()[\the\luametalatex@@expandglyphsinfont] = function() token.put_next(token.create'fontid') - local font = token.scan_integer() - local stretch = token.scan_integer() - local shrink = token.scan_integer() - local step = token.scan_integer() + local font = token.scan_int() + local stretch = token.scan_int() + local shrink = token.scan_int() + local step = token.scan_int() token.set_macro('pickup@font@@hook@luametalatex@microtype@' .. font, string.format("{}{%i}{%i}{%i}", stretch, shrink, step), "global") end }} diff --git a/luametalatex-nodewriter.lua b/luametalatex-nodewriter.lua index 8964604..80848ab 100644 --- a/luametalatex-nodewriter.lua +++ b/luametalatex-nodewriter.lua @@ -43,6 +43,7 @@ local get_whatsit_handler = require'luametalatex-whatsits'.handler local write_matrix -- Defined later local dir_id = node.id'dir' +local glue_id = node.id'glue' local function doublekeyed(t, id2name, name2id, index) return setmetatable(t, { @@ -356,7 +357,7 @@ function nodehandler.vlist(p, list, x, y0, outerlist, origin, level) local y = y0 y = y + height for n in traverse(getlist(list)) do - local d, h, _ = 0, direct.effective_glue(n, list) or math.tointeger(getkern(n)) + local d, h, _ = 0, getid(n) == glue_id and direct.effective_glue(n, list) or math.tointeger(getkern(n)) if not h then _, h, d = direct.getwhd(n) end diff --git a/luametalatex-oldnames.lua b/luametalatex-oldnames.lua new file mode 100644 index 0000000..dd77698 --- /dev/null +++ b/luametalatex-oldnames.lua @@ -0,0 +1,72 @@ +local function rewrite(t) + local function handler(old, new) + t[old] = t[old] or t[new] + if not t[old] then print('!!!', old) end + return handler + end + return handler +end + +rewrite(language) + ('clear_hyphenation', 'clearhyphenation') + ('clear_patterns', 'clearpatterns') + +rewrite(node) + ('copy_list', 'copylist') + ('flush_list', 'flushlist') + ('flush_node', 'flushnode') + ('get_properties_table', 'getpropertiestable') + ('has_field', 'hasfield') + ('insert_after', 'insertafter') + ('insert_before', 'insertbefore') + ('is_node', 'isnode') + +rewrite(node.direct) + ('copy_list', 'copylist') + ('effective_glue', 'effectiveglue') + ('end_of_math', 'endofmath') + ('first_glyph', 'firstglyph') + ('flush_list', 'flushlist') + ('flush_node', 'flushnode') + ('get_attribute', 'getattribute') + ('get_properties_table', 'getpropertiestable') + ('has_field', 'hasfield') + ('has_glyph', 'hasglyph') + ('insert_after', 'insertafter') + ('insert_before', 'insertbefore') + ('is_char', 'ischar') + ('is_direct', 'isdirect') + ('is_glyph', 'isglyph') + ('is_node', 'isnode') + ('is_zero_glue', 'iszeroglue') + ('last_node', 'lastnode') + ('make_extensible', 'makeextensible') + ('mlist_to_hlist', 'mlisttohlist') + ('protect_glyph', 'protectglyph') + ('protect_glyphs', 'protectglyphs') + ('traverse_char', 'traversechar') + ('traverse_list', 'traverselist') + ('traverse_id', 'traverseid') + ('unprotect_glyph', 'unprotectglyph') + ('unprotect_glyphs', 'unprotectglyphs') + ('uses_font', 'usesfont') + +rewrite(token) + ('get_next', 'scannext') + ('put_next', 'putnext') + ('scan_argument', 'scanargument') + ('scan_box', 'scanbox') + ('scan_code', 'scancode') + ('scan_csname', 'scancsname') + ('scan_dimen', 'scandimen') + ('scan_float', 'scanfloat') + ('scan_glue', 'scanglue') + ('scan_int', 'scaninteger') + ('scan_keyword', 'scankeyword') + ('scan_keywordcs', 'scankeywordcs') + ('scan_real', 'scanreal') + ('scan_string', 'scanstring') + ('scan_token', 'scannextexpanded') + ('scan_toks', 'scantoks') + ('scan_word', 'scanword') + ('set_lua', 'setlua') diff --git a/luametatexconfig.tex b/luametatexconfig.tex index 9d9979d..abecb3d 100644 --- a/luametatexconfig.tex +++ b/luametatexconfig.tex @@ -31,7 +31,24 @@ % so can now be read using the (emulated) primitives % This needs to be global so set \globaldefs for the rest of the group \globaldefs=1 % - \input{pdftexconfig}% + % \input{pdftexconfig}% + % Copied in here because the original uses `true` dimensions which aren't supported + \pdfoutput = 1 + + % Paper size: dimensions given in absolute terms + \pdfpageheight = 297 mm + \pdfpagewidth = 210 mm + + % Enable PDF 1.5 output and thus more compression + \pdfminorversion = 5 + \pdfobjcompresslevel = 2 + + % Low-level settings unlikely ever to need to change + \pdfcompresslevel = 9 + \pdfdecimaldigits = 3 + \pdfpkresolution = 600 + \pdfhorigin = 1 in + \pdfvorigin = 1 in % Pick up on a request for DVI mode and apply it whilst \pdfoutput is % still defined \ifx\dvimode\relax