Hello David, > I put a comment in github but I think that this fixes the issue (using > ipairs rather than pairs in add_to_callback so the list is constituted > in the right order) Below I redefine add_to_callback in the test file > but if you locally edit luatexbase.sty with that definition and could > confirm it works on your original files, we will push an update to > ctan, thanks again.
This works as expected, thank you! Regards Hironori KITAGAWA <[email protected]> On Wed, 3 Feb 2016 10:12:26 +0000 David Carlisle <[email protected]> wrote: > I put a comment in github but I think that this fixes the issue (using > ipairs rather than pairs in add_to_callback so the list is constituted > in the right order) Below I redefine add_to_callback in the test file > but if you locally edit luatexbase.sty with that definition and could > confirm it works on your original files, we will push an update to > ctan, thanks again. > > > > \batchmode > \input luatexbase.sty > \directlua{ > function luatexbase.add_to_callback(name,fun,description,priority) > local priority= priority > local len=\string#luatexbase.callback_descriptions(name) > if (priority==nil) then > priority=len+1 > end > if(luatexbase.callbacktypes[name] == 3 and > priority == 1 and > len==1) then > luatexbase.module_warning("luatexbase", > "resetting exclusive callback: " .. name) > luatexbase.reset_callback(name) > end > local saved_callback={},ff,dd > for k,v in ipairs(luatexbase.callback_descriptions(name)) do > if k >= priority then > ff,dd= luatexbase.remove_from_callback(name, v) > saved_callback[1+k-priority]={ff,dd} > end > end > luatexbase.base_add_to_callback(name,fun,description) > for k,v in ipairs(saved_callback) do > luatexbase.base_add_to_callback(name,v[1],v[2]) > end > return > end > } > \scrollmode\catcode`\_=12 > > \directlua{ > luatexbase.create_callback('test', 'data', function(n) return n end) > local fn = {} > for n=1,20 do > fn[n] = function() > texio.write(tostring(n) .. ', '); return 1 > end > luatexbase.add_to_callback('test', fn[n], n, n) > end > luatexbase.call_callback('test', 0) > texio.write_nl('') > for i=1,300 do > local n = math.random(20) > luatexbase.remove_from_callback('test', n) % remove fn[n] > luatexbase.add_to_callback('test', fn[n], n, n) > end > texio.write_nl('') > luatexbase.call_callback('test', 0) > } > > \batchmode\bye
