My Project
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Macros | Functions | Variables
docbookgen.cpp File Reference
#include <stdlib.h>
#include <qdir.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qintdict.h>
#include "docbookgen.h"
#include "doxygen.h"
#include "message.h"
#include "config.h"
#include "classlist.h"
#include "util.h"
#include "defargs.h"
#include "outputgen.h"
#include "dot.h"
#include "pagedef.h"
#include "filename.h"
#include "version.h"
#include "docbookvisitor.h"
#include "docparser.h"
#include "language.h"
#include "parserintf.h"
#include "arguments.h"
#include "memberlist.h"
#include "groupdef.h"
#include "memberdef.h"
#include "namespacedef.h"
#include "membername.h"
#include "membergroup.h"
#include "dirdef.h"
#include "section.h"

Go to the source code of this file.

Classes

class  DocbookSectionMapper
 
class  TextGeneratorDocbookImpl
 
class  DocbookCodeGenerator
 

Macros

#define Docbook_DB(x)   do {} while(0)
 

Functions

void writeDocbookString (FTextStream &t, const char *s)
 
void writeDocbookCodeString (FTextStream &t, const char *s, int &col)
 
static void writeDocbookHeaderMainpage (FTextStream &t)
 
static void writeDocbookHeader_ID (FTextStream &t, QCString id)
 
void writeDocbookLink (FTextStream &t, const char *, const char *compoundId, const char *anchorId, const char *text, const char *)
 
static void writeTemplateArgumentList (ArgumentList *al, FTextStream &t, Definition *scope, FileDef *fileScope, int indent)
 
static void writeTemplateList (ClassDef *cd, FTextStream &t)
 
static void writeDocbookDocBlock (FTextStream &t, const QCString &fileName, int lineNr, Definition *scope, MemberDef *md, const QCString &text)
 
void writeDocbookCodeBlock (FTextStream &t, FileDef *fd)
 
static QCString classOutputFileBase (ClassDef *cd)
 
static QCString memberOutputFileBase (MemberDef *md)
 
static void generateDocbookForMember (MemberDef *md, FTextStream &t, Definition *def, bool detailed=0)
 
static void generateDocbookSection (Definition *d, FTextStream &t, MemberList *ml, const char *, bool detailed=0, const char *header=0, const char *documentation=0)
 
static void writeInnerClasses (const ClassSDict *cl, FTextStream &t)
 
static void writeInnerNamespaces (const NamespaceSDict *nl, FTextStream &t)
 
static void writeInnerFiles (const FileList *fl, FTextStream &t)
 
static void writeInnerPages (const PageSDict *pl, FTextStream &t)
 
static void writeInnerGroups (const GroupList *gl, FTextStream &t)
 
static void writeInnerDirs (const DirList *dl, FTextStream &t)
 
static void writeInnerGroupFiles (const GroupList *gl, FTextStream &t)
 
static void generateDocbookForClass (ClassDef *cd, FTextStream &ti)
 
static void generateDocbookForNamespace (NamespaceDef *nd, FTextStream &ti)
 
static void generateDocbookForFile (FileDef *fd, FTextStream &ti)
 
static void generateDocbookForGroup (GroupDef *gd, FTextStream &ti)
 
static void generateDocbookForDir (DirDef *dd, FTextStream &ti)
 
static void generateDocbookForPage (PageDef *pd, FTextStream &ti, bool isExample)
 
void generateDocbook ()
 

Variables

static DocbookSectionMapper g_docbookSectionMapper
 

Macro Definition Documentation

#define Docbook_DB (   x)    do {} while(0)

Function Documentation

static QCString classOutputFileBase ( ClassDef cd)
static

Definition at line 373 of file docbookgen.cpp.

References ClassDef::getOutputFileBase().

Referenced by generateDocbookForClass(), and writeInnerClasses().

{
//static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
//if (inlineGroupedClasses && cd->partOfGroups()!=0)
return cd->getOutputFileBase();
//else
// return cd->getOutputFileBase();
}
void generateDocbook ( )

MAINPAGE DOCUMENTATION

MODULE GROUP DOCUMENTATION

Definition at line 1760 of file docbookgen.cpp.

References Doxygen::classSDict, Config_getBool, Config_getString, createSubDirs(), Doxygen::directories, endl(), err(), Doxygen::exampleSDict, generateDocbookForClass(), generateDocbookForDir(), generateDocbookForFile(), generateDocbookForGroup(), generateDocbookForNamespace(), generateDocbookForPage(), Doxygen::groupSDict, Doxygen::inputNameList, SDict< DirDef >::Iterator, SDict< ClassDef >::Iterator, SDict< GroupDef >::Iterator, SDict< PageDef >::Iterator, SDict< NamespaceDef >::Iterator, Doxygen::mainPage, msg(), FileDef::name(), Definition::name(), Doxygen::namespaceSDict, Doxygen::pageSDict, theTranslator, Translator::trClassDocumentation(), Translator::trDirDocumentation(), Translator::trExampleDocumentation(), Translator::trFileDocumentation(), and Translator::trModuleDocumentation().

Referenced by generateOutput(), and parseInput().

{
// + classes
// + namespaces
// + files
// + groups
// + related pages
// - examples
QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT);
if (outputDirectory.isEmpty())
{
outputDirectory=QDir::currentDirPath().utf8();
}
else
{
QDir dir(outputDirectory);
if (!dir.exists())
{
dir.setPath(QDir::currentDirPath());
if (!dir.mkdir(outputDirectory))
{
err("tag DOCBOOK_OUTPUT: Output directory `%s' does not "
"exist and cannot be created\n",outputDirectory.data());
exit(1);
}
else
{
msg("Notice: Output directory `%s' does not exist. "
"I have created it for you.\n", outputDirectory.data());
}
dir.cd(outputDirectory);
}
outputDirectory=dir.absPath().utf8();
}
QDir dir(outputDirectory);
if (!dir.exists())
{
dir.setPath(QDir::currentDirPath());
if (!dir.mkdir(outputDirectory))
{
err("Cannot create directory %s\n",outputDirectory.data());
return;
}
}
QDir docbookDir(outputDirectory);
createSubDirs(docbookDir);
QCString fileName=outputDirectory+"/index.xml";
QCString dbk_projectName = Config_getString(PROJECT_NAME);
QFile f(fileName);
f.setName(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
return;
}
FTextStream t(&f);
//t.setEncoding(FTextStream::UnicodeUTF8);
// write index header for Docbook which calls the structure file
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 << " </info>" << endl;
// NAMESPACE DOCUMENTATION
//Namespace Documentation index header
if (nli.toFirst())
{
t << " <chapter>" << endl;
t << " <title>Namespace Documentation</title>" << endl;
}
for (nli.toFirst();(nd=nli.current());++nli)
{
msg("Generating Docbook output for namespace %s\n",nd->name().data());
}
//Namespace Documentation index footer
if (nli.toFirst())
{
t << " </chapter>" << endl;
}
{
msg("Generating Docbook output for the main page\n");
}
// PAGE DOCUMENTATION
{
PageDef *pd=0;
for (pdi.toFirst();(pd=pdi.current());++pdi)
{
msg("Generating Docbook output for page %s\n",pd->name().data());
}
}
GroupDef *gd;
//Module group Documentation index header
if (gli.toFirst())
{
t << " <chapter>" << endl;
t << " <title>" << theTranslator->trModuleDocumentation() << "</title>" << endl;
}
for (;(gd=gli.current());++gli)
{
msg("Generating Docbook output for group %s\n",gd->name().data());
}
//Module group Documentation index footer
if (gli.toFirst())
{
t << " </chapter>" << endl;
}
//CLASS DOCUMENTATION
{
ClassDef *cd;
//Class Documentation index header
if (cli.toFirst())
{
t << " <chapter>" << endl;
t << " <title>" << theTranslator->trClassDocumentation() << "</title>" << endl;
}
for (cli.toFirst();(cd=cli.current());++cli)
{
}
//Class Documentation index footer
if (cli.toFirst())
{
t << " </chapter>" << endl;
}
}
// FILE DOCUMENTATION
static bool showFiles = Config_getBool(SHOW_FILES);
if (showFiles)
{
FileName *fn;
//File Documentation index header
if (fnli.toFirst())
{
t << " <chapter>" << endl;
t << " <title>" << theTranslator->trFileDocumentation() << "</title>" << endl;
}
for (;(fn=fnli.current());++fnli)
{
FileNameIterator fni(*fn);
FileDef *fd;
for (;(fd=fni.current());++fni)
{
msg("Generating Docbook output for file %s\n",fd->name().data());
}
}
//File Documentation index footer
if (fnli.toFirst())
{
t << " </chapter>" << endl;
}
}
// DIRECTORY DOCUMENTATION
if (Config_getBool(DIRECTORY_GRAPH) && Config_getBool(HAVE_DOT))
{
DirDef *dir;
//Directory Documentation index header
if (sdi.toFirst())
{
t << " <chapter>" << endl;
t << " <title>" << theTranslator->trDirDocumentation() << "</title>" << endl;
}
for (sdi.toFirst();(dir=sdi.current());++sdi)
{
msg("Generate Docbook output for dir %s\n",dir->name().data());
}
//Module group Documentation index footer
if (sdi.toFirst())
{
t << " </chapter>" << endl;
}
}
// EXAMPLE PAGE DOCUMENTATION
{
PageDef *pd=0;
//Example Page Documentation index header
if (pdi.toFirst())
{
t << " <chapter>" << endl;
t << " <title>" << theTranslator->trExampleDocumentation() << "</title>" << endl;
}
for (pdi.toFirst();(pd=pdi.current());++pdi)
{
msg("Generating Docbook output for example %s\n",pd->name().data());
}
//Example Page Documentation index footer
if (pdi.toFirst())
{
t << " </chapter>" << endl;
}
}
t << "</book>" << endl;
}
static void generateDocbookForClass ( ClassDef cd,
FTextStream ti 
)
static

Definition at line 1111 of file docbookgen.cpp.

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), classOutputFileBase(), DotNode::Collaboration, ClassDef::compoundTypeString(), Config_getBool, Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), FileDef::docName(), Definition::documentation(), endl(), EOF_DocBook, err(), IncludeInfo::fileDef, generateDocbookSection(), ClassDef::getClassSDict(), Definition::getDefFileName(), Definition::getDefLine(), ClassDef::getMemberGroupSDict(), ClassDef::getMemberLists(), FileDef::getOutputFileBase(), ClassDef::getOutputFileBase(), GOF_BITMAP, ClassDef::includeInfo(), IncludeInfo::includeName, DotNode::Inheritance, Definition::isHidden(), ClassDef::isReference(), Definition::isReference(), SIntDict< MemberGroup >::Iterator, IncludeInfo::local, MemberListType_detailedLists, msg(), Definition::name(), relativePathToRoot(), stripPath(), ClassDef::templateMaster(), theTranslator, Translator::trDetailedDescription(), writeDocbookDocBlock(), writeDocbookHeader_ID(), writeDocbookString(), writeInnerClasses(), and writeTemplateList().

Referenced by generateDocbook().

{
// + brief description
// + detailed description
// + template argument list(s)
// - include file
// + member groups
// + inheritance diagram
// + list of direct super classes
// + list of direct sub classes
// + list of inner classes
// + collaboration diagram
// + list of all members
// + user defined member sections
// + standard member sections
// + detailed member documentation
// - examples using the class
if (cd->isReference()) return; // skip external references.
if (cd->isHidden()) return; // skip hidden classes.
if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
if (cd->templateMaster()!=0) return; // skip generated template instances.
msg("Generating Docbook output for class %s\n",cd->name().data());
QCString fileDocbook=cd->getOutputFileBase()+".xml";
//Add the file Documentation info to index file
ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT);
QCString fileName=outputDirectory+"/"+ classOutputFileBase(cd)+".xml";
QCString relPath = relativePathToRoot(fileName);
QFile f(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
return;
}
FTextStream t(&f);
//t.setEncoding(FTextStream::UnicodeUTF8);
t << "<title>";
t << " " << cd->compoundTypeString() << " Reference";
t << "</title>" << endl;
if (ii)
{
QCString nm = ii->includeName;
if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName();
if (!nm.isEmpty())
{
t << "<para>" << endl;
t << " <programlisting>#include ";
if (ii->fileDef && !ii->fileDef->isReference()) // TODO: support external references
{
t << "<link linkend=\"" << ii->fileDef->getOutputFileBase() << "\">";
}
if (ii->local)
{
t << "&quot;";
}
else
{
t << "&lt;";
}
t << convertToXML(nm);
if (ii->local)
{
t << "&quot;";
}
else
{
t << "&gt;";
}
if (ii->fileDef && !ii->fileDef->isReference())
{
t << "</link>";
}
t << "</programlisting>" << endl;
t << "</para>" << endl;
}
}
if (Config_getBool(HAVE_DOT) && (Config_getBool(CLASS_DIAGRAMS) || Config_getBool(CLASS_GRAPH)))
{
t << "<para>Inheritance diagram for " << convertToXML(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;
DotClassGraph collaborationGraph(cd,DotNode::Collaboration);
collaborationGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,TRUE,FALSE);
}
{
for (;(mg=mgli.current());++mgli)
{
generateDocbookSection(cd,t,mg->members(),"user-defined",0,mg->header(),
mg->documentation());
}
}
QListIterator<MemberList> mli(cd->getMemberLists());
for (mli.toFirst();(ml=mli.current());++mli)
{
if ((ml->listType()&MemberListType_detailedLists)==0)
{
generateDocbookSection(cd,t,ml,g_docbookSectionMapper.find(ml->listType()));
}
}
if(Config_getBool(REPEAT_BRIEF))
{
if (cd->briefDescription())
{
t << " <simplesect>" << endl;
// A title as 'Brief Description' may not be necessary.
//t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
t << " </simplesect>" << endl;
}
}
if (cd->documentation())
{
t << " <simplesect>" << endl;
t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
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;
}
for (mli.toFirst();(ml=mli.current());++mli)
{
if ((ml->listType()&MemberListType_detailedLists)==0)
{
generateDocbookSection(cd,t,ml,g_docbookSectionMapper.find(ml->listType()),1);
}
}
/*// TODO: Handling of Inheritance and Colloboration graph for Docbook to be implemented
DotClassGraph inheritanceGraph(cd,DotNode::Inheritance);
if (!inheritanceGraph.isTrivial())
{
t << " <inheritancegraph>" << endl;
inheritanceGraph.writeDocbook(t);
t << " </inheritancegraph>" << endl;
}
DotClassGraph collaborationGraph(cd,DotNode::Collaboration);
if (!collaborationGraph.isTrivial())
{
t << " <collaborationgraph>" << endl;
collaborationGraph.writeDocbook(t);
t << " </collaborationgraph>" << endl;
}
t << " <location file=\""
<< cd->getDefFileName() << "\" line=\""
<< cd->getDefLine() << "\"";
if (cd->getStartBodyLine()!=-1)
{
FileDef *bodyDef = cd->getBodyDef();
if (bodyDef)
{
t << " bodyfile=\"" << bodyDef->absFilePath() << "\"";
}
t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
<< cd->getEndBodyLine() << "\"";
}
t << "/>" << endl;
writeListOfAllMembers(cd,t);
*/
t << "</section>" << endl;
}
static void generateDocbookForDir ( DirDef dd,
FTextStream ti 
)
static

Definition at line 1625 of file docbookgen.cpp.

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getBool, Config_getString, convertToXML(), DirDef::displayName(), Definition::docFile(), Definition::docLine(), Definition::documentation(), endl(), EOF_DocBook, err(), DirDef::getFiles(), DirDef::getOutputFileBase(), GOF_BITMAP, Definition::isReference(), Definition::name(), relativePathToRoot(), DirDef::subDirs(), theTranslator, Translator::trDetailedDescription(), Translator::trDirReference(), writeDocbookDocBlock(), writeDocbookHeader_ID(), writeInnerDirs(), and writeInnerFiles().

Referenced by generateDocbook().

{
if (dd->isReference()) return; // skip external references
QCString fileDocbook=dd->getOutputFileBase()+".xml";
//Add the file Documentation info to index file
ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT);
QCString fileName=outputDirectory+"/"+dd->getOutputFileBase()+".xml";
QFile f(fileName);
QCString relPath = relativePathToRoot(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
return;
}
FTextStream t(&f);
//t.setEncoding(FTextStream::UnicodeUTF8);
t << " <title>";
t << "</title>" << endl;
if (Config_getBool(DIRECTORY_GRAPH) && Config_getBool(HAVE_DOT))
{
t << "<para>Directory dependency diagram for " << convertToXML(dd->displayName()) << "</para>" << endl;
DotDirDeps dirdepGraph(dd);
dirdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE);
}
t << " <simplesect>" << endl;
t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
t << " <para>Directory location is " << dd->name() << "</para>" << endl;
t << " </simplesect>" << endl;
t << "</section>" << endl;
}
static void generateDocbookForFile ( FileDef fd,
FTextStream ti 
)
static

Definition at line 1383 of file docbookgen.cpp.

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getBool, Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), endl(), EOF_DocBook, err(), generateDocbookSection(), FileDef::getClassSDict(), Definition::getDefFileName(), FileDef::getMemberGroupSDict(), FileDef::getMemberLists(), FileDef::getNamespaceSDict(), FileDef::getOutputFileBase(), GOF_BITMAP, FileDef::includeFileList(), IncludeInfo::includeName, Definition::isReference(), SIntDict< MemberGroup >::Iterator, IncludeInfo::local, MemberListType_declarationLists, FileDef::name(), relativePathToRoot(), stripPath(), theTranslator, Translator::trDetailedDescription(), writeDocbookCodeBlock(), writeDocbookDocBlock(), writeDocbookHeader_ID(), writeDocbookString(), writeInnerClasses(), and writeInnerNamespaces().

Referenced by generateDocbook().

{
// + includes files
// + includedby files
// + include graph
// + included by graph
// + contained class definitions
// + contained namespace definitions
// + member groups
// + normal members
// + brief desc
// + detailed desc
// + source code
// + location
// - number of lines
if (fd->isReference()) return; // skip external references
QCString fileDocbook=fd->getOutputFileBase()+".xml";
//Add the file Documentation info to index file
ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT);
QCString fileName=outputDirectory+"/"+fd->getOutputFileBase()+".xml";
QCString relPath = relativePathToRoot(fileName);
QFile f(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
return;
}
FTextStream t(&f);
//t.setEncoding(FTextStream::UnicodeUTF8);
t << " <title>";
t << " File Reference";
t << "</title>" << endl;
if (fd->includeFileList())
{
QListIterator<IncludeInfo> ili1(*fd->includeFileList());
for (ili1.toFirst();(inc=ili1.current());++ili1)
{
t << " <programlisting>#include ";
if (inc->local)
{
t << "&quot;";
}
else
{
t << "&lt;";
}
if (inc->local)
{
t << "&quot;";
}
else
{
t << "&gt;";
}
t << "</programlisting>" << endl;
}
}
if (Config_getBool(HAVE_DOT))
{
if (Config_getBool(INCLUDE_GRAPH))
{
t << "<para>Include dependency diagram for " << convertToXML(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;
DotInclDepGraph ibdepGraph(fd, TRUE);
ibdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE);
}
}
if (fd->getClassSDict())
{
}
if (fd->getNamespaceSDict())
{
}
{
for (;(mg=mgli.current());++mgli)
{
generateDocbookSection(fd,t,mg->members(),"user-defined",0,mg->header(),
mg->documentation());
}
}
QListIterator<MemberList> mli(fd->getMemberLists());
for (mli.toFirst();(ml=mli.current());++mli)
{
if ((ml->listType()&MemberListType_declarationLists)!=0)
{
generateDocbookSection(fd,t,ml,g_docbookSectionMapper.find(ml->listType()));
}
}
t << " <simplesect>" << endl;
t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
if (Config_getBool(FULL_PATH_NAMES))
{
t << " <para>Definition in file " << fd->getDefFileName() << "</para>" << endl;
}
else
{
t << " <para>Definition in file " << stripPath(fd->getDefFileName()) << "</para>" << endl;
}
t << " </simplesect>" << endl;
if (Config_getBool(DOCBOOK_PROGRAMLISTING))
{
t << " <literallayout><computeroutput>" << endl;
t << " </computeroutput></literallayout>" << endl;
}
t << "</section>" << endl;
}
static void generateDocbookForGroup ( GroupDef gd,
FTextStream ti 
)
static

Definition at line 1522 of file docbookgen.cpp.

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getBool, Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), endl(), EOF_DocBook, err(), generateDocbookSection(), GroupDef::getClasses(), GroupDef::getFiles(), GroupDef::getMemberGroupSDict(), GroupDef::getMemberLists(), GroupDef::getNamespaces(), GroupDef::getOutputFileBase(), GroupDef::getPages(), GroupDef::getSubGroups(), GOF_BITMAP, GroupDef::groupTitle(), GroupDef::isASubGroup(), Definition::isReference(), SIntDict< MemberGroup >::Iterator, MemberListType_declarationLists, relativePathToRoot(), theTranslator, Translator::trDetailedDescription(), writeDocbookDocBlock(), writeDocbookHeader_ID(), writeInnerClasses(), writeInnerFiles(), writeInnerGroupFiles(), writeInnerGroups(), writeInnerNamespaces(), and writeInnerPages().

Referenced by generateDocbook().

{
// + members
// + member groups
// + files
// + classes
// + namespaces
// - packages
// + pages
// + child groups
// - examples
// + brief description
// + detailed description
if (gd->isReference()) return; // skip external references
if (!gd->isASubGroup())
{
QCString fileDocbook=gd->getOutputFileBase()+".xml";
//Add the file Documentation info to index file
ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
}
QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT);
QCString fileName=outputDirectory+"/"+gd->getOutputFileBase()+".xml";
QCString relPath = relativePathToRoot(fileName);
QFile f(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
return;
}
FTextStream t(&f);
//t.setEncoding(FTextStream::UnicodeUTF8);
t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl;
if (Config_getBool(GROUP_GRAPHS) && Config_getBool(HAVE_DOT))
{
t << "<para>Collaboration diagram for " << convertToXML(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;
//t << " </section>" << endl;
}
if (gd->documentation())
{
t << " <section>" << endl;
t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
t << " </section>" << endl;
}
{
for (;(mg=mgli.current());++mgli)
{
generateDocbookSection(gd,t,mg->members(),"user-defined",0,mg->header(),
mg->documentation());
}
}
QListIterator<MemberList> mli(gd->getMemberLists());
for (mli.toFirst();(ml=mli.current());++mli)
{
if ((ml->listType()&MemberListType_declarationLists)!=0)
{
generateDocbookSection(gd,t,ml,g_docbookSectionMapper.find(ml->listType()));
}
}
for (mli.toFirst();(ml=mli.current());++mli)
{
if ((ml->listType()&MemberListType_declarationLists)!=0)
{
generateDocbookSection(gd,t,ml,g_docbookSectionMapper.find(ml->listType()),1);
}
}
t << "</section>" << endl;
}
static void generateDocbookForMember ( MemberDef md,
FTextStream t,
Definition def,
bool  detailed = 0 
)
static

Definition at line 393 of file docbookgen.cpp.

References MemberDef::anchor(), MemberDef::argsString(), MemberDef::briefDescription(), Config_getBool, convertToXML(), MemberDef::declaration(), MemberDef::declArgumentList(), MemberDef::definition(), DefinitionIntf::definitionType(), Definition::docFile(), Definition::docLine(), MemberDef::documentation(), endl(), MemberDef::enumFieldList(), Definition::getBodyDef(), MemberDef::getClassDef(), Definition::getDefFileName(), Definition::getDefLine(), MemberDef::getGroupDef(), MemberDef::getNamespaceDef(), Definition::getOuterScope(), GroupDef::getOutputFileBase(), MemberDef::initializer(), Definition::isHidden(), linkifyText(), memberOutputFileBase(), MemberDef::memberType(), MemberType_DCOP, MemberType_Define, MemberType_Enumeration, MemberType_EnumValue, MemberType_Event, MemberType_Friend, MemberType_Function, MemberType_Interface, MemberType_Property, MemberType_Service, MemberType_Signal, MemberType_Slot, MemberType_Typedef, MemberType_Variable, Argument::name, Definition::name(), stripPath(), theTranslator, Translator::trEnumerationValues(), Argument::type, DefinitionIntf::TypeGroup, MemberDef::typeString(), writeDocbookDocBlock(), and writeDocbookString().

Referenced by generateDocbookSection().

{
// + declaration/definition arg lists
// + reimplements
// + reimplementedBy
// + exceptions
// + const/volatile specifiers
// - examples
// + source definition
// + source references
// + source referenced by
// - body code
// + template arguments
// (templateArguments(), definitionTemplateParameterLists())
// - call graph
// enum values are written as part of the enum
if (md->memberType()==MemberType_EnumValue) return;
if (md->isHidden()) return;
//if (md->name().at(0)=='@') return; // anonymous member
// group members are only visible in their group
//if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
QCString memType;
switch (md->memberType())
{
case MemberType_Define: memType="define"; break;
case MemberType_Function: memType="function"; break;
case MemberType_Variable: memType="variable"; break;
case MemberType_Typedef: memType="typedef"; break;
case MemberType_Enumeration: memType="enum"; break;
case MemberType_EnumValue: ASSERT(0); break;
case MemberType_Signal: memType="signal"; break;
case MemberType_Slot: memType="slot"; break;
case MemberType_Friend: memType="friend"; break;
case MemberType_DCOP: memType="dcop"; break;
case MemberType_Property: memType="property"; break;
case MemberType_Event: memType="event"; break;
case MemberType_Interface: memType="interface"; break;
case MemberType_Service: memType="service"; break;
}
QCString scopeName;
if (md->getClassDef())
{
scopeName=md->getClassDef()->name();
}
else if (md->getNamespaceDef())
{
scopeName=md->getNamespaceDef()->name();
}
if (detailed==0)
{
t << " <para>" << endl;
t << " <itemizedlist>" << endl;
t << " <listitem>" << endl;
//enum
bool closePara=TRUE;
{
MemberList *enumFields = md->enumFieldList();
t << " <para><literallayout>" << memType << " <link linkend=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
if (enumFields!=0)
{
MemberListIterator emli(*enumFields);
MemberDef *emd;
t << " {" << endl;
int cnt=0;
for (emli.toFirst();(emd=emli.current());++emli)
{
if (cnt!=0)
{
t << "," << endl;
}
t << "<link linkend=\"" << memberOutputFileBase(emd) << "_1" << emd->anchor() << "\">";
t << "</link>";
if (!emd->initializer().isEmpty())
{
}
cnt++;
}
t << endl << "}";
}
t << "</literallayout>" << endl;
if (md->briefDescription())
{
t << "<para><emphasis>";
t << "</emphasis></para>" << endl;
}
}
else if (md->memberType()==MemberType_Define)
{
t << " <para>" << "#" << memType << " <link linkend=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
if (!md->initializer().isEmpty() && md->initializer().length()<2000)
{
t << " ";
}
if (md->briefDescription())
{
t << "<para><emphasis>";
t << "</emphasis></para>" << endl;
}
}
else if (md->memberType()==MemberType_Variable)
{
if (md->getClassDef())
{
t << " <para>" << convertToXML(md->declaration());
if (md->briefDescription())
{
t << "<para><emphasis>";
t << "</emphasis></para>";
}
}
else
{
t << " <para>";
t << " <link linkend=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
if (md->briefDescription())
{
t << "<para><emphasis>";
t << "</emphasis></para>" << endl;
}
}
}
else if (md->memberType()==MemberType_Typedef)
{
t << " <para>" << memType;
t << " ";
t << " ";
t << " <link linkend=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
if (md->briefDescription())
{
t << "<para><emphasis>";
t << "</emphasis></para>" << endl;
}
}
else if (md->memberType()==MemberType_Function)
{
t << " <para>";
t << " <link linkend=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
t << " (" << endl;
ArgumentList *declAl = md->declArgumentList();
if (declAl && declAl->count()>0)
{
ArgumentListIterator declAli(*declAl);
int cnt=0;
for (declAli.toFirst();(a=declAli.current());++declAli)
{
if (cnt!=0)
{
t << ", ";
}
if (!a->type.isEmpty())
{
}
t << " ";
if (!a->name.isEmpty())
{
}
cnt++;
}
}
t << ")";
if (md->briefDescription())
{
t << "<para><emphasis>";
t << "</emphasis></para>" << endl;
}
}
else
{
closePara = FALSE;
}
if (closePara) t << "</para>" << endl;
t << " </listitem>" << endl;
t << " </itemizedlist>" << endl;
t << " </para>" << endl;
}
else
{
{
MemberList *enumFields = md->enumFieldList();
t << " <section xml:id=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << memType << " " << convertToXML(md->name()) << " " << "</title>" << endl;
t << " ";
t << endl;
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)
{
t << " <varlistentry xml:id=\"";
t << memberOutputFileBase(emd) << "_1" << emd->anchor() << "\">" << endl;
t << " <term>";
t << "</term>" << endl;
t << " <listitem>" << endl;
if(Config_getBool(REPEAT_BRIEF))
{
t << " <para>";
t << "</para>" << endl;
}
t << " </listitem>" << endl;
t << " </varlistentry>" << endl;
}
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 << "{" << endl;
for (emli.toFirst();(emd=emli.current());++emli)
{
if (!emd->initializer().isEmpty())
{
}
t << ", " << endl;
}
t << "}" << convertToXML(md->name()) << ";" << endl;
t << " </literallayout></computeroutput>" << endl;
t << " </para>" << endl;
t << " </section>" << endl;
}
}
else if (md->memberType()==MemberType_Typedef)
{
t << " <section xml:id=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << "</title>";
if(Config_getBool(REPEAT_BRIEF))
{
t << " <emphasis>";
t << "</emphasis>" << endl;
}
t << " ";
t << endl;
t << " </section>" << endl;
}
else if (md->memberType()==MemberType_Function)
{
t << " <section xml:id=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << " " << convertToXML(md->argsString()) << "</title>";
if(Config_getBool(REPEAT_BRIEF))
{
t << " <emphasis>";
t << "</emphasis>" << endl;
}
t << " ";
t << endl;
t << " </section>" << endl;
}
else if (md->memberType()==MemberType_Define)
{
if (md->documentation())
{
t << " <section xml:id=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << "</title>";
t << " ";
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)
{
if (md->getClassDef())
{
if (md->documentation())
{
t << " <simplesect>" << endl;
t << " <title>" << convertToXML(md->definition()) << "</title>";
t << " ";
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;
}
}
else
{
t << " <section xml:id=\"";
{
}
else
{
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << "</title>";
if(Config_getBool(REPEAT_BRIEF))
{
t << " <emphasis>";
t << "</emphasis>" << endl;
}
t << " ";
t << endl;
t << " </section>" << endl;
}
}
}
}
static void generateDocbookForNamespace ( NamespaceDef nd,
FTextStream ti 
)
static

Definition at line 1302 of file docbookgen.cpp.

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getBool, Config_getString, Definition::docFile(), Definition::docLine(), Definition::documentation(), endl(), err(), generateDocbookSection(), NamespaceDef::getClassSDict(), Definition::getDefFileName(), Definition::getDefLine(), NamespaceDef::getMemberGroupSDict(), NamespaceDef::getMemberLists(), NamespaceDef::getNamespaceSDict(), NamespaceDef::getOutputFileBase(), Definition::isHidden(), Definition::isReference(), SIntDict< MemberGroup >::Iterator, MemberListType_declarationLists, Definition::name(), stripPath(), theTranslator, Translator::trDetailedDescription(), writeDocbookDocBlock(), writeDocbookHeader_ID(), writeDocbookString(), writeInnerClasses(), and writeInnerNamespaces().

Referenced by generateDocbook().

{
// + contained class definitions
// + contained namespace definitions
// + member groups
// + normal members
// + brief desc
// + detailed desc
// + location
// - files containing (parts of) the namespace definition
if (nd->isReference() || nd->isHidden()) return; // skip external references
QCString fileDocbook=nd->getOutputFileBase()+".xml";
//Add the file Documentation info to index file
ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT);
QCString fileName=outputDirectory+"/"+nd->getOutputFileBase()+".xml";
QFile f(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
return;
}
FTextStream t(&f);
//t.setEncoding(FTextStream::UnicodeUTF8);
t << "<title>";
t << "</title>" << endl;
{
for (;(mg=mgli.current());++mgli)
{
generateDocbookSection(nd,t,mg->members(),"user-defined",0,mg->header(),
mg->documentation());
}
}
QListIterator<MemberList> mli(nd->getMemberLists());
for (mli.toFirst();(ml=mli.current());++mli)
{
if ((ml->listType()&MemberListType_declarationLists)!=0)
{
generateDocbookSection(nd,t,ml,g_docbookSectionMapper.find(ml->listType()));
}
}
if(Config_getBool(REPEAT_BRIEF))
{
if (nd->briefDescription())
{
t << " <simplesect>" << endl;
//t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
t << " </simplesect>" << endl;
}
}
if (nd->documentation())
{
t << " <simplesect>" << endl;
t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
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;
}
t << "</section>" << endl;
}
static void generateDocbookForPage ( PageDef pd,
FTextStream ti,
bool  isExample 
)
static

Definition at line 1671 of file docbookgen.cpp.

References Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), endl(), err(), SDict< T >::find(), PageDef::getGroupDef(), PageDef::getOutputFileBase(), PageDef::getSubPages(), PageDef::hasParentPage(), Definition::isReference(), Definition::name(), Doxygen::sectionDict, SectionInfo::title, writeDocbookDocBlock(), writeDocbookHeader_ID(), writeDocbookHeaderMainpage(), and writeInnerPages().

Referenced by generateDocbook().

{
// + name
// + title
// + documentation
if (pd->isReference()) return;
QCString pageName = pd->getOutputFileBase();
if (pd->getGroupDef())
{
pageName+=(QCString)"_"+pd->name();
}
if (pageName=="index")
{
pageName="mainpage"; // to prevent overwriting the generated index page.
}
QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT);
QCString fileName=outputDirectory+"/"+pageName+".xml";
QFile f(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
return;
}
FTextStream t(&f);
//t.setEncoding(FTextStream::UnicodeUTF8);
if(isExample)
{
QCString fileDocbook=pageName+".xml";
ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
}
if (!pd->hasParentPage() && !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;
}
else
{
QCString pid;
if(isExample)
{
pid = pageName;
}
else
{
pid = pageName+"_1"+pageName;
}
}
if (si)
{
t << " <title>" << convertToXML(si->title) << "</title>" << endl;
}
else
{
t << " <title>" << convertToXML(pd->name()) << "</title>" << endl;
}
if (isExample)
{
writeDocbookDocBlock(t,pd->docFile(),pd->docLine(),pd,0,
pd->documentation()+"\n\\include "+pd->name());
}
else
{
writeDocbookDocBlock(t,pd->docFile(),pd->docLine(),pd,0,
pd->documentation());
}
if (!pd->hasParentPage() && !isExample)
{
t << endl << "</chapter>" << endl;
}
else
{
t << endl << "</section>" << endl;
}
}
static void generateDocbookSection ( Definition d,
FTextStream t,
MemberList ml,
const char *  ,
bool  detailed = 0,
const char *  header = 0,
const char *  documentation = 0 
)
static

Definition at line 813 of file docbookgen.cpp.

References Config_getBool, convertToXML(), DefinitionIntf::definitionType(), Definition::docFile(), Definition::docLine(), MemberDef::documentation(), endl(), generateDocbookForMember(), MemberDef::getNamespaceDef(), MemberList::listType(), MemberListType_decDefineMembers, MemberListType_decEnumMembers, MemberListType_decFuncMembers, MemberListType_decTypedefMembers, MemberListType_decVarMembers, MemberListType_priAttribs, MemberListType_proAttribs, MemberListType_pubAttribs, theTranslator, Translator::trDefineDocumentation(), Translator::trDefines(), Translator::trEnumerations(), Translator::trEnumerationTypeDocumentation(), Translator::trFunctionDocumentation(), Translator::trFunctions(), Translator::trMemberDataDocumentation(), Translator::trPrivateAttribs(), Translator::trProtectedAttribs(), Translator::trPublicAttribs(), Translator::trTypedefDocumentation(), Translator::trTypedefs(), Translator::trVariableDocumentation(), Translator::trVariables(), DefinitionIntf::TypeFile, and writeDocbookDocBlock().

Referenced by generateDocbookForClass(), generateDocbookForFile(), generateDocbookForGroup(), and generateDocbookForNamespace().

{
if (ml==0) return;
MemberDef *md;
int count=0;
int doc_count=0;
QCString title, desctitle;
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.
{
count++;
}
}
if (count==0) return; // empty list
switch (ml->listType())
{
default: title=""; desctitle=""; break;
}
if (detailed)
{
for (mli.toFirst();(md=mli.current());++mli)
{
if (md->documentation().isEmpty() && !Config_getBool(REPEAT_BRIEF))
{
continue;
}
doc_count = 1;
break;
}
if(doc_count == 0)
{
return;
}
if (desctitle)
{
t << " <section>" << endl;
t << " <title>" << desctitle << "</title>" << endl;
}
} else
{
t << " <section>" << endl;
if (header)
{
t << " <title>" << convertToXML(header) << "</title>" << endl;
}
else
{
t << " <title>" << title << "</title>" << endl;
}
}
if (documentation)
{
t << " <description>";
writeDocbookDocBlock(t,d->docFile(),d->docLine(),d,0,documentation);
t << "</description>" << endl;
}
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 (detailed && md->documentation().isEmpty() && !Config_getBool(REPEAT_BRIEF))
{
continue;
}
generateDocbookForMember(md,t,d,detailed);
}
}
if (detailed)
{
if (desctitle)
{
t << " </section>" << endl;
}
}
else
{
t << " </section>" << endl;
}
}
static QCString memberOutputFileBase ( MemberDef md)
static

Definition at line 382 of file docbookgen.cpp.

References MemberDef::getOutputFileBase().

Referenced by generateDocbookForMember().

{
//static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
//if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0)
// return md->getClassDef()->getDocbookOutputFileBase();
//else
// return md->getOutputFileBase();
return md->getOutputFileBase();
}
void writeDocbookCodeBlock ( FTextStream t,
FileDef fd 
)

Definition at line 350 of file docbookgen.cpp.

References FileDef::absFilePath(), Config_getBool, fileToString(), DocbookCodeGenerator::finish(), Definition::getDefFileExtension(), getLanguageFromFileName(), ParserManager::getParser(), ParserInterface::parseCode(), Doxygen::parserManager, and ParserInterface::resetCodeParserState().

Referenced by generateDocbookForFile().

{
pIntf->parseCode(*docbookGen, // codeOutIntf
0, // scopeName
fileToString(fd->absFilePath(),Config_getBool(FILTER_SOURCE_FILES)),
langExt, // lang
FALSE, // isExampleBlock
0, // exampleName
fd, // fileDef
-1, // startLine
-1, // endLine
FALSE, // inlineFragement
0, // memberDef
TRUE // showLineNumbers
);
docbookGen->finish();
delete docbookGen;
}
void writeDocbookCodeString ( FTextStream t,
const char *  s,
int &  col 
)
inline

Definition at line 110 of file docbookgen.cpp.

References Config_getInt.

Referenced by DocbookCodeGenerator::codify().

{
char c;
while ((c=*s++))
{
switch(c)
{
case '\t':
{
static int tabSize = Config_getInt(TAB_SIZE);
int spacesToNextTabStop = tabSize - (col%tabSize);
col+=spacesToNextTabStop;
while (spacesToNextTabStop--) t << "&#32;";
break;
}
case ' ': t << "&#32;"; col++; break;
case '<': t << "&lt;"; col++; break;
case '>': t << "&gt;"; col++; break;
case '&': t << "&amp;"; col++; break;
case '\'': t << "&apos;"; col++; break;
case '"': t << "&quot;"; col++; break;
default: t << c; col++; break;
}
}
}
static void writeDocbookDocBlock ( FTextStream t,
const QCString &  fileName,
int  lineNr,
Definition scope,
MemberDef md,
const QCString &  text 
)
static

Definition at line 327 of file docbookgen.cpp.

References DocNode::accept(), and validatingParseDoc().

Referenced by generateDocbookForClass(), generateDocbookForDir(), generateDocbookForFile(), generateDocbookForGroup(), generateDocbookForMember(), generateDocbookForNamespace(), generateDocbookForPage(), and generateDocbookSection().

{
QCString stext = text.stripWhiteSpace();
if (stext.isEmpty()) return;
// convert the documentation string into an abstract syntax tree
DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text,FALSE,FALSE);
// create a code generator
DocbookCodeGenerator *docbookCodeGen = new DocbookCodeGenerator(t);
// create a parse tree visitor for Docbook
DocbookDocVisitor *visitor = new DocbookDocVisitor(t,*docbookCodeGen);
// visit all nodes
root->accept(visitor);
// clean up
delete visitor;
delete docbookCodeGen;
delete root;
}
static void writeDocbookHeader_ID ( FTextStream t,
QCString  id 
)
static

Definition at line 142 of file docbookgen.cpp.

References endl().

Referenced by generateDocbookForClass(), generateDocbookForDir(), generateDocbookForFile(), generateDocbookForGroup(), generateDocbookForNamespace(), and generateDocbookForPage().

{
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;
}
static void writeDocbookHeaderMainpage ( FTextStream t)
static

Definition at line 136 of file docbookgen.cpp.

References endl().

Referenced by generateDocbookForPage().

{
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;
}
void writeDocbookLink ( FTextStream t,
const char *  ,
const char *  compoundId,
const char *  anchorId,
const char *  text,
const char *   
)

Definition at line 148 of file docbookgen.cpp.

References writeDocbookString().

Referenced by DocbookCodeGenerator::writeCodeLink(), and TextGeneratorDocbookImpl::writeLink().

{
t << "<link linkend=\"" << compoundId;
if (anchorId) t << "_1" << anchorId;
t << "\"";
t << ">";
t << "</link>";
}
void writeDocbookString ( FTextStream t,
const char *  s 
)
inline
static void writeInnerClasses ( const ClassSDict cl,
FTextStream t 
)
static

Definition at line 916 of file docbookgen.cpp.

References Definition::briefDescription(), classOutputFileBase(), convertToXML(), endl(), Definition::isHidden(), SDict< ClassDef >::Iterator, Definition::name(), theTranslator, Translator::trClasses(), and writeDocbookString().

Referenced by generateDocbookForClass(), generateDocbookForFile(), generateDocbookForGroup(), and generateDocbookForNamespace().

{
if (cl)
{
ClassDef *cd;
QCString title = theTranslator->trClasses();
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)
{
t << " <para>" << endl;
t << " <itemizedlist>" << endl;
t << " <listitem>" << endl;
t << " <para>" << "struct <link linkend=\"" << classOutputFileBase(cd) << "\">" << convertToXML(cd->name()) << "</link>";
t << "</para>" << endl;
if (cd->briefDescription())
{
t << "<para><emphasis>";
t << "</emphasis></para>" << endl;
}
t << " </listitem>" << endl;
t << " </itemizedlist>" << endl;
t << " </para>" << endl;
}
}
if (cli.toFirst())
{
t << " </section>" << endl;
}
}
}
static void writeInnerDirs ( const DirList dl,
FTextStream t 
)
static

Definition at line 1067 of file docbookgen.cpp.

References convertToXML(), DirDef::displayName(), endl(), DirDef::getOutputFileBase(), theTranslator, and Translator::trDirectories().

Referenced by generateDocbookForDir().

{
if (dl)
{
QListIterator<DirDef> subdirs(*dl);
DirDef *subdir;
QCString title = theTranslator->trDirectories();
if (subdirs.toFirst())
{
t << " <simplesect>" << endl;
t << " <title> " << title << " </title>" << endl;
}
for (subdirs.toFirst();(subdir=subdirs.current());++subdirs)
{
t << " <para>" << endl;
t << " <itemizedlist>" << endl;
t << " <listitem>" << endl;
t << " <para>" << "dir <link linkend=\"" << subdir->getOutputFileBase() << "\">" << convertToXML(subdir->displayName()) << "</link>";
t << "</para>" << endl;
t << " </listitem>" << endl;
t << " </itemizedlist>" << endl;
t << " </para>" << endl;
}
if (subdirs.toFirst())
{
t << " </simplesect>" << endl;
}
}
}
static void writeInnerFiles ( const FileList fl,
FTextStream t 
)
static

Definition at line 990 of file docbookgen.cpp.

References convertToXML(), endl(), FileDef::getOutputFileBase(), FileDef::name(), theTranslator, and Translator::trFile().

Referenced by generateDocbookForDir(), and generateDocbookForGroup().

{
if (fl)
{
QListIterator<FileDef> fli(*fl);
FileDef *fd;
QCString title = theTranslator->trFile(TRUE,TRUE);
if (fli.toFirst())
{
t << " <simplesect>" << endl;
t << " <title> " << title << " </title>" << endl;
}
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>" << endl;
t << " </listitem>" << endl;
t << " </itemizedlist>" << endl;
t << " </para>" << endl;
}
if (fli.toFirst())
{
t << " </simplesect>" << endl;
}
}
}
static void writeInnerGroupFiles ( const GroupList gl,
FTextStream t 
)
static

Definition at line 1097 of file docbookgen.cpp.

References endl(), and GroupDef::getOutputFileBase().

Referenced by generateDocbookForGroup().

{
if (gl)
{
GroupDef *sgd;
for (gli.toFirst();(sgd=gli.current());++gli)
{
t << "<xi:include href=\"" << sgd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
}
}
}
static void writeInnerGroups ( const GroupList gl,
FTextStream t 
)
static

Definition at line 1035 of file docbookgen.cpp.

References convertToXML(), endl(), GroupDef::getOutputFileBase(), GroupDef::groupTitle(), theTranslator, and Translator::trModules().

Referenced by generateDocbookForGroup().

{
if (gl)
{
GroupDef *sgd;
//Docbook header tags for inner groups
if (gli.toFirst())
{
t << " <simplesect>" << endl;
t << " <title>" << theTranslator->trModules() << "</title>" << endl;
t << " </simplesect>" << endl;
t << " <para>" << endl;
t << " <itemizedlist>" << endl;
}
for (gli.toFirst();(sgd=gli.current());++gli)
{
t << " <listitem><para><link linkend=\"" << sgd->getOutputFileBase() << "\">" << convertToXML(sgd->groupTitle()) << "</link></para></listitem>" << endl;
}
//Docbook footer tags for inner groups
if (gli.toFirst())
{
t << " </itemizedlist>" << endl;
t << " </para>" << endl;
}
}
}
static void writeInnerNamespaces ( const NamespaceSDict nl,
FTextStream t 
)
static

Definition at line 956 of file docbookgen.cpp.

References convertToXML(), endl(), NamespaceDef::getOutputFileBase(), Definition::isHidden(), SDict< NamespaceDef >::Iterator, Definition::name(), theTranslator, and Translator::trNamespaces().

Referenced by generateDocbookForFile(), generateDocbookForGroup(), and generateDocbookForNamespace().

{
if (nl)
{
QCString title = theTranslator->trNamespaces();
if (nli.toFirst())
{
t << " <simplesect>" << endl;
t << " <title> " << title << " </title>" << endl;
}
for (nli.toFirst();(nd=nli.current());++nli)
{
if (!nd->isHidden() && nd->name().find('@')==-1) // skip anonymouse scopes
{
t << " <para>" << endl;
t << " <itemizedlist>" << endl;
t << " <listitem>" << endl;
t << " <para>" << "struct <link linkend=\"" << nd->getOutputFileBase() << "\">" << convertToXML(nd->name()) << "</link>";
t << "</para>" << endl;
t << " </listitem>" << endl;
t << " </itemizedlist>" << endl;
t << " </para>" << endl;
}
}
if (nli.toFirst())
{
t << " </simplesect>" << endl;
}
}
}
static void writeInnerPages ( const PageSDict pl,
FTextStream t 
)
static

Definition at line 1021 of file docbookgen.cpp.

References endl(), PageDef::getOutputFileBase(), and SDict< PageDef >::Iterator.

Referenced by generateDocbookForGroup(), and generateDocbookForPage().

{
if (pl)
{
PageDef *pd;
for (pli.toFirst();(pd=pli.current());++pli)
{
t << "<xi:include href=\"" << pd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
}
}
}
static void writeTemplateArgumentList ( ArgumentList al,
FTextStream t,
Definition scope,
FileDef fileScope,
int  indent 
)
static

Definition at line 283 of file docbookgen.cpp.

References Argument::defval, endl(), linkifyText(), Argument::name, and Argument::type.

Referenced by writeTemplateList().

{
QCString indentStr;
indentStr.fill(' ',indent);
if (al)
{
t << indentStr << "<templateparamlist>" << endl;
for (ali.toFirst();(a=ali.current());++ali)
{
t << indentStr << " <param>" << endl;
if (!a->type.isEmpty())
{
t << indentStr << " <type>";
linkifyText(TextGeneratorDocbookImpl(t),scope,fileScope,0,a->type);
t << "</type>" << endl;
}
if (!a->name.isEmpty())
{
t << indentStr << " <declname>" << a->name << "</declname>" << endl;
t << indentStr << " <defname>" << a->name << "</defname>" << endl;
}
if (!a->defval.isEmpty())
{
t << indentStr << " <defval>";
linkifyText(TextGeneratorDocbookImpl(t),scope,fileScope,0,a->defval);
t << "</defval>" << endl;
}
t << indentStr << " </param>" << endl;
}
t << indentStr << "</templateparamlist>" << endl;
}
}
static void writeTemplateList ( ClassDef cd,
FTextStream t 
)
static

Variable Documentation

DocbookSectionMapper g_docbookSectionMapper
static

Definition at line 102 of file docbookgen.cpp.