diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2005-09-16 18:34:41 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2005-09-16 18:34:41 (GMT) |
commit | 143b39e71a45892c2b8e8bf22f5d448b441bf36a (patch) | |
tree | 11aba0942df62a4f1090d7ffd3f4cb98c0c3b6ed /src | |
parent | 360bc2535d89e99bbd159ca695813dcdba49c71b (diff) | |
download | Doxygen-143b39e71a45892c2b8e8bf22f5d448b441bf36a.zip Doxygen-143b39e71a45892c2b8e8bf22f5d448b441bf36a.tar.gz Doxygen-143b39e71a45892c2b8e8bf22f5d448b441bf36a.tar.bz2 |
Release-1.4.4-20050817
Diffstat (limited to 'src')
-rw-r--r-- | src/doxygen.cpp | 161 | ||||
-rw-r--r-- | src/doxygen.css | 310 | ||||
-rw-r--r-- | src/doxygen_css.h | 310 | ||||
-rw-r--r-- | src/filedef.cpp | 4 | ||||
-rw-r--r-- | src/ftvhelp.cpp | 40 | ||||
-rw-r--r-- | src/htmlgen.cpp | 1050 | ||||
-rw-r--r-- | src/index.cpp | 116 | ||||
-rw-r--r-- | src/index.h | 6 | ||||
-rw-r--r-- | src/libdoxygen.pro.in | 1 | ||||
-rw-r--r-- | src/libdoxygen.t | 11 | ||||
-rw-r--r-- | src/memberdef.cpp | 3 | ||||
-rw-r--r-- | src/namespacedef.cpp | 2 | ||||
-rw-r--r-- | src/namespacedef.h | 2 | ||||
-rw-r--r-- | src/pre.l | 33 | ||||
-rw-r--r-- | src/pycode.h | 8 | ||||
-rw-r--r-- | src/pycode.l | 8 | ||||
-rw-r--r-- | src/pyscanner.h | 8 | ||||
-rw-r--r-- | src/pyscanner.l | 26 | ||||
-rw-r--r-- | src/scanner.l | 4 | ||||
-rw-r--r-- | src/search.php | 7 | ||||
-rw-r--r-- | src/search_php.h | 7 | ||||
-rw-r--r-- | src/util.cpp | 124 | ||||
-rw-r--r-- | src/util.h | 3 |
23 files changed, 1581 insertions, 663 deletions
diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 2c9b6ca..1f064bd 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -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; } diff --git a/src/doxygen.css b/src/doxygen.css new file mode 100644 index 0000000..05615b2 --- /dev/null +++ b/src/doxygen.css @@ -0,0 +1,310 @@ +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; +} + diff --git a/src/doxygen_css.h b/src/doxygen_css.h new file mode 100644 index 0000000..acb7fa6 --- /dev/null +++ b/src/doxygen_css.h @@ -0,0 +1,310 @@ +"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" diff --git a/src/filedef.cpp b/src/filedef.cpp index 46e0b6b..688d641 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -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()) { diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp index 27310ca..49c9c20 100644 --- a/src/ftvhelp.cpp +++ b/src/ftvhelp.cpp @@ -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"; diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 9da1e6e..8391e3c 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -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> " << searchFor << " </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 << " "; - 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 << " "; + 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 << " \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"; diff --git a/src/index.cpp b/src/index.cpp index bad0cc2..e4120ae 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -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(" "); + } 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(" "); + } 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(" "); + } ol.newParagraph(); writeNamespaceMemberList(ol,quickIndex,hl,page); diff --git a/src/index.h b/src/index.h index 2b76a02..007ab91 100644 --- a/src/index.h +++ b/src/index.h @@ -90,7 +90,11 @@ enum HighlightedItem HLI_Globals, HLI_Pages, HLI_Examples, - HLI_Search + HLI_Search, + + HLI_ClassVisible, + HLI_NamespaceVisible, + HLI_FileVisible }; enum ClassMemberHighlight diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in index 6f6d2ab..9f5d81f 100644 --- a/src/libdoxygen.pro.in +++ b/src/libdoxygen.pro.in @@ -40,6 +40,7 @@ HEADERS = bufstr.h \ docvisitor.h \ dot.h \ doxygen.h \ + doxygen_css.h \ entry.h \ example.h \ filedef.h \ diff --git a/src/libdoxygen.t b/src/libdoxygen.t index 189684e..20a5667 100644 --- a/src/libdoxygen.t +++ b/src/libdoxygen.t @@ -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 diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 3bfb93d..51eeed3 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -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")) diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 6735d4e..b7c92d8 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -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); diff --git a/src/namespacedef.h b/src/namespacedef.h index caedfde..98218e9 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -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); diff --git a/src/pycode.h b/src/pycode.h index 5f2b614..4bf034a 100644 --- a/src/pycode.h +++ b/src/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>. */ + #ifndef PYCODE_H #define PYCODE_H diff --git a/src/pycode.l b/src/pycode.l index 5e66693..21179ab 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -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> diff --git a/src/pyscanner.h b/src/pyscanner.h index 7ec7e40..fa009a0 100644 --- a/src/pyscanner.h +++ b/src/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>. */ + #ifndef PYSCANNER_H #define PYSCANNER_H diff --git a/src/pyscanner.l b/src/pyscanner.l index 64d7585..8d34cc4 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -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; diff --git a/src/scanner.l b/src/scanner.l index edb1253..0da3eaa 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -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) { diff --git a/src/search.php b/src/search.php index b908125..dbdbcdc 100644 --- a/src/search.php +++ b/src/search.php @@ -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 " \n<div class=\"searchresults\">\n"; $results = array(); $requiredWords = array(); $forbiddenWords = array(); diff --git a/src/search_php.h b/src/search_php.h index a31aed9..51ccea1 100644 --- a/src/search_php.h +++ b/src/search_php.h @@ -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 \" \\n<div class=\\\"searchresults\\\">\\n\";\n" " $results = array();\n" " $requiredWords = array();\n" " $forbiddenWords = array();\n" diff --git a/src/util.cpp b/src/util.cpp index 09dee55..912c6dc 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -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); |