diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2014-06-20 18:53:53 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2014-06-20 18:53:53 (GMT) |
commit | 12f5ee8a8c3a287f6bcfe81f79ff4332b3987c7e (patch) | |
tree | 678956eeee36083508d67cc4003e63ca60d3f0b4 | |
parent | 21178ab40160abf011fa084a10892b5b7821e44c (diff) | |
download | Doxygen-12f5ee8a8c3a287f6bcfe81f79ff4332b3987c7e.zip Doxygen-12f5ee8a8c3a287f6bcfe81f79ff4332b3987c7e.tar.gz Doxygen-12f5ee8a8c3a287f6bcfe81f79ff4332b3987c7e.tar.bz2 |
Docbook output improvements
1. New Feature: Adapted Class Graph generation for DOCBOOK
2. Fixed DOCBOOK Code documentation formatting
3. Fixed Doxygen to handle FULL_PATH_NAMES for DOCBOOK generation
-rw-r--r-- | src/config.xml | 10 | ||||
-rw-r--r-- | src/context.cpp | 12 | ||||
-rw-r--r-- | src/docbookgen.cpp | 155 | ||||
-rw-r--r-- | src/docbookvisitor.cpp | 109 | ||||
-rw-r--r-- | src/docparser.cpp | 15 | ||||
-rw-r--r-- | src/docparser.h | 2 | ||||
-rw-r--r-- | src/dot.cpp | 209 | ||||
-rw-r--r-- | src/dot.h | 16 | ||||
-rw-r--r-- | src/htmldocvisitor.cpp | 2 | ||||
-rw-r--r-- | src/htmlgen.cpp | 10 | ||||
-rw-r--r-- | src/latexdocvisitor.cpp | 2 | ||||
-rw-r--r-- | src/latexgen.cpp | 10 | ||||
-rw-r--r-- | src/printdocvisitor.h | 7 | ||||
-rw-r--r-- | src/rtfdocvisitor.cpp | 2 | ||||
-rw-r--r-- | src/rtfgen.cpp | 8 | ||||
-rw-r--r-- | src/xmldocvisitor.cpp | 7 |
16 files changed, 390 insertions, 186 deletions
diff --git a/src/config.xml b/src/config.xml index f228ca4..eed486e 100644 --- a/src/config.xml +++ b/src/config.xml @@ -2763,6 +2763,16 @@ front of it. ]]> </docs> </option> + <option type='bool' id='DOCBOOK_PROGRAMLISTING' defval='0' depends='GENERATE_DOCBOOK'> + <docs> +<![CDATA[ + If the \c DOCBOOK_PROGRAMLISTING tag is set to \c YES doxygen will + include the program listings (including syntax highlighting + and cross-referencing information) to the DOCBOOK output. Note that + enabling this will significantly increase the size of the DOCBOOK output. +]]> + </docs> + </option> </group> <group name='AutoGen' docs='Configuration options for the AutoGen Definitions output'> <option type='bool' id='GENERATE_AUTOGEN_DEF' defval='0'> diff --git a/src/context.cpp b/src/context.cpp index 850f8e8..05e2a7f 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -1471,7 +1471,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private> { DotClassGraph *cg = getClassGraph(); FTextStream t(&result); - cg->writeGraph(t,BITMAP, + cg->writeGraph(t,GOF_BITMAP,EOF_Html, g_globals.outputDir, g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension, relPathAsString(),TRUE,TRUE,g_globals.dynSectionId @@ -1516,7 +1516,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private> { DotClassGraph *cg = getCollaborationGraph(); FTextStream t(&result); - cg->writeGraph(t,BITMAP, + cg->writeGraph(t,GOF_BITMAP,EOF_Html, g_globals.outputDir, g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension, relPathAsString(),TRUE,TRUE,g_globals.dynSectionId @@ -2197,7 +2197,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private> { DotInclDepGraph *cg = getIncludeGraph(); FTextStream t(&result); - cg->writeGraph(t,BITMAP, + cg->writeGraph(t,GOF_BITMAP,EOF_Html, g_globals.outputDir, g_globals.outputDir+portable_pathSeparator()+m_fileDef->getOutputFileBase()+Doxygen::htmlFileExtension, relPathAsString(),TRUE,g_globals.dynSectionId @@ -2228,7 +2228,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private> { DotInclDepGraph *cg = getIncludedByGraph(); FTextStream t(&result); - cg->writeGraph(t,BITMAP, + cg->writeGraph(t,GOF_BITMAP,EOF_Html, g_globals.outputDir, g_globals.outputDir+portable_pathSeparator()+m_fileDef->getOutputFileBase()+Doxygen::htmlFileExtension, relPathAsString(),TRUE,g_globals.dynSectionId @@ -3634,7 +3634,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private> DotCallGraph *cg = getCallGraph(); QGString result; FTextStream t(&result); - cg->writeGraph(t,BITMAP, + cg->writeGraph(t,GOF_BITMAP,EOF_Html, g_globals.outputDir, g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension, relPathAsString(),TRUE,g_globals.dynSectionId @@ -3674,7 +3674,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private> DotCallGraph *cg = getCallerGraph(); QGString result; FTextStream t(&result); - cg->writeGraph(t,BITMAP, + cg->writeGraph(t,GOF_BITMAP,EOF_Html, g_globals.outputDir, g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension, relPathAsString(),TRUE,g_globals.dynSectionId diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp index 2011333..cabb7ad 100644 --- a/src/docbookgen.cpp +++ b/src/docbookgen.cpp @@ -210,7 +210,7 @@ class DocbookCodeGenerator : public CodeOutputInterface { m_t << "<link linkend=\"" << m_refId << "\">"; } - m_t << m_lineNumber; + m_t << m_lineNumber << " "; if (!m_refId.isEmpty()) { m_t << "</link>"; @@ -228,10 +228,10 @@ class DocbookCodeGenerator : public CodeOutputInterface m_external.resize(0); m_insideCodeLine=FALSE; } - void startFontClass(const char * /*colorClass*/) + void startFontClass(const char *colorClass) { Docbook_DB(("(startFontClass)\n")); - m_t << "<emphasis>"; // non DocBook + m_t << "<emphasis class=\"" << colorClass << "\">"; m_insideSpecialHL=TRUE; } void endFontClass() @@ -453,7 +453,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de if (md->memberType()==MemberType_Enumeration) { MemberList *enumFields = md->enumFieldList(); - t << " <para>" << memType << " <link linkend=\""; + t << " <para><literallayout>" << memType << " <link linkend=\""; if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup) { t << md->getGroupDef()->getOutputFileBase(); @@ -467,25 +467,25 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de { MemberListIterator emli(*enumFields); MemberDef *emd; - t << "{"; + t << " {" << endl; int cnt=0; for (emli.toFirst();(emd=emli.current());++emli) { if (cnt!=0) { - t << ", "; + t << "," << endl; } t << "<link linkend=\"" << memberOutputFileBase(emd) << "_1" << emd->anchor() << "\">"; writeDocbookString(t,emd->name()); t << "</link>"; if (!emd->initializer().isEmpty()) { - t << "="; writeDocbookString(t,emd->initializer()); } cnt++; } - t << "}"; + t << endl << "}"; + t << "</literallayout>" << endl; } } else if (md->memberType()==MemberType_Define) @@ -608,10 +608,10 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << " </listitem>" << endl; t << " </itemizedlist>" << endl; t << " </para>" << endl; - } - else + } + else { - if (md->memberType()==MemberType_Enumeration) + if (md->memberType()==MemberType_Enumeration) { MemberList *enumFields = md->enumFieldList(); t << " <section xml:id=\""; @@ -653,20 +653,19 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de t << " </formalpara>" << endl; t << " <para>"; t << "Definition at line " << md->getDefLine() << " of file " << stripPath(md->getDefFileName()) << endl; - t << " <programlisting>" << endl; + t << " <computeroutput><literallayout>" << endl; t << "{" << endl; for (emli.toFirst();(emd=emli.current());++emli) { writeDocbookString(t,emd->name()); if (!emd->initializer().isEmpty()) { - t << "="; writeDocbookString(t,emd->initializer()); } t << ", " << endl; } t << "}" << convertToXML(md->name()) << ";" << endl; - t << " </programlisting>" << endl; + t << " </literallayout></computeroutput>" << endl; t << " </para>" << endl; t << " </section>" << endl; } @@ -1127,6 +1126,7 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); QCString fileName=outputDirectory+"/"+ classOutputFileBase(cd)+".xml"; + QCString relPath = relativePathToRoot(fileName); QFile f(fileName); if (!f.open(IO_WriteOnly)) { @@ -1181,6 +1181,20 @@ 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; + 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); + } + writeInnerClasses(cd->getClassSDict(),t); writeTemplateList(cd,t); @@ -1369,6 +1383,7 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); QCString fileName=outputDirectory+"/"+fd->getOutputFileBase()+".xml"; + QCString relPath = relativePathToRoot(fileName); QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1413,6 +1428,21 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) 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()) { @@ -1448,20 +1478,24 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) t << " <title>Detailed Description</title>" << endl; writeDocbookDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription()); writeDocbookDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation()); - t << " <para>Definition in file " << fd->getDefFileName() << "</para>" << 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; - /*// TODO: Handling of Program listing for Docbook to be implemented - if (Config_getBool("DOCBOOK_PROGRAMLISTING")) - { - t << " <programlisting>" << endl; + if (Config_getBool("DOCBOOK_PROGRAMLISTING")) + { + t << " <literallayout><computeroutput>" << endl; writeDocbookCodeBlock(t,fd); - t << " </programlisting>" << endl; - } - */ + t << " </computeroutput></literallayout>" << endl; + } t << "</section>" << endl; - } static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti) @@ -1489,6 +1523,7 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti) QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); QCString fileName=outputDirectory+"/"+gd->getOutputFileBase()+".xml"; + QCString relPath = relativePathToRoot(fileName); QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1503,6 +1538,13 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti) 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 << " <simplesect>" << endl; @@ -1570,6 +1612,8 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti) 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()); @@ -1584,6 +1628,12 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti) writeDocbookString(t, dd->displayName()); t << " Directory Reference"; 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); + } writeInnerDirs(&dd->subDirs(),t); writeInnerFiles(dd->getFiles(),t); @@ -1628,7 +1678,13 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample) FTextStream t(&f); //t.setEncoding(FTextStream::UnicodeUTF8); - if (!pd->hasParentPage()) + 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 @@ -1654,7 +1710,7 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample) if (isExample) { writeDocbookDocBlock(t,pd->docFile(),pd->docLine(),pd,0, - pd->documentation()+"\n<include "+pd->name()+">"); + pd->documentation()+"\n\\include "+pd->name()); } else { @@ -1663,7 +1719,7 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample) } writeInnerPages(pd->getSubPages(),t); - if (!pd->hasParentPage()) + if (!pd->hasParentPage() && !isExample) { t << endl << "</chapter>" << endl; } @@ -1744,7 +1800,6 @@ void generateDocbook() t << " </info>" << endl; // NAMESPACE DOCUMENTATION - NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict); NamespaceDef *nd; @@ -1838,35 +1893,39 @@ void generateDocbook() // FILE DOCUMENTATION - FileNameListIterator fnli(*Doxygen::inputNameList); - FileName *fn; - - //File Documentation index header - if (fnli.toFirst()) + static bool showFiles = Config_getBool("SHOW_FILES"); + if (showFiles) { - t << " <chapter>" << endl; - t << " <title>File Documentation</title>" << endl; - } + FileNameListIterator fnli(*Doxygen::inputNameList); + FileName *fn; - for (;(fn=fnli.current());++fnli) - { - FileNameIterator fni(*fn); - FileDef *fd; - for (;(fd=fni.current());++fni) + //File Documentation index header + if (fnli.toFirst()) { - msg("Generating Docbook output for file %s\n",fd->name().data()); - generateDocbookForFile(fd,t); + t << " <chapter>" << endl; + t << " <title>File Documentation</title>" << endl; } - } - //File Documentation index footer - if (fnli.toFirst()) - { - t << " </chapter>" << 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()); + generateDocbookForFile(fd,t); + } + } + + //File Documentation index footer + if (fnli.toFirst()) + { + t << " </chapter>" << endl; + } } // DIRECTORY DOCUMENTATION - + if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT")) { DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp index 6867dce..cf235da 100644 --- a/src/docbookvisitor.cpp +++ b/src/docbookvisitor.cpp @@ -160,16 +160,16 @@ void DocbookDocVisitor::visit(DocVerbatim *s) switch(s->type()) { case DocVerbatim::Code: // fall though - m_t << "<programlisting>"; + m_t << "<literallayout><computeroutput>"; Doxygen::parserManager->getParser(m_langExt) ->parseCode(m_ci,s->context(),s->text(),langExt, s->isExample(),s->exampleFile()); - m_t << "</programlisting>"; + m_t << "</computeroutput></literallayout>"; break; case DocVerbatim::Verbatim: - m_t << "<programlisting><literallayout>"; + m_t << "<literallayout>"; filter(s->text()); - m_t << "</literallayout></programlisting>"; + m_t << "</literallayout>"; break; case DocVerbatim::HtmlOnly: break; @@ -189,8 +189,10 @@ void DocbookDocVisitor::visit(DocVerbatim *s) { static int dotindex = 1; QCString baseName(4096); + QCString name; QCString stext = s->text(); m_t << "<para>" << endl; + name.sprintf("%s%d", "dot_inline_dotgraph_", dotindex); baseName.sprintf("%s%d", (Config_getString("DOCBOOK_OUTPUT")+"/inline_dotgraph_").data(), dotindex++ @@ -203,7 +205,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s) file.writeBlock( stext, stext.length() ); file.close(); m_t << " <figure>" << endl; - m_t << " <title></title>" << endl; + m_t << " <title>" << name << "</title>" << endl; m_t << " <mediaobject>" << endl; m_t << " <imageobject>" << endl; writeDotFile(baseName); @@ -216,8 +218,10 @@ void DocbookDocVisitor::visit(DocVerbatim *s) case DocVerbatim::Msc: static int mscindex = 1; QCString baseName(4096); + QCString name; QCString stext = s->text(); m_t << "<para>" << endl; + name.sprintf("%s%d", "msc_inline_mscgraph_", mscindex); baseName.sprintf("%s%d", (Config_getString("DOCBOOK_OUTPUT")+"/inline_mscgraph_").data(), mscindex++ @@ -233,7 +237,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s) file.writeBlock( text, text.length() ); file.close(); m_t << " <figure>" << endl; - m_t << " <title></title>" << endl; + m_t << " <title>" << name << "</title>" << endl; m_t << " <mediaobject>" << endl; m_t << " <imageobject>" << endl; writeMscFile(baseName); @@ -259,7 +263,7 @@ void DocbookDocVisitor::visit(DocInclude *inc) { case DocInclude::IncWithLines: { - m_t << "<programlisting>"; + m_t << "<literallayout><computeroutput>"; QFileInfo cfi( inc->file() ); FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() ); Doxygen::parserManager->getParser(inc->extension()) @@ -268,18 +272,18 @@ void DocbookDocVisitor::visit(DocInclude *inc) langExt, inc->isExample(), inc->exampleFile(), &fd); - m_t << "</programlisting>"; + m_t << "</computeroutput></literallayout>"; } break; case DocInclude::Include: - m_t << "<programlisting>"; + m_t << "<literallayout><computeroutput>"; Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), inc->text(), langExt, inc->isExample(), inc->exampleFile()); - m_t << "</programlisting>"; + m_t << "</computeroutput></literallayout>"; break; case DocInclude::DontInclude: break; @@ -293,7 +297,7 @@ void DocbookDocVisitor::visit(DocInclude *inc) m_t << "</verbatim>"; break; case DocInclude::Snippet: - m_t << "<programlisting>"; + m_t << "<literallayout><computeroutput>"; Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci, inc->context(), @@ -302,7 +306,7 @@ void DocbookDocVisitor::visit(DocInclude *inc) inc->isExample(), inc->exampleFile() ); - m_t << "</programlisting>"; + m_t << "</computeroutput></literallayout>"; break; } } @@ -361,7 +365,7 @@ void DocbookDocVisitor::visit(DocIndexEntry *ie) void DocbookDocVisitor::visit(DocSimpleSectSep *) { - m_t << "<simplesectsep/>"; + m_t << "<simplesect/>"; } void DocbookDocVisitor::visit(DocCite *cite) @@ -818,14 +822,14 @@ void DocbookDocVisitor::visitPost(DocHtmlHeader *) void DocbookDocVisitor::visitPre(DocImage *img) { - if (img->type()==DocImage::Latex) + if (img->type()==DocImage::DocBook) { if (m_hide) return; m_t << endl; m_t << " <figure>" << endl; m_t << " <title>"; - } - else + } + else { pushEnabled(); m_hide=TRUE; @@ -834,7 +838,7 @@ void DocbookDocVisitor::visitPre(DocImage *img) void DocbookDocVisitor::visitPost(DocImage *img) { - if (img->type()==DocImage::Latex) + if (img->type()==DocImage::DocBook) { if (m_hide) return; QCString typevar; @@ -854,13 +858,17 @@ void DocbookDocVisitor::visitPost(DocImage *img) filter(img->width()); m_t << "\""; } - else if (!img->height().isEmpty()) + else + { + m_t << " width=\"50%\""; + } + if (!img->height().isEmpty()) { m_t << " depth=\""; filter(img->height()); m_t << "\""; } - m_t << " align=\"center\" fileref=\"" << baseName << "\">"; + m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << "\">"; m_t << "</imagedata>" << endl; m_t << " </imageobject>" << endl; m_t << " </mediaobject>" << endl; @@ -988,7 +996,7 @@ void DocbookDocVisitor::visitPre(DocParamSect *s) m_t << " <formalpara>" << endl; m_t << " <title/>" << endl; m_t << " <table frame=\"all\">" << endl; - m_t << " <title>Parameters</title>" << endl; + m_t << " <title>param</title>" << endl; m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl; m_t << " <tbody>" << endl; break; @@ -999,15 +1007,33 @@ void DocbookDocVisitor::visitPre(DocParamSect *s) m_t << " <formalpara>" << endl; m_t << " <title/>" << endl; m_t << " <table frame=\"all\">" << endl; - m_t << " <title>Parameters</title>" << endl; + m_t << " <title>retval</title>" << endl; m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl; m_t << " <tbody>" << endl; break; } case DocParamSect::Exception: - m_t << "exception"; break; + { + m_t << endl; + m_t << " <formalpara>" << endl; + m_t << " <title/>" << endl; + m_t << " <table frame=\"all\">" << endl; + m_t << " <title>exception</title>" << endl; + m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl; + m_t << " <tbody>" << endl; + break; + } case DocParamSect::TemplateParam: - m_t << "templateparam"; break; + { + m_t << endl; + m_t << " <formalpara>" << endl; + m_t << " <title/>" << endl; + m_t << " <table frame=\"all\">" << endl; + m_t << " <title>templateparam</title>" << endl; + m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl; + m_t << " <tbody>" << endl; + break; + } default: ASSERT(0); } @@ -1029,17 +1055,17 @@ void DocbookDocVisitor::visitPre(DocParamList *pl) QListIterator<DocNode> li(pl->parameters()); DocNode *param; m_t << " <row>" << endl; - if (!li.toFirst()) + if (!li.toFirst()) { m_t << " <entry></entry>" << endl; - } - else + } + else { m_t << " <entry>"; int cnt = 0; for (li.toFirst();(param=li.current());++li) { - if (cnt) + if (cnt) { m_t << ", "; } @@ -1196,7 +1222,8 @@ void DocbookDocVisitor::writeMscFile(const QCString &baseName) QCString outDir = Config_getString("DOCBOOK_OUTPUT"); writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_BITMAP); m_t << " <imagedata"; - m_t << " align=\"center\" fileref=\"" << shortName << ".png" << "\">"; + m_t << " width=\"50%\""; + m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << ".png" << "\">"; m_t << "</imagedata>" << endl; } @@ -1231,13 +1258,17 @@ void DocbookDocVisitor::startMscFile(const QCString &fileName, m_t << width; m_t << "\""; } - else if (!height.isEmpty()) + else + { + m_t << " width=\"50%\""; + } + if (!height.isEmpty()) { m_t << " depth=\""; m_t << height; m_t << "\""; } - m_t << " align=\"center\" fileref=\"" << baseName << ".png" << "\">"; + m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << ".png" << "\">"; m_t << "</imagedata>" << endl; m_t << " </imageobject>" << endl; if (hasCaption) @@ -1342,9 +1373,12 @@ void DocbookDocVisitor::writeDotFile(const QCString &baseName) shortName=shortName.right(shortName.length()-i-1); } QCString outDir = Config_getString("DOCBOOK_OUTPUT"); - writeDotGraphFromFile(baseName+".dot",outDir,shortName,BITMAP); + QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT"); + writeDotGraphFromFile(baseName+".dot",outDir,shortName,GOF_BITMAP); m_t << " <imagedata"; - m_t << " align=\"center\" fileref=\"" << shortName << ".png" << "\">"; + //If no width is specified use default value for PDF rendering + m_t << " width=\"50%\""; + m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << "." << imgExt << "\">"; m_t << "</imagedata>" << endl; } @@ -1366,7 +1400,8 @@ void DocbookDocVisitor::startDotFile(const QCString &fileName, } baseName.prepend("dot_"); QCString outDir = Config_getString("DOCBOOK_OUTPUT"); - writeDotGraphFromFile(fileName,outDir,baseName,BITMAP); + QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT"); + writeDotGraphFromFile(fileName,outDir,baseName,GOF_BITMAP); m_t << "<para>" << endl; m_t << " <figure>" << endl; m_t << " <title></title>" << endl; @@ -1379,13 +1414,17 @@ void DocbookDocVisitor::startDotFile(const QCString &fileName, m_t << width; m_t << "\""; } - else if (!height.isEmpty()) + else + { + m_t << " width=\"50%\""; + } + if (!height.isEmpty()) { m_t << " depth=\""; m_t << height; m_t << "\""; } - m_t << " align=\"center\" fileref=\"" << baseName << ".png" << "\">"; + m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << "." << imgExt << "\">"; m_t << "</imagedata>" << endl; m_t << " </imageobject>" << endl; if (hasCaption) diff --git a/src/docparser.cpp b/src/docparser.cpp index 66a890f..13d333f 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -257,14 +257,18 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type) QCString outputDir; switch(type) { - case DocImage::Html: + case DocImage::Html: if (!Config_getBool("GENERATE_HTML")) return result; outputDir = Config_getString("HTML_OUTPUT"); break; - case DocImage::Latex: + case DocImage::Latex: if (!Config_getBool("GENERATE_LATEX")) return result; outputDir = Config_getString("LATEX_OUTPUT"); break; + case DocImage::DocBook: + if (!Config_getBool("GENERATE_DOCBOOK")) return result; + outputDir = Config_getString("DOCBOOK_OUTPUT"); + break; case DocImage::Rtf: if (!Config_getBool("GENERATE_RTF")) return result; outputDir = Config_getString("RTF_OUTPUT"); @@ -5025,9 +5029,10 @@ void DocPara::handleImage(const QCString &cmdName) } DocImage::Type t; QCString imgType = g_token->name.lower(); - if (imgType=="html") t=DocImage::Html; - else if (imgType=="latex") t=DocImage::Latex; - else if (imgType=="rtf") t=DocImage::Rtf; + if (imgType=="html") t=DocImage::Html; + else if (imgType=="latex") t=DocImage::Latex; + else if (imgType=="docbook") t=DocImage::DocBook; + else if (imgType=="rtf") t=DocImage::Rtf; else { warn_doc_error(g_fileName,doctokenizerYYlineno,"image type %s specified as the first argument of " diff --git a/src/docparser.h b/src/docparser.h index fb4f084..17f296b 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -668,7 +668,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode class DocImage : public CompAccept<DocImage>, public DocNode { public: - enum Type { Html, Latex, Rtf }; + enum Type { Html, Latex, Rtf, DocBook }; DocImage(DocNode *parent,const HtmlAttribList &attribs, const QCString &name,Type t,const QCString &url=QCString()); Kind kind() const { return Kind_Image; } diff --git a/src/dot.cpp b/src/dot.cpp index 051a438..e873034 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -16,11 +16,6 @@ * */ -#ifdef _WIN32 -#include <windows.h> -#define BITMAP W_BITMAP -#endif - #include <stdlib.h> #include <qdir.h> @@ -1896,7 +1891,7 @@ void DotNode::writeArrow(FTextStream &t, t << ",arrowhead=\"" << eProps->arrowStyleMap[ei->m_color] << "\""; } - if (format==BITMAP) t << ",fontname=\"" << FONTNAME << "\""; + if (format==GOF_BITMAP) t << ",fontname=\"" << FONTNAME << "\""; t << "];" << endl; } @@ -2313,7 +2308,7 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out, { if (node->m_subgraphId==n->m_subgraphId) { - node->write(md5stream,DotNode::Hierarchy,BITMAP,FALSE,TRUE,TRUE,TRUE); + node->write(md5stream,DotNode::Hierarchy,GOF_BITMAP,FALSE,TRUE,TRUE,TRUE); } } writeGraphFooter(md5stream); @@ -3080,7 +3075,8 @@ QCString DotClassGraph::diskName() const } QCString DotClassGraph::writeGraph(FTextStream &out, - GraphOutputFormat format, + GraphOutputFormat graphFormat, + EmbeddedOutputFormat textFormat, const char *path, const char *fileName, const char *relPath, @@ -3128,19 +3124,19 @@ QCString DotClassGraph::writeGraph(FTextStream &out, if (updateDotGraph(m_startNode, m_graphType, absBaseName, - format, + graphFormat, m_lrRank, m_graphType==DotNode::Inheritance, TRUE, m_startNode->label() ) || - !checkDeliverables(format==BITMAP ? absImgName : + !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName : usePDFLatex ? absPdfName : absEpsName, - format==BITMAP && generateImageMap ? absMapName : QCString()) + graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString()) ) { regenerate=TRUE; - if (format==BITMAP) // run dot to create a bitmap image + if (graphFormat==GOF_BITMAP) // run dot to create a bitmap image { QCString dotArgs(maxCmdLine); @@ -3151,7 +3147,7 @@ QCString DotClassGraph::writeGraph(FTextStream &out, DotManager::instance()->addRun(dotRun); } - else if (format==EPS) // run dot to create a .eps image + else if (graphFormat==GOF_EPS) // run dot to create a .eps image { DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE); if (usePDFLatex) @@ -3167,7 +3163,35 @@ QCString DotClassGraph::writeGraph(FTextStream &out, } Doxygen::indexList->addImageFile(baseName+"."+imgExt); - if (format==BITMAP && generateImageMap) // produce HTML to include the image + if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook) + { + out << "<para>" << endl; + out << " <figure>" << endl; + out << " <title>"; + switch (m_graphType) + { + case DotNode::Collaboration: + out << "Collaboration graph"; + break; + case DotNode::Inheritance: + out << "Inheritance graph"; + break; + default: + ASSERT(0); + break; + } + out << "</title>" << endl; + out << " <mediaobject>" << endl; + out << " <imageobject>" << endl; + out << " <imagedata"; + out << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">"; + out << "</imagedata>" << endl; + out << " </imageobject>" << endl; + out << " </mediaobject>" << endl; + out << " </figure>" << endl; + out << "</para>" << endl; + } + else if (graphFormat==GOF_BITMAP && generateImageMap) // produce HTML to include the image { QCString mapLabel = escapeCharsInString(m_startNode->m_label,FALSE)+"_"+ escapeCharsInString(mapName,FALSE); @@ -3189,7 +3213,7 @@ QCString DotClassGraph::writeGraph(FTextStream &out, { out << "<div class=\"center\">"; out << "<img src=\"" << relPath << baseName << "." - << imgExt << "\" border=\"0\" usemap=\"#" + << imgExt << "\" border=\"0\" usemap=\"#" << mapLabel << "\" alt=\""; switch (m_graphType) { @@ -3202,10 +3226,9 @@ QCString DotClassGraph::writeGraph(FTextStream &out, default: ASSERT(0); break; - } + } out << "\"/>"; out << "</div>" << endl; - if (regenerate || !insertMapFile(out,absMapName,relPath,mapLabel)) { int mapId = DotManager::instance()->addMap(fileName,absMapName,relPath, @@ -3214,7 +3237,7 @@ QCString DotClassGraph::writeGraph(FTextStream &out, } } } - else if (format==EPS) // produce tex to include the .eps image + else if (graphFormat==GOF_EPS) // produce tex to include the .eps image { if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName)) { @@ -3423,7 +3446,8 @@ QCString DotInclDepGraph::diskName() const } QCString DotInclDepGraph::writeGraph(FTextStream &out, - GraphOutputFormat format, + GraphOutputFormat graphFormat, + EmbeddedOutputFormat textFormat, const char *path, const char *fileName, const char *relPath, @@ -3458,19 +3482,19 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out, if (updateDotGraph(m_startNode, DotNode::Dependency, absBaseName, - format, + graphFormat, FALSE, // lrRank FALSE, // renderParents m_inverse, // backArrows m_startNode->label() ) || - !checkDeliverables(format==BITMAP ? absImgName : + !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName : usePDFLatex ? absPdfName : absEpsName, - format==BITMAP && generateImageMap ? absMapName : QCString()) + graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString()) ) { regenerate=TRUE; - if (format==BITMAP) + if (graphFormat==GOF_BITMAP) { // run dot to create a bitmap image QCString dotArgs(maxCmdLine); @@ -3479,7 +3503,7 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out, if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName); DotManager::instance()->addRun(dotRun); } - else if (format==EPS) + else if (graphFormat==GOF_EPS) { DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE); if (usePDFLatex) @@ -3491,12 +3515,27 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out, dotRun->addJob("ps",absEpsName); } DotManager::instance()->addRun(dotRun); - - } + } } Doxygen::indexList->addImageFile(baseName+"."+imgExt); - if (format==BITMAP && generateImageMap) + if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook) + { + out << "<para>" << endl; + out << " <figure>" << endl; + out << " <title>Dependency diagram"; + out << "</title>" << endl; + out << " <mediaobject>" << endl; + out << " <imageobject>" << endl; + out << " <imagedata"; + out << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">"; + out << "</imagedata>" << endl; + out << " </imageobject>" << endl; + out << " </mediaobject>" << endl; + out << " </figure>" << endl; + out << "</para>" << endl; + } + else if (graphFormat==GOF_BITMAP && generateImageMap) { if (imgExt=="svg") // Scalable vector graphics { @@ -3514,9 +3553,7 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out, } else // bitmap graphics { - out << "<div class=\"center\"><img src=\"" << relPath << baseName << "." - << imgExt << "\" border=\"0\" usemap=\"#" - << mapName << "\" alt=\"\"/>"; + out << "<div class=\"center\"><img src=\"" << relPath << baseName << "." << imgExt << "\" border=\"0\" usemap=\"#" << mapName << "\" alt=\"\"/>"; out << "</div>" << endl; QCString absMapName = absBaseName+".map"; @@ -3528,7 +3565,7 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out, } } } - else if (format==EPS) // encapsulated postscript + else if (graphFormat==GOF_EPS) // encapsulated postscript { if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName)) { @@ -3729,7 +3766,8 @@ DotCallGraph::~DotCallGraph() delete m_usedNodes; } -QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format, +QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat graphFormat, + EmbeddedOutputFormat textFormat, const char *path,const char *fileName, const char *relPath,bool generateImageMap,int graphId) const @@ -3757,19 +3795,19 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format, if (updateDotGraph(m_startNode, DotNode::CallGraph, absBaseName, - format, + graphFormat, TRUE, // lrRank FALSE, // renderParents m_inverse, // backArrows m_startNode->label() ) || - !checkDeliverables(format==BITMAP ? absImgName : + !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName : usePDFLatex ? absPdfName : absEpsName, - format==BITMAP && generateImageMap ? absMapName : QCString()) + graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString()) ) { regenerate=TRUE; - if (format==BITMAP) + if (graphFormat==GOF_BITMAP) { // run dot to create a bitmap image QCString dotArgs(maxCmdLine); @@ -3779,7 +3817,7 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format, DotManager::instance()->addRun(dotRun); } - else if (format==EPS) + else if (graphFormat==GOF_EPS) { // run dot to create a .eps image DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE); @@ -3797,7 +3835,23 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format, } Doxygen::indexList->addImageFile(baseName+"."+imgExt); - if (format==BITMAP && generateImageMap) + if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook) + { + out << "<para>" << endl; + out << " <figure>" << endl; + out << " <title>Call diagram"; + out << "</title>" << endl; + out << " <mediaobject>" << endl; + out << " <imageobject>" << endl; + out << " <imagedata"; + out << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">"; + out << "</imagedata>" << endl; + out << " </imageobject>" << endl; + out << " </mediaobject>" << endl; + out << " </figure>" << endl; + out << "</para>" << endl; + } + else if (graphFormat==GOF_BITMAP && generateImageMap) { if (imgExt=="svg") // Scalable vector graphics { @@ -3815,7 +3869,7 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format, } else // bitmap graphics { - out << "<div class=\"center\"><img src=\"" << relPath << baseName << "." + out << "<div class=\"center\"><img src=\"" << relPath << baseName << "." << imgExt << "\" border=\"0\" usemap=\"#" << mapName << "\" alt=\""; out << "\"/>"; @@ -3829,7 +3883,7 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format, } } } - else if (format==EPS) // encapsulated postscript + else if (graphFormat==GOF_EPS) // encapsulated postscript { if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName)) { @@ -3865,7 +3919,8 @@ DotDirDeps::~DotDirDeps() } QCString DotDirDeps::writeGraph(FTextStream &out, - GraphOutputFormat format, + GraphOutputFormat graphFormat, + EmbeddedOutputFormat textFormat, const char *path, const char *fileName, const char *relPath, @@ -3901,9 +3956,9 @@ QCString DotDirDeps::writeGraph(FTextStream &out, MD5SigToString(md5_sig,sigStr.data(),33); bool regenerate=FALSE; if (checkAndUpdateMd5Signature(absBaseName,sigStr) || - !checkDeliverables(format==BITMAP ? absImgName : + !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName : usePDFLatex ? absPdfName : absEpsName, - format==BITMAP && generateImageMap ? absMapName : QCString()) + graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString()) ) { regenerate=TRUE; @@ -3917,7 +3972,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out, t << theGraph.data(); f.close(); - if (format==BITMAP) + if (graphFormat==GOF_BITMAP) { // run dot to create a bitmap image QCString dotArgs(maxCmdLine); @@ -3926,7 +3981,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out, if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName); DotManager::instance()->addRun(dotRun); } - else if (format==EPS) + else if (graphFormat==GOF_EPS) { DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE); if (usePDFLatex) @@ -3942,7 +3997,23 @@ QCString DotDirDeps::writeGraph(FTextStream &out, } Doxygen::indexList->addImageFile(baseName+"."+imgExt); - if (format==BITMAP && generateImageMap) + if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook) + { + out << "<para>" << endl; + out << " <figure>" << endl; + out << " <title>Directory Dependency diagram"; + out << "</title>" << endl; + out << " <mediaobject>" << endl; + out << " <imageobject>" << endl; + out << " <imagedata"; + out << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">"; + out << "</imagedata>" << endl; + out << " </imageobject>" << endl; + out << " </mediaobject>" << endl; + out << " </figure>" << endl; + out << "</para>" << endl; + } + else if (graphFormat==GOF_BITMAP && generateImageMap) { if (imgExt=="svg") // Scalable vector graphics { @@ -3960,7 +4031,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out, } else // bitmap graphics { - out << "<div class=\"center\"><img src=\"" << relPath << baseName << "." + out << "<div class=\"center\"><img src=\"" << relPath << baseName << "." << imgExt << "\" border=\"0\" usemap=\"#" << mapName << "\" alt=\""; out << convertToXML(m_dir->displayName()); @@ -3975,7 +4046,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out, } } } - else if (format==EPS) + else if (graphFormat==GOF_EPS) { if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName)) { @@ -4085,9 +4156,9 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, QCString absOutFile = d.absPath().utf8()+"/"+outFile; DotRunner dotRun(inFile,d.absPath().data(),FALSE,absImgName); - if (format==BITMAP) + if (format==GOF_BITMAP) dotRun.addJob(imgExt,absImgName); - else // format==EPS + else // format==GOF_EPS { if (Config_getBool("USE_PDFLATEX")) { @@ -4105,7 +4176,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, return; } - if (format==BITMAP) checkDotResult(absImgName); + if (format==GOF_BITMAP) checkDotResult(absImgName); Doxygen::indexList->addImageFile(imgName); @@ -4384,7 +4455,8 @@ void DotGroupCollaboration::addCollaborationMember( } -QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat format, +QCString DotGroupCollaboration::writeGraph( FTextStream &t, + GraphOutputFormat graphFormat, EmbeddedOutputFormat textFormat, const char *path, const char *fileName, const char *relPath, bool writeImageMap,int graphId) const { @@ -4411,7 +4483,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo // write other nodes. for (dni.toFirst();(pn=dni.current());++dni) { - pn->write(md5stream,DotNode::Inheritance,format,TRUE,FALSE,FALSE,FALSE); + pn->write(md5stream,DotNode::Inheritance,graphFormat,TRUE,FALSE,FALSE,FALSE); } // write edges @@ -4441,9 +4513,9 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo QCString absEpsName = absBaseName+".eps"; bool regenerate=FALSE; if (checkAndUpdateMd5Signature(absBaseName,sigStr) || - !checkDeliverables(format==BITMAP ? absImgName : + !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName : usePDFLatex ? absPdfName : absEpsName, - format==BITMAP /*&& generateImageMap*/ ? absMapName : QCString()) + graphFormat==GOF_BITMAP /*&& generateImageMap*/ ? absMapName : QCString()) ) { regenerate=TRUE; @@ -4456,7 +4528,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo dotfile.close(); } - if (format==BITMAP) // run dot to create a bitmap image + if (graphFormat==GOF_BITMAP) // run dot to create a bitmap image { QCString dotArgs(maxCmdLine); @@ -4466,7 +4538,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo DotManager::instance()->addRun(dotRun); } - else if (format==EPS) + else if (graphFormat==GOF_EPS) { DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE); if (usePDFLatex) @@ -4481,7 +4553,23 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo } } - if (format==BITMAP && writeImageMap) + if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook) + { + t << "<para>" << endl; + t << " <figure>" << endl; + t << " <title>Group Collaboration diagram"; + t << "</title>" << endl; + t << " <mediaobject>" << endl; + t << " <imageobject>" << endl; + t << " <imagedata"; + t << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">"; + t << "</imagedata>" << endl; + t << " </imageobject>" << endl; + t << " </mediaobject>" << endl; + t << " </figure>" << endl; + t << "</para>" << endl; + } + else if (graphFormat==GOF_BITMAP && writeImageMap) { QCString mapLabel = escapeCharsInString(baseName,FALSE); t << "<center><table><tr><td>"; @@ -4503,7 +4591,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo else { t << "<img src=\"" << relPath << imgName - << "\" border=\"0\" alt=\"\" usemap=\"#" + << "\" border=\"0\" alt=\"\" usemap=\"#" << mapLabel << "\"/>" << endl; if (regenerate || !insertMapFile(t,absMapName,relPath,mapLabel)) { @@ -4512,10 +4600,9 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo t << "<!-- MAP " << mapId << " -->" << endl; } } - t << "</td></tr></table></center>" << endl; } - else if (format==EPS) + else if (graphFormat==GOF_EPS) { if (regenerate || !writeVecGfxFigure(t,baseName,absBaseName)) { @@ -39,7 +39,8 @@ class GroupDef; class DotGroupCollaboration; class DotRunnerQueue; -enum GraphOutputFormat { BITMAP , EPS }; +enum GraphOutputFormat { GOF_BITMAP, GOF_EPS }; +enum EmbeddedOutputFormat { EOF_Html, EOF_LaTeX, EOF_Rtf, EOF_DocBook }; /** Attributes of an edge of a dot graph */ struct EdgeInfo @@ -165,8 +166,8 @@ class DotClassGraph ~DotClassGraph(); bool isTrivial() const; bool isTooBig() const; - QCString writeGraph(FTextStream &t,GraphOutputFormat f,const char *path, - const char *fileName, const char *relPath, + QCString writeGraph(FTextStream &t,GraphOutputFormat gf,EmbeddedOutputFormat ef, + const char *path, const char *fileName, const char *relPath, bool TBRank=TRUE,bool imageMap=TRUE,int graphId=-1) const; void writeXML(FTextStream &t); @@ -196,7 +197,7 @@ class DotInclDepGraph public: DotInclDepGraph(FileDef *fd,bool inverse); ~DotInclDepGraph(); - QCString writeGraph(FTextStream &t, GraphOutputFormat f, + QCString writeGraph(FTextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const char *path,const char *fileName,const char *relPath, bool writeImageMap=TRUE,int graphId=-1) const; bool isTrivial() const; @@ -222,7 +223,7 @@ class DotCallGraph public: DotCallGraph(MemberDef *md,bool inverse); ~DotCallGraph(); - QCString writeGraph(FTextStream &t, GraphOutputFormat f, + QCString writeGraph(FTextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const char *path,const char *fileName, const char *relPath,bool writeImageMap=TRUE, int graphId=-1) const; @@ -249,7 +250,8 @@ class DotDirDeps ~DotDirDeps(); bool isTrivial() const; QCString writeGraph(FTextStream &out, - GraphOutputFormat format, + GraphOutputFormat gf, + EmbeddedOutputFormat ef, const char *path, const char *fileName, const char *relPath, @@ -298,7 +300,7 @@ class DotGroupCollaboration DotGroupCollaboration(GroupDef* gd); ~DotGroupCollaboration(); - QCString writeGraph(FTextStream &t, GraphOutputFormat format, + QCString writeGraph(FTextStream &t, GraphOutputFormat gf,EmbeddedOutputFormat ef, const char *path,const char *fileName,const char *relPath, bool writeImageMap=TRUE,int graphId=-1) const; void buildGraph(GroupDef* gd); diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 261f739..372bb93 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -1906,7 +1906,7 @@ void HtmlDocVisitor::writeDotFile(const QCString &fn,const QCString &relPath, } baseName.prepend("dot_"); QCString outDir = Config_getString("HTML_OUTPUT"); - writeDotGraphFromFile(fn,outDir,baseName,BITMAP); + writeDotGraphFromFile(fn,outDir,baseName,GOF_BITMAP); writeDotImageMapFromFile(m_t,fn,outDir,relPath,baseName,context); } diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 0d399d3..27091b4 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -2516,7 +2516,7 @@ void HtmlGenerator::endDotGraph(const DotClassGraph &g) endSectionSummary(t); startSectionContent(t,m_sectionCount); - g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,TRUE,m_sectionCount); + g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,TRUE,m_sectionCount); if (generateLegend && !umlLook) { t << "<center><span class=\"legend\">["; @@ -2542,7 +2542,7 @@ void HtmlGenerator::endInclDepGraph(const DotInclDepGraph &g) endSectionSummary(t); startSectionContent(t,m_sectionCount); - g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount); + g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount); endSectionContent(t); m_sectionCount++; @@ -2560,7 +2560,7 @@ void HtmlGenerator::endGroupCollaboration(const DotGroupCollaboration &g) endSectionSummary(t); startSectionContent(t,m_sectionCount); - g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount); + g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount); endSectionContent(t); m_sectionCount++; @@ -2578,7 +2578,7 @@ void HtmlGenerator::endCallGraph(const DotCallGraph &g) endSectionSummary(t); startSectionContent(t,m_sectionCount); - g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount); + g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount); endSectionContent(t); m_sectionCount++; @@ -2596,7 +2596,7 @@ void HtmlGenerator::endDirDepGraph(const DotDirDeps &g) endSectionSummary(t); startSectionContent(t,m_sectionCount); - g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount); + g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount); endSectionContent(t); m_sectionCount++; diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index eed36bc..0edb459 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -1587,7 +1587,7 @@ void LatexDocVisitor::startDotFile(const QCString &fileName, baseName.prepend("dot_"); QCString outDir = Config_getString("LATEX_OUTPUT"); QCString name = fileName; - writeDotGraphFromFile(name,outDir,baseName,EPS); + writeDotGraphFromFile(name,outDir,baseName,GOF_EPS); if (hasCaption) { m_t << "\n\\begin{DoxyImage}\n"; diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 10e50de..086e012 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -1814,7 +1814,7 @@ void LatexGenerator::startDotGraph() void LatexGenerator::endDotGraph(const DotClassGraph &g) { - g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); } void LatexGenerator::startInclDepGraph() @@ -1823,7 +1823,7 @@ void LatexGenerator::startInclDepGraph() void LatexGenerator::endInclDepGraph(const DotInclDepGraph &g) { - g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); } void LatexGenerator::startGroupCollaboration() @@ -1832,7 +1832,7 @@ void LatexGenerator::startGroupCollaboration() void LatexGenerator::endGroupCollaboration(const DotGroupCollaboration &g) { - g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); } void LatexGenerator::startCallGraph() @@ -1841,7 +1841,7 @@ void LatexGenerator::startCallGraph() void LatexGenerator::endCallGraph(const DotCallGraph &g) { - g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); } void LatexGenerator::startDirDepGraph() @@ -1850,7 +1850,7 @@ void LatexGenerator::startDirDepGraph() void LatexGenerator::endDirDepGraph(const DotDirDeps &g) { - g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); } void LatexGenerator::startDescription() diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index 0381c93..ee2ae3f 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -476,9 +476,10 @@ class PrintDocVisitor : public DocVisitor printf("<image src=\"%s\" type=\"",img->name().data()); switch(img->type()) { - case DocImage::Html: printf("html"); break; - case DocImage::Latex: printf("latex"); break; - case DocImage::Rtf: printf("rtf"); break; + case DocImage::Html: printf("html"); break; + case DocImage::Latex: printf("latex"); break; + case DocImage::Rtf: printf("rtf"); break; + case DocImage::DocBook: printf("docbook"); break; } printf("\" width=%s height=%s>\n",img->width().data(),img->height().data()); } diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index b90b5a8..0d17208 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -1653,7 +1653,7 @@ void RTFDocVisitor::writeDotFile(const QCString &fileName) baseName=baseName.right(baseName.length()-i-1); } QCString outDir = Config_getString("RTF_OUTPUT"); - writeDotGraphFromFile(fileName,outDir,baseName,BITMAP); + writeDotGraphFromFile(fileName,outDir,baseName,GOF_BITMAP); if (!m_lastIsPara) m_t << "\\par" << endl; m_t << "{" << endl; m_t << rtf_Style_Reset; diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 8699c4e..ccdadcf 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -2409,7 +2409,7 @@ void RTFGenerator::endDotGraph(const DotClassGraph &g) newParagraph(); QCString fn = - g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),fileName,relPath,TRUE,FALSE); + g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"),fileName,relPath,TRUE,FALSE); // display the file t << "{" << endl; @@ -2431,7 +2431,7 @@ void RTFGenerator::endInclDepGraph(const DotInclDepGraph &g) { newParagraph(); - QCString fn = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"), + QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"), fileName,relPath,FALSE); // display the file @@ -2461,7 +2461,7 @@ void RTFGenerator::endCallGraph(const DotCallGraph &g) { newParagraph(); - QCString fn = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"), + QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"), fileName,relPath,FALSE); // display the file @@ -2483,7 +2483,7 @@ void RTFGenerator::endDirDepGraph(const DotDirDeps &g) { newParagraph(); - QCString fn = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"), + QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"), fileName,relPath,FALSE); // display the file diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index f74a6a2..c36042b 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -678,9 +678,10 @@ void XmlDocVisitor::visitPre(DocImage *img) m_t << "<image type=\""; switch(img->type()) { - case DocImage::Html: m_t << "html"; break; - case DocImage::Latex: m_t << "latex"; break; - case DocImage::Rtf: m_t << "rtf"; break; + case DocImage::Html: m_t << "html"; break; + case DocImage::Latex: m_t << "latex"; break; + case DocImage::Rtf: m_t << "rtf"; break; + case DocImage::DocBook: m_t << "docbook"; break; } m_t << "\""; |