diff options
Diffstat (limited to 'src')
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," "," "); } +#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> " << searchFor << " </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; @@ -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); @@ -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; |