module "filters"
-local function initialize_session(session)
- local filters = {};
- session.filters = filters;
-
- function session.filter(type, data)
- local filter_list = filters[type];
- for i = 1, #filter_list do
- data = filter_list[i](data);
+local new_filter_hooks = {};
+
+function initialize(session)
+ if not session.filters then
+ local filters = {};
+ session.filters = filters;
+
+ function session.filter(type, data)
+ local filter_list = filters[type];
+ if filter_list then
+ for i = 1, #filter_list do
+ data = filter_list[i](data, session);
+ if data == nil then break; end
+ end
+ end
+ return data;
end
- return data;
end
+
+ for i=1,#new_filter_hooks do
+ new_filter_hooks[i](session);
+ end
+
+ return session.filter;
end
function add_filter(session, type, callback, priority)
if not session.filters then
- initialize_session(session);
+ initialize(session);
end
local filter_list = session.filters[type];
end
function remove_filter(session, type, callback)
+ if not session.filters then return; end
local filter_list = session.filters[type];
if filter_list and filter_list[callback] then
for i=1, #filter_list do
end
end
-return _M;
\ No newline at end of file
+function add_filter_hook(callback)
+ t_insert(new_filter_hooks, callback);
+end
+
+function remove_filter_hook(callback)
+ for i=1,#new_filter_hooks do
+ if new_filter_hooks[i] == callback then
+ t_remove(new_filter_hooks, i);
+ end
+ end
+end
+
+return _M;