<commit_before>require "fritomod/ListenerList";

Rainback = Rainback or {};

local listeners = ListenerList:New();

function Rainback.DispatchEvent(event, ...)
    listeners:Fire(event, ...);
end;

function Rainback.OnEvent(func, ...)
    return listeners:Add(func, ...);
end;<commit_msg>Added OnNamedEvent for convenience<commit_after>require "fritomod/ListenerList";

Rainback = Rainback or {};

local listeners = ListenerList:New();

function Rainback.DispatchEvent(event, ...)
    listeners:Fire(event, ...);
end;

function Rainback.OnEvent(func, ...)
    return listeners:Add(func, ...);
end;

function Rainback.OnNamedEvent(name, func, ...)
    func = Curry(func, ...);

    return Rainback.OnEvent(function(eventName, ...)
        if eventName == name then
            func(...);
        end;
    end);
end;
{'fraction_non_alphanumeric': 0.16216216216216217, 'fraction_numerical': 0.0, 'mean_word_length': 3.5277777777777777, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '468091', 'n_tokens_mistral': 259, 'n_tokens_neox': 247, 'n_words': 51}