summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElie Roux <elie.roux@telecom-bretagne.eu>2013-11-29 06:31:16 -0800
committerElie Roux <elie.roux@telecom-bretagne.eu>2013-11-29 06:31:16 -0800
commite6f2ee928f26781bc8cd97f6febf365a90dd19fc (patch)
tree22748eac020382b4f9bca4f73894770deebb04a1
parentf09c1af734e78bc7986f3cac022befa76c09871e (diff)
parentc277244a226831be412432355829a8c0f4e65008 (diff)
downloadluatexbase-e6f2ee928f26781bc8cd97f6febf365a90dd19fc.tar.gz
Merge pull request #18 from phi-gamma/master
address issue #17
-rw-r--r--NEWS4
-rw-r--r--luatexbase-attr.dtx6
-rw-r--r--luatexbase-mcb.dtx74
3 files changed, 79 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index bd9f4d1..94d91ef 100644
--- a/NEWS
+++ b/NEWS
@@ -1,9 +1,11 @@
Changes in the luatexbase package/bundle
-2013/06/08 v0.7
+2013/11/29 v0.7
mcb
- minor changes and more coherent behaviour
- refreshing the list of callbacks
+ - add two functions is_active_callback() and
+ callback_descriptions()
2013/05/11 v0.6
all
diff --git a/luatexbase-attr.dtx b/luatexbase-attr.dtx
index 5b7288f..4d2cf2a 100644
--- a/luatexbase-attr.dtx
+++ b/luatexbase-attr.dtx
@@ -391,9 +391,9 @@ local unset_attribute
local luatex_sty_counter = 'LuT@AllocAttribute'
if tex.count[luatex_sty_counter] then
if tex.count[luatex_sty_counter] > -1 then
- error("luatexbase error: attribute 0 has already been set by \newattribute"
- .."macro from luatex.sty, not belonging to this package, this makes"
- .."luaotfload unusable. Please report to the maintainer of luatex.sty")
+ error("luatexbase error: Attribute 0 has already been set by the \\newattribute "
+ .."macro from luatex.sty, not belonging to this package. This makes "
+ .."luaotfload unusable. Please report to the maintainer of luatex.sty.")
else
tex.count[luatex_sty_counter] = 0
end
diff --git a/luatexbase-mcb.dtx b/luatexbase-mcb.dtx
index d9fb995..df95170 100644
--- a/luatexbase-mcb.dtx
+++ b/luatexbase-mcb.dtx
@@ -862,7 +862,7 @@ luatexbase.create_callback = create_callback
% \end{macrocode}
%
% This function calls a callback. It can only call a callback created by
-% the \texttt{create} function.
+% the |create_callback| function.
%
% \begin{macrocode}
function call_callback(name, ...)
@@ -890,6 +890,74 @@ end
luatexbase.call_callback = call_callback
% \end{macrocode}
%
+% |is_active_callback| checks the activation state of a given
+% callback function. It is passed the description of the function
+% and the name of the callback it was registered under.
+%
+% The function raises an error if passed an invalid callback name
+% or if the name or the description is missing.
+% The return value is |true| iff the callback function is
+% registered, |false| otherwise.
+%
+% \begin{macrocode}
+--- string -> string -> bool
+luatexbase.is_active_callback = function (name, description)
+ if not name then
+ err ("unable to check for callback:\nno proper name passed")
+ return false
+ elseif not callbacktypes [name] then
+ err ("unable to check for callback %q:\nis not a valid callback", name)
+ return false
+ elseif not description then
+ err ("unable to check for callback %q:\nno description given", name)
+ return false
+ end
+ local lst = callbacklist [name]
+ if not lst then --- callback inactive, no functions registered
+ return false
+ end
+ for _, v in next, lst do
+ if v.description == description then --- success
+ return true
+ end
+ end
+ return false
+end
+% \end{macrocode}
+%
+% |callback_descriptions| returns a table containing all
+% descriptions of the functions registered for a given callback in
+% the order of their priority.
+%
+% The function raises an error if the callback name is missing or
+% invalid.
+% If there is no function registered for the callback, an empty
+% table is returned.
+%
+% \begin{macrocode}
+--- string -> string list option
+luatexbase.callback_descriptions = function (name)
+ if not name then
+ err ("unable to check for callback:\nno proper name passed")
+ return
+ elseif not callbacktypes [name] then
+ err ("unable to check for callback %q:\nis not a valid callback", name)
+ return
+ end
+ local lst = callbacklist [name]
+ local registered = { }
+ if lst then
+ for i = 1, #lst do
+ local itm = lst [i]
+ if i then
+ registered [i] = itm.description
+ end
+ end
+ end
+ return registered
+end
+% \end{macrocode}
+%
% That's all folks!
%
% \begin{macrocode}
@@ -913,13 +981,17 @@ local function sample(head,...)
return head, true
end
local prio = luatexbase.priority_in_callback
+local is_active = luatexbase.is_active_callback
msg("\n*********\n* Testing management functions\n*********")
luatexbase.add_to_callback("hpack_filter", sample, "sample one", 1)
luatexbase.add_to_callback("hpack_filter", sample, "sample two", 2)
luatexbase.add_to_callback("hpack_filter", sample, "sample three", 1)
assert(prio("hpack_filter", "sample three"))
+assert(is_active("hpack_filter", "sample three") == true)
+assert(#luatexbase.callback_descriptions("hpack_filter") == 3)
luatexbase.remove_from_callback("hpack_filter", "sample three")
assert(not prio("hpack_filter", "sample three"))
+assert(is_active("hpack_filter", "sample three") == false)
luatexbase.reset_callback("hpack_filter")
assert(not prio("hpack_filter", "sample one"))
% \end{macrocode}