[alias] Fix argument consumption, allow multiple usage of same var

This commit is contained in:
Max 2015-10-07 00:14:37 +01:00
commit e1310516fa

View file

@ -114,7 +114,7 @@ def set_variable(name, value, creator):
context.save() context.save()
def replace_variables(cnt, msg=None): def replace_variables(cnts, msg=None):
"""Replace variables contained in the content """Replace variables contained in the content
Arguments: Arguments:
@ -122,34 +122,39 @@ def replace_variables(cnt, msg=None):
msg -- optional message where pick some variables msg -- optional message where pick some variables
""" """
if isinstance(cnt, list):
return [replace_variables(c, msg) for c in cnt]
unsetCnt = list() unsetCnt = list()
for res in re.findall("\\$\{(?P<name>[a-zA-Z0-9:]+)\}", cnt): if not isinstance(cnts, list):
rv = re.match("([0-9]+)(:([0-9]*))?", res) cnts = list(cnts)
if rv is not None: resultCnt = list()
varI = int(rv.group(1)) - 1
if varI > len(msg.args): for cnt in cnts:
cnt = cnt.replace("${%s}" % res, "", 1) for res in re.findall("\\$\{(?P<name>[a-zA-Z0-9:]+)\}", cnt):
elif rv.group(2) is not None: rv = re.match("([0-9]+)(:([0-9]*))?", res)
if rv.group(3) is not None and len(rv.group(3)): if rv is not None:
varJ = int(rv.group(3)) - 1 varI = int(rv.group(1)) - 1
cnt = cnt.replace("${%s}" % res, " ".join(msg.args[varI:varJ]), 1) if varI > len(msg.args):
for v in range(varI, varJ): cnt = cnt.replace("${%s}" % res, "", 1)
unsetCnt.append(v) elif rv.group(2) is not None:
if rv.group(3) is not None and len(rv.group(3)):
varJ = int(rv.group(3)) - 1
cnt = cnt.replace("${%s}" % res, " ".join(msg.args[varI:varJ]), 1)
for v in range(varI, varJ):
unsetCnt.append(v)
else:
cnt = cnt.replace("${%s}" % res, " ".join(msg.args[varI:]), 1)
for v in range(varI, len(msg.args)):
unsetCnt.append(v)
else: else:
cnt = cnt.replace("${%s}" % res, " ".join(msg.args[varI:]), 1) cnt = cnt.replace("${%s}" % res, msg.args[varI], 1)
for v in range(varI, len(msg.args)): unsetCnt.append(varI)
unsetCnt.append(v)
else: else:
cnt = cnt.replace("${%s}" % res, msg.args[varI], 1) cnt = cnt.replace("${%s}" % res, get_variable(res), 1)
unsetCnt.append(varI) resultCnt.append(cnt)
else:
cnt = cnt.replace("${%s}" % res, get_variable(res), 1) for u in sorted(set(unsetCnt), reverse=True):
for u in sorted(unsetCnt, reverse=True): k = msg.args.pop(u)
msg.args.pop(u)
return cnt return resultCnt
# MODULE INTERFACE #################################################### # MODULE INTERFACE ####################################################