summaryrefslogtreecommitdiff
path: root/luatexbase-mcb.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'luatexbase-mcb.dtx')
-rw-r--r--luatexbase-mcb.dtx164
1 files changed, 163 insertions, 1 deletions
diff --git a/luatexbase-mcb.dtx b/luatexbase-mcb.dtx
index 58099d7..39551eb 100644
--- a/luatexbase-mcb.dtx
+++ b/luatexbase-mcb.dtx
@@ -53,6 +53,7 @@ See source file '\inFileName' for details.
\usedir{doc/luatex/luatexbase}%
\file{test-mcb-plain.tex}{\from{luatexbase-mcb.dtx}{testplain}}%
\file{test-mcb-latex.tex}{\from{luatexbase-mcb.dtx}{testlatex}}%
+ \file{test-mcb-aux.tex}{\from{luatexbase-mcb.dtx}{testaux}}%
}
\def\MetaPrefix{-- }
@@ -434,7 +435,7 @@ local callbacktypes = callbacktypes or {
stop_run = simple,
hyphenate = simple,
ligaturing = simple,
- kerning = data,
+ kerning = data, -- FIXME
find_write_file = first,
find_read_file = first,
find_vf_file = data,
@@ -876,6 +877,107 @@ luatexbase.reset_callback("fooback")
luatexbase.call_callback("fooback", "default")
% \end{macrocode}
%
+% Now, we want to make each handler run at least once. So, define dummy
+% functions and register them in various callbacks. We will make sure the
+% callbacks are executed on the \tex end. Also, we want to check that
+% everything works when we unload the functions either one by one, or using
+% reset.
+%
+% A |list| callback.
+%
+% \begin{macrocode}
+function add_hpack_filter()
+ luatexbase.add_to_callback('hpack_filter', function(head, ...)
+ texio.write_nl("I'm a dummy hpack_filter")
+ return head
+ end,
+ 'dummy hpack filter')
+ luatexbase.add_to_callback('hpack_filter', function(head, ...)
+ texio.write_nl("I'm an optimized dummy hpack_filter")
+ return true
+ end,
+ 'optimized dummy hpack filter')
+end
+function rm_one_hpack_filter()
+ luatexbase.remove_from_callback('hpack_filter', 'dummy hpack filter')
+end
+function rm_two_hpack_filter()
+ luatexbase.remove_from_callback('hpack_filter',
+ 'optimized dummy hpack filter')
+end
+% \end{macrocode}
+%
+% A |simple| callback.
+%
+% \begin{macrocode}
+function add_hyphenate()
+ luatexbase.add_to_callback('hyphenate', function(head, tail)
+ texio.write_nl("I'm a dummy hyphenate")
+ end,
+ 'dummy hyphenate')
+ luatexbase.add_to_callback('hyphenate', function(head, tail)
+ texio.write_nl("I'm an other dummy hyphenate")
+ end,
+ 'other dummy hyphenate')
+end
+function rm_one_hyphenate()
+ luatexbase.remove_from_callback('hyphenate', 'dummy hyphenate')
+end
+function rm_two_hyphenate()
+ luatexbase.remove_from_callback('hyphenate', 'other dummy hyphenate')
+end
+% \end{macrocode}
+%
+% A |first| callback.
+%
+% \begin{macrocode}
+function add_find_write_file()
+ luatexbase.add_to_callback('find_write_file', function(id, name)
+ texio.write_nl("I'm a dummy find_write_file")
+ return "dummy-"..name
+ end,
+ 'dummy find_write_file')
+ luatexbase.add_to_callback('find_write_file', function(id, name)
+ texio.write_nl("I'm an other dummy find_write_file")
+ return "dummy-other-"..name
+ end,
+ 'other dummy find_write_file')
+end
+function rm_one_find_write_file()
+ luatexbase.remove_from_callback('find_write_file',
+ 'dummy find_write_file')
+end
+function rm_two_find_write_file()
+ luatexbase.remove_from_callback('find_write_file',
+ 'other dummy find_write_file')
+end
+% \end{macrocode}
+%
+% A |data| callback.
+%
+% \begin{macrocode}
+function add_process_input_buffer()
+ luatexbase.add_to_callback('process_input_buffer', function(buffer)
+ texio.write_nl("I'm a dummy process_input_buffer")
+ return buffer.."\\msg{dummy}"
+ end,
+ 'dummy process_input_buffer')
+ luatexbase.add_to_callback('process_input_buffer', function(buffer)
+ texio.write_nl("I'm an other dummy process_input_buffer")
+ return buffer.."\\msg{otherdummy}"
+ end,
+ 'other dummy process_input_buffer')
+end
+function rm_one_process_input_buffer()
+ luatexbase.remove_from_callback('process_input_buffer',
+ 'dummy process_input_buffer')
+end
+function rm_two_process_input_buffer()
+ luatexbase.remove_from_callback('process_input_buffer',
+ 'other dummy process_input_buffer')
+end
+% \end{macrocode}
+%
% \begin{macrocode}
%</testlua>
% \end{macrocode}
@@ -885,7 +987,67 @@ luatexbase.call_callback("fooback", "default")
%<testlatex>\RequirePackage{luatexbase-mcb}
%<*testplain,testlatex>
\catcode 64 11
+\def\msg{\immediate\write16}
+\msg{===== BEGIN =====}
+% \end{macrocode}
+%
+% Loading the lua files tests that the management functions can be called
+% without raising errors.
+%
+% \begin{macrocode}
\luatexbase@directlua{dofile('test-mcb.lua')}
+% \end{macrocode}
+%
+% We now want to load and unload stuff from the various callbacks have them
+% called to test the handlers. Here is a helper macro for that.
+%
+% \begin{macrocode}
+\def\test#1{%
+ \msg{^^J*****^^J* Testing #1^^J*****}
+ \msg{* Add two functions}
+ \luatexbase@directlua{add_#1()}
+ \csname test_#1\endcsname
+ \msg{* Remove one}
+ \luatexbase@directlua{rm_one_#1()}
+ \csname test_#1\endcsname
+ \msg{* Remove the second}
+ \luatexbase@directlua{rm_two_#1()}
+ \csname test_#1\endcsname
+ \msg{* Add two functions again}
+ \luatexbase@directlua{add_#1()}
+ \csname test_#1\endcsname
+ \msg{* Remove all functions}
+ \luatexbase@directlua{luatexbase.reset_callback("#1")}
+ \csname test_#1\endcsname
+}
+% \end{macrocode}
+%
+% For each callback, we need a specific macro that triggers it. For the
+% hyphenate test, we need to untrap |\everypar| first, in the \latex case.
+%
+% \begin{macrocode}
+\catcode`\_ 11
+%<testlatex>\everypar{}
+\def\test_hpack_filter{\setbox0=\hbox{bla}}
+\def\test_hyphenate{\setbox0=\vbox{\hsize\z@ blablabla}}
+\def\test_find_write_file{\immediate\openout15 test-mcb-out.log}
+\def\test_process_input_buffer{\input test-mcb-aux.tex}
+%<testaux>\relax
+% \end{macrocode}
+%
+% Now actually test them
+%
+% \begin{macrocode}
+\test{hpack_filter}
+\test{hyphenate}
+\test{find_write_file}
+\test{process_input_buffer}
+% \end{macrocode}
+%
+% Done.
+%
+% \begin{macrocode}
+\msg{===== END =====}
%</testplain,testlatex>
%<testplain>\bye
%<testlatex>\stop