local id_whatsit = node.id('whatsit')
local sid_user = node.subtype('user_defined')
local STCK = luatexja.userid_table.STCK
+local fastcopy = table.fastcopy
+local setcount = tex.setcount
+local scan_int, scan_keyword = token.scan_int, token.scan_keyword
hmode = 0 -- dummy
charprop_stack_table={};
charprop_stack_table[0]={}
-function get_stack_level(is_v)
+function get_stack_level()
local i = tex.getcount('ltj@@stack')
local j = tex.currentgrouplevel
if j > tex.getcount('ltj@@group@level') then
local gd = tex.globaldefs
if gd~=0 then tex.globaldefs = 0 end
-- 'tex.globaldefs = 0' is local even if \globaldefs > 0.
- tex.setcount('ltj@@group@level', j)
+ setcount('ltj@@group@level', 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] = table.fastcopy(charprop_stack_table[i-1])
- tex.setcount('ltj@@stack', i)
+ charprop_stack_table[i] = fastcopy(charprop_stack_table[i-1])
+ setcount('ltj@@stack', i)
if gd~=0 then tex.globaldefs = gd end
- if is_v or tex.nest[tex.nest.ptr].mode == hmode or
- tex.nest[tex.nest.ptr].mode == -hmode then
+ if tex.nest[tex.nest.ptr].mode == -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
return i
end
-function set_stack_table(m,p, is_v)
- local i = get_stack_level(is_v)
+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
local set_stack_table = set_stack_table
-- EXT
-function set_stack_perchar(m,c,p,lb,ub)
- if type(p)~='number' or p<lb or p>ub then
+function set_stack_perchar(m,lb,ub, getter)
+ local c = scan_int()
+ scan_keyword(',')
+ local p = tonumber((getter or scan_int)())
+ if p<lb or p>ub then
ltjb.package_error('luatexja',
"invalid code (".. tostring(p) .. ")",
"The code should in the range "..tostring(lb) .. '..' ..
set_stack_table(m+c, p)
end
--- EXT: store \ltj@tempskipa
+-- EXT: sp: glue_spec
function set_stack_skip(m,sp)
local i = get_stack_level()
if not sp then return end
end
-- These three functions are used in ltj-jfmglue.lua.
+-- list_dir and orig_char_table are used in other lua files.
+orig_char_table = {}
+list_dir = nil -- dummy
+table_current_stack = nil -- dummy
function report_stack_level(bsl)
table_current_stack = charprop_stack_table[bsl]
return bsl
end
---------------------------------------------------------------------------------
--- nest table (obeys TeX's semantic nest)
---------------------------------------------------------------------------------
-nest_table = {}
-local nest_table = nest_table
-
-
-- EOF