/******************************************************************************
*
-*
-*
-* Copyright (C) 1997-2014 by Dimitri van Heesch.
+* Copyright (C) 1997-2020 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
*
*/
-#ifndef _DOCBOOKDOCVISITOR_H
-#define _DOCBOOKDOCVISITOR_H
+#ifndef DOCBOOKDOCVISITOR_H
+#define DOCBOOKDOCVISITOR_H
+
+#include <iostream>
+#include "containers.h"
#include "docvisitor.h"
-#include <qstack.h>
-#include <qcstring.h>
+#include "docnode.h"
+#include "qcstring.h"
-class FTextStream;
-class CodeOutputInterface;
+class OutputCodeList;
class QCString;
+class TextStream;
/*! @brief Concrete visitor implementation for Docbook output. */
class DocbookDocVisitor : public DocVisitor
{
public:
- DocbookDocVisitor(FTextStream &t,CodeOutputInterface &ci);
+ DocbookDocVisitor(TextStream &t,OutputCodeList &ci,const QCString &langExt);
+ ~DocbookDocVisitor();
+ //-----------------------------------------
+ template<class T>
+ void visitChildren(const T &t)
+ {
+ for (const auto &child : t.children())
+ {
+ std::visit(*this, child);
+ }
+ }
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
- void visit(DocWord *);
- void visit(DocLinkedWord *);
- void visit(DocWhiteSpace *);
- void visit(DocSymbol *);
- void visit(DocURL *);
- void visit(DocLineBreak *);
- void visit(DocHorRuler *);
- void visit(DocStyleChange *);
- void visit(DocVerbatim *);
- void visit(DocAnchor *);
- void visit(DocInclude *);
- void visit(DocIncOperator *);
- void visit(DocFormula *);
- void visit(DocIndexEntry *);
- void visit(DocSimpleSectSep *);
- void visit(DocCite *);
+ void operator()(const DocWord &);
+ void operator()(const DocLinkedWord &);
+ void operator()(const DocWhiteSpace &);
+ void operator()(const DocSymbol &);
+ void operator()(const DocEmoji &);
+ void operator()(const DocURL &);
+ void operator()(const DocLineBreak &);
+ void operator()(const DocHorRuler &);
+ void operator()(const DocStyleChange &);
+ void operator()(const DocVerbatim &);
+ void operator()(const DocAnchor &);
+ void operator()(const DocInclude &);
+ void operator()(const DocIncOperator &);
+ void operator()(const DocFormula &);
+ void operator()(const DocIndexEntry &);
+ void operator()(const DocSimpleSectSep &);
+ void operator()(const DocCite &);
+ void operator()(const DocSeparator &);
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
- void visitPre(DocAutoList *);
- void visitPost(DocAutoList *);
- void visitPre(DocAutoListItem *);
- void visitPost(DocAutoListItem *);
- void visitPre(DocPara *) ;
- void visitPost(DocPara *);
- void visitPre(DocRoot *);
- void visitPost(DocRoot *);
- void visitPre(DocSimpleSect *);
- void visitPost(DocSimpleSect *);
- void visitPre(DocTitle *);
- void visitPost(DocTitle *);
- void visitPre(DocSimpleList *);
- void visitPost(DocSimpleList *);
- void visitPre(DocSimpleListItem *);
- void visitPost(DocSimpleListItem *);
- void visitPre(DocSection *);
- void visitPost(DocSection *);
- void visitPre(DocHtmlList *);
- void visitPost(DocHtmlList *) ;
- void visitPre(DocHtmlListItem *);
- void visitPost(DocHtmlListItem *);
- //void visitPre(DocHtmlPre *);
- //void visitPost(DocHtmlPre *);
- void visitPre(DocHtmlDescList *);
- void visitPost(DocHtmlDescList *);
- void visitPre(DocHtmlDescTitle *);
- void visitPost(DocHtmlDescTitle *);
- void visitPre(DocHtmlDescData *);
- void visitPost(DocHtmlDescData *);
- void visitPre(DocHtmlTable *);
- void visitPost(DocHtmlTable *);
- void visitPre(DocHtmlRow *);
- void visitPost(DocHtmlRow *) ;
- void visitPre(DocHtmlCell *);
- void visitPost(DocHtmlCell *);
- void visitPre(DocHtmlCaption *);
- void visitPost(DocHtmlCaption *);
- void visitPre(DocInternal *);
- void visitPost(DocInternal *);
- void visitPre(DocHRef *);
- void visitPost(DocHRef *);
- void visitPre(DocHtmlHeader *);
- void visitPost(DocHtmlHeader *);
- void visitPre(DocImage *);
- void visitPost(DocImage *);
- void visitPre(DocDotFile *);
- void visitPost(DocDotFile *);
- void visitPre(DocMscFile *);
- void visitPost(DocMscFile *);
- void visitPre(DocDiaFile *);
- void visitPost(DocDiaFile *);
- void visitPre(DocLink *);
- void visitPost(DocLink *);
- void visitPre(DocRef *);
- void visitPost(DocRef *);
- void visitPre(DocSecRefItem *);
- void visitPost(DocSecRefItem *);
- void visitPre(DocSecRefList *);
- void visitPost(DocSecRefList *);
- //void visitPre(DocLanguage *);
- //void visitPost(DocLanguage *);
- void visitPre(DocParamSect *);
- void visitPost(DocParamSect *);
- void visitPre(DocParamList *);
- void visitPost(DocParamList *);
- void visitPre(DocXRefItem *);
- void visitPost(DocXRefItem *);
- void visitPre(DocInternalRef *);
- void visitPost(DocInternalRef *);
- void visitPre(DocCopy *);
- void visitPost(DocCopy *);
- void visitPre(DocText *);
- void visitPost(DocText *);
- void visitPre(DocHtmlBlockQuote *);
- void visitPost(DocHtmlBlockQuote *);
- void visitPre(DocVhdlFlow *);
- void visitPost(DocVhdlFlow *);
- void visitPre(DocParBlock *);
- void visitPost(DocParBlock *);
+ void operator()(const DocAutoList &);
+ void operator()(const DocAutoListItem &);
+ void operator()(const DocPara &) ;
+ void operator()(const DocRoot &);
+ void operator()(const DocSimpleSect &);
+ void operator()(const DocTitle &);
+ void operator()(const DocSimpleList &);
+ void operator()(const DocSimpleListItem &);
+ void operator()(const DocSection &);
+ void operator()(const DocHtmlList &);
+ void operator()(const DocHtmlListItem &);
+ void operator()(const DocHtmlDescList &);
+ void operator()(const DocHtmlDescTitle &);
+ void operator()(const DocHtmlDescData &);
+ void operator()(const DocHtmlTable &);
+ void operator()(const DocHtmlRow &);
+ void operator()(const DocHtmlCell &);
+ void operator()(const DocHtmlCaption &);
+ void operator()(const DocInternal &);
+ void operator()(const DocHRef &);
+ void operator()(const DocHtmlSummary &);
+ void operator()(const DocHtmlDetails &);
+ void operator()(const DocHtmlHeader &);
+ void operator()(const DocImage &);
+ void operator()(const DocDotFile &);
+ void operator()(const DocMscFile &);
+ void operator()(const DocDiaFile &);
+ void operator()(const DocLink &);
+ void operator()(const DocRef &);
+ void operator()(const DocSecRefItem &);
+ void operator()(const DocSecRefList &);
+ void operator()(const DocParamSect &);
+ void operator()(const DocParamList &);
+ void operator()(const DocXRefItem &);
+ void operator()(const DocInternalRef &);
+ void operator()(const DocText &);
+ void operator()(const DocHtmlBlockQuote &);
+ void operator()(const DocVhdlFlow &);
+ void operator()(const DocParBlock &);
private:
//--------------------------------------
// helper functions
//--------------------------------------
- void filter(const char *str);
+ void filter(const QCString &str, const bool retainNewLine = false);
void startLink(const QCString &file,
const QCString &anchor);
void endLink();
- void pushEnabled();
- void popEnabled();
void startMscFile(const QCString &fileName,const QCString &width,
- const QCString &height, bool hasCaption);
+ const QCString &height, bool hasCaption,const DocNodeList &children,
+ const QCString &srcFile, int srcLine);
void endMscFile(bool hasCaption);
- void writeMscFile(const QCString &fileName);
+ void writeMscFile(const QCString &fileName, const DocVerbatim &s);
void startDiaFile(const QCString &fileName,const QCString &width,
- const QCString &height, bool hasCaption);
+ const QCString &height, bool hasCaption,const DocNodeList &children,
+ const QCString &srcFile, int srcLine);
void endDiaFile(bool hasCaption);
- void writeDiaFile(const QCString &fileName);
+ void writeDiaFile(const QCString &fileName, const DocVerbatim &s);
void startDotFile(const QCString &fileName,const QCString &width,
- const QCString &height, bool hasCaption);
+ const QCString &height, bool hasCaption,const DocNodeList &children,
+ const QCString &srcFile, int srcLine);
void endDotFile(bool hasCaption);
- void writeDotFile(const QCString &fileName);
- void writePlantUMLFile(const QCString &fileName);
+ void writeDotFile(const QCString &fileName, const DocVerbatim &s);
+ void writePlantUMLFile(const QCString &fileName, const DocVerbatim &s);
+ void visitPreStart(TextStream &t,
+ const DocNodeList &children,
+ bool hasCaption,
+ const QCString &name,
+ const QCString &width,
+ const QCString &height,
+ bool inlineImage = FALSE);
+ void visitPostEnd(TextStream &t, bool hasCaption, bool inlineImage = FALSE);
+ void visitCaption(const DocNodeList &children);
//--------------------------------------
// state variables
//--------------------------------------
- FTextStream &m_t;
- CodeOutputInterface &m_ci;
- bool m_insidePre;
- bool m_hide;
- QStack<bool> m_enabled;
+ TextStream &m_t;
+ OutputCodeList &m_ci;
+ bool m_insidePre = false;
+ bool m_hide = false;
+ BoolStack m_enabled;
QCString m_langExt;
+ int m_colCnt = 0;
+ BoolStack m_bodySet; // it is possible to have tables without a header, needs to be an array as we can have tables in tables
};
#endif