scansion/helpers.lua

Thu, 23 Mar 2023 15:13:14 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 23 Mar 2023 15:13:14 +0000
changeset 175
e48074386468
parent 173
14ed4cb241f4
child 178
e547ddf8b64d
permissions
-rw-r--r--

client: Tell Verse that stanzas are "handled"

This should prevent automatic error bounces for iqs, for example.

local function filter_expression(script, s)
	local expr = s:match("^%$%{(.+)%}$");
	if not expr then return s end
	if script.captures and script.captures[expr] then
		return script.captures[expr];
	end
	local name, value_name = expr:match("^(.+)'s (.+)$");
	assert(name, "Unable to parse expression: "..expr);
	local key = value_name:lower():gsub(" ", "_");
	assert(script.objects[name], "Unknown object called "..name);
	local value = script.objects[name][key];
	assert(value ~= nil, "Unknown attribute (of "..name.."): "..value_name);
	return value;
end

local function fill_vars(script, stanza)
	for k, v in pairs(stanza.attr) do
		stanza.attr[k] = filter_expression(script, v);
	end
	for i, child in ipairs(stanza) do
		if type(child) == "string" then
			stanza[i] = filter_expression(script, child);
		elseif type(child) == "table" then
			fill_vars(script, child);
		end
	end
	return stanza;
end

return {
	filter_expression = filter_expression;
	fill_vars = fill_vars;
};

mercurial