diff -r b1d7a274d250 -r b2036129ccd0 scansion/objects/client.lua --- 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);