diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
commit | 458120dd40db6b4df55a4e96b650e16798ef06a0 (patch) | |
tree | 8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Tools/modulator/varsubst.py | |
parent | 3a742c699f6806c1145aea5149bf15de15a0afd7 (diff) |
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Tools/modulator/varsubst.py')
-rw-r--r-- | sys/src/cmd/python/Tools/modulator/varsubst.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Tools/modulator/varsubst.py b/sys/src/cmd/python/Tools/modulator/varsubst.py new file mode 100644 index 000000000..3b3395065 --- /dev/null +++ b/sys/src/cmd/python/Tools/modulator/varsubst.py @@ -0,0 +1,56 @@ +# +# Variable substitution. Variables are $delimited$ +# +import re + +error = 'varsubst.error' + +class Varsubst: + def __init__(self, dict): + self.dict = dict + self.prog = re.compile('\$([a-zA-Z0-9_]*)\$') + self.do_useindent = 0 + + def useindent(self, onoff): + self.do_useindent = onoff + + def subst(self, s): + rv = '' + while 1: + m = self.prog.search(s) + if not m: + return rv + s + rv = rv + s[:m.start()] + s = s[m.end():] + if m.end() - m.start() == 2: + # Escaped dollar + rv = rv + '$' + s = s[2:] + continue + name = m.group(1) + 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 = old.rfind('\n', 0) + 1 + lastnl = len(old) - lastnl + sub = '\n' + (' '*lastnl) + return re.sub('\n', sub, value) + +def _test(): + import sys + import os + + sys.stderr.write('-- Copying stdin to stdout with environment map --\n') + c = Varsubst(os.environ) + c.useindent(1) + d = sys.stdin.read() + sys.stdout.write(c.subst(d)) + sys.exit(1) + +if __name__ == '__main__': + _test() |