diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2012-03-26 13:49:12 +0000 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2012-03-26 13:49:12 +0000 |
commit | c1692d5041610918d405afc3ce1f873021773e6b (patch) | |
tree | a56c7e1e597a6acea87357dc554d25f3c64ad33b | |
parent | c9907fd803223dec61c59fcd31704818088a567a (diff) | |
download | awall-c1692d5041610918d405afc3ce1f873021773e6b.tar.bz2 awall-c1692d5041610918d405afc3ce1f873021773e6b.tar.xz |
string concatenation support in variable expansion
-rw-r--r-- | awall/init.lua | 19 |
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 |