diff options
Diffstat (limited to 'src/docbookgen.cpp')
-rw-r--r-- | src/docbookgen.cpp | 1900 |
1 files changed, 1605 insertions, 295 deletions
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp index 345629e..3793946 100644 --- a/src/docbookgen.cpp +++ b/src/docbookgen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * -* +* * * Copyright (C) 1997-2015 by Dimitri van Heesch. * @@ -21,11 +21,14 @@ #include <qfile.h> #include <qtextstream.h> #include <qintdict.h> +#include <qregexp.h> #include "docbookgen.h" #include "doxygen.h" #include "message.h" #include "config.h" #include "classlist.h" +#include "classdef.h" +#include "diagram.h" #include "util.h" #include "defargs.h" #include "outputgen.h" @@ -54,6 +57,17 @@ // debug inside output //#define Docbook_DB(x) QCString __t;__t.sprintf x;m_t << __t +#if 0 +#define DB_GEN_C DB_GEN_C1(t) +#define DB_GEN_C1(x) x << "<!-- DB_GEN_C " << __LINE__ << " -->\n"; +#define DB_GEN_C2(y) DB_GEN_C2a(t,y) +#define DB_GEN_C2a(x,y) x << "<!-- DB_GEN_C " << __LINE__ << " " << y << " -->\n"; +#else +#define DB_GEN_C +#define DB_GEN_C1(x) +#define DB_GEN_C2(y) +#define DB_GEN_C2a(x,y) +#endif //------------------ class DocbookSectionMapper : public QIntDict<char> @@ -104,7 +118,7 @@ static DocbookSectionMapper g_docbookSectionMapper; inline void writeDocbookString(FTextStream &t,const char *s) { - t << convertToXML(s); + t << convertToDocBook(s); } inline void writeDocbookCodeString(FTextStream &t,const char *s, int &col) @@ -128,27 +142,44 @@ inline void writeDocbookCodeString(FTextStream &t,const char *s, int &col) case '&': t << "&"; col++; break; case '\'': t << "'"; col++; break; case '"': t << """; col++; break; + case '\007': t << "^G"; col++; break; // bell + case '\014': t << "^L"; col++; break; // form feed default: t << c; col++; break; } } } -static void writeDocbookHeaderMainpage(FTextStream &t) +static void writeDocbookHeaderMainpage(FTextStream &t, QCString &pageName) { t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;; - t << "<chapter xmlns=\"http://docbook.org/ns/docbook\" version=\"5.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">" << endl; + t << "<chapter xmlns=\"http://docbook.org/ns/docbook\" version=\"5.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\""; + if (!pageName.isEmpty()) t << " xml:id=\"_" << pageName << "\""; + t << ">" << endl; } static void writeDocbookHeader_ID(FTextStream &t, QCString id) { t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;; - t << "<section xmlns=\"http://docbook.org/ns/docbook\" version=\"5.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:id=\"" << id << "\">" << endl; + t << "<section xmlns=\"http://docbook.org/ns/docbook\" version=\"5.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:id=\"_" << id << "\">" << endl; } +static void addIndexTerm(FTextStream &t, QCString prim, QCString sec = "") +{ + t << "<indexterm><primary>"; + t << convertToDocBook(prim); + t << "</primary>"; + if (!sec.isEmpty()) + { + t << "<secondary>"; + t << convertToDocBook(sec); + t << "</secondary>"; + } + t << "</indexterm>" << endl; +} void writeDocbookLink(FTextStream &t,const char * /*extRef*/,const char *compoundId, const char *anchorId,const char * text,const char * /*tooltip*/) { - t << "<link linkend=\"" << compoundId; + t << "<link linkend=\"_" << stripPath(compoundId); if (anchorId) t << "_1" << anchorId; t << "\""; t << ">"; @@ -175,110 +206,127 @@ class TextGeneratorDocbookImpl : public TextGeneratorIntf FTextStream &m_t; }; -class DocbookCodeGenerator : public CodeOutputInterface +DocbookCodeGenerator::DocbookCodeGenerator(FTextStream &t) : m_lineNumber(-1), m_col(0), + m_insideCodeLine(FALSE), m_insideSpecialHL(FALSE) { - public: - DocbookCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1), m_col(0), - m_insideCodeLine(FALSE), m_insideSpecialHL(FALSE) {} - virtual ~DocbookCodeGenerator() {} + m_prettyCode=Config_getBool(DOCBOOK_PROGRAMLISTING); + setTextStream(t); +} - void codify(const char *text) - { - Docbook_DB(("(codify \"%s\")\n",text)); - writeDocbookCodeString(m_t,text,m_col); - } - void writeCodeLink(const char *ref,const char *file, - const char *anchor,const char *name, - const char *tooltip) - { - Docbook_DB(("(writeCodeLink)\n")); - writeDocbookLink(m_t,ref,file,anchor,name,tooltip); - m_col+=strlen(name); - } - void writeTooltip(const char *, const DocLinkInfo &, const char *, - const char *, const SourceLinkInfo &, const SourceLinkInfo & - ) - { - Docbook_DB(("(writeToolTip)\n")); - } - void startCodeLine(bool) - { - Docbook_DB(("(startCodeLine)\n")); - if (m_lineNumber!=-1) - { - if (!m_refId.isEmpty()) - { - m_t << "<link linkend=\"" << m_refId << "\">"; - } - m_t << m_lineNumber << " "; - if (!m_refId.isEmpty()) - { - m_t << "</link>"; - } - } - m_insideCodeLine=TRUE; - m_col=0; - } - void endCodeLine() - { - m_t << endl; - Docbook_DB(("(endCodeLine)\n")); - m_lineNumber = -1; - m_refId.resize(0); - m_external.resize(0); - m_insideCodeLine=FALSE; - } - void startFontClass(const char *colorClass) - { - Docbook_DB(("(startFontClass)\n")); - m_t << "<emphasis class=\"" << colorClass << "\">"; - m_insideSpecialHL=TRUE; - } - void endFontClass() - { - Docbook_DB(("(endFontClass)\n")); - m_t << "</emphasis>"; // non DocBook - m_insideSpecialHL=FALSE; - } - void writeCodeAnchor(const char *) - { - Docbook_DB(("(writeCodeAnchor)\n")); - } - void writeLineNumber(const char *extRef,const char *compId, - const char *anchorId,int l) - { - Docbook_DB(("(writeLineNumber)\n")); - // we remember the information provided here to use it - // at the <codeline> start tag. - m_lineNumber = l; - if (compId) - { - m_refId=compId; - if (anchorId) m_refId+=(QCString)"_1"+anchorId; - if (extRef) m_external=extRef; - } - } - void setCurrentDoc(Definition *,const char *,bool) - { - } - void addWord(const char *,bool) +DocbookCodeGenerator::DocbookCodeGenerator() : m_lineNumber(-1), m_col(0), + m_insideCodeLine(FALSE), m_insideSpecialHL(FALSE), m_streamSet(FALSE) +{ + m_prettyCode=Config_getBool(DOCBOOK_PROGRAMLISTING); +} + +DocbookCodeGenerator::~DocbookCodeGenerator() {} + +void DocbookCodeGenerator::codify(const char *text) +{ + Docbook_DB(("(codify \"%s\")\n",text)); + writeDocbookCodeString(m_t,text,m_col); +} +void DocbookCodeGenerator::writeCodeLink(const char *ref,const char *file, + const char *anchor,const char *name, + const char *tooltip) +{ + Docbook_DB(("(writeCodeLink)\n")); + writeDocbookLink(m_t,ref,file,anchor,name,tooltip); + m_col+=strlen(name); +} +void DocbookCodeGenerator::writeCodeLinkLine(const char *ref,const char *file, + const char *anchor,const char *name, + const char *tooltip) +{ + Docbook_DB(("(writeCodeLinkLine)\n")); + m_t << "<anchor xml:id=\"_" << stripExtensionGeneral(stripPath(file),".xml"); + m_t << "_1l"; + writeDocbookString(m_t,name); + m_t << "\"/>"; + m_col+=strlen(name); +} +void DocbookCodeGenerator::writeTooltip(const char *, const DocLinkInfo &, const char *, + const char *, const SourceLinkInfo &, const SourceLinkInfo & + ) +{ + Docbook_DB(("(writeToolTip)\n")); +} +void DocbookCodeGenerator::startCodeLine(bool) +{ + Docbook_DB(("(startCodeLine)\n")); + m_insideCodeLine=TRUE; + m_col=0; +} +void DocbookCodeGenerator::endCodeLine() +{ + m_t << endl; + Docbook_DB(("(endCodeLine)\n")); + m_lineNumber = -1; + m_refId.resize(0); + m_external.resize(0); + m_insideCodeLine=FALSE; +} +void DocbookCodeGenerator::startFontClass(const char *colorClass) +{ + Docbook_DB(("(startFontClass)\n")); + m_t << "<emphasis role=\"" << colorClass << "\">"; + m_insideSpecialHL=TRUE; +} +void DocbookCodeGenerator::endFontClass() +{ + Docbook_DB(("(endFontClass)\n")); + m_t << "</emphasis>"; // non DocBook + m_insideSpecialHL=FALSE; +} +void DocbookCodeGenerator::writeCodeAnchor(const char *) +{ + Docbook_DB(("(writeCodeAnchor)\n")); +} +void DocbookCodeGenerator::writeLineNumber(const char *ref,const char *fileName, + const char *anchor,int l) +{ + Docbook_DB(("(writeLineNumber)\n")); + m_insideCodeLine = TRUE; + if (m_prettyCode) + { + QCString lineNumber; + lineNumber.sprintf("%05d",l); + + if (fileName && !m_sourceFileName.isEmpty()) { + writeCodeLinkLine(ref,m_sourceFileName,anchor,lineNumber,0); + writeCodeLink(ref,fileName,anchor,lineNumber,0); } - void finish() + else { - if (m_insideCodeLine) endCodeLine(); + codify(lineNumber); } + m_t << " "; + } + else + { + m_t << l << " "; + } - private: - FTextStream &m_t; - QCString m_refId; - QCString m_external; - int m_lineNumber; - int m_col; - bool m_insideCodeLine; - bool m_insideSpecialHL; -}; - +} +void DocbookCodeGenerator::setCurrentDoc(Definition *,const char *,bool) +{ +} +void DocbookCodeGenerator::addWord(const char *,bool) +{ +} +void DocbookCodeGenerator::finish() +{ + if (m_insideCodeLine) endCodeLine(); +} +void DocbookCodeGenerator::startCodeFragment() +{ + m_t << "<literallayout><computeroutput>" << endl; +} +void DocbookCodeGenerator::endCodeFragment() +{ + m_t << "</computeroutput></literallayout>" << endl; +} static void writeTemplateArgumentList(ArgumentList *al, FTextStream &t, @@ -389,10 +437,205 @@ static QCString memberOutputFileBase(MemberDef *md) return md->getOutputFileBase(); } +static void generateTOC(FTextStream &t, PageDef *pd) +{ + if (pd->localToc().isDocbookEnabled()) + { + t << " <toc>" << endl; + t << " <title>" << theTranslator->trRTFTableOfContents() << "</title>" << endl; + SectionDict *sectionDict = pd->getSectionDict(); + SDict<SectionInfo>::Iterator li(*sectionDict); + SectionInfo *si; + int level=1,l; + bool inLi[5]={ FALSE, FALSE, FALSE, FALSE, FALSE }; + int maxLevel = pd->localToc().docbookLevel(); + for (li.toFirst();(si=li.current());++li) + { + if (si->type==SectionInfo::Section || + si->type==SectionInfo::Subsection || + si->type==SectionInfo::Subsubsection || + si->type==SectionInfo::Paragraph) + { + //printf(" level=%d title=%s\n",level,si->title.data()); + int nextLevel = (int)si->type; + if (nextLevel>level) + { + for (l=level;l<nextLevel;l++) + { + if (l < maxLevel) t << " <tocdiv>" << endl; + } + } + else if (nextLevel<level) + { + for (l=level;l>nextLevel;l--) + { + inLi[l]=FALSE; + if (l <= maxLevel) t << " </tocdiv>" << endl; + } + } + if (nextLevel <= maxLevel) + { + QCString titleDoc = convertToDocBook(si->title); + t << " <tocentry>" << (si->title.isEmpty()?si->label:titleDoc) << "</tocentry>" << endl; + } + inLi[nextLevel]=TRUE; + level = nextLevel; + } + } + t << " </toc>" << endl; + } +} + +static void generateSourceRefList(FTextStream &t,const char *scopeName, const QCString &text,MemberSDict *members, Definition *def) +{ + static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); + static bool refLinkSource = Config_getBool(REFERENCES_LINK_SOURCE); -static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *def, bool detailed=0) + if (members) + { + members->sort(); + + t << "<formalpara><title>" << convertToDocBook(text) << "</title><para>"; + + QCString ldefLine=theTranslator->trWriteList(members->count()); + + QRegExp marker("@[0-9]+"); + int index=0,newIndex,matchLen; + // now replace all markers in inheritLine with links to the classes + while ((newIndex=marker.match(ldefLine,index,&matchLen))!=-1) + { + bool ok; + t << convertToDocBook(ldefLine.mid(index,newIndex-index)); + uint entryIndex = ldefLine.mid(newIndex+1,matchLen-1).toUInt(&ok); + MemberDef *md=members->at(entryIndex); + if (ok && md) + { + QCString scope=md->getScopeString(); + QCString name=md->name(); + //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),scope.data(),scopeName); + if (!scope.isEmpty() && scope!=scopeName) + { + name.prepend(scope+getLanguageSpecificSeparator(def->getLanguage())); + } + if (!md->isObjCMethod() && + (md->isFunction() || md->isSlot() || + md->isPrototype() || md->isSignal() + ) + ) + { + name+="()"; + } + //Definition *d = md->getOutputFileBase(); + //if (d==Doxygen::globalScope) d=md->getBodyDef(); + if (sourceBrowser && + !(md->isLinkable() && !refLinkSource) && + md->getStartBodyLine()!=-1 && + md->getBodyDef() + ) + { + //printf("md->getBodyDef()=%p global=%p\n",md->getBodyDef(),Doxygen::globalScope); + + const int maxLineNrStr = 10; + char anchorStr[maxLineNrStr]; + qsnprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine()); + //printf("Write object link to %s\n",md->getBodyDef()->getSourceFileBase().data()); + t << convertToDocBook(name); + // or + // ol.writeObjectLink(0,md->getBodyDef()->getSourceFileBase(),anchorStr,name); + } + else if (md->isLinkable() /*&& d && d->isLinkable()*/) + { + t << convertToDocBook(name); + // or + // ol.writeObjectLink(md->getReference(), md->getOutputFileBase(), md->anchor(),name); + } + else + { + t << convertToDocBook(name); + } + } + index=newIndex+matchLen; + } + t << ldefLine.right(ldefLine.length()-index); + t<< "."; + t << "</para></formalpara>"; + } +} +static void generateInlineCode(FTextStream &t,const char *scopeName, Definition *def) +{ + static bool inlineSources = Config_getBool(INLINE_SOURCES); + //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(), + // m_startBodyLine,m_endBodyLine,m_bodyDef); + if (inlineSources && def->hasSources()) + { + QCString codeFragment; + int actualStart=def->getStartBodyLine(),actualEnd=def->getEndBodyLine(); + if (readCodeFragment(def->getBodyDef()->absFilePath(), + actualStart,actualEnd,codeFragment) + ) + { + //printf("Adding code fragment '%s' ext='%s'\n", + // codeFragment.data(),m_impl->defFileExt.data()); + ParserInterface *pIntf = Doxygen::parserManager->getParser(def->getDefFileExtension()); + pIntf->resetCodeParserState(); + //printf("Read:\n`%s'\n\n",codeFragment.data()); + MemberDef *thisMd = 0; + if (def->definitionType()==Definition::TypeMember) thisMd = (MemberDef *)def; + + DocbookCodeGenerator *docbookGen = new DocbookCodeGenerator(t); + docbookGen->startCodeFragment(); + pIntf->parseCode(*docbookGen, // codeOutIntf + scopeName, // scope + codeFragment, // input + def->getLanguage(), // lang + FALSE, // isExample + 0, // exampleName + def->getBodyDef(), // fileDef + actualStart, // startLine + actualEnd, // endLine + TRUE, // inlineFragment + thisMd, // memberDef + TRUE // show line numbers + ); + docbookGen->finish(); + docbookGen->endCodeFragment(); + delete docbookGen; + } + } +} + +static void definedAtLine(int line, QCString fileName, FTextStream &t) { + QCString refText = theTranslator->trDefinedAtLineInSourceFile(); + int lineMarkerPos = refText.find("@0"); + int fileMarkerPos = refText.find("@1"); + if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this. + { + if (lineMarkerPos<fileMarkerPos) // line marker before file marker + { + t << refText.left(lineMarkerPos) + << line + << refText.mid(lineMarkerPos+2, fileMarkerPos-lineMarkerPos-2) + << fileName + << refText.right(refText.length()-fileMarkerPos-2); + } + else // file marker before line marker + { + t << refText.left(fileMarkerPos) + << fileName + << refText.mid(fileMarkerPos+2, lineMarkerPos-fileMarkerPos-2) + << line + << refText.right(refText.length()-lineMarkerPos-2); + } + } + else + { + err("translation error: invalid markers in trDefinedAtLineInSourceFile()\n"); + } +} +static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *def, bool detailed=0) +{ // + declaration/definition arg lists // + reimplements // + reimplementedBy @@ -441,17 +684,18 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de { scopeName=md->getNamespaceDef()->name(); } - if (detailed==0) + if (detailed==0) { t << " <para>" << endl; t << " <itemizedlist>" << endl; t << " <listitem>" << endl; //enum bool closePara=TRUE; - if (md->memberType()==MemberType_Enumeration) + if (md->memberType()==MemberType_Enumeration) { + bool inLi[5]={ FALSE, FALSE, FALSE, FALSE, FALSE }; MemberList *enumFields = md->enumFieldList(); - t << " <para><literallayout>" << memType << " <link linkend=\""; + t << " <para><literallayout>" << memType << " <link linkend=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -460,23 +704,23 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de { t << memberOutputFileBase(md); } - t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>"; - if (enumFields!=0) + t << "_1" << md->anchor() << "\">" << convertToDocBook(md->name()) << "</link>"; + if (enumFields!=0) { MemberListIterator emli(*enumFields); MemberDef *emd; t << " {" << endl; int cnt=0; - for (emli.toFirst();(emd=emli.current());++emli) + for (emli.toFirst();(emd=emli.current());++emli) { - if (cnt!=0) + if (cnt!=0) { t << "," << endl; } - t << "<link linkend=\"" << memberOutputFileBase(emd) << "_1" << emd->anchor() << "\">"; + t << "<link linkend=\"_" << memberOutputFileBase(emd) << "_1" << emd->anchor() << "\">"; writeDocbookString(t,emd->name()); t << "</link>"; - if (!emd->initializer().isEmpty()) + if (!emd->initializer().isEmpty()) { writeDocbookString(t,emd->initializer()); } @@ -492,9 +736,9 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << "</emphasis></para>" << endl; } } - else if (md->memberType()==MemberType_Define) + else if (md->memberType()==MemberType_Define) { - t << " <para>" << "#" << memType << " <link linkend=\""; + t << " <para>" << "#" << memType << " <link linkend=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -503,36 +747,36 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de { t << memberOutputFileBase(md); } - t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>"; - if (!md->initializer().isEmpty() && md->initializer().length()<2000) + t << "_1" << md->anchor() << "\">" << convertToDocBook(md->name()) << "</link>"; + if (!md->initializer().isEmpty() && md->initializer().length()<2000) { t << " "; linkifyText(TextGeneratorDocbookImpl(t),def,md->getBodyDef(),md,md->initializer()); } - if (md->briefDescription()) + if (md->briefDescription()) { t << "<para><emphasis>"; writeDocbookString(t,md->briefDescription()); t << "</emphasis></para>" << endl; } } - else if (md->memberType()==MemberType_Variable) + else if (md->memberType()==MemberType_Variable) { - if (md->getClassDef()) + if (md->getClassDef()) { - t << " <para>" << convertToXML(md->declaration()); - if (md->briefDescription()) + t << " <para>" << convertToDocBook(md->declaration()); + if (md->briefDescription()) { t << "<para><emphasis>"; writeDocbookString(t,md->briefDescription()); t << "</emphasis></para>"; } - } - else + } + else { t << " <para>"; linkifyText(TextGeneratorDocbookImpl(t),def,md->getBodyDef(),md,md->typeString()); - t << " <link linkend=\""; + t << " <link linkend=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -541,7 +785,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de { t << memberOutputFileBase(md); } - t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>"; + t << "_1" << md->anchor() << "\">" << convertToDocBook(md->name()) << "</link>"; if (md->briefDescription()) { t << "<para><emphasis>"; @@ -550,13 +794,13 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de } } } - else if (md->memberType()==MemberType_Typedef) + else if (md->memberType()==MemberType_Typedef) { t << " <para>" << memType; t << " "; linkifyText(TextGeneratorDocbookImpl(t),def,md->getBodyDef(),md,md->typeString()); t << " "; - t << " <link linkend=\""; + t << " <link linkend=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -565,7 +809,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de { t << memberOutputFileBase(md); } - t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>"; + t << "_1" << md->anchor() << "\">" << convertToDocBook(md->name()) << "</link>"; if (md->briefDescription()) { t << "<para><emphasis>"; @@ -573,11 +817,11 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << "</emphasis></para>" << endl; } } - else if (md->memberType()==MemberType_Function) + else if (md->memberType()==MemberType_Function) { t << " <para>"; linkifyText(TextGeneratorDocbookImpl(t),def,md->getBodyDef(),md,md->typeString()); - t << " <link linkend=\""; + t << " <link linkend=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -586,7 +830,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de { t << memberOutputFileBase(md); } - t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>"; + t << "_1" << md->anchor() << "\">" << convertToDocBook(md->name()) << "</link>"; t << " (" << endl; ArgumentList *declAl = md->declArgumentList(); if (declAl && declAl->count()>0) @@ -596,7 +840,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de int cnt=0; for (declAli.toFirst();(a=declAli.current());++declAli) { - if (cnt!=0) + if (cnt!=0) { t << ", "; } @@ -634,7 +878,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de if (md->memberType()==MemberType_Enumeration) { MemberList *enumFields = md->enumFieldList(); - t << " <section xml:id=\""; + t << " <section xml:id=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -644,20 +888,20 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << memberOutputFileBase(md); } t << "_1" << md->anchor() << "\">" << endl; - t << " <title>" << memType << " " << convertToXML(md->name()) << " " << "</title>" << endl; + t << " <title>" << memType << " " << convertToDocBook(md->name()) << " " << "</title>" << endl; t << " "; writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation()); t << endl; - if (enumFields!=0) + if (enumFields!=0) { MemberListIterator emli(*enumFields); MemberDef *emd; t << " <formalpara>" << endl; t << " <title>" << theTranslator->trEnumerationValues() << ":</title>" << endl; t << " <variablelist>" << endl; - for (emli.toFirst();(emd=emli.current());++emli) + for (emli.toFirst();(emd=emli.current());++emli) { - t << " <varlistentry xml:id=\""; + t << " <varlistentry xml:id=\"_"; t << memberOutputFileBase(emd) << "_1" << emd->anchor() << "\">" << endl; t << " <term>"; writeDocbookString(t,emd->name()); @@ -675,27 +919,30 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << " </variablelist>" << endl; t << " </formalpara>" << endl; t << " <para>"; - t << "Definition at line " << md->getDefLine() << " of file " << stripPath(md->getDefFileName()) << endl; - t << " <computeroutput><literallayout>" << endl; + t << " <para>"; + definedAtLine(md->getDefLine(),stripPath(md->getDefFileName()),t); + t << "</para>" << endl; + + t << " <literallayout><computeroutput>" << endl; t << "{" << endl; - for (emli.toFirst();(emd=emli.current());++emli) + for (emli.toFirst();(emd=emli.current());++emli) { writeDocbookString(t,emd->name()); - if (!emd->initializer().isEmpty()) + if (!emd->initializer().isEmpty()) { writeDocbookString(t,emd->initializer()); } t << ", " << endl; } - t << "}" << convertToXML(md->name()) << ";" << endl; - t << " </literallayout></computeroutput>" << endl; + t << "}" << convertToDocBook(md->name()) << ";" << endl; + t << " </computeroutput></literallayout>" << endl; t << " </para>" << endl; - t << " </section>" << endl; } + t << " </section>" << endl; } - else if (md->memberType()==MemberType_Typedef) + else if (md->memberType()==MemberType_Typedef) { - t << " <section xml:id=\""; + t << " <section xml:id=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -705,7 +952,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << memberOutputFileBase(md); } t << "_1" << md->anchor() << "\">" << endl; - t << " <title>" << convertToXML(md->definition()) << "</title>"; + t << " <title>" << convertToDocBook(md->definition()) << "</title>"; if(Config_getBool(REPEAT_BRIEF)) { t << " <emphasis>"; @@ -717,9 +964,9 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << endl; t << " </section>" << endl; } - else if (md->memberType()==MemberType_Function) + else if (md->memberType()==MemberType_Function) { - t << " <section xml:id=\""; + t << " <section xml:id=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -729,23 +976,38 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << memberOutputFileBase(md); } t << "_1" << md->anchor() << "\">" << endl; - t << " <title>" << convertToXML(md->definition()) << " " << convertToXML(md->argsString()) << "</title>"; + t << " <title>" << convertToDocBook(md->definition()) << " " << convertToDocBook(md->argsString()) << "</title>"; + addIndexTerm(t,md->name(),def->name()); + addIndexTerm(t,def->name(),md->name()); if(Config_getBool(REPEAT_BRIEF)) { + if (!md->briefDescription().isEmpty()) + { t << " <emphasis>"; writeDocbookString(t,md->briefDescription()); t << "</emphasis>" << endl; + } } t << " "; writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation()); t << endl; + + if (Config_getBool(REFERENCED_BY_RELATION)) + { + generateSourceRefList(t,md->name(),theTranslator->trReferencedBy(),md->getReferencedByMembers(),md); + } + if (Config_getBool(REFERENCES_RELATION)) + { + generateSourceRefList(t,md->name(),theTranslator->trReferences(),md->getReferencesMembers(),md); + } + generateInlineCode(t,md->name(),md); t << " </section>" << endl; } - else if (md->memberType()==MemberType_Define) + else if (md->memberType()==MemberType_Define) { - if (md->documentation()) + if (md->documentation()) { - t << " <section xml:id=\""; + t << " <section xml:id=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -755,36 +1017,41 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << memberOutputFileBase(md); } t << "_1" << md->anchor() << "\">" << endl; - t << " <title>" << convertToXML(md->definition()) << "</title>"; + t << " <title>" << convertToDocBook(md->definition()) << "</title>"; t << " "; writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation()); t << endl; - t << " <para>Definition at line " << md->getDefLine() << " of file " << stripPath(md->getDefFileName()) << "</para>" << endl; - t << " <para>The Documentation for this define was generated from the following file: </para>" << endl; - t << " <para><itemizedlist><listitem><para>" << stripPath(md->getDefFileName()) << "</para></listitem></itemizedlist></para>" << endl; t << " </section>" << endl; } } - else if (md->memberType()==MemberType_Variable) + else if (md->memberType()==MemberType_Variable) { - if (md->getClassDef()) + if (md->getClassDef()) { - if (md->documentation()) + if (md->documentation()) { - t << " <simplesect>" << endl; - t << " <title>" << convertToXML(md->definition()) << "</title>"; + t << " <section xml:id=\"_"; + if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) + { + t << md->getGroupDef()->getOutputFileBase(); + } + else + { + t << memberOutputFileBase(md); + } + t << "_1" << md->anchor() << "\">" << endl; + t << " <title>" << convertToDocBook(md->definition()) << "</title>"; + addIndexTerm(t,md->name(),def->name()); + addIndexTerm(t,def->name(),md->name()); t << " "; writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation()); t << endl; - t << " <para>Definition at line " << md->getDefLine() << " of file " << stripPath(md->getDefFileName()) << "</para>" << endl; - t << " <para>The Documentation for this struct was generated from the following file: </para>" << endl; - t << " <para><itemizedlist><listitem><para>" << stripPath(md->getDefFileName()) << "</para></listitem></itemizedlist></para>" << endl; - t << " </simplesect>" << endl; + t << " </section>" << endl; } } - else + else { - t << " <section xml:id=\""; + t << " <section xml:id=\"_"; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -794,7 +1061,9 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << memberOutputFileBase(md); } t << "_1" << md->anchor() << "\">" << endl; - t << " <title>" << convertToXML(md->definition()) << "</title>"; + t << " <title>" << convertToDocBook(md->definition()) << "</title>"; + addIndexTerm(t,md->name(),def->name()); + addIndexTerm(t,def->name(),md->name()); if(Config_getBool(REPEAT_BRIEF)) { t << " <emphasis>"; @@ -818,23 +1087,33 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c MemberDef *md; int count=0; int doc_count=0; - QCString title, desctitle; + QCString title, desctitle, subtitle; - for (mli.toFirst();(md=mli.current());++mli) + for (mli.toFirst();(md=mli.current());++mli) { // namespace members are also inserted in the file scope, but // to prevent this duplication in the Docbook output, we filter those here. - if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) + if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) { count++; } } - + if (count==0) return; // empty list + subtitle = ""; switch (ml->listType()) { - case MemberListType_decDefineMembers: title=theTranslator->trDefines(); desctitle=theTranslator->trDefineDocumentation(); break; + case MemberListType_pubMethods: d->getLanguage()==SrcLangExt_ObjC ? title = theTranslator->trInstanceMethods() : title = theTranslator->trPublicMembers(); + switch (d->getLanguage()) + { + case SrcLangExt_ObjC: desctitle = theTranslator->trMethodDocumentation(); break; + case SrcLangExt_Fortran: desctitle = theTranslator->trMemberFunctionDocumentationFortran(); break; + default: desctitle = theTranslator->trMemberFunctionDocumentation(); break; + }; + break; + case MemberListType_priMethods: title=theTranslator->trPrivateMembers(); desctitle=""; break; + case MemberListType_decTypedefMembers: title=theTranslator->trTypedefs(); desctitle=theTranslator->trTypedefDocumentation(); break; case MemberListType_decEnumMembers: title=theTranslator->trEnumerations(); desctitle=theTranslator->trEnumerationTypeDocumentation(); break; case MemberListType_decFuncMembers: title=theTranslator->trFunctions(); desctitle=theTranslator->trFunctionDocumentation(); break; @@ -842,10 +1121,13 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c case MemberListType_pubAttribs: title=theTranslator->trPublicAttribs(); desctitle=theTranslator->trMemberDataDocumentation(); break; case MemberListType_priAttribs: title=theTranslator->trPrivateAttribs(); desctitle=theTranslator->trMemberDataDocumentation(); break; case MemberListType_proAttribs: title=theTranslator->trProtectedAttribs(); desctitle=theTranslator->trMemberDataDocumentation(); break; - default: title=""; desctitle=""; break; + case MemberListType_decDefineMembers: title=theTranslator->trDefines(); desctitle=theTranslator->trDefineDocumentation(); break; + case MemberListType_related: title=theTranslator->trRelatedFunctions(); desctitle=theTranslator->trRelatedFunctionDocumentation(); + subtitle=theTranslator->trRelatedSubscript(); break; + default: title=""; desctitle=""; } - if (detailed) + if (detailed) { for (mli.toFirst();(md=mli.current());++mli) { @@ -857,40 +1139,45 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c break; } - if(doc_count == 0) + if(doc_count == 0) return; + + if (!QCString(header).isEmpty()) { - return; + t << " <section>" << endl; + t << " <title>" << convertToDocBook(header) << "</title>" << endl; } - - if (desctitle) + else if (desctitle) { - t << " <section>" << endl; - t << " <title>" << desctitle << "</title>" << endl; + t << " <section>" << endl; + t << " <title>" << desctitle << "</title>" << endl; } - } else + } + else { t << " <section>" << endl; - if (header) + if (!QCString(header).isEmpty()) { - t << " <title>" << convertToXML(header) << "</title>" << endl; - } - else + t << " <title>" << convertToDocBook(header) << "</title>" << endl; + } + else { t << " <title>" << title << "</title>" << endl; } + if (!subtitle.isEmpty()) + t << " <para>" << subtitle << "</para>" << endl; } - if (documentation) + if (documentation) { t << " <description>"; writeDocbookDocBlock(t,d->docFile(),d->docLine(),d,0,documentation); t << "</description>" << endl; } - for (mli.toFirst();(md=mli.current());++mli) + for (mli.toFirst();(md=mli.current());++mli) { // namespace members are also inserted in the file scope, but // to prevent this duplication in the Docbook output, we filter those here. - if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) + if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) { if (detailed && md->documentation().isEmpty() && !Config_getBool(REPEAT_BRIEF)) { @@ -900,14 +1187,18 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c generateDocbookForMember(md,t,d,detailed); } } - if (detailed) + if (detailed) { - if (desctitle) + if (!QCString(header).isEmpty()) + { + t << " </section>" << endl; + } + else if (desctitle) { - t << " </section>" << endl; + t << " </section>" << endl; } - } - else + } + else { t << " </section>" << endl; } @@ -921,19 +1212,19 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t) ClassDef *cd; QCString title = theTranslator->trClasses(); - if (cli.toFirst()) + if (cli.toFirst()) { t << " <section>" << endl; t << " <title> " << title << " </title>" << endl; } for (cli.toFirst();(cd=cli.current());++cli) { - if (!cd->isHidden() && cd->name().find('@')==-1) + if (!cd->isHidden() && cd->name().find('@')==-1) { t << " <para>" << endl; t << " <itemizedlist>" << endl; t << " <listitem>" << endl; - t << " <para>" << "struct <link linkend=\"" << classOutputFileBase(cd) << "\">" << convertToXML(cd->name()) << "</link>"; + t << " <para>" << "struct <link linkend=\"_" << classOutputFileBase(cd) << "\">" << convertToDocBook(cd->name()) << "</link>"; t << "</para>" << endl; if (cd->briefDescription()) { @@ -946,7 +1237,7 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t) t << " </para>" << endl; } } - if (cli.toFirst()) + if (cli.toFirst()) { t << " </section>" << endl; } @@ -961,7 +1252,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,FTextStream &t) NamespaceDef *nd; QCString title = theTranslator->trNamespaces(); - if (nli.toFirst()) + if (nli.toFirst()) { t << " <simplesect>" << endl; t << " <title> " << title << " </title>" << endl; @@ -973,14 +1264,14 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,FTextStream &t) t << " <para>" << endl; t << " <itemizedlist>" << endl; t << " <listitem>" << endl; - t << " <para>" << "struct <link linkend=\"" << nd->getOutputFileBase() << "\">" << convertToXML(nd->name()) << "</link>"; + t << " <para>" << "struct <link linkend=\"_" << nd->getOutputFileBase() << "\">" << convertToDocBook(nd->name()) << "</link>"; t << "</para>" << endl; t << " </listitem>" << endl; t << " </itemizedlist>" << endl; t << " </para>" << endl; } } - if (nli.toFirst()) + if (nli.toFirst()) { t << " </simplesect>" << endl; } @@ -995,23 +1286,23 @@ static void writeInnerFiles(const FileList *fl,FTextStream &t) FileDef *fd; QCString title = theTranslator->trFile(TRUE,TRUE); - if (fli.toFirst()) + if (fli.toFirst()) { t << " <simplesect>" << endl; t << " <title> " << title << " </title>" << endl; } - for (fli.toFirst();(fd=fli.current());++fli) + for (fli.toFirst();(fd=fli.current());++fli) { t << " <para>" << endl; t << " <itemizedlist>" << endl; t << " <listitem>" << endl; - t << " <para>" << "file <link linkend=\"" << fd->getOutputFileBase() << "\">" << convertToXML(fd->name()) << "</link>"; + t << " <para>" << "file <link linkend=\"_" << fd->getOutputFileBase() << "\">" << convertToDocBook(fd->name()) << "</link>"; t << "</para>" << endl; t << " </listitem>" << endl; t << " </itemizedlist>" << endl; t << " </para>" << endl; } - if (fli.toFirst()) + if (fli.toFirst()) { t << " </simplesect>" << endl; } @@ -1040,7 +1331,7 @@ static void writeInnerGroups(const GroupList *gl,FTextStream &t) GroupDef *sgd; //Docbook header tags for inner groups - if (gli.toFirst()) + if (gli.toFirst()) { t << " <simplesect>" << endl; t << " <title>" << theTranslator->trModules() << "</title>" << endl; @@ -1051,11 +1342,11 @@ static void writeInnerGroups(const GroupList *gl,FTextStream &t) for (gli.toFirst();(sgd=gli.current());++gli) { - t << " <listitem><para><link linkend=\"" << sgd->getOutputFileBase() << "\">" << convertToXML(sgd->groupTitle()) << "</link></para></listitem>" << endl; + t << " <listitem><para><link linkend=\"_" << sgd->getOutputFileBase() << "\">" << convertToDocBook(sgd->groupTitle()) << "</link></para></listitem>" << endl; } //Docbook footer tags for inner groups - if (gli.toFirst()) + if (gli.toFirst()) { t << " </itemizedlist>" << endl; t << " </para>" << endl; @@ -1071,7 +1362,7 @@ static void writeInnerDirs(const DirList *dl,FTextStream &t) QListIterator<DirDef> subdirs(*dl); DirDef *subdir; QCString title = theTranslator->trDirectories(); - if (subdirs.toFirst()) + if (subdirs.toFirst()) { t << " <simplesect>" << endl; t << " <title> " << title << " </title>" << endl; @@ -1081,13 +1372,13 @@ static void writeInnerDirs(const DirList *dl,FTextStream &t) t << " <para>" << endl; t << " <itemizedlist>" << endl; t << " <listitem>" << endl; - t << " <para>" << "dir <link linkend=\"" << subdir->getOutputFileBase() << "\">" << convertToXML(subdir->displayName()) << "</link>"; + t << " <para>" << "dir <link linkend=\"_" << subdir->getOutputFileBase() << "\">" << convertToDocBook(subdir->displayName()) << "</link>"; t << "</para>" << endl; t << " </listitem>" << endl; t << " </itemizedlist>" << endl; t << " </para>" << endl; } - if (subdirs.toFirst()) + if (subdirs.toFirst()) { t << " </simplesect>" << endl; } @@ -1152,8 +1443,15 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) writeDocbookHeader_ID(t, classOutputFileBase(cd)); t << "<title>"; writeDocbookString(t,cd->name()); + addIndexTerm(t,cd->name()); t << " " << cd->compoundTypeString() << " Reference"; t << "</title>" << endl; + if (cd->briefDescription()) + { + t << " <para>" << endl; + writeDocbookDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription()); + t << " </para>" << endl; + } IncludeInfo *ii=cd->includeInfo(); if (ii) @@ -1166,7 +1464,7 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) t << " <programlisting>#include "; if (ii->fileDef && !ii->fileDef->isReference()) // TODO: support external references { - t << "<link linkend=\"" << ii->fileDef->getOutputFileBase() << "\">"; + t << "<link linkend=\"_" << ii->fileDef->getOutputFileBase() << "\">"; } if (ii->local) { @@ -1176,7 +1474,7 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) { t << "<"; } - t << convertToXML(nm); + t << convertToDocBook(nm); if (ii->local) { t << """; @@ -1196,14 +1494,14 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) if (Config_getBool(HAVE_DOT) && (Config_getBool(CLASS_DIAGRAMS) || Config_getBool(CLASS_GRAPH))) { - t << "<para>Inheritance diagram for " << convertToXML(cd->name()) << "</para>" << endl; + t << "<para>Inheritance diagram for " << convertToDocBook(cd->name()) << "</para>" << endl; DotClassGraph inheritanceGraph(cd,DotNode::Inheritance); inheritanceGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,TRUE,FALSE); } if (Config_getBool(HAVE_DOT) && Config_getBool(COLLABORATION_GRAPH)) { - t << "<para>Collaboration diagram for " << convertToXML(cd->name()) << "</para>" << endl; + t << "<para>Collaboration diagram for " << convertToDocBook(cd->name()) << "</para>" << endl; DotClassGraph collaborationGraph(cd,DotNode::Collaboration); collaborationGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,TRUE,FALSE); } @@ -1222,7 +1520,6 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) } } - QListIterator<MemberList> mli(cd->getMemberLists()); MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) @@ -1233,28 +1530,41 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) } } - if(Config_getBool(REPEAT_BRIEF)) + if ((Config_getBool(REPEAT_BRIEF) && cd->briefDescription()) || cd->documentation()) { - if (cd->briefDescription()) + t << " <simplesect>" << endl; + t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl; + + if(Config_getBool(REPEAT_BRIEF)) + { + if (cd->briefDescription()) { - t << " <simplesect>" << endl; + t << " <para>" << endl; // A title as 'Brief Description' may not be necessary. //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl; writeDocbookDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription()); - t << " </simplesect>" << endl; + t << " </para>" << endl; } + } + + if (cd->documentation()) + { + writeDocbookDocBlock(t,cd->docFile(),cd->docLine(),cd,0,cd->documentation()); + } + t << " </simplesect>" << endl; } - if (cd->documentation()) + if (cd->getMemberGroupSDict()) { - t << " <simplesect>" << endl; - t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl; - writeDocbookDocBlock(t,cd->docFile(),cd->docLine(),cd,0,cd->documentation()); - t << " <para>Definition at line " << cd->getDefLine() << " of file " << stripPath(cd->getDefFileName()) << "</para>" << endl; - t << " <para>The Documentation for this struct was generated from the following file: </para>" << endl; - t << " <para><itemizedlist><listitem><para>" << stripPath(cd->getDefFileName()) << "</para></listitem></itemizedlist></para>" << endl; - t << " </simplesect>" << endl; + MemberGroupSDict::Iterator mgli(*cd->getMemberGroupSDict()); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + generateDocbookSection(cd,t,mg->members(),"user-defined",1,mg->header(), + mg->documentation()); + } } + for (mli.toFirst();(ml=mli.current());++mli) { if ((ml->listType()&MemberListType_detailedLists)==0) @@ -1295,6 +1605,8 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) writeListOfAllMembers(cd,t); */ + t << " <para>" << cd->generatedFromFiles() << "</para>" << endl; + t << " <para><itemizedlist><listitem><para>" << stripPath(cd->getDefFileName()) << "</para></listitem></itemizedlist></para>" << endl; t << "</section>" << endl; } @@ -1329,9 +1641,16 @@ static void generateDocbookForNamespace(NamespaceDef *nd,FTextStream &ti) writeDocbookHeader_ID(t, nd->getOutputFileBase()); t << "<title>"; - writeDocbookString(t,nd->name()); + addIndexTerm(t,nd->displayName()); + writeDocbookString(t,nd->title()); t << "</title>" << endl; + if (nd->briefDescription()) + { + t << " <para>" << endl; + //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl; + t << " </para>" << endl; + } writeInnerClasses(nd->getClassSDict(),t); writeInnerNamespaces(nd->getNamespaceSDict(),t); @@ -1356,27 +1675,52 @@ static void generateDocbookForNamespace(NamespaceDef *nd,FTextStream &ti) } } - if(Config_getBool(REPEAT_BRIEF)) + if ((Config_getBool(REPEAT_BRIEF) && nd->briefDescription()) || nd->documentation()) { - if (nd->briefDescription()) + t << " <simplesect>" << endl; + t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl; + + if(Config_getBool(REPEAT_BRIEF)) + { + if (nd->briefDescription()) { - t << " <simplesect>" << endl; + t << " <para>" << endl; //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl; writeDocbookDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription()); - t << " </simplesect>" << endl; + t << " </para>" << endl; } + } + + if (nd->documentation()) + { + writeDocbookDocBlock(t,nd->docFile(),nd->docLine(),nd,0,nd->documentation()); + } + t << " </simplesect>" << endl; } - if (nd->documentation()) + if (nd->getMemberGroupSDict()) { - t << " <simplesect>" << endl; - t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl; - writeDocbookDocBlock(t,nd->docFile(),nd->docLine(),nd,0,nd->documentation()); - t << " <para>Definition at line " << nd->getDefLine() << " of file " << stripPath(nd->getDefFileName()) << "</para>" << endl; - t << " <para>The Documentation for this struct was generated from the following file: </para>" << endl; - t << " <para><itemizedlist><listitem><para>" << stripPath(nd->getDefFileName()) << "</para></listitem></itemizedlist></para>" << endl; - t << " </simplesect>" << endl; + MemberGroupSDict::Iterator mgli(*nd->getMemberGroupSDict()); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + generateDocbookSection(nd,t,mg->members(),"user-defined",1,mg->header(), + mg->documentation()); + } + } + + for (mli.toFirst();(ml=mli.current());++mli) + { + if ((ml->listType()&MemberListType_detailedLists)==0) + { + if (ml->listType() != MemberListType_allMembersList && + ml->listType() != MemberListType_docFuncMembers) + generateDocbookSection(nd,t,ml,g_docbookSectionMapper.find(ml->listType()),1); + } } + // we actually need here "namespace" + // t << " <para>" << theTranslator->trGeneratedFromFiles(ClassDef::Struct, FALSE) << "</para>" << endl; + // t << " <para><itemizedlist><listitem><para>" << stripPath(nd->getDefFileName()) << "</para></listitem></itemizedlist></para>" << endl; t << "</section>" << endl; } @@ -1421,6 +1765,13 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) t << " File Reference"; t << "</title>" << endl; + if (fd->briefDescription()) + { + t << " <para>" << endl; + writeDocbookDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription()); + t << " </para>" << endl; + } + IncludeInfo *inc; if (fd->includeFileList()) @@ -1437,7 +1788,7 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) { t << "<"; } - t << convertToXML(inc->includeName); + t << convertToDocBook(inc->includeName); if (inc->local) { t << """; @@ -1453,13 +1804,13 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) { if (Config_getBool(INCLUDE_GRAPH)) { - t << "<para>Include dependency diagram for " << convertToXML(fd->name()) << "</para>" << endl; + t << "<para>Include dependency diagram for " << convertToDocBook(fd->name()) << "</para>" << endl; DotInclDepGraph idepGraph(fd, FALSE); idepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE); } if (Config_getBool(INCLUDED_BY_GRAPH)) { - t << "<para>Included by dependency diagram for " << convertToXML(fd->name()) << "</para>" << endl; + t << "<para>Included by dependency diagram for " << convertToDocBook(fd->name()) << "</para>" << endl; DotInclDepGraph ibdepGraph(fd, TRUE); ibdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE); } @@ -1497,9 +1848,15 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) t << " <simplesect>" << endl; t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl; - writeDocbookDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription()); + if(Config_getBool(REPEAT_BRIEF)) + { + if (fd->briefDescription()) + { + writeDocbookDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription()); + } + } writeDocbookDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation()); - if (Config_getBool(FULL_PATH_NAMES)) + if (Config_getBool(FULL_PATH_NAMES)) { t << " <para>Definition in file " << fd->getDefFileName() << "</para>" << endl; } @@ -1509,9 +1866,17 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) } t << " </simplesect>" << endl; + for (mli.toFirst();(ml=mli.current());++mli) + { + if ((ml->listType()&MemberListType_declarationLists)!=0) + { + generateDocbookSection(fd,t,ml,g_docbookSectionMapper.find(ml->listType()),1); + } + } + if (Config_getBool(DOCBOOK_PROGRAMLISTING)) { - t << " <literallayout><computeroutput>" << endl; + t << " <literallayout><computeroutput>" << endl;; writeDocbookCodeBlock(t,fd); t << " </computeroutput></literallayout>" << endl; } @@ -1535,7 +1900,7 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti) if (gd->isReference()) return; // skip external references - if (!gd->isASubGroup()) + if (!gd->isASubGroup()) { QCString fileDocbook=gd->getOutputFileBase()+".xml"; //Add the file Documentation info to index file @@ -1557,31 +1922,21 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti) //t.setEncoding(FTextStream::UnicodeUTF8); writeDocbookHeader_ID(t, gd->getOutputFileBase()); - t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl; + t << " <title>" << convertToDocBook(gd->groupTitle()) << "</title>" << endl; + if (gd->briefDescription()) + { + t << " <para>" << endl; + writeDocbookDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription()); + t << " </para>" << endl; + } if (Config_getBool(GROUP_GRAPHS) && Config_getBool(HAVE_DOT)) { - t << "<para>Collaboration diagram for " << convertToXML(gd->groupTitle()) << "</para>" << endl; + t << "<para>Collaboration diagram for " << convertToDocBook(gd->groupTitle()) << "</para>" << endl; DotGroupCollaboration collaborationGraph(gd); collaborationGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE); } - if (gd->briefDescription()) - { - //t << " <section>" << endl; - //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl; - writeDocbookDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription()); - //t << " </section>" << endl; - } - - if (gd->documentation()) - { - t << " <section>" << endl; - t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl; - writeDocbookDocBlock(t,gd->docFile(),gd->docLine(),gd,0,gd->documentation()); - t << " </section>" << endl; - } - writeInnerFiles(gd->getFiles(),t); writeInnerClasses(gd->getClasses(),t); writeInnerNamespaces(gd->getNamespaces(),t); @@ -1608,6 +1963,26 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti) generateDocbookSection(gd,t,ml,g_docbookSectionMapper.find(ml->listType())); } } + + if(Config_getBool(REPEAT_BRIEF)) + { + if (gd->briefDescription()) + { + //t << " <section>" << endl; + //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl; + writeDocbookDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription()); + //t << " </section>" << endl; + } + } + + if (gd->documentation()) + { + t << " <simplesect>" << endl; + t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl; + writeDocbookDocBlock(t,gd->docFile(),gd->docLine(),gd,0,gd->documentation()); + t << " </simplesect>" << endl; + } + for (mli.toFirst();(ml=mli.current());++mli) { if ((ml->listType()&MemberListType_declarationLists)!=0) @@ -1648,9 +2023,13 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti) t << " <title>"; t << theTranslator->trDirReference(dd->displayName()); t << "</title>" << endl; + if (dd->briefDescription()) + { + writeDocbookDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription()); + } if (Config_getBool(DIRECTORY_GRAPH) && Config_getBool(HAVE_DOT)) { - t << "<para>Directory dependency diagram for " << convertToXML(dd->displayName()) << "</para>" << endl; + t << "<para>Directory dependency diagram for " << convertToDocBook(dd->displayName()) << "</para>" << endl; DotDirDeps dirdepGraph(dd); dirdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE); } @@ -1660,7 +2039,12 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti) t << " <simplesect>" << endl; t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl; - writeDocbookDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription()); + if (dd->briefDescription()) + { + t << " <para>" << endl; + writeDocbookDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription()); + t << " </para>" << endl; + } writeDocbookDocBlock(t,dd->docFile(),dd->docLine(),dd,0,dd->documentation()); t << " <para>Directory location is " << dd->name() << "</para>" << endl; t << " </simplesect>" << endl; @@ -1681,7 +2065,7 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample) { pageName+=(QCString)"_"+pd->name(); } - if (pageName=="index") + if (pageName=="index") { pageName="mainpage"; // to prevent overwriting the generated index page. } @@ -1709,9 +2093,9 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample) QCString fileDocbook=pageName+".xml"; //Add the file Documentation info to index file ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; - writeDocbookHeaderMainpage(t); - } - else + writeDocbookHeaderMainpage(t,pageName); + } + else { QCString pid; if(isExample) @@ -1728,13 +2112,17 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample) SectionInfo *si = Doxygen::sectionDict->find(pd->name()); if (si) { - t << " <title>" << convertToXML(si->title) << "</title>" << endl; - } - else + if ( pageName == "mainpage") + t << " <title>" << convertToDocBook(theTranslator->trMainPage()) << "</title>" << endl; + else + t << " <title>" << convertToDocBook(si->title) << "</title>" << endl; + } + else { - t << " <title>" << convertToXML(pd->name()) << "</title>" << endl; + t << " <title>" << convertToDocBook(pd->name()) << "</title>" << endl; } + generateTOC(t, pd); if (isExample) { writeDocbookDocBlock(t,pd->docFile(),pd->docLine(),pd,0, @@ -1750,14 +2138,13 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample) if (!pd->hasParentPage() && !isExample) { t << endl << "</chapter>" << endl; - } - else + } + else { t << endl << "</section>" << endl; } } - -void generateDocbook() +void generateDocbook_v1() { // + classes @@ -1824,7 +2211,7 @@ void generateDocbook() t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;; t << "<book xmlns=\"http://docbook.org/ns/docbook\" version=\"5.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">" << endl; t << " <info>" << endl; - t << " <title>" << dbk_projectName << "</title>" << endl; + t << " <title>" << convertToDocBook(dbk_projectName) << "</title>" << endl; t << " </info>" << endl; // NAMESPACE DOCUMENTATION @@ -1832,7 +2219,7 @@ void generateDocbook() NamespaceDef *nd; //Namespace Documentation index header - if (nli.toFirst()) + if (nli.toFirst()) { t << " <chapter>" << endl; t << " <title>Namespace Documentation</title>" << endl; @@ -1845,7 +2232,7 @@ void generateDocbook() } //Namespace Documentation index footer - if (nli.toFirst()) + if (nli.toFirst()) { t << " </chapter>" << endl; } @@ -1876,7 +2263,7 @@ void generateDocbook() GroupDef *gd; //Module group Documentation index header - if (gli.toFirst()) + if (gli.toFirst()) { t << " <chapter>" << endl; t << " <title>" << theTranslator->trModuleDocumentation() << "</title>" << endl; @@ -1889,7 +2276,7 @@ void generateDocbook() } //Module group Documentation index footer - if (gli.toFirst()) + if (gli.toFirst()) { t << " </chapter>" << endl; } @@ -1901,7 +2288,7 @@ void generateDocbook() ClassDef *cd; //Class Documentation index header - if (cli.toFirst()) + if (cli.toFirst()) { t << " <chapter>" << endl; t << " <title>" << theTranslator->trClassDocumentation() << "</title>" << endl; @@ -1913,7 +2300,7 @@ void generateDocbook() } //Class Documentation index footer - if (cli.toFirst()) + if (cli.toFirst()) { t << " </chapter>" << endl; } @@ -1928,7 +2315,7 @@ void generateDocbook() FileName *fn; //File Documentation index header - if (fnli.toFirst()) + if (fnli.toFirst()) { t << " <chapter>" << endl; t << " <title>" << theTranslator->trFileDocumentation() << "</title>" << endl; @@ -1946,7 +2333,7 @@ void generateDocbook() } //File Documentation index footer - if (fnli.toFirst()) + if (fnli.toFirst()) { t << " </chapter>" << endl; } @@ -1959,7 +2346,7 @@ void generateDocbook() DirSDict::Iterator sdi(*Doxygen::directories); //Directory Documentation index header - if (sdi.toFirst()) + if (sdi.toFirst()) { t << " <chapter>" << endl; t << " <title>" << theTranslator->trDirDocumentation() << "</title>" << endl; @@ -1972,7 +2359,7 @@ void generateDocbook() } //Module group Documentation index footer - if (sdi.toFirst()) + if (sdi.toFirst()) { t << " </chapter>" << endl; } @@ -1985,7 +2372,7 @@ void generateDocbook() PageDef *pd=0; //Example Page Documentation index header - if (pdi.toFirst()) + if (pdi.toFirst()) { t << " <chapter>" << endl; t << " <title>" << theTranslator->trExampleDocumentation() << "</title>" << endl; @@ -1998,14 +2385,937 @@ void generateDocbook() } //Example Page Documentation index footer - if (pdi.toFirst()) + if (pdi.toFirst()) { t << " </chapter>" << endl; } } + t << "<index/>" << endl; t << "</book>" << endl; } +DocbookGenerator::DocbookGenerator() : OutputGenerator() +{ +DB_GEN_C + dir=Config_getString(DOCBOOK_OUTPUT); + //insideTabbing=FALSE; + //firstDescItem=TRUE; + //disableLinks=FALSE; + //m_indent=0; + //templateMemberItem = FALSE; + m_prettyCode=Config_getBool(DOCBOOK_PROGRAMLISTING); + for (int i = 0 ; i < sizeof(m_inListItem) / sizeof(*m_inListItem) ; i++) m_inListItem[i] = FALSE; + for (int i = 0 ; i < sizeof(m_inSimpleSect) / sizeof(*m_inSimpleSect) ; i++) m_inSimpleSect[i] = FALSE; +} + +DocbookGenerator::~DocbookGenerator() +{ +DB_GEN_C +} + +void DocbookGenerator::init() +{ + QCString dir=Config_getString(DOCBOOK_OUTPUT); + QDir d(dir); + if (!d.exists() && !d.mkdir(dir)) + { + err("Could not create output directory %s\n",dir.data()); + exit(1); + } + createSubDirs(d); +} + +void DocbookGenerator::startFile(const char *name,const char *,const char *) +{ +DB_GEN_C + QCString fileName=name; + QCString pageName; + QCString fileType="section"; + if (fileName == "refman") + { + fileName="index"; + fileType="book"; + } + else if (fileName == "index") + { + fileName="mainpage"; + fileType="chapter"; + } + pageName = fileName; + relPath = relativePathToRoot(fileName); + if (fileName.right(4)!=".xml") fileName+=".xml"; + startPlainFile(fileName); + m_codeGen.setTextStream(t); + m_codeGen.setRelativePath(relPath); + m_codeGen.setSourceFileName(stripPath(fileName)); + + t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;; + t << "<" << fileType << " xmlns=\"http://docbook.org/ns/docbook\" version=\"5.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\""; + if (!pageName.isEmpty()) t << " xml:id=\"_" << stripPath(pageName) << "\""; + t << ">" << endl; +} + +void DocbookGenerator::endFile() +{ +DB_GEN_C + if (m_inDetail) t << "</section>" << endl; + m_inDetail = FALSE; + while (m_inLevel != -1) + { + t << "</section>" << endl; + m_inLevel--; + } + if (m_inGroup) t << "</section>" << endl; + m_inGroup = FALSE; + + QCString fileType="section"; + QCString fileName= m_codeGen.sourceFileName(); + if (fileName == "index.xml") + { + fileType="book"; + } + else if (fileName == "mainpage.xml") + { + fileType="chapter"; + } + t << "</" << fileType << ">" << endl; + endPlainFile(); + m_codeGen.setSourceFileName(""); +} + +void DocbookGenerator::startIndexSection(IndexSections is) +{ +DB_GEN_C2("IndexSections " << is) + switch (is) + { + case isTitlePageStart: + { + QCString dbk_projectName = Config_getString(PROJECT_NAME); + t << " <info>" << endl; + t << " <title>" << convertToDocBook(dbk_projectName) << "</title>" << endl; + t << " </info>" << endl; + } + break; + case isTitlePageAuthor: + break; + case isMainPage: + t << "<chapter>" << endl; + t << " <title>"; + break; + case isModuleIndex: + //Module Index}\n" + break; + case isDirIndex: + //Directory Index}\n" + break; + case isNamespaceIndex: + //Namespace Index}\n" + break; + case isClassHierarchyIndex: + //Hierarchical Index}\n" + break; + case isCompoundIndex: + //t << "{"; //Class Index}\n" + break; + case isFileIndex: + //Annotated File Index}\n" + break; + case isPageIndex: + //Annotated Page Index}\n" + break; + case isModuleDocumentation: + t << "<chapter>\n"; + t << " <title>"; + break; + case isDirDocumentation: + t << "<chapter>\n"; + t << " <title>"; + break; + case isNamespaceDocumentation: + t << "<chapter>\n"; + t << " <title>"; + break; + case isClassDocumentation: + t << "<chapter>\n"; + t << " <title>"; + break; + case isFileDocumentation: + t << "<chapter>\n"; + t << " <title>"; + break; + case isExampleDocumentation: + t << "<chapter>\n"; + t << " <title>"; + break; + case isPageDocumentation: + break; + case isPageDocumentation2: + break; + case isEndIndex: + break; + } +} + +void DocbookGenerator::endIndexSection(IndexSections is) +{ +DB_GEN_C2("IndexSections " << is) + static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); + switch (is) + { + case isTitlePageStart: + break; + case isTitlePageAuthor: + break; + case isMainPage: + t << "</title>" << endl; + t << " <xi:include href=\"mainpage.xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + t << "</chapter>" << endl; + break; + case isModuleIndex: + //t << "</chapter>" << endl; + break; + case isDirIndex: + //t << "<xi:include href=\"dirs.xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>"; + //t << "</chapter>" << endl; + break; + case isNamespaceIndex: + //t << "<xi:include href=\"namespaces.xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>"; + //t << "</chapter>" << endl; + break; + case isClassHierarchyIndex: + //t << "<xi:include href=\"hierarchy.xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>"; + //t << "</chapter>" << endl; + break; + case isCompoundIndex: + //t << "</chapter>" << endl; + break; + case isFileIndex: + //t << "<xi:include href=\"files.xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>"; + //t << "</chapter>" << endl; + break; + case isPageIndex: + //t << "<xi:include href=\"pages.xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>"; + //t << "</chapter>" << endl; + break; + case isModuleDocumentation: + { + t << "</title>" << endl; + GroupSDict::Iterator gli(*Doxygen::groupSDict); + GroupDef *gd; + bool found=FALSE; + for (gli.toFirst();(gd=gli.current()) && !found;++gli) + { + if (!gd->isReference()) + { + t << " <xi:include href=\"" << gd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + found=TRUE; + } + } + for (;(gd=gli.current());++gli) + { + if (!gd->isReference()) + { + t << " <xi:include href=\"" << gd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + } + } + } + t << "</chapter>\n"; + break; + case isDirDocumentation: + { + t << "</title>" << endl; + SDict<DirDef>::Iterator dli(*Doxygen::directories); + DirDef *dd; + bool found=FALSE; + for (dli.toFirst();(dd=dli.current()) && !found;++dli) + { + if (dd->isLinkableInProject()) + { + t << "< xi:include href=\"" << dd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + found=TRUE; + } + } + for (;(dd=dli.current());++dli) + { + if (dd->isLinkableInProject()) + { + t << " <xi:include href=\"" << dd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + } + } + } + t << "</chapter>\n"; + break; + case isNamespaceDocumentation: + { + t << "</title>" << endl; + NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict); + NamespaceDef *nd; + bool found=FALSE; + for (nli.toFirst();(nd=nli.current()) && !found;++nli) + { + if (nd->isLinkableInProject()) + { + t << "<xi:include href=\"" << nd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + found=TRUE; + } + } + while ((nd=nli.current())) + { + if (nd->isLinkableInProject()) + { + t << "<xi:include href=\"" << nd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + } + ++nli; + } + } + t << "</chapter>\n"; + break; + case isClassDocumentation: + { + t << "</title>" << endl; + ClassSDict::Iterator cli(*Doxygen::classSDict); + ClassDef *cd=0; + bool found=FALSE; + for (cli.toFirst();(cd=cli.current()) && !found;++cli) + { + if (cd->isLinkableInProject() && + cd->templateMaster()==0 && + !cd->isEmbeddedInOuterScope() + ) + { + t << " <xi:include href=\"" << cd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + found=TRUE; + } + } + for (;(cd=cli.current());++cli) + { + if (cd->isLinkableInProject() && + cd->templateMaster()==0 && + !cd->isEmbeddedInOuterScope() + ) + { + t << " <xi:include href=\"" << cd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + } + } + } + t << "</chapter>\n"; + break; + case isFileDocumentation: + { + t << "</title>" << endl; + bool isFirst=TRUE; + FileNameListIterator fnli(*Doxygen::inputNameList); + FileName *fn; + for (fnli.toFirst();(fn=fnli.current());++fnli) + { + FileNameIterator fni(*fn); + FileDef *fd; + for (;(fd=fni.current());++fni) + { + if (fd->isLinkableInProject()) + { + if (isFirst) + { + t << " <xi:include href=\"" << fd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + if (sourceBrowser && m_prettyCode && fd->generateSourceFile()) + { + t << " <xi:include href=\"" << fd->getSourceFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + } + isFirst=FALSE; + } + else + { + t << " <xi:include href=\"" << fd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + if (sourceBrowser && m_prettyCode && fd->generateSourceFile()) + { + t << " <xi:include href=\"" << fd->getSourceFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + } + } + } + } + } + } + t << "</chapter>\n"; + break; + case isExampleDocumentation: + { + t << "</title>" << endl; + PageSDict::Iterator pdi(*Doxygen::exampleSDict); + PageDef *pd=pdi.toFirst(); + if (pd) + { + t << " <xi:include href=\"" << pd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + } + for (++pdi;(pd=pdi.current());++pdi) + { + fprintf(stderr,"==> Done calling from HTML\n"); + t << " <xi:include href=\"" << pd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + } + } + t << "</chapter>\n"; + break; + case isPageDocumentation: + break; + case isPageDocumentation2: + break; + case isEndIndex: + t << "<index/>" << endl; + break; + } +} +void DocbookGenerator::writePageLink(const char *name, bool /*first*/) +{ +DB_GEN_C + PageSDict::Iterator pdi(*Doxygen::pageSDict); + PageDef *pd = pdi.toFirst(); + for (pd = pdi.toFirst();(pd=pdi.current());++pdi) + { + if (!pd->getGroupDef() && !pd->isReference() && pd->name() == stripPath(name)) + { + t << "<chapter>\n"; + if (!pd->title().isEmpty()) + { + t << " <title>" << convertToDocBook(pd->title()) << "</title>" << endl; + } + else + { + t << " <title>" << convertToDocBook(pd->name()) << "</title>" << endl; + } + t << " <xi:include href=\"" << pd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; + t << "</chapter>\n"; + } + } +} +void DocbookGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *) +{ +DB_GEN_C + DocbookDocVisitor *visitor = + new DocbookDocVisitor(t,*this); + n->accept(visitor); + delete visitor; +} + +void DocbookGenerator::startParagraph(const char *) +{ +DB_GEN_C + t << "<para>" << endl; +} + +void DocbookGenerator::endParagraph() +{ +DB_GEN_C + t << "</para>" << endl; +} +void DocbookGenerator::writeString(const char *text) +{ +DB_GEN_C + t << text; +} +void DocbookGenerator::startMemberHeader(const char *name,int) +{ +DB_GEN_C + t << "<simplesect>" << endl; + m_inSimpleSect[m_levelListItem] = TRUE; + t << " <title>"; +} + +void DocbookGenerator::endMemberHeader() +{ +DB_GEN_C + t << " </title>" << endl; +} +void DocbookGenerator::docify(const char *str) +{ +DB_GEN_C + t << convertToDocBook(str); +} +void DocbookGenerator::writeObjectLink(const char *ref, const char *f, + const char *anchor, const char *text) +{ +DB_GEN_C + if (anchor) + if (f) t << "<link linkend=\"_" << stripPath(f) << "_1" << anchor << "\">"; + else t << "<link linkend=\"_" << anchor << "\">"; + else + t << "<link linkend=\"_" << stripPath(f) << "\">"; + docify(text); + t << "</link>"; +} +void DocbookGenerator::startMemberList() +{ +DB_GEN_C + t << " <itemizedlist>" << endl; + m_levelListItem++; +} +void DocbookGenerator::endMemberList() +{ +DB_GEN_C + if (m_inListItem[m_levelListItem]) t << "</listitem>" << endl; + m_inListItem[m_levelListItem] = FALSE; + t << " </itemizedlist>" << endl; + m_levelListItem = (m_levelListItem> 0 ? m_levelListItem - 1 : 0); + if (m_inSimpleSect[m_levelListItem]) t << "</simplesect>" << endl; + m_inSimpleSect[m_levelListItem] = FALSE; +} +void DocbookGenerator::startMemberItem(const char *,int,const char *) +{ +DB_GEN_C + if (m_inListItem[m_levelListItem]) t << "</listitem>" << endl; + t << " <listitem><para>"; + m_inListItem[m_levelListItem] = TRUE; +} +void DocbookGenerator::endMemberItem() +{ +DB_GEN_C + t << "</para>" << endl; +} +void DocbookGenerator::startBold(void) +{ +DB_GEN_C + t << "<emphasis role=\"strong\">"; +} +void DocbookGenerator::endBold(void) +{ +DB_GEN_C + t << "</emphasis>"; +} +void DocbookGenerator::startGroupHeader(int extraIndentLevel) +{ +DB_GEN_C2("m_inLevel " << m_inLevel) +DB_GEN_C2("extraIndentLevel " << extraIndentLevel) + m_firstMember = TRUE; + if (m_inSimpleSect[m_levelListItem]) t << "</simplesect>" << endl; + m_inSimpleSect[m_levelListItem] = FALSE; + if (m_inLevel != -1) m_inGroup = TRUE; + if (m_inLevel == extraIndentLevel) t << "</section>" << endl; + m_inLevel = extraIndentLevel; + t << "<section>" << endl; + t << "<title>"; +} +void DocbookGenerator::writeRuler(void) +{ +DB_GEN_C2("m_inLevel " << m_inLevel) +DB_GEN_C2("m_inGroup " << m_inGroup) + if (m_inGroup) t << "</section>" << endl; + m_inGroup = FALSE; +} + +void DocbookGenerator::endGroupHeader(int) +{ +DB_GEN_C + t << "</title>" << endl; +} + +void DocbookGenerator::startParameterList(bool openBracket) +{ +DB_GEN_C + if (openBracket) t << "("; +} +void DocbookGenerator::endParameterList() +{ +DB_GEN_C +} +void DocbookGenerator::writeNonBreakableSpace(int n) +{ +DB_GEN_C + for (int i=0;i<n;i++) t << " "; +} +void DocbookGenerator::lineBreak(const char *) +{ +DB_GEN_C + t << endl; +} +void DocbookGenerator::startTypewriter() +{ +DB_GEN_C + if (!m_denseText) t << "<computeroutput>"; +} +void DocbookGenerator::endTypewriter() +{ +DB_GEN_C + if (!m_denseText) t << "</computeroutput>" << endl; +} +void DocbookGenerator::startTextBlock(bool dense) +{ +DB_GEN_C + if (dense) + { + m_denseText = TRUE; + t << "<programlisting>"; + } +} +void DocbookGenerator::endTextBlock(bool dense) +{ +DB_GEN_C + if (m_denseText) + { + m_denseText = FALSE; + t << "</programlisting>"; + } +} +void DocbookGenerator::startMemberDoc(const char *clname, const char *memname, const char *anchor, const char *title, + int memCount, int memTotal, bool showInline) +{ +DB_GEN_C2("m_inLevel " << m_inLevel) + t << " <section>" << endl; + t << " <title>" << convertToDocBook(title); + if (memTotal>1) + { + t << "<computeroutput>[" << memCount << "/" << memTotal << "]</computeroutput>"; + } + t << "</title>" << endl; + if (memname && memname[0]!='@') + { + addIndexTerm(t,memname,clname); + addIndexTerm(t,clname,memname); + } +} +void DocbookGenerator::endMemberDoc(bool) +{ +DB_GEN_C + t << "</computeroutput></para>"; +} +void DocbookGenerator::startTitleHead(const char *) +{ +DB_GEN_C + t << "<title>"; +} +void DocbookGenerator::endTitleHead(const char *fileName,const char *name) +{ +DB_GEN_C + t << "</title>" << endl; + if (name) addIndexTerm(t, name); +} +void DocbookGenerator::startDoxyAnchor(const char *fName,const char *manName, + const char *anchor,const char *name, + const char *args) +{ +DB_GEN_C + if (!m_inListItem[m_levelListItem] && !m_descTable) + { + if (!m_firstMember) t << " </section>"; + m_firstMember = FALSE; + } + if (anchor) + { + t << "<anchor xml:id=\"_" << stripPath(fName) << "_1" << anchor << "\"/>"; + } +} +void DocbookGenerator::endDoxyAnchor(const char *fileName,const char *anchor) +{ +DB_GEN_C +} +void DocbookGenerator::startMemberDocName(bool) +{ +DB_GEN_C + t << "<para><computeroutput>"; +} +void DocbookGenerator::endMemberDocName() +{ +DB_GEN_C +} +void DocbookGenerator::startMemberGroupHeader(bool hasHeader) +{ +DB_GEN_C + t << "<simplesect><title>"; +} +void DocbookGenerator::endMemberGroupHeader() +{ +DB_GEN_C + t << "</title>" << endl; +} +void DocbookGenerator::startMemberGroup() +{ +DB_GEN_C +} +void DocbookGenerator::endMemberGroup(bool) +{ +DB_GEN_C + t << "</simplesect>" << endl; +} +void DocbookGenerator::startClassDiagram() +{ +DB_GEN_C + t << "<para>"; +} + +void DocbookGenerator::endClassDiagram(const ClassDiagram &d, const char *fileName,const char *) +{ +DB_GEN_C + visitPreStart(t, FALSE, relPath + fileName + ".png", NULL, NULL); + d.writeImage(t,dir,relPath,fileName,FALSE); + visitPostEnd(t, FALSE); + t << "</para>" << endl; +} +void DocbookGenerator::startLabels() +{ +DB_GEN_C +} + +void DocbookGenerator::writeLabel(const char *l,bool isLast) +{ +DB_GEN_C + t << "<computeroutput>[" << l << "]</computeroutput>"; + if (!isLast) t << ", "; +} + +void DocbookGenerator::endLabels() +{ +DB_GEN_C +} +void DocbookGenerator::startExamples() +{ +DB_GEN_C + t << "<simplesect><title>"; + docify(theTranslator->trExamples()); + t << "</title>"; +} + +void DocbookGenerator::endExamples() +{ +DB_GEN_C + t << "</simplesect>" << endl; +} +void DocbookGenerator::startSubsubsection(void) +{ +DB_GEN_C + t << "<simplesect><title>"; +} +void DocbookGenerator::endSubsubsection(void) +{ +DB_GEN_C + t << "</title></simplesect>" << endl; +} +void DocbookGenerator::writeChar(char c) +{ +DB_GEN_C + char cs[2]; + cs[0]=c; + cs[1]=0; + docify(cs); +} +void DocbookGenerator::startMemberDocPrefixItem() +{ +DB_GEN_C + t << "<computeroutput>"; +} +void DocbookGenerator::endMemberDocPrefixItem() +{ +DB_GEN_C + t << "</computeroutput>"; +} +void DocbookGenerator::exceptionEntry(const char* prefix,bool closeBracket) +{ +DB_GEN_C + if (prefix) + t << " " << prefix << "("; + else if (closeBracket) + t << ")"; + t << " "; +} +void DocbookGenerator::startParameterName(bool) +{ +DB_GEN_C + t << " "; +} +void DocbookGenerator::endParameterName(bool last,bool /*emptyList*/,bool closeBracket) +{ +DB_GEN_C + if (last) + { + if (closeBracket) t << ")"; + } +} +void DocbookGenerator::startCodeFragment() +{ +DB_GEN_C + t << "<programlisting>"; +} +void DocbookGenerator::endCodeFragment() +{ +DB_GEN_C + t << "</programlisting>"; +} +void DocbookGenerator::startMemberTemplateParams() +{ +DB_GEN_C +} + +void DocbookGenerator::endMemberTemplateParams(const char *,const char *) +{ +DB_GEN_C + t << "</para>"; + t << "<para>"; +} +void DocbookGenerator::startSection(const char *lab,const char *,SectionInfo::SectionType type) +{ +DB_GEN_C + t << " <section xml:id=\"_" << stripPath(lab) << "\">"; + t << "<title>"; +} +void DocbookGenerator::endSection(const char *lab,SectionInfo::SectionType) +{ +DB_GEN_C + t << "</title>"; + t << " </section>"; +} +void DocbookGenerator::addIndexItem(const char *prim,const char *sec) +{ +DB_GEN_C + addIndexTerm(t, prim, sec); +} + +void DocbookGenerator::startDescTable(const char *title) +{ +DB_GEN_C + int ncols = 2; + t << "<informaltable frame=\"all\">" << endl; + if (title)t << "<title>" << convertToDocBook(title) << "</title>" << endl; + t << " <tgroup cols=\"" << ncols << "\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl; + for (int i = 0; i < ncols; i++) + { + t << " <colspec colname='c" << i+1 << "'/>\n"; + } + t << "<tbody>\n"; + m_descTable = TRUE; +} + +void DocbookGenerator::endDescTable() +{ +DB_GEN_C + t << " </tbody>" << endl; + t << " </tgroup>" << endl; + t << "</informaltable>" << endl; + m_descTable = FALSE; +} + +void DocbookGenerator::startDescTableRow() +{ +DB_GEN_C + t << "<row>"; + t << "<entry>"; +} + +void DocbookGenerator::endDescTableRow() +{ +DB_GEN_C + t << "</row>"; +} + +void DocbookGenerator::startDescTableTitle() +{ +DB_GEN_C +} + +void DocbookGenerator::endDescTableTitle() +{ +DB_GEN_C +} + +void DocbookGenerator::startDescTableData() +{ +DB_GEN_C + t << "</entry><entry>"; +} + +void DocbookGenerator::endDescTableData() +{ +DB_GEN_C + t << "</entry>"; +} +void DocbookGenerator::startGroupCollaboration() +{ +DB_GEN_C +} +void DocbookGenerator::endGroupCollaboration(const DotGroupCollaboration &g) +{ +DB_GEN_C + g.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE); +} +void DocbookGenerator::startDotGraph() +{ +DB_GEN_C +} +void DocbookGenerator::endDotGraph(const DotClassGraph &g) +{ +DB_GEN_C + g.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,TRUE,FALSE); +} +void DocbookGenerator::startInclDepGraph() +{ +DB_GEN_C +} +void DocbookGenerator::endInclDepGraph(const DotInclDepGraph &g) +{ +DB_GEN_C + QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT), fileName,relPath,FALSE); +} +void DocbookGenerator::startCallGraph() +{ +DB_GEN_C +} +void DocbookGenerator::endCallGraph(const DotCallGraph &g) +{ +DB_GEN_C + QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT), fileName,relPath,FALSE); +} +void DocbookGenerator::startDirDepGraph() +{ +DB_GEN_C +} +void DocbookGenerator::endDirDepGraph(const DotDirDeps &g) +{ +DB_GEN_C + QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT), fileName,relPath,FALSE); +} +void DocbookGenerator::startMemberDocList() +{ +DB_GEN_C +} +void DocbookGenerator::endMemberDocList() +{ +DB_GEN_C + m_inGroup = TRUE; +} +void DocbookGenerator::startConstraintList(const char *header) +{ +DB_GEN_C + t << "<simplesect><title>"; + docify(header); + t << "</title>" << endl; +} +void DocbookGenerator::startConstraintParam() +{ +DB_GEN_C + t << "<para><emphasis role=\"strong\">"; +} +void DocbookGenerator::endConstraintParam() +{ +DB_GEN_C +} +void DocbookGenerator::startConstraintType() +{ +DB_GEN_C + t << ":"; +} +void DocbookGenerator::endConstraintType() +{ +DB_GEN_C + t << "</emphasis></para>" << endl; +} +void DocbookGenerator::startConstraintDocs() +{ +DB_GEN_C +} +void DocbookGenerator::endConstraintDocs() +{ +DB_GEN_C +} +void DocbookGenerator::endConstraintList() +{ +DB_GEN_C + t << "</simplesect>" << endl; +} |