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 MermaidManagerinstance ()
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 41 of file mermaid.cpp.

42{
43}

Referenced by instance().

Member Function Documentation

◆ convertToImageFormat()

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

Definition at line 56 of file mermaid.cpp.

57{
58 switch(outputFormat)
59 {
61 // fall through
63 // fall through
67 return Config_getBool(USE_PDFLATEX) ? ImageFormat::PDF : ImageFormat::PNG;
68 }
69 return ImageFormat::PNG;
70}
#define Config_getBool(name)
Definition config.h:33
DString getDotImageExtension()
Definition util.cpp:4966

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 118 of file mermaid.cpp.

120{
121 if (!toIndex) return;
122 DString imgName = baseName;
123 if (size_t i = imgName.rfind('/'); i!=DString::npos)
124 {
125 imgName = imgName.mid(i + 1);
126 }
127 imgName += "." + imageExtension(imageFormat);
129}
size_t rfind(char c, size_t pos=npos) const
Definition dstring.h:248
DString mid(size_t index, size_t len=npos) const
Definition dstring.h:322
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:182
static IndexList * indexList
Definition doxygen.h:125
void addImageFile(const DString &name)
Definition indexlist.h:124
static DString imageExtension(ImageFormat imageFormat)
Definition mermaid.cpp:45

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 45 of file mermaid.cpp.

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

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 252 of file mermaid.cpp.

253{
254 Debug::print(Debug::Mermaid, 0, "*** MermaidManager::run\n");
256}
@ 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:131

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

Referenced by generateOutput().

◆ setHasInlineDiagrams()

void MermaidManager::setHasInlineDiagrams ( )

Definition at line 245 of file mermaid.cpp.

246{
247 // CLI mode creates images locally, other modes create inline diagram descriptions
248 // in the HTML output and rely on rendering them in the browser.
249 m_hasInlineDiagrams=Config_getEnum(MERMAID_RENDER_MODE)!=MERMAID_RENDER_MODE_t::CLI;
250}
#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 72 of file mermaid.cpp.

75{
76 DString outDir(outDirArg);
77 DString baseName;
78
79 // strip any trailing slashes and backslashes
80 while (!outDir.empty() && (outDir.at(outDir.length()-1)=='/' || outDir.at(outDir.length()-1)=='\\'))
81 {
82 outDir = outDir.left(outDir.length()-1);
83 }
84
85 if (fileName.empty())
86 {
87 std::lock_guard<std::mutex> lock(g_mermaidMutex);
88 baseName = outDir + "/inline_mermaid_" + DString().setNum(g_mermaidIndex++);
89 }
90 else
91 {
92 baseName = fileName;
93 if (size_t i = baseName.rfind('.'); i!=DString::npos) baseName = baseName.left(i);
94 baseName.prepend(outDir + "/");
95 }
96
97 DString mmdName = baseName + ".mmd";
98
99 Debug::print(Debug::Mermaid, 0, "*** writeMermaidSource baseName: {}\n", baseName);
100 Debug::print(Debug::Mermaid, 0, "*** writeMermaidSource mmdName: {}\n", mmdName);
101
102 // Write the .mmd source file
103 std::ofstream file = Portable::openOutputStream(mmdName);
104 if (!file.is_open())
105 {
106 err_full(srcFile, srcLine, "Could not open file {} for writing", mmdName);
107 return baseName;
108 }
109 file.write(content.data(), content.length());
110 file.close();
111
112 // Store for batch processing in run()
113 m_diagrams.emplace_back(imageFormat,MermaidDiagramInfo(baseName, content, outDir, srcFile, srcLine));
114
115 return baseName;
116}
DString & setNum(short n)
Definition dstring.h:556
DString()=default
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:152
DString & prepend(const char *s)
Definition dstring.h:519
DString left(size_t len) const
Definition dstring.h:310
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:161
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:155
static std::mutex g_mermaidMutex
Definition mermaid.cpp:32
static int g_mermaidIndex
Definition mermaid.cpp:33
#define err_full(file, line, fmt,...)
Definition message.h:132
std::ofstream openOutputStream(const DString &name, bool append=false)
Definition portable.cpp:665
MermaidDiagramInfo(const DString &baseName_, const DString &content_, const DString &outDir_, const DString &srcFile_, int srcLine_)
Definition mermaid.h:28

References DString::at(), DString::data(), DString::DString(), DString::empty(), err_full, g_mermaidIndex, g_mermaidMutex, DString::left(), DString::length(), m_diagrams, Debug::Mermaid, MermaidDiagramInfo::MermaidDiagramInfo(), 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: