diff options
Diffstat (limited to 'Tools/modulator/varsubst.py')
-rw-r--r-- | Tools/modulator/varsubst.py | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/Tools/modulator/varsubst.py b/Tools/modulator/varsubst.py index ec89fe3..06e9683 100644 --- a/Tools/modulator/varsubst.py +++ b/Tools/modulator/varsubst.py @@ -9,42 +9,42 @@ error = 'varsubst.error' class Varsubst: def __init__(self, dict): - self.dict = dict - self.prog = regex.compile('\$[a-zA-Z0-9_]*\$') - self.do_useindent = 0 + self.dict = dict + self.prog = regex.compile('\$[a-zA-Z0-9_]*\$') + self.do_useindent = 0 def useindent(self, onoff): - self.do_useindent = onoff - + self.do_useindent = onoff + def subst(self, str): - rv = '' - while 1: - pos = self.prog.search(str) - if pos < 0: - return rv + str - if pos: - rv = rv + str[:pos] - str = str[pos:] - len = self.prog.match(str) - if len == 2: - # Escaped dollar - rv = rv + '$' - str = str[2:] - continue - name = str[1:len-1] - str = str[len:] - if not self.dict.has_key(name): - raise error, 'No such variable: '+name - value = self.dict[name] - if self.do_useindent and '\n' in value: - value = self._modindent(value, rv) - rv = rv + value + rv = '' + while 1: + pos = self.prog.search(str) + if pos < 0: + return rv + str + if pos: + rv = rv + str[:pos] + str = str[pos:] + len = self.prog.match(str) + if len == 2: + # Escaped dollar + rv = rv + '$' + str = str[2:] + continue + name = str[1:len-1] + str = str[len:] + if not self.dict.has_key(name): + raise error, 'No such variable: '+name + value = self.dict[name] + if self.do_useindent and '\n' in value: + value = self._modindent(value, rv) + rv = rv + value def _modindent(self, value, old): - lastnl = string.rfind(old, '\n', 0) + 1 - lastnl = len(old) - lastnl - sub = '\n' + (' '*lastnl) - return regsub.gsub('\n', sub, value) + lastnl = string.rfind(old, '\n', 0) + 1 + lastnl = len(old) - lastnl + sub = '\n' + (' '*lastnl) + return regsub.gsub('\n', sub, value) def _test(): import sys |