[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'])
cparent = []
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()
pass
#heritage = parent.

View File

@ -118,11 +118,7 @@ def generate_menu(element, level=1):
return ret
def generate_html_page_name(element):
namespaceStack = element.get_namespace()
link = ""
for name in namespaceStack:
link += name + "__"
return element.get_node_type() + "_" + link + element.get_name() + '.html'
return element.get_doc_website_page_local()
def generate_name(element):
namespaceStack = element.get_namespace()
@ -285,11 +281,29 @@ def generate_page(outFolder, header, footer, element):
# generate herirage list :
if element.get_node_type() == 'class':
parent = element.get_parents()
debug.verbose("parrent of " + element.get_name() + " : " + str(parent))
child = None
if parent != []:
if len(parent) != 0:
file.write('<h2>Object Hierarchy:<h2>\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');

View File

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

View File

@ -26,6 +26,7 @@ class Node():
self.access = None
# namespace elements : (set when all element are parsed ...
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):
return ""
@ -39,6 +40,13 @@ class Node():
def get_name(self):
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):
return self.uid
@ -138,26 +146,71 @@ class Node():
pass
return ret
def set_namespace(self, hierarchy = []):
# store namespaces:
self.namespace = hierarchy
def get_doc_website_page(self):
if self.moduleLink == None:
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 ...
if self.subList == None:
return
if self.nodeType in ['class', 'namespace', 'struct']:
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)
#debug.info(" ==> " + str(element['node'].get_namespace()))
hierarchy.pop()
elif self.nodeType in ['library', 'application']:
for element in self.subList:
element['node'].set_namespace()
#debug.info(" ==> " + str(element['node'].get_namespace()))
def get_namespace(self):
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):
debug.info("find : " + str(list) + " in " + self.nodeType)
debug.verbose("find : " + str(list) + " in " + self.nodeType + "(" + self.name + ")")
if len(list) == 0:
return None
if self.nodeType in ['library', 'application']:
@ -170,9 +223,12 @@ class Node():
return None
if list[0] != self.name:
return None
if self.nodeType not in ['class', 'namespace', 'struct']:
return self
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:
return None
for element in self.subList: