Commit 143b39e7 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.4.4-20050817

parent 360bc253
DOXYGEN Version 1.4.4-20050815
DOXYGEN Version 1.4.4-20050817
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (15 August 2005)
Dimitri van Heesch (17 August 2005)
DOXYGEN Version 1.4.4_20050815
DOXYGEN Version 1.4.4_20050817
Please read INSTALL for compilation instructions.
......@@ -17,5 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (15 August 2005)
Dimitri van Heesch (dimitri@stack.nl) (17 August 2005)
1.4.4-20050815
1.4.4-20050817
......@@ -268,6 +268,21 @@ static STLInfo g_stlinfo[] =
{ "priority_queue", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
{ "stack", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
{ "valarray", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
{ "exception", 0, 0, 0, 0, 0, 0, FALSE, FALSE },
{ "bad_alloc", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "bad_cast", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "bad_typeid", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "logic_error", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "ios_base::failure", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "runtime_error", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "bad_exception", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "domain_error", "logic_error", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "invalid_argument", "logic_error", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "length_error", "logic_error", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "out_of_range", "logic_error", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "range_error", "runtime_error", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "overflow_error", "runtime_error", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "underflow_error", "runtime_error", 0, 0, 0, 0, 0, FALSE, FALSE },
{ 0, 0, 0, 0, 0, 0, 0, FALSE, FALSE }
};
......@@ -3162,119 +3177,22 @@ static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,co
*/
static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,const QCString &name)
{
#if 0
ClassDef *result=0;
FileDef *fd=cd->getFileDef();
// try using of namespaces in namespace scope
NamespaceDef *nd=cd->getNamespaceDef();
if (nd) // class is inside a namespace
{
QCString fName = nd->name()+"::"+name;
result = getResolvedClass(cd,fd,fName);
if (result && result!=cd)
{
return result;
}
NamespaceSDict *nl = nd->getUsedNamespaces();
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceSDict::Iterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) ; ++nli)
{
fName = nd->name()+"::"+name;
result = getResolvedClass(cd,fd,fName);
if (result && result!=cd) return result;
}
}
SDict<Definition> *cl = nd->getUsedClasses();
if (cl)
{
SDict<Definition>::Iterator cli(*cl);
Definition *ucd;
for (cli.toFirst(); (ucd=cli.current()) ; ++cli)
{
if (ucd->definitionType()==Definition::TypeClass &&
rightScopeMatch(ucd->name(),name))
{
return (ClassDef *)ucd;
}
}
}
// TODO: check any inbetween namespaces as well!
if (fd) // and in the global namespace
{
SDict<Definition> *cl = fd->getUsedClasses();
if (cl)
{
SDict<Definition>::Iterator cli(*cl);
Definition *ucd;
for (cli.toFirst(); (ucd=cli.current()); ++cli)
{
if (ucd->definitionType()==Definition::TypeClass &&
rightScopeMatch(ucd->name(),name))
{
return (ClassDef *)ucd;
}
}
}
}
}
// try using of namespaces in file scope
if (fd)
{
// look for the using statement in this file in which the
// class was found
NamespaceSDict *nl = fd->getUsedNamespaces();
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceSDict::Iterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) ; ++nli)
{
QCString fName = nd->name()+"::"+name;
result=getResolvedClass(cd,fd,fName);
if (result && result!=cd)
{
return result;
}
}
}
SDict<Definition> *cl = fd->getUsedClasses();
if (cl)
{
SDict<Definition>::Iterator cli(*cl);
Definition *ucd;
for (cli.toFirst(); (ucd=cli.current()) ; ++cli)
{
if (ucd->definitionType()==Definition::TypeClass &&
rightScopeMatch(ucd->name(),name))
{
return (ClassDef *)ucd;
}
}
}
}
#endif
FileDef *fd=cd->getFileDef();
ClassDef *result=0;
if (context && cd!=context)
{
result = getResolvedClass(context,0,name);
result = getResolvedClass(context,0,name,0,0,FALSE,TRUE);
}
if (result==0)
{
result = getResolvedClass(cd,fd,name);
result = getResolvedClass(cd,fd,name,0,0,FALSE,TRUE);
}
//printf("** Trying to find %s within context %s class %s result=%s\n",
//printf("** Trying to find %s within context %s class %s result=%s lookup=%p\n",
// name.data(),
// context ? context->name().data() : "<none>",
// cd ? cd->name().data() : "<none>",
// result ? result->name().data() : "<none>"
// result ? result->name().data() : "<none>",
// Doxygen::classSDict.find(name)
// );
return result;
}
......@@ -3320,7 +3238,7 @@ static void findUsedClassesForClass(Entry *root,
MemberDef *md=mi->memberDef;
if (md->isVariable()) // for each member variable in this class
{
//printf("Found variable %s in class %s\n",md->name().data(),masterCd->name().data());
//printf(" Found variable %s in class %s\n",md->name().data(),masterCd->name().data());
QCString type=removeRedundantWhiteSpace(md->typeString());
int pos=0;
QCString usedClassName;
......@@ -3332,11 +3250,16 @@ static void findUsedClassesForClass(Entry *root,
type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs);
}
//printf(" template substitution gives=%s\n",type.data());
//printf(" template substitution gives=%s\n",type.data());
while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec)!=-1)
{
// find the type (if any) that matches usedClassName
ClassDef *typeCd = getResolvedClass(masterCd,masterCd->getFileDef(),usedClassName);
ClassDef *typeCd = getResolvedClass(masterCd,
masterCd->getFileDef(),
usedClassName,
0,0,
FALSE,TRUE
);
//printf("====> usedClassName=%s -> typeCd=%s\n",
// usedClassName.data(),typeCd?typeCd->name().data():"<none>");
if (typeCd)
......@@ -3383,6 +3306,7 @@ static void findUsedClassesForClass(Entry *root,
usedCd = new ClassDef(
masterCd->getDefFileName(),masterCd->getDefLine(),
usedName,ClassDef::Class);
usedCd->makeTemplateArgument();
Doxygen::hiddenClasses.append(usedName,usedCd);
}
if (usedCd)
......@@ -3536,7 +3460,7 @@ static bool findTemplateInstanceRelation(Entry *root,
if (freshInstance)
{
Debug::print(Debug::Classes,0," found fresh instance!\n");
Debug::print(Debug::Classes,0," found fresh instance '%s'!\n",instanceClass->name().data());
Doxygen::classSDict.append(instanceClass->name(),instanceClass);
instanceClass->setTemplateBaseClassNames(templateNames);
......@@ -3638,11 +3562,12 @@ static bool findClassRelation(
MemberDef *baseClassTypeDef=0;
QCString templSpec;
ClassDef *baseClass=getResolvedClass(explicitGlobalScope ? 0 : cd,
cd->getFileDef(), // todo: is this ok?
cd->getFileDef(),
baseClassName,
&baseClassTypeDef,
&templSpec,
mode==Undocumented
mode==Undocumented,
TRUE
);
//printf("baseClassName=%s baseClass=%p cd=%p explicitGlobalScope=%d\n",
// baseClassName.data(),baseClass,cd,explicitGlobalScope);
......@@ -3695,7 +3620,14 @@ static bool findClassRelation(
{
templSpec=baseClassName.mid(i,e-i);
baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e);
baseClass=getResolvedClass(cd,cd->getFileDef(),baseClassName);
baseClass=getResolvedClass(cd,
cd->getFileDef(),
baseClassName,
&baseClassTypeDef,
0, //&templSpec,
mode==Undocumented,
TRUE
);
//printf("baseClass=%p -> baseClass=%s templSpec=%s\n",
// baseClass,baseClassName.data(),templSpec.data());
}
......@@ -3707,7 +3639,14 @@ static bool findClassRelation(
{
// replace any namespace aliases
replaceNamespaceAliases(baseClassName,si);
baseClass=getResolvedClass(cd,cd->getFileDef(),baseClassName);
baseClass=getResolvedClass(cd,
cd->getFileDef(),
baseClassName,
&baseClassTypeDef,
&templSpec,
mode==Undocumented,
TRUE
);
found=baseClass!=0 && baseClass!=cd;
}
......@@ -4305,7 +4244,7 @@ static void addMemberDocs(Entry *root,
static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd,
const char *scopeName)
{
ClassDef *tcd = getResolvedClass(nd,fd,scopeName,0,0,TRUE);
ClassDef *tcd = getResolvedClass(nd,fd,scopeName,0,0,TRUE,TRUE);
return tcd;
}
......
BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
font-family: Geneva, Arial, Helvetica, sans-serif;
}
BODY,TD {
font-size: 90%;
}
H1 {
text-align: center;
font-size: 160%;
}
H2 {
font-size: 120%;
}
H3 {
font-size: 100%;
}
CAPTION { font-weight: bold }
DIV.qindex {
width: 100%;
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
padding: 2px;
line-height: 140%;
}
DIV.nav {
width: 100%;
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
padding: 2px;
line-height: 140%;
}
DIV.navtab {
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
margin-right: 15px;
padding: 2px;
}
TD.navtab {
font-size: 70%;
}
A.qindex {
text-decoration: none;
font-weight: bold;
color: #1A419D;
}
A.qindex:visited {
text-decoration: none;
font-weight: bold;
color: #1A419D
}
A.qindex:hover {
text-decoration: none;
background-color: #ddddff;
}
A.qindexHL {
text-decoration: none;
font-weight: bold;
background-color: #6666cc;
color: #ffffff;
border: 1px double #9295C2;
}
A.qindexHL:hover {
text-decoration: none;
background-color: #6666cc;
color: #ffffff;
}
A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
A.el { text-decoration: none; font-weight: bold }
A.elRef { font-weight: bold }
A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
A.codeRef:link { font-weight: normal; color: #0000FF}
A.codeRef:visited { font-weight: normal; color: #0000FF}
A:hover { text-decoration: none; background-color: #f2f2ff }
DL.el { margin-left: -1cm }
.fragment {
font-family: Fixed, monospace;
font-size: 95%;
}
PRE.fragment {
border: 1px solid #CCCCCC;
background-color: #f5f5f5;
margin-top: 4px;
margin-bottom: 4px;
margin-left: 2px;
margin-right: 8px;
padding-left: 6px;
padding-right: 6px;
padding-top: 4px;
padding-bottom: 4px;
}
DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
TD.md { background-color: #F4F4FB; font-weight: bold; }
TD.mdPrefix {
background-color: #F4F4FB;
color: #606060;
font-size: 80%;
}
TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
DIV.groupHeader {
margin-left: 16px;
margin-top: 12px;
margin-bottom: 6px;
font-weight: bold;
}
DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
BODY {
background: white;
color: black;
margin-right: 20px;
margin-left: 20px;
}
TD.indexkey {
background-color: #e8eef2;
font-weight: bold;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px;
border: 1px solid #CCCCCC;
}
TD.indexvalue {
background-color: #e8eef2;
font-style: italic;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px;
border: 1px solid #CCCCCC;
}
TR.memlist {
background-color: #f0f0f0;
}
P.formulaDsp { text-align: center; }
IMG.formulaDsp { }
IMG.formulaInl { vertical-align: middle; }
SPAN.keyword { color: #008000 }
SPAN.keywordtype { color: #604020 }
SPAN.keywordflow { color: #e08000 }
SPAN.comment { color: #800000 }
SPAN.preprocessor { color: #806020 }
SPAN.stringliteral { color: #002080 }
SPAN.charliteral { color: #008080 }
.mdTable {
border: 1px solid #868686;
background-color: #F4F4FB;
}
.mdRow {
padding: 8px 10px;
}
.mdescLeft {
padding: 0px 8px 4px 8px;
font-size: 80%;
font-style: italic;
background-color: #FAFAFA;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
border-left: 1px none #E0E0E0;
margin: 0px;
}
.mdescRight {
padding: 0px 8px 4px 8px;
font-size: 80%;
font-style: italic;
background-color: #FAFAFA;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
border-left: 1px none #E0E0E0;
margin: 0px;
}
.memItemLeft {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: solid;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memItemRight {
padding: 1px 8px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: solid;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memTemplItemLeft {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memTemplItemRight {
padding: 1px 8px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memTemplParams {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: solid;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
color: #606060;
background-color: #FAFAFA;
font-size: 80%;
}
.search { color: #003399;
font-weight: bold;
}
FORM.search {
margin-bottom: 0px;
margin-top: 0px;
}
INPUT.search { font-size: 75%;
color: #000080;
font-weight: normal;
background-color: #e8eef2;
}
TD.tiny { font-size: 75%;
}
a {
color: #1A41A8;
}
a:visited {
color: #2A3798;
}
.dirtab { padding: 4px;
border-collapse: collapse;
border: 1px solid #84b0c7;
}
TH.dirtab { background: #e8eef2;
font-weight: bold;
}
HR { height: 1px;
border: none;
border-top: 1px solid black;
}
"BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {\n"
" font-family: Geneva, Arial, Helvetica, sans-serif;\n"
"}\n"
"BODY,TD {\n"
" font-size: 90%;\n"
"}\n"
"H1 {\n"
" text-align: center;\n"
" font-size: 160%;\n"
"}\n"
"H2 {\n"
" font-size: 120%;\n"
"}\n"
"H3 {\n"
" font-size: 100%;\n"
"}\n"
"CAPTION { font-weight: bold }\n"
"DIV.qindex {\n"
" width: 100%;\n"
" background-color: #e8eef2;\n"
" border: 1px solid #84b0c7;\n"
" text-align: center;\n"
" margin: 2px;\n"
" padding: 2px;\n"
" line-height: 140%;\n"
"}\n"
"DIV.nav {\n"
" width: 100%;\n"
" background-color: #e8eef2;\n"
" border: 1px solid #84b0c7;\n"
" text-align: center;\n"
" margin: 2px;\n"
" padding: 2px;\n"
" line-height: 140%;\n"
"}\n"
"DIV.navtab {\n"
" background-color: #e8eef2;\n"
" border: 1px solid #84b0c7;\n"
" text-align: center;\n"
" margin: 2px;\n"
" margin-right: 15px;\n"
" padding: 2px;\n"
"}\n"
"TD.navtab {\n"
" font-size: 70%;\n"
"}\n"
"A.qindex {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" color: #1A419D;\n"
"}\n"
"A.qindex:visited {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" color: #1A419D\n"
"}\n"
"A.qindex:hover {\n"
" text-decoration: none;\n"
" background-color: #ddddff;\n"
"}\n"
"A.qindexHL {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" background-color: #6666cc;\n"
" color: #ffffff;\n"
" border: 1px double #9295C2;\n"
"}\n"
"A.qindexHL:hover {\n"
" text-decoration: none;\n"
" background-color: #6666cc;\n"
" color: #ffffff;\n"
"}\n"
"A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }\n"
"A.el { text-decoration: none; font-weight: bold }\n"
"A.elRef { font-weight: bold }\n"
"A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}\n"
"A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}\n"
"A.codeRef:link { font-weight: normal; color: #0000FF}\n"
"A.codeRef:visited { font-weight: normal; color: #0000FF}\n"
"A:hover { text-decoration: none; background-color: #f2f2ff }\n"
"DL.el { margin-left: -1cm }\n"
".fragment {\n"
" font-family: Fixed, monospace;\n"
" font-size: 95%;\n"
"}\n"
"PRE.fragment {\n"
" border: 1px solid #CCCCCC;\n"
" background-color: #f5f5f5;\n"
" margin-top: 4px;\n"
" margin-bottom: 4px;\n"
" margin-left: 2px;\n"
" margin-right: 8px;\n"
" padding-left: 6px;\n"
" padding-right: 6px;\n"
" padding-top: 4px;\n"
" padding-bottom: 4px;\n"
"}\n"
"DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }\n"
"TD.md { background-color: #F4F4FB; font-weight: bold; }\n"
"TD.mdPrefix {\n"
" background-color: #F4F4FB;\n"
" color: #606060;\n"
" font-size: 80%;\n"
"}\n"
"TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }\n"
"TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }\n"
"DIV.groupHeader {\n"
" margin-left: 16px;\n"
" margin-top: 12px;\n"
" margin-bottom: 6px;\n"
" font-weight: bold;\n"
"}\n"
"DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }\n"
"BODY {\n"
" background: white;\n"
" color: black;\n"
" margin-right: 20px;\n"
" margin-left: 20px;\n"
"}\n"
"TD.indexkey {\n"
" background-color: #e8eef2;\n"
" font-weight: bold;\n"
" padding-right : 10px;\n"
" padding-top : 2px;\n"
" padding-left : 10px;\n"
" padding-bottom : 2px;\n"
" margin-left : 0px;\n"
" margin-right : 0px;\n"
" margin-top : 2px;\n"
" margin-bottom : 2px;\n"
" border: 1px solid #CCCCCC;\n"
"}\n"
"TD.indexvalue {\n"
" background-color: #e8eef2;\n"
" font-style: italic;\n"
" padding-right : 10px;\n"
" padding-top : 2px;\n"
" padding-left : 10px;\n"
" padding-bottom : 2px;\n"
" margin-left : 0px;\n"
" margin-right : 0px;\n"
" margin-top : 2px;\n"
" margin-bottom : 2px;\n"
" border: 1px solid #CCCCCC;\n"
"}\n"
"TR.memlist {\n"
" background-color: #f0f0f0; \n"
"}\n"
"P.formulaDsp { text-align: center; }\n"
"IMG.formulaDsp { }\n"
"IMG.formulaInl { vertical-align: middle; }\n"
"SPAN.keyword { color: #008000 }\n"
"SPAN.keywordtype { color: #604020 }\n"
"SPAN.keywordflow { color: #e08000 }\n"
"SPAN.comment { color: #800000 }\n"
"SPAN.preprocessor { color: #806020 }\n"
"SPAN.stringliteral { color: #002080 }\n"
"SPAN.charliteral { color: #008080 }\n"
".mdTable {\n"
" border: 1px solid #868686;\n"
" background-color: #F4F4FB;\n"
"}\n"
".mdRow {\n"
" padding: 8px 10px;\n"
"}\n"
".mdescLeft {\n"
" padding: 0px 8px 4px 8px;\n"
" font-size: 80%;\n"
" font-style: italic;\n"
" background-color: #FAFAFA;\n"
" border-top: 1px none #E0E0E0;\n"
" border-right: 1px none #E0E0E0;\n"
" border-bottom: 1px none #E0E0E0;\n"
" border-left: 1px none #E0E0E0;\n"
" margin: 0px;\n"
"}\n"
".mdescRight {\n"
" padding: 0px 8px 4px 8px;\n"
" font-size: 80%;\n"
" font-style: italic;\n"
" background-color: #FAFAFA;\n"
" border-top: 1px none #E0E0E0;\n"
" border-right: 1px none #E0E0E0;\n"
" border-bottom: 1px none #E0E0E0;\n"
" border-left: 1px none #E0E0E0;\n"
" margin: 0px;\n"
"}\n"
".memItemLeft {\n"
" padding: 1px 0px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: solid;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"}\n"
".memItemRight {\n"
" padding: 1px 8px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: solid;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"}\n"
".memTemplItemLeft {\n"
" padding: 1px 0px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: none;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"}\n"
".memTemplItemRight {\n"
" padding: 1px 8px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: none;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"}\n"
".memTemplParams {\n"
" padding: 1px 0px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: solid;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" color: #606060;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"}\n"
".search { color: #003399;\n"
" font-weight: bold;\n"
"}\n"
"FORM.search {\n"
" margin-bottom: 0px;\n"
" margin-top: 0px;\n"
"}\n"
"INPUT.search { font-size: 75%;\n"
" color: #000080;\n"
" font-weight: normal;\n"
" background-color: #e8eef2;\n"
"}\n"
"TD.tiny { font-size: 75%;\n"
"}\n"
"a {\n"
" color: #1A41A8;\n"
"}\n"
"a:visited {\n"
" color: #2A3798;\n"
"}\n"
".dirtab { padding: 4px;\n"
" border-collapse: collapse;\n"
" border: 1px solid #84b0c7;\n"
"}\n"
"TH.dirtab { background: #e8eef2;\n"
" font-weight: bold;\n"
"}\n"
"HR { height: 1px;\n"
" border: none;\n"
" border-top: 1px solid black;\n"
"}\n"
"\n"
......@@ -234,7 +234,7 @@ void FileDef::writeDocumentation(OutputList &ol)
}
QCString title = docname+versionTitle;
QCString pageTitle=theTranslator->trFileReference(docname);
startFile(ol,getOutputFileBase(),name(),pageTitle);
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible);
if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
{
......@@ -630,7 +630,7 @@ void FileDef::writeSource(OutputList &ol)
}
QCString pageTitle = theTranslator->trSourceFile(title);
ol.disableAllBut(OutputGenerator::Html);
startFile(ol,getSourceFileBase(),0,pageTitle);
startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible);
if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
{
......
......@@ -663,30 +663,6 @@ void FTVHelp::generateTreeView()
t << " <script type=\"text/javascript\">\n";
t << " <!-- // Hide script from old browsers\n";
t << " \n";
//t << " function findChildNode(node, name) \n";
//t << " {\n";
//t << " var temp;\n";
//t << " if (node == null) \n";
//t << " {\n";
//t << " return null;\n";
//t << " } \n";
//t << " node = node.firstChild;\n";
//t << " while (node != null) \n";
//t << " {\n";
//t << " if (node.nodeName == name) \n";
//t << " {\n";
//t << " return node;\n";
//t << " }\n";
//t << " temp = findChildNode(node, name);\n";
//t << " if (temp != null) \n";
//t << " {\n";
//t << " return temp;\n";
//t << " }\n";
//t << " node = node.nextSibling;\n";
//t << " }\n";
//t << " return null;\n";
//t << " }\n";
//t << "\n";
/* User has clicked on a node (folder or +/-) in the tree */
t << " function toggleFolder(id, imageNode) \n";
......@@ -702,23 +678,12 @@ void FTVHelp::generateTreeView()
t << " imageNode = imageNode.previousSibling;\n";
t << " l = imageNode.src.length;\n";
t << " }\n";
//t << " var vl = \"" FTV_ICON_FILE(vertline) "\";\n";
//t << " if (imageNode != null && imageNode.nodeName != \"IMG\") \n";
//t << " {\n";
//t << " imageNode = findChildNode(imageNode, \"IMG\");\n";
//t << " if (imageNode!=null) l = imageNode.src.length;\n";
//t << " }\n";
t << " if (folder == null) \n";
t << " {\n";
t << " } \n";
/* Node controls a open section, we need to close it */
t << " else if (folder.style.display == \"block\") \n";
t << " {\n";
//t << " while (imageNode != null && \n";
//t << " imageNode.src.substring(l-vl.length,l) == vl)\n";
//t << " {\n";
//t << " imageNode = imageNode.nextSibling;\n";
//t << " }\n";
t << " if (imageNode != null) \n";
t << " {\n";
t << " imageNode.nextSibling.src = \"" FTV_ICON_FILE(folderclosed) "\";\n";
......@@ -735,11 +700,6 @@ void FTVHelp::generateTreeView()
t << " } \n";
t << " else \n"; /* section is closed, we need to open it */
t << " {\n";
//t << " while (imageNode != null && \n";
//t << " imageNode.src.substring(l-vl.length,l) == vl)\n";
//t << " {\n";
//t << " imageNode = imageNode.nextSibling;\n";
//t << " }\n";
t << " if (imageNode != null) \n";
t << " {\n";
t << " imageNode.nextSibling.src = \"" FTV_ICON_FILE(folderopen) "\";\n";
......
......@@ -42,331 +42,453 @@
//#define DBG_HTML(x) x;
#define DBG_HTML(x)
static const char *defaultStyleSheet =
"BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {\n"
" font-family: Geneva, Arial, Helvetica, sans-serif;\n"
"}\n"
"BODY,TD {\n"
" font-size: 90%;\n"
"}\n"
"H1 {\n"
" text-align: center;\n"
" font-size: 160%;\n"
"}\n"
"H2 {\n"
" font-size: 120%;\n"
static const char defaultStyleSheet[] =
#include "doxygen_css.h"
;
const char search_script[]=
#include "search_php.h"
;
static QCString g_header;
static QCString g_footer;
//------------------------- Pictures for the Tabs ------------------------
static unsigned char tab_b_gif[] = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00,
0x00, 0x84, 0xb0, 0xc7, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x44, 0x01, 0x00, 0x3b
};
static unsigned int tab_b_gif_len = 35;
static unsigned char tab_l_gif[] = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x2c, 0x01, 0xd5, 0x00,
0x00, 0xf6, 0xf7, 0xf9, 0xf1, 0xf4, 0xf7, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd,
0xfe, 0xfa, 0xfb, 0xfc, 0xf9, 0xfa, 0xfb, 0xf8, 0xf9, 0xfa, 0xea, 0xef,
0xf3, 0xef, 0xf3, 0xf6, 0xc6, 0xd5, 0xdf, 0xd2, 0xde, 0xe6, 0xd8, 0xe2,
0xe9, 0xde, 0xe7, 0xed, 0xdd, 0xe6, 0xec, 0xe5, 0xec, 0xf1, 0xe8, 0xee,
0xf2, 0xf4, 0xf7, 0xf9, 0xf3, 0xf6, 0xf8, 0xb3, 0xc8, 0xd5, 0xc1, 0xd2,
0xdd, 0xcb, 0xd9, 0xe2, 0xcf, 0xdc, 0xe4, 0xd6, 0xe1, 0xe8, 0x96, 0xb4,
0xc5, 0x9d, 0xb9, 0xc9, 0xaf, 0xc2, 0xcd, 0xbb, 0xce, 0xd9, 0xc3, 0xd4,
0xde, 0xc2, 0xd3, 0xdd, 0xc8, 0xd7, 0xe0, 0xcc, 0xda, 0xe2, 0xd5, 0xe1,
0xe8, 0xd9, 0xe4, 0xea, 0xd7, 0xe2, 0xe8, 0xe5, 0xec, 0xf0, 0xeb, 0xf0,
0xf3, 0x84, 0xb0, 0xc7, 0xd1, 0xde, 0xe5, 0xdc, 0xe6, 0xeb, 0xe3, 0xeb,
0xef, 0xeb, 0xf1, 0xf4, 0xee, 0xf3, 0xf5, 0xf7, 0xfa, 0xfb, 0xfb, 0xfc,
0xfc, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2c, 0x01, 0x00, 0x06,
0xff, 0x40, 0x96, 0x50, 0xb1, 0xc9, 0x60, 0x48, 0x24, 0x21, 0x25, 0x43,
0x71, 0x00, 0x56, 0x03, 0x16, 0x65, 0x32, 0x1a, 0x58, 0xad, 0x8a, 0xcc,
0x08, 0x4a, 0x28, 0x08, 0x04, 0x93, 0xc4, 0xa0, 0x2b, 0x80, 0x98, 0x33,
0x0d, 0x32, 0x24, 0xc0, 0xc6, 0x20, 0xbc, 0x6b, 0x76, 0x8a, 0xe4, 0x2d,
0xcb, 0xe7, 0xf5, 0x75, 0x2a, 0x85, 0x22, 0x7d, 0xe3, 0x7c, 0x7d, 0x7f,
0x01, 0x7c, 0x07, 0x07, 0x7e, 0x71, 0x28, 0x0f, 0x22, 0x0c, 0x24, 0x66,
0x84, 0x07, 0x0c, 0x0c, 0x27, 0x8e, 0x6c, 0x28, 0x8c, 0x26, 0x26, 0x24,
0x72, 0x91, 0x99, 0x0b, 0x9b, 0x90, 0x0c, 0x26, 0x0b, 0x21, 0xa0, 0x29,
0x0f, 0xa2, 0xa4, 0x9b, 0x7b, 0xa8, 0xa3, 0xa5, 0x72, 0xad, 0xaa, 0xb0,
0xa9, 0xaf, 0x84, 0xb1, 0xaf, 0xac, 0xb4, 0xa6, 0xb7, 0xbb, 0xba, 0xb3,
0xae, 0xab, 0xa7, 0xbe, 0xb6, 0xc3, 0xc2, 0xc0, 0xbf, 0xb2, 0xb9, 0xc7,
0xc4, 0xcb, 0xc6, 0xb2, 0xcc, 0xc9, 0xce, 0xb5, 0xd2, 0xbd, 0xcd, 0xbc,
0x84, 0xd4, 0xc8, 0xd3, 0xd7, 0xd0, 0xb8, 0xd9, 0xdd, 0xd5, 0xcf, 0xd9,
0xca, 0xe2, 0xdc, 0xdf, 0xe3, 0xe7, 0xe6, 0xea, 0xbe, 0xe4, 0xdb, 0xc5,
0xeb, 0xc7, 0xed, 0xe1, 0xee, 0xd6, 0xec, 0xe9, 0xef, 0xf8, 0xf1, 0xf7,
0xf5, 0xfc, 0xd1, 0xf0, 0xe5, 0xf9, 0xfc, 0x05, 0xa4, 0x07, 0x50, 0xdf,
0x3f, 0x82, 0x08, 0x83, 0x1d, 0x9c, 0xc7, 0x10, 0xdb, 0x42, 0x6d, 0x0d,
0xe5, 0x41, 0x9c, 0x08, 0xce, 0xe1, 0xc0, 0x86, 0x15, 0x25, 0x56, 0xdc,
0x88, 0xee, 0x21, 0xc7, 0x6b, 0x1a, 0xf7, 0x15, 0x14, 0xd8, 0x2f, 0xe1,
0xc4, 0x90, 0x1e, 0x3b, 0x5e, 0xa4, 0xa8, 0xb2, 0x24, 0xc6, 0x96, 0x23,
0x4d, 0x66, 0x14, 0x29, 0x13, 0x66, 0xcd, 0x87, 0x28, 0x57, 0xce, 0x4c,
0x89, 0x93, 0xe6, 0x4b, 0xe7, 0x90, 0xd2, 0x84, 0xb0, 0x20, 0x92, 0x01,
0x49, 0x12, 0x29, 0x4c, 0x1c, 0x18, 0x10, 0x3a, 0x65, 0x44, 0x0b, 0xa1,
0x43, 0xb5, 0xb4, 0x78, 0x2a, 0x34, 0x0c, 0x55, 0xa8, 0x68, 0xa0, 0x0a,
0x25, 0x11, 0x41, 0xab, 0x90, 0xa3, 0x5e, 0xc1, 0x4e, 0x1d, 0x4b, 0x62,
0xac, 0xd9, 0x16, 0x65, 0xa7, 0x0e, 0x58, 0xb1, 0x82, 0x00, 0x81, 0xb4,
0x6b, 0xbb, 0x78, 0x21, 0xc1, 0xd6, 0xed, 0x97, 0x32, 0x74, 0xdd, 0xd6,
0x09, 0x00, 0x21, 0xaf, 0x9a, 0x35, 0x74, 0xdb, 0xe6, 0xe9, 0x1b, 0x97,
0xc0, 0x5d, 0x01, 0x24, 0xac, 0xb4, 0x25, 0x83, 0x58, 0xed, 0xe2, 0x2e,
0x69, 0x5b, 0xac, 0x5d, 0x1c, 0x59, 0xad, 0x95, 0xca, 0x66, 0x8f, 0x9e,
0x45, 0xeb, 0xf5, 0x6b, 0x67, 0x16, 0x60, 0xb5, 0x86, 0x86, 0x3a, 0x7a,
0xeb, 0xe7, 0xd2, 0x9e, 0x3b, 0xa3, 0x06, 0x7d, 0xba, 0xb5, 0x6a, 0xd7,
0x61, 0x61, 0x8b, 0x96, 0x4d, 0x9a, 0xb6, 0xe9, 0xd7, 0xb8, 0x63, 0xe7,
0x9e, 0xbd, 0xbb, 0x76, 0xef, 0xdb, 0xba, 0x83, 0xf3, 0x16, 0xee, 0x9b,
0x38, 0xf0, 0xe1, 0xc8, 0x8b, 0x27, 0x3f, 0xae, 0xbc, 0x39, 0xf3, 0xe7,
0xa9, 0x8d, 0x47, 0x5f, 0x3e, 0xdd, 0x79, 0x75, 0xe8, 0xac, 0x7f, 0x5f,
0xdf, 0x9e, 0x5d, 0x7a, 0x77, 0xea, 0xdf, 0xad, 0x87, 0xc7, 0xbe, 0xba,
0xbc, 0x6d, 0xee, 0xe6, 0xb5, 0x8f, 0x47, 0x7f, 0x7e, 0xbd, 0xfb, 0xf4,
0xde, 0xe1, 0x83, 0x97, 0x2f, 0x9e, 0x3e, 0xf9, 0xf6, 0xf6, 0xd9, 0xab,
0xcf, 0xff, 0x1e, 0xbf, 0xff, 0xfd, 0xff, 0xc5, 0x17, 0xe0, 0x7c, 0x03,
0xd6, 0x57, 0xe0, 0x7d, 0x00, 0x76, 0x16, 0x04, 0x00, 0x3b
};
static unsigned int tab_l_gif_len = 706;
static unsigned char tab_r_gif[] = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x90, 0x01, 0x2c, 0x01, 0xd5, 0x00,
0x00, 0xf6, 0xf7, 0xf9, 0xf1, 0xf4, 0xf7, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd,
0xfe, 0xfa, 0xfb, 0xfc, 0xf9, 0xfa, 0xfb, 0xf8, 0xf9, 0xfa, 0xea, 0xef,
0xf3, 0xef, 0xf3, 0xf6, 0xc6, 0xd5, 0xdf, 0xd2, 0xde, 0xe6, 0xd8, 0xe2,
0xe9, 0xde, 0xe7, 0xed, 0xdd, 0xe6, 0xec, 0xe5, 0xec, 0xf1, 0xe8, 0xee,
0xf2, 0xf4, 0xf7, 0xf9, 0xf3, 0xf6, 0xf8, 0xb3, 0xc8, 0xd5, 0xc1, 0xd2,
0xdd, 0xcb, 0xd9, 0xe2, 0xcf, 0xdc, 0xe4, 0xd6, 0xe1, 0xe8, 0x96, 0xb4,
0xc5, 0x9d, 0xb9, 0xc9, 0xaf, 0xc2, 0xcd, 0xbb, 0xce, 0xd9, 0xc3, 0xd4,
0xde, 0xc2, 0xd3, 0xdd, 0xc8, 0xd7, 0xe0, 0xcc, 0xda, 0xe2, 0xd5, 0xe1,
0xe8, 0xd9, 0xe4, 0xea, 0xd7, 0xe2, 0xe8, 0xe5, 0xec, 0xf0, 0xeb, 0xf0,
0xf3, 0x84, 0xb0, 0xc7, 0xd1, 0xde, 0xe5, 0xdc, 0xe6, 0xeb, 0xe3, 0xeb,
0xef, 0xeb, 0xf1, 0xf4, 0xee, 0xf3, 0xf5, 0xf7, 0xfa, 0xfb, 0xfb, 0xfc,
0xfc, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x2c, 0x01, 0x00, 0x06,
0xff, 0x40, 0x92, 0x70, 0x48, 0x2c, 0x1a, 0x8f, 0xc8, 0xa4, 0x72, 0xc9,
0x6c, 0x3a, 0x9f, 0xd0, 0xa8, 0x74, 0x4a, 0xad, 0x5a, 0xaf, 0xd8, 0xac,
0x76, 0x0b, 0x95, 0x68, 0x3c, 0xac, 0x70, 0x6b, 0x4c, 0x2e, 0x9b, 0xcf,
0xe8, 0xb4, 0x7a, 0xcd, 0x6e, 0xbb, 0xdf, 0xf0, 0xb8, 0x7c, 0x4e, 0xaf,
0xdb, 0xef, 0xf8, 0xbc, 0x7e, 0xcf, 0x77, 0x0f, 0x56, 0x10, 0x16, 0x1a,
0x17, 0x1c, 0x61, 0x2b, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a,
0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0x93, 0x2a, 0x10, 0x01, 0x29, 0x15,
0x5e, 0x2c, 0x2a, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2,
0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe,
0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0x10, 0x10, 0x29, 0x0f, 0x27, 0x1d,
0x17, 0x15, 0xc6, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2,
0xe3, 0xe4, 0xe5, 0xe6, 0xda, 0xa5, 0x28, 0x22, 0x0c, 0x0c, 0x12, 0x12,
0x01, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,
0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x03, 0x0a, 0x1c, 0x48, 0xb0, 0xa0,
0xc1, 0x83, 0x08, 0x13, 0xf2, 0x4b, 0x81, 0x22, 0x19, 0x03, 0x13, 0x83,
0x52, 0x48, 0x9c, 0x48, 0xb1, 0xa2, 0xc5, 0x8b, 0x18, 0x33, 0x6a, 0xdc,
0xc8, 0xb1, 0xa3, 0xc7, 0x8f, 0x20, 0x43, 0x8a, 0x1c, 0x49, 0xb2, 0xa4,
0xc9, 0x93, 0x28, 0x53, 0xaa, 0x5c, 0xe9, 0x11, 0xc5, 0x81, 0x75, 0x26,
0x40, 0x80, 0x20, 0xc1, 0xb2, 0xa6, 0xcd, 0x9b, 0x38, 0x73, 0xea, 0xdc,
0xc9, 0xb3, 0xa7, 0x4f, 0xff, 0x96, 0x28, 0x1a, 0xc2, 0x04, 0xb1, 0x80,
0x44, 0xd0, 0xa3, 0x48, 0x93, 0x2a, 0x5d, 0xca, 0xb4, 0xa9, 0xd3, 0xa7,
0x50, 0xa3, 0x4a, 0x9d, 0x4a, 0xb5, 0xaa, 0xd5, 0xab, 0x58, 0xb3, 0x6a,
0xdd, 0xca, 0xb5, 0xab, 0xd7, 0xaf, 0x53, 0x0f, 0x38, 0x34, 0xb1, 0x20,
0x04, 0x89, 0x03, 0x68, 0xd3, 0xaa, 0x5d, 0xcb, 0xb6, 0xad, 0xdb, 0xb7,
0x70, 0xe3, 0xca, 0x9d, 0x4b, 0xb7, 0xae, 0xdd, 0xbb, 0x78, 0xf3, 0xea,
0xdd, 0xcb, 0xb7, 0xaf, 0xdf, 0xbf, 0x80, 0x03, 0xd3, 0x7d, 0x20, 0xe2,
0x44, 0xcc, 0x10, 0x66, 0x1f, 0x28, 0x5e, 0xcc, 0xb8, 0xb1, 0xe3, 0xc7,
0x90, 0x23, 0x4b, 0x9e, 0x4c, 0xb9, 0xb2, 0xe5, 0xcb, 0x98, 0x33, 0x6b,
0xde, 0xcc, 0xb9, 0xb3, 0xe7, 0xcf, 0xa0, 0x43, 0x8b, 0x1e, 0x6d, 0xb9,
0xf0, 0x43, 0xc4, 0x1f, 0x48, 0x9c, 0x58, 0xcd, 0xba, 0xb5, 0xeb, 0xd7,
0xb0, 0x63, 0xcb, 0x9e, 0x4d, 0xbb, 0xb6, 0xed, 0xdb, 0xb8, 0x73, 0xeb,
0xde, 0xcd, 0xbb, 0xb7, 0xef, 0xdf, 0xc0, 0x83, 0x0b, 0x1f, 0x4e, 0x1c,
0xf7, 0xc3, 0x05, 0x1f, 0x4a, 0x94, 0x20, 0xc1, 0xae, 0xb9, 0xf3, 0xe7,
0xd0, 0xa3, 0x4b, 0x9f, 0x4e, 0xbd, 0xba, 0xf5, 0xeb, 0xd8, 0xb3, 0x6b,
0xdf, 0xce, 0xbd, 0xbb, 0xf7, 0xef, 0xe0, 0xc3, 0x8b, 0x1f, 0x4f, 0xbe,
0x3c, 0x76, 0x13, 0x31, 0x91, 0x2b, 0x5f, 0x2e, 0xb3, 0xbd, 0xfb, 0xf7,
0xf0, 0xe3, 0xcb, 0x9f, 0x4f, 0xbf, 0xbe, 0xfd, 0xfb, 0xf8, 0xf3, 0xeb,
0xdf, 0xcf, 0xbf, 0xbf, 0xff, 0xff, 0x00, 0x06, 0x28, 0xe0, 0x80, 0x04,
0x16, 0x98, 0x5f, 0x59, 0xc9, 0x95, 0x40, 0xc1, 0x72, 0x88, 0x35, 0xe8,
0xe0, 0x83, 0x10, 0x46, 0x28, 0xe1, 0x84, 0x14, 0x56, 0x68, 0xe1, 0x85,
0x18, 0x66, 0xa8, 0xe1, 0x86, 0x1c, 0x76, 0xe8, 0xff, 0xe1, 0x87, 0x20,
0x86, 0x28, 0xe2, 0x88, 0x24, 0x96, 0xa8, 0x61, 0x82, 0x14, 0xa4, 0x48,
0x82, 0x89, 0x2c, 0xb6, 0xe8, 0xe2, 0x8b, 0x30, 0xc6, 0x28, 0xe3, 0x8c,
0x34, 0xd6, 0x68, 0xe2, 0x07, 0x09, 0x2a, 0xa8, 0x22, 0x8e, 0x3c, 0xf6,
0xe8, 0xe3, 0x8f, 0x40, 0x06, 0x29, 0xe4, 0x90, 0x44, 0x16, 0x69, 0xe4,
0x91, 0x48, 0x26, 0xa9, 0xe4, 0x92, 0x4c, 0x36, 0xe9, 0xe4, 0x93, 0x50,
0x46, 0x29, 0xe5, 0x94, 0x54, 0x26, 0xa9, 0x5c, 0x8a, 0x3b, 0x56, 0xa9,
0xe5, 0x96, 0x5c, 0x76, 0xe9, 0xe5, 0x97, 0x60, 0x86, 0x29, 0xe6, 0x98,
0x5a, 0x5e, 0x89, 0x25, 0x09, 0x64, 0xa6, 0xa9, 0xe6, 0x9a, 0x6c, 0xb6,
0xe9, 0xe6, 0x9b, 0x70, 0xfe, 0x68, 0x66, 0x96, 0x71, 0xd6, 0x69, 0xe7,
0x9d, 0x78, 0xe6, 0xa9, 0xe7, 0x97, 0x73, 0x52, 0x80, 0xe6, 0x9e, 0x80,
0x06, 0x2a, 0xe8, 0xa0, 0x84, 0xc2, 0xd9, 0xe7, 0x9f, 0x85, 0x26, 0xaa,
0xe8, 0xa2, 0x8c, 0x36, 0x3a, 0xe4, 0xa1, 0x8e, 0x46, 0x2a, 0xe9, 0xa4,
0x94, 0xc6, 0x09, 0x69, 0xa5, 0x98, 0x66, 0xaa, 0xe9, 0xa6, 0x4f, 0x5e,
0xca, 0xe9, 0xa7, 0xa0, 0x86, 0xca, 0xa9, 0xa7, 0xa2, 0x96, 0x6a, 0xea,
0xa9, 0x84, 0x92, 0x8a, 0xea, 0xaa, 0xac, 0xb6, 0xca, 0xa6, 0xaa, 0xae,
0xc6, 0x2a, 0xeb, 0xac, 0x53, 0xc2, 0x4a, 0xeb, 0xad, 0xb8, 0xe6, 0x2a,
0xa4, 0xad, 0xba, 0xf6, 0xea, 0xeb, 0xac, 0xbc, 0xfe, 0x2a, 0xec, 0xb0,
0xa5, 0x06, 0x4b, 0xec, 0xb1, 0xc8, 0x56, 0x6a, 0x6c, 0xb2, 0xcc, 0x36,
0x9b, 0xe8, 0xb2, 0xce, 0x46, 0x2b, 0x2d, 0x9e, 0xd0, 0x4e, 0x6b, 0xed,
0xb5, 0x6b, 0x56, 0x8b, 0xed, 0xb6, 0xdc, 0x76, 0xa9, 0x6d, 0xb7, 0xe0,
0x86, 0xdb, 0xa9, 0x8e, 0x74, 0x8a, 0x6b, 0xee, 0xb9, 0x51, 0x7e, 0x8b,
0xff, 0xee, 0xba, 0xec, 0xf2, 0xa8, 0x6e, 0xbb, 0xf0, 0x9a, 0xfb, 0x6e,
0xbc, 0xf4, 0x72, 0x3b, 0x6f, 0xbd, 0xf8, 0x4e, 0x7b, 0x6f, 0xbe, 0xfc,
0x32, 0xbb, 0x6f, 0xbf, 0x00, 0x0f, 0xfb, 0x6f, 0xc0, 0x04, 0xeb, 0x3a,
0x70, 0xc1, 0x08, 0x03, 0x4b, 0xae, 0x9f, 0x09, 0x37, 0x1c, 0xed, 0xc1,
0x0e, 0x47, 0x6c, 0x2a, 0xc4, 0x12, 0x57, 0xfc, 0x29, 0xc5, 0x16, 0x67,
0x8c, 0x29, 0xc6, 0x1a, 0x77, 0x1c, 0x29, 0xc7, 0x1e, 0x87, 0xac, 0x28,
0xc8, 0x22, 0x97, 0x2c, 0x28, 0xc9, 0x26, 0xa7, 0x9c, 0x27, 0xca, 0x2a,
0xb7, 0x6c, 0xe9, 0xc2, 0x88, 0xba, 0x2c, 0x33, 0xa5, 0x2c, 0xcf, 0x6c,
0x33, 0x99, 0x35, 0xdf, 0xac, 0x33, 0x9f, 0x30, 0xef, 0xec, 0xf3, 0xb3,
0x3d, 0xff, 0x2c, 0x74, 0xa0, 0x39, 0x0f, 0x6d, 0xb4, 0x93, 0x45, 0x1f,
0xad, 0xb4, 0x95, 0x41, 0x2f, 0xed, 0x74, 0x9b, 0x49, 0x3f, 0x2d, 0x35,
0x90, 0x51, 0x4f, 0x6d, 0x35, 0x8e, 0x55, 0x5f, 0x3d, 0x75, 0xd6, 0x5a,
0x3f, 0xcd, 0x75, 0xd7, 0x4b, 0x7f, 0x0d, 0xf6, 0xd1, 0x62, 0x8f, 0x3d,
0x74, 0xd9, 0x66, 0xff, 0x8c, 0x76, 0xda, 0x3b, 0xaf, 0xcd, 0xf6, 0xcd,
0x6e, 0xbf, 0x3d, 0x73, 0xdc, 0x72, 0xbb, 0x4c, 0x77, 0xdd, 0x2a, 0xdf,
0x8d, 0xb7, 0xc9, 0x7a, 0xef, 0x2d, 0x72, 0xdf, 0x7e, 0x7b, 0x0c, 0x78,
0xe0, 0x1a, 0x0f, 0x4e, 0xb8, 0xc5, 0x86, 0x1f, 0x2e, 0x71, 0xe2, 0x8a,
0x3b, 0xcc, 0x78, 0xe3, 0x09, 0x3f, 0x0e, 0x79, 0xc1, 0x92, 0x4f, 0x1e,
0x70, 0xe5, 0x96, 0xf7, 0x8b, 0x79, 0xe6, 0xf9, 0x6e, 0xce, 0x79, 0xbd,
0x9e, 0x7f, 0x1e, 0x6f, 0xe8, 0xa2, 0xb7, 0x4b, 0x7a, 0xe9, 0xeb, 0x9e,
0x8e, 0xfa, 0xb9, 0xaa, 0xaf, 0x2e, 0x6e, 0xeb, 0xae, 0x83, 0x0b, 0x7b,
0xec, 0xf6, 0x36, 0x4d, 0xff, 0xbb, 0xd6, 0xb3, 0xdf, 0x7e, 0x6d, 0xee,
0xba, 0xeb, 0x6b, 0x7b, 0xef, 0x52, 0xf3, 0x0e, 0xbc, 0xb3, 0xc2, 0x0f,
0xef, 0xef, 0xef, 0xc6, 0x2b, 0x5d, 0x7c, 0xf2, 0xc7, 0x2e, 0xcf, 0xbc,
0xc0, 0xc8, 0x3f, 0x2f, 0xb4, 0xf3, 0xd2, 0xfb, 0x4a, 0x7d, 0xf5, 0x06,
0x47, 0x8f, 0xbd, 0xce, 0xd7, 0x6f, 0x7f, 0x6b, 0xf7, 0xde, 0x2b, 0x8c,
0x25, 0xc3, 0xe1, 0xab, 0xad, 0x7d, 0xf9, 0x76, 0x9f, 0x8f, 0x7e, 0xde,
0xea, 0xaf, 0xcf, 0x77, 0xfb, 0xee, 0xff, 0x0d, 0x7f, 0xfc, 0x82, 0xcf,
0x4f, 0x7f, 0xe1, 0xf6, 0xdf, 0x8f, 0x78, 0xfe, 0xfa, 0x2f, 0xce, 0x7f,
0xff, 0x8e, 0xfb, 0x1f, 0x00, 0x23, 0x27, 0xc0, 0x01, 0x52, 0xae, 0x80,
0x06, 0xbc, 0x1c, 0x02, 0x13, 0xa8, 0xb9, 0x05, 0x32, 0xb0, 0x73, 0x0e,
0x7c, 0x20, 0xe8, 0x22, 0x28, 0xc1, 0xd1, 0x51, 0xb0, 0x82, 0xa6, 0xbb,
0x20, 0x06, 0x53, 0xa7, 0xc1, 0x0d, 0xb2, 0xae, 0x83, 0x1e, 0x7c, 0x1d,
0x08, 0x43, 0x28, 0xbb, 0x11, 0x92, 0xb0, 0x76, 0xe3, 0x8b, 0xd9, 0x09,
0x09, 0x98, 0xc2, 0x15, 0x46, 0x0c, 0x7c, 0x2e, 0x64, 0x14, 0x0c, 0x63,
0x38, 0x32, 0x13, 0xd2, 0x50, 0x5a, 0x33, 0xbc, 0x61, 0xaa, 0x6c, 0xa8,
0xc3, 0x66, 0xe5, 0xb0, 0x87, 0x44, 0xe3, 0x21, 0x10, 0x91, 0xf5, 0xc3,
0x21, 0xea, 0xa9, 0x88, 0x46, 0xa4, 0x96, 0x10, 0x93, 0x28, 0x2c, 0x24,
0x32, 0xb1, 0x4e, 0x4e, 0x7c, 0xa2, 0xa1, 0x96, 0x28, 0xc5, 0xec, 0xb5,
0xb0, 0x8a, 0x16, 0x4c, 0x21, 0x17, 0xb6, 0xc8, 0xc5, 0x2e, 0x7a, 0xf1,
0x8b, 0x60, 0x0c, 0xa3, 0x18, 0xc7, 0x48, 0xc6, 0x2e, 0x7a, 0x01, 0x0c,
0x61, 0x48, 0xa3, 0x1a, 0xd7, 0xc8, 0xc6, 0x36, 0xba, 0xf1, 0x8d, 0x70,
0x8c, 0xa3, 0x1c, 0xe7, 0x48, 0xc7, 0x3a, 0xda, 0xff, 0xf1, 0x8e, 0x78,
0xcc, 0xa3, 0x1e, 0xf7, 0xc8, 0xc7, 0x3e, 0xfa, 0xf1, 0x8f, 0x80, 0x0c,
0x64, 0x1d, 0xc7, 0x40, 0x80, 0x00, 0x08, 0x82, 0x10, 0x82, 0x4c, 0xa4,
0x22, 0x17, 0xc9, 0xc8, 0x46, 0x3a, 0xf2, 0x91, 0x90, 0x8c, 0xa4, 0x24,
0x13, 0x39, 0x86, 0x02, 0x08, 0x20, 0x00, 0x28, 0x38, 0x85, 0x06, 0x26,
0xc9, 0xc9, 0x4e, 0x7a, 0xf2, 0x93, 0xa0, 0x0c, 0xa5, 0x28, 0x47, 0xa9,
0x46, 0x42, 0x5e, 0xb2, 0x21, 0xcb, 0xa8, 0x00, 0x29, 0x57, 0xc9, 0xca,
0x56, 0xba, 0xf2, 0x95, 0xb0, 0x6c, 0xa4, 0x29, 0x31, 0x99, 0x0c, 0x77,
0xc4, 0xf2, 0x96, 0xb8, 0xcc, 0xa5, 0x2e, 0x77, 0x19, 0xca, 0x59, 0xba,
0xe4, 0x01, 0x83, 0xe0, 0xa5, 0x30, 0x87, 0x49, 0xcc, 0x62, 0x1a, 0xf3,
0x8d, 0xbe, 0x7c, 0xc9, 0x03, 0x48, 0x70, 0xcc, 0x66, 0x3a, 0xf3, 0x99,
0xd0, 0xec, 0x65, 0x0b, 0x08, 0x70, 0x4a, 0xb1, 0x88, 0x80, 0x04, 0x7d,
0xc8, 0xa6, 0x36, 0xb7, 0xc9, 0xcd, 0x6e, 0x7a, 0xf3, 0x9b, 0xe0, 0x0c,
0xa7, 0x38, 0xfb, 0x30, 0x00, 0x02, 0x90, 0xc2, 0x25, 0x22, 0xb8, 0xe6,
0x38, 0xd7, 0xc9, 0xce, 0x76, 0xba, 0xf3, 0x9d, 0xf0, 0x8c, 0xa7, 0x3c,
0xc9, 0x50, 0xce, 0x51, 0x60, 0xf2, 0x25, 0xd7, 0x24, 0x80, 0x3e, 0xf7,
0xc9, 0xcf, 0x7e, 0xfa, 0xf3, 0x9f, 0x00, 0x0d, 0xa8, 0x40, 0x07, 0x4a,
0xd0, 0x82, 0x1a, 0xf4, 0xa0, 0x08, 0x4d, 0xa8, 0x42, 0x17, 0xca, 0xd0,
0x86, 0x3a, 0xf4, 0xa1, 0x10, 0x8d, 0xa8, 0x44, 0x27, 0x5a, 0x50, 0x4b,
0x46, 0x20, 0x05, 0xd6, 0xbc, 0x26, 0x31, 0x36, 0xca, 0xd1, 0x8e, 0x7a,
0xf4, 0xa3, 0x20, 0x0d, 0xa9, 0x48, 0x47, 0x4a, 0x52, 0x62, 0x08, 0x20,
0x02, 0xf7, 0x4c, 0xe7, 0x35, 0xcf, 0xc1, 0xd2, 0x96, 0xba, 0xf4, 0xa5,
0xff, 0x30, 0x8d, 0xa9, 0x4c, 0x67, 0x4a, 0xd3, 0x9a, 0x9a, 0x23, 0x02,
0x28, 0x65, 0x08, 0x3e, 0xaf, 0x89, 0xd3, 0x9e, 0xfa, 0xf4, 0xa7, 0x40,
0x0d, 0xaa, 0x50, 0x87, 0x4a, 0xd4, 0xa2, 0x1a, 0xf5, 0xa8, 0x48, 0x4d,
0xaa, 0x52, 0x97, 0xca, 0xd4, 0xa6, 0x3a, 0xf5, 0xa9, 0x50, 0x8d, 0xaa,
0x54, 0xa7, 0x4a, 0xd5, 0xaa, 0x26, 0x35, 0x1d, 0x3b, 0x25, 0x81, 0x55,
0xb7, 0xca, 0xd5, 0xae, 0x7a, 0xf5, 0xab, 0x60, 0x0d, 0xab, 0x58, 0xc7,
0x4a, 0x56, 0xab, 0xc2, 0x43, 0xa7, 0x8b, 0xd1, 0x6a, 0x59, 0xd7, 0xca,
0xd6, 0xb6, 0xba, 0xf5, 0xad, 0x70, 0x8d, 0xab, 0x5c, 0x7f, 0x8a, 0x55,
0xb4, 0x90, 0xc0, 0xa6, 0x78, 0xcd, 0xab, 0x5e, 0xf7, 0xca, 0xd7, 0xbe,
0xfa, 0xf5, 0xaf, 0xd0, 0xc0, 0x69, 0x29, 0x24, 0x82, 0x02, 0x12, 0x94,
0xf4, 0xb0, 0x88, 0x4d, 0xac, 0x62, 0x17, 0xcb, 0xd8, 0xc6, 0x3a, 0x76,
0x15, 0x02, 0x88, 0x2c, 0x04, 0x04, 0x0b, 0x0f, 0x12, 0x14, 0xe0, 0xb2,
0x98, 0xcd, 0xac, 0x66, 0x37, 0xcb, 0xd9, 0xce, 0x7a, 0xf6, 0xb3, 0xa0,
0x0d, 0xad, 0x68, 0x47, 0x4b, 0xda, 0xd2, 0x9a, 0xf6, 0xb4, 0xa8, 0x4d,
0xad, 0x6a, 0x57, 0xcb, 0xda, 0xd6, 0xba, 0xf6, 0xb5, 0xb0, 0x15, 0xad,
0x2a, 0x24, 0xdb, 0x53, 0x12, 0x50, 0xf4, 0xb6, 0xb8, 0xcd, 0xad, 0x6e,
0x77, 0xcb, 0xdb, 0xde, 0xfa, 0xf6, 0xb7, 0xc0, 0xc5, 0x6d, 0x01, 0x20,
0x2b, 0x00, 0x12, 0x84, 0xe2, 0xb8, 0xc8, 0x4d, 0xae, 0x72, 0x97, 0xcb,
0xdc, 0xe6, 0x3a, 0xf7, 0xb9, 0xd0, 0x45, 0xae, 0x3f, 0xb1, 0x39, 0xcf,
0xea, 0x5a, 0xf7, 0xba, 0xd8, 0xcd, 0xae, 0x76, 0xbf, 0x39, 0x80, 0xee,
0x22, 0x82, 0xba, 0xdb, 0x0d, 0xaf, 0x78, 0xc7, 0x4b, 0xde, 0xf2, 0x62,
0x97, 0x99, 0xd1, 0x4c, 0xff, 0xaf, 0x7a, 0xd7, 0xcb, 0x5e, 0x41, 0xa2,
0xb7, 0xbd, 0xf0, 0x8d, 0xaf, 0x7c, 0xe7, 0x1b, 0x86, 0xf7, 0xd2, 0xf7,
0xbe, 0xf8, 0xcd, 0xaf, 0x30, 0xed, 0xab, 0xdf, 0xfe, 0xfa, 0xf7, 0xbf,
0xa1, 0xe4, 0x2f, 0x80, 0x07, 0x4c, 0xe0, 0x02, 0xbb, 0xd7, 0xc0, 0x08,
0x4e, 0xb0, 0x82, 0xef, 0x28, 0xe0, 0x05, 0x3b, 0xf8, 0xc1, 0x09, 0x6e,
0x30, 0x84, 0x27, 0x4c, 0x61, 0xfd, 0x4a, 0xb8, 0xc2, 0x18, 0xce, 0x30,
0x7b, 0x2f, 0xac, 0xe1, 0x0e, 0x7b, 0xd8, 0x98, 0x1c, 0xfe, 0xb0, 0x88,
0x47, 0x7c, 0xcb, 0x10, 0x93, 0xf8, 0xc4, 0x28, 0x16, 0xa5, 0x89, 0x53,
0xcc, 0xe2, 0x16, 0x43, 0x72, 0xc5, 0x2e, 0x8e, 0xb1, 0x8c, 0x01, 0x09,
0xe3, 0x19, 0xdb, 0xf8, 0xc6, 0x76, 0xac, 0x31, 0x8e, 0x77, 0xcc, 0x63,
0x36, 0xea, 0xb8, 0xc7, 0x40, 0xde, 0xf1, 0x8f, 0x83, 0x4c, 0x64, 0x19,
0x0f, 0xb9, 0xc8, 0x48, 0x4e, 0xf1, 0x91, 0x93, 0xcc, 0x64, 0x11, 0x2f,
0xb9, 0xc9, 0x50, 0xce, 0xf0, 0x93, 0xa3, 0x4c, 0x65, 0x08, 0x4f, 0xb9,
0xca, 0x58, 0x8e, 0x70, 0x96, 0xb7, 0x7c, 0xe2, 0x2b, 0x73, 0xf9, 0xcb,
0xfd, 0xf5, 0x32, 0x98, 0xc7, 0x4c, 0x5f, 0x31, 0x93, 0xf9, 0xcc, 0xed,
0x35, 0x33, 0x9a, 0xd7, 0x1c, 0x4d, 0x35, 0xb3, 0xf9, 0xcd, 0xc7, 0x74,
0x33, 0x9c, 0xe7, 0xbc, 0x5f, 0x3a, 0xdb, 0xd9, 0xc2, 0x77, 0xce, 0x73,
0x99, 0xf5, 0xcc, 0x67, 0xf8, 0xca, 0xb9, 0xcf, 0x80, 0x0e, 0x70, 0xa0,
0x07, 0xfd, 0xcc, 0x3f, 0x13, 0xfa, 0xd0, 0x2f, 0x46, 0xb4, 0xa2, 0xeb,
0xbc, 0xe8, 0x46, 0xe3, 0xd2, 0xd0, 0x8e, 0x8e, 0x74, 0x1f, 0x21, 0x2d,
0xe9, 0x4a, 0xe3, 0x91, 0xd2, 0x96, 0xce, 0xf4, 0x1c, 0x31, 0xad, 0xe9,
0x4e, 0xbb, 0x91, 0xd3, 0x9e, 0x0e, 0x75, 0x1a, 0xff, 0x41, 0x2d, 0xea,
0x50, 0x93, 0xba, 0xd4, 0x9d, 0x3e, 0x35, 0xaa, 0x33, 0xad, 0xea, 0x55,
0x57, 0xba, 0xd5, 0xae, 0x8e, 0x34, 0xac, 0x63, 0xdd, 0xe8, 0x59, 0xd3,
0x5a, 0xd1, 0xb6, 0xbe, 0xf5, 0xa1, 0x73, 0xad, 0xeb, 0x41, 0xf3, 0xba,
0xd7, 0x80, 0xfe, 0x35, 0xb0, 0xf9, 0x2c, 0xec, 0x61, 0xe7, 0xb9, 0xd8,
0xc6, 0xb6, 0x33, 0xb2, 0x93, 0x3d, 0xe7, 0x65, 0x33, 0xfb, 0xcd, 0xce,
0x7e, 0xf6, 0x9a, 0xa3, 0x2d, 0xed, 0x33, 0x53, 0xbb, 0xda, 0x63, 0xbe,
0x36, 0xb6, 0xbf, 0xac, 0xed, 0x6d, 0x6f, 0xb9, 0xdb, 0xde, 0xc6, 0x32,
0xb8, 0xc3, 0x4d, 0xe5, 0x71, 0x93, 0x1b, 0xca, 0xe6, 0x3e, 0x37, 0x93,
0xd3, 0xad, 0x6e, 0x24, 0xb3, 0xbb, 0xdd, 0x44, 0x7e, 0x37, 0xbc, 0x81,
0x2c, 0xef, 0x79, 0xf3, 0xb8, 0xde, 0xf6, 0xc6, 0x31, 0xbe, 0xf3, 0x6d,
0xe3, 0x7d, 0xf3, 0xdb, 0xc8, 0xff, 0x76, 0xb5, 0xbf, 0x03, 0xde, 0xe2,
0x81, 0x13, 0x5c, 0xc9, 0x07, 0x2f, 0xb5, 0xc1, 0x13, 0x4e, 0xe2, 0x85,
0x33, 0xdc, 0xc9, 0x0f, 0xf7, 0xb4, 0xc3, 0x23, 0xde, 0xe1, 0x89, 0x53,
0x5c, 0xca, 0x17, 0x67, 0x75, 0xc6, 0x2d, 0x6d, 0xf1, 0x8d, 0x4f, 0xb8,
0xe3, 0x1e, 0x7f, 0x30, 0xc8, 0x43, 0xbe, 0xe0, 0x91, 0x93, 0x5c, 0xcb,
0x27, 0x5f, 0xb4, 0xc9, 0x53, 0x5e, 0xe0, 0x95, 0xb3, 0x7c, 0xc0, 0x2e,
0x7f, 0xf9, 0x7f, 0x63, 0x2e, 0xf3, 0x30, 0xd7, 0x9c, 0xd0, 0x34, 0xbf,
0x39, 0x7e, 0x73, 0xae, 0xf3, 0x3d, 0xf7, 0xbc, 0xcf, 0x3c, 0xff, 0x79,
0x7c, 0x83, 0x2e, 0xf4, 0x34, 0x17, 0x5d, 0xcf, 0x44, 0x3f, 0xba, 0x7a,
0x93, 0xae, 0xf4, 0x36, 0x37, 0x5d, 0xd9, 0x4f, 0xa7, 0x33, 0xd3, 0xa3,
0xde, 0xcc, 0xa9, 0x53, 0x1d, 0xc4, 0x57, 0x87, 0x76, 0xd6, 0xd9, 0x6c,
0x3e, 0xf5, 0xad, 0x33, 0xda, 0xeb, 0x64, 0xee, 0x3a, 0xd8, 0x75, 0x29,
0xf6, 0xb1, 0x3f, 0xda, 0xec, 0xd9, 0x46, 0x3b, 0x98, 0xcb, 0xae, 0xf6,
0x57, 0xb2, 0xbd, 0xed, 0xad, 0x7c, 0x3b, 0xdc, 0x57, 0x29, 0xf7, 0xb9,
0x8f, 0xb2, 0xee, 0x76, 0x17, 0x74, 0xde, 0xcb, 0xbd, 0x77, 0xbe, 0xf7,
0x1d, 0xdd, 0x7f, 0x07, 0x7c, 0xe0, 0xd7, 0x3d, 0x78, 0xc2, 0x17, 0xde,
0xdd, 0x41, 0x00, 0x00, 0x3b
};
static unsigned int tab_r_gif_len = 2585;
static const char tabs_css[] =
"/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */\n"
"\n"
"DIV.tabs\n"
"{\n"
" float : left;\n"
" width : 100%;\n"
" background : url(\"tab_b.gif\") repeat-x bottom;\n"
" margin-bottom : 4px;\n"
"}\n"
"H3 {\n"
" font-size: 100%;\n"
"\n"
"DIV.tabs UL\n"
"{\n"
" margin : 0px;\n"
" padding-left : 10px;\n"
" list-style : none;\n"
"}\n"
"CAPTION { font-weight: bold }\n"
"DIV.qindex {\n"
" width: 100%;\n"
" background-color: #eeeeff;\n"
" border: 1px solid #b0b0b0;\n"
" text-align: center;\n"
" margin: 2px;\n"
" padding: 2px;\n"
" line-height: 140%;\n"
"\n"
"DIV.tabs LI, DIV.tabs FORM\n"
"{\n"
" display : inline;\n"
" margin : 0px;\n"
" padding : 0px;\n"
"}\n"
"DIV.nav {\n"
" width: 100%;\n"
" background-color: #eeeeff;\n"
" border: 1px solid #b0b0b0;\n"
" text-align: center;\n"
" margin: 2px;\n"
" padding: 2px;\n"
" line-height: 140%;\n"
"\n"
"DIV.tabs FORM\n"
"{\n"
" float : right;\n"
"}\n"
"DIV.navtab {\n"
" background-color: #eeeeff;\n"
" border: 1px solid #b0b0b0;\n"
" text-align: center;\n"
" margin: 2px;\n"
" margin-right: 15px;\n"
" padding: 2px;\n"
"\n"
"DIV.tabs A\n"
"{\n"
" float : left;\n"
" background : url(\"tab_r.gif\") no-repeat right top;\n"
" border-bottom : 1px solid #84B0C7;\n"
" font-size : x-small;\n"
" font-weight : bold;\n"
" text-decoration : none;\n"
"}\n"
"TD.navtab {\n"
" font-size: 70%;\n"
"\n"
"DIV.tabs A:hover\n"
"{\n"
" background-position: 100% -150px;\n"
"}\n"
"A.qindex {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
"\n"
"DIV.tabs A:link, DIV.tabs A:visited,\n"
"DIV.tabs A:active, DIV.tabs A:hover\n"
"{\n"
" color: #1A419D;\n"
"}\n"
"A.qindex:visited {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" color: #1A419D\n"
"}\n"
"A.qindex:hover {\n"
" text-decoration: none;\n"
" background-color: #ddddff;\n"
"}\n"
"A.qindexHL {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" background-color: #6666cc;\n"
" color: #ffffff;\n"
" border: 1px double #9295C2;\n"
"}\n"
"A.qindexHL:hover {\n"
" text-decoration: none;\n"
" background-color: #6666cc;\n"
" color: #ffffff;\n"
"}\n"
"A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }\n"
"A.el { text-decoration: none; font-weight: bold }\n"
"A.elRef { font-weight: bold }\n"
"A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}\n"
"A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}\n"
"A.codeRef:link { font-weight: normal; color: #0000FF}\n"
"A.codeRef:visited { font-weight: normal; color: #0000FF}\n"
"A:hover { text-decoration: none; background-color: #f2f2ff }\n"
"DL.el { margin-left: -1cm }\n"
".fragment {\n"
" font-family: Fixed, monospace;\n"
" font-size: 95%;\n"
"}\n"
"PRE.fragment {\n"
" border: 1px solid #CCCCCC;\n"
" background-color: #f5f5f5;\n"
" margin-top: 4px;\n"
" margin-bottom: 4px;\n"
" margin-left: 2px;\n"
" margin-right: 8px;\n"
" padding-left: 6px;\n"
" padding-right: 6px;\n"
" padding-top: 4px;\n"
" padding-bottom: 4px;\n"
"}\n"
//"DIV.fragment {\n"
//" font-family: monospace\n"
//" border: 1px solid #CCCCCC;\n"
//" background-color: #f5f5f5;\n"
//" padding: 6px;\n"
//"}\n"
"DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }\n"
"TD.md { background-color: #F4F4FB; font-weight: bold; }\n"
"TD.mdPrefix {\n"
" background-color: #F4F4FB;\n"
" color: #606060;\n"
" font-size: 80%;\n"
"}\n"
"TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }\n"
"TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }\n"
"DIV.groupHeader {\n"
" margin-left: 16px;\n"
" margin-top: 12px;\n"
" margin-bottom: 6px;\n"
" font-weight: bold;\n"
"}\n"
"DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }\n"
"BODY {\n"
" background: white;\n"
" color: black;\n"
" margin-right: 20px;\n"
" margin-left: 20px;\n"
"}\n"
"TD.indexkey {\n"
" background-color: #eeeeff;\n"
" font-weight: bold;\n"
" padding-right : 10px;\n"
" padding-top : 2px;\n"
" padding-left : 10px;\n"
" padding-bottom : 2px;\n"
" margin-left : 0px;\n"
" margin-right : 0px;\n"
" margin-top : 2px;\n"
" margin-bottom : 2px;\n"
" border: 1px solid #CCCCCC;\n"
"}\n"
"TD.indexvalue {\n"
" background-color: #eeeeff;\n"
" font-style: italic;\n"
" padding-right : 10px;\n"
" padding-top : 2px;\n"
" padding-left : 10px;\n"
" padding-bottom : 2px;\n"
" margin-left : 0px;\n"
" margin-right : 0px;\n"
" margin-top : 2px;\n"
" margin-bottom : 2px;\n"
" border: 1px solid #CCCCCC;\n"
"}\n"
"TR.memlist {\n"
" background-color: #f0f0f0; \n"
"\n"
"DIV.tabs SPAN\n"
"{\n"
" float : left;\n"
" display : block;\n"
" background : url(\"tab_l.gif\") no-repeat left top;\n"
" padding : 5px 9px;\n"
" white-space : nowrap;\n"
"}\n"
"P.formulaDsp { text-align: center; }\n"
"IMG.formulaDsp { }\n"
"IMG.formulaInl { vertical-align: middle; }\n"
"SPAN.keyword { color: #008000 }\n"
"SPAN.keywordtype { color: #604020 }\n"
"SPAN.keywordflow { color: #e08000 }\n"
"SPAN.comment { color: #800000 }\n"
"SPAN.preprocessor { color: #806020 }\n"
"SPAN.stringliteral { color: #002080 }\n"
"SPAN.charliteral { color: #008080 }\n"
".mdTable {\n"
" border: 1px solid #868686;\n"
" background-color: #F4F4FB;\n"
"\n"
"DIV.tabs INPUT\n"
"{\n"
" float : right;\n"
" display : inline;\n"
" font-size : 1em;\n"
"}\n"
".mdRow {\n"
" padding: 8px 10px;\n"
"\n"
"DIV.tabs TD\n"
"{\n"
" font-size : x-small;\n"
" font-weight : bold;\n"
" text-decoration : none;\n"
"}\n"
".mdescLeft {\n"
" padding: 0px 8px 4px 8px;\n"
" font-size: 80%;\n"
" font-style: italic;\n"
" background-color: #FAFAFA;\n"
" border-top: 1px none #E0E0E0;\n"
" border-right: 1px none #E0E0E0;\n"
" border-bottom: 1px none #E0E0E0;\n"
" border-left: 1px none #E0E0E0;\n"
" margin: 0px;\n"
"\n"
"\n"
"\n"
"/* Commented Backslash Hack hides rule from IE5-Mac \\*/\n"
"DIV.tabs SPAN {float : none;}\n"
"/* End IE5-Mac hack */\n"
"\n"
"DIV.tabs A:hover SPAN\n"
"{\n"
" background-position: 0% -150px;\n"
"}\n"
".mdescRight {\n"
" padding: 0px 8px 4px 8px;\n"
" font-size: 80%;\n"
" font-style: italic;\n"
" background-color: #FAFAFA;\n"
" border-top: 1px none #E0E0E0;\n"
" border-right: 1px none #E0E0E0;\n"
" border-bottom: 1px none #E0E0E0;\n"
" border-left: 1px none #E0E0E0;\n"
" margin: 0px;\n"
"\n"
"DIV.tabs LI#current A\n"
"{\n"
" background-position: 100% -150px;\n"
" border-width : 0px;\n"
"}\n"
".memItemLeft {\n"
" padding: 1px 0px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: solid;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"\n"
"DIV.tabs LI#current SPAN\n"
"{\n"
" background-position: 0% -150px;\n"
" padding-bottom : 6px;\n"
"}\n"
".memItemRight {\n"
" padding: 1px 8px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: solid;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"\n"
"DIV.nav\n"
"{\n"
" background : none;\n"
" border : none;\n"
" border-bottom : 1px solid #84B0C7;\n"
"}\n"
".memTemplItemLeft {\n"
" padding: 1px 0px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: none;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"}\n"
".memTemplItemRight {\n"
" padding: 1px 8px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: none;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"}\n"
".memTemplParams {\n"
" padding: 1px 0px 0px 8px;\n"
" margin: 4px;\n"
" border-top-width: 1px;\n"
" border-right-width: 1px;\n"
" border-bottom-width: 1px;\n"
" border-left-width: 1px;\n"
" border-top-color: #E0E0E0;\n"
" border-right-color: #E0E0E0;\n"
" border-bottom-color: #E0E0E0;\n"
" border-left-color: #E0E0E0;\n"
" border-top-style: solid;\n"
" border-right-style: none;\n"
" border-bottom-style: none;\n"
" border-left-style: none;\n"
" color: #606060;\n"
" background-color: #FAFAFA;\n"
" font-size: 80%;\n"
"}\n"
".search { color: #003399;\n"
" font-weight: bold;\n"
"}\n"
"FORM.search {\n"
" margin-bottom: 0px;\n"
" margin-top: 0px;\n"
"}\n"
"INPUT.search { font-size: 75%;\n"
" color: #000080;\n"
" font-weight: normal;\n"
" background-color: #eeeeff;\n"
"}\n"
"TD.tiny { font-size: 75%;\n"
"}\n"
"a {\n"
" color: #252E78;\n"
"}\n"
"a:visited {\n"
" color: #3D2185;\n"
"}\n"
".dirtab { padding: 4px;\n"
" border-collapse: collapse;\n"
" border: 1px solid #b0b0b0;\n"
"}\n"
"TH.dirtab { background: #eeeeff;\n"
" font-weight: bold;\n"
"}\n"
"HR { height: 1px;\n"
" border: none;\n"
" border-top: 1px solid black;\n"
"}\n";
;
struct tab_data_item
{
const char *name;
unsigned char *content;
unsigned int len;
};
static tab_data_item tab_data[] =
{
{ "tab_b.gif", tab_b_gif, tab_b_gif_len },
{ "tab_l.gif", tab_l_gif, tab_l_gif_len },
{ "tab_r.gif", tab_r_gif, tab_r_gif_len },
{ "tabs.css", (unsigned char *)tabs_css, 0 },
{ 0, 0, 0 }
};
static QCString g_header;
static QCString g_footer;
static void writeTabData(const char *dir)
{
tab_data_item *data = tab_data;
while (data->name)
{
QCString fileName;
fileName=(QCString)dir+"/"+data->name;
QFile f(fileName);
if (f.open(IO_WriteOnly))
{
f.writeBlock((char*)data->content,
data->len>0 ? data->len : strlen((char*)data->content));
}
else
{
fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
}
data++;
}
}
const char search_script[]=
#include "search_php.h"
;
//-----------------------------------------------------------------------
HtmlGenerator::HtmlGenerator() : OutputGenerator()
{
......@@ -400,6 +522,11 @@ void HtmlGenerator::init()
//printf("g_footer='%s'\n",g_footer.data());
}
createSubDirs(d);
//if (Config_getBool("HTML_FANCY_TABS"))
{
writeTabData(dname);
}
}
void HtmlGenerator::writeStyleSheetFile(QFile &file)
......@@ -440,8 +567,10 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title,
}
t << relPathStr << cssfi.fileName();
}
t << "\" rel=\"stylesheet\" type=\"text/css\">\n"
"</head><body>\n";
t << "\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "</head><body>\n";
}
......@@ -1425,27 +1554,81 @@ void HtmlGenerator::printDoc(DocNode *n,const char *langExt)
delete visitor;
}
static void startQuickIndexList(QTextStream &t,bool compact)
{
bool fancyTabs=TRUE;
if (compact)
{
if (fancyTabs)
{
t << "<div class=\"tabs\">\n";
t << " <ul>\n";
}
else
{
t << "<div class=\"qindex\">";
}
}
else
{
t << "<ul>";
}
}
static void endQuickIndexList(QTextStream &t,bool compact)
{
bool fancyTabs=TRUE;
if (compact)
{
if (fancyTabs)
{
t << " </ul>";
}
t << "</div>\n";
}
else
{
t << "</ul>\n";
}
}
static void startQuickIndexItem(QTextStream &t,const char *l,
bool hl,bool compact,bool &first,
const QCString &relPath)
{
if (!first && compact) t << " | ";
bool fancyTabs=TRUE;
if (!first && compact && !fancyTabs) t << " | ";
first=FALSE;
if (!compact) t << "<li>";
if (hl && compact)
if (fancyTabs)
{
t << "<a class=\"qindexHL\" ";
t << " <li"; if (hl) t << " id=\"current\"";
t << "><a ";
}
else
{
t << "<a class=\"qindex\" ";
if (!compact) t << "<li>";
if (hl && compact)
{
t << "<a class=\"qindexHL\" ";
}
else
{
t << "<a class=\"qindex\" ";
}
}
t << "href=\"" << relPath << l << "\">";
if (fancyTabs)
{
t << "<span>";
}
}
static void endQuickIndexItem(QTextStream &t)
{
bool fancyTabs=TRUE;
if (fancyTabs) t << "</span>";
t << "</a>";
if (fancyTabs) t << "</li>\n";
}
static QCString fixSpaces(const QCString &s)
......@@ -1457,16 +1640,10 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact,
HighlightedItem hli,const QCString &relPath)
{
bool first=TRUE;
if (compact)
{
t << "<div class=\"qindex\">";
}
else
{
t << "<ul>";
}
bool fancyTabs=TRUE;
startQuickIndexList(t,compact);
if (Config_getBool("SEARCHENGINE"))
if (Config_getBool("SEARCHENGINE") && !fancyTabs)
{
t << " <form class=\"search\" action=\"" << relPath
<< "search.php\" method=\"get\">\n";
......@@ -1492,74 +1669,57 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact,
t << fixSpaces(theTranslator->trModules());
endQuickIndexItem(t);
}
// --------------- Namespace indices
if (documentedNamespaces>0)
{
startQuickIndexItem(t,"namespaces"+Doxygen::htmlFileExtension,
hli==HLI_Namespaces,compact,first,relPath);
hli==HLI_Namespaces || hli==HLI_NamespaceMembers || hli==HLI_NamespaceVisible,
compact,first,relPath);
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
t << fixSpaces(theTranslator->trPackages());
}
else
{
t << theTranslator->trNamespaceList();
t << theTranslator->trNamespaces();
}
endQuickIndexItem(t);
}
if (hierarchyClasses>0)
{
startQuickIndexItem(t,"hierarchy"+Doxygen::htmlFileExtension,
hli==HLI_Hierarchy,compact,first,relPath);
t << fixSpaces(theTranslator->trClassHierarchy());
endQuickIndexItem(t);
}
// -------------- Class indices
if (annotatedClasses>0)
{
if (Config_getBool("ALPHABETICAL_INDEX"))
{
startQuickIndexItem(t,"classes"+Doxygen::htmlFileExtension,
hli==HLI_Classes,compact,first,relPath);
t << fixSpaces(theTranslator->trAlphabeticalList());
endQuickIndexItem(t);
}
startQuickIndexItem(t,"annotated"+Doxygen::htmlFileExtension,
hli==HLI_Annotated,compact,first,relPath);
t << fixSpaces(theTranslator->trCompoundList());
hli==HLI_Hierarchy || hli==HLI_Classes ||
hli==HLI_Annotated || hli==HLI_Functions || hli==HLI_ClassVisible,
compact,first,relPath);
t << fixSpaces(theTranslator->trClasses());
endQuickIndexItem(t);
}
if (Config_getBool("SHOW_DIRECTORIES") && documentedDirs>0)
{
startQuickIndexItem(t,"dirs"+Doxygen::htmlFileExtension,
hli==HLI_Directories,compact,first,relPath);
t << fixSpaces(theTranslator->trDirectories());
endQuickIndexItem(t);
}
}
// -------------- File
if (documentedHtmlFiles>0)
{
startQuickIndexItem(t,"files"+Doxygen::htmlFileExtension,
hli==HLI_Files,compact,first,relPath);
t << fixSpaces(theTranslator->trFileList());
endQuickIndexItem(t);
}
if (documentedNamespaceMembers[NMHL_All]>0)
{
startQuickIndexItem(t,"namespacemembers"+Doxygen::htmlFileExtension,
hli==HLI_NamespaceMembers,compact,first,relPath);
t << fixSpaces(theTranslator->trNamespaceMembers());
endQuickIndexItem(t);
}
if (documentedClassMembers[CMHL_All]>0)
{
startQuickIndexItem(t,"functions"+Doxygen::htmlFileExtension,
hli==HLI_Functions,compact,first,relPath);
t << fixSpaces(theTranslator->trCompoundMembers());
hli==HLI_Files || hli==HLI_Globals || hli==HLI_FileVisible,
compact,first,relPath);
t << fixSpaces(theTranslator->trFile(TRUE,FALSE));
endQuickIndexItem(t);
}
if (documentedFileMembers[FMHL_All]>0)
// ------------------------------------------------
if (Config_getBool("SHOW_DIRECTORIES") && documentedDirs>0)
{
startQuickIndexItem(t,"globals"+Doxygen::htmlFileExtension,
hli==HLI_Globals,compact,first,relPath);
t << fixSpaces(theTranslator->trFileMembers());
startQuickIndexItem(t,"dirs"+Doxygen::htmlFileExtension,
hli==HLI_Directories,compact,first,relPath);
t << fixSpaces(theTranslator->trDirectories());
endQuickIndexItem(t);
}
if (indexedPages>0)
......@@ -1578,36 +1738,140 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact,
}
if (Config_getBool("SEARCHENGINE"))
{
if (compact)
QCString searchFor = fixSpaces(theTranslator->trSearchForIndex());
if (searchFor.at(0)=='S') searchFor="<u>S</u>"+searchFor.mid(1);
if (fancyTabs)
{
t << " | ";
t << " <li>\n";
t << " <form action=\"search.php\" method=\"get\">\n";
t << " <table cellspacing=\"0\" callpadding=\"0\" border=\"0\">\n";
t << " <tr>\n";
t << " <td><label>&nbsp;" << searchFor << "&nbsp;</label></td>\n";
if (hli!=HLI_Search)
{
t << " <td><input type=\"text\" name=\"query\" value=\"\" size=\"20\" accesskey=\"s\"/></td>\n";
t << " </tr>\n";
t << " </table>\n";
t << " </form>\n";
t << " </li>\n";
}
}
else
{
t << "<li>";
}
t << "<span class=\"search";
if (hli==HLI_Search) t << "HL";
QCString searchFor = fixSpaces(theTranslator->trSearchForIndex());
if (searchFor.at(0)=='S') searchFor="<u>S</u>"+searchFor.mid(1);
t << "\">" << searchFor << "&nbsp;";
if (hli!=HLI_Search)
{
t << "<input class=\"search\" type=\"text\" name=\"query\" value=\"\" size=\"20\" accesskey=\"s\"/>"
"</span></form>";
if (compact)
{
t << " | ";
}
else
{
t << "<li>";
}
t << "<span class=\"search";
if (hli==HLI_Search) t << "HL";
t << "\">" << searchFor << "&nbsp;";
if (hli!=HLI_Search)
{
t << "<input class=\"search\" type=\"text\" name=\"query\" value=\"\" size=\"20\" accesskey=\"s\"/>"
"</span></form>";
}
}
}
if (hli!=HLI_Search)
if (hli!=HLI_Search) // on the search page the page will be ended by the
// page itself
{
if (compact)
endQuickIndexList(t,compact);
}
//-------------------------------------------------------------------------
// write sub indices
if ((hli==HLI_Namespaces || hli==HLI_NamespaceMembers || hli==HLI_NamespaceVisible) &&
documentedNamespaces>0 &&
documentedNamespaceMembers[NMHL_All]>0)
{
startQuickIndexList(t,compact);
if (documentedNamespaces>0)
{
t << "</div>\n";
startQuickIndexItem(t,"namespaces"+Doxygen::htmlFileExtension,
hli==HLI_Namespaces,compact,first,relPath);
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
t << fixSpaces(theTranslator->trPackages());
}
else
{
t << theTranslator->trNamespaceList();
}
endQuickIndexItem(t);
}
else
if (documentedNamespaceMembers[NMHL_All]>0)
{
t << "</ul>\n";
startQuickIndexItem(t,"namespacemembers"+Doxygen::htmlFileExtension,
hli==HLI_NamespaceMembers,compact,first,relPath);
t << fixSpaces(theTranslator->trNamespaceMembers());
endQuickIndexItem(t);
}
endQuickIndexList(t,compact);
}
else if ((hli==HLI_Hierarchy || hli==HLI_Classes ||
hli==HLI_Annotated || hli==HLI_Functions ||
hli==HLI_ClassVisible
) && annotatedClasses>0
)
{
startQuickIndexList(t,compact);
if (annotatedClasses>0)
{
startQuickIndexItem(t,"annotated"+Doxygen::htmlFileExtension,
hli==HLI_Annotated,compact,first,relPath);
t << fixSpaces(theTranslator->trCompoundList());
endQuickIndexItem(t);
if (Config_getBool("ALPHABETICAL_INDEX"))
{
startQuickIndexItem(t,"classes"+Doxygen::htmlFileExtension,
hli==HLI_Classes,compact,first,relPath);
t << fixSpaces(theTranslator->trAlphabeticalList());
endQuickIndexItem(t);
}
}
if (hierarchyClasses>0)
{
startQuickIndexItem(t,"hierarchy"+Doxygen::htmlFileExtension,
hli==HLI_Hierarchy,compact,first,relPath);
t << fixSpaces(theTranslator->trClassHierarchy());
endQuickIndexItem(t);
}
if (documentedClassMembers[CMHL_All]>0)
{
startQuickIndexItem(t,"functions"+Doxygen::htmlFileExtension,
hli==HLI_Functions,compact,first,relPath);
t << fixSpaces(theTranslator->trCompoundMembers());
endQuickIndexItem(t);
}
endQuickIndexList(t,compact);
}
else if ((hli==HLI_Files || hli==HLI_Globals || hli==HLI_FileVisible) &&
documentedHtmlFiles>0 && documentedFileMembers[FMHL_All]>0
)
{
startQuickIndexList(t,compact);
if (documentedHtmlFiles>0)
{
startQuickIndexItem(t,"files"+Doxygen::htmlFileExtension,
hli==HLI_Files,compact,first,relPath);
t << fixSpaces(theTranslator->trFileList());
endQuickIndexItem(t);
}
if (documentedFileMembers[FMHL_All]>0)
{
startQuickIndexItem(t,"globals"+Doxygen::htmlFileExtension,
hli==HLI_Globals,compact,first,relPath);
t << fixSpaces(theTranslator->trFileMembers());
endQuickIndexItem(t);
}
endQuickIndexList(t,compact);
}
}
void HtmlGenerator::writeQuickLinks(bool compact,HighlightedItem hli)
......@@ -1643,7 +1907,7 @@ void HtmlGenerator::writeSearchPage()
}
else
{
t << "<div class=\"qindex\">\n";
t << "&nbsp;\n<div class=\"qindex\">\n";
t << " <form class=\"search\" action=\"search.php\" "
<< "method=\"get\">\n";
}
......@@ -1674,6 +1938,18 @@ void HtmlGenerator::writeSearchPage()
t << "{\n";
t << " return \"" << theTranslator->trSearchMatches() << " \";\n";
t << "}\n";
t << "function end_form($value)\n";
t << "{\n";
t << " echo \""
<< " <td><input type=\\\"text\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"s\\\"/></td>\\n"
<< " </tr>\\n"
<< " </table>\\n"
<< " </form>\\n"
<< " </li>\\n"
<< " </ul>\\n"
<< "</div>\\n"
<< "\";\n";
t << "}\n";
t << "\n";
t << search_script;
t << "\n";
......
......@@ -175,28 +175,69 @@ QCString abbreviate(const char *s,const char *name)
//----------------------------------------------------------------------------
static void startQuickIndexList(OutputList &ol)
{
bool fancyTabs = TRUE;
if (fancyTabs)
{
ol.writeString("<div class=\"tabs\">\n");
ol.writeString(" <ul>\n");
}
else
{
ol.writeString("<div class=\"qindex\">");
}
}
static void endQuickIndexList(OutputList &ol)
{
bool fancyTabs = TRUE;
if (fancyTabs)
{
ol.writeString(" </ul>\n");
}
ol.writeString("</div>\n");
}
static void startQuickIndexItem(OutputList &ol,const char *l,
bool hl,bool compact,bool &first)
{
if (!first && compact) ol.writeString(" | ");
bool fancyTabs = TRUE;
if (!first && compact && !fancyTabs) ol.writeString(" | ");
first=FALSE;
if (!compact) ol.writeString("<li>");
if (hl && compact)
if (fancyTabs)
{
ol.writeString("<a class=\"qindexHL\" ");
ol.writeString(" <li");
if (hl) ol.writeString(" id=\"current\"");
ol.writeString("><a ");
}
else
{
ol.writeString("<a class=\"qindex\" ");
if (!compact) ol.writeString("<li>");
if (hl && compact)
{
ol.writeString("<a class=\"qindexHL\" ");
}
else
{
ol.writeString("<a class=\"qindex\" ");
}
}
ol.writeString("href=\"");
ol.writeString(l);
ol.writeString("\">");
if (fancyTabs)
{
ol.writeString("<span>");
}
}
static void endQuickIndexItem(OutputList &ol)
{
bool fancyTabs=TRUE;
if (fancyTabs) ol.writeString("</span>");
ol.writeString("</a>");
if (fancyTabs) ol.writeString("</li>\n");
}
......@@ -284,7 +325,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
//printf("Passed...\n");
bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
//printf("tree4: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable() && !cd->isHidden())
if (cd->isLinkable())
{
//printf("Writing class %s\n",cd->displayName().data());
ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->displayName());
......@@ -367,7 +408,7 @@ void writeClassTree(BaseClassList *cl,int level)
}
bool hasChildren = !cd->visited && classHasVisibleChildren(cd);
//printf("tree2: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable() && !cd->isHidden())
if (cd->isLinkable())
{
if (hasHtmlHelp)
{
......@@ -406,7 +447,7 @@ void writeClassTreeNode(ClassDef *cd,bool hasHtmlHelp,bool hasFtvHelp,bool &star
}
bool hasChildren = classHasVisibleChildren(cd);
//printf("node: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable() && !cd->isHidden())
if (cd->isLinkable())
{
if (hasHtmlHelp)
{
......@@ -499,7 +540,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started)
}
bool hasChildren = !cd->visited && classHasVisibleChildren(cd);
//printf("list: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable() && !cd->isHidden())
if (cd->isLinkable())
{
//printf("Writing class %s isLinkable()=%d isLinkableInProject()=%d cd->templateMaster()=%p\n",
// cd->displayName().data(),cd->isLinkable(),cd->isLinkableInProject(),cd->templateMaster());
......@@ -594,7 +635,8 @@ void writeHierarchicalIndex(OutputList &ol)
if (hierarchyClasses==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
startFile(ol,"hierarchy",0, theTranslator->trHierarchicalIndex().data(), HLI_Hierarchy);
startFile(ol,"hierarchy",0, theTranslator->trHierarchicalIndex().data(),
HLI_Hierarchy);
startTitle(ol,0);
QCString title = theTranslator->trClassHierarchy();
QCString htmlHelpTitle = title;
......@@ -646,7 +688,7 @@ void writeGraphicalClassHierarchy(OutputList &ol)
if (hierarchyClasses==0) return;
ol.disableAllBut(OutputGenerator::Html);
QCString title = theTranslator->trGraphicalHierarchy();
startFile(ol,"inherits",0,title.data());
startFile(ol,"inherits",0,title.data(),HLI_Hierarchy);
startTitle(ol,0);
QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title;
......@@ -914,7 +956,7 @@ int countNamespaces()
NamespaceDef *nd;
for (;(nd=nli.current());++nli)
{
if (nd->isLinkableInProject() && !nd->isHidden()) count++;
if (nd->isLinkableInProject()) count++;
}
return count;
}
......@@ -979,7 +1021,7 @@ void writeNamespaceIndex(OutputList &ol)
NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
if (nd->isLinkableInProject() && !nd->isHidden())
if (nd->isLinkableInProject())
{
if (first)
{
......@@ -1042,7 +1084,7 @@ int countAnnotatedClasses()
ClassDef *cd;
for (;(cd=cli.current());++cli)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0 && !cd->isHidden())
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
//printf("Annotated class %s\n",cd->name().data());
count++;
......@@ -1074,7 +1116,7 @@ void writeAnnotatedClassList(OutputList &ol)
// see which elements are in use
for (cli.toFirst();(cd=cli.current());++cli)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0 && !cd->isHidden())
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
int c = cd->displayName().at(0);
g_classIndexLetterUsed[CHL_All][c]=TRUE;
......@@ -1108,7 +1150,7 @@ void writeAnnotatedClassList(OutputList &ol)
for (cli.toFirst();(cd=cli.current());++cli)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0 && !cd->isHidden())
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
QCString type=cd->compoundTypeString();
ol.startIndexKey();
......@@ -1159,7 +1201,7 @@ void writeAlphabeticalClassList(OutputList &ol)
QCString alphaLinks = "<p><div class=\"qindex\">";
for (;(cd=cli.current());++cli)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0 && !cd->isHidden())
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
int index = getPrefixIndex(cd->className());
//printf("name=%s index=%d\n",cd->className().data(),index);
......@@ -1201,7 +1243,7 @@ void writeAlphabeticalClassList(OutputList &ol)
startLetter=0;
for (cli.toFirst();(cd=cli.current());++cli)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0 && !cd->isHidden())
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
int index = getPrefixIndex(cd->className());
if (toupper(cd->className().at(index))!=startLetter)
......@@ -1424,7 +1466,7 @@ void writeMemberList(OutputList &ol,bool useSections,
if (
md->isLinkableInProject() &&
(cd=md->getClassDef()) &&
cd->isLinkableInProject() && cd->templateMaster()==0 && !cd->isHidden() &&
cd->isLinkableInProject() && cd->templateMaster()==0 &&
( (filter==CMHL_All && !(md->isFriend() && isFriendToHide)) ||
(filter==CMHL_Functions && (md->isFunction() || md->isSlot() || md->isSignal())) ||
(filter==CMHL_Variables && md->isVariable()) ||
......@@ -1481,7 +1523,7 @@ void writeMemberList(OutputList &ol,bool useSections,
if (
md->isLinkableInProject() &&
prevName!=cd->displayName() &&
cd->templateMaster()==0 && !cd->isHidden()
cd->templateMaster()==0
)
{
if (count==0)
......@@ -1558,7 +1600,7 @@ void writeQuickMemberIndex(OutputList &ol,bool *charUsed,int page,
{
bool first=TRUE;
int i;
ol.writeString("<div class=\"qindex\">");
startQuickIndexList(ol);
for (i=33;i<127;i++)
{
char is[2];is[0]=(char)i;is[1]='\0';
......@@ -1578,7 +1620,7 @@ void writeQuickMemberIndex(OutputList &ol,bool *charUsed,int page,
first=FALSE;
}
}
ol.writeString("</div>\n");
endQuickIndexList(ol);
ol.newParagraph();
}
......@@ -1635,7 +1677,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
startFile(ol,fileName+extension,0,title,HLI_Functions);
ol.writeString("<div class=\"qindex\">");
startQuickIndexList(ol);
// index item for global member list
startQuickIndexItem(ol,
......@@ -1657,7 +1699,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
}
}
ol.writeString("</div>\n");
endQuickIndexList(ol);
// quick alphabetical index
bool quickIndex = documentedClassMembers[hl]>maxItemsBeforeQuickIndex;
......@@ -1670,6 +1712,12 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
{
ol.parseText(theTranslator->trCompoundMembersDescription(Config_getBool("EXTRACT_ALL")));
}
else
{
// hack to work around a mozilla bug, which refuses to switch to
// normal lists otherwise
ol.writeString("&nbsp;");
}
ol.newParagraph();
writeMemberList(ol,quickIndex,hl,page);
endFile(ol);
......@@ -2032,7 +2080,7 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
startFile(ol,fileName+extension,0,title.data(),HLI_Globals);
ol.writeString("<div class=\"qindex\">");
startQuickIndexList(ol);
// index item for all member lists
startQuickIndexItem(ol,
......@@ -2053,7 +2101,7 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
}
}
ol.writeString("</div>\n");
endQuickIndexList(ol);
bool quickIndex = documentedFileMembers[hl]>maxItemsBeforeQuickIndex;
if (quickIndex)
......@@ -2066,6 +2114,12 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
{
ol.parseText(theTranslator->trFileMembersDescription(Config_getBool("EXTRACT_ALL")));
}
else
{
// hack to work around a mozilla bug, which refuses to switch to
// normal lists otherwise
ol.writeString("&nbsp;");
}
ol.newParagraph();
writeFileMemberList(ol,quickIndex,hl,page);
endFile(ol);
......@@ -2155,7 +2209,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
startFile(ol,fileName+extension,0,title,HLI_NamespaceMembers);
ol.writeString("<div class=\"qindex\">");
startQuickIndexList(ol);
startQuickIndexItem(ol,
nmhlInfo[0].fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
......@@ -2174,7 +2228,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
}
}
ol.writeString("</div>\n");
endQuickIndexList(ol);
bool quickIndex = documentedNamespaceMembers[hl]>maxItemsBeforeQuickIndex;
if (quickIndex)
......@@ -2186,6 +2240,12 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
{
ol.parseText(theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL")));
}
else
{
// hack to work around a mozilla bug, which refuses to switch to
// normal lists otherwise
ol.writeString("&nbsp;");
}
ol.newParagraph();
writeNamespaceMemberList(ol,quickIndex,hl,page);
......
......@@ -90,7 +90,11 @@ enum HighlightedItem
HLI_Globals,
HLI_Pages,
HLI_Examples,
HLI_Search
HLI_Search,
HLI_ClassVisible,
HLI_NamespaceVisible,
HLI_FileVisible
};
enum ClassMemberHighlight
......
......@@ -40,6 +40,7 @@ HEADERS = bufstr.h \
docvisitor.h \
dot.h \
doxygen.h \
doxygen_css.h \
entry.h \
example.h \
filedef.h \
......
......@@ -85,12 +85,17 @@ sub GenerateDep {
$(YACC) -l -d -p cppExpYY constexp.y -o ce_parse.c
-rm ce_parse.c
TO_C_CMD=sed -e "s/\\\\/\\\\\\\\/g" -e "s/\"/\\\\\"/g" -e "s/^/\"/g" -e "s/$$/\\\\n\"/g"
index_xsd.h: index.xsd
cat index.xsd | sed -e "s/\\\\/\\\\\\\\/g" -e "s/\"/\\\\\"/g" -e "s/^/\"/g" -e "s/$$/\\\\n\"/g" >index_xsd.h
cat index.xsd | $(TO_C_CMD) >index_xsd.h
compound_xsd.h: compound.xsd
cat compound.xsd | sed -e "s/\\\\/\\\\\\\\/g" -e "s/\"/\\\\\"/g" -e "s/^/\"/g" -e "s/$$/\\\\n\"/g" >compound_xsd.h
cat compound.xsd | $(TO_C_CMD) >compound_xsd.h
search_php.h: search.php
cat search.php | sed -e "s/\\\\/\\\\\\\\/g" -e "s/\"/\\\\\"/g" -e "s/^/\"/g" -e "s/$$/\\\\n\"/g" >search_php.h
cat search.php | $(TO_C_CMD) >search_php.h
doxygen_css.h: doxygen.css
cat doxygen.css | $(TO_C_CMD) >doxygen_css.h
......@@ -1939,12 +1939,13 @@ void MemberDef::warnIfUndocumented()
t="group", d=gd;
else
t="file", d=fd;
static bool extractAll = Config_getBool("EXTRACT_ALL");
//printf("warnIfUndoc: d->isLinkable()=%d isLinkable()=%d "
// "isDocumentedFriendClass()=%d name()=%s prot=%d\n",
// d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
// name().data(),prot);
if (!isLinkable() &&
if ((!hasUserDocumentation() && !extractAll) &&
!isFriendClass() &&
name().find('@')==-1 && d->name().find('@')==-1 &&
(prot!=Private || Config_getBool("EXTRACT_PRIVATE"))
......
......@@ -282,7 +282,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{
pageTitle = theTranslator->trNamespaceReference(displayName());
}
startFile(ol,getOutputFileBase(),name(),pageTitle);
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible);
if (getOuterScope()!=Doxygen::globalScope)
{
writeNavigationPath(ol);
......
......@@ -69,7 +69,7 @@ class NamespaceDef : public Definition
int i = name().findRev("::");
if (i==-1) i=0; else i+=2;
return !name().isEmpty() && name().at(i)!='@' &&
hasDocumentation() && !isReference();
hasDocumentation() && !isReference() && !isHidden();
}
bool isLinkable() const
{
......
......@@ -2242,13 +2242,17 @@ void preprocessFile(const char *fileName,BufStr &output)
if (i<(int)tmp.length()) definition+=tmp.mid(i,tmp.length()-i);
// add define definition to the dictionary of defines for this file
Define *def = new Define;
def->name = ds.left(i_obrace);
def->definition = definition;
def->nargs = count;
def->isPredefined = TRUE;
def->nonRecursive = nonRecursive;
g_fileDefineDict->insert(def->name,def);
QCString dname = ds.left(i_obrace);
if (!dname.isEmpty())
{
Define *def = new Define;
def->name = dname;
def->definition = definition;
def->nargs = count;
def->isPredefined = TRUE;
def->nonRecursive = nonRecursive;
g_fileDefineDict->insert(def->name,def);
}
//printf("#define `%s' `%s' #nargs=%d\n",
// def->name.data(),def->definition.data(),def->nargs);
......@@ -2270,10 +2274,17 @@ void preprocessFile(const char *fileName,BufStr &output)
def->name = ds.left(ine);
def->definition = ds.right(ds.length()-i_equals-1);
}
def->nargs = -1;
def->isPredefined = TRUE;
def->nonRecursive = nonRecursive;
g_fileDefineDict->insert(def->name,def);
if (!def->name.isEmpty())
{
def->nargs = -1;
def->isPredefined = TRUE;
def->nonRecursive = nonRecursive;
g_fileDefineDict->insert(def->name,def);
}
else
{
delete def;
}
//printf("#define `%s' `%s' #nargs=%d\n",
// def->name.data(),def->definition.data(),def->nargs);
......
......@@ -15,11 +15,13 @@
*
*/
/* This code is based on the work done by the MoxyPyDoxy team
* (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada), executed
* as part of CS179e (Compiler design project) at the UC Riverside,
* under supervision of Peter H. Fröhlic.
* (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
* in Spring 2005 as part of CS 179E: Compiler Design Project
* at the University of California, Riverside; the course was
* taught by Peter H. Froehlich <phf@acm.org>.
*/
#ifndef PYCODE_H
#define PYCODE_H
......
......@@ -15,11 +15,13 @@
*
*/
/* This code is based on the work done by the MoxyPyDoxy team
* (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada), executed
* as part of CS179e (Compiler design project) at the UC Riverside,
* under supervision of Peter H. Fröhlic
* (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
* in Spring 2005 as part of CS 179E: Compiler Design Project
* at the University of California, Riverside; the course was
* taught by Peter H. Froehlich <phf@acm.org>.
*/
%{
#include <stdio.h>
......
......@@ -15,11 +15,13 @@
*
*/
/* This code is based on the work done by the MoxyPyDoxy team
* (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada), executed
* as part of CS179e (Compiler design project) at the UC Riverside,
* under supervision of Peter H. Fröhlic.
* (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
* in Spring 2005 as part of CS 179E: Compiler Design Project
* at the University of California, Riverside; the course was
* taught by Peter H. Froehlich <phf@acm.org>.
*/
#ifndef PYSCANNER_H
#define PYSCANNER_H
......
......@@ -15,11 +15,13 @@
*
*/
/* This code is based on the work done by the MoxyPyDoxy team
* (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada), executed
* as part of CS179e (Compiler design project) at the UC Riverside,
* under supervision of Peter H. Fröhlic.
* (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
* in Spring 2005 as part of CS 179E: Compiler Design Project
* at the University of California, Riverside; the course was
* taught by Peter H. Froehlich <phf@acm.org>.
*/
%{
/*
......@@ -80,6 +82,7 @@ static QCString docBlockName;
static bool docBlockInBody;
static bool docBlockJavaStyle;
static bool docBrief;
static bool docBlockSpecial;
static bool g_doubleQuote;
static bool g_specialBlock;
......@@ -322,6 +325,7 @@ static void initTriDoubleQuoteBlock()
docBlockContext = YY_START;
docBlockInBody = FALSE;
docBlockJavaStyle = TRUE;
docBlockSpecial = yytext[3]=='!';
docBlock.resize(0);
g_doubleQuote = TRUE;
startCommentBlock(FALSE);
......@@ -332,6 +336,7 @@ static void initTriSingleQuoteBlock()
docBlockContext = YY_START;
docBlockInBody = FALSE;
docBlockJavaStyle = TRUE;
docBlockSpecial = yytext[3]=='!';
docBlock.resize(0);
g_doubleQuote = FALSE;
startCommentBlock(FALSE);
......@@ -390,8 +395,8 @@ PARAMNONEMPTY [^ \t\n():]
IDENTIFIER ({LETTER}|"_")({LETTER}|{DIGIT}|"_")*
BORDER ([^A-Za-z0-9])
TRISINGLEQUOTE "'''"
TRIDOUBLEQUOTE "\"\"\""
TRISINGLEQUOTE "'''"(!)?
TRIDOUBLEQUOTE "\"\"\""(!)?
LONGSTRINGCHAR [^\\"']
ESCAPESEQ ("\\")(.)
LONGSTRINGITEM ({LONGSTRINGCHAR}|{ESCAPESEQ})
......@@ -1049,8 +1054,11 @@ STARTDOCSYMS ^{B}"##"/[^#]
if (g_specialBlock || g_expectModuleDocs)
{
QCString actualDoc=docBlock;
actualDoc.prepend("\\verbatim ");
actualDoc.append("\\endverbatim ");
if (!docBlockSpecial) // legacy unformatted docstring
{
actualDoc.prepend("\\verbatim ");
actualDoc.append("\\endverbatim ");
}
if (g_expectModuleDocs)
{
actualDoc.prepend("\\namespace "+g_moduleScope+"\\_linebr ");
......@@ -1377,7 +1385,11 @@ static void parsePrototype(const QCString &text)
current->section = Entry::VARIABLEDOC_SEC;
// restore original scanner state
YY_BUFFER_STATE tmpBuf = YY_CURRENT_BUFFER;
yy_switch_to_buffer(orgState);
yy_delete_buffer(tmpBuf);
inputString = orgInputString;
inputPosition = orgInputPosition;
......
......@@ -2142,6 +2142,10 @@ IDLATTR ("["[^\]]*"]"){BN}*
{
current->type = current->type.mid(3);
}
if (isTypedef && current->type.left(8)!="typedef ")
{
current->type.prepend("typedef ");
}
bool needNewCurrent=FALSE;
if (!current->name.isEmpty() && current->section!=Entry::ENUM_SEC)
{
......
......@@ -288,11 +288,8 @@ function main()
{
$query=$_GET["query"];
}
echo "<input class=\"search\" type=\"text\" name=\"query\" value=\"$query\" size=\"20\" accesskey=\"s\"/>\n";
echo "</span>\n";
echo "</form>\n";
echo "</div>\n";
echo "<div class=\"searchresults\">\n";
end_form($query);
echo "&nbsp;\n<div class=\"searchresults\">\n";
$results = array();
$requiredWords = array();
$forbiddenWords = array();
......
......@@ -288,11 +288,8 @@
" {\n"
" $query=$_GET[\"query\"];\n"
" }\n"
" echo \"<input class=\\\"search\\\" type=\\\"text\\\" name=\\\"query\\\" value=\\\"$query\\\" size=\\\"20\\\" accesskey=\\\"s\\\"/>\\n\";\n"
" echo \"</span>\\n\";\n"
" echo \"</form>\\n\";\n"
" echo \"</div>\\n\";\n"
" echo \"<div class=\\\"searchresults\\\">\\n\";\n"
" end_form($query);\n"
" echo \"&nbsp;\\n<div class=\\\"searchresults\\\">\\n\";\n"
" $results = array();\n"
" $requiredWords = array();\n"
" $forbiddenWords = array();\n"
......
......@@ -1136,35 +1136,38 @@ ClassDef *getResolvedClassRec(Definition *scope,
// see if we are dealing with a class or a typedef
if (d->definitionType()==Definition::TypeClass) // d is a class
{
if (!((ClassDef*)d)->isArtificial())
if (!((ClassDef*)d)->isTemplateArgument()) // skip classes that
// are only there to
// represent a template
// argument
{
if (distance<minDistance) // found a definition that is "closer"
{
minDistance=distance;
bestMatch = (ClassDef *)d;
bestTypedef = 0;
bestTemplSpec.resize(0);
}
else if (distance==minDistance &&
fileScope && bestMatch &&
fileScope->getUsedNamespaces() &&
d->getOuterScope()->definitionType()==Definition::TypeNamespace &&
bestMatch->getOuterScope()==Doxygen::globalScope
)
{
// in case the distance is equal it could be that a class X
// is defined in a namespace and in the global scope. When searched
// in the global scope the distance is 0 in both cases. We have
// to choose one of the definitions: we choose the one in the
// namespace if the fileScope imports namespaces and the definition
// found was in a namespace while the best match so far isn't.
// Just a non-perfect heuristic but it could help in some situations
// (kdecore code is an example).
minDistance=distance;
bestMatch = (ClassDef *)d;
bestTypedef = 0;
bestTemplSpec.resize(0);
}
if (distance<minDistance) // found a definition that is "closer"
{
minDistance=distance;
bestMatch = (ClassDef *)d;
bestTypedef = 0;
bestTemplSpec.resize(0);
}
else if (distance==minDistance &&
fileScope && bestMatch &&
fileScope->getUsedNamespaces() &&
d->getOuterScope()->definitionType()==Definition::TypeNamespace &&
bestMatch->getOuterScope()==Doxygen::globalScope
)
{
// in case the distance is equal it could be that a class X
// is defined in a namespace and in the global scope. When searched
// in the global scope the distance is 0 in both cases. We have
// to choose one of the definitions: we choose the one in the
// namespace if the fileScope imports namespaces and the definition
// found was in a namespace while the best match so far isn't.
// Just a non-perfect heuristic but it could help in some situations
// (kdecore code is an example).
minDistance=distance;
bestMatch = (ClassDef *)d;
bestTypedef = 0;
bestTemplSpec.resize(0);
}
}
}
else if (d->definitionType()==Definition::TypeMember)
......@@ -1173,32 +1176,49 @@ ClassDef *getResolvedClassRec(Definition *scope,
//printf(" member isTypedef()=%d\n",md->isTypedef());
if (md->isTypedef()) // d is a typedef
{
//printf(" found typedef!\n");
// we found a symbol at this distance, but if it didn't
// resolve to a class, we still have to make sure that
// something at a greater distance does not match, since
// that symbol is hidden by this one.
if (distance<minDistance)
QCString args=md->argsString();
if (args.isEmpty()) // do not expand "typedef t a[4];"
{
QCString spec;
minDistance=distance;
MemberDef *enumType = 0;
ClassDef *cd = newResolveTypedef(fileScope,md,&enumType,&spec);
if (cd) // shouldn't be 0, but could in some weird cases
//printf(" found typedef!\n");
// we found a symbol at this distance, but if it didn't
// resolve to a class, we still have to make sure that
// something at a greater distance does not match, since
// that symbol is hidden by this one.
if (distance<minDistance)
{
//printf(" bestTypeDef=%p spec=%s\n",md,spec.data());
bestMatch = cd;
bestTypedef = md;
bestTemplSpec = spec;
QCString spec;
minDistance=distance;
MemberDef *enumType = 0;
ClassDef *cd = newResolveTypedef(fileScope,md,&enumType,&spec);
if (cd) // shouldn't be 0, but could in some weird cases
{
//printf(" bestTypeDef=%p spec=%s\n",md,spec.data());
bestMatch = cd;
bestTypedef = md;
bestTemplSpec = spec;
}
else if (enumType)
{
//printf(" is enum\n");
bestMatch = 0;
bestTypedef = enumType;
bestTemplSpec = "";
}
else
{
//printf(" no match\n");
}
}
else if (enumType)
else
{
bestMatch = 0;
bestTypedef = enumType;
bestTemplSpec = "";
//printf(" not the best match %d min=%d\n",distance,minDistance);
}
}
else
{
//printf(" not a simple typedef\n")
}
}
else if (md->isEnumerate())
{
......@@ -1255,7 +1275,8 @@ ClassDef *getResolvedClass(Definition *scope,
const char *n,
MemberDef **pTypeDef,
QCString *pTemplSpec,
bool mayBeUnlinkable
bool mayBeUnlinkable,
bool mayBeHidden
)
{
g_resolvedTypedefs.clear();
......@@ -1276,7 +1297,10 @@ ClassDef *getResolvedClass(Definition *scope,
ClassDef *result = getResolvedClassRec(scope,fileScope,n,pTypeDef,pTemplSpec);
if (!mayBeUnlinkable && result && !result->isLinkable())
{
result=0; // don't link to artifical/hidden classes
if (!mayBeHidden || !result->isHidden())
{
result=0; // don't link to artifical/hidden classes unless explicitly allowed
}
}
//printf("getResolvedClass(%s,%s)=%s\n",scope?scope->name().data():"<global>",
// n,result?result->name().data():"<none>");
......
......@@ -151,7 +151,8 @@ ClassDef *getResolvedClass(Definition *scope,
const char *key,
MemberDef **pTypeDef=0,
QCString *pTemplSpec=0,
bool mayBeUnlinkable=FALSE);
bool mayBeUnlinkable=FALSE,
bool mayBeHidden=FALSE);
NamespaceDef *getResolvedNamespace(const char *key);
FileDef *findFileDef(const FileNameDict *fnDict,const char *n,
bool &ambig);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment