[DEV] work on the menu of documentation

This commit is contained in:
Edouard DUPIN 2013-12-11 01:18:15 +01:00
parent b02c8b5221
commit 5ea83bfdde
3 changed files with 338 additions and 38 deletions

View File

@ -5,6 +5,7 @@ import lutinTools
import CppHeaderParser import CppHeaderParser
import re import re
import codeBB import codeBB
import collections
global_class_link = { global_class_link = {
"std::string" : "http://www.cplusplus.com/reference/string/string/", "std::string" : "http://www.cplusplus.com/reference/string/string/",
@ -244,9 +245,75 @@ def class_name_to_file_name(className):
className = className.replace(" ", "") className = className.replace(" ", "")
className += ".html" className += ".html"
return className return className
"""
<div id="navigation">
<center>
<div id="menu">
<h2>Le manga</h2>
<ul class="niveau1">
<li class="sousmenu"><a href="http://127.0.0.1/AMS/Galerie_view/">Galerie</a>
<ul class="niveau2">
<li><a href="http://127.0.0.1/AMS/Galerie_view/Hunter_X_Hunter">Hunter_X_Hunter</a></li>
<li><a href="http://127.0.0.1/AMS/Galerie_view/Negima">Negima</a></li>
<li><a href="http://127.0.0.1/AMS/Galerie_view/Shaman_King">Shaman_King</a></li>
<li><a href="http://127.0.0.1/AMS/Galerie_view/love_Hina">love_Hina</a></li>
</ul>
</li>
<li class="sousmenu"><a href="http://127.0.0.1/AMS/Wiki_view/Wiki_view/HxH/Accueil">Hunter X Hunter </a>
<ul class="niveau2">
<li class="sousmenu"> Generalite :</li>
<li><a href="http://127.0.0.1/AMS/Wiki_view/HxH/hxh_resumer_general"> Generalite</a></li>
<li><a href="http://127.0.0.1/AMS/Wiki_view/HxH/manga/liste_des_tomes"> Les differents tomes </a></li>
</ul>
</li>
</ul>
</div>
</center>
</div>
"""
def addElement(elementList, tree):
if elementList[0] in tree.keys():
tree[elementList[0]] == addElement(elementList[1:], tree[elementList[0]])
else :
tree[elementList[0]] == elementList[0]
if len(elementList) != 1:
tree[elementList[0]] == addElement(elementList[1:], tree[elementList[0]])
return tree
def recursively_default_dict():
return collections.defaultdict(recursively_default_dict)
def createTree(list):
output = []
myTree = recursively_default_dict()
#myTree['a']['b'] = 'c'
for className in sorted(list) :
list = className.split("::")
if len(list)==1:
myTree[list[0]] == className
elif len(list)==2:
myTree[list[0]][list[1]] == className
elif len(list)==3:
myTree[list[0]][list[1]][list[2]] == className
elif len(list)==4:
myTree[list[0]][list[1]][list[2]][list[3]] == className
elif len(list)==5:
myTree[list[0]][list[1]][list[2]][list[3]][list[4]] == className
else:
myTree[list[0]][list[1]][list[2]][list[3]][list[4]][list[5]] == className
#output.append(className.split("::"))
#myTree = addElement(className.split("::"), myTree)
#debug.info("plop" + str(myTree))
return myTree
def addSub(tree, filterSubNamespace=False):
return ""
def generate(myDoc, outFolder) : def generate(myDoc, outFolder) :
lutinTools.CopyFile(lutinTools.GetCurrentPath(__file__)+"/theme/base.css", outFolder+"/base.css") lutinTools.CopyFile(lutinTools.GetCurrentPath(__file__)+"/theme/base.css", outFolder+"/base.css")
lutinTools.CopyFile(lutinTools.GetCurrentPath(__file__)+"/theme/menu.css", outFolder+"/menu.css")
# create common header # create common header
genericHeader = "<!DOCTYPE html>\n" genericHeader = "<!DOCTYPE html>\n"
genericHeader += "<html>\n" genericHeader += "<html>\n"
@ -254,54 +321,116 @@ def generate(myDoc, outFolder) :
genericHeader += " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">\n" genericHeader += " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">\n"
genericHeader += " <title>" + myDoc.moduleName + " Library</title>\n" genericHeader += " <title>" + myDoc.moduleName + " Library</title>\n"
genericHeader += " <link rel=\"stylesheet\" href=\"base.css\">\n" genericHeader += " <link rel=\"stylesheet\" href=\"base.css\">\n"
genericHeader += " <link rel=\"stylesheet\" href=\"menu.css\">\n"
genericHeader += "</head>\n" genericHeader += "</head>\n"
genericHeader += "<body>\n" genericHeader += "<body>\n"
genericHeader += " <div class=\"navbar navbar-fixed-top\">\n" genericHeader += " <div class=\"navbar navbar-fixed-top\">\n"
genericHeader += " <div class=\"container\">\n" genericHeader += " <div class=\"container\">\n"
genericHeader += " <h1>" + myDoc.moduleName + " Library</h1>\n" genericHeader += " <h1>" + myDoc.moduleName + " Library</h1>\n"
#genericHeader += " <ul>\n" genericHeader += ' <div id="menu">\n'
genericHeader += ' <h2>' + myDoc.moduleName + '</h2>\n'
globalList = []
for className in myDoc.listClass.keys() :
globalList.append(className)
for enumName in myDoc.listEnum.keys() :
globalList.append(enumName)
# check if all element start wuth the lib namespace (better for interpretations ...)
allSartWithModuleName = True
for className in sorted(globalList) :
if className[:len(myDoc.moduleName)+2] != myDoc.moduleName+"::":
allSartWithModuleName = False
break
myTree = createTree(globalList)
for element in sorted(myTree.keys()) :
debug.warning(" * " + element)
#get elemement
subElementTree = myTree[element]
for subElement in sorted(subElementTree.keys()) :
debug.warning(" " + subElement)
#get elemement
subSubElementTree = subElementTree[subElement]
for subSubElement in sorted(subSubElementTree.keys()) :
debug.warning(" " + subSubElement)
genericHeader += ' <ul class="niveau1">\n'
if len(myTree.keys()) == 1 \
and myDoc.moduleName in myTree.keys():
myTree = myTree[myDoc.moduleName]
# todo : in this case I will create a lib element and set all global element in it, other namespace will have there own entry ...:
# ewol
# ewol
# widget
# compositing
# resources
# sys
for element in sorted(myTree.keys()) :
#get elemement
subElementTree = myTree[element]
if len(myTree.keys()) != 1:
# TODO : ...
None
if len(subElementTree.keys()) == 0:
genericHeader += ' <li><a>' + element + '</a></li>\n'
continue
genericHeader += ' <li class="sousmenu"><a>' + element + '</a>\n'
genericHeader += ' <ul class="niveau2">\n'
for subElement in sorted(subElementTree.keys()) :
#get elemement
subSubElementTree = subElementTree[subElement]
debug.warning('len = ' + str(len(subSubElementTree.keys())) + " list" + str(subSubElementTree.keys()))
if len(subSubElementTree.keys()) == 0:
genericHeader += ' <li><a>' + subElement + '</a></li>\n'
continue
genericHeader += ' <li class="sousmenu"><a>' + subElement + '</a>\n'
genericHeader += ' <ul class="niveau3">\n'
for subSubElement in sorted(subSubElementTree.keys()) :
#get elemement
subSubSubElementTree = subSubElementTree[subSubElement]
if len(subSubSubElementTree.keys()) == 0:
genericHeader += ' <li><a>' + subSubElement + '</a></li>\n'
continue
genericHeader += ' <li><a>****' + subSubElement + '****</a></li>\n'
genericHeader += ' </ul>\n'
genericHeader += ' </li>\n'
genericHeader += ' </ul>\n'
genericHeader += ' </li>\n'
genericHeader += ' <ul>\n'
"""
baseNamespace = "" baseNamespace = ""
for className in sorted(myDoc.listClass.iterkeys()) : for className in sorted(globalList) :
pos = className.find("::") searchIn = className
if allSartWithModuleName == True:
searchIn = className[len(myDoc.moduleName)+2:]
pos = searchIn.find("::")
if pos >= 0: if pos >= 0:
namespace = className[:pos] namespace = searchIn[:pos]
rest = className[pos+2:] rest = searchIn[pos+2:]
else: else:
namespace = "" namespace = ""
rest = className rest = searchIn
if baseNamespace != namespace: if baseNamespace != namespace:
if baseNamespace != "": if baseNamespace != "":
genericHeader += " </ul>\n" genericHeader += ' </ul>\n'
genericHeader += " <li>" + namespace + "</li>\n" genericHeader += ' </li>\n'
genericHeader += " <ul>\n" genericHeader += ' </ul>\n'
genericHeader += ' <ul class="niveau1">\n'
genericHeader += ' <li class="sousmenu"><a>' + namespace + '</a>\n'
genericHeader += ' <ul class="niveau2">\n'
baseNamespace = namespace baseNamespace = namespace
genericHeader += " <li><a href=\"" + class_name_to_file_name(className) + "\">" + rest + "</a></li>\n" genericHeader += ' <li><a href="' + class_name_to_file_name(className) + '">' + rest + '</a></li>\n'
if baseNamespace != "": if baseNamespace != "":
genericHeader += " </ul>\n" genericHeader += ' </ul>\n'
genericHeader += ' </li>\n'
genericHeader += ' </ul>\n'
genericHeader += ' </div>\n'
"""
genericHeader += ' <h3> </h3>\n'
genericHeader += ' </div>\n'
for enumName in sorted(myDoc.listEnum.iterkeys()) :
pos = enumName.find("::")
if pos >= 0:
namespace = enumName[:pos]
rest = enumName[pos+2:]
else:
namespace = ""
rest = enumName
if baseNamespace != namespace:
if baseNamespace != "":
genericHeader += " </ul>\n"
genericHeader += " <li>" + namespace + "</li>\n"
genericHeader += " <ul>\n"
baseNamespace = namespace
genericHeader += " <li><a href=\"" + class_name_to_file_name(enumName) + "\">" + rest + "</a></li>\n"
if baseNamespace != "":
genericHeader += " </ul>\n"
#genericHeader += " </ul>\n"
genericHeader += " </div>\n" genericHeader += " </div>\n"
genericHeader += " </div>\n" genericHeader += " </div>\n"
genericHeader += " <div class=\"container\" id=\"content\">\n" genericHeader += " <div class=\"container\" id=\"content\">\n"
@ -348,19 +477,44 @@ def generate(myDoc, outFolder) :
sizefunction = calsulateSizeFunction(function, sizefunction) sizefunction = calsulateSizeFunction(function, sizefunction)
sizeReturn = calsulateSizeReturn(function, sizeReturn) sizeReturn = calsulateSizeReturn(function, sizeReturn)
file.write("<h2>Constructor and Destructor:</h2>\n")
file.write("<pre>\n");
for function in localClass["methods"]["public"]:
if function['destructor'] \
or function['constructor'] :
display_reduct_function(function, file, "+ ", sizeReturn, sizefunction, myDoc)
for function in localClass["methods"]["protected"]:
if function['destructor'] \
or function['constructor'] :
display_reduct_function(function, file, "# ", sizeReturn, sizefunction, myDoc)
for function in localClass["methods"]["private"]:
if function['destructor'] \
or function['constructor'] :
display_reduct_function(function, file, "- ", sizeReturn, sizefunction, myDoc)
file.write("</pre>\n");
file.write("<h2>Synopsis:</h2>\n") file.write("<h2>Synopsis:</h2>\n")
# display all functions : # display all functions :
# TODO: ... # TODO: ...
file.write("<pre>\n"); file.write("<pre>\n");
for function in localClass["methods"]["public"]: for function in localClass["methods"]["public"]:
display_reduct_function(function, file, "+ ", sizeReturn, sizefunction, myDoc) if not function['destructor'] \
and not function['constructor'] :
display_reduct_function(function, file, "+ ", sizeReturn, sizefunction, myDoc)
for function in localClass["methods"]["protected"]: for function in localClass["methods"]["protected"]:
display_reduct_function(function, file, "# ", sizeReturn, sizefunction, myDoc) if not function['destructor'] \
and not function['constructor'] :
display_reduct_function(function, file, "# ", sizeReturn, sizefunction, myDoc)
for function in localClass["methods"]["private"]: for function in localClass["methods"]["private"]:
display_reduct_function(function, file, "- ", sizeReturn, sizefunction, myDoc) if not function['destructor'] \
and not function['constructor'] :
display_reduct_function(function, file, "- ", sizeReturn, sizefunction, myDoc)
file.write("</pre>\n"); file.write("</pre>\n");
file.write("\n") file.write("\n")
file.write("\n") file.write("\n")
heritage = myDoc.get_heritage_list(className) heritage = myDoc.get_heritage_list(className)
heritageDown = myDoc.get_down_heritage_list(className) heritageDown = myDoc.get_down_heritage_list(className)
if len(heritage) > 1 \ if len(heritage) > 1 \

View File

@ -55,8 +55,8 @@ body {
text-shadow: 0 1px 0 #ce4213; text-shadow: 0 1px 0 #ce4213;
padding: 10px 20px 10px; padding: 10px 20px 10px;
margin-left: -20px; margin-left: -20px;
overflow:scroll; //overflow:scroll;
overflow-x:hidden; //overflow-x:hidden;
} }
/* /*
.navbar ul { .navbar ul {

146
theme/menu.css Normal file
View File

@ -0,0 +1,146 @@
/* CSS Document */
/*----------------MENU-----------------*/
div#menu div{
margin-top: 0px;
background: #6699FF;
}
/* permet l'affichage du haut du menu*/
div#menu h2{
color: #000000;
FONT-FAMILY: Arial;
FONT-SIZE: 9pt;
text-align:left;
margin: 0;
padding: 3px;
padding-left: 6px;
background: #1a62db;
}
div#menu h3{
margin: 0;
padding: 6px;
background: #6699FF;
}
div#menu a{
color: #000000;
bgcolor=#6699FF;
FONT-FAMILY: Arial;
FONT-SIZE: 9pt;
}
div#menu li {
position: relative;
list-style:none;
margin:0px;
border-bottom: 1px solid #0008ab;
}
div#menu li.sousmenu {
background: url(sous_menu.gif) 95% 50% no-repeat;
}
div#menu li:hover {
background: #0008ab;
}
div#menu li.sousmenu:hover {
background: #0008ab;
}
div#menu ul ul {
position: absolute;
top: 0px;
}
/*TAILLE PREMIERE COLONNE*/
div#menu {
float: center;
width: 200px;
text-align:left;
}
div#menu ul {
margin: 0;
padding: 0;
width: 200px;
background: #6699FF;
border: 0px solid;
}
div#menu ul ul {
left: 199px;
display:none;
background: #FFFFFF;
}
div#menu li a {
display: block;
padding: 2px 0px 2px 4px;
text-decoration: none;
width: 191px;
border-left: 3px solid #6699FF;
}
div#menu form {
border-left: 8px solid #6699FF;
background: #6699FF;
FONT-FAMILY: Arial;
margin:0px;
FONT-SIZE: 8pt;
}
div#menu texte {
border-left: 8px solid #6699FF;
FONT-FAMILY: Arial;
FONT-SIZE: 9pt;
font-weight:bold;
border-bottom: 1px solid #6699FF;
}
/*TAILLE DEUXIEME COLONE*/
div#menu ul.niveau1 ul {
left: 200px;
height: 500px;
border: 1px solid #0008ab;
background: #1a62db;
/*
overflow:scroll;
overflow-y:auto;
overflow-x:hidden;
*/
}
div#menu ul.niveau1 li {
background: #6699FF;
}
div#menu ul.niveau1 li.sousmenu:hover ul.niveau2 {
width:219px;
display:block;
}
/*TAILLE TROISIEME COLONNE*/
div#menu ul.niveau2 ul {
left: 219px;
height: 500px;
}
div#menu ul.niveau2 li a {
width: 200px;
}
div#menu ul.niveau2 li.sousmenu:hover ul.niveau3 {
width:10em;
display:block;
}
/*TAILLE Quatrieme COLONNE*/
div#menu ul.niveau3 ul {
left: 369px;
height: 500px;
}
div#menu ul.niveau3 li a {
width: 200px;
}
div#menu ul.niveau3 li.sousmenu:hover ul.niveau4 {
width:10em;
display:block;
}
/*TAILLE DEUXIEME COLONE BIS????*/
/*COULEUR DES BORDURES*/
div#menu li a:hover {
border-left-color: #000ADE;
background: #6699FF;
font-weight:bold;
}