summaryrefslogtreecommitdiffstats
path: root/src/docbookgen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/docbookgen.cpp')
-rw-r--r--src/docbookgen.cpp1900
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 << "&amp;"; col++; break;
case '\'': t << "&apos;"; col++; break;
case '"': t << "&quot;"; 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 << "&lt;";
}
- t << convertToXML(nm);
+ t << convertToDocBook(nm);
if (ii->local)
{
t << "&quot;";
@@ -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 << "&lt;";
}
- t << convertToXML(inc->includeName);
+ t << convertToDocBook(inc->includeName);
if (inc->local)
{
t << "&quot;";
@@ -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;
+}