예제 #1
0
파일: fgen.py 프로젝트: kevwan/cppgen
def main():
    if len(sys.argv) == 1:
        sys.exit(getUsage())

    parser = XmlConfig()
    try:
        opts, args = getopt(sys.argv[1:], parser.getShortOptions(), parser.getLongOptions())
        if not opts:
            raise GetoptError("No option specified!")
        
        optlist = []
        for opt in opts:
            optlist = optlist + [x for x in opt if x]

        options = parser.getOptions()
        for option in options:
            shortOpt = "-" + option.getShortOpt()
            longOpt = "--" + option.getLongOpt()
            if shortOpt in optlist or longOpt in optlist:
                pkg = option.getPackage()
                slotClass = option.getSlotClass()
                instance = createGenerator(pkg, slotClass, opts, args)
                instance.init()
                instance.run()
                break
    except GetoptError, ex:
        print "Error: ", ex
        sys.exit(getUsage())
예제 #2
0
class TemplateParser:
    def __init__(self, tmpfile, output):
        self.__config = XmlConfig()
        self.__template = path.join(self.__config.getConfigPath(), tmpfile)
        self.__output = output
        self.__observers = []
        self.__varRe = re.compile(r"\${(?P<var>\b\w+\b)}")

    def addObserver(self, observer):
        self.__observers.append(observer)

    def removeObserver(self, observer):
        self.__observers.remove(observer)

    def parse(self):
        with open(self.__output, "w+") as stream:
            map(lambda line:self.__processLine(line, stream), open(self.__template))

    def __processLine(self, line, stream):
        line = self.__replaceVars(line)
        stream.write(line)
        map(lambda ob:ob.onPostProcessLine(line, stream), self.__observers)

    def __replaceVars(self, s):
        match = self.__varRe.search(s)
        if match == None:
            return s

        start, end = match.span()
        var = match.group("var").lower()
        if var == "wrapper":
            s = self.__replaceWrapper(s, start, end)
        elif var == "date":
            s = "".join((s[:start], date.today().isoformat(), s[end:]))
        else:
            value = self.__config.get(var)
            if  value != None:
                start, end = match.span()
                s = self.__varRe.sub(value, s)
        return "".join((s[:end], self.__replaceVars(s[end:])))

    def __replaceWrapper(self, s, start, end):
        head, tail = path.split(self.__output)
        name, ext = path.splitext(tail)
        value = self.__config.getWrapperPrefix()
        value = value if value else ""
        wrapper = "%s%s" % (value, name.upper())
        return "".join((s[:start], wrapper, s[end:]))
예제 #3
0
 def __init__(self, tmpfile, output):
     self.__config = XmlConfig()
     self.__template = path.join(self.__config.getConfigPath(), tmpfile)
     self.__output = output
     self.__observers = []
     self.__varRe = re.compile(r"\${(?P<var>\b\w+\b)}")