diff options
author | Elie Roux <elie.roux@telecom-bretagne.eu> | 2013-11-29 06:31:16 -0800 |
---|---|---|
committer | Elie Roux <elie.roux@telecom-bretagne.eu> | 2013-11-29 06:31:16 -0800 |
commit | e6f2ee928f26781bc8cd97f6febf365a90dd19fc (patch) | |
tree | 22748eac020382b4f9bca4f73894770deebb04a1 | |
parent | f09c1af734e78bc7986f3cac022befa76c09871e (diff) | |
parent | c277244a226831be412432355829a8c0f4e65008 (diff) | |
download | luatexbase-e6f2ee928f26781bc8cd97f6febf365a90dd19fc.tar.gz |
Merge pull request #18 from phi-gamma/master
address issue #17
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | luatexbase-attr.dtx | 6 | ||||
-rw-r--r-- | luatexbase-mcb.dtx | 74 |
3 files changed, 79 insertions, 5 deletions
@@ -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} |