if a<-10000 then a = -10000 elseif a>10000 then a = 10000 end
p.penalty = a
head = node_insert_before(head, Np.first, p)
- Bp[1] = p; set_attr(p, attr_icflag, KINSOKU)
+ table_insert(Bp, p); set_attr(p, attr_icflag, KINSOKU)
end
else for i, v in pairs(Bp) do add_penalty(v,a) end
end
if a<-10000 then a = -10000 elseif a>10000 then a = 10000 end
p.penalty = a
head = node_insert_before(head, Np.first, p)
- Bp[1] = p; set_attr(p, attr_icflag, KINSOKU)
+ table_insert(Bp, p); set_attr(p, attr_icflag, KINSOKU)
end
else for i, v in pairs(Bp) do add_penalty(v,a) end
end
if g and g.id==id_glue then
local p = node_new(id_penalty)
p.penalty = 10000; head = node_insert_before(head, Np.first, p)
- Bp[1] = p; set_attr(p, attr_icflag, KINSOKU)
+ table_insert(Bp, p); set_attr(p, attr_icflag, KINSOKU)
end
else for i, v in pairs(Bp) do add_penalty(v,a) end
end
local id_whatsit = node.id('whatsit')
local sid_user = node.subtype('user_defined')
local hmode = 118 -- in luatexref-t.pdf, this must be 127
+local table_fastcopy = table.fastcopy
local charprop_stack_table={}; charprop_stack_table[0]={}
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])
+ charprop_stack_table[i] = table_fastcopy(charprop_stack_table[i-1])
tex.setcount('ltj@@stack', i)
if gd>0 then tex.globaldefs = gd end
if tex.nest[tex.nest.ptr].mode == hmode or
return i
end
+-- local function table_to_str(v)
+-- local s = ''
+-- for i, a in pairs(v) do
+-- s = s .. i .. "=" .. tostring(a) .. ', '
+-- end
+-- return s
+-- end
+-- function print_stack_table(i)
+-- print('\n>>> get_stack_level:')
+-- for k, v in pairs(charprop_stack_table[i]) do
+-- print(" " , k, type(k), table_to_str(v));
+-- end
+-- end
+
+
-- EXT
function set_stack_table(g,m,c,p,lb,ub)
local i = get_stack_level()
"(-1 is used for denoting `math boundary')",
'So I changed this one to zero.'})
c=0
- elseif not charprop_stack_table[i][c] then
- charprop_stack_table[i][c] = {}
+ elseif not charprop_stack_table[i][m] then
+ charprop_stack_table[i][m] = {}
end
- charprop_stack_table[i][c][m] = p
+ charprop_stack_table[i][m][c] = p
if g=='global' then
for j,v in pairs(charprop_stack_table) do
- if not charprop_stack_table[j][c] then charprop_stack_table[j][c] = {} end
- charprop_stack_table[j][c][m] = p
+ if not charprop_stack_table[j][m] then charprop_stack_table[j][m] = {} end
+ charprop_stack_table[j][m][c] = p
end
end
end
elseif not charprop_stack_table[i][c] then
charprop_stack_table[i][c] = {}
end
- charprop_stack_table[i][c][m] = p
+ charprop_stack_table[i][m][c] = p
if g=='global' then
for j,v in pairs(charprop_stack_table) do
- if not charprop_stack_table[j][c] then charprop_stack_table[j][c] = {} end
- charprop_stack_table[j][c][m] = p
+ if not charprop_stack_table[j][m] then charprop_stack_table[j][m] = {} end
+ charprop_stack_table[j][m][c] = p
end
end
end
-- EXT: store \ltj@tempskipa
-function set_stack_skip(g,c,sp)
+function set_stack_skip(g,m,sp)
local i = get_stack_level()
if not sp then return end
- if not charprop_stack_table[i][c] then
- charprop_stack_table[i][c] = {}
+ if not charprop_stack_table[i][m] then
+ charprop_stack_table[i][m] = {}
end
- charprop_stack_table[i][c].width = sp.width
- charprop_stack_table[i][c].stretch = sp.stretch
- charprop_stack_table[i][c].shrink = sp.shrink
- charprop_stack_table[i][c].stretch_order = sp.stretch_order
- charprop_stack_table[i][c].shrink_order = sp.shrink_order
+ 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 g=='global' then
for j,v in pairs(charprop_stack_table) do
- if not charprop_stack_table[j][c] then charprop_stack_table[j][c] = {} end
- charprop_stack_table[j][c].width = sp.width
- charprop_stack_table[j][c].stretch = sp.stretch
- charprop_stack_table[j][c].shrink = sp.shrink
- charprop_stack_table[j][c].stretch_order = sp.stretch_order
- charprop_stack_table[j][c].shrink_order = sp.shrink_order
+ 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
end
end
end
end
function get_penalty_table(m,c,d, idx)
- local i = charprop_stack_table[idx][c]
- if i then i=i[m] end
+ local i = charprop_stack_table[idx][m]
+ if i then i=i[c] end
return i or d
end