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 run ()
 Run mmdc tool for all collected diagrams.
QCString writeMermaidSource (const QCString &outDirArg, const QCString &fileName, const QCString &content, ImageFormat 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, ImageFormat format, bool toIndex)
 Register a generated Mermaid image with the index.

Static Public Member Functions

static MermaidManagerinstance ()
static QCString imageExtension (ImageFormat imageFormat)
static ImageFormat convertToImageFormat (OutputFormat outputFormat)

Private Member Functions

 MermaidManager ()

Private Attributes

DiagramList m_diagrams

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

40{
41}

Referenced by instance().

Member Function Documentation

◆ convertToImageFormat()

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

Definition at line 54 of file mermaid.cpp.

55{
56 switch(outputFormat)
57 {
59 // fall through
61 // fall through
65 return Config_getBool(USE_PDFLATEX) ? ImageFormat::PDF : ImageFormat::PNG;
66 }
67 return ImageFormat::PNG;
68}
#define Config_getBool(name)
Definition config.h:33
QCString getDotImageExtension()
Definition util.cpp:6307

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 QCString & baseName,
const QCString & 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 117 of file mermaid.cpp.

119{
120 if (!toIndex) return;
121 QCString imgName = baseName;
122 int i = imgName.findRev('/');
123 if (i != -1)
124 {
125 imgName = imgName.mid(i + 1);
126 }
127 imgName += "." + imageExtension(imageFormat);
129}
static IndexList * indexList
Definition doxygen.h:132
void addImageFile(const QCString &name)
Definition indexlist.h:123
static QCString imageExtension(ImageFormat imageFormat)
Definition mermaid.cpp:43
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 ( ImageFormat imageFormat)
static

Definition at line 43 of file mermaid.cpp.

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

References PDF, PNG, and SVG.

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

◆ instance()

◆ run()

void MermaidManager::run ( )

Run mmdc tool for all collected diagrams.

Definition at line 245 of file mermaid.cpp.

246{
247 Debug::print(Debug::Mermaid, 0, "*** MermaidManager::run\n");
249}
@ Mermaid
Definition debug.h:51
static void print(DebugMask mask, int prio, fmt::format_string< Args... > fmt, Args &&... args)
Definition debug.h:77
DiagramList m_diagrams
Definition mermaid.h:87
static void runMermaid(const MermaidManager::DiagramList &diagrams)
Definition mermaid.cpp:131

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

Referenced by generateOutput().

◆ writeMermaidSource()

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

73{
74 QCString outDir(outDirArg);
75 QCString baseName;
76
77 // strip any trailing slashes and backslashes
78 while (!outDir.isEmpty() && (outDir.at(outDir.length()-1)=='/' || outDir.at(outDir.length()-1)=='\\'))
79 {
80 outDir = outDir.left(outDir.length()-1);
81 }
82
83 if (fileName.isEmpty())
84 {
85 std::lock_guard<std::mutex> lock(g_mermaidMutex);
86 baseName = outDir + "/inline_mermaid_" + QCString().setNum(g_mermaidIndex++);
87 }
88 else
89 {
90 baseName = fileName;
91 int i = baseName.findRev('.');
92 if (i != -1) baseName = baseName.left(i);
93 baseName.prepend(outDir + "/");
94 }
95
96 QCString mmdName = baseName + ".mmd";
97
98 Debug::print(Debug::Mermaid, 0, "*** writeMermaidSource baseName: {}\n", baseName);
99 Debug::print(Debug::Mermaid, 0, "*** writeMermaidSource mmdName: {}\n", mmdName);
100
101 // Write the .mmd source file
102 std::ofstream file = Portable::openOutputStream(mmdName);
103 if (!file.is_open())
104 {
105 err_full(srcFile, srcLine, "Could not open file {} for writing", mmdName);
106 return baseName;
107 }
108 file.write(content.data(), content.length());
109 file.close();
110
111 // Store for batch processing in run()
112 m_diagrams.emplace_back(imageFormat,MermaidDiagramInfo(baseName, content, outDir, srcFile, srcLine));
113
114 return baseName;
115}
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:30
static int g_mermaidIndex
Definition mermaid.cpp:31
#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_diagrams, 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_diagrams

DiagramList MermaidManager::m_diagrams
private

Definition at line 87 of file mermaid.h.

Referenced by run(), and writeMermaidSource().


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