[DEV] get object parrent

This commit is contained in:
Edouard DUPIN 2013-12-26 07:49:52 +01:00
parent 6f3875af3e
commit 7370fb2ac9
4 changed files with 94 additions and 19 deletions

View File

@ -66,7 +66,7 @@ class Class(Node.Node):
parent = module.get_element_with_name(self.inherit[0]['class']) parent = module.get_element_with_name(self.inherit[0]['class'])
cparent = [] cparent = []
if parent != None: if parent != None:
debug.info(" plop : " + self.name + " " + str(parent) + " " + parent.get_name()) #debug.info(" plop : " + self.name + " " + str(parent) + " " + parent.get_name())
cparent = parent.get_parents() cparent = parent.get_parents()
pass pass
#heritage = parent. #heritage = parent.

View File

@ -118,11 +118,7 @@ def generate_menu(element, level=1):
return ret return ret
def generate_html_page_name(element): def generate_html_page_name(element):
namespaceStack = element.get_namespace() return element.get_doc_website_page_local()
link = ""
for name in namespaceStack:
link += name + "__"
return element.get_node_type() + "_" + link + element.get_name() + '.html'
def generate_name(element): def generate_name(element):
namespaceStack = element.get_namespace() namespaceStack = element.get_namespace()
@ -285,11 +281,29 @@ def generate_page(outFolder, header, footer, element):
# generate herirage list : # generate herirage list :
if element.get_node_type() == 'class': if element.get_node_type() == 'class':
parent = element.get_parents() parent = element.get_parents()
debug.verbose("parrent of " + element.get_name() + " : " + str(parent))
child = None child = None
if parent != []: if len(parent) != 0:
file.write('<h2>Object Hierarchy:<h2>\n') file.write('<h2>Object Hierarchy:<h2>\n')
file.write('<pre>\n'); file.write('<pre>\n');
file.write(str(parent)); level = 0
revertList = []
for elemmm in reversed(parent):
revertList.append(elemmm)
revertList.append({'access':'me', 'class':element.get_displayable_name()})
for parentElem in revertList:
access = ""
if parentElem['access'] == 'public':
access = "+"
elif parentElem['access'] == 'protected':
access = "#"
elif parentElem['access'] == 'private':
access = "-"
file.write(white_space(level * 4))
if level != 0:
file.write('+--> ')
file.write(access + parentElem['class'] + '<br/>')
level += 1
file.write('</pre>\n'); file.write('</pre>\n');

View File

@ -57,6 +57,9 @@ class Module:
def set_website(self, url): def set_website(self, url):
self.webSite = url self.webSite = url
def get_website(self):
return self.webSite
## ##
## @brief set the parsing folder ## @brief set the parsing folder
## @param[in] path New path to parse ## @param[in] path New path to parse
@ -105,8 +108,10 @@ class Module:
fileCompleteName = os.path.join(root, filename) fileCompleteName = os.path.join(root, filename)
debug.debug(" Find a file : '" + fileCompleteName + "'") debug.debug(" Find a file : '" + fileCompleteName + "'")
self.add_file(fileCompleteName) self.add_file(fileCompleteName)
# all file is parset ==> now we create the namespacing of ll elements: # all file is parset ==> now we create the namespacing of all elements:
self.structureLib.set_namespace() self.structureLib.set_namespace()
self.structureLib.set_module_link(self)
#self.structureLib.complete_display()
# display the hierarchie of all the class and namespace ... # display the hierarchie of all the class and namespace ...
#self.structureLib.debug_display() #self.structureLib.debug_display()
@ -362,13 +367,13 @@ def get_link_type(type):
def get_element_with_name(type): def get_element_with_name(type):
global moduleList global moduleList
debug.info("try find : " + str(type) + " ") debug.verbose("try find : " + str(type) + " ")
ret = re.sub(r'::', ':', type) ret = re.sub(r'::', ':', type)
ret = ret.split(":") ret = ret.split(":")
for mod in moduleList: for mod in moduleList:
element = mod['node'].get_base_doc_node().find(ret) element = mod['node'].get_base_doc_node().find(ret)
if element != None: if element != None:
debug.info("we find : " + type + " = " + str(ret) + " " + str(element)) debug.debug("we find : " + type + " = " + str(ret) + " " + str(element))
return element return element
debug.info("we not find : " + type + " = " + str(ret)) debug.warning("we not find : " + type + " = " + str(ret))
return None return None

View File

@ -26,6 +26,7 @@ class Node():
self.access = None self.access = None
# namespace elements : (set when all element are parsed ... # namespace elements : (set when all element are parsed ...
self.namespace = [] self.namespace = []
self.moduleLink = None # this is a link on the main application node or library node (usefull to get the website ...)
def to_str(self): def to_str(self):
return "" return ""
@ -39,6 +40,13 @@ class Node():
def get_name(self): def get_name(self):
return self.name return self.name
def get_displayable_name(self):
ret = ""
for namespace in self.namespace:
ret += namespace + "::"
ret += self.name
return ret
def get_uid(self): def get_uid(self):
return self.uid return self.uid
@ -138,26 +146,71 @@ class Node():
pass pass
return ret return ret
def set_namespace(self, hierarchy = []): def get_doc_website_page(self):
# store namespaces: if self.moduleLink == None:
self.namespace = hierarchy return ""
ret = self.moduleLink.get_website()
ret += "/"
ret += self.get_node_type()
ret += "_"
for name in self.namespace:
ret += name + "__"
ret += self.name
ret += '.html'
return ret
def get_doc_website_page_local(self):
ret = self.get_node_type()
ret += "_"
for name in self.namespace:
ret += name + "__"
ret += self.name
ret += '.html'
return ret
def set_module_link(self, module):
self.moduleLink = module
# set for all sub elements ... # set for all sub elements ...
if self.subList == None: if self.subList == None:
return return
if self.nodeType in ['class', 'namespace', 'struct']: if self.nodeType in ['class', 'namespace', 'struct']:
for element in self.subList: for element in self.subList:
hierarchy.append(self.get_name()) element['node'].set_module_link(module)
elif self.nodeType in ['library', 'application']:
for element in self.subList:
element['node'].set_module_link(module)
def set_namespace(self, hierarchy = []):
#debug.info('set namespace : ' + self.name + ' : ' + str(hierarchy))
# store namespaces:
for tmpName in hierarchy:
self.namespace.append(tmpName)
# set for all sub elements ...
if self.subList == None:
return
if self.nodeType in ['class', 'namespace', 'struct']:
for element in self.subList:
hierarchy.append(self.name)
element['node'].set_namespace(hierarchy) element['node'].set_namespace(hierarchy)
#debug.info(" ==> " + str(element['node'].get_namespace()))
hierarchy.pop() hierarchy.pop()
elif self.nodeType in ['library', 'application']: elif self.nodeType in ['library', 'application']:
for element in self.subList: for element in self.subList:
element['node'].set_namespace() element['node'].set_namespace()
#debug.info(" ==> " + str(element['node'].get_namespace()))
def get_namespace(self): def get_namespace(self):
return self.namespace return self.namespace
def complete_display(self):
debug.info(str(self.namespace) + ' : ' + self.name)
if self.subList == None:
return
for element in self.subList:
element['node'].complete_display()
def find(self, list): def find(self, list):
debug.info("find : " + str(list) + " in " + self.nodeType) debug.verbose("find : " + str(list) + " in " + self.nodeType + "(" + self.name + ")")
if len(list) == 0: if len(list) == 0:
return None return None
if self.nodeType in ['library', 'application']: if self.nodeType in ['library', 'application']:
@ -170,9 +223,12 @@ class Node():
return None return None
if list[0] != self.name: if list[0] != self.name:
return None return None
if self.nodeType not in ['class', 'namespace', 'struct']:
return self
tmpList = list[1:] tmpList = list[1:]
if len(tmpList) == 0:
return self
elif self.nodeType not in ['class', 'namespace', 'struct']:
# have other sub element and other elemetn than upper can have sub element ...
return None
if self.subList == None: if self.subList == None:
return None return None
for element in self.subList: for element in self.subList: