import os import re def get_entity_declarations(ftxt): z = re.compile("\s*entity\s+(?P\w+)\s+is") entities = [] for m in z.finditer(ftxt): entities.extend(m.groupdict().values()) return entities def get_entity_instantiations(ftxt): z = re.compile("(:\s*entity\s+((?P\w+(?=\.))\.)?(?P\w+)\s+)|(\s*component\s+(?P\w+)\s+)") entities = [] for m in z.finditer(ftxt): d = m.groupdict() if d['entity'] != None: entities.append(d['entity']) if d['compentity'] != None: entities.append(d['compentity']) return entities def entity_tuple(ftxt): return (get_entity_declarations(ftxt),get_entity_instantiations(ftxt)) #flist is a list of file paths, txtfun is applied to the text in these files. a list of [(file-path, txtfun(file-text)), ...] is returned def analyze_files(flist,txtfun): return [(filepath,txtfun(file(filepath).read())) for filepath in flist] def get_constants(ftxt): start_search_at = 0 constant_list = [] search_results = [res.start() for res in re.finditer("constant\s+\w+\s+:",ftxt)] for result in search_results: colon_after = ftxt.find(":",result) constant = ftxt[result+8:colon_after].lstrip("\t ").rstrip("\t ") constant_list.append(constant) return constant_list def uppercase_constants(filepath): f = file(filepath) ftxt = f.read() constant_list = get_constants(ftxt) for constant in constant_list: ftxt = re.sub("(?i)"+constant,constant.upper(),ftxt) file(filepath+".out","wt").write(ftxt) def get_vhd_files(startpath): filelist = [] for t in os.walk(startpath): for filename in t[2]: if filename[-3:].upper() == "VHD": filelist.append(t[0]+"\\"+filename) return filelist def main(path): files = get_vhd_files(path) print files for file in files: uppercase_constants(file) return files def commit(files): for file in files: os.remove(file) os.rename(file+".out",file) #use this to delete files appended with '.out' def delete_output(files): os.remove(file+".out") import sys if __name__ == "__main__": if len(sys.argv) > 1: files = main(sys.argv[1]) else: files = main('.')