/****************************************************************************** * * * * Copyright (C) 1997-2015 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby * granted. No representations are made about the suitability of this software * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * */ #include #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" #include "dot.h" #include "dotcallgraph.h" #include "dotclassgraph.h" #include "dotdirdeps.h" #include "dotgroupcollaboration.h" #include "dotincldepgraph.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" #include "dir.h" // no debug info #define Docbook_DB(x) do {} while(0) // debug to stdout //#define Docbook_DB(x) printf x // 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 << "\n"; #define DB_GEN_C2(y) DB_GEN_C2a(t,y) #define DB_GEN_C2a(x,y) x << "\n"; #else #define DB_GEN_C #define DB_GEN_C1(x) #define DB_GEN_C2(y) #define DB_GEN_C2a(x,y) #endif //------------------ inline void writeDocbookString(TextStream &t,const QCString &s) { t << convertToDocBook(s); } inline void writeDocbookCodeString(TextStream &t,const QCString &str, int &col) { if (str.isEmpty()) return; const char *s = str.data(); char c; while ((c=*s++)) { switch(c) { case '\t': { int tabSize = Config_getInt(TAB_SIZE); int spacesToNextTabStop = tabSize - (col%tabSize); col+=spacesToNextTabStop; while (spacesToNextTabStop--) t << " "; break; } case ' ': t << " "; col++; break; case '<': t << "<"; col++; break; case '>': t << ">"; col++; break; case '&': t << "&"; col++; break; case '\'': t << "'"; col++; break; case '"': t << """; col++; break; default: { uchar uc = static_cast(c); static const char *hex="0123456789ABCDEF"; if (uc<32) { t << "$" << hex[uc>>4] << hex[uc&0xF] << ";"; } else { t << c; } col++; } break; } } } static void addIndexTerm(TextStream &t, QCString prim, QCString sec = "") { t << ""; t << convertToDocBook(prim); t << ""; if (!sec.isEmpty()) { t << ""; t << convertToDocBook(sec); t << ""; } t << "\n"; } void writeDocbookLink(TextStream &t,const QCString & /*extRef*/,const QCString &compoundId, const QCString &anchorId,const QCString & text,const QCString & /*tooltip*/) { t << ""; writeDocbookString(t,text); t << ""; } DocbookCodeGenerator::DocbookCodeGenerator(TextStream &t) : m_t(t) { m_prettyCode=Config_getBool(DOCBOOK_PROGRAMLISTING); } DocbookCodeGenerator::~DocbookCodeGenerator() {} void DocbookCodeGenerator::codify(const QCString &text) { Docbook_DB(("(codify \"%s\")\n",text)); writeDocbookCodeString(m_t,text,m_col); } void DocbookCodeGenerator::writeCodeLink(const QCString &ref,const QCString &file, const QCString &anchor,const QCString &name, const QCString &tooltip) { Docbook_DB(("(writeCodeLink)\n")); writeDocbookLink(m_t,ref,file,anchor,name,tooltip); m_col+=name.length(); } void DocbookCodeGenerator::writeCodeLinkLine(const QCString &,const QCString &file, const QCString &,const QCString &name, const QCString &) { Docbook_DB(("(writeCodeLinkLine)\n")); m_t << ""; m_col+=name.length(); } void DocbookCodeGenerator::writeTooltip(const QCString &, const DocLinkInfo &, const QCString &, const QCString &, 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() { if (m_insideCodeLine) m_t << "\n"; Docbook_DB(("(endCodeLine)\n")); m_lineNumber = -1; m_refId.resize(0); m_external.resize(0); m_insideCodeLine=FALSE; } void DocbookCodeGenerator::startFontClass(const QCString &colorClass) { Docbook_DB(("(startFontClass)\n")); m_t << ""; m_insideSpecialHL=TRUE; } void DocbookCodeGenerator::endFontClass() { Docbook_DB(("(endFontClass)\n")); m_t << ""; // non DocBook m_insideSpecialHL=FALSE; } void DocbookCodeGenerator::writeCodeAnchor(const QCString &) { Docbook_DB(("(writeCodeAnchor)\n")); } void DocbookCodeGenerator::writeLineNumber(const QCString &ref,const QCString &fileName, const QCString &anchor,int l) { Docbook_DB(("(writeLineNumber)\n")); m_insideCodeLine = TRUE; if (m_prettyCode) { QCString lineNumber; lineNumber.sprintf("%05d",l); if (!fileName.isEmpty() && !m_sourceFileName.isEmpty()) { writeCodeLinkLine(ref,m_sourceFileName,anchor,lineNumber,QCString()); writeCodeLink(ref,fileName,anchor,lineNumber,QCString()); } else { codify(lineNumber); } m_t << " "; } else { m_t << l << " "; } m_col=0; } void DocbookCodeGenerator::setCurrentDoc(const Definition *,const QCString &,bool) { } void DocbookCodeGenerator::addWord(const QCString &,bool) { } void DocbookCodeGenerator::finish() { endCodeLine(); } void DocbookCodeGenerator::startCodeFragment(const QCString &) { DB_GEN_C1(m_t) m_t << ""; } void DocbookCodeGenerator::endCodeFragment(const QCString &) { DB_GEN_C1(m_t) //endCodeLine checks is there is still an open code line, if so closes it. endCodeLine(); m_t << ""; } //------------------------------------------------------------------------------- DocbookGenerator::DocbookGenerator() : OutputGenerator(Config_getString(DOCBOOK_OUTPUT)), m_codeGen(m_t) { DB_GEN_C } DocbookGenerator::DocbookGenerator(const DocbookGenerator &og) : OutputGenerator(og), m_codeGen(og.m_codeGen) { } DocbookGenerator &DocbookGenerator::operator=(const DocbookGenerator &og) { OutputGenerator::operator=(og); return *this; } std::unique_ptr DocbookGenerator::clone() const { return std::make_unique(*this); } DocbookGenerator::~DocbookGenerator() { DB_GEN_C } void DocbookGenerator::init() { QCString dir=Config_getString(DOCBOOK_OUTPUT); Dir d(dir.str()); if (!d.exists() && !d.mkdir(dir.str())) { term("Could not create output directory %s\n",qPrint(dir)); } createSubDirs(d); } void DocbookGenerator::cleanup() { QCString dname = Config_getString(DOCBOOK_OUTPUT); Dir d(dname.str()); clearSubDirs(d); } void DocbookGenerator::startFile(const QCString &name,const QCString &,const QCString &,int) { 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.setRelativePath(relPath); m_codeGen.setSourceFileName(stripPath(fileName)); m_t << "\n";; m_t << "<" << fileType << " xmlns=\"http://docbook.org/ns/docbook\" version=\"5.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\""; if (!pageName.isEmpty()) m_t << " xml:id=\"_" << stripPath(pageName) << "\""; m_t << " xml:lang=\"" << theTranslator->trISOLang() << "\""; m_t << ">\n"; } void DocbookGenerator::endFile() { DB_GEN_C if (m_inDetail) m_t << "\n"; m_inDetail = FALSE; while (m_inLevel != -1) { m_t << "\n"; m_inLevel--; } if (m_inGroup) m_t << "\n"; m_inGroup = FALSE; QCString fileType="section"; QCString fileName= m_codeGen.sourceFileName(); if (fileName == "index.xml") { fileType="book"; } else if (fileName == "mainpage.xml") { fileType="chapter"; } m_t << "\n"; 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); m_t << " \n"; m_t << " " << convertToDocBook(dbk_projectName) << "\n"; m_t << " \n"; } break; case isTitlePageAuthor: break; case isMainPage: m_t << "\n"; m_t << " "; break; case isModuleIndex: //Module Index}\n" break; case isDirIndex: //Directory Index}\n" break; case isNamespaceIndex: //Namespace Index}\n" break; case isConceptIndex: //Concept Index}\n" break; case isClassHierarchyIndex: //Hierarchical Index}\n" break; case isCompoundIndex: //m_t << "{"; //Class Index}\n" break; case isFileIndex: //Annotated File Index}\n" break; case isPageIndex: //Annotated Page Index}\n" break; case isModuleDocumentation: m_t << "<chapter>\n"; m_t << " <title>"; break; case isDirDocumentation: m_t << "<chapter>\n"; m_t << " <title>"; break; case isNamespaceDocumentation: m_t << "<chapter>\n"; m_t << " <title>"; break; case isConceptDocumentation: m_t << "<chapter>\n"; m_t << " <title>"; break; case isClassDocumentation: m_t << "<chapter>\n"; m_t << " <title>"; break; case isFileDocumentation: m_t << "<chapter>\n"; m_t << " <title>"; break; case isExampleDocumentation: m_t << "<chapter>\n"; m_t << " <title>"; break; case isPageDocumentation: break; case isPageDocumentation2: break; case isEndIndex: break; } } void DocbookGenerator::endIndexSection(IndexSections is) { DB_GEN_C2("IndexSections " << is) bool sourceBrowser = Config_getBool(SOURCE_BROWSER); switch (is) { case isTitlePageStart: break; case isTitlePageAuthor: break; case isMainPage: m_t << "\n"; m_t << " \n"; m_t << "\n"; break; case isModuleIndex: //m_t << "\n"; break; case isDirIndex: //m_t << ""; //m_t << "\n"; break; case isNamespaceIndex: //m_t << ""; //m_t << "\n"; break; case isConceptIndex: //m_t << ""; //m_t << "\n"; break; case isClassHierarchyIndex: //m_t << ""; //m_t << "\n"; break; case isCompoundIndex: //m_t << "\n"; break; case isFileIndex: //m_t << ""; //m_t << "\n"; break; case isPageIndex: //m_t << ""; //m_t << "\n"; break; case isModuleDocumentation: { m_t << "\n"; for (const auto &gd : *Doxygen::groupLinkedMap) { if (!gd->isReference()) { m_t << " getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; } } } m_t << "\n"; break; case isDirDocumentation: { m_t << "\n"; for (const auto &dd : *Doxygen::dirLinkedMap) { if (dd->isLinkableInProject()) { m_t << "< xi:include href=\"" << dd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; } } } m_t << "\n"; break; case isNamespaceDocumentation: { m_t << "\n"; for (const auto &nd : *Doxygen::namespaceLinkedMap) { if (nd->isLinkableInProject() && !nd->isAlias()) { m_t << "getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; } } } m_t << "\n"; break; case isConceptDocumentation: { m_t << "\n"; for (const auto &cd : *Doxygen::conceptLinkedMap) { if (cd->isLinkableInProject() && !cd->isAlias()) { m_t << "getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; } } } m_t << "\n"; break; case isClassDocumentation: { m_t << "\n"; for (const auto &cd : *Doxygen::classLinkedMap) { if (cd->isLinkableInProject() && cd->templateMaster()==0 && !cd->isEmbeddedInOuterScope() && !cd->isAlias() ) { m_t << " getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; } } } m_t << "\n"; break; case isFileDocumentation: { m_t << "\n"; bool isFirst=TRUE; for (const auto &fn : *Doxygen::inputNameLinkedMap) { for (const auto &fd : *fn) { if (fd->isLinkableInProject()) { if (isFirst) { m_t << " getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; if (sourceBrowser && m_prettyCode && fd->generateSourceFile()) { m_t << " getSourceFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; } isFirst=FALSE; } else { m_t << " getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; if (sourceBrowser && m_prettyCode && fd->generateSourceFile()) { m_t << " getSourceFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; } } } } } } m_t << "\n"; break; case isExampleDocumentation: { m_t << "\n"; for (const auto &pd : *Doxygen::exampleLinkedMap) { m_t << " getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; } } m_t << "\n"; break; case isPageDocumentation: break; case isPageDocumentation2: break; case isEndIndex: m_t << "\n"; break; } } void DocbookGenerator::writePageLink(const QCString &name, bool /*first*/) { DB_GEN_C for (const auto &pd : *Doxygen::pageLinkedMap) { if (!pd->getGroupDef() && !pd->isReference() && pd->name() == stripPath(name)) { m_t << "\n"; if (pd->hasTitle()) { m_t << " " << convertToDocBook(pd->title()) << "\n"; } else { m_t << " " << convertToDocBook(pd->name()) << "\n"; } m_t << " getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>\n"; m_t << "\n"; } } } void DocbookGenerator::writeDoc(DocNode *n,const Definition *ctx,const MemberDef *,int) { DB_GEN_C DocbookDocVisitor *visitor = new DocbookDocVisitor(m_t,*this,ctx?ctx->getDefFileExtension():QCString()); n->accept(visitor); delete visitor; } void DocbookGenerator::startParagraph(const QCString &) { DB_GEN_C m_t << "\n"; } void DocbookGenerator::endParagraph() { DB_GEN_C m_t << "\n"; } void DocbookGenerator::writeString(const QCString &text) { DB_GEN_C m_t << text; } void DocbookGenerator::startMemberHeader(const QCString &,int) { DB_GEN_C m_t << "\n"; m_inSimpleSect[m_levelListItem] = TRUE; m_t << " "; } void DocbookGenerator::endMemberHeader() { DB_GEN_C m_t << " \n"; } void DocbookGenerator::docify(const QCString &str) { DB_GEN_C m_t << convertToDocBook(str); } void DocbookGenerator::writeObjectLink(const QCString &, const QCString &f, const QCString &anchor, const QCString &text) { DB_GEN_C if (!anchor.isEmpty()) { if (!f.isEmpty()) m_t << ""; else m_t << ""; } else { m_t << ""; } docify(text); m_t << ""; } void DocbookGenerator::startMemberList() { DB_GEN_C m_t << " \n"; m_levelListItem++; } void DocbookGenerator::endMemberList() { DB_GEN_C if (m_inListItem[m_levelListItem]) m_t << "\n"; m_inListItem[m_levelListItem] = FALSE; m_t << " \n"; m_levelListItem = (m_levelListItem> 0 ? m_levelListItem - 1 : 0); if (m_inSimpleSect[m_levelListItem]) m_t << "\n"; m_inSimpleSect[m_levelListItem] = FALSE; } void DocbookGenerator::startMemberItem(const QCString &,int,const QCString &) { DB_GEN_C if (m_inListItem[m_levelListItem]) m_t << "\n"; m_t << " "; m_inListItem[m_levelListItem] = TRUE; } void DocbookGenerator::endMemberItem() { DB_GEN_C m_t << "\n"; } void DocbookGenerator::startBold() { DB_GEN_C m_t << ""; } void DocbookGenerator::endBold() { DB_GEN_C m_t << ""; } 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]) m_t << "\n"; m_inSimpleSect[m_levelListItem] = FALSE; if (m_inLevel != -1) m_inGroup = TRUE; if (m_inLevel == extraIndentLevel) m_t << "\n"; m_inLevel = extraIndentLevel; m_t << "
\n"; m_t << ""; } void DocbookGenerator::writeRuler() { DB_GEN_C2("m_inLevel " << m_inLevel) DB_GEN_C2("m_inGroup " << m_inGroup) if (m_inGroup) m_t << "</section>\n"; m_inGroup = FALSE; } void DocbookGenerator::endGroupHeader(int) { DB_GEN_C m_t << "\n"; } void DocbookGenerator::startParameterList(bool openBracket) { DB_GEN_C if (openBracket) m_t << "("; } void DocbookGenerator::endParameterList() { DB_GEN_C } void DocbookGenerator::writeNonBreakableSpace(int n) { DB_GEN_C for (int i=0;i"; } void DocbookGenerator::endTypewriter() { DB_GEN_C if (!m_denseText) m_t << "\n"; } void DocbookGenerator::startTextBlock(bool dense) { DB_GEN_C if (dense) { m_denseText = TRUE; m_t << ""; } } void DocbookGenerator::endTextBlock(bool) { DB_GEN_C if (m_denseText) { m_denseText = FALSE; m_t << ""; } } void DocbookGenerator::startMemberDoc(const QCString &clname, const QCString &memname, const QCString &, const QCString &title, int memCount, int memTotal, bool) { DB_GEN_C2("m_inLevel " << m_inLevel) m_t << "
\n"; m_t << " " << convertToDocBook(title); if (memTotal>1) { m_t << "<computeroutput>[" << memCount << "/" << memTotal << "]</computeroutput>"; } m_t << "\n"; if (!memname.isEmpty() && memname[0]!='@') { addIndexTerm(m_t,memname,clname); addIndexTerm(m_t,clname,memname); } } void DocbookGenerator::endMemberDoc(bool) { DB_GEN_C m_t << ""; } void DocbookGenerator::startTitleHead(const QCString &) { DB_GEN_C m_t << ""; } void DocbookGenerator::endTitleHead(const QCString &,const QCString &name) { DB_GEN_C m_t << "\n"; if (!name.isEmpty()) addIndexTerm(m_t, name); } void DocbookGenerator::startDoxyAnchor(const QCString &fName,const QCString &, const QCString &anchor,const QCString &, const QCString &) { DB_GEN_C if (!m_inListItem[m_levelListItem] && !m_descTable) { if (!m_firstMember) m_t << "
"; m_firstMember = FALSE; } if (!anchor.isEmpty()) { m_t << ""; } } void DocbookGenerator::endDoxyAnchor(const QCString &,const QCString &) { DB_GEN_C } void DocbookGenerator::startMemberDocName(bool) { DB_GEN_C m_t << ""; } void DocbookGenerator::endMemberDocName() { DB_GEN_C } void DocbookGenerator::startMemberGroupHeader(bool) { DB_GEN_C m_t << ""; } void DocbookGenerator::endMemberGroupHeader() { DB_GEN_C m_t << "\n"; } void DocbookGenerator::startMemberGroup() { DB_GEN_C } void DocbookGenerator::endMemberGroup(bool) { DB_GEN_C m_t << "\n"; } void DocbookGenerator::startClassDiagram() { DB_GEN_C m_t << ""; } void DocbookGenerator::endClassDiagram(const ClassDiagram &d, const QCString &fileName,const QCString &) { DB_GEN_C m_t << " \n"; m_t << " \n"; m_t << " \n"; m_t << " " << "\n"; m_t << " \n"; d.writeImage(m_t,dir(),relPath,fileName,FALSE); m_t << " \n"; m_t << " \n"; m_t << "\n"; } void DocbookGenerator::startLabels() { DB_GEN_C } void DocbookGenerator::writeLabel(const QCString &l,bool isLast) { DB_GEN_C m_t << "[" << l << "]"; if (!isLast) m_t << ", "; } void DocbookGenerator::endLabels() { DB_GEN_C } void DocbookGenerator::startExamples() { DB_GEN_C m_t << ""; docify(theTranslator->trExamples()); m_t << ""; } void DocbookGenerator::endExamples() { DB_GEN_C m_t << "\n"; } void DocbookGenerator::startSubsubsection() { DB_GEN_C m_t << ""; } void DocbookGenerator::endSubsubsection() { DB_GEN_C m_t << "\n"; } 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 m_t << ""; } void DocbookGenerator::endMemberDocPrefixItem() { DB_GEN_C m_t << ""; } void DocbookGenerator::exceptionEntry(const QCString &prefix,bool closeBracket) { DB_GEN_C if (!prefix.isEmpty()) { m_t << " " << prefix << "("; } else if (closeBracket) { m_t << ")"; } m_t << " "; } void DocbookGenerator::startParameterName(bool) { DB_GEN_C m_t << " "; } void DocbookGenerator::endParameterName(bool last,bool /*emptyList*/,bool closeBracket) { DB_GEN_C if (last) { if (closeBracket) m_t << ")"; } } void DocbookGenerator::startMemberTemplateParams() { DB_GEN_C } void DocbookGenerator::endMemberTemplateParams(const QCString &,const QCString &) { DB_GEN_C m_t << ""; m_t << ""; } void DocbookGenerator::startSection(const QCString &lab,const QCString &,SectionType) { DB_GEN_C m_t << "
"; m_t << ""; } void DocbookGenerator::endSection(const QCString &,SectionType) { DB_GEN_C m_t << ""; m_t << "
"; } void DocbookGenerator::addIndexItem(const QCString &prim,const QCString &sec) { DB_GEN_C addIndexTerm(m_t, prim, sec); } void DocbookGenerator::startDescTable(const QCString &title) { DB_GEN_C int ncols = 2; m_t << "\n"; if (!title.isEmpty()) m_t << "" << convertToDocBook(title) << "\n"; m_t << " \n"; for (int i = 0; i < ncols; i++) { m_t << " \n"; } m_t << "\n"; m_descTable = TRUE; } void DocbookGenerator::endDescTable() { DB_GEN_C m_t << " \n"; m_t << " \n"; m_t << "\n"; m_descTable = FALSE; } void DocbookGenerator::startDescTableRow() { DB_GEN_C m_t << ""; m_t << ""; } void DocbookGenerator::endDescTableRow() { DB_GEN_C m_t << ""; } void DocbookGenerator::startDescTableTitle() { DB_GEN_C } void DocbookGenerator::endDescTableTitle() { DB_GEN_C } void DocbookGenerator::startDescTableData() { DB_GEN_C m_t << ""; } void DocbookGenerator::endDescTableData() { DB_GEN_C m_t << ""; } void DocbookGenerator::startGroupCollaboration() { DB_GEN_C } void DocbookGenerator::endGroupCollaboration(DotGroupCollaboration &g) { DB_GEN_C g.writeGraph(m_t,GOF_BITMAP,EOF_DocBook,dir(),fileName(),relPath,FALSE); } void DocbookGenerator::startDotGraph() { DB_GEN_C } void DocbookGenerator::endDotGraph(DotClassGraph &g) { DB_GEN_C g.writeGraph(m_t,GOF_BITMAP,EOF_DocBook,dir(),fileName(),relPath,TRUE,FALSE); } void DocbookGenerator::startInclDepGraph() { DB_GEN_C } void DocbookGenerator::endInclDepGraph(DotInclDepGraph &g) { DB_GEN_C QCString fn = g.writeGraph(m_t,GOF_BITMAP,EOF_DocBook,dir(),fileName(),relPath,FALSE); } void DocbookGenerator::startCallGraph() { DB_GEN_C } void DocbookGenerator::endCallGraph(DotCallGraph &g) { DB_GEN_C QCString fn = g.writeGraph(m_t,GOF_BITMAP,EOF_DocBook,dir(),fileName(),relPath,FALSE); } void DocbookGenerator::startDirDepGraph() { DB_GEN_C } void DocbookGenerator::endDirDepGraph(DotDirDeps &g) { DB_GEN_C QCString fn = g.writeGraph(m_t,GOF_BITMAP,EOF_DocBook,dir(),fileName(),relPath,FALSE); } void DocbookGenerator::startMemberDocList() { DB_GEN_C } void DocbookGenerator::endMemberDocList() { DB_GEN_C m_inGroup = TRUE; } void DocbookGenerator::startConstraintList(const QCString &header) { DB_GEN_C m_t << ""; docify(header); m_t << "\n"; } void DocbookGenerator::startConstraintParam() { DB_GEN_C m_t << ""; } void DocbookGenerator::endConstraintParam() { DB_GEN_C } void DocbookGenerator::startConstraintType() { DB_GEN_C m_t << ":"; } void DocbookGenerator::endConstraintType() { DB_GEN_C m_t << "\n"; } void DocbookGenerator::startConstraintDocs() { DB_GEN_C } void DocbookGenerator::endConstraintDocs() { DB_GEN_C } void DocbookGenerator::endConstraintList() { DB_GEN_C m_t << "\n"; }