Doxygen
Loading...
Searching...
No Matches
MermaidManager Class Reference

Singleton that manages Mermaid diagram rendering via the mmdc CLI tool. More...

#include <src/mermaid.h>

Classes

struct  MermaidDiagram

Public Types

enum class  OutputFormat { HTML , LaTeX , RTF , Docbook }
 Mermaid output image formats. More...
enum class  ImageFormat { PNG , SVG , PDF }
using DiagramList = std::vector<MermaidDiagram>

Public Member Functions

void setHasInlineDiagrams ()
bool hasInlineDiagrams () const
bool needToRun () const
void run ()
 Run mmdc tool for all collected diagrams.
DString writeMermaidSource (const DString &outDirArg, const DString &fileName, const DString &content, ImageFormat format, const DString &srcFile, int srcLine)
 Write a Mermaid source file and register it for CLI rendering.
void generateMermaidOutput (const DString &baseName, const DString &outDir, ImageFormat format, bool toIndex)
 Register a generated Mermaid image with the index.

Static Public Member Functions

static MermaidManager & instance ()
static DString imageExtension (ImageFormat imageFormat)
static ImageFormat convertToImageFormat (OutputFormat outputFormat)

Private Member Functions

 MermaidManager ()

Private Attributes

DiagramList m_diagrams
bool m_hasInlineDiagrams = false

Detailed Description

Singleton that manages Mermaid diagram rendering via the mmdc CLI tool.

Definition at line 40 of file mermaid.h.

Member Typedef Documentation

◆ DiagramList

Definition at line 83 of file mermaid.h.

Member Enumeration Documentation

◆ ImageFormat

enum class MermaidManager::ImageFormat
strong
Enumerator
PNG 
SVG 
PDF 

Definition at line 45 of file mermaid.h.

45{ PNG, SVG, PDF };
@ PDF
called through texorpdf as PDF (second) part

◆ OutputFormat

enum class MermaidManager::OutputFormat
strong

Mermaid output image formats.

Enumerator
HTML 
LaTeX 
RTF 
Docbook 

Definition at line 44 of file mermaid.h.

Constructor & Destructor Documentation

◆ MermaidManager()

MermaidManager::MermaidManager ( )
private

Definition at line 44 of file mermaid.cpp.

45{
46}

Referenced by instance().

Member Function Documentation

◆ convertToImageFormat()

MermaidManager::ImageFormat MermaidManager::convertToImageFormat ( OutputFormat outputFormat)
static

Definition at line 59 of file mermaid.cpp.

60{
61 switch(outputFormat)
62 {
64 // fall through
66 // fall through
70 return Config_getBool(USE_PDFLATEX) ? ImageFormat::PDF : ImageFormat::PNG;
71 }
72 return ImageFormat::PNG;
73}
#define Config_getBool(name)
Definition config.h:33
DString getDotImageExtension()
Definition util.cpp:4965

References Config_getBool, Docbook, getDotImageExtension(), HTML, LaTeX, PDF, PNG, RTF, and SVG.

Referenced by DocbookDocVisitor::operator()(), HtmlDocVisitor::operator()(), HtmlDocVisitor::operator()(), LatexDocVisitor::operator()(), RTFDocVisitor::operator()(), RTFDocVisitor::operator()(), DocbookDocVisitor::startMermaidFile(), LatexDocVisitor::startMermaidFile(), DocbookDocVisitor::writeMermaidFile(), HtmlDocVisitor::writeMermaidFile(), LatexDocVisitor::writeMermaidFile(), and RTFDocVisitor::writeMermaidFile().

◆ generateMermaidOutput()

void MermaidManager::generateMermaidOutput ( const DString & baseName,
const DString & outDir,
ImageFormat format,
bool toIndex )

Register a generated Mermaid image with the index.

Parameters
[in]baseNamethe name of the generated file (as returned by writeMermaidSource())
[in]outDirthe directory containing the resulting image.
[in]formatthe image format that was generated.
[in]toIndexadd the file to the index lists for htmlhelp / qhc etc.

Definition at line 121 of file mermaid.cpp.

123{
124 if (!toIndex) return;
125 DString imgName = baseName;
126 if (size_t i = imgName.rfind('/'); i!=DString::npos)
127 {
128 imgName = imgName.mid(i + 1);
129 }
130 imgName += "." + imageExtension(imageFormat);
132}
size_t rfind(char c, size_t pos=npos) const
Definition dstring.h:244
DString mid(size_t index, size_t len=npos) const
Definition dstring.h:318
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
Definition dstring.h:178
static IndexList * indexList
Definition doxygen.h:125
void addImageFile(const DString &name)
Definition indexlist.h:124
static DString imageExtension(ImageFormat imageFormat)
Definition mermaid.cpp:48

References IndexList::addImageFile(), imageExtension(), Doxygen::indexList, DString::mid(), DString::npos, and DString::rfind().

Referenced by DocbookDocVisitor::startMermaidFile(), LatexDocVisitor::startMermaidFile(), DocbookDocVisitor::writeMermaidFile(), HtmlDocVisitor::writeMermaidFile(), LatexDocVisitor::writeMermaidFile(), and RTFDocVisitor::writeMermaidFile().

◆ hasInlineDiagrams()

bool MermaidManager::hasInlineDiagrams ( ) const
inline

Definition at line 50 of file mermaid.h.

50{ return m_hasInlineDiagrams; }
bool m_hasInlineDiagrams
Definition mermaid.h:92

References m_hasInlineDiagrams.

◆ imageExtension()

DString MermaidManager::imageExtension ( ImageFormat imageFormat)
static

Definition at line 48 of file mermaid.cpp.

49{
50 switch (format)
51 {
52 case ImageFormat::PNG: return "png";
53 case ImageFormat::SVG: return "svg";
54 case ImageFormat::PDF: return "pdf";
55 }
56 return "png";
57}

References PDF, PNG, and SVG.

Referenced by generateMermaidOutput(), runMermaid(), DocbookDocVisitor::startMermaidFile(), LatexDocVisitor::startMermaidFile(), DocbookDocVisitor::writeMermaidFile(), HtmlDocVisitor::writeMermaidFile(), LatexDocVisitor::writeMermaidFile(), and RTFDocVisitor::writeMermaidFile().

◆ instance()

◆ needToRun()

bool MermaidManager::needToRun ( ) const
inline

Definition at line 51 of file mermaid.h.

51{ return !m_diagrams.empty(); }
DiagramList m_diagrams
Definition mermaid.h:91

References m_diagrams.

◆ run()

void MermaidManager::run ( )

Run mmdc tool for all collected diagrams.

Definition at line 255 of file mermaid.cpp.

256{
257 Debug::print(Debug::Mermaid, 0, "*** MermaidManager::run\n");
259}
@ Mermaid
Definition debug.h:52
static void print(DebugMask mask, int prio, fmt::format_string< Args... > fmt, Args &&... args)
Definition debug.h:78
static void runMermaid(const MermaidManager::DiagramList &diagrams)
Definition mermaid.cpp:134

References m_diagrams, Debug::Mermaid, Debug::print(), and runMermaid().

Referenced by generateOutput().

◆ setHasInlineDiagrams()

void MermaidManager::setHasInlineDiagrams ( )

Definition at line 248 of file mermaid.cpp.

249{
250 // CLI mode creates images locally, other modes create inline diagram descriptions
251 // in the HTML output and rely on rendering them in the browser.
252 m_hasInlineDiagrams=Config_getEnum(MERMAID_RENDER_MODE)!=MERMAID_RENDER_MODE_t::CLI;
253}
#define Config_getEnum(name)
Definition config.h:35

References Config_getEnum, and m_hasInlineDiagrams.

Referenced by handleFormatBlock(), and handleMermaidFile().

◆ writeMermaidSource()

DString MermaidManager::writeMermaidSource ( const DString & outDirArg,
const DString & fileName,
const DString & content,
ImageFormat format,
const DString & srcFile,
int srcLine )

Write a Mermaid source file and register it for CLI rendering.

Parameters
[in]outDirArgthe output directory to write the file to.
[in]fileNamethe name of the file. If empty a name will be chosen automatically.
[in]contentthe Mermaid diagram source.
[in]formatthe image format to generate.
[in]srcFilethe source file resulting in the write command.
[in]srcLinethe line number resulting in the write command.
Returns
The base name of the generated file (without extension).

Definition at line 75 of file mermaid.cpp.

78{
79 DString outDir(outDirArg);
80 DString baseName;
81
82 // strip any trailing slashes and backslashes
83 while (!outDir.empty() && (outDir.at(outDir.length()-1)=='/' || outDir.at(outDir.length()-1)=='\\'))
84 {
85 outDir = outDir.left(outDir.length()-1);
86 }
87
88 if (fileName.empty())
89 {
90 std::lock_guard<std::mutex> lock(g_mermaidMutex);
91 baseName = outDir + "/inline_mermaid_" + DString().setNum(g_mermaidIndex++);
92 }
93 else
94 {
95 baseName = fileName;
96 if (size_t i = baseName.rfind('.'); i!=DString::npos) baseName = baseName.left(i);
97 baseName.prepend(outDir + "/");
98 }
99
100 DString mmdName = baseName + ".mmd";
101
102 Debug::print(Debug::Mermaid, 0, "*** writeMermaidSource baseName: {}\n", baseName);
103 Debug::print(Debug::Mermaid, 0, "*** writeMermaidSource mmdName: {}\n", mmdName);
104
105 // Write the .mmd source file
106 std::ofstream file = Portable::openOutputStream(mmdName);
107 if (!file.is_open())
108 {
109 err_full(srcFile, srcLine, "Could not open file {} for writing", mmdName);
110 return baseName;
111 }
112 file.write(content.data(), content.length());
113 file.close();
114
115 // Store for batch processing in run()
116 m_diagrams.emplace_back(imageFormat,MermaidDiagramInfo(baseName, content, outDir, srcFile, srcLine));
117
118 return baseName;
119}
DString & setNum(short n)
Definition dstring.h:552
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
DString & prepend(const char *s)
Definition dstring.h:515
DString left(size_t len) const
Definition dstring.h:306
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition dstring.h:157
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:151
static std::mutex g_mermaidMutex
Definition mermaid.cpp:35
static int g_mermaidIndex
Definition mermaid.cpp:36
#define err_full(file, line, fmt,...)
Definition message.h:132
std::ofstream openOutputStream(const DString &name, bool append=false)
Definition portable.cpp:681

References DString::at(), DString::data(), DString::empty(), err_full, g_mermaidIndex, g_mermaidMutex, DString::left(), DString::length(), m_diagrams, Debug::Mermaid, DString::npos, Portable::openOutputStream(), DString::prepend(), Debug::print(), DString::rfind(), and DString::setNum().

Referenced by DocbookDocVisitor::operator()(), HtmlDocVisitor::operator()(), HtmlDocVisitor::operator()(), LatexDocVisitor::operator()(), RTFDocVisitor::operator()(), RTFDocVisitor::operator()(), DocbookDocVisitor::startMermaidFile(), and LatexDocVisitor::startMermaidFile().

Member Data Documentation

◆ m_diagrams

DiagramList MermaidManager::m_diagrams
private

Definition at line 91 of file mermaid.h.

Referenced by needToRun(), run(), and writeMermaidSource().

◆ m_hasInlineDiagrams

bool MermaidManager::m_hasInlineDiagrams = false
private

Definition at line 92 of file mermaid.h.

Referenced by hasInlineDiagrams(), and setHasInlineDiagrams().


The documentation for this class was generated from the following files: