From 8a03ef16f0821bc20895c680b246ead3eafa0d44 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 2 Oct 2015 22:14:52 +0000 Subject: luatexbase (2oct15) git-svn-id: svn://tug.org/texlive/trunk@38530 c570f23f-e606-0410-a88d-b1316a301751 --- .../doc/luatex/luatexbase/luatexbase.pdf | Bin 261642 -> 262576 bytes .../source/luatex/luatexbase/luatexbase.dtx | 74 ++++++++++++++++----- .../tex/luatex/luatexbase/luatexbase-attr.sty | 2 +- .../tex/luatex/luatexbase/luatexbase-cctb.sty | 2 +- .../tex/luatex/luatexbase/luatexbase-compat.sty | 2 +- .../tex/luatex/luatexbase/luatexbase-loader.sty | 2 +- .../tex/luatex/luatexbase/luatexbase-mcb.sty | 2 +- .../tex/luatex/luatexbase/luatexbase-modutils.sty | 2 +- .../tex/luatex/luatexbase/luatexbase-regs.sty | 2 +- .../tex/luatex/luatexbase/luatexbase.sty | 32 ++++++--- 10 files changed, 87 insertions(+), 33 deletions(-) diff --git a/Master/texmf-dist/doc/luatex/luatexbase/luatexbase.pdf b/Master/texmf-dist/doc/luatex/luatexbase/luatexbase.pdf index bec42aeb82a..c3afdfde4e5 100644 Binary files a/Master/texmf-dist/doc/luatex/luatexbase/luatexbase.pdf and b/Master/texmf-dist/doc/luatex/luatexbase/luatexbase.pdf differ diff --git a/Master/texmf-dist/source/luatex/luatexbase/luatexbase.dtx b/Master/texmf-dist/source/luatex/luatexbase/luatexbase.dtx index cf894672d23..9e1c907cd3c 100644 --- a/Master/texmf-dist/source/luatex/luatexbase/luatexbase.dtx +++ b/Master/texmf-dist/source/luatex/luatexbase/luatexbase.dtx @@ -30,7 +30,7 @@ \ProvidesFile{luatexbase.dtx} % %<*tex,sty> -[2015/10/01 v1.0 +[2015/10/02 v1.1 % % luatexbase interface to LuaTeX % luatexbase interface to LuaTeX (legacy subpackage) @@ -205,20 +205,19 @@ % % \noindent % \DescribeMacro{add\_to\_callback}\meta{name}\meta{function}\meta{description}\meta{priority}\\% -% This function is mostly unchanged from the kernel-level +% This function is defined as a wraper around the kernel-level % implementation, which does not have the fourth \meta{priority} -% argument. The priority argument is ignored except for one case: +% argument. +% % If multiple callbacks are registered to a callback of type % \textsf{exclusive} then \textsf{ltluatex} raises an error, but % here it is allowed if \texttt{priority} is $1$, in which case the % \verb|reset_callback| is first called to remove the existing -% callback. This makes the use more comatible with the ``first'' -% callbacktype implemented in the original \textsf{luatexbase}, which -% executed (only) the first fuction in a callback list. +% callback. % -% As noted above -% the kernel code offers more explicit control over the order of -% functions in a callback list when required. +% In general the \texttt{priority} argument is implemented by +% temporarily removing some callbacks from the list and replacing +% them after having added the new callback. % % \noindent % \DescribeMacro{create\_callback}\meta{name}\meta{type}\meta{default}\\% @@ -432,18 +431,59 @@ end % % Allow exclusive callbacks to be over-written if priority argument is % 1 to match the ``first'' semantics of the original package. +% \changes{v1.1}{2015/10/02}{Fully handle priority argument} +% +% First save the kernel function. % \begin{macrocode} luatexbase.base_add_to_callback=luatexbase.add_to_callback +% \end{macrocode} +% +% Implement the priority argument by taking off existing callbacks +% that have higher priority than the new one, adding the new one, +% Then putting the saved callbacks back. +% \begin{macrocode} function luatexbase.add_to_callback(name,fun,description,priority) -if(luatexbase.callbacktypes[name] == 3 and - priority == 1 and - \string#luatexbase.callback_descriptions(name)==1) then - luatexbase.module_warning("luatexbase", - "resetting exclusive callback: " .. name) - luatexbase.reset_callback(name) -end -return +% \end{macrocode} +%^^A texio.write_nl('\string\n HERE: adding ' .. +%^^A description .. +%^^A ' to ' .. +%^^A name .. +%^^A ' with priority ' .. +%^^A (priority or '@@@')) +%^^A texio.write_nl('Original list') +%^^A for k,v in pairs(luatexbase.callback_descriptions(name)) do +%^^A texio.write_nl(' ' .. k .. ': ' .. v) +%^^A end +% \begin{macrocode} + local priority= priority + if priority==nil then + priority=\string#luatexbase.callback_descriptions(name)+1 + end + if(luatexbase.callbacktypes[name] == 3 and + priority == 1 and + \string#luatexbase.callback_descriptions(name)==1) then + luatexbase.module_warning("luatexbase", + "resetting exclusive callback: " .. name) + luatexbase.reset_callback(name) + end + local saved_callback={},ff,dd + for k,v in pairs(luatexbase.callback_descriptions(name)) do + if k >= priority then + ff,dd= luatexbase.remove_from_callback(name, v) + saved_callback[k]={ff,dd} + end + end luatexbase.base_add_to_callback(name,fun,description) + for k,v in pairs(saved_callback) do + luatexbase.base_add_to_callback(name,v[1],v[2]) + end +% \end{macrocode} +%^^A texio.write_nl('New list') +%^^A for k,v in pairs(luatexbase.callback_descriptions(name)) do +%^^A texio.write_nl(' ' .. k .. ': ' .. v) +%^^A end +% \begin{macrocode} + return end % \end{macrocode} % diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-attr.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-attr.sty index ac46ebea69f..d511a7199c7 100644 --- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-attr.sty +++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-attr.sty @@ -4,7 +4,7 @@ #1#2[#3]{\endgroup\immediate\write-1{Package: #1 #3}} \fi \ProvidesPackage{luatexbase-attr} -[2015/10/01 v1.0 +[2015/10/02 v1.1 luatexbase interface to LuaTeX (legacy subpackage) ] \ifx\RequirePackage\undefined diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-cctb.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-cctb.sty index 098c6442667..a677bf5d025 100644 --- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-cctb.sty +++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-cctb.sty @@ -4,7 +4,7 @@ #1#2[#3]{\endgroup\immediate\write-1{Package: #1 #3}} \fi \ProvidesPackage{luatexbase-cctb} -[2015/10/01 v1.0 +[2015/10/02 v1.1 luatexbase interface to LuaTeX (legacy subpackage) ] \ifx\RequirePackage\undefined diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-compat.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-compat.sty index 42fe852fc12..2423d5dd5ec 100644 --- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-compat.sty +++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-compat.sty @@ -4,7 +4,7 @@ #1#2[#3]{\endgroup\immediate\write-1{Package: #1 #3}} \fi \ProvidesPackage{luatexbase-compat} -[2015/10/01 v1.0 +[2015/10/02 v1.1 luatexbase interface to LuaTeX (legacy subpackage) ] \ifx\RequirePackage\undefined diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-loader.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-loader.sty index 0f58870b475..f02f10d868b 100644 --- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-loader.sty +++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-loader.sty @@ -4,7 +4,7 @@ #1#2[#3]{\endgroup\immediate\write-1{Package: #1 #3}} \fi \ProvidesPackage{luatexbase-loader} -[2015/10/01 v1.0 +[2015/10/02 v1.1 luatexbase interface to LuaTeX (legacy subpackage) ] \ifx\RequirePackage\undefined diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-mcb.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-mcb.sty index 5defd977263..45a44b22d61 100644 --- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-mcb.sty +++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-mcb.sty @@ -4,7 +4,7 @@ #1#2[#3]{\endgroup\immediate\write-1{Package: #1 #3}} \fi \ProvidesPackage{luatexbase-mcb} -[2015/10/01 v1.0 +[2015/10/02 v1.1 luatexbase interface to LuaTeX (legacy subpackage) ] \ifx\RequirePackage\undefined diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-modutils.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-modutils.sty index cd6cb4d0e6c..908dc1fe983 100644 --- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-modutils.sty +++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-modutils.sty @@ -4,7 +4,7 @@ #1#2[#3]{\endgroup\immediate\write-1{Package: #1 #3}} \fi \ProvidesPackage{luatexbase-modutils} -[2015/10/01 v1.0 +[2015/10/02 v1.1 luatexbase interface to LuaTeX (legacy subpackage) ] \ifx\RequirePackage\undefined diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-regs.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-regs.sty index 53e03cc877d..7e0207c20ec 100644 --- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-regs.sty +++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-regs.sty @@ -4,7 +4,7 @@ #1#2[#3]{\endgroup\immediate\write-1{Package: #1 #3}} \fi \ProvidesPackage{luatexbase-regs} -[2015/10/01 v1.0 +[2015/10/02 v1.1 luatexbase interface to LuaTeX (legacy subpackage) ] \ifx\RequirePackage\undefined diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase.sty index bc985aab9ab..8581588df51 100644 --- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase.sty +++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase.sty @@ -5,7 +5,7 @@ #1#2[#3]{\endgroup\immediate\write-1{Package: #1 #3}} \fi \ProvidesPackage{luatexbase} -[2015/10/01 v1.0 +[2015/10/02 v1.1 luatexbase interface to LuaTeX ] \edef\emuatcatcode{\the\catcode`\@} @@ -62,15 +62,29 @@ function luatexbase.reset_callback(name,make_false) end luatexbase.base_add_to_callback=luatexbase.add_to_callback function luatexbase.add_to_callback(name,fun,description,priority) -if(luatexbase.callbacktypes[name] == 3 and - priority == 1 and - \string#luatexbase.callback_descriptions(name)==1) then - luatexbase.module_warning("luatexbase", - "resetting exclusive callback: " .. name) - luatexbase.reset_callback(name) -end -return + local priority= priority + if priority==nil then + priority=\string#luatexbase.callback_descriptions(name)+1 + end + if(luatexbase.callbacktypes[name] == 3 and + priority == 1 and + \string#luatexbase.callback_descriptions(name)==1) then + luatexbase.module_warning("luatexbase", + "resetting exclusive callback: " .. name) + luatexbase.reset_callback(name) + end + local saved_callback={},ff,dd + for k,v in pairs(luatexbase.callback_descriptions(name)) do + if k >= priority then + ff,dd= luatexbase.remove_from_callback(name, v) + saved_callback[k]={ff,dd} + end + end luatexbase.base_add_to_callback(name,fun,description) + for k,v in pairs(saved_callback) do + luatexbase.base_add_to_callback(name,v[1],v[2]) + end + return end luatexbase.catcodetables=setmetatable( {['latex-package'] = \number\CatcodeTableLaTeXAtLetter, -- cgit v1.2.3