/******************************************************************************
*
-*
-*
-* Copyright (C) 1997-2015 by Dimitri van Heesch.
+* Copyright (C) 1997-2022 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 DOCBOOKGEN_H
#define DOCBOOKGEN_H
-#include <iostream>
+#include <memory>
+#include <array>
#include "config.h"
#include "outputgen.h"
-class DocbookCodeGenerator : public CodeOutputInterface
+#if 0
+// define for cases that have been implemented with an empty body
+#define DB_GEN_EMPTY m_t << "<!-- DBG_GEN_head_check " << __LINE__ << " -->\n";
+#else
+#define DB_GEN_EMPTY
+#endif
+
+#if 0
+// Generic debug statements
+#define DB_GEN_H DB_GEN_H1(m_t)
+#define DB_GEN_H1(x) x << "<!-- DBG_GEN_head " << __LINE__ << " -->\n";
+#define DB_GEN_H2(y) DB_GEN_H2a(m_t,y)
+#define DB_GEN_H2a(x,y) x << "<!-- DBG_GEN_head " << __LINE__ << " " << y << " -->\n";
+// define for cases that have NOT yet been implemented / considered
+#define DB_GEN_NEW fprintf(stderr,"DBG_GEN_head %d\n",__LINE__); DB_GEN_H
+#else
+#define DB_GEN_H
+#define DB_GEN_H1(x)
+#define DB_GEN_H2(y)
+#define DB_GEN_H2a(x,y)
+#define DB_GEN_NEW
+#endif
+
+class OutputCodeList;
+
+class DocbookCodeGenerator
{
public:
- DocbookCodeGenerator(TextStream &t);
- void setRelativePath(const QCString &path) { m_relPath = path; }
- void setSourceFileName(const QCString &sourceFileName) { m_sourceFileName = sourceFileName; }
- QCString sourceFileName() { return m_sourceFileName; }
+ DocbookCodeGenerator(TextStream *t);
+ void setTextStream(TextStream *t) { m_t = t; }
+
+ OutputType type() const { return OutputType::Docbook; }
void codify(const QCString &text);
void writeCodeLink(CodeSymbolType type,
const QCString &ref,const QCString &file,
const QCString &anchor,const QCString &name,
const QCString &tooltip);
- void writeCodeLinkLine(CodeSymbolType type,
- const QCString &ref,const QCString &file,
- const QCString &anchor,const QCString &name,
- const QCString &tooltip, bool);
void writeTooltip(const QCString &, const DocLinkInfo &, const QCString &,
const QCString &, const SourceLinkInfo &, const SourceLinkInfo &
);
void writeCodeAnchor(const QCString &);
void writeLineNumber(const QCString &extRef,const QCString &compId,
const QCString &anchorId,int l, bool writeLineAnchor);
- void finish();
void startCodeFragment(const QCString &style);
void endCodeFragment(const QCString &style);
+ void startFold(int,const QCString &,const QCString &) {}
+ void endFold() {}
+
+ void setRelativePath(const QCString &path) { m_relPath = path; }
+ void setSourceFileName(const QCString &sourceFileName) { m_sourceFileName = sourceFileName; }
+ QCString sourceFileName() { return m_sourceFileName; }
+ void finish();
private:
- TextStream &m_t;
- QCString m_refId;
- QCString m_external;
- int m_lineNumber = -1;
- int m_col = 0;
- bool m_insideCodeLine = false;
- bool m_insideSpecialHL = false;
- QCString m_relPath;
- QCString m_sourceFileName;
+ void writeCodeLinkLine(CodeSymbolType type,
+ const QCString &ref,const QCString &file,
+ const QCString &anchor,const QCString &name,
+ const QCString &tooltip, bool);
+ TextStream *m_t;
+ QCString m_refId;
+ QCString m_external;
+ int m_lineNumber = -1;
+ int m_col = 0;
+ bool m_insideCodeLine = false;
+ bool m_insideSpecialHL = false;
+ QCString m_relPath;
+ QCString m_sourceFileName;
};
-
-#if 0
-// define for cases that have been implemented with an empty body
-#define DB_GEN_EMPTY m_t << "<!-- DBG_GEN_head_check " << __LINE__ << " -->\n";
-#else
-#define DB_GEN_EMPTY
-#endif
-
-#if 0
-// Generic debug statements
-#define DB_GEN_H DB_GEN_H1(m_t)
-#define DB_GEN_H1(x) x << "<!-- DBG_GEN_head " << __LINE__ << " -->\n";
-#define DB_GEN_H2(y) DB_GEN_H2a(m_t,y)
-#define DB_GEN_H2a(x,y) x << "<!-- DBG_GEN_head " << __LINE__ << " " << y << " -->\n";
-// define for cases that have NOT yet been implemented / considered
-#define DB_GEN_NEW fprintf(stderr,"DBG_GEN_head %d\n",__LINE__); DB_GEN_H
-#else
-#define DB_GEN_H
-#define DB_GEN_H1(x)
-#define DB_GEN_H2(y)
-#define DB_GEN_H2a(x,y)
-#define DB_GEN_NEW
-#endif
-
class DocbookGenerator : public OutputGenerator
{
public:
DocbookGenerator();
- DocbookGenerator(const DocbookGenerator &o);
- DocbookGenerator &operator=(const DocbookGenerator &o);
- virtual ~DocbookGenerator();
- virtual std::unique_ptr<OutputGenerator> clone() const;
+ DocbookGenerator(const DocbookGenerator &);
+ DocbookGenerator &operator=(const DocbookGenerator &);
+ DocbookGenerator(DocbookGenerator &&);
+ DocbookGenerator &operator=(DocbookGenerator &&) = delete;
+ ~DocbookGenerator();
static void init();
void cleanup();
- OutputType type() const { return Docbook; }
-
- // --- CodeOutputInterface
- void codify(const QCString &text)
- { m_codeGen.codify(text); }
- void writeCodeLink(CodeSymbolType type,
- const QCString &ref, const QCString &file,
- const QCString &anchor,const QCString &name,
- const QCString &tooltip)
- { m_codeGen.writeCodeLink(type,ref,file,anchor,name,tooltip); }
- void writeLineNumber(const QCString &ref,const QCString &file,const QCString &anchor,int lineNumber, bool writeLineAnchor)
- { m_codeGen.writeLineNumber(ref,file,anchor,lineNumber,writeLineAnchor); }
- void writeTooltip(const QCString &id, const DocLinkInfo &docInfo, const QCString &decl,
- const QCString &desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo
- )
- { m_codeGen.writeTooltip(id,docInfo,decl,desc,defInfo,declInfo); }
- void startCodeLine(bool hasLineNumbers)
- { m_codeGen.startCodeLine(hasLineNumbers); }
- void endCodeLine()
- { m_codeGen.endCodeLine(); }
- void startFontClass(const QCString &s)
- { m_codeGen.startFontClass(s); }
- void endFontClass()
- { m_codeGen.endFontClass(); }
- void writeCodeAnchor(const QCString &anchor)
- { m_codeGen.writeCodeAnchor(anchor); }
- void startCodeFragment(const QCString &style)
- { m_codeGen.startCodeFragment(style); }
- void endCodeFragment(const QCString &style)
- { m_codeGen.endCodeFragment(style); }
- // ---------------------------
+ OutputType type() const { return OutputType::Docbook; }
void writeDoc(const IDocNodeAST *node,const Definition *ctx,const MemberDef *md,int id);
// structural output interface
///////////////////////////////////////////////////////////////
void startFile(const QCString &name,const QCString &manName,
- const QCString &title,int id);
+ const QCString &title,int id,int hierarchyLevel);
void writeSearchInfo(){DB_GEN_EMPTY};
void writeFooter(const QCString &){DB_GEN_NEW};
void endFile();
- void startIndexSection(IndexSections);
- void endIndexSection(IndexSections);
+ void startIndexSection(IndexSection);
+ void endIndexSection(IndexSection);
void writePageLink(const QCString &,bool);
void startProjectNumber(){DB_GEN_NEW};
void endProjectNumber(){DB_GEN_NEW};
void startParagraph(const QCString &);
void endParagraph();
void writeObjectLink(const QCString &,const QCString &,const QCString &,const QCString &);
- void startHtmlLink(const QCString &){DB_GEN_NEW};
- void endHtmlLink(){DB_GEN_NEW};
void startBold();
void endBold();
void startTypewriter();
void startEmphasis(){DB_GEN_NEW};
void endEmphasis(){DB_GEN_NEW};
void writeRuler();
- void startDescription(){DB_GEN_NEW};
- void endDescription(){DB_GEN_NEW};
- void startDescItem(){DB_GEN_NEW};
void startDescForItem(){DB_GEN_EMPTY};
void endDescForItem(){DB_GEN_EMPTY};
- void endDescItem(){DB_GEN_NEW};
void startCenter(){DB_GEN_NEW};
void endCenter(){DB_GEN_NEW};
void startSmall(){DB_GEN_NEW};
void endSmall(){DB_GEN_NEW};
void startExamples();
void endExamples();
- void startParamList(BaseOutputDocInterface::ParamListTypes,const QCString &){DB_GEN_NEW};
- void endParamList(){DB_GEN_NEW};
- void startTitle(){DB_GEN_NEW};
- void endTitle(){DB_GEN_NEW};
void writeAnchor(const QCString &,const QCString &){DB_GEN_EMPTY};
void startSection(const QCString &,const QCString &,SectionType);
void endSection(const QCString &,SectionType);
void endTextLink(){DB_GEN_NEW};
void startPageRef(){DB_GEN_NEW};
void endPageRef(const QCString &,const QCString &){DB_GEN_NEW};
- void startSubsection(){DB_GEN_NEW};
- void endSubsection(){DB_GEN_NEW};
- void startSubsubsection();
- void endSubsubsection();
-
void startGroupHeader(int);
void endGroupHeader(int);
void endInlineHeader(){DB_GEN_NEW};
void startAnonTypeScope(int){DB_GEN_EMPTY};
void endAnonTypeScope(int){DB_GEN_EMPTY};
- void startMemberItem(const QCString &,int,const QCString &);
- void endMemberItem();
+ void startMemberItem(const QCString &,MemberItemType,const QCString &);
+ void endMemberItem(MemberItemType);
void startMemberTemplateParams();
void endMemberTemplateParams(const QCString &,const QCString &);
- void startCompoundTemplateParams() { startSubsubsection(); }
- void endCompoundTemplateParams() { endSubsubsection(); }
+ void startCompoundTemplateParams();
+ void endCompoundTemplateParams();
void startMemberGroupHeader(bool);
void endMemberGroupHeader();
void startMemberGroupDocs(){DB_GEN_EMPTY};
void startMemberGroup();
void endMemberGroup(bool);
void insertMemberAlign(bool){DB_GEN_EMPTY};
- void insertMemberAlignLeft(int,bool){DB_GEN_EMPTY};
+ void insertMemberAlignLeft(MemberItemType,bool){DB_GEN_EMPTY};
void startMemberDoc(const QCString &,const QCString &,
const QCString &,const QCString &,int,int,bool);
void endMemberDoc(bool);
void writeLatexSpacing(){DB_GEN_EMPTY}
void writeStartAnnoItem(const QCString &,const QCString &,
const QCString &,const QCString &){DB_GEN_NEW};
- void writeEndAnnoItem(const QCString &){DB_GEN_NEW};
void startMemberDescription(const QCString &,const QCString &,bool){DB_GEN_EMPTY};
void endMemberDescription(){DB_GEN_EMPTY};
void startMemberDeclaration(){DB_GEN_EMPTY};
void endMemberDeclaration(const QCString &,const QCString &){DB_GEN_EMPTY};
void writeInheritedSectionTitle(const QCString &,const QCString &,
const QCString &,const QCString &,
- const QCString &,const QCString &){DB_GEN_NEW};
+ const QCString &,const QCString &);
void startIndent(){DB_GEN_EMPTY};
void endIndent(){DB_GEN_EMPTY};
void writeSynopsis(){DB_GEN_EMPTY};
void writeSplitBar(const QCString &){DB_GEN_EMPTY};
void writeNavigationPath(const QCString &){DB_GEN_NEW};
void writeLogo(){DB_GEN_NEW};
- void writeQuickLinks(bool,HighlightedItem,const QCString &){DB_GEN_EMPTY};
+ void writeQuickLinks(bool,HighlightedItem,const QCString &,bool){DB_GEN_EMPTY};
void writeSummaryLink(const QCString &,const QCString &,const QCString &,bool){DB_GEN_EMPTY};
void startContents(){DB_GEN_EMPTY};
void endContents(){DB_GEN_EMPTY};
void writeLabel(const QCString &,bool);
void endLabels();
+ void writeLocalToc(const SectionRefs &sr,const LocalToc <);
+
void setCurrentDoc(const Definition *,const QCString &,bool) {DB_GEN_EMPTY}
void addWord(const QCString &,bool) {DB_GEN_EMPTY}
+ void addCodeGen(OutputCodeList &list);
private:
void openSection(const QCString &attr=QCString());
void closeSection();
void closeAllSections();
QCString relPath;
- DocbookCodeGenerator m_codeGen;
+ std::unique_ptr<OutputCodeList> m_codeList;
+ DocbookCodeGenerator *m_codeGen = nullptr;
bool m_denseText = false;
bool m_inGroup = false;
int m_levelListItem = 0;
- bool m_inListItem[20] = { false, };
- bool m_inSimpleSect[20] = { false, };
+ std::array<bool,20> m_inListItem = { false, };
+ std::array<bool,20> m_inSimpleSect = { false, };
bool m_descTable = false;
bool m_simpleTable = false;
int m_inLevel = -1;
bool m_firstMember = false;
int m_openSectionCount = 0;
+ QCString m_pageLinks;
};
+QCString convertToDocBook(const QCString &s, const bool retainNewline = false);
+
+
#endif