scansion/helpers.lua

changeset 171
433a1f36d0d3
child 173
14ed4cb241f4
equal deleted inserted replaced
170:db73c4c317ce 171:433a1f36d0d3
1 local function filter_expression(script, s)
2 local expr = s:match("^%$%{(.+)%}$");
3 if not expr then return s end
4 local name, value_name = expr:match("^(.+)'s (.+)$");
5 assert(name, "Unable to parse expression: "..expr);
6 local key = value_name:lower():gsub(" ", "_");
7 assert(script.objects[name], "Unknown object called "..name);
8 local value = script.objects[name][key];
9 assert(value ~= nil, "Unknown attribute (of "..name.."): "..value_name);
10 return value;
11 end
12
13 local function fill_vars(script, stanza)
14 for k, v in pairs(stanza.attr) do
15 stanza.attr[k] = filter_expression(script, v);
16 end
17 for i, child in ipairs(stanza) do
18 if type(child) == "string" then
19 stanza[i] = filter_expression(script, child);
20 elseif type(child) == "table" then
21 fill_vars(script, child);
22 end
23 end
24 return stanza;
25 end
26
27 return {
28 filter_expression = filter_expression;
29 fill_vars = fill_vars;
30 };

mercurial