python之自动生成C++的父子双向继承关系
来源:互联网 发布:淘宝潮牌男模特排名 编辑:程序博客网 时间:2024/06/02 06:03
## toClass.py
import os,sys,reimport shutil,string#[OK]class CObject(object): def __init__(self,name,href): self._name = name self._href = href self._children = [] self._parent = None def setHref(self,href): self._href = href def setParent(self,parent): self._parent = parent def addChild(self,child): self._children.append(child) def childCount(self): return len(self._children) def parent(self): return self._parent def children(self): return self._children def toAnchor(self): anchor_str = r'<a href="%s" style="border:1px black solid;color:red;font-weight:bold;">%s</a>' % (self._href,self._name) bgColor = "gray" color = "red" link = "#" if len(self._children) > 0: bgColor = "red" color = "blue" link = "child/%s.html" % (self._name) c_str = r'<a href="%s" style="margin-left:-8;background:%s;border:1px black solid;color:%s;font-weight:bold;">%s</a>' % (link,bgColor,color,'-') return "%s\n%s" % (anchor_str,c_str) def flushChild(self): fname = r'%s/child/%s.html' % (os.getcwd(),self._name) ret = "" for ch in self._children: ch_str = r'<div style="border:1px black solid;color:red;font-weight:bold;">%s</div>' % (ch) ret = "%s%s%s" % (ret,ch_str,"<hr>") with open(fname,'w') as f: f.write(ret) def name(self): return self._name def href(self): return self._href#[OK]gCount = 0def getList(dirname,pFunc): global gCount try: ls=os.listdir(dirname) except: print dirname,'is access deny' else: for file in ls: temp = os.path.join(dirname,file) if(os.path.isdir(temp)): getList(temp,pFunc) else: gCount = gCount + 1 if re.search(r'.h$',file): pFunc(dirname,file)#[OK]def loadSiteList(file): file = open(file,"r") sites = file.readlines() return sites#[OK]def removeBR(site): result = re.search(r'\n',site) if result: return site.replace('\n','') return site#[OK]def process(dirname,file): global gCount #[1] #print '[%d]->%s' % (gCount,file) #[2] path = os.path.join(dirname,file) list = loadSiteList(path) #[3] for str in list: parseString(str,path)#[OK]def getClassObject(str): #print str if re.match(r'\s*\*.*\sclass\s',str): return None if re.match(r'\s*\/\/',str): return None if re.match(r'\s*\/\*',str): return None if re.search(r'\w+\sclass\s(\w+)',str): return None if re.search(r'\w+class\s(\w+)',str):#[subclass of] return None if re.search(r'\/\/.*\sclass\s',str): return None if re.search(r'\s*class\s+\w+;',str): return None if re.search(r'template\s*<class\s+(\w+)',str): return None if re.search(r'template\s*<typename\s+(\w+)',str): return None if re.search(r'[\*\(]class\s\w+',str): return None if re.search(r'class\s\w+[\[\]\;\,]',str): return None res = re.search('\s*class\s+(\w+)\s*[^\;,]',str) if res: return res.group(1) return None#[OK]def getParent(str): res = re.search(':\s*public\s+(\w+)\s*',str) if res: return res.group(1) res = re.search(':\s*publi\s*(\w+)$',str) if res: return res.group(1) return None#[Test]objList = []objMapper = {}def parseString(str,path): global objList,objMapper str = removeBR(str) obj = getClassObject(str) if obj != None: if obj in objList: return else: objList.append(obj) href = toRelPath(path) parent = getParent(str) if parent == "Parent": parent = "Template" #currentNode if obj in objMapper: objMapper[obj].setHref(href) objMapper[obj].setParent(parent) else: gObj = CObject(obj,href) gObj.setParent(parent) objMapper[obj] = gObj #parentNode if parent in objMapper: objMapper[parent].addChild(obj) else: pObj = CObject(parent,None) objMapper[parent] = pObj objMapper[parent].addChild(obj)def link_form(dest): return '-->%s' % (dest)baseLength = len(os.getcwd())def toRelPath(aPath): global baseLength relPath = aPath[baseLength+1:] return relPath.replace('\\','/')def getPath(obj): global objList,objMapper if obj in objList: return toRelPath(objMapper[obj].href()) else: return "#"#[OK]def showResult(): global objList,objMapper for obj in objList: tmp = obj print objMapper[obj].toAnchor(), objMapper[obj].flushChild() while tmp: tmp = objMapper[tmp].parent() if tmp in objMapper: name = objMapper[tmp].name() if name != None: if name != "RefCounted" and name != "Template": print link_form(objMapper[tmp].toAnchor()) else: ref = r'<a href="#" style="border:1px red solid;color:black;font-weight:bold;">%s</a>' % (tmp) print link_form(ref) print '<hr>'#[0-getData]if not os.path.exists("child"): os.mkdir("child")getList(os.path.join(os.getcwd()),process)#[1-output]print '<div style="width:2000;border:1px red solid;">'showResult()print '</div>'
@@用法说明
C++源码放置于脚本同级目录,然后执行如下脚本
toClass.py > index.html
0 0
- python之自动生成C++的父子双向继承关系
- Python之自动生成代码继承关系
- 继承时候的父子关系
- 查找父子程序的继承关系:pstree
- Swift - 父子继承关系的初始化方法调用顺序
- 父子进程的双向通讯简明解读(c程序)。
- Java父子类在生成对象时的属性关系
- Python 父子类继承笔记
- python中类的创建,父子类的继承
- Python:类的继承关系
- java--随笔日记--继承,封装和多态之Java中的父子关系
- python继承关系之super函数
- SQL SERVER父子关系表生成
- Java继承关系的父子类中相同的成员变量
- Java继承关系的父子类中相同的成员变量
- for的父子进程关系
- 13.控制器的父子关系
- 父子页面间的关系
- 微信开发
- 燃起对研究的激情
- Alfresco的部署
- 4.6 - Maya Commands: select
- SQL基础知识3
- python之自动生成C++的父子双向继承关系
- UESTC 1073 单点更新
- Codeforces 596D 区间DP
- Ubuntu 14.04数据库服务器--mysql的安装和配置
- Android Linux 常用命令
- IOS UITableView 多选,全选删除,拖动,置顶的实现
- XML文件配置使用
- 2048游戏优化,1小时,屏幕适配相关
- 保存文件到手机内存