[DEV] better display

This commit is contained in:
Edouard DUPIN 2013-12-28 12:44:01 +01:00
parent 7d217467dc
commit 5e80692aa8
3 changed files with 144 additions and 60 deletions

View File

@ -48,7 +48,7 @@ def transcode(value):
value, value,
flags=re.DOTALL) flags=re.DOTALL)
value = re.sub(r'\[color=(\#[0-9A-F]{6}|[a-z\-]+)\](.*?)\[/color\]', value = re.sub(r'\[color=(\(#[0-9A-F]{6}|[a-z\-]+|.+?)\](.*?)\[/color\]',
r'<span style="color: \1;">\2</span>', r'<span style="color: \1;">\2</span>',
value, value,
flags=re.DOTALL) flags=re.DOTALL)
@ -83,6 +83,11 @@ def transcode(value):
value, value,
flags=re.DOTALL) flags=re.DOTALL)
value = re.sub(r'\[pre\]((\\\[|\\\]|.)*?)\[/pre\]',
r'<br/><pre>\1</pre>',
value,
flags=re.DOTALL)
value = re.sub(r'\[note\](.*?)\[/note\]', value = re.sub(r'\[note\](.*?)\[/note\]',
r'<br/><b>Note:</b><pre>\1</pre>', r'<br/><b>Note:</b><pre>\1</pre>',
value, value,

View File

@ -36,8 +36,9 @@ def display_doxygen_param(comment, input, output):
def parse_doxygen(data) : def parse_doxygen(data) :
data = "\n" + data
if '@' in data: if '@' in data:
streams = data.split("@") streams = data.split("\n@")
else: else:
streams = [ "brief " + data] streams = [ "brief " + data]
data2 = '' data2 = ''
@ -66,7 +67,7 @@ def parse_doxygen(data) :
if element[:1] == "\n" \ if element[:1] == "\n" \
or element[:2] == "\n\n": or element[:2] == "\n\n":
# nothing to do : Nomale case of the first \n # nothing to do : Nomale case of the first \n
None pass
elif element[:14] == "param[in,out] " \ elif element[:14] == "param[in,out] " \
or element[:14] == "param[out,in] ": or element[:14] == "param[out,in] ":
data3 += display_doxygen_param(element[14:], True, True) data3 += display_doxygen_param(element[14:], True, True)
@ -139,9 +140,13 @@ def calculate_methode_size(list):
methodeSize = 0; methodeSize = 0;
haveVirtual = False haveVirtual = False
for element in list: for element in list:
if element['node'].get_virtual() == True: if element['node'].get_node_type() == 'methode' \
and element['node'].get_virtual() == True:
haveVirtual = True haveVirtual = True
retType = element['node'].get_return_type().to_str() if element['node'].get_node_type() == 'variable':
retType = element['node'].get_type().to_str()
else:
retType = element['node'].get_return_type().to_str()
tmpLen = len(retType) tmpLen = len(retType)
if returnSize < tmpLen: if returnSize < tmpLen:
returnSize = tmpLen returnSize = tmpLen
@ -153,13 +158,14 @@ def calculate_methode_size(list):
def write_methode(element, namespaceStack, displaySize = None, link = True): def write_methode(element, namespaceStack, displaySize = None, link = True):
if element['node'].get_request_hidden() == True: if element['node'].get_request_hidden() == True:
return return ""
if displaySize == None: if displaySize == None:
displaySize = calculate_methode_size([element]) displaySize = calculate_methode_size([element])
ret = "" ret = ""
if 'access' in element.keys(): if 'access' in element.keys():
if element['access'] == 'private': if element['access'] == 'private':
ret += '- ' ret += '- '
return ""
elif element['access'] == 'protected': elif element['access'] == 'protected':
ret += '# ' ret += '# '
elif element['access'] == 'public': elif element['access'] == 'public':
@ -169,45 +175,59 @@ def write_methode(element, namespaceStack, displaySize = None, link = True):
else: else:
ret += ' ' ret += ' '
if element['node'].get_virtual() == True: if element['node'].get_node_type() == 'variable':
ret += module.display_color('virtual') + ' ' if displaySize[2] == True:
elif displaySize[2] == True: ret += ' '
ret += ' ' raw, decorated = element['node'].get_type().to_str_decorated()
else:
raw, decorated = element['node'].get_return_type().to_str_decorated() if element['node'].get_virtual() == True:
ret += module.display_color('virtual') + ' '
elif displaySize[2] == True:
ret += ' '
raw, decorated = element['node'].get_return_type().to_str_decorated()
if raw != "": if raw != "":
ret += decorated ret += decorated
ret += " " ret += " "
raw += " " raw += " "
ret += white_space(displaySize[0] - len(raw)+1) ret += white_space(displaySize[0] - len(raw)+1)
name = element['node'].get_name() name = element['node'].get_name()
if link == True:
ret += '<a class="code-function" href="#' + str(element['node'].get_uid()) + '">' + name + '</a>'
else:
ret += '<span class="code-function">' + name + '</span>'
ret += white_space(displaySize[1] - len(name)) + ' ('
listParam = element['node'].get_param()
first = True
for param in listParam:
if first == False:
ret += ',<br/>'
if displaySize[2] == True:
ret += ' '
ret += white_space(displaySize[0] + displaySize[1] +5)
first = False
typeNoDecoration, typeDecorated = param.get_type().to_str_decorated()
#retParam = module.display_color(param.get_type().to_str())
retParam = typeDecorated
if retParam != "":
ret += retParam
ret += " "
ret += "<span class=\"code-argument\">" + param.get_name() + "</span>"
ret += ')'
if element['node'].get_virtual_pure() == True:
ret += ' = 0'
if element['node'].get_constant() == True:
ret += module.display_color(' const')
if element['node'].get_node_type() == 'variable':
classDecoration = "code-member"
else:
classDecoration = "code-function"
if link == True:
ret += '<a class="' + classDecoration + '" href="#' + str(element['node'].get_uid()) + '">' + name + '</a>'
else:
ret += '<span class="' + classDecoration + '">' + name + '</span>'
if element['node'].get_node_type() != 'variable':
ret += white_space(displaySize[1] - len(name)) + ' ('
listParam = element['node'].get_param()
first = True
for param in listParam:
if first == False:
ret += ',<br/>'
if displaySize[2] == True:
ret += ' '
ret += white_space(displaySize[0] + displaySize[1] +5)
first = False
typeNoDecoration, typeDecorated = param.get_type().to_str_decorated()
#retParam = module.display_color(param.get_type().to_str())
retParam = typeDecorated
if retParam != "":
ret += retParam
ret += " "
ret += "<span class=\"code-argument\">" + param.get_name() + "</span>"
ret += ')'
if element['node'].get_virtual_pure() == True:
ret += ' = 0'
if element['node'].get_constant() == True:
ret += module.display_color(' const')
ret += ';' ret += ';'
ret += '<br/>' ret += '<br/>'
return ret return ret
@ -246,49 +266,97 @@ def generate_page(outFolder, header, footer, element):
file.write(documentation) file.write(documentation)
file.write('<br/>\n') file.write('<br/>\n')
if element.get_node_type() in ['namespace']:
tmpName = element.get_name()
tmpNameUpper = tmpName.upper()
tmpName = tmpNameUpper[0] + tmpName[1:]
compleateName = ""
for namespace in element.get_namespace():
compleateName += namespace + "::"
compleateName += tmpName
associatedClass = module.get_element_with_name(compleateName)
if associatedClass != None:
file.write('<h2>Associated Class:</h2>');
file.write('<ul>\n');
file.write(generate_link(associatedClass));
file.write('</ul>\n');
if element.get_node_type() in ['class']:
tmpName = element.get_name()
tmpNameLower = tmpName.lower()
tmpName = tmpNameLower[0] + tmpName[1:]
compleateName = ""
for namespace in element.get_namespace():
compleateName += namespace + "::"
compleateName += tmpName
associatedClass = module.get_element_with_name(compleateName)
if associatedClass != None:
file.write('<h2>Associated Namespace:</h2>');
file.write('<ul>\n');
file.write(generate_link(associatedClass));
file.write('</ul>\n');
if element.get_node_type() in ['library', 'application', 'namespace', 'class', 'struct']: if element.get_node_type() in ['library', 'application', 'namespace', 'class', 'struct']:
for nameElement in ['namespace', 'class', 'struct', 'enum', 'union']: for nameElement in ['namespace', 'class', 'struct', 'enum', 'union']:
listBase = element.get_all_sub_type(nameElement) listBase = element.get_all_sub_type(nameElement)
if len(listBase) == 0: if len(listBase) == 0:
continue continue
file.write('<h2>' + nameElement + ':</h2>\n'); descLocal = ""
file.write('<ul>\n');
for elem in listBase: for elem in listBase:
file.write('<li>' + generate_link(elem['node']) + '</li>') if elem['node'].get_request_hidden() == True:
file.write('</ul>\n'); continue
if 'access' in elem.keys() \
and elem['access'] == 'private':
continue
descLocal += '<li>' + generate_link(elem['node']) + '</li>'
if descLocal != "":
file.write('<h2>' + nameElement + ':</h2>\n');
file.write('<ul>\n');
file.write(descLocal)
file.write('</ul>\n');
# calculate element size : # calculate element size :
listBase = element.get_all_sub_type(['methode', 'constructor', 'destructor']) listBase = element.get_all_sub_type(['methode', 'constructor', 'destructor', 'variable'])
displayLen = calculate_methode_size(listBase) displayLen = calculate_methode_size(listBase)
if element.get_node_type() == 'class' \ if element.get_node_type() == 'class' \
or element.get_node_type() == 'struct': or element.get_node_type() == 'struct':
if len(element.get_all_sub_type(['constructor', 'destructor'])) != 0: if len(element.get_all_sub_type(['constructor', 'destructor'])) != 0:
file.write('<h2>Constructor and Destructor:</h2>\n') globalWrite = ""
file.write('<pre>\n');
listBaseConstructor = element.get_all_sub_type(['constructor']) listBaseConstructor = element.get_all_sub_type(['constructor'])
for elem in listBaseConstructor: for elem in listBaseConstructor:
ret = write_methode(elem, namespaceStack, displayLen) if elem['access'] == 'private':
file.write(ret) continue
globalWrite += write_methode(elem, namespaceStack, displayLen)
listBaseDestructor = element.get_all_sub_type(['destructor']) listBaseDestructor = element.get_all_sub_type(['destructor'])
for elem in listBaseDestructor: for elem in listBaseDestructor:
ret = write_methode(elem, namespaceStack, displayLen) if elem['access'] == 'private':
file.write(ret) continue
file.write('</pre>\n'); globalWrite += write_methode(elem, namespaceStack, displayLen)
file.write('<br/>\n') if globalWrite != "":
file.write('<h2>Constructor and Destructor:</h2>\n')
file.write('<pre>\n');
file.write(globalWrite);
file.write('</pre>\n');
file.write('<br/>\n')
if element.get_node_type() in ['library', 'application', 'namespace', 'class', 'struct']: 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', 'variable'])
if len(listBaseMethode) != 0: if len(listBaseMethode) != 0:
file.write('<h2>Synopsis:</h2>\n') globalWrite = ""
file.write('<pre>\n');
displayLen = calculate_methode_size(listBaseMethode) displayLen = calculate_methode_size(listBaseMethode)
for elem in listBaseMethode: for elem in listBaseMethode:
ret = write_methode(elem, namespaceStack, displayLen) if 'access' in elem.keys() \
file.write(ret) and elem['access'] == 'private':
file.write('</pre>\n') continue
file.write('<br/>\n') globalWrite += write_methode(elem, namespaceStack, displayLen)
if globalWrite != "":
file.write('<h2>Synopsis:</h2>\n')
file.write('<pre>\n');
file.write(globalWrite);
file.write('</pre>\n')
file.write('<br/>\n')
# generate herirage list : # generate herirage list :
if element.get_node_type() == 'class': if element.get_node_type() == 'class':
@ -359,6 +427,11 @@ def generate_page(outFolder, header, footer, element):
allDetailDoc = "" allDetailDoc = ""
lastDoc = "" lastDoc = ""
for subElement in listBase: for subElement in listBase:
if subElement['node'].get_request_hidden() == True:
continue
if 'access' in subElement.keys() \
and subElement['access'] == 'private':
continue
file.write('<a id="' + str(subElement['node'].get_uid()) + '"/>') file.write('<a id="' + str(subElement['node'].get_uid()) + '"/>')
if lastDoc != "" \ if lastDoc != "" \
and subElement['node'].get_request_in_previous() == True: and subElement['node'].get_request_in_previous() == True:

View File

@ -302,6 +302,9 @@ class parse_file():
self.nameStack.append(",") self.nameStack.append(",")
else: else:
self.nameStack.append("//!< " + tok.value) self.nameStack.append("//!< " + tok.value)
elif self.previous != None \
and self.previous.get_node_type() == 'variable':
self.previous.add_doc([tok.value])
else: else:
#self.lastComment.append(tok.value) #self.lastComment.append(tok.value)
pass pass
@ -336,6 +339,7 @@ class parse_file():
self.brace_type_push('unknow', self.nameStack) self.brace_type_push('unknow', self.nameStack)
self.stack = [] self.stack = []
self.nameStack = [] self.nameStack = []
self.lastComment = []
elif tok.type == 'CLOSE_BRACE': elif tok.type == 'CLOSE_BRACE':
if len(self.nameStack) != 0: if len(self.nameStack) != 0:
if self.previous_is('enum') == True: if self.previous_is('enum') == True:
@ -415,7 +419,7 @@ class parse_file():
else: else:
# TODO : Check if it is true in all case : # TODO : Check if it is true in all case :
self.brace_type_append('variable', self.nameStack); self.brace_type_append('variable', self.nameStack);
#debug.warning(self.gen_debug_space() + "semicolumn : " + str(self.nameStack)); #debug.warning(self.gen_debug_space() + "variable : " + str(self.nameStack));
self.stack = [] self.stack = []
self.nameStack = [] self.nameStack = []
self.lastComment = [] self.lastComment = []
@ -427,6 +431,7 @@ class parse_file():
def create_element(self, type, stack): def create_element(self, type, stack):
ret = None ret = None
self.previous = None
if type == 'empty' \ if type == 'empty' \
or type == 'enum list': or type == 'enum list':
pass pass
@ -452,6 +457,7 @@ class parse_file():
ret = Enum.Enum(stack, self.headerFileName, self.curLine, self.lastComment) ret = Enum.Enum(stack, self.headerFileName, self.curLine, self.lastComment)
elif type == 'variable': elif type == 'variable':
ret = Variable.Variable(stack, self.headerFileName, self.curLine, self.lastComment) ret = Variable.Variable(stack, self.headerFileName, self.curLine, self.lastComment)
self.previous = ret
else: else:
debug.error("unknow type ...") debug.error("unknow type ...")
return ret return ret