⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umakepp.py

📁 linux下的一款播放器
💻 PY
📖 第 1 页 / 共 2 页
字号:
def rpl_local_libs(m):    return "project.AddLocalLibraries(%s)" % (m.group(2))def rpl_system_paths(m):    return "project.AddSystemPaths(%s)" % (m.group(2))def rpl_exported_func(m):    return "project.AddExportedFunctions(%s)" % (m.group(2))def rpl_BuildProgramTarget(m):    return "ProgramTarget(%s)" % (m.group(2))def rpl_NormalLibraryTarget(m):    return "LibraryTarget(%s)" % (m.group(2))## regular-expression generateorsdef project_re1(attr):    return "(project\.%s\s*\[[^:]*:[^\]]*\]\s*=\s*\[(.*)\]$)" % (attr)def project_re2(attr):    return "(project\.%s\.append\((.*)\)$)" % (attr)def project_re3(attr):    return "(project\.%s\s*=\s*\[(.*)\]$)" % (attr)def project_re4(attr):    return "(project\.%s\s*=\s*project\.%s\s*\+\s*\[(.*)\]$)" % (attr, attr)_rpl_list = [    (re.compile("^(\s*)(print\s+.*)"), rpl_print),    (re.compile("(project\.target_name\s*=\s*(.*))"), rpl_target_name),        (re.compile("(project\.target_type\s*=[^=])"), rpl_pass),    (re.compile("(project\.object_dir\s*=[^=])"), rpl_pass),    (re.compile("(project\.output_dir\s*=[^=])"), rpl_pass),    (re.compile("(project\.dll_type\s*=[^=])"), rpl_pass),    (re.compile("(project\.src_root_path\s*=[^=])"), rpl_pass),    (re.compile("(project\.target_dir\s*=[^=])"), rpl_pass),    (re.compile("(project\.module_dir\s*=[^=])"), rpl_pass),    (re.compile("(project\.project_dir\s*=[^=])"), rpl_pass),    (re.compile("(project\.makefile_path\s*=[^=])"), rpl_pass),    (re.compile("(platform\.lib_subdir\s*=[^=])"), rpl_pass),    (re.compile("(platform\.lib_subdir)"), rpl_lib_subdir),        (re.compile("(SetupDefines\(\))"), rpl_pass),    (re.compile("(CPPSuffixRule\(\))"), rpl_pass),    (re.compile("(SetupTargetDir\(\))"), rpl_pass),    (re.compile("(DependTarget\(\))"), rpl_pass),    (re.compile("(ResourceOnlyDLLTarget\(.*\))"), rpl_pass),    (re.compile("(EmptyTargets\(\))"), rpl_EmptyTarget),    (re.compile("(SimpleEmptyRules\(\))"), rpl_EmptyTarget),        (re.compile(project_re1("defines")), rpl_defines),    (re.compile(project_re2("defines")), rpl_defines),    (re.compile(project_re3("defines")), rpl_defines),    (re.compile(project_re4("defines")), rpl_defines),        (re.compile(project_re1("sources")), rpl_sources),    (re.compile(project_re2("sources")), rpl_sources),    (re.compile(project_re4("sources")), rpl_sources),        (re.compile(project_re1("objsrcs")), rpl_objsrcs),    (re.compile(project_re2("objsrcs")), rpl_objsrcs),    (re.compile(project_re4("objsrcs")), rpl_objsrcs),        (re.compile(project_re1("includes")), rpl_includes),    (re.compile(project_re2("includes")), rpl_includes),    (re.compile(project_re4("includes")), rpl_includes),    (re.compile(project_re1("libraries")), rpl_libraries),    (re.compile(project_re2("libraries")), rpl_libraries),    (re.compile(project_re4("libraries")), rpl_libraries),    (re.compile(project_re1("libraries2")), rpl_libraries2),    (re.compile(project_re2("libraries2")), rpl_libraries2),    (re.compile(project_re4("libraries2")), rpl_libraries2),    (re.compile(project_re1("sys_libraries")), rpl_sys_libraries),    (re.compile(project_re2("sys_libraries")), rpl_sys_libraries),    (re.compile(project_re4("sys_libraries")), rpl_sys_libraries),    (re.compile(project_re1("dynamic_libraries")), rpl_dynamic_libraries),    (re.compile(project_re2("dynamic_libraries")), rpl_dynamic_libraries),    (re.compile(project_re4("dynamic_libraries")), rpl_dynamic_libraries),    (re.compile(project_re1("module_libs")), rpl_module_libs),    (re.compile(project_re2("module_libs")), rpl_module_libs),    (re.compile(project_re4("module_libs")), rpl_module_libs),    (re.compile(project_re1("local_libs")), rpl_local_libs),    (re.compile(project_re2("local_libs")), rpl_local_libs),    (re.compile(project_re4("local_libs")), rpl_local_libs),    (re.compile(project_re1("system_paths")), rpl_system_paths),    (re.compile(project_re2("system_paths")), rpl_system_paths),    (re.compile(project_re4("system_paths")), rpl_system_paths),    (re.compile(project_re1("exported_func")), rpl_exported_func),    (re.compile(project_re2("exported_func")), rpl_exported_func),    (re.compile(project_re4("exported_func")), rpl_exported_func),    (re.compile("(BuildProgramTarget\s*\(\s*([^,]+),.*\))"),     rpl_BuildProgramTarget),    (re.compile("(NormalLibraryTarget\s*\(\s*([^,]+),.*\))"),     rpl_NormalLibraryTarget),    ]def translate(_line_list):    """This is the main code morphing function.  It takes a line list with    exactly one Python statment per line, and compares it aginst a series    of regular expressions.  It then converts it as necessary, and returns    a new list of lines of morphed Umakefil code."""    line_list = []    for line in _line_list:        ## fast-skip blank lines and comments        if len(line) == 0 or string.lstrip(line)[0] == "#":            line_list.append(line)            continue        ## run through the replacment list        did_sub = 0        for (r, f) in _rpl_list:            (nl, n) = r.subn(f, line)            if not n:                continue            line_list.append(nl)            did_sub = 1            break        if not did_sub:            line_list.append(line)    return line_listclass UMPreProcessor:    """Takes a list of Umakefil/*.pcf files and pre-processes them."""    def __init__(self, path):        """The argument, path, is the path of the output pre-processed        Umakefil."""                self.path = path        self.path_list = []        #self.mtime = 0    def add_file_list(self, file_list):        """The argument, file_list, is a list of Umakefil/*.pcf files to        be combined, and pre-processed in order.  Added files which do        not exist are ignored."""                for path in file_list:            if os.path.isfile(path):                self.path_list.append(path)                #self.mtime = max(self.mtime, umake_lib.mtime(path))    def write_umakefil(self, line_list):        """Given a list of lines, write out the pre-processed Umakefil to        the output path."""        # Disabled. This was originally intended to allow umake to        # run only when needed, but too many external variable affect        # how umake works to reliably detect when it needs to be re-run.        # I suppose I better concentrate on making umake faster insead.        #   -Hubbe        #        #upptime = umake_lib.mtime(self.path)        #        #if upptime > self.mtime:        #    return upptime        if os.path.exists(self.path):            os.unlink(self.path)            fil = open(self.path, "w")        fil.write("### UMAKE PRE-PROCESSOR OUTPUT: DO NOT CHECK INTO CVS\n")        fil.write("### -*- Mode: Python -*-\n")        fil.write("### files: %s\n" % (string.join(self.path_list, " -> ")))        fil.write("\n")        for line in line_list:            fil.write("%s\n" % (line))        fil.write("\n")        fil.write("### END UMAKE PRE-PROCESSOR OUTPUT\n")        fil.close()        return 0    def preprocess(self):        """Read all the added Umakefil/*.pcf files, pre-process them, and        return a list of the lines of the pre-processed Umakefil."""                pre_lines = []        post_lines = []        ## get the .pcf files        for path in self.path_list:            tmp = remove_line_continuations(open(path, "r").read() + "\n", path)            try:                i = tmp.index("<insert>")                pre_lines = pre_lines + tmp[:i]                post_lines = tmp[i+1:] + post_lines            except ValueError:                pre_lines = pre_lines + tmp        ## many pre-processor filters        line_list = translate(pre_lines + post_lines)        return line_list    def write(self):        """Pre-process and write out the pre-processed Umakefil."""                line_list = self.preprocess()        return self.write_umakefil(line_list)def main():    import sys        try:        path_list = sys.argv[1:]    except IndexError:        print "give path dummy"        sys.exit(1)    umpp = UMPreProcessor("bla")    umpp.add_file_list(path_list)        for line in umpp.preprocess():        print lineif __name__ == "__main__":    main()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -