diff --git a/loaders/actions.lua b/loaders/actions.lua index 38637df..8e774e0 100644 --- a/loaders/actions.lua +++ b/loaders/actions.lua @@ -1,4 +1,6 @@ -actions_loader = { } +actions_loader = { + preprocessors = {} +} require("loaders.actions.mod") diff --git a/loaders/actions/add_preprocessor.lua b/loaders/actions/add_preprocessor.lua new file mode 100644 index 0000000..84a7ef2 --- /dev/null +++ b/loaders/actions/add_preprocessor.lua @@ -0,0 +1,3 @@ +function actions_loader.add_preprocessor(fn) + table.insert(actions_loader.preprocessors, fn) +end \ No newline at end of file diff --git a/loaders/actions/custom_require.lua b/loaders/actions/custom_require.lua index a9807d5..4452fdf 100644 --- a/loaders/actions/custom_require.lua +++ b/loaders/actions/custom_require.lua @@ -8,12 +8,10 @@ function actions_loader.custom_require(name) local file = io.open(filename, "rb") if file then local header = actions_loader.extract_header(modulepath) - - actions_loader.write_events(created_file, header) - actions_loader.set_priority(created_file, header) - actions_loader.write_input_parameters(created_file, header) - actions_loader.write_function(created_file, header, modulepath) - actions_loader.write_return(created_file, header) + + for _, fn in ipairs(actions_loader.preprocessors) do + fn(created_file, header, modulepath) + end created_file:close() -- Compile and return the module diff --git a/loaders/actions/mod.lua b/loaders/actions/mod.lua index 17d1238..2c20ea8 100644 --- a/loaders/actions/mod.lua +++ b/loaders/actions/mod.lua @@ -1,4 +1,5 @@ require("loaders.actions.custom_require") +require("loaders.actions.add_preprocessor") require("loaders.actions.extract_header") require("loaders.actions.write_events") require("loaders.actions.set_priority") diff --git a/loaders/actions/set_priority.lua b/loaders/actions/set_priority.lua index 708d305..fc4902e 100644 --- a/loaders/actions/set_priority.lua +++ b/loaders/actions/set_priority.lua @@ -1,3 +1,5 @@ -function actions_loader.set_priority (created_file, header) +function actions_loader.set_priority (created_file, header, modulepath) created_file:write("\nlocal priority = " .. header.priority .. " \n\n") end + +actions_loader.add_preprocessor(actions_loader.set_priority) \ No newline at end of file diff --git a/loaders/actions/write_events.lua b/loaders/actions/write_events.lua index ed95638..fbc4864 100644 --- a/loaders/actions/write_events.lua +++ b/loaders/actions/write_events.lua @@ -1,4 +1,4 @@ -function actions_loader.write_events (created_file, header) +function actions_loader.write_events (created_file, header, modulepath) created_file:write("local event = { \"" .. header.event[1] .. "\"") -- put values from yaml in lua form for _, yaml_event in ipairs(header.event) do if yaml_event ~= header.event[1] then @@ -7,3 +7,5 @@ function actions_loader.write_events (created_file, header) end created_file:write(" }") end + +actions_loader.add_preprocessor(actions_loader.write_events) \ No newline at end of file diff --git a/loaders/actions/write_function.lua b/loaders/actions/write_function.lua index def378d..132d7aa 100644 --- a/loaders/actions/write_function.lua +++ b/loaders/actions/write_function.lua @@ -12,3 +12,5 @@ function actions_loader.write_function (created_file, header, modulepath) end created_file:write("\nend") end + +actions_loader.add_preprocessor(actions_loader.write_function) \ No newline at end of file diff --git a/loaders/actions/write_input_parameters.lua b/loaders/actions/write_input_parameters.lua index 2963951..3843554 100644 --- a/loaders/actions/write_input_parameters.lua +++ b/loaders/actions/write_input_parameters.lua @@ -1,4 +1,4 @@ -function actions_loader.write_input_parameters (created_file, header) +function actions_loader.write_input_parameters (created_file, header, modulepath) if header.input_parameters[1] then created_file:write("local input_parameters = { " .. "\"" .. header.input_parameters[1] .. "\"") for k, v in pairs(header.input_parameters) do @@ -10,3 +10,5 @@ function actions_loader.write_input_parameters (created_file, header) created_file:write("}\n") end end + +actions_loader.add_preprocessor(actions_loader.write_input_parameters) \ No newline at end of file diff --git a/loaders/actions/write_return.lua b/loaders/actions/write_return.lua index 1da1169..44e045a 100644 --- a/loaders/actions/write_return.lua +++ b/loaders/actions/write_return.lua @@ -1,3 +1,5 @@ -function actions_loader.write_return (created_file, header) +function actions_loader.write_return (created_file, header, modulepath) created_file:write("\n\nreturn{\n\tevent = event,\n\taction = action,\n\tpriority = priority,\n\tinput_parameters = input_parameters\n}") -- ending return end + +actions_loader.add_preprocessor(actions_loader.write_return) \ No newline at end of file diff --git a/loaders/rules.lua b/loaders/rules.lua index cece8bb..12600c8 100644 --- a/loaders/rules.lua +++ b/loaders/rules.lua @@ -1,4 +1,6 @@ -rules_loader = { } +rules_loader = { + preprocessors = {} +} require("loaders.rules.mod") diff --git a/loaders/rules/add_preprocessor.lua b/loaders/rules/add_preprocessor.lua new file mode 100644 index 0000000..64d8f03 --- /dev/null +++ b/loaders/rules/add_preprocessor.lua @@ -0,0 +1,3 @@ +function rules_loader.add_preprocessor(fn) + table.insert(rules_loader.preprocessors, fn) +end \ No newline at end of file diff --git a/loaders/rules/custom_require.lua b/loaders/rules/custom_require.lua index 3750148..0e6952d 100644 --- a/loaders/rules/custom_require.lua +++ b/loaders/rules/custom_require.lua @@ -10,12 +10,16 @@ function rules_loader.custom_require(name) local header = rules_loader.extract_header(modulepath) local priority = header.priority or 1 - rules_loader.write_priority(created_file, header, priority) - rules_loader.write_events_table(created_file, header) - rules_loader.write_input_parameter(created_file, header) - rules_loader.write_rule_function(created_file, header, modulename, priority, modulepath) - rules_loader.write_get_events_parameters(created_file, header) - rules_loader.write_return(created_file, header) + -- rules_loader.write_priority(created_file, header, modulename, priority, modulepath) + -- rules_loader.write_events_table(created_file, header, modulename, priority, modulepath) + -- rules_loader.write_input_parameter(created_file, header, modulename, priority, modulepath) + -- rules_loader.write_rule_function(created_file, header, modulename, priority, modulepath) + -- rules_loader.write_get_events_parameters(created_file, header, modulename, priority, modulepath) + -- rules_loader.write_return(created_file, header, modulename, priority, modulepath) + + for _, fn in ipairs(rules_loader.preprocessors) do + fn(created_file, header, modulename, priority, modulepath) + end created_file:close() local to_compile = io.open("module.lua", "rb") diff --git a/loaders/rules/mod.lua b/loaders/rules/mod.lua index 80aaa02..fb7f298 100644 --- a/loaders/rules/mod.lua +++ b/loaders/rules/mod.lua @@ -1,4 +1,5 @@ require("loaders.rules.custom_require") +require("loaders.rules.add_preprocessor") require("loaders.rules.extract_header") require("loaders.rules.write_events_table") require("loaders.rules.write_priority") diff --git a/loaders/rules/write_events_table.lua b/loaders/rules/write_events_table.lua index 5eecf7b..487b7b0 100644 --- a/loaders/rules/write_events_table.lua +++ b/loaders/rules/write_events_table.lua @@ -1,4 +1,4 @@ -function rules_loader.write_events_table (created_file, header) +function rules_loader.write_events_table (created_file, header, modulename, priority, modulepath) created_file:write("\nlocal events_table = { " .. "\"" .. header.events_table[1] .. "\"") for k, v in pairs(header.events_table) do if k ~= 1 then @@ -7,3 +7,5 @@ function rules_loader.write_events_table (created_file, header) end created_file:write("}") end + +rules_loader.add_preprocessor(rules_loader.write_events_table) \ No newline at end of file diff --git a/loaders/rules/write_get_events_parameters.lua b/loaders/rules/write_get_events_parameters.lua index 5779c6c..1ff69a0 100644 --- a/loaders/rules/write_get_events_parameters.lua +++ b/loaders/rules/write_get_events_parameters.lua @@ -1,4 +1,4 @@ -function rules_loader.write_get_events_parameters (created_file, header) +function rules_loader.write_get_events_parameters (created_file, header, modulename, priority, modulepath) created_file:write("\nlocal function get_events_parameters(events_actions)") created_file:write("\n\tfor k, v in pairs(events_table) do") created_file:write("\n\t\tfor k1, v1 in pairs(events_actions[v]) do") @@ -11,3 +11,5 @@ function rules_loader.write_get_events_parameters (created_file, header) created_file:write("\n\tend") created_file:write("\nend") end + +rules_loader.add_preprocessor(rules_loader.write_get_events_parameters) \ No newline at end of file diff --git a/loaders/rules/write_input_parameter.lua b/loaders/rules/write_input_parameter.lua index 50b1f18..74c5ebb 100644 --- a/loaders/rules/write_input_parameter.lua +++ b/loaders/rules/write_input_parameter.lua @@ -1,3 +1,5 @@ -function rules_loader.write_input_parameter (created_file, header) +function rules_loader.write_input_parameter (created_file, header, modulename, priority, modulepath) created_file:write("\nlocal input_parameter = \"" .. header.input_parameter .. "\"") end + +rules_loader.add_preprocessor(rules_loader.write_input_parameter) \ No newline at end of file diff --git a/loaders/rules/write_priority.lua b/loaders/rules/write_priority.lua index 177fd03..2e5cc46 100644 --- a/loaders/rules/write_priority.lua +++ b/loaders/rules/write_priority.lua @@ -1,5 +1,7 @@ -function rules_loader.write_priority (created_file, header, priority) +function rules_loader.write_priority (created_file, header, modulename, priority, modulepath) if priority > 100 then priority = 100 end created_file:write("local priority = " .. priority) end + +rules_loader.add_preprocessor(rules_loader.write_priority) \ No newline at end of file diff --git a/loaders/rules/write_return.lua b/loaders/rules/write_return.lua index 5cc2af5..c456ee0 100644 --- a/loaders/rules/write_return.lua +++ b/loaders/rules/write_return.lua @@ -1,3 +1,5 @@ -function rules_loader.write_return (created_file, header) +function rules_loader.write_return (created_file, header, modulename, priority, modulepath) created_file:write("\nreturn{\n\trule = rule,\n\tpriority = priority,\n\tget_events_parameters = get_events_parameters\n}") end + +rules_loader.add_preprocessor(rules_loader.write_return) \ No newline at end of file diff --git a/loaders/rules/write_rule_function.lua b/loaders/rules/write_rule_function.lua index d96cd98..8876bb1 100644 --- a/loaders/rules/write_rule_function.lua +++ b/loaders/rules/write_rule_function.lua @@ -40,3 +40,5 @@ function rules_loader.write_rule_function (created_file, header, modulename, pri created_file:write("\n\tend") created_file:write("\nend\n") -- bottom rule function wrapper end + +rules_loader.add_preprocessor(rules_loader.write_rule_function) \ No newline at end of file