# simsubs.py -- A library for setting/unsetting defines and performing substitutions of said defines # @YAHOO@ # # Michael Thomas # Center for Computation & Technology # Louisiana State University # import re class DefineDatabase: def __init__(self): self.Reset() def Reset(self): self.defines = dict() def Set(self, define, value): self.defines[define] = value def Unset(self, define): try: del self.defines[define] except KeyError: return def Has(self, define): return self.defines.has_key(define) def Get(self, define): if self.Has(define): return self.defines[define] return None def Sub(self, define, ss): if self.Has(define): macro = "@%s@" % define return self.PerformSub(ss, macro, self.defines[define]) return ss def PerformSub(self, ss, macro, value): if value is not str: value = str(value) return ss.replace(macro, value) def SubAll(self, ss): # gather all @(...)@ pattern = "(@([^@]+)@)" p = re.compile(pattern) mlist = p.findall(ss) if len(mlist) == 0: return ss for mi in mlist: macro = mi[0] define = mi[1] if self.Has(define): ss = self.PerformSub(ss, macro, self.Get(define)) return ss