diff options
author | Karl Berry <karl@freefriends.org> | 2022-10-02 20:22:38 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-10-02 20:22:38 +0000 |
commit | f07221583be9b4c98b5db2cb0008a92de954d799 (patch) | |
tree | 7b37a17d5650238fc1630f195f1bd8638eb8e66b /Master/texmf-dist/tex/luatex/luatexja/ltj-stack.lua | |
parent | 577f093e401f937931fdb0b38a6c9680ad542604 (diff) |
luatexja (2oct22)
git-svn-id: svn://tug.org/texlive/trunk@64587 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luatexja/ltj-stack.lua')
-rw-r--r-- | Master/texmf-dist/tex/luatex/luatexja/ltj-stack.lua | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/Master/texmf-dist/tex/luatex/luatexja/ltj-stack.lua b/Master/texmf-dist/tex/luatex/luatexja/ltj-stack.lua index a0cd2e286ec..ca83781473d 100644 --- a/Master/texmf-dist/tex/luatex/luatexja/ltj-stack.lua +++ b/Master/texmf-dist/tex/luatex/luatexja/ltj-stack.lua @@ -3,7 +3,7 @@ -- luatexbase.provides_module({ name = 'luatexja.stack', - date = '2020-07-30', + date = '2022-08-20', description = 'LuaTeX-ja stack system', }) luatexja.stack = {} @@ -20,28 +20,31 @@ local STCK = luatexja.userid_table.STCK local fastcopy = table.fastcopy local setcount, getcount = tex.setcount, tex.getcount local scan_int, scan_keyword = token.scan_int, token.scan_keyword +local getnest = tex.getnest +local cnt_stack = luatexbase.registernumber 'ltj@@stack' +local cnt_grplvl = luatexbase.registernumber 'ltj@@group@level' ltjs.hmode = 0 -- dummy -local charprop_stack_table={}; +local charprop_stack_table={} ltjs.charprop_stack_table = charprop_stack_table charprop_stack_table[0]={} local function get_stack_level() - local i = getcount 'ltj@@stack' + local i = getcount(cnt_stack) local j = tex.currentgrouplevel - if j > getcount 'ltj@@group@level' then + if j > getcount(cnt_grplvl) then i = i+1 -- new stack level local gd = tex.globaldefs if gd~=0 then tex.globaldefs = 0 end -- 'tex.globaldefs = 0' is local even if \globaldefs > 0. - setcount('ltj@@group@level', j) + setcount(cnt_grplvl, j) for k,v in pairs(charprop_stack_table) do -- clear the stack above i if k>=i then charprop_stack_table[k]=nil end end charprop_stack_table[i] = fastcopy(charprop_stack_table[i-1]) - setcount('ltj@@stack', i) + setcount(cnt_stack, i) if gd~=0 then tex.globaldefs = gd end - if tex.nest[tex.nest.ptr].mode == -ltjs.hmode then -- rest. hmode のみ + if getnest().mode == -ltjs.hmode then -- rest. hmode のみ local g = node_new(id_whatsit, sid_user) g.user_id=STCK; g.type=100; g.value=j; node.write(g) end @@ -54,9 +57,7 @@ local function set_stack_table(m, p) local i = get_stack_level() charprop_stack_table[i][m] = p if luatexja.isglobal=='global' then - for j,v in pairs(charprop_stack_table) do - charprop_stack_table[j][m] = p - end + for j,v in pairs(charprop_stack_table) do v[m] = p end end end ltjs.set_stack_table = set_stack_table @@ -90,25 +91,22 @@ function ltjs.set_stack_font(m,c,p) end -- EXT: sp: glue_spec +local getglue = node.getglue function ltjs.set_stack_skip(m,sp) local i = get_stack_level() if not sp then return end - if not charprop_stack_table[i][m] then - charprop_stack_table[i][m] = {} + local w,st,sh,sto,sho = getglue(sp) + if charprop_stack_table[i][m] then + local c = charprop_stack_table[i][m] + c[1], c[2], c[3], c[4], c[5] = w, st, sh, sto, sho + else + charprop_stack_table[i][m] = { w,st,sh,sto,sho } end - charprop_stack_table[i][m].width = sp.width - charprop_stack_table[i][m].stretch = sp.stretch - charprop_stack_table[i][m].shrink = sp.shrink - charprop_stack_table[i][m].stretch_order = sp.stretch_order - charprop_stack_table[i][m].shrink_order = sp.shrink_order if luatexja.isglobal=='global' then for j,v in pairs(charprop_stack_table) do - if not charprop_stack_table[j][m] then charprop_stack_table[j][m] = {} end - charprop_stack_table[j][m].width = sp.width - charprop_stack_table[j][m].stretch = sp.stretch - charprop_stack_table[j][m].shrink = sp.shrink - charprop_stack_table[j][m].stretch_order = sp.stretch_order - charprop_stack_table[j][m].shrink_order = sp.shrink_order + if not v[m] then v[m] = { true,true,true,true,true } end + local c = v[m] + c[1], c[2], c[3], c[4], c[5] = w, st, sh, sto, sho end end end @@ -119,23 +117,21 @@ local orig_char_table = {} ltjs.orig_char_table = orig_char_table ltjs.list_dir = nil -- dummy ltjs.table_current_stack = nil -- dummy +local dummy_skip_table = { 0,0,0,0,0 } function ltjs.report_stack_level(bsl) ltjs.table_current_stack = charprop_stack_table[bsl] return bsl end function ltjs.fast_get_stack_skip(m) - return ltjs.table_current_stack[m] - or { width = 0, stretch = 0, shrink = 0, stretch_order = 0, shrink_order = 0 } + return ltjs.table_current_stack[m] or dummy_skip_table end -- For other situations, use the following instead: function ltjs.get_stack_skip(m, idx) - return charprop_stack_table[idx][m] - or { width = 0, stretch = 0, shrink = 0, stretch_order = 0, shrink_order = 0 } + return charprop_stack_table[idx][m] or dummy_skip_table end function ltjs.get_stack_table(mc, d, idx) - local i = charprop_stack_table[idx][mc] - return i or d + return charprop_stack_table[idx][mc] or d end |