Skip to content

Commit

Permalink
Refactoring: move from Dispatcher back to inheritance for OutputCodeIntf
Browse files Browse the repository at this point in the history
  • Loading branch information
doxygen committed Apr 28, 2024
1 parent 3730405 commit d50c74e
Show file tree
Hide file tree
Showing 16 changed files with 251 additions and 261 deletions.
4 changes: 2 additions & 2 deletions src/codefragment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -386,11 +386,11 @@ void CodeFragmentManager::parseCodeFragment(OutputCodeList & codeOutList,
AUTO_TRACE_ADD("replay(start={},end={}) fileContentsTrimLeft.empty()={}",startLine,endLine,codeFragment->fileContentsTrimLeft.isEmpty());
if (!trimLeft || codeFragment->fileContentsTrimLeft.isEmpty()) // replay the normal version
{
codeFragment->recorderCodeList.get<OutputCodeRecorder>()->replay(codeOutList,startLine+1,endLine,showLineNumbers);
codeFragment->recorderCodeList.get<OutputCodeRecorder>(OutputType::Recorder)->replay(codeOutList,startLine+1,endLine,showLineNumbers);
}
else // replay the trimmed version
{
codeFragment->recorderCodeListTrimLeft.get<OutputCodeRecorder>()->replay(codeOutList,startLine+1,endLine,showLineNumbers);
codeFragment->recorderCodeListTrimLeft.get<OutputCodeRecorder>(OutputType::Recorder)->replay(codeOutList,startLine+1,endLine,showLineNumbers);
}
}
else
Expand Down
31 changes: 16 additions & 15 deletions src/devnullgen.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,29 +17,30 @@
#include "outputgen.h"

/** Class implementing OutputCodeIntf by throwing away everything. */
class DevNullCodeGenerator
class DevNullCodeGenerator : public OutputCodeIntf
{
public:
OutputType type() const { return OutputType::Null; }
void codify(const QCString &) {}
OutputType type() const override { return OutputType::Null; }
std::unique_ptr<OutputCodeIntf> clone() override { return std::make_unique<DevNullCodeGenerator>(*this); }
void codify(const QCString &) override {}
void writeCodeLink(CodeSymbolType,
const QCString &,const QCString &,
const QCString &,const QCString &,
const QCString &) {}
const QCString &) override {}
void writeTooltip(const QCString &, const DocLinkInfo &, const QCString &,
const QCString &, const SourceLinkInfo &, const SourceLinkInfo &
) {}
) override {}
void writeLineNumber(const QCString &,const QCString &,
const QCString &,int,bool) {}
void startCodeLine(int) {}
void endCodeLine() {}
void startFontClass(const QCString &) {}
void endFontClass() {}
void writeCodeAnchor(const QCString &) {}
void startCodeFragment(const QCString &) {}
void endCodeFragment(const QCString &) {}
void startFold(int,const QCString &,const QCString &) {}
void endFold() {}
const QCString &,int,bool) override {}
void startCodeLine(int) override {}
void endCodeLine() override {}
void startFontClass(const QCString &) override {}
void endFontClass() override {}
void writeCodeAnchor(const QCString &) override {}
void startCodeFragment(const QCString &) override {}
void endCodeFragment(const QCString &) override {}
void startFold(int,const QCString &,const QCString &) override {}
void endFold() override {}
};

#endif // DEVNULLGEN_H
12 changes: 6 additions & 6 deletions src/docbookgen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ DB_GEN_C
DocbookGenerator::DocbookGenerator(const DocbookGenerator &og) : OutputGenerator(og.m_dir)
{
m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
m_codeGen = m_codeList->get<DocbookCodeGenerator>();
m_codeGen = m_codeList->get<DocbookCodeGenerator>(OutputType::Docbook);
m_codeGen->setTextStream(&m_t);
m_denseText = og.m_denseText;
m_inGroup = og.m_inGroup;
Expand All @@ -305,9 +305,9 @@ DocbookGenerator &DocbookGenerator::operator=(const DocbookGenerator &og)
{
if (this!=&og)
{
m_dir = og.m_dir;
m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
m_codeGen = m_codeList->get<DocbookCodeGenerator>();
m_dir = og.m_dir;
m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
m_codeGen = m_codeList->get<DocbookCodeGenerator>(OutputType::Docbook);
m_codeGen->setTextStream(&m_t);
m_denseText = og.m_denseText;
m_inGroup = og.m_inGroup;
Expand All @@ -327,7 +327,7 @@ DocbookGenerator::DocbookGenerator(DocbookGenerator &&og)
: OutputGenerator(std::move(og))
{
m_codeList = std::exchange(og.m_codeList,std::unique_ptr<OutputCodeList>());
m_codeGen = m_codeList->get<DocbookCodeGenerator>();
m_codeGen = m_codeList->get<DocbookCodeGenerator>(OutputType::Docbook);
m_codeGen->setTextStream(&m_t);
m_denseText = std::exchange(og.m_denseText,false);
m_inGroup = std::exchange(og.m_inGroup,false);
Expand All @@ -347,7 +347,7 @@ DocbookGenerator::~DocbookGenerator()

void DocbookGenerator::addCodeGen(OutputCodeList &list)
{
list.add(OutputCodeList::OutputCodeVariant(DocbookCodeGeneratorDefer(m_codeGen)));
list.add<DocbookCodeGeneratorDefer>(m_codeGen);
}

void DocbookGenerator::init()
Expand Down
32 changes: 16 additions & 16 deletions src/docbookgen.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,33 +44,33 @@

class OutputCodeList;

class DocbookCodeGenerator
class DocbookCodeGenerator : public OutputCodeIntf
{
public:
DocbookCodeGenerator(TextStream *t);
void setTextStream(TextStream *t) { m_t = t; }

OutputType type() const { return OutputType::Docbook; }

void codify(const QCString &text);
OutputType type() const override { return OutputType::Docbook; }
std::unique_ptr<OutputCodeIntf> clone() override { return std::make_unique<DocbookCodeGenerator>(m_t); }
void codify(const QCString &text) override;
void writeCodeLink(CodeSymbolType type,
const QCString &ref,const QCString &file,
const QCString &anchor,const QCString &name,
const QCString &tooltip);
const QCString &tooltip) override;
void writeTooltip(const QCString &, const DocLinkInfo &, const QCString &,
const QCString &, const SourceLinkInfo &, const SourceLinkInfo &
);
void startCodeLine(int);
void endCodeLine();
void startFontClass(const QCString &colorClass);
void endFontClass();
void writeCodeAnchor(const QCString &);
) override;
void startCodeLine(int) override;
void endCodeLine() override;
void startFontClass(const QCString &colorClass) override;
void endFontClass() override;
void writeCodeAnchor(const QCString &) override;
void writeLineNumber(const QCString &extRef,const QCString &compId,
const QCString &anchorId,int l, bool writeLineAnchor);
void startCodeFragment(const QCString &style);
void endCodeFragment(const QCString &style);
void startFold(int,const QCString &,const QCString &) {}
void endFold() {}
const QCString &anchorId,int l, bool writeLineAnchor) override;
void startCodeFragment(const QCString &style) override;
void endCodeFragment(const QCString &style) override;
void startFold(int,const QCString &,const QCString &) override {}
void endFold() override {}

void setRelativePath(const QCString &path) { m_relPath = path; }
void setSourceFileName(const QCString &sourceFileName) { m_sourceFileName = sourceFileName; }
Expand Down
8 changes: 4 additions & 4 deletions src/htmlgen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1067,7 +1067,7 @@ HtmlGenerator::HtmlGenerator(const HtmlGenerator &og) : OutputGenerator(og.m_dir
{
//printf("%p:HtmlGenerator(copy %p)\n",(void*)this,(void*)&og);
m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
m_codeGen = m_codeList->get<HtmlCodeGenerator>();
m_codeGen = m_codeList->get<HtmlCodeGenerator>(OutputType::Html);
m_codeGen->setTextStream(&m_t);
m_lastTitle = og.m_lastTitle;
m_lastFile = og.m_lastFile;
Expand All @@ -1083,7 +1083,7 @@ HtmlGenerator &HtmlGenerator::operator=(const HtmlGenerator &og)
{
m_dir = og.m_dir;
m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
m_codeGen = m_codeList->get<HtmlCodeGenerator>();
m_codeGen = m_codeList->get<HtmlCodeGenerator>(OutputType::Html);
m_codeGen->setTextStream(&m_t);
m_lastTitle = og.m_lastTitle;
m_lastFile = og.m_lastFile;
Expand All @@ -1099,7 +1099,7 @@ HtmlGenerator::HtmlGenerator(HtmlGenerator &&og)
{
//printf("%p:HtmlGenerator(move %p)\n",(void*)this,(void*)&og);
m_codeList = std::exchange(og.m_codeList,std::unique_ptr<OutputCodeList>());
m_codeGen = m_codeList->get<HtmlCodeGenerator>();
m_codeGen = m_codeList->get<HtmlCodeGenerator>(OutputType::Html);
m_codeGen->setTextStream(&m_t);
m_lastTitle = std::exchange(og.m_lastTitle,QCString());
m_lastFile = std::exchange(og.m_lastFile,QCString());
Expand All @@ -1115,7 +1115,7 @@ HtmlGenerator::~HtmlGenerator()

void HtmlGenerator::addCodeGen(OutputCodeList &list)
{
list.add(OutputCodeList::OutputCodeVariant(HtmlCodeGeneratorDefer(m_codeGen)));
list.add<HtmlCodeGeneratorDefer>(m_codeGen);
}

void HtmlGenerator::init()
Expand Down
32 changes: 16 additions & 16 deletions src/htmlgen.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
class OutputCodeList;

/** Generator for HTML code fragments */
class HtmlCodeGenerator
class HtmlCodeGenerator : public OutputCodeIntf
{
public:
HtmlCodeGenerator(TextStream *t,const QCString &relPath);
Expand All @@ -31,30 +31,30 @@ class HtmlCodeGenerator
void setFileName(const QCString fileName) { m_fileName = fileName; }
QCString fileName() { return m_fileName; }

OutputType type() const { return OutputType::Html; }

void codify(const QCString &text);
OutputType type() const override { return OutputType::Html; }
std::unique_ptr<OutputCodeIntf> clone() override { return std::make_unique<HtmlCodeGenerator>(*this); }
void codify(const QCString &text) override;
void writeCodeLink(CodeSymbolType type,
const QCString &ref,const QCString &file,
const QCString &anchor,const QCString &name,
const QCString &tooltip);
const QCString &tooltip) override;
void writeTooltip(const QCString &id,
const DocLinkInfo &docInfo,
const QCString &decl,
const QCString &desc,
const SourceLinkInfo &defInfo,
const SourceLinkInfo &declInfo
);
void writeLineNumber(const QCString &,const QCString &,const QCString &,int, bool);
void startCodeLine(int);
void endCodeLine();
void startFontClass(const QCString &s);
void endFontClass();
void writeCodeAnchor(const QCString &anchor);
void startCodeFragment(const QCString &style);
void endCodeFragment(const QCString &);
void startFold(int,const QCString &,const QCString &);
void endFold();
) override;
void writeLineNumber(const QCString &,const QCString &,const QCString &,int, bool) override;
void startCodeLine(int) override;
void endCodeLine() override;
void startFontClass(const QCString &s) override;
void endFontClass() override;
void writeCodeAnchor(const QCString &anchor) override;
void startCodeFragment(const QCString &style) override;
void endCodeFragment(const QCString &) override;
void startFold(int,const QCString &,const QCString &) override;
void endFold() override;

void setRelativePath(const QCString &path);
private:
Expand Down
8 changes: 4 additions & 4 deletions src/latexgen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ LatexGenerator::LatexGenerator()
LatexGenerator::LatexGenerator(const LatexGenerator &og) : OutputGenerator(og.m_dir)
{
m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
m_codeGen = m_codeList->get<LatexCodeGenerator>();
m_codeGen = m_codeList->get<LatexCodeGenerator>(OutputType::Latex);
m_codeGen->setTextStream(&m_t);
m_firstDescItem = og.m_firstDescItem;
m_disableLinks = og.m_disableLinks;
Expand All @@ -299,7 +299,7 @@ LatexGenerator &LatexGenerator::operator=(const LatexGenerator &og)
{
m_dir = og.m_dir;
m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
m_codeGen = m_codeList->get<LatexCodeGenerator>();
m_codeGen = m_codeList->get<LatexCodeGenerator>(OutputType::Latex);
m_codeGen->setTextStream(&m_t);
m_firstDescItem = og.m_firstDescItem;
m_disableLinks = og.m_disableLinks;
Expand All @@ -315,7 +315,7 @@ LatexGenerator::LatexGenerator(LatexGenerator &&og)
: OutputGenerator(std::move(og))
{
m_codeList = std::exchange(og.m_codeList,std::unique_ptr<OutputCodeList>());
m_codeGen = m_codeList->get<LatexCodeGenerator>();
m_codeGen = m_codeList->get<LatexCodeGenerator>(OutputType::Latex);
m_codeGen->setTextStream(&m_t);
m_firstDescItem = std::exchange(og.m_firstDescItem,true);
m_disableLinks = std::exchange(og.m_disableLinks,false);
Expand All @@ -331,7 +331,7 @@ LatexGenerator::~LatexGenerator()

void LatexGenerator::addCodeGen(OutputCodeList &list)
{
list.add(OutputCodeList::OutputCodeVariant(LatexCodeGeneratorDefer(m_codeGen)));
list.add<LatexCodeGeneratorDefer>(m_codeGen);
}

static void writeLatexMakefile()
Expand Down
32 changes: 16 additions & 16 deletions src/latexgen.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,37 +24,37 @@
class OutputCodeList;

/** Generator for LaTeX code fragments */
class LatexCodeGenerator
class LatexCodeGenerator : public OutputCodeIntf
{
public:
LatexCodeGenerator(TextStream *t,const QCString &relPath,const QCString &sourceFile);
LatexCodeGenerator(TextStream *t);
void setTextStream(TextStream *t) { m_t = t; }

OutputType type() const { return OutputType::Latex; }

void codify(const QCString &text);
OutputType type() const override { return OutputType::Latex; }
std::unique_ptr<OutputCodeIntf> clone() override { return std::make_unique<LatexCodeGenerator>(*this); }
void codify(const QCString &text) override;
void writeCodeLink(CodeSymbolType type,
const QCString &ref,const QCString &file,
const QCString &anchor,const QCString &name,
const QCString &tooltip);
const QCString &tooltip) override;
void writeTooltip(const QCString &,
const DocLinkInfo &,
const QCString &,
const QCString &,
const SourceLinkInfo &,
const SourceLinkInfo &
) {}
void writeLineNumber(const QCString &,const QCString &,const QCString &,int,bool);
void startCodeLine(int);
void endCodeLine();
void startFontClass(const QCString &);
void endFontClass();
void writeCodeAnchor(const QCString &) {}
void startCodeFragment(const QCString &style);
void endCodeFragment(const QCString &style);
void startFold(int,const QCString &,const QCString &) {}
void endFold() {}
) override {}
void writeLineNumber(const QCString &,const QCString &,const QCString &,int,bool) override;
void startCodeLine(int) override;
void endCodeLine() override;
void startFontClass(const QCString &) override;
void endFontClass() override;
void writeCodeAnchor(const QCString &) override {}
void startCodeFragment(const QCString &style) override;
void endCodeFragment(const QCString &style) override;
void startFold(int,const QCString &,const QCString &) override {}
void endFold() override {}

// extra methods not part of CodeOutputInterface
void incUsedTableLevel() { m_usedTableLevel++; }
Expand Down
8 changes: 4 additions & 4 deletions src/mangen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ ManGenerator::ManGenerator()
ManGenerator::ManGenerator(const ManGenerator &og) : OutputGenerator(og.m_dir)
{
m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
m_codeGen = m_codeList->get<ManCodeGenerator>();
m_codeGen = m_codeList->get<ManCodeGenerator>(OutputType::Man);
m_codeGen->setTextStream(&m_t);
m_firstCol = og.m_firstCol;
m_col = og.m_col;
Expand All @@ -215,7 +215,7 @@ ManGenerator &ManGenerator::operator=(const ManGenerator &og)
{
m_dir = og.m_dir;
m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
m_codeGen = m_codeList->get<ManCodeGenerator>();
m_codeGen = m_codeList->get<ManCodeGenerator>(OutputType::Man);
m_codeGen->setTextStream(&m_t);
m_firstCol = og.m_firstCol;
m_col = og.m_col;
Expand All @@ -231,7 +231,7 @@ ManGenerator::ManGenerator(ManGenerator &&og)
: OutputGenerator(std::move(og))
{
m_codeList = std::exchange(og.m_codeList,std::unique_ptr<OutputCodeList>());
m_codeGen = m_codeList->get<ManCodeGenerator>();
m_codeGen = m_codeList->get<ManCodeGenerator>(OutputType::Man);
m_codeGen->setTextStream(&m_t);
m_firstCol = std::exchange(og.m_firstCol,true);
m_col = std::exchange(og.m_col,0);
Expand All @@ -247,7 +247,7 @@ ManGenerator::~ManGenerator()

void ManGenerator::addCodeGen(OutputCodeList &list)
{
list.add(OutputCodeList::OutputCodeVariant(ManCodeGeneratorDefer(m_codeGen)));
list.add<ManCodeGeneratorDefer>(m_codeGen);
}

void ManGenerator::init()
Expand Down

0 comments on commit d50c74e

Please sign in to comment.