summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-03-26 13:49:12 +0000
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-03-26 13:49:12 +0000
commitc1692d5041610918d405afc3ce1f873021773e6b (patch)
treea56c7e1e597a6acea87357dc554d25f3c64ad33b
parentc9907fd803223dec61c59fcd31704818088a567a (diff)
downloadawall-c1692d5041610918d405afc3ce1f873021773e6b.tar.bz2
awall-c1692d5041610918d405afc3ce1f873021773e6b.tar.xz
string concatenation support in variable expansion
-rw-r--r--awall/init.lua19
1 files changed, 14 insertions, 5 deletions
diff --git a/awall/init.lua b/awall/init.lua
index f497e6c..4007a61 100644
--- a/awall/init.lua
+++ b/awall/init.lua
@@ -74,16 +74,25 @@ function Config:init(confdirs)
local visited = {}
local val = v
- while type(val) == 'string' and string.sub(val, 1, 1) == '$' do
- local name = string.sub(val, 2, -1)
+ local pattern = '%$(%a[%w_]*)'
+
+ while type(val) == 'string' and string.find(val, pattern) do
+ local si, ei, name = string.find(val, pattern)
if util.contains(visited, name) then
error('Circular variable definition: '..name)
end
table.insert(visited, name)
-
- val = self.input.variable[name]
- if not val then error('Invalid variable reference: '..name) end
+
+ local var = self.input.variable[name]
+ if not var then error('Invalid variable reference: '..name) end
+
+ if si == 1 and ei == string.len(val) then val = var
+ elseif util.contains({'number', 'string'}, type(var)) then
+ val = string.sub(val, 1, si - 1)..var..string.sub(val, ei + 1, -1)
+ else
+ error('Attempted to concatenate complex variable: '..name)
+ end
end
obj[k] = val