summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp543
-rw-r--r--src/classdef.h17
-rw-r--r--src/config.l185
-rw-r--r--src/defgen.cpp1
-rw-r--r--src/dirdef.cpp248
-rw-r--r--src/dirdef.h10
-rw-r--r--src/docsets.cpp4
-rw-r--r--src/dot.cpp4
-rw-r--r--src/doxygen.cpp60
-rw-r--r--src/doxytag.l1
-rw-r--r--src/filedef.cpp511
-rw-r--r--src/filedef.h16
-rw-r--r--src/groupdef.cpp458
-rw-r--r--src/groupdef.h17
-rw-r--r--src/htmlgen.cpp175
-rw-r--r--src/language.cpp2
-rw-r--r--src/latexdocvisitor.cpp67
-rw-r--r--src/latexdocvisitor.h4
-rw-r--r--src/layout.cpp1121
-rw-r--r--src/layout.h187
-rw-r--r--src/layout_default.h182
-rw-r--r--src/layout_default.xml182
-rw-r--r--src/libdoxygen.pro.in3
-rw-r--r--src/libdoxygen.t3
-rw-r--r--src/memberdef.cpp3
-rw-r--r--src/memberdef.h1
-rw-r--r--src/memberlist.cpp4
-rw-r--r--src/namespacedef.cpp329
-rw-r--r--src/namespacedef.h14
-rw-r--r--src/perlmodgen.cpp2
-rw-r--r--src/pre.l7
-rw-r--r--src/qtbc.h2
-rw-r--r--src/translator_fi.h371
-rw-r--r--src/translator_ro.h26
-rw-r--r--src/xmlgen.cpp1
35 files changed, 3763 insertions, 998 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index d30ee62..2362928 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -37,6 +37,9 @@
#include "docparser.h"
#include "searchindex.h"
#include "vhdldocgen.h"
+#include "layout.h"
+
+//-----------------------------------------------------------------------------
//static inline MemberList *createNewMemberList(MemberList::ListType lt)
//{
@@ -842,8 +845,39 @@ static void writeTemplateSpec(OutputList &ol,Definition *d,
}
}
+void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
+{
+ if (!briefDescription().isEmpty())
+ {
+ ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.writeString(" \n");
+ ol.enable(OutputGenerator::RTF);
+
+ if (Config_getBool("REPEAT_BRIEF") ||
+ !documentation().isEmpty() ||
+ exampleFlag
+ )
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startTextLink(0,"_details");
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ }
+ ol.popGeneratorState();
+
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.newParagraph();
+ ol.popGeneratorState();
+ }
+ ol.writeSynopsis();
+}
+
// write the detailed description for this class
-void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType, bool exampleFlag)
+void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType, bool exampleFlag,
+ const QCString &title)
{
if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
!documentation().isEmpty() ||
@@ -852,13 +886,13 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType
{
ol.writeRuler();
ol.pushGeneratorState();
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
+ ol.disableAllBut(OutputGenerator::Html);
ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
- ol.parseText(theTranslator->trDetailedDescription());
+ ol.parseText(title);
ol.endGroupHeader();
+
ol.startTextBlock();
writeTemplateSpec(ol,this,pageType);
@@ -910,9 +944,11 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType
void ClassDef::showUsedFiles(OutputList &ol)
{
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Man);
bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- if (Config_getBool("SHOW_USED_FILES"))
- {
+ //if (Config_getBool("SHOW_USED_FILES"))
+ //{
ol.writeRuler();
if (fortranOpt)
{
@@ -993,11 +1029,12 @@ void ClassDef::showUsedFiles(OutputList &ol)
file=m_impl->files.next();
}
if (!first) ol.endItemList();
- }
+ //}
+ ol.popGeneratorState();
}
-void ClassDef::writeClassDiagrams(OutputList &ol)
+void ClassDef::writeInheritanceGraph(OutputList &ol)
{
// count direct inheritance relations
int count=0;
@@ -1025,7 +1062,7 @@ void ClassDef::writeClassDiagrams(OutputList &ol)
bool renderDiagram = FALSE;
- if (Config_getBool("HAVE_DOT") && Config_getBool("CLASS_GRAPH"))
+ if (Config_getBool("HAVE_DOT") && Config_getBool("CLASS_DIAGRAMS"))
// write class diagram using dot
{
DotClassGraph inheritanceGraph(this,DotNode::Inheritance);
@@ -1157,8 +1194,11 @@ void ClassDef::writeClassDiagrams(OutputList &ol)
{
ol.enableAll();
}
+}
- if (Config_getBool("HAVE_DOT") && Config_getBool("COLLABORATION_GRAPH"))
+void ClassDef::writeCollaborationGraph(OutputList &ol)
+{
+ if (Config_getBool("HAVE_DOT") /*&& Config_getBool("COLLABORATION_GRAPH")*/)
{
DotClassGraph usageImplGraph(this,DotNode::Collaboration);
if (!usageImplGraph.isTrivial())
@@ -1171,7 +1211,152 @@ void ClassDef::writeClassDiagrams(OutputList &ol)
ol.popGeneratorState();
}
}
+}
+
+void ClassDef::writeIncludeFiles(OutputList &ol)
+{
+ if (m_impl->incInfo /*&& Config_getBool("SHOW_INCLUDE_FILES")*/)
+ {
+ QCString nm=m_impl->incInfo->includeName.isEmpty() ?
+ (m_impl->incInfo->fileDef ?
+ m_impl->incInfo->fileDef->docName().data() : ""
+ ) :
+ m_impl->incInfo->includeName.data();
+ if (!nm.isEmpty())
+ {
+ ol.startTypewriter();
+ bool isIDLorJava = nm.right(4)==".idl" ||
+ nm.right(5)==".pidl" ||
+ nm.right(5)==".java";
+ if (isIDLorJava)
+ {
+ ol.docify("import ");
+ }
+ else if (isObjectiveC())
+ {
+ ol.docify("#import ");
+ }
+ else
+ {
+ ol.docify("#include ");
+ }
+ if (m_impl->incInfo->local || isIDLorJava)
+ ol.docify("\"");
+ else
+ ol.docify("<");
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Html);
+ ol.docify(nm);
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.enable(OutputGenerator::Html);
+ if (m_impl->incInfo->fileDef)
+ {
+ ol.writeObjectLink(0,m_impl->incInfo->fileDef->includeName(),0,nm);
+ }
+ else
+ {
+ ol.docify(nm);
+ }
+ ol.popGeneratorState();
+ if (m_impl->incInfo->local || isIDLorJava)
+ ol.docify("\"");
+ else
+ ol.docify(">");
+ if (isIDLorJava)
+ ol.docify(";");
+ ol.endTypewriter();
+ ol.newParagraph();
+ }
+ }
+}
+
+void ClassDef::writeAllMembersLink(OutputList &ol)
+{
+ // write link to list of all members (HTML only)
+ if (m_impl->allMemberNameInfoSDict &&
+ !Config_getBool("OPTIMIZE_OUTPUT_FOR_C")
+ )
+ {
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.newParagraph();
+ ol.startTextLink(getMemberListFileName(),0);
+ ol.parseText(theTranslator->trListOfAllMembers());
+ ol.endTextLink();
+ ol.enableAll();
+ ol.popGeneratorState();
+ }
+}
+
+void ClassDef::writeMemberGroups(OutputList &ol)
+{
+ // write user defined member groups
+ if (m_impl->memberGroupSDict)
+ {
+ MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
+ {
+ if (!mg->allMembersInSameSection() || !m_impl->subGrouping) // group is in its own section
+ {
+ mg->writeDeclarations(ol,this,0,0,0);
+ }
+ else // add this group to the corresponding member section
+ {
+ //printf("addToDeclarationSection(%s)\n",mg->header().data());
+ //mg->addToDeclarationSection();
+ }
+ }
+ }
+}
+void ClassDef::writeNestedClasses(OutputList &ol,const QCString &title)
+{
+ // nested classes
+ if (m_impl->innerClasses)
+ {
+ m_impl->innerClasses->writeDeclaration(ol,0,title,TRUE);
+ }
+}
+
+void ClassDef::startMemberDocumentation(OutputList &ol)
+{
+ if (Config_getBool("SEPARATE_MEMBER_PAGES"))
+ {
+ ol.disable(OutputGenerator::Html);
+ Doxygen::suppressDocWarnings = TRUE;
+ }
+}
+
+void ClassDef::endMemberDocumentation(OutputList &ol)
+{
+ if (Config_getBool("SEPARATE_MEMBER_PAGES"))
+ {
+ ol.enable(OutputGenerator::Html);
+ Doxygen::suppressDocWarnings = FALSE;
+ }
+}
+
+void ClassDef::startMemberDeclarations(OutputList &ol)
+{
+ ol.startMemberSections();
+}
+
+void ClassDef::endMemberDeclarations(OutputList &ol)
+{
+ ol.endMemberSections();
+}
+
+void ClassDef::writeAuthorSection(OutputList &ol)
+{
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Man);
+ ol.writeString("\n");
+ ol.startGroupHeader();
+ ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
+ ol.endGroupHeader();
+ ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
+ ol.popGeneratorState();
}
// write all documentation for this class
@@ -1237,104 +1422,6 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.popGeneratorState();
}
-
- if (Config_getBool("SEARCHENGINE"))
- {
- Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
- Doxygen::searchIndex->addWord(localName(),TRUE);
- }
-
- ol.startTextBlock();
-
- //printf("Class %s brief=`%s' doc=`%s'\n",name().data(),briefDescription().data(),documentation().data());
-
- bool exampleFlag=hasExamples();
- // write brief description
- if (!briefDescription().isEmpty())
- {
- if (!Config_getBool("DETAILS_AT_TOP"))
- {
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"_details");
-
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty() ||
- exampleFlag
- )
- {
- ol.parseText(theTranslator->trMore());
- }
- ol.endTextLink();
- ol.popGeneratorState();
-
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.newParagraph();
- ol.popGeneratorState();
- }
- }
- ol.writeSynopsis();
-
- if (m_impl->incInfo && Config_getBool("SHOW_INCLUDE_FILES"))
- {
- QCString nm=m_impl->incInfo->includeName.isEmpty() ?
- (m_impl->incInfo->fileDef ?
- m_impl->incInfo->fileDef->docName().data() : ""
- ) :
- m_impl->incInfo->includeName.data();
- if (!nm.isEmpty())
- {
- ol.startTypewriter();
- bool isIDLorJava = nm.right(4)==".idl" ||
- nm.right(5)==".pidl" ||
- nm.right(5)==".java";
- if (isIDLorJava)
- {
- ol.docify("import ");
- }
- else if (isObjectiveC())
- {
- ol.docify("#import ");
- }
- else
- {
- ol.docify("#include ");
- }
- if (m_impl->incInfo->local || isIDLorJava)
- ol.docify("\"");
- else
- ol.docify("<");
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- ol.docify(nm);
- ol.disableAllBut(OutputGenerator::Html);
- ol.enable(OutputGenerator::Html);
- if (m_impl->incInfo->fileDef)
- {
- ol.writeObjectLink(0,m_impl->incInfo->fileDef->includeName(),0,nm);
- }
- else
- {
- ol.docify(nm);
- }
- ol.popGeneratorState();
- if (m_impl->incInfo->local || isIDLorJava)
- ol.docify("\"");
- else
- ol.docify(">");
- if (isIDLorJava)
- ol.docify(";");
- ol.endTypewriter();
- ol.newParagraph();
- }
- }
-
-
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
Doxygen::tagFile << " <compound kind=\"" << compoundTypeString();
@@ -1354,24 +1441,127 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
}
- writeClassDiagrams(ol);
+ if (Config_getBool("SEARCHENGINE"))
+ {
+ Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
+ Doxygen::searchIndex->addWord(localName(),TRUE);
+ }
+ bool exampleFlag=hasExamples();
- // write link to list of all members (HTML only)
- if (m_impl->allMemberNameInfoSDict &&
- !Config_getBool("OPTIMIZE_OUTPUT_FOR_C")
- )
+ //---------------------------------------- start flexible part -------------------------------
+
+#define NEW_LAYOUT
+#ifdef NEW_LAYOUT // new flexible layout
+
+ QListIterator<LayoutDocEntry> eli(
+ LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
+ LayoutDocEntry *lde;
+ for (eli.toFirst();(lde=eli.current());++eli)
+ {
+ switch (lde->kind())
+ {
+ case LayoutDocEntry::BriefDesc:
+ writeBriefDescription(ol,exampleFlag);
+ break;
+ case LayoutDocEntry::ClassIncludes:
+ writeIncludeFiles(ol);
+ break;
+ case LayoutDocEntry::ClassInheritanceGraph:
+ writeInheritanceGraph(ol);
+ break;
+ case LayoutDocEntry::ClassCollaborationGraph:
+ writeCollaborationGraph(ol);
+ break;
+ case LayoutDocEntry::ClassAllMembersLink:
+ writeAllMembersLink(ol);
+ break;
+ case LayoutDocEntry::MemberDeclStart:
+ startMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::MemberGroups:
+ writeMemberGroups(ol);
+ break;
+ case LayoutDocEntry::MemberDecl:
+ {
+ LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
+ writeMemberDeclarations(ol,lmd->type,lmd->title,lmd->subscript);
+ }
+ break;
+ case LayoutDocEntry::ClassNestedClasses:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeNestedClasses(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::MemberDeclEnd:
+ endMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::DetailedDesc:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeDetailedDescription(ol,pageType,exampleFlag,ls->title);
+ }
+ break;
+ case LayoutDocEntry::MemberDefStart:
+ startMemberDocumentation(ol);
+ break;
+ case LayoutDocEntry::MemberDef:
+ {
+ LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
+ writeMemberDocumentation(ol,lmd->type,lmd->title);
+ }
+ break;
+ case LayoutDocEntry::MemberDefEnd:
+ endMemberDocumentation(ol);
+ break;
+ case LayoutDocEntry::ClassUsedFiles:
+ showUsedFiles(ol);
+ break;
+ case LayoutDocEntry::AuthorSection:
+ writeAuthorSection(ol);
+ break;
+ case LayoutDocEntry::NamespaceNestedNamespaces:
+ case LayoutDocEntry::NamespaceClasses:
+ case LayoutDocEntry::FileClasses:
+ case LayoutDocEntry::FileNamespaces:
+ case LayoutDocEntry::FileIncludes:
+ case LayoutDocEntry::FileIncludeGraph:
+ case LayoutDocEntry::FileIncludedByGraph:
+ case LayoutDocEntry::FileSourceLink:
+ case LayoutDocEntry::GroupClasses:
+ case LayoutDocEntry::GroupNamespaces:
+ case LayoutDocEntry::GroupDirs:
+ case LayoutDocEntry::GroupNestedGroups:
+ case LayoutDocEntry::GroupFiles:
+ case LayoutDocEntry::GroupGraph:
+ case LayoutDocEntry::GroupPageDocs:
+ case LayoutDocEntry::DirSubDirs:
+ case LayoutDocEntry::DirFiles:
+ case LayoutDocEntry::DirGraph:
+ err("Internal inconsistency: member %d should not be part of "
+ "LayoutDocManager::Class entry list\n",lde->kind());
+ break;
+ }
+ }
+
+#else // old fixed layout
+
+ //printf("Class %s brief=`%s' doc=`%s'\n",name().data(),briefDescription().data(),documentation().data());
+
+ //ol.startTextBlock();
+
+ // write brief description
+ if (!Config_getBool("DETAILS_AT_TOP"))
{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.newParagraph();
- ol.startTextLink(getMemberListFileName(),0);
- ol.parseText(theTranslator->trListOfAllMembers());
- ol.endTextLink();
- ol.enableAll();
- ol.popGeneratorState();
+ writeBriefDescription(ol,exampleFlag);
}
+
+ writeIncludeFiles(ol);
+ writeInheritanceGraph(ol);
+ writeCollaborationGraph(ol);
+ writeAllMembersLink(ol);
- ol.endTextBlock();
+ //ol.endTextBlock();
// write detailed description if the user wants it near the top
if (Config_getBool("DETAILS_AT_TOP"))
@@ -1383,27 +1573,10 @@ void ClassDef::writeDocumentation(OutputList &ol)
//// Member declarations + brief descriptions
///////////////////////////////////////////////////////////////////////////
- // write member groups
- ol.startMemberSections();
+ startMemberDeclarations(ol);
- // write user defined member groups
- if (m_impl->memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- if (!mg->allMembersInSameSection() || !m_impl->subGrouping) // group is in its own section
- {
- mg->writeDeclarations(ol,this,0,0,0);
- }
- else // add this group to the corresponding member section
- {
- //printf("addToDeclarationSection(%s)\n",mg->header().data());
- //mg->addToDeclarationSection();
- }
- }
- }
+ // write member groups
+ writeMemberGroups(ol);
// public types
writeMemberDeclarations(ol,MemberList::pubTypes,theTranslator->trPublicTypes());
@@ -1470,18 +1643,10 @@ void ClassDef::writeDocumentation(OutputList &ol)
writeMemberDeclarations(ol,MemberList::related,theTranslator->trRelatedFunctions(),
theTranslator->trRelatedSubscript()
);
- //if (related) related->writeDeclarations(ol,this,0,0,0,
- // theTranslator->trRelatedFunctions(),
- // theTranslator->trRelatedSubscript()
- // );
- // nested classes
- if (m_impl->innerClasses)
- {
- m_impl->innerClasses->writeDeclaration(ol,0,0,TRUE);
- }
+ writeNestedClasses(ol);
- ol.endMemberSections();
+ endMemberDeclarations(ol);
// write detailed description
if (!Config_getBool("DETAILS_AT_TOP"))
@@ -1489,56 +1654,11 @@ void ClassDef::writeDocumentation(OutputList &ol)
writeDetailedDescription(ol,pageType,exampleFlag);
}
- writeMemberDocumentation(ol);
-
- /////////////////////////////////////////////////////////////////////
- ol.startTextBlock();
-
- // write the list of used files (not for man pages)
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
-
- showUsedFiles(ol);
-
- // write Author section (Man only)
- ol.enable(OutputGenerator::Man);
- ol.disableAllBut(OutputGenerator::Man);
- ol.writeString("\n");
- ol.startGroupHeader();
- ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
- ol.endGroupHeader();
- ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
- ol.popGeneratorState();
-
- ol.endTextBlock();
- /////////////////////////////////////////////////////////////////////
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
- }
-
- endFile(ol);
-
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- writeMemberPages(ol);
- }
-}
-
-void ClassDef::writeMemberDocumentation(OutputList &ol)
-{
///////////////////////////////////////////////////////////////////////////
//// Member definitions + detailed documentation
///////////////////////////////////////////////////////////////////////////
- bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN");
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.disable(OutputGenerator::Html);
- Doxygen::suppressDocWarnings = TRUE;
- }
+ startMemberDocumentation(ol);
writeMemberDocumentation(ol,MemberList::typedefMembers,theTranslator->trMemberTypedefDocumentation());
writeMemberDocumentation(ol,MemberList::enumMembers,theTranslator->trMemberEnumerationDocumentation());
@@ -1556,10 +1676,33 @@ void ClassDef::writeMemberDocumentation(OutputList &ol)
writeMemberDocumentation(ol,MemberList::propertyMembers,theTranslator->trPropertyDocumentation());
writeMemberDocumentation(ol,MemberList::eventMembers,theTranslator->trEventDocumentation());
+ endMemberDocumentation(ol);
+ /////////////////////////////////////////////////////////////////////
+ //ol.startTextBlock();
+
+ // write the list of used files (not for man pages)
+ showUsedFiles(ol);
+
+ // write Author section (Man only)
+ writeAuthorSection(ol);
+
+ //ol.endTextBlock();
+ /////////////////////////////////////////////////////////////////////
+ //---------------------------------------- end flexible part -------------------------------
+
+#endif
+
+ if (!Config_getString("GENERATE_TAGFILE").isEmpty())
+ {
+ writeDocAnchorsToTagFile();
+ Doxygen::tagFile << " </compound>" << endl;
+ }
+
+ endFile(ol);
+
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
- ol.enable(OutputGenerator::Html);
- Doxygen::suppressDocWarnings = FALSE;
+ writeMemberPages(ol);
}
}
diff --git a/src/classdef.h b/src/classdef.h
index 8659449..7c390c6 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -306,13 +306,10 @@ class ClassDef : public Definition
void mergeMembers();
void distributeMemberGroupDocumentation();
void writeDocumentation(OutputList &ol);
- void writeClassDiagrams(OutputList &ol);
void writeDocumentationForInnerClasses(OutputList &ol);
- void writeMemberDocumentation(OutputList &ol);
void writeMemberPages(OutputList &ol);
void writeMemberList(OutputList &ol);
void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup);
- void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag);
void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const;
void reclassifyMember(MemberDef *md,MemberDef::MemberType t);
@@ -333,6 +330,20 @@ class ClassDef : public Definition
const char *subTitle=0);
void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
void writePlainMemberDeclaration(OutputList &ol,MemberList::ListType lt,bool inGroup);
+ void writeBriefDescription(OutputList &ol,bool exampleFlag);
+ void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag,
+ const QCString &title);
+ void writeIncludeFiles(OutputList &ol);
+ void writeAllMembersLink(OutputList &ol);
+ void writeInheritanceGraph(OutputList &ol);
+ void writeCollaborationGraph(OutputList &ol);
+ void writeMemberGroups(OutputList &ol);
+ void writeNestedClasses(OutputList &ol,const QCString &title);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
ClassDefImpl *m_impl;
diff --git a/src/config.l b/src/config.l
index 9fffc0b..21e7a39 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1653,14 +1653,14 @@ void Config::create()
"description. Set this tag to YES if you prefer the old behaviour instead. \n",
FALSE
);
- cb = addBool(
- "DETAILS_AT_TOP",
- "If the DETAILS_AT_TOP tag is set to YES then Doxygen \n"
- "will output the detailed description near the top, like JavaDoc.\n"
- "If set to NO, the detailed description appears after the member \n"
- "documentation. \n",
- FALSE
- );
+ //cb = addBool(
+ // "DETAILS_AT_TOP",
+ // "If the DETAILS_AT_TOP tag is set to YES then Doxygen \n"
+ // "will output the detailed description near the top, like JavaDoc.\n"
+ // "If set to NO, the detailed description appears after the member \n"
+ // "documentation. \n",
+ // FALSE
+ // );
cb = addBool(
"INHERIT_DOCS",
"If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \n"
@@ -1901,13 +1901,13 @@ void Config::create()
"documentation. If set to YES the scope will be hidden. \n",
FALSE
);
- cb = addBool(
- "SHOW_INCLUDE_FILES",
- "If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n"
- "will put a list of the files that are included by a file in the documentation \n"
- "of that file. \n",
- TRUE
- );
+ //cb = addBool(
+ // "SHOW_INCLUDE_FILES",
+ // "If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n"
+ // "will put a list of the files that are included by a file in the documentation \n"
+ // "of that file. \n",
+ // TRUE
+ // );
cb = addBool(
"INLINE_INFO",
"If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \n"
@@ -1993,13 +1993,13 @@ void Config::create()
"command in the documentation regardless of this setting. \n",
0,10000,30
);
- cb = addBool(
- "SHOW_USED_FILES",
- "Set the SHOW_USED_FILES tag to NO to disable the list of files generated \n"
- "at the bottom of the documentation of classes and structs. If set to YES the \n"
- "list will mention the files that were used to generate the documentation. \n",
- TRUE
- );
+ //cb = addBool(
+ // "SHOW_USED_FILES",
+ // "Set the SHOW_USED_FILES tag to NO to disable the list of files generated \n"
+ // "at the bottom of the documentation of classes and structs. If set to YES the \n"
+ // "list will mention the files that were used to generate the documentation. \n",
+ // TRUE
+ // );
cb = addBool(
"SHOW_DIRECTORIES",
"If the sources in your project are distributed over multiple directories \n"
@@ -2031,6 +2031,25 @@ void Config::create()
"is used as the file version. See the manual for examples. \n"
);
cs->setWidgetType(ConfigString::File);
+ cs = addString( "LAYOUT_FILE",
+ "The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \n"
+ "doxygen. The layout file controls the global structure of the generated output files \n"
+ "in an output format independent way. The create the layout file that represents \n"
+ "doxygen's defaults, run doxygen with the -l option. You can optionally specify a \n"
+ "file name after the option, if omitted doxygenlayout.xml will be used as the name \n"
+ "of the layout file.\n"
+ );
+ cs->setWidgetType(ConfigString::File);
+ addObsolete("DETAILS_AT_TOP");
+ addObsolete("SHOW_INCLUDE_FILES");
+ addObsolete("SHOW_USED_FILES");
+ addObsolete("ALPHABETICAL_INDEX");
+ addObsolete("CLASS_GRAPH");
+ addObsolete("COLLABORATION_GRAPH");
+ addObsolete("GROUP_GRAPHS");
+ addObsolete("INCLUDE_GRAPH");
+ addObsolete("INCLUDED_BY_GRAPH");
+
//-----------------------------------------------------------------------------------------------
addInfo( "Messages","configuration options related to warning and progress messages");
@@ -2276,13 +2295,13 @@ void Config::create()
addInfo( "Index","configuration options related to the alphabetical class index");
//-----------------------------------------------------------------------------------------------
- cb = addBool(
- "ALPHABETICAL_INDEX",
- "If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \n"
- "of all compounds will be generated. Enable this if the project \n"
- "contains a lot of classes, structs, unions or interfaces. \n",
- FALSE
- );
+ //cb = addBool(
+ // "ALPHABETICAL_INDEX",
+ // "If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \n"
+ // "of all compounds will be generated. Enable this if the project \n"
+ // "contains a lot of classes, structs, unions or interfaces. \n",
+ // FALSE
+ // );
ci = addInt(
"COLS_IN_ALPHA_INDEX",
"If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \n"
@@ -3029,31 +3048,31 @@ void Config::create()
"different font using DOT_FONTNAME you can set the path where dot \n"
"can find it using this tag. \n"
);
- cb = addBool(
- "CLASS_GRAPH",
- "If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \n"
- "will generate a graph for each documented class showing the direct and \n"
- "indirect inheritance relations. Setting this tag to YES will force the \n"
- "the CLASS_DIAGRAMS tag to NO.\n",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- cb = addBool(
- "COLLABORATION_GRAPH",
- "If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n"
- "will generate a graph for each documented class showing the direct and \n"
- "indirect implementation dependencies (inheritance, containment, and \n"
- "class references variables) of the class with other documented classes. \n",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- cb = addBool(
- "GROUP_GRAPHS",
- "If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \n"
- "will generate a graph for groups, showing the direct groups dependencies\n",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
+ //cb = addBool(
+ // "CLASS_GRAPH",
+ // "If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \n"
+ // "will generate a graph for each documented class showing the direct and \n"
+ // "indirect inheritance relations. Setting this tag to YES will force the \n"
+ // "the CLASS_DIAGRAMS tag to NO.\n",
+ // TRUE
+ // );
+ //cb->addDependency("HAVE_DOT");
+ //cb = addBool(
+ // "COLLABORATION_GRAPH",
+ // "If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n"
+ // "will generate a graph for each documented class showing the direct and \n"
+ // "indirect implementation dependencies (inheritance, containment, and \n"
+ // "class references variables) of the class with other documented classes. \n",
+ // TRUE
+ // );
+ //cb->addDependency("HAVE_DOT");
+ //cb = addBool(
+ // "GROUP_GRAPHS",
+ // "If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \n"
+ // "will generate a graph for groups, showing the direct groups dependencies\n",
+ // TRUE
+ // );
+ //cb->addDependency("HAVE_DOT");
cb = addBool(
"UML_LOOK",
"If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n"
@@ -3069,24 +3088,24 @@ void Config::create()
FALSE
);
cb->addDependency("HAVE_DOT");
- cb = addBool(
- "INCLUDE_GRAPH",
- "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n"
- "tags are set to YES then doxygen will generate a graph for each documented \n"
- "file showing the direct and indirect include dependencies of the file with \n"
- "other documented files. \n",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- cb = addBool(
- "INCLUDED_BY_GRAPH",
- "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \n"
- "HAVE_DOT tags are set to YES then doxygen will generate a graph for each \n"
- "documented header file showing the documented files that directly or \n"
- "indirectly include this file. \n",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
+ //cb = addBool(
+ // "INCLUDE_GRAPH",
+ // "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n"
+ // "tags are set to YES then doxygen will generate a graph for each documented \n"
+ // "file showing the direct and indirect include dependencies of the file with \n"
+ // "other documented files. \n",
+ // TRUE
+ // );
+ //cb->addDependency("HAVE_DOT");
+ //cb = addBool(
+ // "INCLUDED_BY_GRAPH",
+ // "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \n"
+ // "HAVE_DOT tags are set to YES then doxygen will generate a graph for each \n"
+ // "documented header file showing the documented files that directly or \n"
+ // "indirectly include this file. \n",
+ // TRUE
+ // );
+ //cb->addDependency("HAVE_DOT");
cb = addBool(
"CALL_GRAPH",
"If the CALL_GRAPH and HAVE_DOT options are set to YES then \n"
@@ -3115,12 +3134,12 @@ void Config::create()
);
cb->addDependency("HAVE_DOT");
cb = addBool(
- "DIRECTORY_GRAPH",
- "If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \n"
- "then doxygen will show the dependencies a directory has on other directories \n"
- "in a graphical way. The dependency relations are determined by the #include\n"
- "relations between the files in the directories.\n",
- TRUE
+ "DIRECTORY_GRAPH",
+ "If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \n"
+ "then doxygen will show the dependencies a directory has on other directories \n"
+ "in a graphical way. The dependency relations are determined by the #include\n"
+ "relations between the files in the directories.\n",
+ TRUE
);
cb->addDependency("HAVE_DOT");
ce = addEnum(
@@ -3178,11 +3197,11 @@ void Config::create()
cb = addBool(
"DOT_TRANSPARENT",
"Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \n"
- "background. This is enabled by default, which results in a transparent \n"
- "background. Warning: Depending on the platform used, enabling this option \n"
- "may lead to badly anti-aliased labels on the edges of a graph (i.e. they \n"
- "become hard to read). \n",
- TRUE
+ "background. This is disabled by default, because dot on Windows does not \n"
+ "seem to support this out of the box. Warning: Depending on the platform used, \n"
+ "enabling this option may lead to badly anti-aliased labels on the edges of \n"
+ "a graph (i.e. they become hard to read). \n",
+ FALSE
);
cb->addDependency("HAVE_DOT");
cb = addBool(
diff --git a/src/defgen.cpp b/src/defgen.cpp
index 4c52150..4f760e2 100644
--- a/src/defgen.cpp
+++ b/src/defgen.cpp
@@ -94,7 +94,6 @@ void generateDEFForMember(MemberDef *md,
case MemberDef::Enumeration: memType="enum"; break;
case MemberDef::Function: memType="function"; isFunc=TRUE; break;
case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
- case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 9107627..23fe600 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -8,6 +8,7 @@
#include "language.h"
#include "message.h"
#include "dot.h"
+#include "layout.h"
//----------------------------------------------------------------------
// method implementation
@@ -107,25 +108,37 @@ QCString DirDef::getOutputFileBase() const
//return QCString().sprintf("dir_%06d",m_dirCount);
}
-void DirDef::writeDetailedDocumentation(OutputList &ol)
+void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
{
- if (!briefDescription().isEmpty() || !documentation().isEmpty())
+ if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
+ !documentation().isEmpty())
{
ol.writeRuler();
ol.pushGeneratorState();
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- ol.writeAnchor(0,"_details");
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
- ol.parseText(theTranslator->trDetailedDescription());
+ ol.parseText(title);
ol.endGroupHeader();
// repeat brief description
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
- ol.newParagraph();
+ }
+ // separator between brief and details
+ if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
+ !documentation().isEmpty())
+ {
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Man);
+ ol.disable(OutputGenerator::RTF);
+ ol.newParagraph();
+ ol.enableAll();
+ ol.disableAllBut(OutputGenerator::Man);
+ ol.writeString("\n\n");
+ ol.popGeneratorState();
}
// write documentation
@@ -136,63 +149,39 @@ void DirDef::writeDetailedDocumentation(OutputList &ol)
}
}
-void DirDef::writeDocumentation(OutputList &ol)
+void DirDef::writeBriefDescription(OutputList &ol)
{
- ol.pushGeneratorState();
-
- QCString shortTitle=theTranslator->trDirReference(m_shortName);
- QCString title=theTranslator->trDirReference(m_dispName);
- startFile(ol,getOutputFileBase(),name(),title,HLI_None,TRUE);
-
- // write navigation path
- writeNavigationPath(ol);
-
- ol.endQuickIndices();
- ol.startContents();
-
- startTitle(ol,getOutputFileBase());
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.parseText(shortTitle);
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- ol.parseText(title);
- ol.popGeneratorState();
- endTitle(ol,getOutputFileBase(),title);
-
- // write brief or details (if DETAILS_AT_TOP)
- if (Config_getBool("DETAILS_AT_TOP"))
- {
- writeDetailedDocumentation(ol);
- ol.newParagraph();
- }
- else if (!briefDescription().isEmpty())
+ if (!briefDescription().isEmpty())
{
ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
ol.writeString(" \n");
+ ol.enable(OutputGenerator::RTF);
+
+ if (Config_getBool("REPEAT_BRIEF") ||
+ !documentation().isEmpty()
+ )
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startTextLink(0,"_details");
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ }
+ ol.popGeneratorState();
+
ol.pushGeneratorState();
- ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- ol.startTextLink(0,"_details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- ol.enableAll();
- ol.disableAllBut(OutputGenerator::Man);
ol.newParagraph();
ol.popGeneratorState();
}
+ ol.writeSynopsis();
+}
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <compound kind=\"dir\">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl;
- Doxygen::tagFile << " <path>" << convertToXML(name()) << "</path>" << endl;
- Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
- }
-
+void DirDef::writeDirectoryGraph(OutputList &ol)
+{
// write graph dependency graph
- if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT"))
+ if (/*Config_getBool("DIRECTORY_GRAPH") &&*/ Config_getBool("HAVE_DOT"))
{
DotDirDeps dirDep(this);
if (!dirDep.isTrivial())
@@ -206,8 +195,10 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.enableAll();
}
}
+}
- ol.startMemberSections();
+void DirDef::writeSubDirList(OutputList &ol)
+{
// write subdir list
if (m_subdirs.count()>0)
{
@@ -245,7 +236,10 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.endMemberList();
}
-
+}
+
+void DirDef::writeFileList(OutputList &ol)
+{
// write file list
if (m_fileList->count()>0)
{
@@ -303,22 +297,160 @@ void DirDef::writeDocumentation(OutputList &ol)
}
ol.endMemberList();
}
+}
+
+void DirDef::startMemberDeclarations(OutputList &ol)
+{
+ ol.startMemberSections();
+}
+
+void DirDef::endMemberDeclarations(OutputList &ol)
+{
ol.endMemberSections();
+}
+
+void DirDef::writeDocumentation(OutputList &ol)
+{
+ ol.pushGeneratorState();
+
+ QCString shortTitle=theTranslator->trDirReference(m_shortName);
+ QCString title=theTranslator->trDirReference(m_dispName);
+ startFile(ol,getOutputFileBase(),name(),title,HLI_None,TRUE);
+
+ // write navigation path
+ writeNavigationPath(ol);
+
+ ol.endQuickIndices();
+ ol.startContents();
+
+ startTitle(ol,getOutputFileBase());
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.parseText(shortTitle);
+ ol.enableAll();
+ ol.disable(OutputGenerator::Html);
+ ol.parseText(title);
+ ol.popGeneratorState();
+ endTitle(ol,getOutputFileBase(),title);
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
+ Doxygen::tagFile << " <compound kind=\"dir\">" << endl;
+ Doxygen::tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl;
+ Doxygen::tagFile << " <path>" << convertToXML(name()) << "</path>" << endl;
+ Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
}
+
+ //---------------------------------------- start flexible part -------------------------------
+#define NEW_LAYOUT
+#ifdef NEW_LAYOUT // new flexible layout
+
+ QListIterator<LayoutDocEntry> eli(
+ LayoutDocManager::instance().docEntries(LayoutDocManager::Directory));
+ LayoutDocEntry *lde;
+ for (eli.toFirst();(lde=eli.current());++eli)
+ {
+ switch (lde->kind())
+ {
+ case LayoutDocEntry::BriefDesc:
+ writeBriefDescription(ol);
+ break;
+ case LayoutDocEntry::DirGraph:
+ writeDirectoryGraph(ol);
+ break;
+ case LayoutDocEntry::MemberDeclStart:
+ startMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::DirSubDirs:
+ writeSubDirList(ol);
+ break;
+ case LayoutDocEntry::DirFiles:
+ writeFileList(ol);
+ break;
+ case LayoutDocEntry::MemberDeclEnd:
+ endMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::DetailedDesc:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeDetailedDescription(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::ClassIncludes:
+ case LayoutDocEntry::ClassInheritanceGraph:
+ case LayoutDocEntry::ClassNestedClasses:
+ case LayoutDocEntry::ClassCollaborationGraph:
+ case LayoutDocEntry::ClassAllMembersLink:
+ case LayoutDocEntry::ClassUsedFiles:
+ case LayoutDocEntry::NamespaceNestedNamespaces:
+ case LayoutDocEntry::NamespaceClasses:
+ case LayoutDocEntry::FileClasses:
+ case LayoutDocEntry::FileNamespaces:
+ case LayoutDocEntry::FileIncludes:
+ case LayoutDocEntry::FileIncludeGraph:
+ case LayoutDocEntry::FileIncludedByGraph:
+ case LayoutDocEntry::FileSourceLink:
+ case LayoutDocEntry::GroupClasses:
+ case LayoutDocEntry::GroupNamespaces:
+ case LayoutDocEntry::GroupDirs:
+ case LayoutDocEntry::GroupNestedGroups:
+ case LayoutDocEntry::GroupFiles:
+ case LayoutDocEntry::GroupGraph:
+ case LayoutDocEntry::GroupPageDocs:
+ case LayoutDocEntry::AuthorSection:
+ case LayoutDocEntry::MemberGroups:
+ case LayoutDocEntry::MemberDecl:
+ case LayoutDocEntry::MemberDef:
+ case LayoutDocEntry::MemberDefStart:
+ case LayoutDocEntry::MemberDefEnd:
+ err("Internal inconsistency: member %d should not be part of "
+ "LayoutDocManager::Directory entry list\n",lde->kind());
+ break;
+ }
+ }
+
+
+#else
+
+ // write brief or details (if DETAILS_AT_TOP)
+ if (Config_getBool("DETAILS_AT_TOP"))
+ {
+ writeDetailedDescription(ol,theTranslator->trDetailedDescription());
+ }
+ else if (!briefDescription().isEmpty())
+ {
+ writeBriefDescription(ol);
+ }
+
+ writeDirectoryGraph(ol);
+
+ startMemberDeclarations(ol);
+
+ writeSubDirList(ol);
+ writeFileList(ol);
+
+ endMemberDeclarations(ol);
if (!Config_getBool("DETAILS_AT_TOP"))
{
- writeDetailedDocumentation(ol);
+ writeDetailedDescription(ol,theTranslator->trDetailedDescription());
}
+
+#endif
+ //---------------------------------------- end flexible part -------------------------------
+
+ if (!Config_getString("GENERATE_TAGFILE").isEmpty())
+ {
+ writeDocAnchorsToTagFile();
+ Doxygen::tagFile << " </compound>" << endl;
+ }
+
endFile(ol);
ol.popGeneratorState();
+
+
}
#if 0
diff --git a/src/dirdef.h b/src/dirdef.h
index 49dca57..90c9379 100644
--- a/src/dirdef.h
+++ b/src/dirdef.h
@@ -68,7 +68,6 @@ class DirDef : public Definition
bool depGraphIsTrivial() const;
// generate output
- void writeDetailedDocumentation(OutputList &ol);
void writeDocumentation(OutputList &ol);
void writeDepGraph(QTextStream &t);
@@ -77,6 +76,15 @@ class DirDef : public Definition
private:
friend void computeDirDependencies();
+
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void writeDirectoryGraph(OutputList &ol);
+ void writeSubDirList(OutputList &ol);
+ void writeFileList(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+
void setLevel();
static DirDef *createNewDir(const char *path);
static bool matchPath(const QCString &path,QStrList &l);
diff --git a/src/docsets.cpp b/src/docsets.cpp
index f9f5114..6daad38 100644
--- a/src/docsets.cpp
+++ b/src/docsets.cpp
@@ -329,8 +329,8 @@ void DocSets::addIndexItem(const char *, const char *,
type="enum"; break;
case MemberDef::EnumValue:
type="econst"; break;
- case MemberDef::Prototype:
- type="prototype"; break;
+ //case MemberDef::Prototype:
+ // type="prototype"; break;
case MemberDef::Signal:
type="signal"; break;
case MemberDef::Slot:
diff --git a/src/dot.cpp b/src/dot.cpp
index 51a2506..87a7e08 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -842,12 +842,12 @@ void DotNode::writeXML(QTextStream &t,bool isClassGraph)
{
int p=0;
int ni;
- while ((ni=edgeInfo->m_label.find("\\n",p))!=-1)
+ while ((ni=edgeInfo->m_label.find('\n',p))!=-1)
{
t << " <edgelabel>"
<< convertToXML(edgeInfo->m_label.mid(p,ni-p))
<< "</edgelabel>" << endl;
- p=ni+2;
+ p=ni+1;
}
t << " <edgelabel>"
<< convertToXML(edgeInfo->m_label.right(edgeInfo->m_label.length()-p))
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 826b86d..0c1bdae 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -76,6 +76,8 @@
#include "portable.h"
#include "vhdlscanner.h"
+#include "layout.h"
+
#define RECURSE_ENTRYTREE(func,var) \
do { if (var->children()) { \
EntryNavListIterator eli(*var->children()); \
@@ -7165,11 +7167,11 @@ static void generateClassDocs()
msg("Generating annotated compound index...\n");
writeAnnotatedIndex(*outputList);
- if (Config_getBool("ALPHABETICAL_INDEX"))
- {
+ //if (Config_getBool("ALPHABETICAL_INDEX"))
+ //{
msg("Generating alphabetical compound index...\n");
writeAlphabeticalIndex(*outputList);
- }
+ //}
msg("Generating hierarchical class index...\n");
writeHierarchicalIndex(*outputList);
@@ -8910,11 +8912,14 @@ static void usage(const char *name)
msg("configuration file:\n");
msg(" %s [configName]\n\n",name);
msg(" If - is used for configName doxygen will read from standard input.\n\n");
- msg("4) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n");
+ msg("4) Use doxygen to generate a template file controlling the layout of the\n");
+ msg(" generated documentation:\n");
+ msg(" %s -l layoutFileName.xml\n\n",name);
+ msg("5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n");
msg(" RTF: %s -w rtf styleSheetFile\n",name);
msg(" HTML: %s -w html headerFile footerFile styleSheetFile [configFile]\n",name);
msg(" LaTeX: %s -w latex headerFile styleSheetFile [configFile]\n\n",name);
- msg("5) Use doxygen to generate an rtf extensions file\n");
+ msg("6) Use doxygen to generate an rtf extensions file\n");
msg(" RTF: %s -e rtf extensionsFile\n\n",name);
msg("If -s is specified the comments in the config file will be omitted.\n");
msg("If configName is omitted `Doxyfile' will be used as a default.\n\n");
@@ -8957,10 +8962,8 @@ void initDoxygen()
Doxygen::parserManager->registerParser(".f90", new FortranLanguageScanner);
Doxygen::parserManager->registerParser(".vhd", new VHDLLanguageScanner);
-
// register any additional parsers here...
-
initClassMemberIndices();
initNamespaceMemberIndices();
initFileMemberIndices();
@@ -9028,11 +9031,13 @@ void readConfiguration(int argc, char **argv)
int optind=1;
const char *configName=0;
+ const char *layoutName=0;
const char *debugLabel;
const char *formatName;
bool genConfig=FALSE;
bool shortList=FALSE;
bool updateConfig=FALSE;
+ bool genLayout=FALSE;
while (optind<argc && argv[optind][0]=='-' &&
(isalpha(argv[optind][1]) || argv[optind][1]=='?' ||
argv[optind][1]=='-')
@@ -9048,6 +9053,12 @@ void readConfiguration(int argc, char **argv)
if (!configName)
{ configName="Doxyfile"; }
break;
+ case 'l':
+ genLayout=TRUE;
+ layoutName=getArg(argc,argv,optind);
+ if (!layoutName)
+ { layoutName="doxygenlayout.xml"; }
+ break;
case 'd':
debugLabel=getArg(argc,argv,optind);
Debug::setFlag(debugLabel);
@@ -9251,6 +9262,12 @@ void readConfiguration(int argc, char **argv)
cleanUpDoxygen();
exit(0);
}
+ if (genLayout)
+ {
+ writeDefaultLayoutFile(layoutName);
+ cleanUpDoxygen();
+ exit(0);
+ }
QFileInfo configFileInfo1("Doxyfile"),configFileInfo2("doxyfile");
if (optind>=argc)
@@ -9301,6 +9318,7 @@ void readConfiguration(int argc, char **argv)
/* Perlmod wants to know the path to the config file.*/
QFileInfo configFileInfo(configName);
setPerlModDoxyfile(configFileInfo.absFilePath());
+
}
void checkConfiguration()
@@ -9585,6 +9603,31 @@ void parseInput()
exit(1);
}
/**************************************************************************
+ * Handle layout file *
+ **************************************************************************/
+
+ LayoutDocManager::instance().init();
+ QCString layoutFileName = Config_getString("LAYOUT_FILE");
+ bool defaultLayoutUsed = FALSE;
+ if (layoutFileName.isEmpty())
+ {
+ layoutFileName = "doxygenlayout.xml";
+ defaultLayoutUsed = TRUE;
+ }
+
+ QFile layoutFile(layoutFileName);
+ if (layoutFile.open(IO_ReadOnly))
+ {
+ msg("Parsing layout file %s...\n",layoutFileName.data());
+ QTextStream t(&layoutFile);
+ LayoutDocManager::instance().parse(t);
+ }
+ else if (!defaultLayoutUsed)
+ {
+ err("Warning: failed to open layout file '%s' for reading!\n",layoutFileName.data());
+ }
+
+ /**************************************************************************
* Read and preprocess input *
**************************************************************************/
@@ -9963,6 +10006,8 @@ void parseInput()
msg("Combining using relations...\n");
combineUsingRelations();
+ msg("Adding members to index pages...\n");
+ addMembersToIndex();
}
void generateOutput()
@@ -10107,7 +10152,6 @@ void generateOutput()
writeGroupIndex(*outputList);
msg("Generating class documentation...\n");
- addMembersToIndex();
generateClassDocs();
if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY"))
diff --git a/src/doxytag.l b/src/doxytag.l
index 687fd63..a7beff1 100644
--- a/src/doxytag.l
+++ b/src/doxytag.l
@@ -245,6 +245,7 @@ QCString unhtmlify(const char *str)
}
<Start>^"<td"[^\n]*"<h1 align=center>" | // Qt-3.x.x
<Start>"</table><h1 align=\"center\">" | // Qt-4
+<Start>"</table><h1 class=\"title\">" | // >Qt-4.4.0
<Start>^"<h1 align=center>" { // Qt variant
BEGIN( ReadClassName );
}
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 053c1a5..e323dd5 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -35,6 +35,9 @@
#include "portable.h"
#include "vhdldocgen.h"
#include "debug.h"
+#include "layout.h"
+
+//---------------------------------------------------------------------------
class DevNullCodeDocInterface : public CodeOutputInterface
{
@@ -55,6 +58,8 @@ class DevNullCodeDocInterface : public CodeOutputInterface
virtual void linkableSymbol(int, const char *,Definition *,Definition *) {}
};
+//---------------------------------------------------------------------------
+
/*! create a new file definition, where \a p is the file path,
\a nm the file name, and \a ref is an HTML anchor name if the
file was read from a tag file or 0 otherwise
@@ -154,21 +159,22 @@ void FileDef::findSectionsInDocumentation()
}
}
-void FileDef::writeDetailedDocumentation(OutputList &ol)
+void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
- !documentation().isEmpty()
+ !documentation().isEmpty() ||
+ (Config_getBool("SOURCE_BROWSER") && getStartBodyLine()!=-1 && getBodyDef())
)
{
ol.writeRuler();
ol.pushGeneratorState();
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- ol.writeAnchor(0,"_details");
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
- ol.parseText(theTranslator->trDetailedDescription());
+ ol.parseText(title);
ol.endGroupHeader();
+
ol.startTextBlock();
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
@@ -179,6 +185,7 @@ void FileDef::writeDetailedDocumentation(OutputList &ol)
{
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
+ ol.disable(OutputGenerator::RTF);
ol.newParagraph();
ol.enableAll();
ol.disableAllBut(OutputGenerator::Man);
@@ -187,8 +194,6 @@ void FileDef::writeDetailedDocumentation(OutputList &ol)
}
if (!documentation().isEmpty())
{
- //if (doc.at(dl-1)!='.' && doc.at(dl-1)!='!' && doc.at(dl-1)!='?')
- // doc+='.';
ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
}
//printf("Writing source ref for file %s\n",name().data());
@@ -211,113 +216,38 @@ void FileDef::writeDetailedDocumentation(OutputList &ol)
}
}
-/*! Write the documentation page for this file to the file of output
- generators \a ol.
-*/
-void FileDef::writeDocumentation(OutputList &ol)
+void FileDef::writeBriefDescription(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- //funcList->countDecMembers();
-
- //QCString fn = name();
- //if (Config_getBool("FULL_PATH_NAMES"))
- //{
- // fn.prepend(stripFromPath(getPath().copy()));
- //}
-
- //printf("WriteDocumentation diskname=%s\n",diskname.data());
-
- QCString versionTitle;
- if (!fileVersion.isEmpty())
- {
- versionTitle=("("+fileVersion+")");
- }
- QCString title = docname+versionTitle;
- QCString pageTitle=theTranslator->trFileReference(docname);
-
- if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
- {
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,TRUE);
- getDirDef()->writeNavigationPath(ol);
- ol.endQuickIndices();
- ol.startContents();
- QCString pageTitleShort=theTranslator->trFileReference(name());
- startTitle(ol,getOutputFileBase());
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.parseText(pageTitleShort); // Html only
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- ol.parseText(pageTitle); // other output formats
- ol.popGeneratorState();
- addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),title);
- }
- else
- {
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible);
- startTitle(ol,getOutputFileBase());
- ol.parseText(pageTitle);
- addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),title);
- }
- if (!fileVersion.isEmpty())
- {
- ol.disableAllBut(OutputGenerator::Html);
- ol.startProjectNumber();
- ol.docify(versionTitle);
- ol.endProjectNumber();
- ol.enableAll();
- }
-
- if (Config_getBool("SEARCHENGINE"))
- {
- Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
- Doxygen::searchIndex->addWord(localName(),TRUE);
- }
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <compound kind=\"file\">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
- Doxygen::tagFile << " <path>" << convertToXML(getPath()) << "</path>" << endl;
- Doxygen::tagFile << " <filename>"
- << convertToXML(getOutputFileBase())
- << "</filename>" << endl;
- }
-
- if (Config_getBool("DETAILS_AT_TOP"))
+ if (!briefDescription().isEmpty())
{
- ol.startTextBlock();
- writeDetailedDocumentation(ol);
- ol.endTextBlock();
-
+ ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::RTF);
- ol.newParagraph();
+ ol.writeString(" \n");
+ ol.enable(OutputGenerator::RTF);
+
+ if (Config_getBool("REPEAT_BRIEF") ||
+ !documentation().isEmpty()
+ )
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startTextLink(0,"_details");
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ }
ol.popGeneratorState();
- }
- else if (!briefDescription().isEmpty())
- {
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
- //ol.writeString(" \n");
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"_details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- ol.enableAll();
ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::RTF);
ol.newParagraph();
ol.popGeneratorState();
}
ol.writeSynopsis();
-
- if (Config_getBool("SHOW_INCLUDE_FILES") && includeList &&
+}
+
+void FileDef::writeIncludeFiles(OutputList &ol)
+{
+ if (/*Config_getBool("SHOW_INCLUDE_FILES") &&*/ includeList &&
includeList->count()>0)
{
ol.startTextBlock(TRUE);
@@ -395,8 +325,11 @@ void FileDef::writeDocumentation(OutputList &ol)
}
ol.endTextBlock();
}
-
- if (Config_getBool("HAVE_DOT") && Config_getBool("INCLUDE_GRAPH"))
+}
+
+void FileDef::writeIncludeGraph(OutputList &ol)
+{
+ if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDE_GRAPH")*/)
{
//printf("Graph for file %s\n",name().data());
DotInclDepGraph incDepGraph(this,FALSE);
@@ -413,8 +346,11 @@ void FileDef::writeDocumentation(OutputList &ol)
}
//incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase());
}
+}
- if (Config_getBool("HAVE_DOT") && Config_getBool("INCLUDED_BY_GRAPH"))
+void FileDef::writeIncludedByGraph(OutputList &ol)
+{
+ if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDED_BY_GRAPH")*/)
{
//printf("Graph for file %s\n",name().data());
DotInclDepGraph incDepGraph(this,TRUE);
@@ -431,7 +367,11 @@ void FileDef::writeDocumentation(OutputList &ol)
}
//incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase());
}
+}
+
+void FileDef::writeSourceLink(OutputList &ol)
+{
//printf("%s: generateSourceFile()=%d\n",name().data(),generateSourceFile());
if (generateSourceFile())
{
@@ -442,87 +382,278 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.endTextLink();
ol.enableAll();
}
-
+}
+
+void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title)
+{
+ // write list of namespaces
+ if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title);
+}
+
+void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title)
+{
+ // write list of classes
+ if (classSDict) classSDict->writeDeclaration(ol,0,title,FALSE);
+}
+
+void FileDef::startMemberDeclarations(OutputList &ol)
+{
ol.startMemberSections();
+}
+
+void FileDef::endMemberDeclarations(OutputList &ol)
+{
+ ol.endMemberSections();
+}
- if (namespaceSDict && namespaceSDict->count()>0)
+void FileDef::startMemberDocumentation(OutputList &ol)
+{
+ if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
- NamespaceSDict::Iterator ndi(*namespaceSDict);
- NamespaceDef *nd;
- bool found=FALSE;
- for (ndi.toFirst();(nd=ndi.current());++ndi)
+ ol.disable(OutputGenerator::Html);
+ Doxygen::suppressDocWarnings = TRUE;
+ }
+}
+
+void FileDef::endMemberDocumentation(OutputList &ol)
+{
+ if (Config_getBool("SEPARATE_MEMBER_PAGES"))
+ {
+ ol.enable(OutputGenerator::Html);
+ Doxygen::suppressDocWarnings = FALSE;
+ }
+}
+
+void FileDef::writeMemberGroups(OutputList &ol)
+{
+ /* write user defined member groups */
+ if (memberGroupSDict)
+ {
+ MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
{
- if (nd->name().find('@')==-1 && !nd->isArtificial())
+ if ((!mg->allMembersInSameSection() || !m_subGrouping)
+ && mg->header()!="[NOHEADER]")
{
- if (!found)
+ mg->writeDeclarations(ol,0,0,this,0);
+ }
+ }
+ }
+}
+
+void FileDef::writeAuthorSection(OutputList &ol)
+{
+ // write Author section (Man only)
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Man);
+ ol.startGroupHeader();
+ ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
+ ol.endGroupHeader();
+ ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
+ ol.popGeneratorState();
+}
+
+/*! Write the documentation page for this file to the file of output
+ generators \a ol.
+*/
+void FileDef::writeDocumentation(OutputList &ol)
+{
+ //funcList->countDecMembers();
+
+ //QCString fn = name();
+ //if (Config_getBool("FULL_PATH_NAMES"))
+ //{
+ // fn.prepend(stripFromPath(getPath().copy()));
+ //}
+
+ //printf("WriteDocumentation diskname=%s\n",diskname.data());
+
+ QCString versionTitle;
+ if (!fileVersion.isEmpty())
+ {
+ versionTitle=("("+fileVersion+")");
+ }
+ QCString title = docname+versionTitle;
+ QCString pageTitle=theTranslator->trFileReference(docname);
+
+ if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
+ {
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,TRUE);
+ getDirDef()->writeNavigationPath(ol);
+ ol.endQuickIndices();
+ ol.startContents();
+ QCString pageTitleShort=theTranslator->trFileReference(name());
+ startTitle(ol,getOutputFileBase());
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.parseText(pageTitleShort); // Html only
+ ol.enableAll();
+ ol.disable(OutputGenerator::Html);
+ ol.parseText(pageTitle); // other output formats
+ ol.popGeneratorState();
+ addGroupListToTitle(ol,this);
+ endTitle(ol,getOutputFileBase(),title);
+ }
+ else
+ {
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible);
+ startTitle(ol,getOutputFileBase());
+ ol.parseText(pageTitle);
+ addGroupListToTitle(ol,this);
+ endTitle(ol,getOutputFileBase(),title);
+ }
+ if (!fileVersion.isEmpty())
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startProjectNumber();
+ ol.docify(versionTitle);
+ ol.endProjectNumber();
+ ol.enableAll();
+ }
+
+ if (Config_getBool("SEARCHENGINE"))
+ {
+ Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
+ Doxygen::searchIndex->addWord(localName(),TRUE);
+ }
+
+ if (!Config_getString("GENERATE_TAGFILE").isEmpty())
+ {
+ Doxygen::tagFile << " <compound kind=\"file\">" << endl;
+ Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
+ Doxygen::tagFile << " <path>" << convertToXML(getPath()) << "</path>" << endl;
+ Doxygen::tagFile << " <filename>"
+ << convertToXML(getOutputFileBase())
+ << "</filename>" << endl;
+ }
+
+ //---------------------------------------- start flexible part -------------------------------
+
+#define NEW_LAYOUT
+#ifdef NEW_LAYOUT // new flexible layout
+
+ QListIterator<LayoutDocEntry> eli(
+ LayoutDocManager::instance().docEntries(LayoutDocManager::File));
+ LayoutDocEntry *lde;
+ for (eli.toFirst();(lde=eli.current());++eli)
+ {
+ switch (lde->kind())
+ {
+ case LayoutDocEntry::BriefDesc:
+ writeBriefDescription(ol);
+ break;
+ case LayoutDocEntry::MemberDeclStart:
+ startMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::FileIncludes:
+ writeIncludeFiles(ol);
+ break;
+ case LayoutDocEntry::FileIncludeGraph:
+ writeIncludeGraph(ol);
+ break;
+ case LayoutDocEntry::FileIncludedByGraph:
+ writeIncludedByGraph(ol);
+ break;
+ case LayoutDocEntry::FileSourceLink:
+ writeSourceLink(ol);
+ break;
+ case LayoutDocEntry::FileClasses:
{
- ol.startMemberHeader();
- if (fortranOpt)
- {
- ol.parseText(theTranslator->trModules());
- }
- else
- {
- ol.parseText(theTranslator->trNamespaces());
- }
- ol.endMemberHeader();
- ol.startMemberList();
- found=TRUE;
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeClassDeclarations(ol,ls->title);
}
- ol.startMemberItem(0);
- if (fortranOpt)
+ break;
+ case LayoutDocEntry::FileNamespaces:
{
- ol.writeString("module ");
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeNamespaceDeclarations(ol,ls->title);
}
- else
+ break;
+ case LayoutDocEntry::MemberGroups:
+ writeMemberGroups(ol);
+ break;
+ case LayoutDocEntry::MemberDecl:
{
- ol.writeString("namespace ");
+ LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
+ writeMemberDeclarations(ol,lmd->type,lmd->title);
}
- ol.insertMemberAlign();
- if (nd->isLinkable())
+ break;
+ case LayoutDocEntry::MemberDeclEnd:
+ endMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::DetailedDesc:
{
- ol.writeObjectLink(nd->getReference(),
- nd->getOutputFileBase(),
- 0,
- nd->displayName()
- );
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
- }
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeDetailedDescription(ol,ls->title);
}
- else
+ break;
+ case LayoutDocEntry::MemberDefStart:
+ startMemberDocumentation(ol);
+ break;
+ case LayoutDocEntry::MemberDef:
{
- ol.startBold();
- ol.docify(nd->displayName());
- ol.endBold();
+ LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
+ writeMemberDocumentation(ol,lmd->type,lmd->title);
}
- ol.endMemberItem();
- }
+ break;
+ case LayoutDocEntry::MemberDefEnd:
+ endMemberDocumentation(ol);
+ break;
+ case LayoutDocEntry::AuthorSection:
+ writeAuthorSection(ol);
+ break;
+ case LayoutDocEntry::ClassIncludes:
+ case LayoutDocEntry::ClassInheritanceGraph:
+ case LayoutDocEntry::ClassNestedClasses:
+ case LayoutDocEntry::ClassCollaborationGraph:
+ case LayoutDocEntry::ClassAllMembersLink:
+ case LayoutDocEntry::ClassUsedFiles:
+ case LayoutDocEntry::NamespaceNestedNamespaces:
+ case LayoutDocEntry::NamespaceClasses:
+ case LayoutDocEntry::GroupClasses:
+ case LayoutDocEntry::GroupNamespaces:
+ case LayoutDocEntry::GroupDirs:
+ case LayoutDocEntry::GroupNestedGroups:
+ case LayoutDocEntry::GroupFiles:
+ case LayoutDocEntry::GroupGraph:
+ case LayoutDocEntry::GroupPageDocs:
+ case LayoutDocEntry::DirSubDirs:
+ case LayoutDocEntry::DirFiles:
+ case LayoutDocEntry::DirGraph:
+ err("Internal inconsistency: member %d should not be part of "
+ "LayoutDocManager::File entry list\n",lde->kind());
+ break;
}
- if (found) ol.endMemberList();
}
- if (classSDict) classSDict->writeDeclaration(ol);
-
- /* write user defined member groups */
- if (memberGroupSDict)
+
+#else
+
+ bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+
+ if (Config_getBool("DETAILS_AT_TOP"))
{
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- if ((!mg->allMembersInSameSection() || !m_subGrouping)
- && mg->header()!="[NOHEADER]")
- {
- mg->writeDeclarations(ol,0,0,this,0);
- }
- }
+ writeDetailedDescription(ol,theTranslator->trDetailedDescription());
}
+ else
+ {
+ writeBriefDescription(ol);
+ }
+
+ writeIncludeFiles(ol);
+ writeIncludeGraph(ol);
+ writeIncludedByGraph(ol);
+ writeSourceLink(ol);
+
+ startMemberDeclarations(ol);
- //allMemberList.writeDeclarations(ol,0,0,this,0,0,0);
+ writeNamespaceDeclarations(ol);
+ writeClassDeclarations(ol);
+ writeMemberGroups(ol);
+
writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines());
- writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos());
writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs());
writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations());
writeMemberDeclarations(ol,MemberList::decFuncMembers,
@@ -530,22 +661,29 @@ void FileDef::writeDocumentation(OutputList &ol)
vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
theTranslator->trFunctions()) ;
writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables());
- ol.endMemberSections();
+
+ endMemberDeclarations(ol);
if (!Config_getBool("DETAILS_AT_TOP"))
{
- writeDetailedDocumentation(ol);
+ writeDetailedDescription(ol,theTranslator->trDetailedDescription());
}
- writeMemberDocumentation(ol);
+ startMemberDocumentation(ol);
+
+ writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation());
+ writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation());
+ writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation());
+ writeMemberDocumentation(ol,MemberList::docFuncMembers,theTranslator->trFunctionDocumentation());
+ writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation());
+
+ endMemberDocumentation(ol);
// write Author section (Man only)
- ol.disableAllBut(OutputGenerator::Man);
- ol.startGroupHeader();
- ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
- ol.endGroupHeader();
- ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
- ol.enableAll();
+ writeAuthorSection(ol);
+
+#endif
+ //---------------------------------------- end flexible part -------------------------------
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
@@ -563,27 +701,6 @@ void FileDef::writeDocumentation(OutputList &ol)
}
}
-void FileDef::writeMemberDocumentation(OutputList &ol)
-{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.disable(OutputGenerator::Html);
- }
-
- writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation());
- writeMemberDocumentation(ol,MemberList::docProtoMembers,fortranOpt?theTranslator->trSubprogramDocumentation():theTranslator->trFunctionPrototypeDocumentation());
- writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation());
- writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation());
- writeMemberDocumentation(ol,MemberList::docFuncMembers,theTranslator->trFunctionDocumentation());
- writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation());
-
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.enable(OutputGenerator::Html);
- }
-}
-
void FileDef::writeMemberPages(OutputList &ol)
{
ol.pushGeneratorState();
@@ -775,10 +892,6 @@ void FileDef::insertMember(MemberDef *md)
break;
case MemberDef::EnumValue: // enum values are shown inside their enums
break;
- case MemberDef::Prototype:
- addMemberToList(MemberList::decProtoMembers,md);
- addMemberToList(MemberList::docProtoMembers,md);
- break;
case MemberDef::Define:
addMemberToList(MemberList::decDefineMembers,md);
addMemberToList(MemberList::docDefineMembers,md);
diff --git a/src/filedef.h b/src/filedef.h
index 6ea8d23..52282f7 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -126,9 +126,7 @@ class FileDef : public Definition
bool isJava() const { return m_isJava; }
- void writeDetailedDocumentation(OutputList &ol);
void writeDocumentation(OutputList &ol);
- void writeMemberDocumentation(OutputList &ol);
void writeMemberPages(OutputList &ol);
void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
@@ -188,6 +186,20 @@ class FileDef : public Definition
void addMemberToList(MemberList::ListType lt,MemberDef *md);
void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title);
void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
+ void writeIncludeFiles(OutputList &ol);
+ void writeIncludeGraph(OutputList &ol);
+ void writeIncludedByGraph(OutputList &ol);
+ void writeMemberGroups(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void writeSourceLink(OutputList &ol);
+ void writeNamespaceDeclarations(OutputList &ol,const QCString &title);
+ void writeClassDeclarations(OutputList &ol,const QCString &title);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
QDict<IncludeInfo> *includeDict;
QList<IncludeInfo> *includeList;
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 984bb4f..b0fd61d 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -35,6 +35,9 @@
#include "searchindex.h"
#include "dot.h"
#include "vhdldocgen.h"
+#include "layout.h"
+
+//---------------------------------------------------------------------------
GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
const char *refFileName) : Definition(df,dl,na)
@@ -297,13 +300,6 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
}
addMemberToList(MemberList::docEnumValMembers,md);
break;
- case MemberDef::Prototype:
- if (!docOnly)
- {
- addMemberToList(MemberList::decProtoMembers,md);
- }
- addMemberToList(MemberList::docProtoMembers,md);
- break;
case MemberDef::Define:
if (!docOnly)
{
@@ -420,10 +416,6 @@ void GroupDef::removeMember(MemberDef *md)
removeMemberFromList(MemberList::decEnumValMembers,md);
removeMemberFromList(MemberList::docEnumValMembers,md);
break;
- case MemberDef::Prototype:
- removeMemberFromList(MemberList::decProtoMembers,md);
- removeMemberFromList(MemberList::docProtoMembers,md);
- break;
case MemberDef::Define:
removeMemberFromList(MemberList::decDefineMembers,md);
removeMemberFromList(MemberList::docDefineMembers,md);
@@ -505,32 +497,44 @@ void GroupDef::computeAnchors()
setAnchors(0,'a',allMemberList);
}
-void GroupDef::writeDetailedDocumentation(OutputList &ol)
+void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
{
- if (!briefDescription().isEmpty() || !documentation().isEmpty())
+ if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
+ || !documentation().isEmpty()
+ )
{
-
- if (pageDict->count()!=countMembers()) // classical layout
+ if (pageDict->count()!=countMembers()) // not only pages -> classical layout
{
ol.writeRuler();
ol.pushGeneratorState();
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- ol.writeAnchor(0,"_details");
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
- ol.parseText(theTranslator->trDetailedDescription());
+ ol.parseText(title);
ol.endGroupHeader();
// repeat brief description
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
- ol.newParagraph();
+ }
+ // write separator between brief and details
+ if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
+ !documentation().isEmpty())
+ {
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Man);
+ ol.disable(OutputGenerator::RTF);
+ ol.newParagraph();
+ ol.enableAll();
+ ol.disableAllBut(OutputGenerator::Man);
+ ol.writeString("\n\n");
+ ol.popGeneratorState();
}
}
- // write documentation
+ // write detailed documentation
if (!documentation().isEmpty())
{
ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
@@ -538,31 +542,37 @@ void GroupDef::writeDetailedDocumentation(OutputList &ol)
}
}
-
-void GroupDef::writeDocumentation(OutputList &ol)
+void GroupDef::writeBriefDescription(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- ol.pushGeneratorState();
- startFile(ol,getOutputFileBase(),name(),title);
- startTitle(ol,getOutputFileBase());
- ol.parseText(title);
- addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),title);
-
- if (Config_getBool("SEARCHENGINE"))
+ if (!briefDescription().isEmpty())
{
- Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase());
- static QRegExp we("[a-zA-Z_][a-zA-Z_0-9]*");
- int i=0,p=0,l=0;
- while ((i=we.match(title,p,&l))!=-1) // foreach word in the title
+ ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.writeString(" \n");
+ ol.enable(OutputGenerator::RTF);
+
+ if (Config_getBool("REPEAT_BRIEF") ||
+ !documentation().isEmpty()
+ )
{
- Doxygen::searchIndex->addWord(title.mid(i,l),TRUE);
- p=i+l;
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startTextLink(0,"_details");
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
}
+ ol.popGeneratorState();
+
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.newParagraph();
+ ol.popGeneratorState();
}
+}
- if (Config_getBool("HAVE_DOT") && Config_getBool("GROUP_GRAPHS") )
+void GroupDef::writeGroupGraph(OutputList &ol)
+{
+ if (Config_getBool("HAVE_DOT") /*&& Config_getBool("GROUP_GRAPHS")*/ )
{
DotGroupCollaboration graph(this);
if (!graph.isTrivial())
@@ -577,45 +587,15 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.popGeneratorState();
}
}
+}
-
- if (Config_getBool("DETAILS_AT_TOP"))
- {
- writeDetailedDocumentation(ol);
- ol.newParagraph();
- }
- else if (!briefDescription().isEmpty())
- {
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
- ol.writeString(" \n");
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- ol.startTextLink(0,"_details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- ol.enableAll();
- ol.disableAllBut(OutputGenerator::Man);
- ol.newParagraph();
- ol.popGeneratorState();
- }
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <compound kind=\"group\">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
- Doxygen::tagFile << " <title>" << convertToXML(title) << "</title>" << endl;
- Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
- }
-
- ol.startMemberSections();
-
+void GroupDef::writeFiles(OutputList &ol,const QCString &title)
+{
// write list of files
if (fileList->count()>0)
{
ol.startMemberHeader();
- ol.parseText(theTranslator->trFile(TRUE,FALSE));
+ ol.parseText(title);
ol.endMemberHeader();
ol.startMemberList();
FileDef *fd=fileList->first();
@@ -641,15 +621,21 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
ol.endMemberList();
}
+}
+void GroupDef::writeNamespaces(OutputList &ol,const QCString &title)
+{
// write list of namespaces
- namespaceSDict->writeDeclaration(ol);
+ namespaceSDict->writeDeclaration(ol,title);
+}
+void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
+{
// write list of groups
if (groupList->count()>0)
{
ol.startMemberHeader();
- ol.parseText(theTranslator->trModules());
+ ol.parseText(title);
ol.endMemberHeader();
ol.startMemberList();
GroupDef *gd=groupList->first();
@@ -676,12 +662,15 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
ol.endMemberList();
}
+}
+void GroupDef::writeDirs(OutputList &ol,const QCString &title)
+{
// write list of directories
if (dirList->count()>0)
{
ol.startMemberHeader();
- ol.parseText(theTranslator->trDirectories());
+ ol.parseText(title);
ol.endMemberHeader();
ol.startMemberList();
DirDef *dd=dirList->first();
@@ -708,46 +697,16 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.endMemberList();
}
-
- // write list of classes
- classSDict->writeDeclaration(ol);
-
- // write list of members
- if (allMemberList->count()>0)
- {
- /* write user defined member groups */
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->writeDeclarations(ol,0,0,0,this);
- }
-
- writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines());
- writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos());
- writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs());
- writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations());
- writeMemberDeclarations(ol,MemberList::decEnumValMembers,theTranslator->trEnumerationValues());
- writeMemberDeclarations(ol,MemberList::decFuncMembers,
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions());
- writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables());
- writeMemberDeclarations(ol,MemberList::decSignalMembers,theTranslator->trSignals());
- writeMemberDeclarations(ol,MemberList::decPubSlotMembers,theTranslator->trPublicSlots());
- writeMemberDeclarations(ol,MemberList::decProSlotMembers,theTranslator->trProtectedSlots());
- writeMemberDeclarations(ol,MemberList::decPriSlotMembers,theTranslator->trPrivateSlots());
- writeMemberDeclarations(ol,MemberList::decEventMembers,theTranslator->trEvents());
- writeMemberDeclarations(ol,MemberList::decPropMembers,theTranslator->trProperties());
- writeMemberDeclarations(ol,MemberList::decFriendMembers,theTranslator->trFriends());
- }
- ol.endMemberSections();
+}
- if (!Config_getBool("DETAILS_AT_TOP"))
- {
- writeDetailedDocumentation(ol);
- }
+void GroupDef::writeClasses(OutputList &ol,const QCString &title)
+{
+ // write list of classes
+ classSDict->writeDeclaration(ol,0,title,FALSE);
+}
+void GroupDef::writePageDocumentation(OutputList &ol)
+{
PageDef *pd=0;
PageSDict::Iterator pdi(*pageDict);
for (pdi.toFirst();(pd=pdi.current());++pdi)
@@ -774,36 +733,258 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.endTextBlock();
}
}
+}
- writeMemberDocumentation(ol);
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
+void GroupDef::writeMemberGroups(OutputList &ol)
+{
+ /* write user defined member groups */
+ if (memberGroupSDict)
{
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
+ /* write user defined member groups */
+ MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
+ {
+ mg->writeDeclarations(ol,0,0,0,this);
+ }
}
+}
- endFile(ol);
- ol.popGeneratorState();
+void GroupDef::startMemberDeclarations(OutputList &ol)
+{
+ ol.startMemberSections();
+}
+
+void GroupDef::endMemberDeclarations(OutputList &ol)
+{
+ ol.endMemberSections();
+}
+void GroupDef::startMemberDocumentation(OutputList &ol)
+{
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
- allMemberList->sort();
- writeMemberPages(ol);
+ ol.disable(OutputGenerator::Html);
+ Doxygen::suppressDocWarnings = TRUE;
}
-
}
-void GroupDef::writeMemberDocumentation(OutputList &ol)
+void GroupDef::endMemberDocumentation(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
- ol.disable(OutputGenerator::Html);
+ ol.enable(OutputGenerator::Html);
+ Doxygen::suppressDocWarnings = FALSE;
+ }
+}
+
+void GroupDef::writeAuthorSection(OutputList &ol)
+{
+ // write Author section (Man only)
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Man);
+ ol.startGroupHeader();
+ ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
+ ol.endGroupHeader();
+ ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
+ ol.popGeneratorState();
+}
+
+void GroupDef::writeDocumentation(OutputList &ol)
+{
+ ol.pushGeneratorState();
+ startFile(ol,getOutputFileBase(),name(),title);
+ startTitle(ol,getOutputFileBase());
+ ol.parseText(title);
+ addGroupListToTitle(ol,this);
+ endTitle(ol,getOutputFileBase(),title);
+
+ if (Config_getBool("SEARCHENGINE"))
+ {
+ Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase());
+ static QRegExp we("[a-zA-Z_][a-zA-Z_0-9]*");
+ int i=0,p=0,l=0;
+ while ((i=we.match(title,p,&l))!=-1) // foreach word in the title
+ {
+ Doxygen::searchIndex->addWord(title.mid(i,l),TRUE);
+ p=i+l;
+ }
+ }
+
+ if (!Config_getString("GENERATE_TAGFILE").isEmpty())
+ {
+ Doxygen::tagFile << " <compound kind=\"group\">" << endl;
+ Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
+ Doxygen::tagFile << " <title>" << convertToXML(title) << "</title>" << endl;
+ Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
}
+
+ //---------------------------------------- start flexible part -------------------------------
+
+#define NEW_LAYOUT
+#ifdef NEW_LAYOUT // new flexible layout
+
+ QListIterator<LayoutDocEntry> eli(
+ LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
+ LayoutDocEntry *lde;
+ for (eli.toFirst();(lde=eli.current());++eli)
+ {
+ switch (lde->kind())
+ {
+ case LayoutDocEntry::BriefDesc:
+ writeBriefDescription(ol);
+ break;
+ case LayoutDocEntry::MemberDeclStart:
+ startMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::GroupClasses:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeClasses(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::GroupNamespaces:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeNamespaces(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::MemberGroups:
+ writeMemberGroups(ol);
+ break;
+ case LayoutDocEntry::MemberDecl:
+ {
+ LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
+ writeMemberDeclarations(ol,lmd->type,lmd->title);
+ }
+ break;
+ case LayoutDocEntry::MemberDeclEnd:
+ endMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::DetailedDesc:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeDetailedDescription(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::MemberDefStart:
+ startMemberDocumentation(ol);
+ break;
+ case LayoutDocEntry::MemberDef:
+ {
+ LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
+ writeMemberDocumentation(ol,lmd->type,lmd->title);
+ }
+ break;
+ case LayoutDocEntry::MemberDefEnd:
+ endMemberDocumentation(ol);
+ break;
+ case LayoutDocEntry::GroupNestedGroups:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeNestedGroups(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::GroupPageDocs:
+ writePageDocumentation(ol);
+ break;
+ case LayoutDocEntry::GroupDirs:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeDirs(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::GroupFiles:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeFiles(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::GroupGraph:
+ writeGroupGraph(ol);
+ break;
+ case LayoutDocEntry::AuthorSection:
+ writeAuthorSection(ol);
+ break;
+ case LayoutDocEntry::ClassIncludes:
+ case LayoutDocEntry::ClassInheritanceGraph:
+ case LayoutDocEntry::ClassNestedClasses:
+ case LayoutDocEntry::ClassCollaborationGraph:
+ case LayoutDocEntry::ClassAllMembersLink:
+ case LayoutDocEntry::ClassUsedFiles:
+ case LayoutDocEntry::NamespaceNestedNamespaces:
+ case LayoutDocEntry::NamespaceClasses:
+ case LayoutDocEntry::FileClasses:
+ case LayoutDocEntry::FileNamespaces:
+ case LayoutDocEntry::FileIncludes:
+ case LayoutDocEntry::FileIncludeGraph:
+ case LayoutDocEntry::FileIncludedByGraph:
+ case LayoutDocEntry::FileSourceLink:
+ case LayoutDocEntry::DirSubDirs:
+ case LayoutDocEntry::DirFiles:
+ case LayoutDocEntry::DirGraph:
+ err("Internal inconsistency: member %d should not be part of "
+ "LayoutDocManager::Group entry list\n",lde->kind());
+ break;
+ }
+ }
+
+#else
+
+ bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+
+
+ if (Config_getBool("DETAILS_AT_TOP"))
+ {
+ writeDetailedDescription(ol,theTranslator->trDetailedDescription());
+ }
+ else
+ {
+ writeBriefDescription(ol);
+ }
+
+ writeGroupGraph(ol);
+
+ startMemberDeclarations(ol);
+
+ writeFiles(ol);
+ writeNamespaces(ol);
+ writeNestedGroups(ol);
+ writeDirs(ol);
+ writeClasses(ol);
+ writeMemberGroups(ol);
+
+ writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines());
+ writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs());
+ writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations());
+ writeMemberDeclarations(ol,MemberList::decEnumValMembers,theTranslator->trEnumerationValues());
+ writeMemberDeclarations(ol,MemberList::decFuncMembers,
+ fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ theTranslator->trFunctions());
+ writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables());
+ writeMemberDeclarations(ol,MemberList::decSignalMembers,theTranslator->trSignals());
+ writeMemberDeclarations(ol,MemberList::decPubSlotMembers,theTranslator->trPublicSlots());
+ writeMemberDeclarations(ol,MemberList::decProSlotMembers,theTranslator->trProtectedSlots());
+ writeMemberDeclarations(ol,MemberList::decPriSlotMembers,theTranslator->trPrivateSlots());
+ writeMemberDeclarations(ol,MemberList::decEventMembers,theTranslator->trEvents());
+ writeMemberDeclarations(ol,MemberList::decPropMembers,theTranslator->trProperties());
+ writeMemberDeclarations(ol,MemberList::decFriendMembers,theTranslator->trFriends());
+
+ endMemberDeclarations(ol);
+
+ if (!Config_getBool("DETAILS_AT_TOP"))
+ {
+ writeDetailedDescription(ol,theTranslator->trDetailedDescription());
+ }
+
+ startMemberDocumentation(ol);
+
+ writePageDocumentation(ol);
+
writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation());
- writeMemberDocumentation(ol,MemberList::docProtoMembers,theTranslator->trFunctionPrototypeDocumentation());
writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation());
writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation());
writeMemberDocumentation(ol,MemberList::docEnumValMembers,theTranslator->trEnumerationValueDocumentation());
@@ -817,10 +998,27 @@ void GroupDef::writeMemberDocumentation(OutputList &ol)
writeMemberDocumentation(ol,MemberList::docPropMembers,theTranslator->trProperties()); // todo: add trPropertyDocumentation()
writeMemberDocumentation(ol,MemberList::docFriendMembers,theTranslator->trFriends()); // todo: add trFriendDocumentation()
+ endMemberDocumentation(ol);
+
+#endif
+
+ //---------------------------------------- end flexible part -------------------------------
+
+ endFile(ol);
+ ol.popGeneratorState();
+
+ if (!Config_getString("GENERATE_TAGFILE").isEmpty())
+ {
+ writeDocAnchorsToTagFile();
+ Doxygen::tagFile << " </compound>" << endl;
+ }
+
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
- ol.enable(OutputGenerator::Html);
+ allMemberList->sort();
+ writeMemberPages(ol);
}
+
}
void GroupDef::writeMemberPages(OutputList &ol)
diff --git a/src/groupdef.h b/src/groupdef.h
index 06eb035..0b6278e 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -62,9 +62,7 @@ class GroupDef : public Definition
bool insertMember(MemberDef *def,bool docOnly=FALSE);
void removeMember(MemberDef *md);
bool containsGroup(const GroupDef *def); // true if def is already a subgroup
- void writeDetailedDocumentation(OutputList &ol);
void writeDocumentation(OutputList &ol);
- void writeMemberDocumentation(OutputList &ol);
void writeMemberPages(OutputList &ol);
void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
int countMembers() const;
@@ -116,6 +114,21 @@ class GroupDef : public Definition
void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title);
void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
void removeMemberFromList(MemberList::ListType lt,MemberDef *md);
+ void writeGroupGraph(OutputList &ol);
+ void writeFiles(OutputList &ol,const QCString &title);
+ void writeNamespaces(OutputList &ol,const QCString &title);
+ void writeNestedGroups(OutputList &ol,const QCString &title);
+ void writeDirs(OutputList &ol,const QCString &title);
+ void writeClasses(OutputList &ol,const QCString &title);
+ void writePageDocumentation(OutputList &ol);
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void writeMemberGroups(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
QCString title; // title of the group
bool titleSet; // true if title is not the same as the name
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 71f237d..bcc462c 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -37,6 +37,7 @@
#include "debug.h"
#include "dirdef.h"
#include "vhdldocgen.h"
+#include "layout.h"
// #define GROUP_COLOR "#ff8080"
@@ -1731,6 +1732,178 @@ static QCString fixSpaces(const QCString &s)
return substitute(s," ","&nbsp;");
}
+#define NEW_LAYOUT
+#ifdef NEW_LAYOUT
+
+static bool quickLinkVisible(LayoutNavEntry::Kind kind)
+{
+ switch (kind)
+ {
+ case LayoutNavEntry::MainPage: return TRUE;
+ case LayoutNavEntry::Pages: return indexedPages>0;
+ case LayoutNavEntry::Modules: return documentedGroups>0;
+ case LayoutNavEntry::Namespaces: return documentedNamespaces>0;
+ case LayoutNavEntry::NamespaceMembers: return documentedNamespaceMembers[NMHL_All]>0;
+ case LayoutNavEntry::Classes: return annotatedClasses>0;
+ case LayoutNavEntry::ClassAnnotated: return annotatedClasses>0;
+ case LayoutNavEntry::ClassHierarchy: return hierarchyClasses>0;
+ case LayoutNavEntry::ClassMembers: return documentedClassMembers[CMHL_All]>0;
+ case LayoutNavEntry::Files: return documentedHtmlFiles>0;
+ case LayoutNavEntry::FileGlobals: return documentedFileMembers[FMHL_All]>0;
+ case LayoutNavEntry::Dirs: return documentedDirs>0;
+ case LayoutNavEntry::Examples: return Doxygen::exampleSDict->count()>0;
+ }
+ return FALSE;
+}
+
+static void renderQuickLinksAsTree(QTextStream &t,const QCString &relPath,LayoutNavEntry *root)
+
+{
+ QListIterator<LayoutNavEntry> li(root->children());
+ LayoutNavEntry *entry;
+ int count=0;
+ for (li.toFirst();(entry=li.current());++li)
+ {
+ if (entry->visible() && quickLinkVisible(entry->kind())) count++;
+ }
+ if (count>0) // at least one item is visible
+ {
+ startQuickIndexList(t,FALSE);
+ for (li.toFirst();(entry=li.current());++li)
+ {
+ if (entry->visible() && quickLinkVisible(entry->kind()))
+ {
+ startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
+ FALSE,FALSE,relPath);
+ t << fixSpaces(entry->title());
+ endQuickIndexItem(t);
+ // recursive into child list
+ renderQuickLinksAsTree(t,relPath,entry);
+ }
+ }
+ endQuickIndexList(t,FALSE);
+ }
+}
+
+
+static void renderQuickLinksAsTabs(QTextStream &t,const QCString &relPath,
+ LayoutNavEntry *hlEntry,LayoutNavEntry::Kind kind,
+ bool highlightParent,bool highlightSearch)
+{
+ if (hlEntry->parent()) // first draw the tabs for the parent of hlEntry
+ {
+ renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch);
+ }
+ if (hlEntry->parent() && hlEntry->parent()->children().count()>0) // draw tabs for row containing hlEntry
+ {
+ QListIterator<LayoutNavEntry> li(hlEntry->parent()->children());
+ LayoutNavEntry *entry;
+
+ int count=0;
+ for (li.toFirst();(entry=li.current());++li)
+ {
+ if (entry->visible() && quickLinkVisible(entry->kind())) count++;
+ }
+ if (count>0) // at least one item is visible
+ {
+ startQuickIndexList(t,TRUE);
+ for (li.toFirst();(entry=li.current());++li)
+ {
+ if (entry->visible() && quickLinkVisible(entry->kind()))
+ {
+ startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
+ entry==hlEntry && (entry->children().count()>0 || (entry->kind()==kind && !highlightParent)),
+ TRUE,relPath);
+ t << fixSpaces(entry->title());
+ endQuickIndexItem(t);
+ }
+ }
+ if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry())
+ {
+ // last item of the top row -> special case for search engine
+ if (Config_getBool("SEARCHENGINE"))
+ {
+ QCString searchFor = fixSpaces(theTranslator->trSearchForIndex());
+ if (searchFor.at(0)=='S') searchFor="<u>S</u>"+searchFor.mid(1);
+ t << " <li>\n";
+ t << " <form action=\"" << relPath << "search.php\" method=\"get\">\n";
+ t << " <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n";
+ t << " <tr>\n";
+ t << " <td><label>&nbsp;" << searchFor << "&nbsp;</label></td>\n";
+ if (!highlightSearch)
+ {
+ 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";
+ }
+ }
+ if (!highlightSearch) // on the search page the page will be ended by the
+ // page itself
+ {
+ endQuickIndexList(t,TRUE);
+ }
+ }
+ else // normal case
+ {
+ endQuickIndexList(t,TRUE);
+ }
+ }
+ }
+}
+
+static void writeDefaultQuickLinks(QTextStream &t,bool compact,
+ HighlightedItem hli,const QCString &relPath)
+{
+ LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry();
+ LayoutNavEntry::Kind kind = (LayoutNavEntry::Kind)-1;
+ bool highlightParent=FALSE;
+ switch (hli) // map HLI enums to LayoutNavEntry::Kind enums
+ {
+ case HLI_Main: kind = LayoutNavEntry::MainPage; break;
+ case HLI_Modules: kind = LayoutNavEntry::Modules; break;
+ case HLI_Directories: kind = LayoutNavEntry::Dirs; break;
+ case HLI_Namespaces: kind = LayoutNavEntry::Namespaces; break;
+ case HLI_Hierarchy: kind = LayoutNavEntry::ClassHierarchy; break;
+ case HLI_Classes: kind = LayoutNavEntry::Classes; break;
+ case HLI_Annotated: kind = LayoutNavEntry::ClassAnnotated; break;
+ case HLI_Files: kind = LayoutNavEntry::Files; break;
+ case HLI_NamespaceMembers: kind = LayoutNavEntry::NamespaceMembers; break;
+ case HLI_Functions: kind = LayoutNavEntry::ClassMembers; break;
+ case HLI_Globals: kind = LayoutNavEntry::FileGlobals; break;
+ case HLI_Pages: kind = LayoutNavEntry::Pages; break;
+ case HLI_Examples: kind = LayoutNavEntry::Examples; break;
+ case HLI_ClassVisible: kind = LayoutNavEntry::Classes; highlightParent = TRUE; break;
+ case HLI_NamespaceVisible: kind = LayoutNavEntry::Namespaces; highlightParent = TRUE; break;
+ case HLI_FileVisible: kind = LayoutNavEntry::Files; highlightParent = TRUE; break;
+ case HLI_None: break;
+ case HLI_Search: break;
+ }
+
+ if (compact)
+ {
+ // find highlighted index item
+ LayoutNavEntry *hlEntry = root->find(kind);
+ if (!hlEntry) // highlighted item not found in the index! -> just show the level 1 index...
+ {
+ highlightParent=TRUE;
+ hlEntry = root->children().getFirst();
+ if (hlEntry==0)
+ {
+ return; // argl, empty index!
+ }
+ }
+ renderQuickLinksAsTabs(t,relPath,hlEntry,kind,highlightParent,hli==HLI_Search);
+ }
+ else
+ {
+ renderQuickLinksAsTree(t,relPath,root);
+ }
+}
+
+#else // old fixed layout
+
static void writeNamespaceSubIndex(QTextStream &t,bool compact,
HighlightedItem hli,const QCString &relPath
)
@@ -1957,7 +2130,6 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact,
}
}
-
// -------------- File
if (documentedHtmlFiles>0)
@@ -2047,6 +2219,7 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact,
}
}
+#endif
void HtmlGenerator::startQuickIndices()
{
diff --git a/src/language.cpp b/src/language.cpp
index e1bd947..a56ed44 100644
--- a/src/language.cpp
+++ b/src/language.cpp
@@ -220,7 +220,7 @@ bool setTranslator(const char *langName)
#ifdef LANG_FI
else if (L_EQUAL("finnish"))
{
- theTranslator=new TranslatorDecoder(new TranslatorFinnish);
+ theTranslator=new TranslatorFinnish;
}
#endif
#ifdef LANG_RU
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 0516e37..a1baa95 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -26,6 +26,7 @@
#include "message.h"
#include "parserintf.h"
#include "msc.h"
+#include "htmlattrib.h"
static QString escapeLabelName(const char *s)
{
@@ -57,6 +58,21 @@ static const char *getSectionName(int level)
return secLabels[QMIN(maxLevels-1,l)];
}
+static int rowspan(DocHtmlCell *cell)
+{
+ int retval = 0;
+ HtmlAttribList attrs = cell->attribs ();
+ for (unsigned int i = 0; i < attrs.count(); ++i)
+ {
+ if ("rowspan" == attrs.at(i)->name.lower())
+ {
+ retval = attrs.at(i)->value.toInt();
+ break;
+ }
+ }
+ return retval;
+}
+
QString LatexDocVisitor::escapeMakeIndexChars(const char *s)
{
QString result;
@@ -84,7 +100,7 @@ LatexDocVisitor::LatexDocVisitor(QTextStream &t,CodeOutputInterface &ci,
const char *langExt,bool insideTabbing)
: DocVisitor(DocVisitor_Latex), m_t(t), m_ci(ci), m_insidePre(FALSE),
m_insideItem(FALSE), m_hide(FALSE), m_insideTabbing(insideTabbing),
- m_langExt(langExt)
+ m_langExt(langExt), m_currentColumn(0), m_inRowspan(FALSE)
{
}
@@ -672,6 +688,7 @@ void LatexDocVisitor::visitPost(DocHtmlDescData *)
void LatexDocVisitor::visitPre(DocHtmlTable *t)
{
+ m_rowspanIndices.clear();
if (m_hide) return;
if (t->hasCaption())
{
@@ -707,21 +724,65 @@ void LatexDocVisitor::visitPost(DocHtmlCaption *)
void LatexDocVisitor::visitPre(DocHtmlRow *)
{
+ m_currentColumn = 0;
}
void LatexDocVisitor::visitPost(DocHtmlRow *)
{
if (m_hide) return;
- m_t << "\\\\\\hline\n";
+
+ m_t << "\\\\";
+
+ QMap<int, int>::Iterator it;
+ int col = 1;
+ for (it = m_rowspanIndices.begin(); it != m_rowspanIndices.end(); ++it)
+ {
+ it.data()--;
+ if (it.data () <= 0)
+ m_rowspanIndices.remove (it);
+ else if (0 < it.data() - col)
+ m_t << "\\cline{" << col << "-" << it.data() - col << "}";
+
+ col = 1 + it.data ();
+ }
+
+ if (col <= m_currentColumn)
+ m_t << "\\cline{" << col << "-" << m_currentColumn << "}";
+
+ m_t << "\n";
}
-void LatexDocVisitor::visitPre(DocHtmlCell *)
+void LatexDocVisitor::visitPre(DocHtmlCell *cell)
{
+ if (m_hide) return;
+
+ m_currentColumn++;
+ //Skip columns that span from above.
+ QMap<int, int>::Iterator it = m_rowspanIndices.find(m_currentColumn);
+ while (0 < it.data() && it != m_rowspanIndices.end())
+ {
+ m_t << "&";
+ m_currentColumn++;
+ it++;
+ }
+
+ int rs = rowspan(cell);
+ if (0 < rs)
+ {
+ m_inRowspan = TRUE;
+ m_rowspanIndices[m_currentColumn] = rs;
+ m_t << "\\multirow{" << rs << "}{\\linewidth}{";
+ }
}
void LatexDocVisitor::visitPost(DocHtmlCell *c)
{
if (m_hide) return;
+ if (m_inRowspan)
+ {
+ m_inRowspan = FALSE;
+ m_t << "}";
+ }
if (!c->isLast()) m_t << "&";
}
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 413ea68..1f8f2a9 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -22,6 +22,7 @@
#include "docvisitor.h"
#include <qstack.h>
#include <qcstring.h>
+#include <qmap.h>
class QTextStream;
class CodeOutputInterface;
@@ -160,6 +161,9 @@ class LatexDocVisitor : public DocVisitor
bool m_insideTabbing;
QStack<bool> m_enabled;
QCString m_langExt;
+ QMap<int, int> m_rowspanIndices;
+ int m_currentColumn;
+ bool m_inRowspan;
};
#endif
diff --git a/src/layout.cpp b/src/layout.cpp
new file mode 100644
index 0000000..3a9949c
--- /dev/null
+++ b/src/layout.cpp
@@ -0,0 +1,1121 @@
+/******************************************************************************
+ *
+ *
+ *
+ *
+ * Copyright (C) 1997-2008 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#include "layout.h"
+#include "message.h"
+#include "language.h"
+#include "vhdldocgen.h"
+#include "util.h"
+
+#include <qxml.h>
+#include <qfile.h>
+#include <qstring.h>
+#include <qfileinfo.h>
+#include <qtextstream.h>
+
+static const char layout_default[] =
+#include "layout_default.h"
+;
+
+//---------------------------------------------------------------------------------
+
+LayoutNavEntry *LayoutNavEntry::find(LayoutNavEntry::Kind kind) const
+{
+ LayoutNavEntry *result=0;
+ QListIterator<LayoutNavEntry> li(m_children);
+ LayoutNavEntry *entry;
+ for (li.toFirst();(entry=li.current());++li)
+ {
+ // depth first search, needed to find the entry furthest from the
+ // root in case an entry is in the tree twice
+ result = entry->find(kind);
+ if (result) return result;
+ if (entry->kind()==kind)
+ {
+ return entry;
+ }
+ }
+ return result;
+}
+
+//---------------------------------------------------------------------------------
+
+class LayoutParser : public QXmlDefaultHandler
+{
+ private:
+ class StartElementHandler
+ {
+ typedef void (LayoutParser::*Handler)(const QXmlAttributes &attrib);
+ public:
+ StartElementHandler(LayoutParser *parent, Handler h)
+ : m_parent(parent), m_handler(h) {}
+ virtual ~StartElementHandler() {}
+ virtual void operator()(const QXmlAttributes &attrib)
+ {
+ (m_parent->*m_handler)(attrib);
+ }
+ protected:
+ StartElementHandler() : m_parent(0), m_handler(0) {}
+ private:
+ LayoutParser *m_parent;
+ Handler m_handler;
+ };
+
+ class StartElementHandlerKind : public StartElementHandler
+ {
+ typedef void (LayoutParser::*Handler)(LayoutDocEntry::Kind kind,
+ const QXmlAttributes &attrib);
+ public:
+ StartElementHandlerKind(LayoutParser *parent, LayoutDocEntry::Kind k,Handler h)
+ : m_parent(parent), m_kind(k), m_handler(h) {}
+ void operator()(const QXmlAttributes &attrib)
+ {
+ (m_parent->*m_handler)(m_kind,attrib);
+ }
+ private:
+ LayoutParser *m_parent;
+ LayoutDocEntry::Kind m_kind;
+ Handler m_handler;
+ };
+
+ class StartElementHandlerSection : public StartElementHandler
+ {
+ typedef void (LayoutParser::*Handler)(LayoutDocEntry::Kind kind,
+ const QXmlAttributes &attrib,
+ const QCString &title);
+ public:
+ StartElementHandlerSection(LayoutParser *parent, LayoutDocEntry::Kind k,Handler h,
+ const QCString &title)
+ : m_parent(parent), m_kind(k), m_handler(h), m_title(title) {}
+ void operator()(const QXmlAttributes &attrib)
+ {
+ (m_parent->*m_handler)(m_kind,attrib,m_title);
+ }
+ private:
+ LayoutParser *m_parent;
+ LayoutDocEntry::Kind m_kind;
+ Handler m_handler;
+ QCString m_title;
+ };
+
+ class StartElementHandlerMember : public StartElementHandler
+ {
+ typedef void (LayoutParser::*Handler)(const QXmlAttributes &attrib,
+ MemberList::ListType type,
+ const QCString &title,
+ const QCString &subtitle);
+ public:
+ StartElementHandlerMember(LayoutParser *parent,
+ Handler h,
+ MemberList::ListType type,
+ const QCString &tl,
+ const QCString &ss = QCString()
+ )
+ : m_parent(parent), m_handler(h), m_type(type),
+ m_title(tl), m_subscript(ss) {}
+ void operator()(const QXmlAttributes &attrib)
+ {
+ (m_parent->*m_handler)(attrib,m_type,m_title,m_subscript);
+ }
+ private:
+ LayoutParser *m_parent;
+ Handler m_handler;
+ MemberList::ListType m_type;
+ QCString m_title;
+ QCString m_subscript;
+ };
+
+ class StartElementHandlerNavEntry : public StartElementHandler
+ {
+ typedef void (LayoutParser::*Handler)(LayoutNavEntry::Kind kind,
+ const QXmlAttributes &attrib,
+ const QCString &title);
+ public:
+ StartElementHandlerNavEntry(LayoutParser *parent,
+ LayoutNavEntry::Kind kind,
+ Handler h,
+ const QCString &tl
+ )
+ : m_parent(parent), m_kind(kind), m_handler(h), m_title(tl) {}
+ void operator()(const QXmlAttributes &attrib)
+ {
+ (m_parent->*m_handler)(m_kind,attrib,m_title);
+ }
+ private:
+ LayoutParser *m_parent;
+ LayoutNavEntry::Kind m_kind;
+ Handler m_handler;
+ QCString m_title;
+ };
+
+ class EndElementHandler
+ {
+ typedef void (LayoutParser::*Handler)();
+ public:
+ EndElementHandler(LayoutParser *parent, Handler h) : m_parent(parent), m_handler(h) {}
+ void operator()() { (m_parent->*m_handler)(); }
+ private:
+ LayoutParser *m_parent;
+ Handler m_handler;
+ };
+
+
+ public:
+ static LayoutParser &instance()
+ {
+ static LayoutParser *theInstance = new LayoutParser;
+ return *theInstance;
+ }
+ void init()
+ {
+ m_sHandler.setAutoDelete(TRUE);
+ m_eHandler.setAutoDelete(TRUE);
+ m_part = -1; // invalid
+ m_rootNav = 0;
+
+ bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
+
+ // start & end handlers
+ m_sHandler.insert("doxygenlayout",
+ new StartElementHandler(this,&LayoutParser::startLayout));
+ m_eHandler.insert("doxygenlayout",
+ new EndElementHandler(this,&LayoutParser::endLayout));
+
+ // class layout handlers
+ m_sHandler.insert("navindex",
+ new StartElementHandler(this,&LayoutParser::startNavIndex));
+ m_sHandler.insert("navindex/tab",
+ new StartElementHandler(this,&LayoutParser::startNavEntry));
+ m_eHandler.insert("navindex/tab",
+ new EndElementHandler(this,&LayoutParser::endNavEntry));
+ m_eHandler.insert("navindex",
+ new EndElementHandler(this,&LayoutParser::endNavIndex));
+
+ // class layout handlers
+ m_sHandler.insert("class",
+ new StartElementHandler(this,&LayoutParser::startClass));
+ m_sHandler.insert("class/briefdescription",
+ new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("class/detaileddescription",
+ new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
+ theTranslator->trDetailedDescription()));
+ m_sHandler.insert("class/authorsection",
+ new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("class/includes",
+ new StartElementHandlerKind(this,LayoutDocEntry::ClassIncludes,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("class/inheritancegraph",
+ new StartElementHandlerKind(this,LayoutDocEntry::ClassInheritanceGraph,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("class/collaborationgraph",
+ new StartElementHandlerKind(this,LayoutDocEntry::ClassCollaborationGraph,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("class/allmemberslink",
+ new StartElementHandlerKind(this,LayoutDocEntry::ClassAllMembersLink,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("class/usedfiles",
+ new StartElementHandlerKind(this,LayoutDocEntry::ClassUsedFiles,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("class/memberdecl",
+ new StartElementHandler(this,&LayoutParser::startMemberDecl));
+ m_sHandler.insert("class/memberdecl/membergroups",
+ new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("class/memberdecl/nestedclasses",
+ new StartElementHandlerSection(this,LayoutDocEntry::ClassNestedClasses,&LayoutParser::startSectionEntry,
+ vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) :
+ fortranOpt ? theTranslator->trDataTypes() :
+ theTranslator->trCompounds()
+ ));
+ m_sHandler.insert("class/memberdecl/publictypes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pubTypes,theTranslator->trPublicTypes()));
+ m_sHandler.insert("class/memberdecl/publicslots",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pubSlots,theTranslator->trPublicSlots()));
+ m_sHandler.insert("class/memberdecl/signals",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::signals,theTranslator->trSignals()));
+ m_sHandler.insert("class/memberdecl/publicmethods",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pubMethods,theTranslator->trPublicMembers()));
+ m_sHandler.insert("class/memberdecl/publicstaticmethods",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pubStaticMethods,theTranslator->trStaticPublicMembers()));
+ m_sHandler.insert("class/memberdecl/publicattributes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pubAttribs,theTranslator->trPublicAttribs()));
+ m_sHandler.insert("class/memberdecl/publicstaticattributes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pubStaticAttribs,theTranslator->trStaticPublicAttribs()));
+ m_sHandler.insert("class/memberdecl/protectedtypes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::proTypes,theTranslator->trProtectedTypes()));
+ m_sHandler.insert("class/memberdecl/protectedslots",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::proSlots,theTranslator->trProtectedSlots()));
+ m_sHandler.insert("class/memberdecl/protectedmethods",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::proMethods,theTranslator->trProtectedMembers()));
+ m_sHandler.insert("class/memberdecl/protectedstaticmethods",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::proStaticMethods,theTranslator->trStaticProtectedMembers()));
+ m_sHandler.insert("class/memberdecl/protectedattributes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::proAttribs,theTranslator->trProtectedAttribs()));
+ m_sHandler.insert("class/memberdecl/protectedstaticattributes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::proStaticAttribs,theTranslator->trStaticProtectedAttribs()));
+ m_sHandler.insert("class/memberdecl/packagetypes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pacTypes,theTranslator->trPackageTypes()));
+ m_sHandler.insert("class/memberdecl/packagemethods",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pacMethods,theTranslator->trPackageMembers()));
+ m_sHandler.insert("class/memberdecl/packagestaticmethods",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pacStaticMethods,theTranslator->trStaticPackageMembers()));
+ m_sHandler.insert("class/memberdecl/packageattributes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pacAttribs,theTranslator->trPackageAttribs()));
+ m_sHandler.insert("class/memberdecl/packagestaticattributes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::pacStaticAttribs,theTranslator->trStaticPackageAttribs()));
+ m_sHandler.insert("class/memberdecl/properties",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::properties,theTranslator->trProperties()));
+ m_sHandler.insert("class/memberdecl/events",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::events,theTranslator->trEvents()));
+ m_sHandler.insert("class/memberdecl/privatetypes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::priTypes,theTranslator->trPrivateTypes()));
+ m_sHandler.insert("class/memberdecl/privateslots",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::priSlots,theTranslator->trPrivateSlots()));
+ m_sHandler.insert("class/memberdecl/privatemethods",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::priMethods,theTranslator->trPrivateMembers()));
+ m_sHandler.insert("class/memberdecl/privatestaticmethods",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::priStaticMethods,theTranslator->trStaticPrivateMembers()));
+ m_sHandler.insert("class/memberdecl/privateattributes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::priAttribs,theTranslator->trPrivateAttribs()));
+ m_sHandler.insert("class/memberdecl/privatestaticattributes",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::priStaticAttribs,theTranslator->trStaticPrivateAttribs()));
+ m_sHandler.insert("class/memberdecl/friends",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::friends,theTranslator->trFriends()));
+ m_sHandler.insert("class/memberdecl/related",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::related,theTranslator->trRelatedFunctions(),
+ theTranslator->trRelatedSubscript()));
+ m_eHandler.insert("class/memberdecl",
+ new EndElementHandler(this,&LayoutParser::endMemberDecl));
+ m_sHandler.insert("class/memberdef",
+ new StartElementHandler(this,&LayoutParser::startMemberDef));
+ m_sHandler.insert("class/memberdef/typedefs",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::typedefMembers,theTranslator->trMemberTypedefDocumentation()));
+ m_sHandler.insert("class/memberdef/enums",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::enumMembers,theTranslator->trMemberEnumerationDocumentation()));
+ m_sHandler.insert("class/memberdef/constructors",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::constructors,theTranslator->trConstructorDocumentation()));
+ m_sHandler.insert("class/memberdef/functions",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::functionMembers,
+ fortranOpt ?
+ theTranslator->trMemberFunctionDocumentationFortran() :
+ theTranslator->trMemberFunctionDocumentation()));
+ m_sHandler.insert("class/memberdef/related",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::relatedMembers,theTranslator->trRelatedFunctionDocumentation()));
+ m_sHandler.insert("class/memberdef/variables",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::variableMembers,theTranslator->trMemberDataDocumentation()));
+ m_sHandler.insert("class/memberdef/properties",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::propertyMembers,theTranslator->trPropertyDocumentation()));
+ m_sHandler.insert("class/memberdef/events",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::eventMembers,theTranslator->trEventDocumentation()));
+ m_eHandler.insert("class/memberdef",
+ new EndElementHandler(this,&LayoutParser::endMemberDef));
+ m_eHandler.insert("class",
+ new EndElementHandler(this,&LayoutParser::endClass));
+
+
+ // namespace layout handlers
+ m_sHandler.insert("namespace",
+ new StartElementHandler(this,&LayoutParser::startNamespace));
+ m_sHandler.insert("namespace/briefdescription",
+ new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("namespace/detaileddescription",
+ new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
+ theTranslator->trDetailedDescription()));
+ m_sHandler.insert("namespace/authorsection",
+ new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("namespace/memberdecl",
+ new StartElementHandler(this,&LayoutParser::startMemberDecl));
+ m_sHandler.insert("namespace/memberdecl/nestednamespaces",
+ new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedNamespaces,&LayoutParser::startSectionEntry,
+ javaOpt ? theTranslator->trPackages() :
+ fortranOpt ? theTranslator->trModules() :
+ theTranslator->trNamespaces()
+ ));
+ m_sHandler.insert("namespace/memberdecl/classes",
+ new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry,
+ vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) :
+ fortranOpt ? theTranslator->trDataTypes() :
+ theTranslator->trCompounds()
+ ));
+ m_sHandler.insert("namespace/memberdecl/membergroups",
+ new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("namespace/memberdecl/typedefs",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decTypedefMembers,theTranslator->trTypedefs()));
+ m_sHandler.insert("namespace/memberdecl/enums",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decEnumMembers,theTranslator->trEnumerations()));
+ m_sHandler.insert("namespace/memberdecl/functions",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decFuncMembers,
+ fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ theTranslator->trFunctions()));
+ m_sHandler.insert("namespace/memberdecl/variables",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decVarMembers,theTranslator->trVariables()));
+ m_eHandler.insert("namespace/memberdecl",
+ new EndElementHandler(this,&LayoutParser::endMemberDecl));
+ m_sHandler.insert("namespace/memberdef",
+ new StartElementHandler(this,&LayoutParser::startMemberDef));
+ m_sHandler.insert("namespace/memberdef/typedefs",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()));
+ m_sHandler.insert("namespace/memberdef/enums",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()));
+ m_sHandler.insert("namespace/memberdef/functions",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docFuncMembers,
+ fortranOpt ?
+ theTranslator->trSubprogramDocumentation() :
+ theTranslator->trFunctionDocumentation()));
+ m_sHandler.insert("namespace/memberdef/variables",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docVarMembers,theTranslator->trVariableDocumentation()));
+ m_eHandler.insert("namespace/memberdef",
+ new EndElementHandler(this,&LayoutParser::endMemberDef));
+ m_eHandler.insert("namespace",
+ new EndElementHandler(this,&LayoutParser::endNamespace));
+
+ // file layout handlers
+ m_sHandler.insert("file",
+ new StartElementHandler(this,&LayoutParser::startFile));
+ m_sHandler.insert("file/briefdescription",
+ new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("file/detaileddescription",
+ new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
+ theTranslator->trDetailedDescription()));
+ m_sHandler.insert("file/authorsection",
+ new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("file/includes",
+ new StartElementHandlerKind(this,LayoutDocEntry::FileIncludes,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("file/includegraph",
+ new StartElementHandlerKind(this,LayoutDocEntry::FileIncludeGraph,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("file/includedbygraph",
+ new StartElementHandlerKind(this,LayoutDocEntry::FileIncludedByGraph,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("file/sourcelink",
+ new StartElementHandlerKind(this,LayoutDocEntry::FileSourceLink,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("file/memberdecl",
+ new StartElementHandler(this,&LayoutParser::startMemberDecl));
+ m_sHandler.insert("file/memberdecl/classes",
+ new StartElementHandlerSection(this,LayoutDocEntry::FileClasses,&LayoutParser::startSectionEntry,
+ vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) :
+ fortranOpt ? theTranslator->trDataTypes() :
+ theTranslator->trCompounds()
+ ));
+ m_sHandler.insert("file/memberdecl/namespaces",
+ new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry,
+ javaOpt ? theTranslator->trPackages() :
+ fortranOpt ? theTranslator->trModules() :
+ theTranslator->trNamespaces()
+ ));
+ m_sHandler.insert("file/memberdecl/defines",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decDefineMembers,theTranslator->trDefines()));
+ m_sHandler.insert("file/memberdecl/typedefs",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decTypedefMembers,theTranslator->trTypedefs()));
+ m_sHandler.insert("file/memberdecl/enums",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decEnumMembers,theTranslator->trEnumerations()));
+ m_sHandler.insert("file/memberdecl/functions",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decFuncMembers,
+ fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ theTranslator->trFunctions())) ;
+ m_sHandler.insert("file/memberdecl/variables",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decVarMembers,theTranslator->trVariables()));
+
+ m_eHandler.insert("file/memberdecl",
+ new EndElementHandler(this,&LayoutParser::endMemberDecl));
+ m_sHandler.insert("file/memberdef",
+ new StartElementHandler(this,&LayoutParser::startMemberDef));
+ m_sHandler.insert("file/memberdef/defines",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docDefineMembers,theTranslator->trDefineDocumentation()));
+ m_sHandler.insert("file/memberdef/typedefs",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()));
+ m_sHandler.insert("file/memberdef/enums",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()));
+ m_sHandler.insert("file/memberdef/functions",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docFuncMembers,theTranslator->trFunctionDocumentation()));
+ m_sHandler.insert("file/memberdef/variables",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docVarMembers,theTranslator->trVariableDocumentation()));
+ m_eHandler.insert("file/memberdef",
+ new EndElementHandler(this,&LayoutParser::endMemberDef));
+ m_eHandler.insert("file",
+ new EndElementHandler(this,&LayoutParser::endFile));
+
+ // group layout handlers
+ m_sHandler.insert("group",
+ new StartElementHandler(this,&LayoutParser::startGroup));
+ m_sHandler.insert("group/briefdescription",
+ new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("group/detaileddescription",
+ new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
+ theTranslator->trDetailedDescription()));
+ m_sHandler.insert("group/authorsection",
+ new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("group/groupgraph",
+ new StartElementHandlerKind(this,LayoutDocEntry::GroupGraph,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("group/memberdecl",
+ new StartElementHandler(this,&LayoutParser::startMemberDecl));
+ m_sHandler.insert("group/memberdecl/classes",
+ new StartElementHandlerSection(this,LayoutDocEntry::GroupClasses,&LayoutParser::startSectionEntry,
+ vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) :
+ fortranOpt ? theTranslator->trDataTypes() :
+ theTranslator->trCompounds()
+ ));
+ m_sHandler.insert("group/memberdecl/namespaces",
+ new StartElementHandlerSection(this,LayoutDocEntry::GroupNamespaces,&LayoutParser::startSectionEntry,
+ javaOpt ? theTranslator->trPackages() :
+ fortranOpt ? theTranslator->trModules() :
+ theTranslator->trNamespaces()
+ ));
+ m_sHandler.insert("group/memberdecl/dirs",
+ new StartElementHandlerSection(this,LayoutDocEntry::GroupDirs,&LayoutParser::startSectionEntry,
+ theTranslator->trDirectories()
+ ));
+ m_sHandler.insert("group/memberdecl/nestedgroups",
+ new StartElementHandlerSection(this,LayoutDocEntry::GroupNestedGroups,&LayoutParser::startSectionEntry,
+ theTranslator->trModules()
+ ));
+ m_sHandler.insert("group/memberdecl/files",
+ new StartElementHandlerSection(this,LayoutDocEntry::GroupFiles,&LayoutParser::startSectionEntry,
+ theTranslator->trFile(TRUE,FALSE)
+ ));
+
+ m_sHandler.insert("group/memberdecl/defines",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decDefineMembers,theTranslator->trDefines()));
+ m_sHandler.insert("group/memberdecl/typedefs",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decTypedefMembers,theTranslator->trTypedefs()));
+ m_sHandler.insert("group/memberdecl/enums",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decEnumMembers,theTranslator->trEnumerations()));
+ m_sHandler.insert("group/memberdecl/enumvalues",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decEnumValMembers,theTranslator->trEnumerationValues()));
+ m_sHandler.insert("group/memberdecl/functions",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decFuncMembers,
+ fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ theTranslator->trFunctions()));
+ m_sHandler.insert("group/memberdecl/variables",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decVarMembers,theTranslator->trVariables()));
+ m_sHandler.insert("group/memberdecl/signals",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decSignalMembers,theTranslator->trSignals()));
+ m_sHandler.insert("group/memberdecl/publicslots",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decPubSlotMembers,theTranslator->trPublicSlots()));
+ m_sHandler.insert("group/memberdecl/protectedslots",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decProSlotMembers,theTranslator->trProtectedSlots()));
+ m_sHandler.insert("group/memberdecl/privateslots",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decPriSlotMembers,theTranslator->trPrivateSlots()));
+ m_sHandler.insert("group/memberdecl/events",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decEventMembers,theTranslator->trEvents()));
+ m_sHandler.insert("group/memberdecl/properties",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decPropMembers,theTranslator->trProperties()));
+ m_sHandler.insert("group/memberdecl/friends",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
+ MemberList::decFriendMembers,theTranslator->trFriends()));
+ m_eHandler.insert("group/memberdecl",
+ new EndElementHandler(this,&LayoutParser::endMemberDecl));
+ m_sHandler.insert("group/memberdef",
+ new StartElementHandler(this,&LayoutParser::startMemberDef));
+ m_sHandler.insert("group/memberdef/pagedocs",
+ new StartElementHandlerKind(this,LayoutDocEntry::GroupPageDocs,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("group/memberdef/defines",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docDefineMembers,theTranslator->trDefineDocumentation()));
+ m_sHandler.insert("group/memberdef/typedefs",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()));
+ m_sHandler.insert("group/memberdef/enums",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()));
+ m_sHandler.insert("group/memberdef/enumvalues",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docEnumValMembers,theTranslator->trEnumerationValueDocumentation()));
+ m_sHandler.insert("group/memberdef/functions",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docFuncMembers,
+ fortranOpt?
+ theTranslator->trSubprogramDocumentation():
+ theTranslator->trFunctionDocumentation()));
+ m_sHandler.insert("group/memberdef/variables",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docVarMembers,theTranslator->trVariableDocumentation()));
+ m_sHandler.insert("group/memberdef/signals",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docSignalMembers,theTranslator->trSignals()));
+ m_sHandler.insert("group/memberdef/publicslots",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docPubSlotMembers,theTranslator->trPublicSlots()));
+ m_sHandler.insert("group/memberdef/protectedslots",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docProSlotMembers,theTranslator->trProtectedSlots()));
+ m_sHandler.insert("group/memberdef/privateslots",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docPriSlotMembers,theTranslator->trPrivateSlots()));
+ m_sHandler.insert("group/memberdef/events",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docEventMembers,theTranslator->trEvents()));
+ m_sHandler.insert("group/memberdef/properties",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docPropMembers,theTranslator->trProperties()));
+ m_sHandler.insert("group/memberdef/friends",
+ new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
+ MemberList::docFriendMembers,theTranslator->trFriends()));
+ m_eHandler.insert("group/memberdef",
+ new EndElementHandler(this,&LayoutParser::endMemberDef));
+ m_eHandler.insert("group",
+ new EndElementHandler(this,&LayoutParser::endGroup));
+
+ // directory layout handlers
+ m_sHandler.insert("directory",
+ new StartElementHandler(this,&LayoutParser::startDirectory));
+ m_sHandler.insert("directory/briefdescription",
+ new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("directory/detaileddescription",
+ new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
+ theTranslator->trDetailedDescription()));
+ m_sHandler.insert("directory/directorygraph",
+ new StartElementHandlerKind(this,LayoutDocEntry::DirGraph,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("directory/memberdecl",
+ new StartElementHandler(this,&LayoutParser::startMemberDecl));
+ m_sHandler.insert("directory/memberdecl/dirs",
+ new StartElementHandlerKind(this,LayoutDocEntry::DirSubDirs,&LayoutParser::startSimpleEntry));
+ m_sHandler.insert("directory/memberdecl/files",
+ new StartElementHandlerKind(this,LayoutDocEntry::DirFiles,&LayoutParser::startSimpleEntry));
+ m_eHandler.insert("directory/memberdecl",
+ new EndElementHandler(this,&LayoutParser::endMemberDecl));
+ m_eHandler.insert("directory",
+ new EndElementHandler(this,&LayoutParser::endDirectory));
+ }
+
+ void startSimpleEntry(LayoutDocEntry::Kind k,const QXmlAttributes &attrib)
+ {
+ QCString visible = convertToQCString(attrib.value("visible"));
+ bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0");
+ if (m_part!=-1 && isVisible)
+ {
+ LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
+ new LayoutDocEntrySimple(k));
+ }
+ }
+
+ void startSectionEntry(LayoutDocEntry::Kind k,const QXmlAttributes &attrib,
+ const QCString &title)
+ {
+ QCString visible = convertToQCString(attrib.value("visible"));
+ bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0");
+ QCString userTitle = convertToQCString(attrib.value("title"));
+ //printf("startSectionEntry: title='%s' userTitle='%s'\n",
+ // title.data(),userTitle.data());
+ if (userTitle.isEmpty()) userTitle = title;
+ if (m_part!=-1 && isVisible)
+ {
+ LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
+ new LayoutDocEntrySection(k,userTitle));
+ }
+ }
+
+
+ void startMemberDeclEntry(const QXmlAttributes &attrib,MemberList::ListType type,
+ const QCString &title,const QCString &subscript)
+ {
+ //QCString visible = convertToQCString(attrib.value("visible"));
+ //bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0");
+ QCString userTitle = convertToQCString(attrib.value("title"));
+ QCString userSubscript = convertToQCString(attrib.value("subtitle"));
+ if (userTitle.isEmpty()) userTitle = title;
+ if (userSubscript.isEmpty()) userSubscript = subscript;
+ //printf("memberdecl: %s\n",userTitle.data());
+ if (m_part!=-1 /*&& isVisible*/)
+ {
+ LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
+ new LayoutDocEntryMemberDecl(type,userTitle,userSubscript));
+ }
+ }
+
+ void startMemberDefEntry(const QXmlAttributes &attrib,MemberList::ListType type,
+ const QCString &title,const QCString &)
+ {
+ //QCString visible = convertToQCString(attrib.value("visible"));
+ //bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0");
+ QCString userTitle = convertToQCString(attrib.value("title"));
+ if (userTitle.isEmpty()) userTitle = title;
+ //printf("memberdef: %s\n",userTitle.data());
+ if (m_part!=-1 /*&& isVisible*/)
+ {
+ LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
+ new LayoutDocEntryMemberDef(type,userTitle));
+ }
+ }
+
+ void startLayout(const QXmlAttributes &)
+ {
+ }
+
+ void endLayout()
+ {
+ }
+
+ void startNavIndex(const QXmlAttributes &)
+ {
+ m_scope="navindex/";
+ m_rootNav = LayoutDocManager::instance().rootNavEntry();
+ m_rootNav->clear();
+ }
+
+ void endNavIndex()
+ {
+ m_scope="";
+ if (!m_rootNav->find(LayoutNavEntry::MainPage))
+ {
+ // no MainPage node... add one the first item of the root node...
+ new LayoutNavEntry(m_rootNav,LayoutNavEntry::MainPage, TRUE, usingTreeIndex() ? "main" : "index",theTranslator->trMainPage(),TRUE);
+ }
+ }
+
+ void startNavEntry(const QXmlAttributes &attrib)
+ {
+ bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
+ bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static struct NavEntryMap
+ {
+ const char *typeStr; // type attribute name in the XML file
+ LayoutNavEntry::Kind kind; // corresponding enum name
+ QCString mainName; // default title for an item if it has children
+ QCString subName; // optional name for an item if it is rendered as a child
+ QCString baseFile; // base name of the file containing the index page
+ } mapping[] =
+ {
+ { "mainpage", LayoutNavEntry::MainPage, theTranslator->trMainPage(), QCString(), usingTreeIndex() ? "main" : "index" },
+ { "pages", LayoutNavEntry::Pages, theTranslator->trRelatedPages(), QCString(), "pages" },
+ { "modules", LayoutNavEntry::Modules, theTranslator->trModules(), QCString(), "modules" },
+ { "namespaces", LayoutNavEntry::Namespaces, javaOpt ? theTranslator->trPackages() :
+ fortranOpt ? theTranslator->trModules() :
+ theTranslator->trNamespaces(),
+ javaOpt ? theTranslator->trPackages() :
+ fortranOpt ? theTranslator->trModulesList() :
+ theTranslator->trNamespaceList(), "namespaces" },
+ { "namespacemembers", LayoutNavEntry::NamespaceMembers, javaOpt ? theTranslator->trPackageMembers() :
+ fortranOpt ? theTranslator->trModulesMembers() :
+ theTranslator->trNamespaceMembers(), QCString(), "namespacemembers" },
+ { "classindex", LayoutNavEntry::Classes, fortranOpt ? theTranslator->trDataTypes() :
+ vhdlOpt ? VhdlDocGen::trDesignUnits() :
+ theTranslator->trCompoundIndex(),
+ QCString(), "classes" },
+ { "classes", LayoutNavEntry::ClassAnnotated, fortranOpt ? theTranslator->trCompoundListFortran() :
+ vhdlOpt ? VhdlDocGen::trDesignUnitList() :
+ theTranslator->trClasses(),
+ theTranslator->trCompoundList(), "annotated" },
+ { "hierarchy", LayoutNavEntry::ClassHierarchy, vhdlOpt ? VhdlDocGen::trDesignUnitHierarchy() :
+ theTranslator->trClassHierarchy(), QCString(), "hierarchy" },
+ { "classmembers", LayoutNavEntry::ClassMembers, fortranOpt ? theTranslator->trCompoundMembersFortran() :
+ vhdlOpt ? VhdlDocGen::trDesignUnitMembers() :
+ theTranslator->trCompoundMembers(), QCString(), "functions" },
+ { "files", LayoutNavEntry::Files, theTranslator->trFile(TRUE,FALSE),
+ theTranslator->trFileList(), "files" },
+ { "globals", LayoutNavEntry::FileGlobals, theTranslator->trFileMembers(), QCString(), "globals" },
+ { "dirs", LayoutNavEntry::Dirs, theTranslator->trDirectories(), QCString(), "dirs" },
+ { "examples", LayoutNavEntry::Examples, theTranslator->trExamples(), QCString(), "examples" },
+ { 0, (LayoutNavEntry::Kind)0, QCString(), QCString(), QCString() }
+ };
+ LayoutNavEntry::Kind kind;
+ // find type in the table
+ int i=0;
+ QString type = attrib.value("type");
+ while (mapping[i].typeStr)
+ {
+ if (mapping[i].typeStr==type)
+ {
+ kind = mapping[i].kind;
+ break;
+ }
+ i++;
+ }
+ if (mapping[i].typeStr==0)
+ {
+ if (type.isEmpty())
+ {
+ err("Warning: an entry tag within a navindex has no type attribute! Check your layout file!\n");
+ }
+ else
+ {
+ err("Warning: the type '%s' is not supported for the entry tag within a navindex! Check your layout file!\n");
+ }
+ return;
+ }
+ QCString baseFile = mapping[i].baseFile;
+ QCString title = convertToQCString(attrib.value("title"));
+ QCString visible = convertToQCString(attrib.value("visible"));
+ bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0");
+ if (title.isEmpty()) // use default title
+ {
+ title = mapping[i].mainName; // use title for main row
+ if (m_rootNav!=LayoutDocManager::instance().rootNavEntry() && !mapping[i].subName.isEmpty())
+ {
+ title = mapping[i].subName; // if this is a child of another row, use the subName if available
+ // this is mainly done to get compatible naming with older versions.
+ }
+ }
+ // create new item and make it the new root
+ m_rootNav = new LayoutNavEntry(m_rootNav,kind,kind==LayoutNavEntry::MainPage?TRUE:isVisible,baseFile,title);
+ }
+
+ void endNavEntry()
+ {
+ // set the root back to the parent
+ m_rootNav = m_rootNav->parent();
+ }
+
+ void startClass(const QXmlAttributes &)
+ {
+ LayoutDocManager::instance().clear(LayoutDocManager::Class);
+ m_scope="class/";
+ m_part = (int)LayoutDocManager::Class;
+ }
+
+ void endClass()
+ {
+ m_scope="";
+ m_part = -1;
+ }
+
+ void startNamespace(const QXmlAttributes &)
+ {
+ LayoutDocManager::instance().clear(LayoutDocManager::Namespace);
+ m_scope="namespace/";
+ m_part = (int)LayoutDocManager::Namespace;
+ }
+
+ void endNamespace()
+ {
+ m_scope="";
+ m_part = -1;
+ }
+
+ void startFile(const QXmlAttributes &)
+ {
+ LayoutDocManager::instance().clear(LayoutDocManager::File);
+ m_scope="file/";
+ m_part = (int)LayoutDocManager::File;
+ }
+
+ void endFile()
+ {
+ m_scope="";
+ m_part = -1;
+ }
+
+ void startGroup(const QXmlAttributes &)
+ {
+ LayoutDocManager::instance().clear(LayoutDocManager::Group);
+ m_scope="group/";
+ m_part = (int)LayoutDocManager::Group;
+ }
+
+ void endGroup()
+ {
+ m_scope="";
+ m_part = -1;
+ }
+
+ void startDirectory(const QXmlAttributes &)
+ {
+ LayoutDocManager::instance().clear(LayoutDocManager::Directory);
+ m_scope="directory/";
+ m_part = (int)LayoutDocManager::Directory;
+ }
+
+ void endDirectory()
+ {
+ m_scope="";
+ m_part = -1;
+ }
+
+ void startMemberDef(const QXmlAttributes &)
+ {
+ m_scope+="memberdef/";
+ if (m_part!=-1)
+ {
+ LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
+ new LayoutDocEntrySimple(LayoutDocEntry::MemberDefStart));
+ }
+ }
+
+ void endMemberDef()
+ {
+ int i=m_scope.findRev("memberdef/");
+ if (i!=-1)
+ {
+ m_scope=m_scope.left(i);
+ if (m_part!=-1)
+ {
+ LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
+ new LayoutDocEntrySimple(LayoutDocEntry::MemberDefEnd));
+ }
+ }
+ }
+
+ void startMemberDecl(const QXmlAttributes &)
+ {
+ m_scope+="memberdecl/";
+ if (m_part!=-1)
+ {
+ LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
+ new LayoutDocEntrySimple(LayoutDocEntry::MemberDeclStart));
+ }
+ }
+
+ void endMemberDecl()
+ {
+ int i=m_scope.findRev("memberdecl/");
+ if (i!=-1)
+ {
+ m_scope=m_scope.left(i);
+ if (m_part!=-1)
+ {
+ LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
+ new LayoutDocEntrySimple(LayoutDocEntry::MemberDeclEnd));
+ }
+ }
+ }
+
+ // reimplemented from QXmlDefaultHandler
+ bool startElement( const QString&, const QString&,
+ const QString& name, const QXmlAttributes& attrib )
+ {
+ //printf("startElement [%s]::[%s]\n",m_scope.data(),name.data());
+ StartElementHandler *handler = m_sHandler[m_scope+name];
+ if (handler)
+ {
+ (*handler)(attrib);
+ }
+ else
+ {
+ err("Warning: Unexpected start tag `%s' found in scope='%s'!\n",
+ name.data(),m_scope.data());
+ }
+ return TRUE;
+ }
+ bool endElement( const QString&, const QString&, const QString& name )
+ {
+ //printf("endElement [%s]::[%s]\n",m_scope.data(),name.data());
+ EndElementHandler *handler;
+ if (!m_scope.isEmpty() && m_scope.right(name.length()+1)==name+"/")
+ { // element ends current scope
+ handler = m_eHandler[m_scope.left(m_scope.length()-1)];
+ }
+ else // continue with current scope
+ {
+ handler = m_eHandler[m_scope+name];
+ }
+ if (handler)
+ {
+ (*handler)();
+ }
+ return TRUE;
+ }
+ bool startDocument()
+ {
+ return TRUE;
+ }
+
+ private:
+ LayoutParser() : m_sHandler(163), m_eHandler(17) { }
+
+ QDict<StartElementHandler> m_sHandler;
+ QDict<EndElementHandler> m_eHandler;
+ QString m_scope;
+ int m_part;
+ LayoutNavEntry *m_rootNav;
+};
+
+//---------------------------------------------------------------------------------
+
+class LayoutErrorHandler : public QXmlErrorHandler
+{
+ public:
+ bool warning( const QXmlParseException &exception )
+ {
+ err("Warning at line %d column %d: %s\n",
+ exception.lineNumber(),exception.columnNumber(),
+ exception.message().data());
+ return FALSE;
+ }
+ bool error( const QXmlParseException &exception )
+ {
+ err("Error at line %d column %d: %s\n",
+ exception.lineNumber(),exception.columnNumber(),
+ exception.message().data());
+ return FALSE;
+ }
+ bool fatalError( const QXmlParseException &exception )
+ {
+ err("Fatal error at line %d column %d: %s\n",
+ exception.lineNumber(),exception.columnNumber(),
+ exception.message().data());
+ return FALSE;
+ }
+ QString errorString() { return ""; }
+
+ private:
+ QString errorMsg;
+};
+
+//---------------------------------------------------------------------------------
+
+class LayoutDocManager::Private
+{
+ public:
+ QList<LayoutDocEntry> docEntries[LayoutDocManager::NrParts];
+ LayoutNavEntry *rootNav;
+};
+
+LayoutDocManager::LayoutDocManager()
+{
+ d = new Private;
+ int i;
+ for (i=0;i<LayoutDocManager::NrParts;i++)
+ {
+ d->docEntries[i].setAutoDelete(TRUE);
+ }
+ d->rootNav = new LayoutNavEntry;
+ LayoutParser::instance().init();
+}
+
+
+void LayoutDocManager::init()
+{
+ // parse the default layout
+ LayoutErrorHandler errorHandler;
+ QXmlInputSource source;
+ source.setData( layout_default );
+ QXmlSimpleReader reader;
+ reader.setContentHandler( &LayoutParser::instance() );
+ reader.setErrorHandler( &errorHandler );
+ reader.parse( source );
+}
+
+LayoutDocManager::~LayoutDocManager()
+{
+ delete d->rootNav;
+ delete d;
+}
+
+LayoutDocManager & LayoutDocManager::instance()
+{
+ static LayoutDocManager *theInstance = new LayoutDocManager;
+ return *theInstance;
+}
+
+const QList<LayoutDocEntry> &LayoutDocManager::docEntries(LayoutDocManager::LayoutPart part) const
+{
+ return d->docEntries[(int)part];
+}
+
+LayoutNavEntry* LayoutDocManager::rootNavEntry() const
+{
+ return d->rootNav;
+}
+
+void LayoutDocManager::addEntry(LayoutDocManager::LayoutPart p,LayoutDocEntry *e)
+{
+ d->docEntries[(int)p].append(e);
+}
+
+void LayoutDocManager::clear(LayoutDocManager::LayoutPart p)
+{
+ d->docEntries[(int)p].clear();
+}
+
+void LayoutDocManager::parse(QTextStream &t)
+{
+ LayoutErrorHandler errorHandler;
+ QXmlInputSource source( t );
+ QXmlSimpleReader reader;
+ reader.setContentHandler( &LayoutParser::instance() );
+ reader.setErrorHandler( &errorHandler );
+ reader.parse( source );
+}
+
+//---------------------------------------------------------------------------------
+
+void writeDefaultLayoutFile(const char *fileName)
+{
+ QFile f(fileName);
+ if (!f.open(IO_WriteOnly))
+ {
+ err("Failed to open file %s for writing!\n",fileName);
+ return;
+ }
+ QTextStream t(&f);
+ t << layout_default;
+}
diff --git a/src/layout.h b/src/layout.h
new file mode 100644
index 0000000..f1228d1
--- /dev/null
+++ b/src/layout.h
@@ -0,0 +1,187 @@
+/******************************************************************************
+ *
+ *
+ *
+ *
+ * Copyright (C) 1997-2008 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#ifndef LAYOUT_H
+#define LAYOUT_H
+
+#include "qtbc.h"
+#include "memberlist.h"
+#include <qlist.h>
+
+class LayoutParser;
+
+/** @brief Base class representing a piece of a documentation page */
+struct LayoutDocEntry
+{
+ virtual ~LayoutDocEntry() {}
+ enum Kind {
+ // Generic items for all pages
+ MemberGroups,
+ MemberDeclStart, MemberDeclEnd, MemberDecl,
+ MemberDefStart, MemberDefEnd, MemberDef,
+ BriefDesc, DetailedDesc,
+ AuthorSection,
+
+ // Class specific items
+ ClassIncludes,
+ ClassInheritanceGraph, ClassNestedClasses,
+ ClassCollaborationGraph, ClassAllMembersLink,
+ ClassUsedFiles,
+
+ // Namespace specific items
+ NamespaceNestedNamespaces, NamespaceClasses,
+
+ // File specific items
+ FileClasses, FileNamespaces,
+ FileIncludes, FileIncludeGraph,
+ FileIncludedByGraph, FileSourceLink,
+
+ // Group specific items
+ GroupClasses, GroupNamespaces,
+ GroupDirs, GroupNestedGroups, GroupFiles,
+ GroupGraph, GroupPageDocs,
+
+ // Directory specific items
+ DirSubDirs, DirFiles, DirGraph
+
+ };
+ virtual Kind kind() const = 0;
+};
+
+/** @brief Represents of a piece of a documentation page without configurable parts */
+struct LayoutDocEntrySimple : LayoutDocEntry
+{
+ public:
+ LayoutDocEntrySimple(Kind k) : m_kind(k) {}
+ Kind kind() const { return m_kind; }
+ private:
+ Kind m_kind;
+};
+
+struct LayoutDocEntrySection: public LayoutDocEntrySimple
+{
+ LayoutDocEntrySection(Kind k,const QCString &tl) :
+ LayoutDocEntrySimple(k), title(tl) {}
+ QCString title;
+};
+
+/** @brief Represents of a member declaration list with configurable title and subtitle. */
+struct LayoutDocEntryMemberDecl: public LayoutDocEntry
+{
+ LayoutDocEntryMemberDecl(MemberList::ListType tp,
+ const QCString &tl,const QCString &ss)
+ : type(tp), title(tl),subscript(ss) {}
+
+ Kind kind() const { return MemberDecl; }
+ MemberList::ListType type;
+ QCString title;
+ QCString subscript;
+};
+
+/** @brief Represents of a member definition list with configurable title. */
+struct LayoutDocEntryMemberDef: public LayoutDocEntry
+{
+ LayoutDocEntryMemberDef(MemberList::ListType tp,const QCString &tl)
+ : type(tp), title(tl) {}
+
+ Kind kind() const { return MemberDef; }
+ MemberList::ListType type;
+ QCString title;
+};
+
+/** @brief Base class for the layout of a navigation item at the top of the HTML pages. */
+struct LayoutNavEntry
+{
+ public:
+ enum Kind {
+ MainPage,
+ Pages,
+ Modules,
+ Namespaces,
+ NamespaceMembers,
+ Classes,
+ ClassAnnotated,
+ ClassHierarchy,
+ ClassMembers,
+ Files,
+ FileGlobals,
+ Dirs,
+ Examples
+ };
+ LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QString &bf, const QString &tl,bool prepend=FALSE)
+ : m_parent(parent), m_kind(k), m_visible(vs), m_baseFile(bf), m_title(tl)
+ { m_children.setAutoDelete(TRUE);
+ if (parent) { if (prepend) parent->prependChild(this); else parent->addChild(this); }
+ }
+ LayoutNavEntry *parent() const { return m_parent; }
+ Kind kind() const { return m_kind; }
+ QCString baseFile() const { return m_baseFile; }
+ QCString title() const { return m_title; }
+ bool visible() { return m_visible; }
+ void clear() { m_children.clear(); }
+ void addChild(LayoutNavEntry *e) { m_children.append(e); }
+ void prependChild(LayoutNavEntry *e) { m_children.prepend(e); }
+ const QList<LayoutNavEntry> &children() const { return m_children; }
+ LayoutNavEntry *find(LayoutNavEntry::Kind k) const;
+
+ private:
+ LayoutNavEntry() : m_parent(0) {}
+ LayoutNavEntry *m_parent;
+ Kind m_kind;
+ bool m_visible;
+ QCString m_baseFile;
+ QCString m_title;
+ QList<LayoutNavEntry> m_children;
+ friend class LayoutDocManager;
+};
+
+/** @brief Singleton providing access to the (user configurable) layout of the documentation */
+class LayoutDocManager
+{
+ class Private;
+ public:
+ enum LayoutPart
+ {
+ Class, Namespace, File, Group, Directory,
+ NrParts
+ };
+ /** Returns a reference to this singleton. */
+ static LayoutDocManager &instance();
+
+ /** Returns the list of LayoutDocEntry's in representation order for a given page identified by @a part. */
+ const QList<LayoutDocEntry> &docEntries(LayoutPart part) const;
+
+ /** returns the (invisible) root of the navigation tree. */
+ LayoutNavEntry *rootNavEntry() const;
+
+ /** Parses a user provided layout */
+ void parse(QTextStream &t);
+ void init();
+ private:
+ void addEntry(LayoutPart p,LayoutDocEntry*e);
+ void clear(LayoutPart p);
+ LayoutDocManager();
+ ~LayoutDocManager();
+ Private *d;
+ friend class LayoutParser;
+};
+
+void writeDefaultLayoutFile(const char *fileName);
+
+#endif
+
diff --git a/src/layout_default.h b/src/layout_default.h
new file mode 100644
index 0000000..1067d12
--- /dev/null
+++ b/src/layout_default.h
@@ -0,0 +1,182 @@
+"<doxygenlayout version=\"1.0\">\n"
+" <!-- Navigation index tabs for HTML output -->\n"
+" <navindex>\n"
+" <tab type=\"mainpage\" visible=\"yes\" title=\"\"/>\n"
+" <tab type=\"pages\" visible=\"yes\" title=\"\"/>\n"
+" <tab type=\"modules\" visible=\"yes\" title=\"\"/>\n"
+" <tab type=\"namespaces\" visible=\"yes\" title=\"\">\n"
+" <tab type=\"namespaces\" visible=\"yes\" title=\"\"/>\n"
+" <tab type=\"namespacemembers\" visible=\"yes\" title=\"\"/>\n"
+" </tab>\n"
+" <tab type=\"classes\" visible=\"yes\" title=\"\">\n"
+" <tab type=\"classes\" visible=\"yes\" title=\"\"/>\n"
+" <tab type=\"classindex\" visible=\"no\" title=\"\"/> \n"
+" <tab type=\"hierarchy\" visible=\"yes\" title=\"\"/>\n"
+" <tab type=\"classmembers\" visible=\"yes\" title=\"\"/>\n"
+" </tab>\n"
+" <tab type=\"files\" visible=\"yes\" title=\"\">\n"
+" <tab type=\"files\" visible=\"yes\" title=\"\"/>\n"
+" <tab type=\"globals\" visible=\"yes\" title=\"\"/>\n"
+" </tab>\n"
+" <tab type=\"dirs\" visible=\"yes\" title=\"\"/>\n"
+" <tab type=\"examples\" visible=\"yes\" title=\"\"/> \n"
+" </navindex>\n"
+"\n"
+" <!-- Layout definition for a class page -->\n"
+" <class>\n"
+" <briefdescription visible=\"yes\"/>\n"
+" <includes visible=\"yes\"/>\n"
+" <inheritancegraph visible=\"yes\"/>\n"
+" <collaborationgraph visible=\"yes\"/>\n"
+" <allmemberslink visible=\"yes\"/>\n"
+" <memberdecl>\n"
+" <membergroups visible=\"yes\"/>\n"
+" <nestedclasses visible=\"yes\" title=\"\"/>\n"
+" <publictypes title=\"\"/>\n"
+" <publicslots title=\"\"/>\n"
+" <signals title=\"\"/>\n"
+" <publicmethods title=\"\"/>\n"
+" <publicstaticmethods title=\"\"/>\n"
+" <publicattributes title=\"\"/>\n"
+" <publicstaticattributes title=\"\"/>\n"
+" <protectedtypes title=\"\"/>\n"
+" <protectedslots title=\"\"/>\n"
+" <protectedmethods title=\"\"/>\n"
+" <protectedstaticmethods title=\"\"/>\n"
+" <protectedattributes title=\"\"/>\n"
+" <protectedstaticattributes title=\"\"/>\n"
+" <packagetypes title=\"\"/>\n"
+" <packagemethods title=\"\"/>\n"
+" <packagestaticmethods title=\"\"/>\n"
+" <packageattributes title=\"\"/>\n"
+" <packagestaticattributes title=\"\"/>\n"
+" <properties title=\"\"/>\n"
+" <events title=\"\"/>\n"
+" <privatetypes title=\"\"/>\n"
+" <privateslots title=\"\"/>\n"
+" <privatemethods title=\"\"/>\n"
+" <privatestaticmethods title=\"\"/>\n"
+" <privateattributes title=\"\"/>\n"
+" <privatestaticattributes title=\"\"/>\n"
+" <friends title=\"\"/>\n"
+" <related title=\"\" subtitle=\"\"/>\n"
+" </memberdecl>\n"
+" <detaileddescription title=\"\"/>\n"
+" <memberdef>\n"
+" <typedefs title=\"\"/>\n"
+" <enums title=\"\"/>\n"
+" <constructors title=\"\"/>\n"
+" <functions title=\"\"/>\n"
+" <related title=\"\"/>\n"
+" <variables title=\"\"/>\n"
+" <properties title=\"\"/>\n"
+" <events title=\"\"/>\n"
+" </memberdef>\n"
+" <usedfiles visible=\"yes\"/>\n"
+" <authorsection visible=\"yes\"/>\n"
+" </class>\n"
+"\n"
+" <!-- Layout definition for a namespace page -->\n"
+" <namespace>\n"
+" <briefdescription visible=\"yes\"/>\n"
+" <memberdecl>\n"
+" <nestednamespaces visible=\"yes\" title=\"\"/>\n"
+" <classes visible=\"yes\" title=\"\"/>\n"
+" <membergroups visible=\"yes\"/>\n"
+" <typedefs title=\"\"/>\n"
+" <enums title=\"\"/>\n"
+" <functions title=\"\"/>\n"
+" <variables title=\"\"/>\n"
+" </memberdecl>\n"
+" <detaileddescription title=\"\"/>\n"
+" <memberdef>\n"
+" <typedefs title=\"\"/>\n"
+" <enums title=\"\"/>\n"
+" <functions title=\"\"/>\n"
+" <variables title=\"\"/>\n"
+" </memberdef>\n"
+" <authorsection visible=\"yes\"/>\n"
+" </namespace>\n"
+"\n"
+" <!-- Layout definition for a file page -->\n"
+" <file>\n"
+" <briefdescription visible=\"yes\"/>\n"
+" <includes visible=\"yes\"/>\n"
+" <includegraph visible=\"yes\"/>\n"
+" <includedbygraph visible=\"yes\"/>\n"
+" <sourcelink visible=\"yes\"/>\n"
+" <memberdecl>\n"
+" <classes visible=\"yes\" title=\"\"/>\n"
+" <namespaces visible=\"yes\" title=\"\"/>\n"
+" <defines title=\"\"/>\n"
+" <typedefs title=\"\"/>\n"
+" <enums title=\"\"/>\n"
+" <functions title=\"\"/>\n"
+" <variables title=\"\"/>\n"
+" </memberdecl>\n"
+" <detaileddescription title=\"\"/>\n"
+" <memberdef>\n"
+" <defines title=\"\"/>\n"
+" <typedefs title=\"\"/>\n"
+" <enums title=\"\"/>\n"
+" <functions title=\"\"/>\n"
+" <variables title=\"\"/>\n"
+" </memberdef>\n"
+" <authorsection/>\n"
+" </file>\n"
+"\n"
+" <!-- Layout definition for a group page -->\n"
+" <group>\n"
+" <briefdescription visible=\"yes\"/>\n"
+" <groupgraph visible=\"yes\"/>\n"
+" <memberdecl>\n"
+" <classes visible=\"yes\" title=\"\"/>\n"
+" <namespaces visible=\"yes\" title=\"\"/>\n"
+" <dirs visible=\"yes\" title=\"\"/>\n"
+" <nestedgroups visible=\"yes\" title=\"\"/>\n"
+" <files visible=\"yes\" title=\"\"/>\n"
+" <defines title=\"\"/>\n"
+" <typedefs title=\"\"/>\n"
+" <enums title=\"\"/>\n"
+" <enumvalues title=\"\"/>\n"
+" <functions title=\"\"/>\n"
+" <variables title=\"\"/>\n"
+" <signals title=\"\"/>\n"
+" <publicslots title=\"\"/>\n"
+" <protectedslots title=\"\"/>\n"
+" <privateslots title=\"\"/>\n"
+" <events title=\"\"/>\n"
+" <properties title=\"\"/>\n"
+" <friends title=\"\"/>\n"
+" </memberdecl>\n"
+" <detaileddescription title=\"\"/>\n"
+" <memberdef>\n"
+" <pagedocs/>\n"
+" <defines title=\"\"/>\n"
+" <typedefs title=\"\"/>\n"
+" <enums title=\"\"/>\n"
+" <enumvalues title=\"\"/>\n"
+" <functions title=\"\"/>\n"
+" <variables title=\"\"/>\n"
+" <signals title=\"\"/>\n"
+" <publicslots title=\"\"/>\n"
+" <protectedslots title=\"\"/>\n"
+" <privateslots title=\"\"/>\n"
+" <events title=\"\"/>\n"
+" <properties title=\"\"/>\n"
+" <friends title=\"\"/>\n"
+" </memberdef>\n"
+" <authorsection visible=\"yes\"/>\n"
+" </group>\n"
+"\n"
+" <!-- Layout definition for a directory page -->\n"
+" <directory>\n"
+" <briefdescription visible=\"yes\"/>\n"
+" <directorygraph visible=\"yes\"/>\n"
+" <memberdecl>\n"
+" <dirs visible=\"yes\"/>\n"
+" <files visible=\"yes\"/>\n"
+" </memberdecl>\n"
+" <detaileddescription title=\"\"/>\n"
+" </directory>\n"
+"</doxygenlayout>\n"
diff --git a/src/layout_default.xml b/src/layout_default.xml
new file mode 100644
index 0000000..6532a9e
--- /dev/null
+++ b/src/layout_default.xml
@@ -0,0 +1,182 @@
+<doxygenlayout version="1.0">
+ <!-- Navigation index tabs for HTML output -->
+ <navindex>
+ <tab type="mainpage" visible="yes" title=""/>
+ <tab type="pages" visible="yes" title=""/>
+ <tab type="modules" visible="yes" title=""/>
+ <tab type="namespaces" visible="yes" title="">
+ <tab type="namespaces" visible="yes" title=""/>
+ <tab type="namespacemembers" visible="yes" title=""/>
+ </tab>
+ <tab type="classes" visible="yes" title="">
+ <tab type="classes" visible="yes" title=""/>
+ <tab type="classindex" visible="no" title=""/>
+ <tab type="hierarchy" visible="yes" title=""/>
+ <tab type="classmembers" visible="yes" title=""/>
+ </tab>
+ <tab type="files" visible="yes" title="">
+ <tab type="files" visible="yes" title=""/>
+ <tab type="globals" visible="yes" title=""/>
+ </tab>
+ <tab type="dirs" visible="yes" title=""/>
+ <tab type="examples" visible="yes" title=""/>
+ </navindex>
+
+ <!-- Layout definition for a class page -->
+ <class>
+ <briefdescription visible="yes"/>
+ <includes visible="yes"/>
+ <inheritancegraph visible="yes"/>
+ <collaborationgraph visible="yes"/>
+ <allmemberslink visible="yes"/>
+ <memberdecl>
+ <membergroups visible="yes"/>
+ <nestedclasses visible="yes" title=""/>
+ <publictypes title=""/>
+ <publicslots title=""/>
+ <signals title=""/>
+ <publicmethods title=""/>
+ <publicstaticmethods title=""/>
+ <publicattributes title=""/>
+ <publicstaticattributes title=""/>
+ <protectedtypes title=""/>
+ <protectedslots title=""/>
+ <protectedmethods title=""/>
+ <protectedstaticmethods title=""/>
+ <protectedattributes title=""/>
+ <protectedstaticattributes title=""/>
+ <packagetypes title=""/>
+ <packagemethods title=""/>
+ <packagestaticmethods title=""/>
+ <packageattributes title=""/>
+ <packagestaticattributes title=""/>
+ <properties title=""/>
+ <events title=""/>
+ <privatetypes title=""/>
+ <privateslots title=""/>
+ <privatemethods title=""/>
+ <privatestaticmethods title=""/>
+ <privateattributes title=""/>
+ <privatestaticattributes title=""/>
+ <friends title=""/>
+ <related title="" subtitle=""/>
+ </memberdecl>
+ <detaileddescription title=""/>
+ <memberdef>
+ <typedefs title=""/>
+ <enums title=""/>
+ <constructors title=""/>
+ <functions title=""/>
+ <related title=""/>
+ <variables title=""/>
+ <properties title=""/>
+ <events title=""/>
+ </memberdef>
+ <usedfiles visible="yes"/>
+ <authorsection visible="yes"/>
+ </class>
+
+ <!-- Layout definition for a namespace page -->
+ <namespace>
+ <briefdescription visible="yes"/>
+ <memberdecl>
+ <nestednamespaces visible="yes" title=""/>
+ <classes visible="yes" title=""/>
+ <membergroups visible="yes"/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ </memberdecl>
+ <detaileddescription title=""/>
+ <memberdef>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ </memberdef>
+ <authorsection visible="yes"/>
+ </namespace>
+
+ <!-- Layout definition for a file page -->
+ <file>
+ <briefdescription visible="yes"/>
+ <includes visible="yes"/>
+ <includegraph visible="yes"/>
+ <includedbygraph visible="yes"/>
+ <sourcelink visible="yes"/>
+ <memberdecl>
+ <classes visible="yes" title=""/>
+ <namespaces visible="yes" title=""/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ </memberdecl>
+ <detaileddescription title=""/>
+ <memberdef>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ </memberdef>
+ <authorsection/>
+ </file>
+
+ <!-- Layout definition for a group page -->
+ <group>
+ <briefdescription visible="yes"/>
+ <groupgraph visible="yes"/>
+ <memberdecl>
+ <classes visible="yes" title=""/>
+ <namespaces visible="yes" title=""/>
+ <dirs visible="yes" title=""/>
+ <nestedgroups visible="yes" title=""/>
+ <files visible="yes" title=""/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <enumvalues title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <signals title=""/>
+ <publicslots title=""/>
+ <protectedslots title=""/>
+ <privateslots title=""/>
+ <events title=""/>
+ <properties title=""/>
+ <friends title=""/>
+ </memberdecl>
+ <detaileddescription title=""/>
+ <memberdef>
+ <pagedocs/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <enumvalues title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <signals title=""/>
+ <publicslots title=""/>
+ <protectedslots title=""/>
+ <privateslots title=""/>
+ <events title=""/>
+ <properties title=""/>
+ <friends title=""/>
+ </memberdef>
+ <authorsection visible="yes"/>
+ </group>
+
+ <!-- Layout definition for a directory page -->
+ <directory>
+ <briefdescription visible="yes"/>
+ <directorygraph visible="yes"/>
+ <memberdecl>
+ <dirs visible="yes"/>
+ <files visible="yes"/>
+ </memberdecl>
+ <detaileddescription title=""/>
+ </directory>
+</doxygenlayout>
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 61218d8..c32b29f 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -61,6 +61,8 @@ HEADERS = bufstr.h \
language.h \
latexdocvisitor.h \
latexgen.h \
+ layout.h \
+ layout_default.h \
lockingptr.h \
logos.h \
mandocvisitor.h \
@@ -178,6 +180,7 @@ SOURCES = ce_lex.cpp \
language.cpp \
latexdocvisitor.cpp \
latexgen.cpp \
+ layout.cpp \
logos.cpp \
mandocvisitor.cpp \
mangen.cpp \
diff --git a/src/libdoxygen.t b/src/libdoxygen.t
index 42001de..b37eb1b 100644
--- a/src/libdoxygen.t
+++ b/src/libdoxygen.t
@@ -105,6 +105,9 @@ index_xsd.h: index.xsd
compound_xsd.h: compound.xsd
cat compound.xsd | $(TO_C_CMD) >compound_xsd.h
+layout_default.h: layout_default.xml
+ cat layout_default.xml | $(TO_C_CMD) >layout_default.h
+
search_php.h: search.php
cat search.php | $(TO_C_CMD) >search_php.h
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index a57238b..960699a 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -1102,7 +1102,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
case Enumeration: Doxygen::tagFile << "enumeration"; break;
case Function: Doxygen::tagFile << "function"; break;
case Signal: Doxygen::tagFile << "signal"; break;
- case Prototype: Doxygen::tagFile << "prototype"; break;
+ //case Prototype: Doxygen::tagFile << "prototype"; break;
case Friend: Doxygen::tagFile << "friend"; break;
case DCOP: Doxygen::tagFile << "dcop"; break;
case Slot: Doxygen::tagFile << "slot"; break;
@@ -2320,7 +2320,6 @@ QCString MemberDef::memberTypeName() const
case Typedef: return "typedef";
case Enumeration: return "enumeration";
case EnumValue: return "enumvalue";
- case Prototype: return "prototype";
case Signal: return "signal";
case Slot: return "slot";
case Friend: return "friend";
diff --git a/src/memberdef.h b/src/memberdef.h
index 8dbcf0e..d476f5d 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -57,7 +57,6 @@ class MemberDef : public Definition
Typedef,
Enumeration,
EnumValue,
- Prototype,
Signal,
Slot,
Friend,
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index a14dfeb..d6b389b 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -87,7 +87,7 @@ void MemberList::countDecMembers(bool countEnumValues)
m_enumValCnt++,m_numDecMembers++;
break;
case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break;
- case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break;
+ //case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break;
case MemberDef::Define: if (Config_getBool("EXTRACT_ALL") ||
md->argsString() ||
!md->initializer().isEmpty() ||
@@ -200,7 +200,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
switch(md->memberType())
{
case MemberDef::Define: // fall through
- case MemberDef::Prototype: // fall through
+ //case MemberDef::Prototype: // fall through
case MemberDef::Typedef: // fall through
case MemberDef::Variable: // fall through
case MemberDef::Function: // fall through
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 09dab2d..a396257 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -28,6 +28,9 @@
#include "docparser.h"
#include "searchindex.h"
#include "vhdldocgen.h"
+#include "layout.h"
+
+//------------------------------------------------------------------
NamespaceDef::NamespaceDef(const char *df,int dl,
const char *name,const char *lref,
@@ -202,10 +205,6 @@ void NamespaceDef::insertMember(MemberDef *md)
break;
case MemberDef::EnumValue:
break;
- case MemberDef::Prototype:
- addMemberToList(MemberList::decProtoMembers,md);
- addMemberToList(MemberList::docProtoMembers,md);
- break;
case MemberDef::Define:
addMemberToList(MemberList::decDefineMembers,md);
addMemberToList(MemberList::docDefineMembers,md);
@@ -225,22 +224,21 @@ void NamespaceDef::computeAnchors()
if (allMemberList) setAnchors(0,'a',allMemberList);
}
-void NamespaceDef::writeDetailedDocumentation(OutputList &ol)
+void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
- !documentation().isEmpty())
+ !documentation().isEmpty()
+ )
{
ol.writeRuler();
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- //bool latexOn = ol.isEnabled(OutputGenerator::Latex);
- //if (latexOn) ol.disable(OutputGenerator::Latex);
- ol.writeAnchor(0,"_details");
- //if (latexOn) ol.enable(OutputGenerator::Latex);
+ ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
- ol.parseText(theTranslator->trDetailedDescription());
+ ol.parseText(title);
ol.endGroupHeader();
+
ol.startTextBlock();
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
@@ -251,6 +249,7 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol)
{
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
+ ol.disable(OutputGenerator::RTF);
ol.newParagraph();
ol.enableAll();
ol.disableAllBut(OutputGenerator::Man);
@@ -260,16 +259,112 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol)
if (!documentation().isEmpty())
{
ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
- //ol.newParagraph();
}
ol.endTextBlock();
+ ol.newParagraph();
+ }
+}
+
+void NamespaceDef::writeBriefDescription(OutputList &ol)
+{
+ if (!briefDescription().isEmpty())
+ {
+ ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.writeString(" \n");
+ ol.enable(OutputGenerator::RTF);
+
+ if (Config_getBool("REPEAT_BRIEF") ||
+ !documentation().isEmpty()
+ )
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startTextLink(0,"_details");
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ }
+ ol.popGeneratorState();
+
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.newParagraph();
+ ol.popGeneratorState();
+ }
+ ol.writeSynopsis();
+}
+
+void NamespaceDef::startMemberDeclarations(OutputList &ol)
+{
+ ol.startMemberSections();
+}
+
+void NamespaceDef::endMemberDeclarations(OutputList &ol)
+{
+ ol.endMemberSections();
+}
+
+void NamespaceDef::startMemberDocumentation(OutputList &ol)
+{
+ if (Config_getBool("SEPARATE_MEMBER_PAGES"))
+ {
+ ol.disable(OutputGenerator::Html);
+ Doxygen::suppressDocWarnings = TRUE;
+ }
+}
+
+void NamespaceDef::endMemberDocumentation(OutputList &ol)
+{
+ if (Config_getBool("SEPARATE_MEMBER_PAGES"))
+ {
+ ol.enable(OutputGenerator::Html);
+ Doxygen::suppressDocWarnings = FALSE;
+ }
+}
+
+void NamespaceDef::writeClassDeclarations(OutputList &ol,const QCString &title)
+{
+ if (classSDict) classSDict->writeDeclaration(ol,0,title,TRUE);
+}
+
+void NamespaceDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title)
+{
+ if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,TRUE);
+}
+
+void NamespaceDef::writeMemberGroups(OutputList &ol)
+{
+ /* write user defined member groups */
+ if (memberGroupSDict)
+ {
+ MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
+ {
+ if ((!mg->allMembersInSameSection() || !m_subGrouping)
+ && mg->header()!="[NOHEADER]")
+ {
+ mg->writeDeclarations(ol,0,this,0,0);
+ }
+ }
}
}
+void NamespaceDef::writeAuthorSection(OutputList &ol)
+{
+ // write Author section (Man only)
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Man);
+ ol.startGroupHeader();
+ ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
+ ol.endGroupHeader();
+ ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
+ ol.popGeneratorState();
+}
+
void NamespaceDef::writeDocumentation(OutputList &ol)
{
bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString pageTitle;
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
@@ -308,59 +403,123 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
}
-
- ol.startTextBlock();
+
+ //---------------------------------------- start flexible part -------------------------------
+
+#define NEW_LAYOUT
+#ifdef NEW_LAYOUT // new flexible layout
+
+ QListIterator<LayoutDocEntry> eli(
+ LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
+ LayoutDocEntry *lde;
+ for (eli.toFirst();(lde=eli.current());++eli)
+ {
+ switch (lde->kind())
+ {
+ case LayoutDocEntry::BriefDesc:
+ writeBriefDescription(ol);
+ break;
+ case LayoutDocEntry::MemberDeclStart:
+ startMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::NamespaceClasses:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeClassDeclarations(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::NamespaceNestedNamespaces:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeNamespaceDeclarations(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::MemberGroups:
+ writeMemberGroups(ol);
+ break;
+ case LayoutDocEntry::MemberDecl:
+ {
+ LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
+ writeMemberDeclarations(ol,lmd->type,lmd->title);
+ }
+ break;
+ case LayoutDocEntry::MemberDeclEnd:
+ endMemberDeclarations(ol);
+ break;
+ case LayoutDocEntry::DetailedDesc:
+ {
+ LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
+ writeDetailedDescription(ol,ls->title);
+ }
+ break;
+ case LayoutDocEntry::MemberDefStart:
+ startMemberDocumentation(ol);
+ break;
+ case LayoutDocEntry::MemberDef:
+ {
+ LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
+ writeMemberDocumentation(ol,lmd->type,lmd->title);
+ }
+ break;
+ case LayoutDocEntry::MemberDefEnd:
+ endMemberDocumentation(ol);
+ break;
+ case LayoutDocEntry::AuthorSection:
+ writeAuthorSection(ol);
+ break;
+ case LayoutDocEntry::ClassIncludes:
+ case LayoutDocEntry::ClassInheritanceGraph:
+ case LayoutDocEntry::ClassNestedClasses:
+ case LayoutDocEntry::ClassCollaborationGraph:
+ case LayoutDocEntry::ClassAllMembersLink:
+ case LayoutDocEntry::ClassUsedFiles:
+ case LayoutDocEntry::FileClasses:
+ case LayoutDocEntry::FileNamespaces:
+ case LayoutDocEntry::FileIncludes:
+ case LayoutDocEntry::FileIncludeGraph:
+ case LayoutDocEntry::FileIncludedByGraph:
+ case LayoutDocEntry::FileSourceLink:
+ case LayoutDocEntry::GroupClasses:
+ case LayoutDocEntry::GroupNamespaces:
+ case LayoutDocEntry::GroupDirs:
+ case LayoutDocEntry::GroupNestedGroups:
+ case LayoutDocEntry::GroupFiles:
+ case LayoutDocEntry::GroupGraph:
+ case LayoutDocEntry::GroupPageDocs:
+ case LayoutDocEntry::DirSubDirs:
+ case LayoutDocEntry::DirFiles:
+ case LayoutDocEntry::DirGraph:
+ err("Internal inconsistency: member %d should not be part of "
+ "LayoutDocManager::Namespace entry list\n",lde->kind());
+ break;
+ }
+ }
+
+#else // old fixed layout
+
+ bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+
+ //ol.startTextBlock();
if (Config_getBool("DETAILS_AT_TOP"))
{
- writeDetailedDocumentation(ol);
- ol.newParagraph();
+ writeDetailedDescription(ol,theTranslator->trDetailedDescription());
}
- else if (!briefDescription().isEmpty())
+
+ if (!Config_getBool("DETAILS_AT_TOP"))
{
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
- ol.writeString(" \n");
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"_details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- ol.enableAll();
- ol.disableAllBut(OutputGenerator::Man);
- ol.newParagraph();
- ol.popGeneratorState();
+ writeBriefDescription(ol);
}
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::RTF);
- ol.newParagraph();
- ol.enable(OutputGenerator::Man);
- ol.enable(OutputGenerator::RTF);
- ol.writeSynopsis();
- ol.endTextBlock();
+ //ol.endTextBlock();
- ol.startMemberSections();
- classSDict->writeDeclaration(ol,0,0,TRUE);
+ startMemberDeclarations(ol);
- namespaceSDict->writeDeclaration(ol,TRUE);
-
- /* write user defined member groups */
- if (memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- if ((!mg->allMembersInSameSection() || !m_subGrouping)
- && mg->header()!="[NOHEADER]")
- {
- mg->writeDeclarations(ol,0,this,0,0);
- }
- }
- }
+ writeClassDeclarations(ol);
+ writeNamespaceDeclarations(ol);
+ writeMemberGroups(ol);
writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines());
- writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos());
writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs());
writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations());
writeMemberDeclarations(ol,MemberList::decFuncMembers,
@@ -368,22 +527,31 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
theTranslator->trFunctions());
writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables());
- ol.endMemberSections();
+ endMemberDeclarations(ol);
if (!Config_getBool("DETAILS_AT_TOP"))
{
- writeDetailedDocumentation(ol);
+ writeDetailedDescription(ol,theTranslator->trDetailedDescription());
}
- writeMemberDocumentation(ol);
+ startMemberDocumentation(ol);
+
+ writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation());
+ writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation());
+ writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation());
+ writeMemberDocumentation(ol,MemberList::docFuncMembers,fortranOpt?theTranslator->trSubprogramDocumentation():theTranslator->trFunctionDocumentation());
+ writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation());
+
+ endMemberDocumentation(ol);
+
+ writeAuthorSection(ol);
+
+#endif
+
+ //---------------------------------------- end flexible part -------------------------------
+
+ endFile(ol);
- // write Author section (Man only)
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Man);
- ol.startGroupHeader();
- ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
- ol.endGroupHeader();
- ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
@@ -391,9 +559,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " </compound>" << endl;
}
- ol.popGeneratorState();
- endFile(ol);
-
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
MemberList *allMemberList = getMemberList(MemberList::allMembersList);
@@ -402,27 +567,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
}
}
-void NamespaceDef::writeMemberDocumentation(OutputList &ol)
-{
- bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN");
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.disable(OutputGenerator::Html);
- }
-
- writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation());
- writeMemberDocumentation(ol,MemberList::docProtoMembers,theTranslator->trFunctionPrototypeDocumentation());
- writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation());
- writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation());
- writeMemberDocumentation(ol,MemberList::docFuncMembers,fortranOpt?theTranslator->trSubprogramDocumentation():theTranslator->trFunctionDocumentation());
- writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation());
-
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.enable(OutputGenerator::Html);
- }
-}
-
void NamespaceDef::writeMemberPages(OutputList &ol)
{
ol.pushGeneratorState();
@@ -628,7 +772,7 @@ void NamespaceDef::combineUsingRelations()
}
}
-void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName)
+void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool localName)
{
if (count()==0) return; // no namespaces in the list
@@ -643,8 +787,9 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName)
// write list of namespaces
ol.startMemberHeader();
- bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
+ bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+#if 0
if (javaOpt)
{
ol.parseText(theTranslator->trPackages());
@@ -657,6 +802,8 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName)
{
ol.parseText(theTranslator->trNamespaces());
}
+#endif
+ ol.parseText(title);
ol.endMemberHeader();
ol.startMemberList();
for (ni.toFirst();(nd=ni.current());++ni)
diff --git a/src/namespacedef.h b/src/namespacedef.h
index b8bc093..b492e7e 100644
--- a/src/namespacedef.h
+++ b/src/namespacedef.h
@@ -45,9 +45,7 @@ class NamespaceDef : public Definition
QCString getOutputFileBase() const;
void insertUsedFile(const char *fname);
- void writeDetailedDocumentation(OutputList &ol);
void writeDocumentation(OutputList &ol);
- void writeMemberDocumentation(OutputList &ol);
void writeMemberPages(OutputList &ol);
void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
@@ -93,6 +91,16 @@ class NamespaceDef : public Definition
void addMemberToList(MemberList::ListType lt,MemberDef *md);
void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title);
void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void writeClassDeclarations(OutputList &ol,const QCString &title);
+ void writeNamespaceDeclarations(OutputList &ol,const QCString &title);
+ void writeMemberGroups(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
QCString fileName;
QStrList files;
@@ -146,7 +154,7 @@ class NamespaceSDict : public SDict<NamespaceDef>
((NamespaceDef *)item2)->name()
);
}
- void writeDeclaration(OutputList &ol,bool localName=FALSE);
+ void writeDeclaration(OutputList &ol,const char *title,bool localName=FALSE);
};
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index 0c6d6c1..44a54e8 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -1430,7 +1430,7 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
case MemberDef::Enumeration: memType="enum"; break;
case MemberDef::Function: memType="function"; isFunc=TRUE; break;
case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
- case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
+ //case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
diff --git a/src/pre.l b/src/pre.l
index 5d5a79c..0917d3a 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -170,14 +170,15 @@ static Define *isDefined(const char *name)
return 0;
}
-static FILE *checkAndOpenFile(const QCString &absName)
+static FILE *checkAndOpenFile(const QCString &fileName)
{
FILE *f = 0;
//printf("checkAndOpenFile(%s)\n",absName.data());
- QFileInfo fi(absName);
+ QFileInfo fi(fileName);
if (fi.exists() && fi.isFile())
{
- // check include stack for absFileName
+ QCString absName = convertToQCString(fi.absFilePath());
+ // check include stack for absName
QStack<FileState> tmpStack;
g_includeStack.setAutoDelete(FALSE);
diff --git a/src/qtbc.h b/src/qtbc.h
index 22ab1d5..173728e 100644
--- a/src/qtbc.h
+++ b/src/qtbc.h
@@ -32,7 +32,7 @@
#include <qcstring.h>
#include <qstring.h>
-inline QCString convertToQCString(const QString &s) { return s.latin1(); }
+inline QCString convertToQCString(const QString &s) { return s.utf8(); }
#else /* QT_VERSION < 200 */
diff --git a/src/translator_fi.h b/src/translator_fi.h
index eb4cf19..118e6f8 100644
--- a/src/translator_fi.h
+++ b/src/translator_fi.h
@@ -16,40 +16,43 @@
*/
/*
==================================================================================
-Suomenkielinen käännös:
+Suomenkielinen käännös:
Olli Korhonen ( -> 0.49-990425) <olli.korhonen@ccc.fi>
Antti Laine (0.49-990425 -> ) <antti.a.laine@tut.fi>
==================================================================================
1999/10/19
-* Alustava käännös valmis.
-
-* Huom: Kaikille termeille on keksitty käännösvastine, mikä ei ehkä ole
- kaikissa tapauksissa hyvä ratkaisu, ja parempikin termi voi
- olla vakiintuneessa käytössä.
-
-2008/04/08
-* Käännetty versioon 1.5.5 asti.
-
-* Tehtävää:
- - Termien kokoaminen listaksi ja suomennosten järkevyyden tarkastelu. (lista on jo melko kattava)
- Author = Tekijä
+* Alustava käännös valmis.
+
+* Huom: Kaikille termeille on keksitty käännösvastine, mikä ei ehkä ole
+ kaikissa tapauksissa hyvä ratkaisu, ja parempikin termi voi
+ olla vakiintuneessa käytössä.
+
+2008-04-08
+* Käännetty versioon 1.5.5 asti.
+2008-08-26
+* MAX_DOT_GRAPH_HEIGHT poistettu, versio 1.5.6
+* Tekstit muutettu UTF-8:ksi
+*
+* Tehtävää:
+ - Termien kokoaminen listaksi ja suomennosten järkevyyden tarkastelu. (lista on jo melko kattava)
+ Author = Tekijä
Class = Luokka
Compound = Kooste
Data = Data
Documentation = Dokumentaatio
- Defines = Määrittelyt
+ Defines = Määrittelyt
Description = Selite
Detailed = Yksityiskohtainen
Diagram = Kaavio
Enum = Enumeraatio / Luettelotyyppi
Exceptions = Poikkeukset
File = Tiedosto
- Friends = Ystävät
+ Friends = Ystävät
Functions = Funktiot
Hierarchical = Hierarkinen
Index = Indeksi
Inherits = Perii
- Member = Jäsen
+ Member = Jäsen
Module = Moduli
Namespace = Nimiavaruus
Parameters = Parametrit
@@ -57,19 +60,19 @@ Antti Laine (0.49-990425 -> ) <antti.a.laine@tut.fi>
Protected = Suojattu
Prototypes = Prototyypit
Public = Julkinen
- Reference Manual= Käsikirja
+ Reference Manual= Käsikirja
Reimplemented = Uudelleen toteutettu
- Related = Liittyvä
+ Related = Liittyvä
Signals = Signaalit
Slots = Vastineet
Static = Staattinen
Struct = Tietue
- Typedef = Tyyppimäärittely
+ Typedef = Tyyppimäärittely
Union = Yhdiste
Variables = Muuttujat
- - Taivutusmuotojen virheettömyyden tarkastelu prepositioiden korvauskohdissa.
- - Sanasta sanaan käännöskohtien mielekkyyden tarkastelu valmiista dokumentista.
- - umlaut vastineiden käyttö scandien kohdalla.
+ - Taivutusmuotojen virheettömyyden tarkastelu prepositioiden korvauskohdissa.
+ - Sanasta sanaan käännöskohtien mielekkyyden tarkastelu valmiista dokumentista.
+ - umlaut vastineiden käyttö scandien kohdalla.
positiiviset kommentit otetaan ilolla vastaan.
===================================================================================
@@ -78,7 +81,7 @@ positiiviset kommentit otetaan ilolla vastaan.
#ifndef TRANSLATOR_FI_H
#define TRANSLATOR_FI_H
-class TranslatorFinnish : public Translator
+class TranslatorFinnish : public TranslatorEnglish
{
public:
/*! This method is used to generate a warning message to signal
@@ -125,18 +128,18 @@ class TranslatorFinnish : public Translator
/*! return the language charset. This will be used for the HTML output */
virtual QCString idLanguageCharset()
{
- return "iso-8859-1";
+ return "utf-8";
}
// --- Language translation methods -------------------
/*! used in the compound documentation before a list of related functions. */
virtual QCString trRelatedFunctions()
- { return "Liittyvät funktiot"; } // "Related Functions";
+ { return "Liittyvät funktiot"; } // "Related Functions";
/*! subscript for the related functions. */
virtual QCString trRelatedSubscript()
- { return "(Huomaa, että nämä eivät ole jäsenfunktioita.)"; } // "(Note that these are not member functions.)"
+ { return "(Huomaa, että nämä eivät ole jäsenfunktioita.)"; } // "(Note that these are not member functions.)"
/*! header that is put before the detailed description of files, classes and namespaces. */
virtual QCString trDetailedDescription()
@@ -145,15 +148,15 @@ class TranslatorFinnish : public Translator
/*! header that is put before the list of typedefs. */
virtual QCString trMemberTypedefDocumentation()
// header that is put before the list of typedefs.
- { return "Jäsentyyppimäärittelyiden dokumentaatio"; } // "Member Typedef Documentation"
+ { return "Jäsentyyppimäärittelyiden dokumentaatio"; } // "Member Typedef Documentation"
/*! header that is put before the list of enumerations. */
virtual QCString trMemberEnumerationDocumentation()
- { return "Jäsenenumeraatioiden dokumentaatio"; } // "Member Enumeration Documentation"
+ { return "Jäsenenumeraatioiden dokumentaatio"; } // "Member Enumeration Documentation"
/*! header that is put before the list of member functions. */
virtual QCString trMemberFunctionDocumentation()
- { return "Jäsenfunktioiden dokumentaatio"; } // "Member Function Documentation"
+ { return "Jäsenfunktioiden dokumentaatio"; } // "Member Function Documentation"
/*! header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation()
@@ -164,42 +167,42 @@ class TranslatorFinnish : public Translator
}
else
{
- return "Jäsendatan dokumentaatio"; // "Member Data Documentation"
+ return "Jäsendatan dokumentaatio"; // "Member Data Documentation"
}
}
/*! this is the text of a link put after brief descriptions. */
virtual QCString trMore()
- { return "Lisää..."; } // "More..."
+ { return "Lisää..."; } // "More..."
/*! put in the class documentation */
virtual QCString trListOfAllMembers()
- { return "Lista kaikista jäsenistä."; } // "List of all members."
+ { return "Lista kaikista jäsenistä."; } // "List of all members."
virtual QCString trMemberList()
/*! used as the title of the "list of all members" page of a class */
- { return "Jäsenlista"; } // "Member List"
+ { return "Jäsenlista"; } // "Member List"
/*! this is the first part of a sentence that is followed by a class name */
virtual QCString trThisIsTheListOfAllMembers()
- { return "Tämä on lista kaikista jäsenistä"; } // "This is the complete list of members for "
+ { return "Tämä on lista kaikista jäsenistä"; } // "This is the complete list of members for "
/*! this is the remainder of the sentence after the class name */
virtual QCString trIncludingInheritedMembers()
- { return ", sisältäen kaikki perityt jäsenet."; } // ", including all inherited members."
+ { return ", sisältäen kaikki perityt jäsenet."; } // ", including all inherited members."
/*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name.
*/
virtual QCString trGeneratedAutomatically(const char *s)
{ QCString result=(QCString)"Automaattisesti generoitu Doxygenilla "
- "lähdekoodista projektille "+s; // "Generated automatically by Doxygen" ... "for" ... "from the sourcecode"
+ "lähdekoodista projektille "+s; // "Generated automatically by Doxygen" ... "for" ... "from the sourcecode"
//if (s) result+=(QCString)" voor "+s;
- // tässä on ongelma, kuinka taivuttaa parametria, esim. "Jcad"+"in"; "IFC2VRML konversio"+"n"
- // mutta ratkaistaan ongelma kätevästi kaksoispisteellä -> "Jcad:n" / "IFC2VRML konversio:n"
- // lopputulos on vähemmän kökkö ja täysin luettava, mutta ei kuitenkaan täydellinen.
+ // tässä on ongelma, kuinka taivuttaa parametria, esim. "Jcad"+"in"; "IFC2VRML konversio"+"n"
+ // mutta ratkaistaan ongelma kätevästi kaksoispisteellä -> "Jcad:n" / "IFC2VRML konversio:n"
+ // lopputulos on vähemmän kökkö ja täysin luettava, mutta ei kuitenkaan täydellinen.
//
- // kierretään ongelma taivuttamalla sanaa projekti :)
+ // kierretään ongelma taivuttamalla sanaa projekti :)
return result;
}
@@ -213,7 +216,7 @@ class TranslatorFinnish : public Translator
/*! put after an undocumented member in the list of all members */
virtual QCString trDefinedIn()
- { return "määritelty"; } // "defined in"
+ { return "määritelty"; } // "defined in"
// quick reference sections
@@ -249,11 +252,11 @@ class TranslatorFinnish : public Translator
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "Tietueen kentät"; // "Data Fields"
+ return "Tietueen kentät"; // "Data Fields"
}
else
{
- return "Luokan jäsenet"; // "Class Members"
+ return "Luokan jäsenet"; // "Class Members"
}
}
@@ -266,13 +269,13 @@ class TranslatorFinnish : public Translator
}
else
{
- return "Tiedoston jäsenet"; // "File Members"
+ return "Tiedoston jäsenet"; // "File Members"
}
}
/*! This is put above each page as a link to all related pages. */
virtual QCString trRelatedPages()
- { return "Liittyvät sivut"; } // "Related Pages"
+ { return "Liittyvät sivut"; } // "Related Pages"
/*! This is put above each page as a link to all examples. */
virtual QCString trExamples()
@@ -284,14 +287,14 @@ class TranslatorFinnish : public Translator
/*! This is an introduction to the class hierarchy. */
virtual QCString trClassHierarchyDescription()
- { return "Tämä periytymislista on päätasoltaan aakkostettu " // "This inheritance list is sorted roughly, "
- "mutta alijäsenet on aakkostettu itsenäisesti:"; // "but not completely, alphabetically:";
+ { return "Tämä periytymislista on päätasoltaan aakkostettu " // "This inheritance list is sorted roughly, "
+ "mutta alijäsenet on aakkostettu itsenäisesti:"; // "but not completely, alphabetically:";
}
/*! This is an introduction to the list with all files. */
virtual QCString trFileListDescription(bool extractAll)
{
- QCString result="Tässä on lista kaikista ";
+ QCString result="Tässä on lista kaikista ";
if (!extractAll) result+="dokumentoiduista "; // "documented "
result+="tiedostoista lyhyen selitteen kera:"; // "files with brief descriptions:"
return result;
@@ -303,11 +306,11 @@ class TranslatorFinnish : public Translator
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "Tällä ovat tietueet lyhyen selitteen kera:"; // "Here are the data structures with brief descriptions:"
+ return "Tässä ovat tietueet lyhyen selitteen kera:"; // "Here are the data structures with brief descriptions:"
}
else
{
- return "Tässä ovat luokat, tietueet ja " // "Here are the classes, structs and "
+ return "Tässä ovat luokat, tietueet ja " // "Here are the classes, structs and "
"yhdisteet lyhyen selitteen kera:"; // "unions with brief descriptions:"
}
}
@@ -315,29 +318,29 @@ class TranslatorFinnish : public Translator
/*! This is an introduction to the page with all class members. */
virtual QCString trCompoundMembersDescription(bool extractAll)
{
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
+ QCString result="Tässä on lista kaikista "; // "Here is a list of all "
if (!extractAll)
{
result+="dokumentoiduista "; // "documented "
}
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- result+="tietuiden ja yhdisteiden kentistä"; // "struct and union fields"
+ result+="tietuiden ja yhdisteiden kentistä"; // "struct and union fields"
}
else
{
- result+="luokkien jäsenistä"; // "class members"
+ result+="luokkien jäsenistä"; // "class members"
}
- result+=" linkitettyinä "; // " with links to "
+ result+=" linkitettyinä "; // " with links to "
if (!extractAll)
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- result+="jokaisen kentän tietueen/yhdisteen dokumentaatioon:"; // "the struct/union documentation for each field:"
+ result+="jokaisen kentän tietueen/yhdisteen dokumentaatioon:"; // "the struct/union documentation for each field:"
}
else
{
- result+="jokaisen jäsenen luokkadokumentaatioon:"; // "the class documentation for each member:"
+ result+="jokaisen jäsenen luokkadokumentaatioon:"; // "the class documentation for each member:"
}
}
else
@@ -357,18 +360,18 @@ class TranslatorFinnish : public Translator
/*! This is an introduction to the page with all file members. */
virtual QCString trFileMembersDescription(bool extractAll)
{
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
+ QCString result="Tässä on lista kaikista "; // "Here is a list of all "
if (!extractAll) result+="dokumentoiduista "; // "documented "
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- result+="funktioista, muuttujista, määrittelyistä, luetteloista ja tyyppimäärittelyistä"; // "functions, variables, defines, enums, and typedefs"
+ result+="funktioista, muuttujista, määrittelyistä, luetteloista ja tyyppimäärittelyistä"; // "functions, variables, defines, enums, and typedefs"
}
else
{
- result+="tiedoston jäsenistä"; // "file members"
+ result+="tiedoston jäsenistä"; // "file members"
}
- result+=" linkitettyinä "; // " with links to "
+ result+=" linkitettyinä "; // " with links to "
if (extractAll)
result+="tiedostoon, johon ne kuuluvat:"; // "the files they belong to:"
else
@@ -378,15 +381,15 @@ class TranslatorFinnish : public Translator
/*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription()
- { return "Tässä on lista kaikista esimerkeistä:"; } // "Here is a list of all examples:"
+ { return "Tässä on lista kaikista esimerkeistä:"; } // "Here is a list of all examples:"
/*! This is an introduction to the page with the list of related pages */
virtual QCString trRelatedPagesDescription()
- { return "Tässä on lista kaikista liittyvistä dokumentaatiosivuista:"; } // "Here is a list of all related documentation pages:"
+ { return "Tässä on lista kaikista liittyvistä dokumentaatiosivuista:"; } // "Here is a list of all related documentation pages:"
/*! This is an introduction to the page with the list of class/file groups */
virtual QCString trModulesDescription()
- { return "Tässä on lista kaikista moduleista:"; } // "Here is a list of all modules:"
+ { return "Tässä on lista kaikista moduleista:"; } // "Here is a list of all modules:"
// index titles (the project name is prepended for these)
@@ -468,13 +471,13 @@ class TranslatorFinnish : public Translator
/*! This is used in LaTeX as the title of the document */
virtual QCString trReferenceManual()
- { return "Käsikirja"; } // "Reference Manual"
+ { return "Käsikirja"; } // "Reference Manual"
/*! This is used in the documentation of a file as a header before the
* list of defines
*/
virtual QCString trDefines()
- { return "Määrittelyt"; } // "Defines"
+ { return "Määrittelyt"; } // "Defines"
/*! This is used in the documentation of a file as a header before the
* list of function prototypes
@@ -486,7 +489,7 @@ class TranslatorFinnish : public Translator
* list of typedefs
*/
virtual QCString trTypedefs()
- { return "Tyyppimäärittelyt"; } // "Typedefs"
+ { return "Tyyppimäärittelyt"; } // "Typedefs"
/*! This is used in the documentation of a file as a header before the
* list of enumerations
@@ -516,7 +519,7 @@ class TranslatorFinnish : public Translator
* documentation blocks for defines
*/
virtual QCString trDefineDocumentation()
- { return "Määritysten dokumentointi"; } // "Define Documentation"
+ { return "Määritysten dokumentointi"; } // "Define Documentation"
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
@@ -528,7 +531,7 @@ class TranslatorFinnish : public Translator
* of documentation blocks for typedefs
*/
virtual QCString trTypedefDocumentation()
- { return "Tyyppimääritysten dokumentaatio"; } // "Typedef Documentation"
+ { return "Tyyppimääritysten dokumentaatio"; } // "Typedef Documentation"
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
@@ -568,7 +571,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trGeneratedAt(const char *date,const char *projName)
{
- // funktio on hiukan vaikea kääntää prepositioihin sidotun rakenteen vuoksi.
+ // funktio on hiukan vaikea kääntää prepositioihin sidotun rakenteen vuoksi.
// Muutetaan siis lauserakennetta suomalaisemmaksi
// Generated on $date for $project by:
// -> Generated for $project on $date by:
@@ -592,7 +595,7 @@ class TranslatorFinnish : public Translator
/*! this text is generated when the \\internal command is used. */
virtual QCString trForInternalUseOnly()
- { return "Vain sisäiseen käyttöön."; } // "For internal use only."
+ { return "Vain sisäiseen käyttöön."; } // "For internal use only."
/*! this text is generated when the \\warning command is used. */
virtual QCString trWarning()
@@ -604,7 +607,7 @@ class TranslatorFinnish : public Translator
/*! this text is generated when the \\date command is used. */
virtual QCString trDate()
- { return "Päiväys"; } // "Date"
+ { return "Päiväys"; } // "Date"
/*! this text is generated when the \\return command is used. */
virtual QCString trReturns()
@@ -612,7 +615,7 @@ class TranslatorFinnish : public Translator
/*! this text is generated when the \\sa command is used. */
virtual QCString trSeeAlso()
- { return "Katso myös"; } // "See also"
+ { return "Katso myös"; } // "See also"
/*! this text is generated when the \\param command is used. */
virtual QCString trParameters()
@@ -637,7 +640,7 @@ class TranslatorFinnish : public Translator
/*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll)
{
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
+ QCString result="Tässä on lista kaikista "; // "Here is a list of all "
if (!extractAll) result+="dokumentoiduista "; // "documented "
result+="nimiavaruuksista lyhyen selitteen kera:"; // "namespaces with brief descriptions:"
return result;
@@ -647,7 +650,7 @@ class TranslatorFinnish : public Translator
* friends of a class
*/
virtual QCString trFriends()
- { return "Ystävät"; } // "Friends"
+ { return "Ystävät"; } // "Friends"
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
@@ -657,7 +660,7 @@ class TranslatorFinnish : public Translator
* related classes
*/
virtual QCString trRelatedFunctionDocumentation()
- { return "Ystävät ja niihin liittyvien funktioiden dokumentaatio"; } // "Friends And Related Function Documentation"
+ { return "Ystävät ja niihin liittyvien funktioiden dokumentaatio"; } // "Friends And Related Function Documentation"
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
@@ -671,13 +674,13 @@ class TranslatorFinnish : public Translator
QCString result=(QCString)clName;
switch(compType)
{
- case ClassDef::Class: result+=" Luokka"; break; // " Class"
- case ClassDef::Struct: result+=" Tietue"; break; // " Struct"
- case ClassDef::Union: result+=" Yhdiste"; break; // " Union"
- case ClassDef::Interface: result+=" Rajapinta"; break; // " Interface"
- case ClassDef::Protocol: result+=" Protokolla"; break; // " Protocol"
- case ClassDef::Category: result+=" Kategoria"; break; // " Category"
- case ClassDef::Exception: result+=" Poikkeus"; break; // " Exception"
+ case ClassDef::Class: result+=" luokka"; break; // " Class"
+ case ClassDef::Struct: result+=" tietue"; break; // " Struct"
+ case ClassDef::Union: result+=" yhdiste"; break; // " Union"
+ case ClassDef::Interface: result+=" rajapinta"; break; // " Interface"
+ case ClassDef::Protocol: result+=" protokolla"; break; // " Protocol"
+ case ClassDef::Category: result+=" kategoria"; break; // " Category"
+ case ClassDef::Exception: result+=" poikkeus"; break; // " Exception"
}
if (isTemplate) result+="malli"; // " Template"
result+="referenssi"; // " Reference"
@@ -688,7 +691,7 @@ class TranslatorFinnish : public Translator
virtual QCString trFileReference(const char *fileName)
{
QCString result=fileName;
- result+=" Tiedostoreferenssi"; // " File Reference"
+ result+=" tiedostoreferenssi"; // " File Reference"
return result;
}
@@ -696,30 +699,30 @@ class TranslatorFinnish : public Translator
virtual QCString trNamespaceReference(const char *namespaceName)
{
QCString result=namespaceName;
- result+=" Nimiavaruusreferenssi"; // " Namespace Reference"
+ result+=" nimiavaruusreferenssi"; // " Namespace Reference"
return result;
}
virtual QCString trPublicMembers()
- { return "Julkiset jäsenfunktiot"; } // "Public Member Functions"
+ { return "Julkiset jäsenfunktiot"; } // "Public Member Functions"
virtual QCString trPublicSlots()
{ return "Julkiset vastineet"; } // "Public Slots"
virtual QCString trSignals()
{ return "Signaalit"; } // "Signals"
virtual QCString trStaticPublicMembers()
- { return "Staattiset julkiset jäsenfunktiot"; } // "Static Public Member Functions"
+ { return "Staattiset julkiset jäsenfunktiot"; } // "Static Public Member Functions"
virtual QCString trProtectedMembers()
- { return "Suojatut jäsenfunktiot"; } // "Protected Member Functions"
+ { return "Suojatut jäsenfunktiot"; } // "Protected Member Functions"
virtual QCString trProtectedSlots()
{ return "Suojatut vastineet"; } // "Protected Slots"
virtual QCString trStaticProtectedMembers()
- { return "Staattiset suojatut jäsenfunktiot"; } // "Static Protected Member Functions"
+ { return "Staattiset suojatut jäsenfunktiot"; } // "Static Protected Member Functions"
virtual QCString trPrivateMembers()
- { return "Yksityiset jäsenfunktiot"; } // "Private Member Functions"
+ { return "Yksityiset jäsenfunktiot"; } // "Private Member Functions"
virtual QCString trPrivateSlots()
{ return "Yksityiset vastineet"; } // "Private Slots"
virtual QCString trStaticPrivateMembers()
- { return "Staattiset yksityiset jäsenfunktiot"; } // "Static Private Member Functions"
+ { return "Staattiset yksityiset jäsenfunktiot"; } // "Static Private Member Functions"
/*! this function is used to produce a comma-separated list of items.
* use generateMarker(i) to indicate where item i should be put.
@@ -751,7 +754,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trInheritsList(int numEntries)
{
- return "Perijät "+trWriteList(numEntries)+"."; // "Inherits "
+ return (QCString)"Periytyy "+(numEntries > 1 ? "luokista " : "luokasta ")+trWriteList(numEntries)+"."; // "Inherits "
}
/*! used in class documentation to produce a list of super classes,
@@ -759,7 +762,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trInheritedByList(int numEntries)
{
- return "Periytyy "+trWriteList(numEntries)+"."; // "Inherited by "
+ return (QCString)"Periytetään "+(numEntries > 1 ? "luokissa " : "luokassa ")+trWriteList(numEntries)+"."; // "Inherited by "
}
/*! used in member documentation blocks to produce a list of
@@ -767,7 +770,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trReimplementedFromList(int numEntries)
{
- return "Uudelleen toteutettaa "+trWriteList(numEntries)+"."; // "Reimplemented from "
+ return (QCString)"Uudelleen toteuttaa "+(numEntries > 1 ? "luokat " : "luokan ")+trWriteList(numEntries)+"."; // "Reimplemented from "
}
/*! used in member documentation blocks to produce a list of
@@ -775,19 +778,19 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trReimplementedInList(int numEntries)
{
- return "Uudelleen toteutettu "+trWriteList(numEntries)+"."; // "Reimplemented in "
+ return (QCString)"Uudelleen toteutettu "+(numEntries > 1 ? "luokissa " : "luokassa ")+trWriteList(numEntries)+"."; // "Reimplemented in "
}
/*! This is put above each page as a link to all members of namespaces. */
virtual QCString trNamespaceMembers()
- { return "Nimiavaruuden jäsenet"; } // "Namespace Members"
+ { return "Nimiavaruuden jäsenet"; } // "Namespace Members"
/*! This is an introduction to the page with all namespace members */
virtual QCString trNamespaceMemberDescription(bool extractAll)
{
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
+ QCString result="Tässä on lista kaikista "; // "Here is a list of all "
if (!extractAll) result+="dokumentoiduista "; // "documented "
- result+="nimiavaruuden jäsenistä linkitettynä "; // "namespace members with links to "
+ result+="nimiavaruuden jäsenistä linkitettynä "; // "namespace members with links to "
if (extractAll)
result+="nimiavaruuden dokumentaatioon johon ne kuuluvat:"; // "the namespace documentation for each member:";
else
@@ -827,7 +830,7 @@ class TranslatorFinnish : public Translator
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
- QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this "
+ QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this "
switch(compType)
{
case ClassDef::Class: result+="luokalle"; break; // "class"
@@ -860,7 +863,7 @@ class TranslatorFinnish : public Translator
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
- { return "Pääsivu"; } // "Main Page"
+ { return "Pääsivu"; } // "Main Page"
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
@@ -874,11 +877,11 @@ class TranslatorFinnish : public Translator
virtual QCString trDefinedAtLineInSourceFile()
{
- return "Määrittely tiedoston @1 rivillä @0."; // "Definition at line @0 of file @1."
+ return "Määrittely tiedoston @1 rivillä @0."; // "Definition at line @0 of file @1."
}
virtual QCString trDefinedInSourceFile()
{
- return "Määrittely tiedostossa @0."; // "Definition in file @0."
+ return "Määrittely tiedostossa @0."; // "Definition in file @0."
}
//////////////////////////////////////////////////////////////////////////
@@ -897,12 +900,12 @@ class TranslatorFinnish : public Translator
/*! this text is put before a collaboration diagram */
virtual QCString trCollaborationDiagram(const char *clName)
{
- return (QCString)"Yhteistyökaavio luokalle "+clName+":"; // "Collaboration diagram for "+clName+":"
+ return (QCString)"Yhteistyökaavio luokalle "+clName+":"; // "Collaboration diagram for "+clName+":"
}
/*! this text is put before an include dependency graph */
virtual QCString trInclDepGraph(const char *fName)
{
- return (QCString)"Sisällytysriippuvuuskaavio tiedostolle "+fName+":"; // "Include dependency graph for "+fName+":"
+ return (QCString)"Sisällytysriippuvuuskaavio tiedostolle "+fName+":"; // "Include dependency graph for "+fName+":"
}
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
@@ -912,12 +915,12 @@ class TranslatorFinnish : public Translator
/*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode()
{
- return "Siirry tämän tiedoston lähdekoodiin."; // "Go to the source code of this file."
+ return "Siirry tämän tiedoston lähdekoodiin."; // "Go to the source code of this file."
}
/*! Used in the file sources to point to the corresponding documentation. */
virtual QCString trGotoDocumentation()
{
- return "Mene tämän tiedoston dokumentaatioon."; // "Go to the documentation of this file."
+ return "Mene tämän tiedoston dokumentaatioon."; // "Go to the documentation of this file."
}
/*! Text for the \\pre command */
virtual QCString trPrecondition()
@@ -927,12 +930,12 @@ class TranslatorFinnish : public Translator
/*! Text for the \\post command */
virtual QCString trPostcondition()
{
- return "Jälkiehto"; // "Postcondition"
+ return "Jälkiehto"; // "Postcondition"
}
/*! Text for the \\invariant command */
virtual QCString trInvariant()
{
- return "Invariantti"; // vai "Pysyväisväittämä"? "Invariant"
+ return "Invariantti"; // vai "Pysyväisväittämä"? "Invariant"
}
/*! Text shown before a multi-line variable/enum initialization */
virtual QCString trInitialValue()
@@ -950,7 +953,7 @@ class TranslatorFinnish : public Translator
}
virtual QCString trGotoGraphicalHierarchy()
{
- return "Siirry graafiseen luokkahiearkiaan"; // "Go to the graphical class hierarchy"
+ return "Siirry graafiseen luokkahierarkiaan"; // "Go to the graphical class hierarchy"
}
virtual QCString trGotoTextualHierarchy()
{
@@ -967,7 +970,7 @@ class TranslatorFinnish : public Translator
virtual QCString trNote()
{
- // FIXME: Missähän merkityksessä tätä käytetään?
+ // FIXME: Missähän merkityksessä tätä käytetään?
return "Huomautus"; // "Note"
}
virtual QCString trPublicTypes()
@@ -978,7 +981,7 @@ class TranslatorFinnish : public Translator
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "Tietueen kentät"; // "Data Fields"
+ return "Tietueen kentät"; // "Data Fields"
}
else
{
@@ -999,7 +1002,7 @@ class TranslatorFinnish : public Translator
}
virtual QCString trStaticProtectedAttribs()
{
- return "Stattiset suojellut attribuutit"; // "Static Protected Attributes"
+ return "Staattiset suojellut attribuutit"; // "Static Protected Attributes"
}
virtual QCString trPrivateTypes()
{
@@ -1021,12 +1024,12 @@ class TranslatorFinnish : public Translator
/*! Used as a marker that is put before a \\todo item */
virtual QCString trTodo()
{
- return "Vielä tehtävä"; // "Todo"
+ return "Vielä tehtävä"; // "Todo"
}
/*! Used as the header of the todo list */
virtual QCString trTodoList()
{
- return "Tehtävälista"; // "Todo List"
+ return "Tehtävälista"; // "Todo List"
}
//////////////////////////////////////////////////////////////////////////
@@ -1047,15 +1050,15 @@ class TranslatorFinnish : public Translator
}
virtual QCString trInclByDepGraph()
{
- return "Tämä kaavio näyttää, mitkä tiedostot suorasti"
- "tai epäsuorasti sisällyttävät tämän tiedoston";
+ return "Tämä kaavio näyttää, mitkä tiedostot suorasti"
+ "tai epäsuorasti sisällyttävät tämän tiedoston";
// "This graph shows which files directly or "
// "indirectly include this file:"
}
virtual QCString trSince()
{
- // FIXME: Missä merkityksessä tätä käytetään?
- return "Lähtien"; // "Since"
+ // FIXME: Missä merkityksessä tätä käytetään?
+ return "Lähtien"; // "Since"
}
//////////////////////////////////////////////////////////////////////////
@@ -1073,13 +1076,13 @@ class TranslatorFinnish : public Translator
virtual QCString trLegendDocs()
{
return
- "Tämä sivu selittää, kuinka doxygenin generoimia kaavioita tulkitaan.<p>\n"
+ "Tämä sivu selittää, kuinka doxygenin generoimia kaavioita tulkitaan.<p>\n"
// "This page explains how to interpret the graphs that are generated "
// "by doxygen.<p>\n"
- "Ajattele seuraavaa esimerkkiä:\n"
+ "Ajattele seuraavaa esimerkkiä:\n"
// "Consider the following example:\n"
"\\code\n"
- "/*! Näkymätön luokka katkaisun vuoksi */\n"
+ "/*! Näkymätön luokka katkaisun vuoksi */\n"
// "/*! Invisible class because of truncation */\n"
"class Nakymaton { };\n\n"
// "class Invisible { };\n\n"
@@ -1089,9 +1092,9 @@ class TranslatorFinnish : public Translator
// "class Truncated : public Invisible { };\n\n"
"/* Luokkaa ei ole dokumentoitu doxygen-kommenteilla */\n"
// "/* Class not documented with doxygen comments */\n"
- "class Dokumentoimaton { };\n\n"
+ "class Dokumentoimaton { };\n\n"
// "class Undocumented { };\n\n"
- "/*! Julkista periyttämistä käyttäen periytetty luokka */\n"
+ "/*! Julkista periyttämistä käyttäen periytetty luokka */\n"
// "/*! Class that is inherited using public inheritance */\n"
"class JulkinenKanta : public Katkaistu { };\n\n"
// "class PublicBase : public Truncated { };\n\n"
@@ -1099,15 +1102,15 @@ class TranslatorFinnish : public Translator
// "/*! A template class */\n"
"template<class T> class Malli { };\n\n"
// "template<class T> class Templ { };\n\n"
- "/*! Suojeltua periytymistä käyttäen periytetty luokka */\n"
+ "/*! Suojeltua periytymistä käyttäen periytetty luokka */\n"
// "/*! Class that is inherited using protected inheritance */\n"
"class SuojeltuKanta { };\n\n"
// "class ProtectedBase { };\n\n"
- "/*! Yksityistä periytymistä käyttäen periytetty luokka */\n"
+ "/*! Yksityistä periytymistä käyttäen periytetty luokka */\n"
// "/*! Class that is inherited using private inheritance */\n"
"class YksityisKanta { };\n\n"
// "class PrivateBase { };\n\n"
- "/*! Luokka jota periytetty luokka käyttää */\n"
+ "/*! Luokka jota periytetty luokka käyttää */\n"
// "/*! Class that is used by the Inherited class */\n"
"class Kaytetty { };\n\n"
// "class Used { };\n\n"
@@ -1132,16 +1135,14 @@ class TranslatorFinnish : public Translator
// " Used *m_usedClass;\n"
// "};\n"
"\\endcode\n"
- "Jos \\c MAX_DOT_GRAPH_HEIGHT-kenttä asetustiedostossa "
- // "If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
- "on asetettu arvoon 240, on tuloksena seuraavanlainen kaavio:"
- // "is set to 240 this will result in the following graph:"
+ "Tuloksena on seuraavanlainen kaavio:"
+ //"This will result in the following graph:"
"<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
- "Ylläolevassa kaaviossa laatikoilla on seuraavat merkitykset\n:"
+ "Ylläolevassa kaaviossa laatikoilla on seuraavat merkitykset\n:"
// "The boxes in the above graph have the following meaning:\n"
"<ul>\n"
- "<li>Täytetty harmaa laatikko esittää tietuetta tai luokkaa, jolle "
+ "<li>Täytetty harmaa laatikko esittää tietuetta tai luokkaa, jolle "
// "<li>%A filled gray box represents the struct or class for which the "
"kaavio on generoitu.\n"
// "graph is generated.\n"
@@ -1151,33 +1152,33 @@ class TranslatorFinnish : public Translator
// "<li>%A box with a grey border denotes an undocumented struct or class.\n"
"<li>Punareunainen laatikko merkistee dokumentoitua luokkaa tai structia "
// "<li>%A box with a red border denotes a documented struct or class for"
- "jolle ei näytetä kaikkia periytymis-/sisällyssuhteita. Kaavio "
+ "jolle ei näytetä kaikkia periytymis-/sisällyssuhteita. Kaavio "
// "which not all inheritance/containment relations are shown. %A graph is "
- "katkaistaan, jos se ei mahdu määriteltyjen rajojen sisään.\n"
+ "katkaistaan, jos se ei mahdu määriteltyjen rajojen sisään.\n"
// "truncated if it does not fit within the specified boundaries.\n"
"</ul>\n"
"Nuolilla on seuraavat merkitykset:\n"
// "The arrows have the following meaning:\n"
"<ul>\n"
- "<li>Tummansinistä nuolta käytetään osoittamaan julkista periytymis"
+ "<li>Tummansinistä nuolta käytetään osoittamaan julkista periytymis"
// "<li>%A dark blue arrow is used to visualize a public inheritance "
- "suhdetta kahden luokan välillä.\n"
+ "suhdetta kahden luokan välillä.\n"
// "relation between two classes.\n"
- "<li>Tummanvihreää nuolta käytetään suojellussa periytymisessä.\n"
+ "<li>Tummanvihreää nuolta käytetään suojellussa periytymisessä.\n"
// "<li>%A dark green arrow is used for protected inheritance.\n"
- "<li>Tummanpunaista nuolta käytetään yksityisessä periytymisessä.\n"
+ "<li>Tummanpunaista nuolta käytetään yksityisessä periytymisessä.\n"
// "<li>%A dark red arrow is used for private inheritance.\n"
- "<li>Purppuranväristä katkoviivaa käytetään, jos luokka sisältyy tai "
+ "<li>Purppuranväristä katkoviivaa käytetään, jos luokka sisältyy tai "
// "<li>%A purple dashed arrow is used if a class is contained or used "
- "on toisen luokan käyttämä. Nuoli nimetään sillä muuttujalla/muuttujilla "
+ "on toisen luokan käyttämä. Nuoli nimetään sillä muuttujalla/muuttujilla "
// "by another class. The arrow is labeled with the variable(s) "
- "jonka läpi osoitettua luokkaa tai tietuetta käytetään.\n"
+ "jonka läpi osoitettua luokkaa tai tietuetta käytetään.\n"
// "through which the pointed class or struct is accessible.\n"
- "<li>Keltainen katkoviivalla piirretty nuoli merkitsee suhdetta mallin esiintymän ja "
+ "<li>Keltainen katkoviivalla piirretty nuoli merkitsee suhdetta mallin esiintymän ja "
// "<li>%A yellow dashed arrow denotes a relation between a template instance and "
- "malliluokan välillä. Nuoli nimetään "
+ "malliluokan välillä. Nuoli nimetään "
// "the template class it was instantiated from. The arrow is labeled with "
- "mallin esiintymän malliparametrilla.\n"
+ "mallin esiintymän malliparametrilla.\n"
// "the template parameters of the instance.\n"
"</ul>\n";
}
@@ -1209,7 +1210,7 @@ class TranslatorFinnish : public Translator
/*! Used as a section header for KDE-2 IDL methods */
virtual QCString trDCOPMethods()
{
- return "DCOP-jäsenfunktiot"; // "DCOP Member Functions"
+ return "DCOP-jäsenfunktiot"; // "DCOP Member Functions"
}
//////////////////////////////////////////////////////////////////////////
@@ -1256,7 +1257,7 @@ class TranslatorFinnish : public Translator
/*! The description of the package index page */
virtual QCString trPackageListDescription()
{
- return "Tässä ovat paketit lyhyiden selitysten kanssa (jos saatavilla):"; // "Here are the packages with brief descriptions (if available):"
+ return "Tässä ovat paketit lyhyiden selitysten kanssa (jos saatavilla):"; // "Here are the packages with brief descriptions (if available):"
}
/*! The link name in the Quick links header for each page */
virtual QCString trPackages()
@@ -1372,7 +1373,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trGroup(bool first_capital, bool singular)
{
- QCString result((first_capital ? "Ryhmä" : "ryhmä")); // "Group" / "group"
+ QCString result((first_capital ? "Ryhmä" : "ryhmä")); // "Group" / "group"
if (!singular) result+="t"; // "+s"
return result;
}
@@ -1394,7 +1395,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trMember(bool first_capital, bool singular)
{
- QCString result((first_capital ? "Jäsen" : "jäsen")); // "Member" / "member"
+ QCString result((first_capital ? "Jäsen" : "jäsen")); // "Member" / "member"
if (!singular) result+="et"; // "+s"
return result;
}
@@ -1418,7 +1419,7 @@ class TranslatorFinnish : public Translator
* for the author section in man pages. */
virtual QCString trAuthor(bool first_capital, bool singular)
{
- QCString result((first_capital ? "Tekijä" : "tekijä")); // "Author" / "author"
+ QCString result((first_capital ? "Tekijä" : "tekijä")); // "Author" / "author"
if (!singular) result+="t"; // "+s"
return result;
}
@@ -1443,7 +1444,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trImplementedFromList(int numEntries)
{
- return "Toteuttaa "+trWriteList(numEntries)+"."; // "Implements "
+ return "Toteuttaa luokan "+trWriteList(numEntries)+"."; // "Implements "
}
/*! used in member documentation blocks to produce a list of
@@ -1451,7 +1452,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trImplementedInList(int numEntries)
{
- return "Toteutettu "+trWriteList(numEntries)+"."; // "Implemented in "
+ return "Toteutettu luokassa "+trWriteList(numEntries)+"."; // "Implemented in "
}
//////////////////////////////////////////////////////////////////////////
@@ -1463,7 +1464,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trRTFTableOfContents()
{
- return "Sisällysluettelo"; // "Table of Contents"
+ return "Sisällysluettelo"; // "Table of Contents"
}
//////////////////////////////////////////////////////////////////////////
@@ -1548,7 +1549,7 @@ class TranslatorFinnish : public Translator
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
- return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the call graph for this function:"
+ return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the call graph for this function:"
}
//////////////////////////////////////////////////////////////////////////
@@ -1582,16 +1583,16 @@ class TranslatorFinnish : public Translator
{
if (numDocuments==0)
{
- return "Valitettavasti yksikään dokumentti ei vastannut hakuasi."; // "Sorry, no documents matching your query."
+ return "Valitettavasti yksikään dokumentti ei vastannut hakuasi."; // "Sorry, no documents matching your query."
}
else if (numDocuments==1)
{
- return "Löytyi <b>1</b> dokumentti, joka vastasi hakuasi."; // "Found <b>1</b> document matching your query.";
+ return "Löytyi <b>1</b> dokumentti, joka vastasi hakuasi."; // "Found <b>1</b> document matching your query.";
}
else
{
- return "Löytyi <b>$num dokumenttia, jotka vastasivat hakuasi. " // "Found <b>$num</b> documents matching your query. "
- "Parhaat tulokset näytetään ensin."; // "Showing best matches first."
+ return "Löytyi <b>$num dokumenttia, jotka vastasivat hakuasi. " // "Found <b>$num</b> documents matching your query. "
+ "Parhaat tulokset näytetään ensin."; // "Showing best matches first."
}
}
/*! This string is put before the list of matched words, for each search
@@ -1610,7 +1611,7 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trSourceFile(QCString& filename)
{
- return filename + " lähdekooditiedosto"; // " Source File"
+ return filename + " lähdekooditiedosto"; // " Source File"
}
//////////////////////////////////////////////////////////////////////////
@@ -1639,7 +1640,7 @@ class TranslatorFinnish : public Translator
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
- { return "Tämä hakemistohierarkia on järjestetty aakkosellisesti tasoittain:";
+ { return "Tämä hakemistohierarkia on järjestetty aakkosellisesti tasoittain:";
//This directory hierarchy is sorted roughly, "
// "but not completely, alphabetically:";
}
@@ -1648,7 +1649,7 @@ class TranslatorFinnish : public Translator
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Hakemistoreferenssi"; return result; }
+ { QCString result=dirName; result+=" hakemistoreferenssi"; return result; }
// " Directory Reference"
/*! This returns the word directory with or without starting capital
@@ -1670,9 +1671,9 @@ class TranslatorFinnish : public Translator
*/
virtual QCString trOverloadText()
{
- return "Tämä on ylikuormitettu jäsenfunktio, ja se tarjotaan "
- "käytön helpottamiseksi. Se eroaa ylläolevasta "
- "funktiosta ainoastaan hyväksymiltä parametreiltaan.";
+ return "Tämä on ylikuormitettu jäsenfunktio, ja se tarjotaan "
+ "käytön helpottamiseksi. Se eroaa ylläolevasta "
+ "funktiosta ainoastaan hyväksymiltä parametreiltaan.";
// "This is an overloaded member function, "
// "provided for convenience. It differs from the above "
// "function only in what argument(s) it accepts."
@@ -1685,7 +1686,7 @@ class TranslatorFinnish : public Translator
/*! This is used to introduce a caller (or called-by) graph */
virtual QCString trCallerGraph()
{
- return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the caller graph for this function:"
+ return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the caller graph for this function:"
}
/*! This is used in the documentation of a file/namespace before the list
@@ -1700,7 +1701,7 @@ class TranslatorFinnish : public Translator
/*! header that is put before the list of member subprograms (Fortran). */
virtual QCString trMemberFunctionDocumentationFortran()
- { return "Jäsenfunktioiden/aliohjelmien dokumentaatio"; } // "Member Function/Subroutine Documentation"
+ { return "Jäsenfunktioiden/aliohjelmien dokumentaatio"; } // "Member Function/Subroutine Documentation"
/*! This is put above each page as a link to the list of annotated data types (Fortran). */
virtual QCString trCompoundListFortran()
@@ -1708,25 +1709,25 @@ class TranslatorFinnish : public Translator
/*! This is put above each page as a link to all members of compounds (Fortran). */
virtual QCString trCompoundMembersFortran()
- { return "Kentät"; } // "Data Fields";
+ { return "Kentät"; } // "Data Fields";
/*! This is an introduction to the annotated compound list (Fortran). */
virtual QCString trCompoundListDescriptionFortran()
- { return "Tässä ovat tietotyypit lyhyillä selityksillä:"; } // "Here are the data types with brief descriptions:"
+ { return "Tässä ovat tietotyypit lyhyillä selityksillä:"; } // "Here are the data types with brief descriptions:"
/*! This is an introduction to the page with all data types (Fortran). */
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
{
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
+ QCString result="Tässä on lista kaikista "; // "Here is a list of all "
if (!extractAll)
{
result+="dokumentoiduista "; // "documented "
}
- result+="tietotyyppien jäsenistä"; // "data types members"
- result+=", sekä linkit "; // " with links to "
+ result+="tietotyyppien jäsenistä"; // "data types members"
+ result+=", sekä linkit "; // " with links to "
if (!extractAll)
{
- result+="tietueen dokumentaatioon jokaiselle jäsenelle"; // "the data structure documentation for each member"
+ result+="tietueen dokumentaatioon jokaiselle jäsenelle"; // "the data structure documentation for each member"
}
else
{
@@ -1772,9 +1773,9 @@ class TranslatorFinnish : public Translator
/*! used as an introduction to the modules list (Fortran) */
virtual QCString trModulesListDescription(bool extractAll)
{
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
+ QCString result="Tässä on lista kaikista "; // "Here is a list of all "
if (!extractAll) result+="dokumentoiduista "; // "documented "
- result+="moduuleista lyhillä selityksillä:"; // "modules with brief descriptions:"
+ result+="moduuleista lyhillä selityksillä:"; // "modules with brief descriptions:"
return result;
}
@@ -1786,13 +1787,13 @@ class TranslatorFinnish : public Translator
QCString result=(QCString)clName;
switch(compType)
{
- case ClassDef::Class: result+=" Moduuli"; break; // " Module"
- case ClassDef::Struct: result+=" Tyyppi"; break; // " Type"
- case ClassDef::Union: result+=" Yhdiste"; break; // " Union"
- case ClassDef::Interface: result+=" Rajapinta"; break; // " Interface"
- case ClassDef::Protocol: result+=" Protokolla"; break; // " Protocol"
- case ClassDef::Category: result+=" Kategoria"; break; // " Category"
- case ClassDef::Exception: result+=" Poikkeus"; break; // " Exception"
+ case ClassDef::Class: result+=" moduuli"; break; // " Module"
+ case ClassDef::Struct: result+=" tyyppi"; break; // " Type"
+ case ClassDef::Union: result+=" yhdiste"; break; // " Union"
+ case ClassDef::Interface: result+=" rajapinta"; break; // " Interface"
+ case ClassDef::Protocol: result+=" protokolla"; break; // " Protocol"
+ case ClassDef::Category: result+=" kategoria"; break; // " Category"
+ case ClassDef::Exception: result+=" poikkeus"; break; // " Exception"
}
if (isTemplate) result+="malli"; // " Template"
result+="referenssi"; // " Reference"
@@ -1802,23 +1803,23 @@ class TranslatorFinnish : public Translator
virtual QCString trModuleReference(const char *namespaceName)
{
QCString result=namespaceName;
- result+=" Moduulin referenssi"; // " Module Reference"
+ result+=" moduulin referenssi"; // " Module Reference"
return result;
}
/*! This is put above each page as a link to all members of modules. (Fortran) */
virtual QCString trModulesMembers()
- { return "Moduulin jäsenet"; } // "Module Members"
+ { return "Moduulin jäsenet"; } // "Module Members"
/*! This is an introduction to the page with all modules members (Fortran) */
virtual QCString trModulesMemberDescription(bool extractAll)
{
- QCString result="Tässä on lista moduulin kaikista "; // "Here is a list of all "
+ QCString result="Tässä on lista moduulin kaikista "; // "Here is a list of all "
if (!extractAll) result+="dokumentoiduista"; // "documented "
- result+="jäsenistä, sekä linkit "; // "module members with links to "
+ result+="jäsenistä, sekä linkit "; // "module members with links to "
if (extractAll)
{
- result+="moduulin dokumentaatioon jokaiselle jäsenelle:"; // "the module documentation for each member:"
+ result+="moduulin dokumentaatioon jokaiselle jäsenelle:"; // "the module documentation for each member:"
}
else
{
@@ -1850,7 +1851,7 @@ class TranslatorFinnish : public Translator
bool single)
{ // here s is one of " Module", " Struct" or " Union"
// single is true implies a single file
- QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this "
+ QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this "
switch(compType)
{
case ClassDef::Class: result+="moduulille"; break; // "module"
diff --git a/src/translator_ro.h b/src/translator_ro.h
index 7c93c87..af26d05 100644
--- a/src/translator_ro.h
+++ b/src/translator_ro.h
@@ -16,6 +16,7 @@
*/
/* The translation from English to Romanian by Alexandru Iosup [aiosup@yahoo.com].
+ * Updated by Ionut Dumitrascu [reddumy@yahoo.com]
*
* Disclaimer: I hope I translated these to Romanian keeping
* the meaning of the sentences intact. I used C-words were possible,
@@ -33,6 +34,7 @@
*
* Revision history
* ----------------
+ * 28.07.2008 - Updated version - covering Doxygen 1.5.6 - and some minor changes
* 01.Mar.2k5 Third revision, covering Doxygen 1.4.1
*
* 07.Mar.2k2 Second revision, covering Doxygen 1.2.14
@@ -657,13 +659,13 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1
QCString result="Referinþã la ";
switch(compType)
{
- case ClassDef::Class: result+="clasa"; break;
- case ClassDef::Struct: result+="structura"; break;
- case ClassDef::Union: result+="uniunea"; break;
- case ClassDef::Interface: result+="interfaþa"; break;
- case ClassDef::Protocol: result+="protocol"; break; // translate me!
- case ClassDef::Category: result+="category"; break; // translate me!
- case ClassDef::Exception: result+="excepþia"; break;
+ case ClassDef::Class: result+="clasa "; break;
+ case ClassDef::Struct: result+="structura "; break;
+ case ClassDef::Union: result+="uniunea "; break;
+ case ClassDef::Interface: result+="interfaþa "; break;
+ case ClassDef::Protocol: result+="protocolul "; break;
+ case ClassDef::Category: result+="categoria "; break;
+ case ClassDef::Exception: result+="excepþia "; break;
}
if (isTemplate) result+=" (Template) ";
result+=(QCString)clName;
@@ -674,7 +676,7 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1
/*! used as the title of the HTML page of a file */
virtual QCString trFileReference(const char *fileName)
{
- QCString result="Referinþã la fiºierul";
+ QCString result="Referinþã la fiºierul ";
result+=fileName;
return result;
}
@@ -823,8 +825,8 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1
case ClassDef::Struct: result+="structurã"; break;
case ClassDef::Union: result+="uniune"; break;
case ClassDef::Interface: result+="interfaþã"; break;
- case ClassDef::Protocol: result+="protocol"; break; // translate me!
- case ClassDef::Category: result+="category"; break; // translate me!
+ case ClassDef::Protocol: result+="protocol"; break;
+ case ClassDef::Category: result+="categorie"; break;
case ClassDef::Exception: result+="excepþie"; break;
}
result+=" a fost generatã din fiºier";
@@ -1073,7 +1075,7 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1
"class Undocumented { };\n\n"
"/*! Clasã care este moºtenitã în mod public */\n"
"class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
+ "/*! Clasã template */\n"
"template<class T> class Templ { };\n\n"
"/*! Clasã care este moºtenitã în mod protejat */\n"
"class ProtectedBase { };\n\n"
@@ -1093,7 +1095,7 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1
"};\n"
"\\endcode\n"
"Dacã tagul \\c MAX_DOT_GRAPH_HEIGHT din fiºierul de configuraþie "
- "Este setat la 200 acesta este graful rezultat:"
+ "este setat la 200, acesta este graful rezultat:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Cãsuþele din partea de sus au urmãtoarea semnificaþie:\n"
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 2906799..1ae435e 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -582,7 +582,6 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
case MemberDef::Enumeration: memType="enum"; break;
case MemberDef::Function: memType="function"; isFunc=TRUE; break;
case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
- case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;