## 自动化生成代码继承关系
import os,sys,re
import shutil,string
#[OK]
gCount = 0
def 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 getRenderObject(str):
res = re.search('[^<]?\s*class\s+(Render\w+)\s*[^\;\w,]',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)
return None
#[Test]
objList = []
objInfo = {}
urlList = {}
def parseString(str,path):
global objList,objInfo
str = removeBR(str)
obj = getRenderObject(str)
if obj != None:
if obj in objList:
#print "%s has exist in list" % (obj)
return
else:
objList.append(obj)
urlList[obj] = path
objInfo[obj] = getParent(str)
#print '%s->%s' % (obj,objInfo[obj])
def link(dest,src):
return '<a href="%s" target="_blank">%s</a>' % (dest,src)
def HeadLink(dest,src):
return '<a href="%s" style="color:red;font-weight:bold;" target="_blank">%s</a>' % (dest,src)
def link_form(dest):
return '-->%s' % (dest)
def getPath(obj):
global objList,objInfo,urlList
if obj in objList:
return urlList[obj]
else:
return "#"
#[OK]
def showResult():
global objList,objInfo,urlList
for obj in objList:
tmp = obj
print HeadLink(getPath(tmp),tmp),
while tmp:
parent = objInfo[tmp]
print link_form( link(getPath(parent) ,parent) )
if parent in objList:
tmp = parent
else:
tmp = None
print '<hr>'
getList(os.path.join(os.getcwd(),"src"),process)
#print "++++++++++++++++++++++++++++++++++++++++++++++"
print '<div style="width:1700;border:1px red solid;">'
showResult()
print '</div>'