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

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

#include <src/mermaid.h>

Public Types

enum  OutputFormat { MERM_BITMAP , MERM_SVG }
 Mermaid output image formats. More...
using ContentList = std::vector<MermaidContent>

Public Member Functions

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

Static Public Member Functions

static MermaidManagerinstance ()

Private Member Functions

 MermaidManager ()

Static Private Member Functions

static QCString imageExtension (OutputFormat format)

Private Attributes

ContentList m_pngContent
ContentList m_svgContent

Detailed Description

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

Definition at line 40 of file mermaid.h.

Member Typedef Documentation

◆ ContentList

Definition at line 71 of file mermaid.h.

Member Enumeration Documentation

◆ OutputFormat

Mermaid output image formats.

Enumerator
MERM_BITMAP 
MERM_SVG 

Definition at line 44 of file mermaid.h.

Constructor & Destructor Documentation

◆ MermaidManager()

MermaidManager::MermaidManager ( )
private

Definition at line 38 of file mermaid.cpp.

39{
40}

Referenced by instance().

Member Function Documentation

◆ generateMermaidOutput()

void MermaidManager::generateMermaidOutput ( const QCString & baseName,
const QCString & outDir,
OutputFormat format )

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.

Definition at line 104 of file mermaid.cpp.

106{
107 QCString imgName = baseName;
108 int i = imgName.findRev('/');
109 if (i != -1)
110 {
111 imgName = imgName.mid(i + 1);
112 }
113 imgName += imageExtension(format);
115}
static IndexList * indexList
Definition doxygen.h:132
void addImageFile(const QCString &name)
Definition indexlist.h:123
static QCString imageExtension(OutputFormat format)
Definition mermaid.cpp:42
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:241
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition qcstring.cpp:96

References QCString::findRev(), imageExtension(), Doxygen::indexList, and QCString::mid().

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

◆ imageExtension()

QCString MermaidManager::imageExtension ( OutputFormat format)
staticprivate

Definition at line 42 of file mermaid.cpp.

43{
44 switch (format)
45 {
46 case MERM_BITMAP: return ".png";
47 case MERM_SVG: return ".svg";
48 }
49 return ".png";
50}

References MERM_BITMAP, and MERM_SVG.

Referenced by generateMermaidOutput().

◆ instance()

◆ run()

void MermaidManager::run ( )

Run mmdc tool for all collected diagrams.

Definition at line 179 of file mermaid.cpp.

180{
181 Debug::print(Debug::Mermaid, 0, "*** MermaidManager::run\n");
184}
@ Mermaid
Definition debug.h:51
static void print(DebugMask mask, int prio, fmt::format_string< Args... > fmt, Args &&... args)
Definition debug.h:77
ContentList m_pngContent
Definition mermaid.h:78
ContentList m_svgContent
Definition mermaid.h:79
static void runMermaidContent(const MermaidManager::ContentList &contentList, MermaidManager::OutputFormat format)
Definition mermaid.cpp:117

References m_pngContent, m_svgContent, MERM_BITMAP, MERM_SVG, Debug::Mermaid, Debug::print(), and runMermaidContent().

Referenced by generateOutput().

◆ writeMermaidSource()

QCString MermaidManager::writeMermaidSource ( const QCString & outDirArg,
const QCString & fileName,
const QCString & content,
OutputFormat format,
const QCString & 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 52 of file mermaid.cpp.

55{
56 QCString outDir(outDirArg);
57 QCString baseName;
58
59 // strip any trailing slashes and backslashes
60 while (!outDir.isEmpty() && (outDir.at(outDir.length()-1)=='/' || outDir.at(outDir.length()-1)=='\\'))
61 {
62 outDir = outDir.left(outDir.length()-1);
63 }
64
65 if (fileName.isEmpty())
66 {
67 std::lock_guard<std::mutex> lock(g_mermaidMutex);
68 baseName = outDir + "/inline_mermaid_" + QCString().setNum(g_mermaidIndex++);
69 }
70 else
71 {
72 baseName = fileName;
73 int i = baseName.findRev('.');
74 if (i != -1) baseName = baseName.left(i);
75 baseName.prepend(outDir + "/");
76 }
77
78 QCString mmdName = baseName + ".mmd";
79
80 Debug::print(Debug::Mermaid, 0, "*** writeMermaidSource baseName: {}\n", baseName);
81 Debug::print(Debug::Mermaid, 0, "*** writeMermaidSource mmdName: {}\n", mmdName);
82
83 // Write the .mmd source file
84 std::ofstream file = Portable::openOutputStream(mmdName);
85 if (!file.is_open())
86 {
87 err_full(srcFile, srcLine, "Could not open file {} for writing", mmdName);
88 return baseName;
89 }
90 file.write(content.data(), content.length());
91 file.close();
92
93 // Store for batch processing in run()
94 MermaidContent mc(baseName, content, outDir, srcFile, srcLine);
95 switch (format)
96 {
97 case MERM_BITMAP: m_pngContent.push_back(mc); break;
98 case MERM_SVG: m_svgContent.push_back(mc); break;
99 }
100
101 return baseName;
102}
QCString & prepend(const char *s)
Definition qcstring.h:422
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
QCString & setNum(short n)
Definition qcstring.h:459
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172
QCString left(size_t len) const
Definition qcstring.h:229
static std::mutex g_mermaidMutex
Definition mermaid.cpp:29
static int g_mermaidIndex
Definition mermaid.cpp:30
#define err_full(file, line, fmt,...)
Definition message.h:132
std::ofstream openOutputStream(const QCString &name, bool append=false)
Definition portable.cpp:648

References QCString::at(), QCString::data(), err_full, QCString::findRev(), g_mermaidIndex, g_mermaidMutex, QCString::isEmpty(), QCString::left(), QCString::length(), m_pngContent, m_svgContent, MERM_BITMAP, MERM_SVG, Debug::Mermaid, Portable::openOutputStream(), QCString::prepend(), Debug::print(), and QCString::setNum().

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

Member Data Documentation

◆ m_pngContent

ContentList MermaidManager::m_pngContent
private

Definition at line 78 of file mermaid.h.

Referenced by run(), and writeMermaidSource().

◆ m_svgContent

ContentList MermaidManager::m_svgContent
private

Definition at line 79 of file mermaid.h.

Referenced by run(), and writeMermaidSource().


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