scansion/objects/client.lua

changeset 37
b2036129ccd0
parent 34
946c7d13faac
child 38
68458d0c50a0
--- a/scansion/objects/client.lua	Tue Sep 22 23:54:07 2015 +0200
+++ b/scansion/objects/client.lua	Wed Sep 23 01:01:46 2015 +0200
@@ -7,18 +7,21 @@
 
 local stanzacmp = require "scansion.stanzacmp";
 
+local function filter_expression(script, s)
+	local expr = s:match("^%$%{(.+)%}$");
+	if not expr then return s 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
-		local expr = v:match("^%$%{(.+)%}$");
-		if expr then
-			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);
-			stanza.attr[k] = value;
-		end
+		stanza.attr[k] = filter_expression(script, v);
 	end
 	for _, child in ipairs(stanza.tags) do
 		fill_vars(script, child);

mercurial