[DEV] add some element display
This commit is contained in:
parent
1a112e4000
commit
6f3875af3e
15
monkClass.py
15
monkClass.py
@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
import monkDebug as debug
|
import monkDebug as debug
|
||||||
import monkNode as Node
|
import monkNode as Node
|
||||||
|
import monkModule as module
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -57,6 +58,20 @@ class Class(Node.Node):
|
|||||||
ret += element['access'] + " " + element['class']
|
ret += element['access'] + " " + element['class']
|
||||||
ret += " { ... };"
|
ret += " { ... };"
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def get_parents(self):
|
||||||
|
if len(self.inherit) == 0:
|
||||||
|
return []
|
||||||
|
# note this ony get the first parent ...
|
||||||
|
parent = module.get_element_with_name(self.inherit[0]['class'])
|
||||||
|
cparent = []
|
||||||
|
if parent != None:
|
||||||
|
debug.info(" plop : " + self.name + " " + str(parent) + " " + parent.get_name())
|
||||||
|
cparent = parent.get_parents()
|
||||||
|
pass
|
||||||
|
#heritage = parent.
|
||||||
|
cparent.append(self.inherit[0])
|
||||||
|
return cparent
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
24
monkEnum.py
24
monkEnum.py
@ -39,7 +39,25 @@ class Enum(Node.Node):
|
|||||||
if len(element) > 2:
|
if len(element) > 2:
|
||||||
if element[1] == '=':
|
if element[1] == '=':
|
||||||
for tmp in element[2:]:
|
for tmp in element[2:]:
|
||||||
value += tmp
|
value = tmp
|
||||||
self.listElement.append({'name' : element[0], 'value' : value})
|
if value == "":
|
||||||
|
if self.baseValue == None:
|
||||||
|
value = "???"
|
||||||
|
else:
|
||||||
|
value = str(self.baseValue)
|
||||||
|
self.baseValue += 1
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
tmpVal = int(value)
|
||||||
|
self.baseValue = tmpVal + 1
|
||||||
|
except:
|
||||||
|
debug.debug("can not parse enum value : '" + value + "'")
|
||||||
|
self.baseValue = None
|
||||||
|
self.listElement.append({'name' : element[0], 'value' : value, 'doc' : ""})
|
||||||
|
|
||||||
debug.verbose("enum list : " + str(self.listElement))
|
debug.verbose("enum list : " + str(self.listElement))
|
||||||
|
|
||||||
|
def get_enum_list(self):
|
||||||
|
return self.listElement
|
||||||
|
|
||||||
|
|
||||||
|
202
monkHtml.py
202
monkHtml.py
@ -98,41 +98,42 @@ def white_space(size) :
|
|||||||
ret += " "
|
ret += " "
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def generate_menu(element, namespaceStack=[], level=1):
|
def generate_menu(element, level=1):
|
||||||
|
namespaceStack = element.get_namespace()
|
||||||
listBase = element.get_all_sub_type(['namespace'])
|
listBase = element.get_all_sub_type(['namespace'])
|
||||||
if len(listBase) == 0:
|
if len(listBase) == 0:
|
||||||
return ""
|
return ""
|
||||||
ret = ""
|
ret = ""
|
||||||
ret += '<ul class="niveau' + str(level) + '">\n'
|
ret += '<ul class="niveau' + str(level) + '">\n'
|
||||||
for element in listBase:
|
for element in listBase:
|
||||||
namespaceStack.append(element['node'].get_name())
|
retTmp = generate_menu(element['node'], level+1)
|
||||||
retTmp = generate_menu(element['node'], namespaceStack, level+1)
|
|
||||||
namespaceStack.pop()
|
|
||||||
if retTmp != "":
|
if retTmp != "":
|
||||||
subMenu = ' class="sousmenu"'
|
subMenu = ' class="sousmenu"'
|
||||||
else:
|
else:
|
||||||
subMenu = ''
|
subMenu = ''
|
||||||
ret += ' <li' + subMenu + '>' + generate_link(element['node'], namespaceStack) + '\n'
|
ret += ' <li' + subMenu + '>' + generate_link(element['node']) + '\n'
|
||||||
ret += retTmp
|
ret += retTmp
|
||||||
ret += ' </li>\n'
|
ret += ' </li>\n'
|
||||||
ret += '</ul>\n'
|
ret += '</ul>\n'
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def generate_html_page_name(element, namespaceStack):
|
def generate_html_page_name(element):
|
||||||
|
namespaceStack = element.get_namespace()
|
||||||
link = ""
|
link = ""
|
||||||
for name in namespaceStack:
|
for name in namespaceStack:
|
||||||
link += name + "__"
|
link += name + "__"
|
||||||
return element.get_node_type() + "_" + link + element.get_name() + '.html'
|
return element.get_node_type() + "_" + link + element.get_name() + '.html'
|
||||||
|
|
||||||
def generate_name(element, namespaceStack):
|
def generate_name(element):
|
||||||
|
namespaceStack = element.get_namespace()
|
||||||
link = ""
|
link = ""
|
||||||
for name in namespaceStack:
|
for name in namespaceStack:
|
||||||
link += name + "::"
|
link += name + "::"
|
||||||
return element.get_node_type() + ": " + link + element.get_name()
|
return element.get_node_type() + ": " + link + element.get_name()
|
||||||
|
|
||||||
|
|
||||||
def generate_link(element, namespaceStack):
|
def generate_link(element):
|
||||||
return '<a href="' + generate_html_page_name(element, namespaceStack) + '">' + element.get_name() + '</a>'
|
return '<a href="' + generate_html_page_name(element) + '">' + element.get_name() + '</a>'
|
||||||
|
|
||||||
def calculate_methode_size(list):
|
def calculate_methode_size(list):
|
||||||
returnSize = 0;
|
returnSize = 0;
|
||||||
@ -218,80 +219,143 @@ def generate_stupid_index_page(outFolder, header, footer, myLutinDoc):
|
|||||||
file.write(footer)
|
file.write(footer)
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
def generate_page(outFolder, header, footer, element, namespaceStack=[]):
|
def generate_page(outFolder, header, footer, element):
|
||||||
|
namespaceStack = element.get_namespace()
|
||||||
if element.get_node_type() in ['library', 'application', 'namespace', 'class', 'struct', 'enum', 'union']:
|
if element.get_node_type() in ['library', 'application', 'namespace', 'class', 'struct', 'enum', 'union']:
|
||||||
listBase = element.get_all_sub_type(['library', 'application', 'namespace', 'class', 'struct', 'enum', 'union'])
|
listBase = element.get_all_sub_type(['library', 'application', 'namespace', 'class', 'struct', 'enum', 'union'])
|
||||||
for elem in listBase:
|
for elem in listBase:
|
||||||
if element.get_node_type() in ['namespace', 'class', 'struct']:
|
generate_page(outFolder, header, footer, elem['node'])
|
||||||
namespaceStack.append(element.get_name())
|
filename = outFolder + '/' + generate_html_page_name(element)
|
||||||
generate_page(outFolder, header, footer, elem['node'], namespaceStack)
|
|
||||||
namespaceStack.pop()
|
|
||||||
else:
|
|
||||||
generate_page(outFolder, header, footer, elem['node'], namespaceStack)
|
|
||||||
filename = outFolder + '/' + generate_html_page_name(element, namespaceStack)
|
|
||||||
monkTools.create_directory_of_file(filename);
|
monkTools.create_directory_of_file(filename);
|
||||||
file = open(filename, "w")
|
file = open(filename, "w")
|
||||||
file.write(header)
|
file.write(header)
|
||||||
file.write("<h1>" + generate_name(element, namespaceStack) + "</h1>");
|
file.write('<h1>' + generate_name(element) + '</h1>');
|
||||||
file.write("<hr/>");
|
file.write('<hr/>');
|
||||||
if element.get_node_type() == 'library':
|
|
||||||
file.write("TODO : the page ...");
|
documentation = parse_doxygen(element.get_doc())
|
||||||
elif element.get_node_type() == 'application':
|
if len(documentation) != 0:
|
||||||
file.write("TODO : the page ...");
|
file.write('<h2>Description:</h2>\n')
|
||||||
elif element.get_node_type() == 'namespace':
|
file.write(documentation)
|
||||||
file.write("TODO : the page ...");
|
file.write('<br/>\n')
|
||||||
elif element.get_node_type() == 'class':
|
|
||||||
# calculate element size :
|
if element.get_node_type() in ['library', 'application', 'namespace', 'class', 'struct']:
|
||||||
listBase = element.get_all_sub_type(['methode', 'constructor', 'destructor'])
|
for nameElement in ['namespace', 'class', 'struct', 'enum', 'union']:
|
||||||
displayLen = calculate_methode_size(listBase)
|
listBase = element.get_all_sub_type(nameElement)
|
||||||
|
if len(listBase) == 0:
|
||||||
|
continue
|
||||||
|
file.write('<h2>' + nameElement + ':</h2>\n');
|
||||||
|
file.write('<ul>\n');
|
||||||
|
for elem in listBase:
|
||||||
|
file.write('<li>' + generate_link(elem['node']) + '</li>')
|
||||||
|
file.write('</ul>\n');
|
||||||
|
|
||||||
file.write("<h2>Constructor and Destructor:</h2>\n")
|
# calculate element size :
|
||||||
file.write("<pre>\n");
|
listBase = element.get_all_sub_type(['methode', 'constructor', 'destructor'])
|
||||||
listBaseConstructor = element.get_all_sub_type(['constructor'])
|
displayLen = calculate_methode_size(listBase)
|
||||||
for elem in listBaseConstructor:
|
|
||||||
ret = write_methode(elem, namespaceStack, displayLen)
|
if element.get_node_type() == 'class' \
|
||||||
file.write(ret)
|
or element.get_node_type() == 'struct':
|
||||||
listBaseDestructor = element.get_all_sub_type(['destructor'])
|
|
||||||
for elem in listBaseDestructor:
|
|
||||||
ret = write_methode(elem, namespaceStack, displayLen)
|
|
||||||
file.write(ret)
|
|
||||||
file.write("</pre>\n");
|
|
||||||
file.write("<br/>\n")
|
|
||||||
|
|
||||||
file.write("<h2>Synopsis:</h2>\n")
|
if len(element.get_all_sub_type(['constructor', 'destructor'])) != 0:
|
||||||
file.write("<pre>\n");
|
file.write('<h2>Constructor and Destructor:</h2>\n')
|
||||||
|
file.write('<pre>\n');
|
||||||
|
listBaseConstructor = element.get_all_sub_type(['constructor'])
|
||||||
|
for elem in listBaseConstructor:
|
||||||
|
ret = write_methode(elem, namespaceStack, displayLen)
|
||||||
|
file.write(ret)
|
||||||
|
listBaseDestructor = element.get_all_sub_type(['destructor'])
|
||||||
|
for elem in listBaseDestructor:
|
||||||
|
ret = write_methode(elem, namespaceStack, displayLen)
|
||||||
|
file.write(ret)
|
||||||
|
file.write('</pre>\n');
|
||||||
|
file.write('<br/>\n')
|
||||||
|
|
||||||
|
if element.get_node_type() in ['library', 'application', 'namespace', 'class', 'struct']:
|
||||||
listBaseMethode = element.get_all_sub_type(['methode'])
|
listBaseMethode = element.get_all_sub_type(['methode'])
|
||||||
displayLen = calculate_methode_size(listBaseMethode)
|
if len(listBaseMethode) != 0:
|
||||||
for elem in listBaseMethode:
|
file.write('<h2>Synopsis:</h2>\n')
|
||||||
ret = write_methode(elem, namespaceStack, displayLen)
|
file.write('<pre>\n');
|
||||||
file.write(ret)
|
displayLen = calculate_methode_size(listBaseMethode)
|
||||||
file.write("</pre>\n")
|
for elem in listBaseMethode:
|
||||||
file.write("<br/>\n")
|
ret = write_methode(elem, namespaceStack, displayLen)
|
||||||
|
file.write(ret)
|
||||||
file.write("<h2>Description:</h2>\n")
|
file.write('</pre>\n')
|
||||||
|
file.write('<br/>\n')
|
||||||
|
|
||||||
|
# generate herirage list :
|
||||||
|
if element.get_node_type() == 'class':
|
||||||
|
parent = element.get_parents()
|
||||||
|
child = None
|
||||||
|
if parent != []:
|
||||||
|
file.write('<h2>Object Hierarchy:<h2>\n')
|
||||||
|
file.write('<pre>\n');
|
||||||
|
file.write(str(parent));
|
||||||
|
file.write('</pre>\n');
|
||||||
|
|
||||||
|
|
||||||
|
if len(listBase) != 0:
|
||||||
# display all functions :
|
# display all functions :
|
||||||
file.write("<h2>Detail:<h2>\n")
|
file.write('<h2>Detail:<h2>\n')
|
||||||
for element in listBase:
|
for subElement in listBase:
|
||||||
file.write('<h3><a id="' + str(element['node'].get_uid()) + '">' + element['node'].get_name() + '</a></h3>')
|
file.write('<h3><a id="' + str(subElement['node'].get_uid()) + '">' + subElement['node'].get_name() + '</a></h3>')
|
||||||
file.write("<pre>\n");
|
file.write('<pre>\n');
|
||||||
file.write(write_methode(element, namespaceStack, link = False))
|
file.write(write_methode(subElement, namespaceStack, link = False))
|
||||||
file.write("</pre>\n");
|
file.write('</pre>\n');
|
||||||
#debug.info(str(element['node'].get_doc()));
|
#debug.info(str(element['node'].get_doc()));
|
||||||
file.write(parse_doxygen(element['node'].get_doc()));
|
file.write(parse_doxygen(subElement['node'].get_doc()));
|
||||||
file.write("<br/>\n");
|
file.write('<br/>\n');
|
||||||
file.write("<hr/>\n");
|
file.write('<hr/>\n');
|
||||||
|
|
||||||
elif element.get_node_type() == 'struct':
|
if element.get_node_type() == 'enum':
|
||||||
|
myElementList = element.get_enum_list()
|
||||||
|
elementSize = 0
|
||||||
|
for enumElement in myElementList:
|
||||||
|
tmpLen = len(enumElement['name'])
|
||||||
|
if tmpLen > elementSize:
|
||||||
|
elementSize = tmpLen
|
||||||
|
|
||||||
|
|
||||||
|
file.write('<h2>Value list</h2>\n')
|
||||||
|
if len(myElementList) < 9:
|
||||||
|
nbColumn = 1
|
||||||
|
else:
|
||||||
|
nbColumn = 3
|
||||||
|
|
||||||
|
file.write('<ul>\n');
|
||||||
|
file.write('<table class="enumeration-list"><tr>\n');
|
||||||
|
nbCol = 0
|
||||||
|
isFirst = True
|
||||||
|
for enumElement in myElementList:
|
||||||
|
if isFirst == True:
|
||||||
|
file.write('<tr>\n');
|
||||||
|
isFirst = False
|
||||||
|
file.write('<td><a href="#' + enumElement['name'] + '">' + enumElement['name'] + '</a></td>')
|
||||||
|
nbCol += 1
|
||||||
|
if nbCol == nbColumn:
|
||||||
|
nbCol = 0
|
||||||
|
file.write('</tr>\n');
|
||||||
|
isFirst = True
|
||||||
|
if isFirst == False:
|
||||||
|
file.write('</tr>\n');
|
||||||
|
file.write('</table>\n');
|
||||||
|
file.write('</ul>\n');
|
||||||
|
|
||||||
|
file.write("<h2>Detail:<h2>\n")
|
||||||
|
isFirst = True
|
||||||
|
for enumElement in myElementList:
|
||||||
|
if isFirst == False:
|
||||||
|
file.write('<hr/>\n');
|
||||||
|
isFirst = False
|
||||||
|
file.write('<a id="' + enumElement['name'] + '"/>' + enumElement['name'])
|
||||||
|
file.write('<pre>\n')
|
||||||
|
file.write(enumElement['name'] + white_space(elementSize-len(enumElement['name'])) + ' = <span class="code-type">' + enumElement['value'] + '<span>')
|
||||||
|
file.write('</pre>\n')
|
||||||
|
if enumElement['doc'] != "":
|
||||||
|
file.write(parse_doxygen(enumElement['doc']));
|
||||||
|
|
||||||
|
if element.get_node_type() == 'union':
|
||||||
file.write("TODO : the page ...");
|
file.write("TODO : the page ...");
|
||||||
elif element.get_node_type() == 'enum':
|
|
||||||
file.write("TODO : the page ...");
|
|
||||||
elif element.get_node_type() == 'union':
|
|
||||||
file.write("TODO : the page ...");
|
|
||||||
else:
|
|
||||||
# not in a specific file ...
|
|
||||||
debug.warning("might not appear here :'" + element.get_node_type() + "' = '" + element.get_name() + "'")
|
|
||||||
pass
|
|
||||||
file.write(footer)
|
file.write(footer)
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import monkTools as tools
|
|||||||
import monkNode as Node
|
import monkNode as Node
|
||||||
import monkParse as Parse
|
import monkParse as Parse
|
||||||
import monkHtml
|
import monkHtml
|
||||||
|
import re
|
||||||
|
|
||||||
class Module:
|
class Module:
|
||||||
##
|
##
|
||||||
@ -104,6 +105,9 @@ 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:
|
||||||
|
self.structureLib.set_namespace()
|
||||||
|
|
||||||
# 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()
|
||||||
if self.pathGlobalDoc != "":
|
if self.pathGlobalDoc != "":
|
||||||
@ -356,3 +360,15 @@ def list_all_module_with_desc():
|
|||||||
def get_link_type(type):
|
def get_link_type(type):
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
def get_element_with_name(type):
|
||||||
|
global moduleList
|
||||||
|
debug.info("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))
|
||||||
|
return element
|
||||||
|
debug.info("we not find : " + type + " = " + str(ret))
|
||||||
|
return None
|
47
monkNode.py
47
monkNode.py
@ -24,6 +24,8 @@ class Node():
|
|||||||
self.lineNumber = lineNumber
|
self.lineNumber = lineNumber
|
||||||
self.subList = None
|
self.subList = None
|
||||||
self.access = None
|
self.access = None
|
||||||
|
# namespace elements : (set when all element are parsed ...
|
||||||
|
self.namespace = []
|
||||||
|
|
||||||
def to_str(self):
|
def to_str(self):
|
||||||
return ""
|
return ""
|
||||||
@ -135,7 +137,50 @@ class Node():
|
|||||||
# TODO : Sorted the list ...
|
# TODO : Sorted the list ...
|
||||||
pass
|
pass
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def set_namespace(self, hierarchy = []):
|
||||||
|
# store namespaces:
|
||||||
|
self.namespace = hierarchy
|
||||||
|
# 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_namespace(hierarchy)
|
||||||
|
hierarchy.pop()
|
||||||
|
elif self.nodeType in ['library', 'application']:
|
||||||
|
for element in self.subList:
|
||||||
|
element['node'].set_namespace()
|
||||||
|
|
||||||
|
def get_namespace(self):
|
||||||
|
return self.namespace
|
||||||
|
|
||||||
|
def find(self, list):
|
||||||
|
debug.info("find : " + str(list) + " in " + self.nodeType)
|
||||||
|
if len(list) == 0:
|
||||||
|
return None
|
||||||
|
if self.nodeType in ['library', 'application']:
|
||||||
|
if self.subList == None:
|
||||||
|
return None
|
||||||
|
for element in self.subList:
|
||||||
|
ret = element['node'].find(list)
|
||||||
|
if ret != None:
|
||||||
|
return ret
|
||||||
|
return None
|
||||||
|
if list[0] != self.name:
|
||||||
|
return None
|
||||||
|
if self.nodeType not in ['class', 'namespace', 'struct']:
|
||||||
|
return self
|
||||||
|
tmpList = list[1:]
|
||||||
|
if self.subList == None:
|
||||||
|
return None
|
||||||
|
for element in self.subList:
|
||||||
|
ret = element['node'].find(tmpList)
|
||||||
|
if ret != None:
|
||||||
|
return ret
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MainNode(Node):
|
class MainNode(Node):
|
||||||
|
@ -95,7 +95,10 @@ pre {
|
|||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.enumeration-list td {
|
||||||
|
padding-left:10px;
|
||||||
|
padding-right:10px;
|
||||||
|
}
|
||||||
|
|
||||||
.code-function {
|
.code-function {
|
||||||
text-decoration:none;
|
text-decoration:none;
|
||||||
|
@ -143,4 +143,5 @@ div#menu li a:hover {
|
|||||||
border-left-color: #000ADE;
|
border-left-color: #000ADE;
|
||||||
background: #6699FF;
|
background: #6699FF;
|
||||||
font-weight:bold;
|
font-weight:bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user