summaryrefslogtreecommitdiffstats
path: root/src/docbookvisitor.cpp
diff options
context:
space:
mode:
authoralbert-github <albert.tests@gmail.com>2018-09-07 09:29:20 (GMT)
committeralbert-github <albert.tests@gmail.com>2018-09-07 09:29:20 (GMT)
commit7340b1c0e767b0ee88ce389df653d3d2a77801cd (patch)
treebab4c534d53eb7fb0f713049f0d5885d8eed8a62 /src/docbookvisitor.cpp
parent3e1360976b6ab9621b85d93fdd4e9232d6a7a7fa (diff)
downloadDoxygen-7340b1c0e767b0ee88ce389df653d3d2a77801cd.zip
Doxygen-7340b1c0e767b0ee88ce389df653d3d2a77801cd.tar.gz
Doxygen-7340b1c0e767b0ee88ce389df653d3d2a77801cd.tar.bz2
Implementation of standard generator for docbook output
Till now docbook had its own output generator, but lot of possibilities were missing (see remark about updating below), with this patch the (more than) basic implementation has been made. Added some docbook tests to the current tests and updated documentation where necessary Tried updating current version but too many issues remained that were generically handled in the standard generator, code is in current version behind '#if 0' construct in doxygen.cpp and name with '_v1' and in docbookgen.cp'
Diffstat (limited to 'src/docbookvisitor.cpp')
-rw-r--r--src/docbookvisitor.cpp531
1 files changed, 445 insertions, 86 deletions
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index b83317c..da84931 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -36,17 +36,34 @@
#include "htmlentity.h"
#include "plantuml.h"
-static void visitPreStart(FTextStream &t, const bool hasCaption, QCString name, QCString width, QCString height)
+#if 0
+#define DB_VIS_C DB_VIS_C1(m_t)
+#define DB_VIS_C1(x) x << "<!-- DB_VIS_C " << __LINE__ << " -->\n";
+#define DB_VIS_C2(y) DB_VIS_C2a(m_t,y)
+#define DB_VIS_C2a(x,y) x << "<!-- DB_VIS_C " << __LINE__ << " " << y << " -->\n";
+#else
+#define DB_VIS_C
+#define DB_VIS_C1(x)
+#define DB_VIS_C2(y)
+#define DB_VIS_C2a(x,y)
+#endif
+void visitPreStart(FTextStream &t, const bool hasCaption, QCString name, QCString width, QCString height)
{
QCString tmpStr;
- t << " <figure>" << endl;
- t << " <title></title>" << endl;
+ if (hasCaption)
+ {
+ t << " <figure>" << endl;
+ }
+ else
+ {
+ t << " <informalfigure>" << endl;
+ }
t << " <mediaobject>" << endl;
t << " <imageobject>" << endl;
t << " <imagedata";
if (!width.isEmpty())
{
- t << " width=\"" << convertToXML(width) << "\"";
+ t << " width=\"" << convertToDocBook(width) << "\"";
}
else
{
@@ -54,26 +71,33 @@ static void visitPreStart(FTextStream &t, const bool hasCaption, QCString name,
}
if (!height.isEmpty())
{
- t << " depth=\"" << convertToXML(tmpStr) << "\"";
+ t << " depth=\"" << convertToDocBook(tmpStr) << "\"";
}
- t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << name << "\">";
+ t << " align=\"center\" valign=\"middle\" scalefit=\"0\" fileref=\"" << name << "\">";
t << "</imagedata>" << endl;
t << " </imageobject>" << endl;
if (hasCaption)
{
- t << " <caption>" << endl;
+ t << " <title>" << endl;
}
}
-static void visitPostEnd(FTextStream &t, const bool hasCaption)
+void visitPostEnd(FTextStream &t, const bool hasCaption)
{
t << endl;
if (hasCaption)
{
- t << " </caption>" << endl;
+ t << " </title>" << endl;
}
t << " </mediaobject>" << endl;
- t << " </figure>" << endl;
+ if (hasCaption)
+ {
+ t << " </figure>" << endl;
+ }
+ else
+ {
+ t << " </informalfigure>" << endl;
+ }
}
static void visitCaption(DocbookDocVisitor *parent, QList<DocNode> children)
@@ -86,6 +110,13 @@ static void visitCaption(DocbookDocVisitor *parent, QList<DocNode> children)
DocbookDocVisitor::DocbookDocVisitor(FTextStream &t,CodeOutputInterface &ci)
: DocVisitor(DocVisitor_Docbook), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
{
+DB_VIS_C
+ // m_t << "<section>" << endl;
+}
+DocbookDocVisitor::~DocbookDocVisitor()
+{
+DB_VIS_C
+ // m_t << "</section>" << endl;
}
//--------------------------------------
@@ -94,12 +125,14 @@ DocbookDocVisitor::DocbookDocVisitor(FTextStream &t,CodeOutputInterface &ci)
void DocbookDocVisitor::visit(DocWord *w)
{
+DB_VIS_C
if (m_hide) return;
filter(w->word());
}
void DocbookDocVisitor::visit(DocLinkedWord *w)
{
+DB_VIS_C
if (m_hide) return;
startLink(w->file(),w->anchor());
filter(w->word());
@@ -108,6 +141,7 @@ void DocbookDocVisitor::visit(DocLinkedWord *w)
void DocbookDocVisitor::visit(DocWhiteSpace *w)
{
+DB_VIS_C
if (m_hide) return;
if (m_insidePre)
{
@@ -121,6 +155,7 @@ void DocbookDocVisitor::visit(DocWhiteSpace *w)
void DocbookDocVisitor::visit(DocSymbol *s)
{
+DB_VIS_C
if (m_hide) return;
const char *res = HtmlEntityMapper::instance()->docbook(s->symbol());
if (res)
@@ -135,6 +170,7 @@ void DocbookDocVisitor::visit(DocSymbol *s)
void DocbookDocVisitor::visit(DocURL *u)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<link xlink:href=\"";
if (u->isEmail()) m_t << "mailto:";
@@ -146,12 +182,16 @@ void DocbookDocVisitor::visit(DocURL *u)
void DocbookDocVisitor::visit(DocLineBreak *)
{
+DB_VIS_C
if (m_hide) return;
- m_t << endl << "<literallayout>\n</literallayout>" << endl;
+ m_t << endl << "<literallayout>&#160;&#xa;</literallayout>" << endl;
+ // gives nicer results but gives problems as it is not allowed in <pare> and also problems with dblatex
+ // m_t << endl << "<sbr/>" << endl;
}
void DocbookDocVisitor::visit(DocHorRuler *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<informaltable frame='bottom'><tgroup cols='1'><colspec align='center'/><tbody><row><entry align='center'>\n";
m_t << "</entry></row></tbody></tgroup></informaltable>\n";
@@ -159,6 +199,7 @@ void DocbookDocVisitor::visit(DocHorRuler *)
void DocbookDocVisitor::visit(DocStyleChange *s)
{
+DB_VIS_C
if (m_hide) return;
switch (s->style())
{
@@ -205,6 +246,7 @@ void DocbookDocVisitor::visit(DocStyleChange *s)
void DocbookDocVisitor::visit(DocVerbatim *s)
{
+DB_VIS_C
if (m_hide) return;
SrcLangExt langExt = getLanguageFromFileName(m_langExt);
switch(s->type())
@@ -217,9 +259,9 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
m_t << "</computeroutput></literallayout>";
break;
case DocVerbatim::Verbatim:
- m_t << "<literallayout>";
+ m_t << "<literallayout><computeroutput>";
filter(s->text());
- m_t << "</literallayout>";
+ m_t << "</computeroutput></literallayout>";
break;
case DocVerbatim::HtmlOnly:
break;
@@ -232,7 +274,6 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
case DocVerbatim::XmlOnly:
break;
case DocVerbatim::DocbookOnly:
- break;
m_t << s->text();
break;
case DocVerbatim::Dot:
@@ -304,12 +345,14 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
void DocbookDocVisitor::visit(DocAnchor *anc)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "<anchor id=\"" << anc->file() << "_1" << anc->anchor() << "\"/>";
+ m_t << "<anchor xml:id=\"_" << stripPath(anc->file()) << "_1" << anc->anchor() << "\"/>";
}
void DocbookDocVisitor::visit(DocInclude *inc)
{
+DB_VIS_C
if (m_hide) return;
SrcLangExt langExt = getLanguageFromFileName(inc->extension());
switch(inc->type())
@@ -345,9 +388,9 @@ void DocbookDocVisitor::visit(DocInclude *inc)
case DocInclude::LatexInclude:
break;
case DocInclude::VerbInclude:
- m_t << "<verbatim>";
+ m_t << "<literallayout>";
filter(inc->text());
- m_t << "</verbatim>";
+ m_t << "</literallayout>";
break;
case DocInclude::Snippet:
m_t << "<literallayout><computeroutput>";
@@ -393,6 +436,7 @@ void DocbookDocVisitor::visit(DocInclude *inc)
void DocbookDocVisitor::visit(DocIncOperator *op)
{
+DB_VIS_C
if (op->isFirst())
{
if (!m_hide)
@@ -429,27 +473,37 @@ void DocbookDocVisitor::visit(DocIncOperator *op)
void DocbookDocVisitor::visit(DocFormula *f)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "<equation><title>" << f->name() << "</title>";
- filter(f->text());
- m_t << "</equation>";
+
+ if (f->isInline()) m_t << "<inlinemediaobject>" << endl;
+ else m_t << " <mediaobject>" << endl;
+ m_t << " <imageobject>" << endl;
+ m_t << " <imagedata ";
+ m_t << "align=\"center\" valign=\"middle\" scalefit=\"0\" fileref=\"" << f->relPath() << f->name() << ".png\"/>" << endl;
+ m_t << " </imageobject>" << endl;
+ if (f->isInline()) m_t << "</inlinemediaobject>" << endl;
+ else m_t << " </mediaobject>" << endl;
}
void DocbookDocVisitor::visit(DocIndexEntry *ie)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "<indexentry><primaryie>" << endl;
+ m_t << "<indexterm><primary>";
filter(ie->entry());
- m_t << "</primaryie><secondaryie></secondaryie></indexentry>" << endl;
+ m_t << "</primary></indexterm>" << endl;
}
void DocbookDocVisitor::visit(DocSimpleSectSep *)
{
- m_t << "<simplesect/>";
+DB_VIS_C
+ // m_t << "<simplesect/>";
}
void DocbookDocVisitor::visit(DocCite *cite)
{
+DB_VIS_C
if (m_hide) return;
if (!cite->file().isEmpty()) startLink(cite->file(),cite->anchor());
filter(cite->text());
@@ -462,6 +516,7 @@ void DocbookDocVisitor::visit(DocCite *cite)
void DocbookDocVisitor::visitPre(DocAutoList *l)
{
+DB_VIS_C
if (m_hide) return;
if (l->isEnumList())
{
@@ -475,6 +530,7 @@ void DocbookDocVisitor::visitPre(DocAutoList *l)
void DocbookDocVisitor::visitPost(DocAutoList *l)
{
+DB_VIS_C
if (m_hide) return;
if (l->isEnumList())
{
@@ -488,18 +544,21 @@ void DocbookDocVisitor::visitPost(DocAutoList *l)
void DocbookDocVisitor::visitPre(DocAutoListItem *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<listitem>";
}
void DocbookDocVisitor::visitPost(DocAutoListItem *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</listitem>";
}
void DocbookDocVisitor::visitPre(DocPara *)
{
+DB_VIS_C
if (m_hide) return;
m_t << endl;
m_t << "<para>";
@@ -507,6 +566,7 @@ void DocbookDocVisitor::visitPre(DocPara *)
void DocbookDocVisitor::visitPost(DocPara *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</para>";
m_t << endl;
@@ -514,16 +574,19 @@ void DocbookDocVisitor::visitPost(DocPara *)
void DocbookDocVisitor::visitPre(DocRoot *)
{
+DB_VIS_C
//m_t << "<hr><h4><font color=\"red\">New parser:</font></h4>\n";
}
void DocbookDocVisitor::visitPost(DocRoot *)
{
+DB_VIS_C
//m_t << "<hr><h4><font color=\"red\">Old parser:</font></h4>\n";
}
void DocbookDocVisitor::visitPre(DocSimpleSect *s)
{
+DB_VIS_C
if (m_hide) return;
switch(s->type())
{
@@ -534,7 +597,7 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trSeeAlso()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trSeeAlso()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Return:
@@ -544,7 +607,7 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trReturns()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trReturns()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Author:
@@ -554,7 +617,7 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trAuthor(TRUE, TRUE)) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trAuthor(TRUE, TRUE)) << ": </title>" << endl;
}
break;
case DocSimpleSect::Authors:
@@ -564,7 +627,7 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trAuthor(TRUE, FALSE)) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trAuthor(TRUE, FALSE)) << ": </title>" << endl;
}
break;
case DocSimpleSect::Version:
@@ -574,7 +637,7 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trVersion()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trVersion()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Since:
@@ -584,7 +647,7 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trSince()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trSince()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Date:
@@ -594,27 +657,27 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trDate()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trDate()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Note:
if (m_insidePre)
{
- m_t << "<formalpara><title>" << theTranslator->trNote() << ": </title>" << endl;
+ m_t << "<note><title>" << theTranslator->trNote() << ": </title>" << endl;
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trNote()) << ": </title>" << endl;
+ m_t << "<note><title>" << convertToDocBook(theTranslator->trNote()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Warning:
if (m_insidePre)
{
- m_t << "<formalpara><title>" << theTranslator->trWarning() << ": </title>" << endl;
+ m_t << "<warning><title>" << theTranslator->trWarning() << ": </title>" << endl;
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trWarning()) << ": </title>" << endl;
+ m_t << "<warning><title>" << convertToDocBook(theTranslator->trWarning()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Pre:
@@ -624,7 +687,7 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trPrecondition()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trPrecondition()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Post:
@@ -634,7 +697,7 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trPostcondition()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trPostcondition()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Copyright:
@@ -644,7 +707,7 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trCopyright()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trCopyright()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Invar:
@@ -654,85 +717,121 @@ void DocbookDocVisitor::visitPre(DocSimpleSect *s)
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trInvariant()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trInvariant()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Remark:
+ // <remark> is miising the <title> possibility
if (m_insidePre)
{
m_t << "<formalpara><title>" << theTranslator->trRemarks() << ": </title>" << endl;
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trRemarks()) << ": </title>" << endl;
+ m_t << "<formalpara><title>" << convertToDocBook(theTranslator->trRemarks()) << ": </title>" << endl;
}
break;
case DocSimpleSect::Attention:
if (m_insidePre)
{
- m_t << "<formalpara><title>" << theTranslator->trAttention() << ": </title>" << endl;
+ m_t << "<caution><title>" << theTranslator->trAttention() << ": </title>" << endl;
}
else
{
- m_t << "<formalpara><title>" << convertToXML(theTranslator->trAttention()) << ": </title>" << endl;
+ m_t << "<caution><title>" << convertToDocBook(theTranslator->trAttention()) << ": </title>" << endl;
}
break;
case DocSimpleSect::User:
- m_t << "<formalpara><title></title>" << endl;
+ if (s->hasTitle())
+ m_t << "<formalpara>" << endl;
+ else
+ m_t << "<para>" << endl;
break;
case DocSimpleSect::Rcs:
- m_t << "<formalpara><title></title>" << endl;
+ case DocSimpleSect::Unknown:
+ m_t << "<para>" << endl;
break;
- case DocSimpleSect::Unknown: m_t << "<formalpara><title></title>" << endl; break;
}
}
-void DocbookDocVisitor::visitPost(DocSimpleSect *)
+void DocbookDocVisitor::visitPost(DocSimpleSect *s)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "</formalpara>" << endl;
+ switch(s->type())
+ {
+ case DocSimpleSect::Rcs:
+ case DocSimpleSect::Unknown:
+ m_t << "</para>" << endl;
+ break;
+ case DocSimpleSect::User:
+ if (s->hasTitle())
+ m_t << "</formalpara>" << endl;
+ else
+ m_t << "</para>" << endl;
+ break;
+ case DocSimpleSect::Note:
+ m_t << "</note>" << endl;
+ break;
+ case DocSimpleSect::Attention:
+ m_t << "</caution>" << endl;
+ break;
+ case DocSimpleSect::Warning:
+ m_t << "</warning>" << endl;
+ break;
+ default:
+ m_t << "</formalpara>" << endl;
+ break;
+ }
}
-void DocbookDocVisitor::visitPre(DocTitle *)
+void DocbookDocVisitor::visitPre(DocTitle *t)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "<title>";
+ if (t->hasTitle()) m_t << "<title>";
}
-void DocbookDocVisitor::visitPost(DocTitle *)
+void DocbookDocVisitor::visitPost(DocTitle *t)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "</title>";
+ if (t->hasTitle()) m_t << "</title>";
}
void DocbookDocVisitor::visitPre(DocSimpleList *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<itemizedlist>\n";
}
void DocbookDocVisitor::visitPost(DocSimpleList *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</itemizedlist>\n";
}
void DocbookDocVisitor::visitPre(DocSimpleListItem *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<listitem>";
}
void DocbookDocVisitor::visitPost(DocSimpleListItem *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</listitem>\n";
}
void DocbookDocVisitor::visitPre(DocSection *s)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "<section xml:id=\"" << s->file();
+ m_t << "<section xml:id=\"_" << stripPath(s->file());
if (!s->anchor().isEmpty()) m_t << "_1" << s->anchor();
m_t << "\">" << endl;
m_t << "<title>";
@@ -742,11 +841,13 @@ void DocbookDocVisitor::visitPre(DocSection *s)
void DocbookDocVisitor::visitPost(DocSection *)
{
+DB_VIS_C
m_t << "</section>\n";
}
void DocbookDocVisitor::visitPre(DocHtmlList *s)
{
+DB_VIS_C
if (m_hide) return;
if (s->type()==DocHtmlList::Ordered)
m_t << "<orderedlist>\n";
@@ -756,6 +857,7 @@ void DocbookDocVisitor::visitPre(DocHtmlList *s)
void DocbookDocVisitor::visitPost(DocHtmlList *s)
{
+DB_VIS_C
if (m_hide) return;
if (s->type()==DocHtmlList::Ordered)
m_t << "</orderedlist>\n";
@@ -765,143 +867,276 @@ void DocbookDocVisitor::visitPost(DocHtmlList *s)
void DocbookDocVisitor::visitPre(DocHtmlListItem *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<listitem>\n";
}
void DocbookDocVisitor::visitPost(DocHtmlListItem *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</listitem>\n";
}
void DocbookDocVisitor::visitPre(DocHtmlDescList *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<variablelist>\n";
}
void DocbookDocVisitor::visitPost(DocHtmlDescList *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</variablelist>\n";
}
void DocbookDocVisitor::visitPre(DocHtmlDescTitle *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<varlistentry><term>";
}
void DocbookDocVisitor::visitPost(DocHtmlDescTitle *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</term>\n";
}
void DocbookDocVisitor::visitPre(DocHtmlDescData *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<listitem>";
}
void DocbookDocVisitor::visitPost(DocHtmlDescData *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</listitem></varlistentry>\n";
}
+static int colCnt = 0;
+static bool bodySet = FALSE; // it is possible to have tables without a header
void DocbookDocVisitor::visitPre(DocHtmlTable *t)
{
+DB_VIS_C
+ bodySet = FALSE;
if (m_hide) return;
- m_t << "<table frame=\"all\">" << endl;
- m_t << " <title></title>" << endl;
+ m_t << "<informaltable frame=\"all\">" << endl;
m_t << " <tgroup cols=\"" << t->numColumns() << "\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
- m_t << " <tbody>" << endl;
+ for (int i = 0; i <t->numColumns(); i++)
+ {
+ // do something with colwidth based of cell width specification (be aware of possible colspan in the header)?
+ m_t << " <colspec colname='c" << i+1 << "'/>\n";
+ }
}
void DocbookDocVisitor::visitPost(DocHtmlTable *)
{
+DB_VIS_C
if (m_hide) return;
m_t << " </tbody>" << endl;
m_t << " </tgroup>" << endl;
- m_t << "</table>" << endl;
+ m_t << "</informaltable>" << endl;
}
-void DocbookDocVisitor::visitPre(DocHtmlRow *)
+void DocbookDocVisitor::visitPre(DocHtmlRow *tr)
{
+DB_VIS_C
+ colCnt = 0;
if (m_hide) return;
- m_t << "<row>\n";
+
+ if (tr->isHeading()) m_t << "<thead>\n";
+ else if (!bodySet)
+ {
+ bodySet = TRUE;
+ m_t << "<tbody>\n";
+ }
+
+ m_t << " <row ";
+
+ HtmlAttribListIterator li(tr->attribs());
+ HtmlAttrib *opt;
+ for (li.toFirst();(opt=li.current());++li)
+ {
+ if (opt->name=="class")
+ {
+ // just skip it
+ }
+ else if (opt->name=="style")
+ {
+ // just skip it
+ }
+ else if (opt->name=="height")
+ {
+ // just skip it
+ }
+ else if (opt->name=="filter")
+ {
+ // just skip it
+ }
+ else
+ {
+ m_t << " " << opt->name << "='" << opt->value << "'";
+ }
+ }
+ m_t << ">\n";
}
-void DocbookDocVisitor::visitPost(DocHtmlRow *)
+void DocbookDocVisitor::visitPost(DocHtmlRow *tr)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</row>\n";
+ if (tr->isHeading())
+ {
+ bodySet = TRUE;
+ m_t << "</thead><tbody>\n";
+ }
}
-void DocbookDocVisitor::visitPre(DocHtmlCell *)
+void DocbookDocVisitor::visitPre(DocHtmlCell *c)
{
+DB_VIS_C
+ colCnt++;
if (m_hide) return;
- m_t << "<entry>";
+ m_t << "<entry";
+
+ HtmlAttribListIterator li(c->attribs());
+ HtmlAttrib *opt;
+ for (li.toFirst();(opt=li.current());++li)
+ {
+ if (opt->name=="colspan")
+ {
+ m_t << " namest='c" << colCnt << "'";
+ int cols = opt->value.toInt();
+ colCnt += (cols - 1);
+ m_t << " nameend='c" << colCnt << "'";
+ }
+ else if (opt->name=="rowspan")
+ {
+ int extraRows = opt->value.toInt() - 1;
+ m_t << " morerows='" << extraRows << "'";
+ }
+ else if (opt->name=="class")
+ {
+ if (opt->value == "markdownTableBodyRight")
+ {
+ m_t << " align='right'";
+ }
+ else if (opt->value == "markdownTableBodyLeftt")
+ {
+ m_t << " align='left'";
+ }
+ else if (opt->value == "markdownTableBodyCenter")
+ {
+ m_t << " align='center'";
+ }
+ else if (opt->value == "markdownTableHeadRight")
+ {
+ m_t << " align='right'";
+ }
+ else if (opt->value == "markdownTableHeadLeftt")
+ {
+ m_t << " align='left'";
+ }
+ else if (opt->value == "markdownTableHeadCenter")
+ {
+ m_t << " align='center'";
+ }
+ }
+ else if (opt->name=="style")
+ {
+ // just skip it
+ }
+ else if (opt->name=="width")
+ {
+ // just skip it
+ }
+ else if (opt->name=="height")
+ {
+ // just skip it
+ }
+ else
+ {
+ m_t << " " << opt->name << "='" << opt->value << "'";
+ }
+ }
+ m_t << ">";
}
-void DocbookDocVisitor::visitPost(DocHtmlCell *)
+void DocbookDocVisitor::visitPost(DocHtmlCell *c)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</entry>";
}
-void DocbookDocVisitor::visitPre(DocHtmlCaption *)
+void DocbookDocVisitor::visitPre(DocHtmlCaption *c)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "<caption>";
+ m_t << "<caption>";
}
void DocbookDocVisitor::visitPost(DocHtmlCaption *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</caption>\n";
}
void DocbookDocVisitor::visitPre(DocInternal *)
{
+DB_VIS_C
if (m_hide) return;
// TODO: to be implemented
}
void DocbookDocVisitor::visitPost(DocInternal *)
{
+DB_VIS_C
if (m_hide) return;
// TODO: to be implemented
}
void DocbookDocVisitor::visitPre(DocHRef *href)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "<link xlink:href=\"" << href->url() << "\">";
+ m_t << "<link xlink:href=\"" << convertToDocBook(href->url()) << "\">";
}
void DocbookDocVisitor::visitPost(DocHRef *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</link>";
}
void DocbookDocVisitor::visitPre(DocHtmlHeader *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<formalpara><title>";
}
void DocbookDocVisitor::visitPost(DocHtmlHeader *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</title></formalpara>\n";
}
void DocbookDocVisitor::visitPre(DocImage *img)
{
+DB_VIS_C
if (img->type()==DocImage::DocBook)
{
if (m_hide) return;
@@ -912,7 +1147,7 @@ void DocbookDocVisitor::visitPre(DocImage *img)
{
baseName=baseName.right(baseName.length()-i-1);
}
- visitPreStart(m_t, img -> hasCaption(), baseName, img -> width(), img -> height());
+ visitPreStart(m_t, img -> hasCaption(), img->relPath() + baseName, img -> width(), img -> height());
}
else
{
@@ -923,6 +1158,7 @@ void DocbookDocVisitor::visitPre(DocImage *img)
void DocbookDocVisitor::visitPost(DocImage *img)
{
+DB_VIS_C
if (img->type()==DocImage::DocBook)
{
if (m_hide) return;
@@ -963,96 +1199,118 @@ void DocbookDocVisitor::visitPost(DocImage *img)
void DocbookDocVisitor::visitPre(DocDotFile *df)
{
+DB_VIS_C
if (m_hide) return;
startDotFile(df->file(),df->width(),df->height(),df->hasCaption());
}
void DocbookDocVisitor::visitPost(DocDotFile *df)
{
+DB_VIS_C
if (m_hide) return;
endDotFile(df->hasCaption());
}
void DocbookDocVisitor::visitPre(DocMscFile *df)
{
+DB_VIS_C
if (m_hide) return;
startMscFile(df->file(),df->width(),df->height(),df->hasCaption());
}
void DocbookDocVisitor::visitPost(DocMscFile *df)
{
+DB_VIS_C
if (m_hide) return;
endMscFile(df->hasCaption());
}
void DocbookDocVisitor::visitPre(DocDiaFile *df)
{
+DB_VIS_C
if (m_hide) return;
startDiaFile(df->file(),df->width(),df->height(),df->hasCaption());
}
void DocbookDocVisitor::visitPost(DocDiaFile *df)
{
+DB_VIS_C
if (m_hide) return;
endDiaFile(df->hasCaption());
}
void DocbookDocVisitor::visitPre(DocLink *lnk)
{
+DB_VIS_C
if (m_hide) return;
startLink(lnk->file(),lnk->anchor());
}
void DocbookDocVisitor::visitPost(DocLink *)
{
+DB_VIS_C
if (m_hide) return;
endLink();
}
void DocbookDocVisitor::visitPre(DocRef *ref)
{
+DB_VIS_C
if (m_hide) return;
- if (!ref->file().isEmpty()) startLink(ref->file(),ref->anchor());
+ if (ref->isSubPage())
+ {
+ startLink(0,ref->anchor());
+ }
+ else
+ {
+ if (!ref->file().isEmpty()) startLink(ref->file(),ref->anchor());
+ }
+
if (!ref->hasLinkText()) filter(ref->targetTitle());
}
void DocbookDocVisitor::visitPost(DocRef *ref)
{
+DB_VIS_C
if (m_hide) return;
if (!ref->file().isEmpty()) endLink();
}
void DocbookDocVisitor::visitPre(DocSecRefItem *ref)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "<tocitem id=\"" << ref->file() << "_1" << ref->anchor() << "\">";
+ //m_t << "<tocentry xml:idref=\"_" << stripPath(ref->file()) << "_1" << ref->anchor() << "\">";
+ m_t << "<tocentry>";
}
void DocbookDocVisitor::visitPost(DocSecRefItem *)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "</tocitem>" << endl;
+ m_t << "</tocentry>" << endl;
}
void DocbookDocVisitor::visitPre(DocSecRefList *)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "<toclist>" << endl;
+ m_t << "<toc>" << endl;
}
void DocbookDocVisitor::visitPost(DocSecRefList *)
{
+DB_VIS_C
if (m_hide) return;
- m_t << "</toclist>" << endl;
+ m_t << "</toc>" << endl;
}
void DocbookDocVisitor::visitPre(DocParamSect *s)
{
+DB_VIS_C
if (m_hide) return;
m_t << endl;
m_t << " <formalpara>" << endl;
- m_t << " <title/>" << endl;
- m_t << " <table frame=\"all\">" << endl;
- m_t << " <title>";
+ m_t << " <title>" << endl;
switch(s->type())
{
case DocParamSect::Param: m_t << theTranslator->trParameters(); break;
@@ -1062,29 +1320,96 @@ void DocbookDocVisitor::visitPre(DocParamSect *s)
default:
ASSERT(0);
}
- m_t << " </title>" << endl;
- m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
- m_t << " <colspec colwidth=\"1*\"/>" << endl;
- m_t << " <colspec colwidth=\"4*\"/>" << endl;
+ m_t << " </title>" << endl;
+ m_t << " <para>" << endl;
+ m_t << " <table frame=\"all\">" << endl;
+ int ncols = 2;
+ if (s->type() == DocParamSect::Param)
+ {
+ bool hasInOutSpecs = s->hasInOutSpecifier();
+ bool hasTypeSpecs = s->hasTypeSpecifier();
+ if (hasInOutSpecs && hasTypeSpecs) ncols += 2;
+ else if (hasInOutSpecs || hasTypeSpecs) ncols += 1;
+ }
+ m_t << " <tgroup cols=\"" << ncols << "\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
+ for (int i = 1; i <= ncols; i++)
+ {
+ if (i == ncols) m_t << " <colspec colwidth=\"4*\"/>" << endl;
+ else m_t << " <colspec colwidth=\"1*\"/>" << endl;
+ }
m_t << " <tbody>" << endl;
}
void DocbookDocVisitor::visitPost(DocParamSect *)
{
+DB_VIS_C
if (m_hide) return;
m_t << " </tbody>" << endl;
m_t << " </tgroup>" << endl;
m_t << " </table>" << endl;
+ m_t << " </para>" << endl;
m_t << " </formalpara>" << endl;
m_t << " ";
}
void DocbookDocVisitor::visitPre(DocParamList *pl)
{
+DB_VIS_C
if (m_hide) return;
+ m_t << " <row>" << endl;
+
+ DocParamSect::Type parentType = DocParamSect::Unknown;
+ DocParamSect *sect = 0;
+ if (pl->parent() && pl->parent()->kind()==DocNode::Kind_ParamSect)
+ {
+ parentType = ((DocParamSect*)pl->parent())->type();
+ sect=(DocParamSect*)pl->parent();
+ }
+
+ if (sect && sect->hasInOutSpecifier())
+ {
+ m_t << " <entry>";
+ if (pl->direction()!=DocParamSect::Unspecified)
+ {
+ if (pl->direction()==DocParamSect::In)
+ {
+ m_t << "in";
+ }
+ else if (pl->direction()==DocParamSect::Out)
+ {
+ m_t << "out";
+ }
+ else if (pl->direction()==DocParamSect::InOut)
+ {
+ m_t << "in,out";
+ }
+ }
+ m_t << " </entry>";
+ }
+
+ if (sect && sect->hasTypeSpecifier())
+ {
+ QListIterator<DocNode> li(pl->paramTypes());
+ DocNode *type;
+ bool first=TRUE;
+ m_t << " <entry>";
+ for (li.toFirst();(type=li.current());++li)
+ {
+ if (!first) m_t << " | "; else first=FALSE;
+ if (type->kind()==DocNode::Kind_Word)
+ {
+ visit((DocWord*)type);
+ }
+ else if (type->kind()==DocNode::Kind_LinkedWord)
+ {
+ visit((DocLinkedWord*)type);
+ }
+ }
+ m_t << " </entry>";
+ }
+
QListIterator<DocNode> li(pl->parameters());
DocNode *param;
- m_t << " <row>" << endl;
if (!li.toFirst())
{
m_t << " <entry></entry>" << endl;
@@ -1116,6 +1441,7 @@ void DocbookDocVisitor::visitPre(DocParamList *pl)
void DocbookDocVisitor::visitPost(DocParamList *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</entry>" << endl;
m_t << " </row>" << endl;
@@ -1123,10 +1449,11 @@ void DocbookDocVisitor::visitPost(DocParamList *)
void DocbookDocVisitor::visitPre(DocXRefItem *x)
{
+DB_VIS_C
if (m_hide) return;
if (x->title().isEmpty()) return;
- m_t << "<para><link linkend=\"";
- m_t << x->file() << "_1" << x->anchor();
+ m_t << "<para><link linkend=\"_";
+ m_t << stripPath(x->file()) << "_1" << x->anchor();
m_t << "\">";
filter(x->title());
m_t << "</link>";
@@ -1135,6 +1462,7 @@ void DocbookDocVisitor::visitPre(DocXRefItem *x)
void DocbookDocVisitor::visitPost(DocXRefItem *x)
{
+DB_VIS_C
if (m_hide) return;
if (x->title().isEmpty()) return;
m_t << "</para>";
@@ -1142,12 +1470,14 @@ void DocbookDocVisitor::visitPost(DocXRefItem *x)
void DocbookDocVisitor::visitPre(DocInternalRef *ref)
{
+DB_VIS_C
if (m_hide) return;
startLink(ref->file(),ref->anchor());
}
void DocbookDocVisitor::visitPost(DocInternalRef *)
{
+DB_VIS_C
if (m_hide) return;
endLink();
m_t << " ";
@@ -1155,6 +1485,7 @@ void DocbookDocVisitor::visitPost(DocInternalRef *)
void DocbookDocVisitor::visitPre(DocCopy *)
{
+DB_VIS_C
if (m_hide) return;
// TODO: to be implemented
}
@@ -1162,6 +1493,7 @@ void DocbookDocVisitor::visitPre(DocCopy *)
void DocbookDocVisitor::visitPost(DocCopy *)
{
+DB_VIS_C
if (m_hide) return;
// TODO: to be implemented
}
@@ -1169,72 +1501,89 @@ void DocbookDocVisitor::visitPost(DocCopy *)
void DocbookDocVisitor::visitPre(DocText *)
{
+DB_VIS_C
// TODO: to be implemented
}
void DocbookDocVisitor::visitPost(DocText *)
{
+DB_VIS_C
// TODO: to be implemented
}
void DocbookDocVisitor::visitPre(DocHtmlBlockQuote *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "<blockquote>";
}
void DocbookDocVisitor::visitPost(DocHtmlBlockQuote *)
{
+DB_VIS_C
if (m_hide) return;
m_t << "</blockquote>";
}
void DocbookDocVisitor::visitPre(DocVhdlFlow *)
{
+DB_VIS_C
// TODO: to be implemented
}
void DocbookDocVisitor::visitPost(DocVhdlFlow *)
{
+DB_VIS_C
// TODO: to be implemented
}
void DocbookDocVisitor::visitPre(DocParBlock *)
{
+DB_VIS_C
}
void DocbookDocVisitor::visitPost(DocParBlock *)
{
+DB_VIS_C
}
void DocbookDocVisitor::filter(const char *str)
{
- m_t << convertToXML(str);
+DB_VIS_C
+ m_t << convertToDocBook(str);
}
void DocbookDocVisitor::startLink(const QCString &file,const QCString &anchor)
{
- m_t << "<link linkend=\"" << file;
- if (!anchor.isEmpty()) m_t << "_1" << anchor;
+DB_VIS_C
+ m_t << "<link linkend=\"_" << stripPath(file);
+ if (!anchor.isEmpty())
+ {
+ if (file) m_t << "_1";
+ m_t << anchor;
+ }
m_t << "\">";
}
void DocbookDocVisitor::endLink()
{
+DB_VIS_C
m_t << "</link>";
}
void DocbookDocVisitor::pushEnabled()
{
+DB_VIS_C
m_enabled.push(new bool(m_hide));
}
void DocbookDocVisitor::popEnabled()
{
+DB_VIS_C
bool *v=m_enabled.pop();
ASSERT(v!=0);
m_hide = *v;
@@ -1243,6 +1592,7 @@ void DocbookDocVisitor::popEnabled()
void DocbookDocVisitor::writeMscFile(const QCString &baseName, DocVerbatim *s)
{
+DB_VIS_C
QCString shortName = baseName;
int i;
if ((i=shortName.findRev('/'))!=-1)
@@ -1251,13 +1601,14 @@ void DocbookDocVisitor::writeMscFile(const QCString &baseName, DocVerbatim *s)
}
QCString outDir = Config_getString(DOCBOOK_OUTPUT);
writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_BITMAP);
- visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+ visitPreStart(m_t, s->hasCaption(), s->relPath() + shortName + ".png", s->width(),s->height());
visitCaption(this, s->children());
visitPostEnd(m_t, s->hasCaption());
}
void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName, DocVerbatim *s)
{
+DB_VIS_C
QCString shortName = baseName;
int i;
if ((i=shortName.findRev('/'))!=-1)
@@ -1266,7 +1617,7 @@ void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName, DocVerbatim
}
QCString outDir = Config_getString(DOCBOOK_OUTPUT);
generatePlantUMLOutput(baseName,outDir,PUML_BITMAP);
- visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+ visitPreStart(m_t, s->hasCaption(), s->relPath() + shortName + ".png", s->width(),s->height());
visitCaption(this, s->children());
visitPostEnd(m_t, s->hasCaption());
}
@@ -1277,6 +1628,7 @@ void DocbookDocVisitor::startMscFile(const QCString &fileName,
bool hasCaption
)
{
+DB_VIS_C
QCString baseName=fileName;
int i;
if ((i=baseName.findRev('/'))!=-1)
@@ -1296,6 +1648,7 @@ void DocbookDocVisitor::startMscFile(const QCString &fileName,
void DocbookDocVisitor::endMscFile(bool hasCaption)
{
+DB_VIS_C
if (m_hide) return;
visitPostEnd(m_t, hasCaption);
m_t << "</para>" << endl;
@@ -1303,6 +1656,7 @@ void DocbookDocVisitor::endMscFile(bool hasCaption)
void DocbookDocVisitor::writeDiaFile(const QCString &baseName, DocVerbatim *s)
{
+DB_VIS_C
QCString shortName = baseName;
int i;
if ((i=shortName.findRev('/'))!=-1)
@@ -1322,6 +1676,7 @@ void DocbookDocVisitor::startDiaFile(const QCString &fileName,
bool hasCaption
)
{
+DB_VIS_C
QCString baseName=fileName;
int i;
if ((i=baseName.findRev('/'))!=-1)
@@ -1341,6 +1696,7 @@ void DocbookDocVisitor::startDiaFile(const QCString &fileName,
void DocbookDocVisitor::endDiaFile(bool hasCaption)
{
+DB_VIS_C
if (m_hide) return;
visitPostEnd(m_t, hasCaption);
m_t << "</para>" << endl;
@@ -1348,6 +1704,7 @@ void DocbookDocVisitor::endDiaFile(bool hasCaption)
void DocbookDocVisitor::writeDotFile(const QCString &baseName, DocVerbatim *s)
{
+DB_VIS_C
QCString shortName = baseName;
int i;
if ((i=shortName.findRev('/'))!=-1)
@@ -1356,7 +1713,7 @@ void DocbookDocVisitor::writeDotFile(const QCString &baseName, DocVerbatim *s)
}
QCString outDir = Config_getString(DOCBOOK_OUTPUT);
writeDotGraphFromFile(baseName+".dot",outDir,shortName,GOF_BITMAP);
- visitPreStart(m_t, s->hasCaption(), baseName + ".dot", s->width(),s->height());
+ visitPreStart(m_t, s->hasCaption(), s->relPath() + shortName + "." + getDotImageExtension(), s->width(),s->height());
visitCaption(this, s->children());
visitPostEnd(m_t, s->hasCaption());
}
@@ -1367,6 +1724,7 @@ void DocbookDocVisitor::startDotFile(const QCString &fileName,
bool hasCaption
)
{
+DB_VIS_C
QCString baseName=fileName;
int i;
if ((i=baseName.findRev('/'))!=-1)
@@ -1387,6 +1745,7 @@ void DocbookDocVisitor::startDotFile(const QCString &fileName,
void DocbookDocVisitor::endDotFile(bool hasCaption)
{
+DB_VIS_C
if (m_hide) return;
m_t << endl;
visitPostEnd(m_t, hasCaption);