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
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
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 82 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:245
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().

◆ hasInlineDiagrams()

bool MermaidManager::hasInlineDiagrams ( ) const
inline

Definition at line 50 of file mermaid.h.

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

References m_hasInlineDiagrams.

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

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

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:426
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:170
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:167
QCString & setNum(short n)
Definition qcstring.h:463
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:176
QCString left(size_t len) const
Definition qcstring.h:233
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 90 of file mermaid.h.

Referenced by run(), and writeMermaidSource().

◆ m_hasInlineDiagrams

bool MermaidManager::m_hasInlineDiagrams = false
private

Definition at line 91 of file mermaid.h.

Referenced by hasInlineDiagrams(), and setHasInlineDiagrams().


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