Doxygen
Loading...
Searching...
No Matches
mermaid.cpp File Reference
#include <mutex>
#include <fstream>
#include "mermaid.h"
#include "util.h"
#include "portable.h"
#include "config.h"
#include "doxygen.h"
#include "message.h"
#include "debug.h"
#include "dir.h"
#include "indexlist.h"
Include dependency graph for mermaid.cpp:

Go to the source code of this file.

Functions

static void runMermaidContent (const MermaidManager::ContentList &contentList, MermaidManager::OutputFormat format)

Variables

static std::mutex g_mermaidMutex
static int g_mermaidIndex = 1

Function Documentation

◆ runMermaidContent()

void runMermaidContent ( const MermaidManager::ContentList & contentList,
MermaidManager::OutputFormat format )
static

Definition at line 117 of file mermaid.cpp.

119{
120 if (contentList.empty()) return;
121
122 QCString mermaidPath = Config_getString(MERMAID_PATH);
123 if (mermaidPath.isEmpty()) return;
124
125 QCString mmdc = mermaidPath;
126 if (!mmdc.isEmpty() && mmdc.at(mmdc.length()-1) != '/' && mmdc.at(mmdc.length()-1) != '\\')
127 {
128 mmdc += "/";
129 }
130 mmdc += "mmdc";
131
132 QCString mermaidConfigFile = Config_getString(MERMAID_CONFIG_FILE);
133
134 QCString ext;
135 switch (format)
136 {
137 case MermaidManager::MERM_BITMAP: ext = "png"; break;
138 case MermaidManager::MERM_SVG: ext = "svg"; break;
139 }
140
141 for (const auto &mc : contentList)
142 {
143 if (mc.content.isEmpty()) continue;
144
145 QCString inputFile = mc.baseName + ".mmd";
146 QCString outputFile = mc.baseName + "." + ext;
147
148 // Check if content has changed since last run (caching)
149 FileInfo fi(outputFile.str());
150 if (fi.exists())
151 {
152 QCString cachedContent = fileToString(inputFile);
153 if (cachedContent == mc.content) continue;
154 }
155
156 // Build the mmdc command arguments
157 QCString args;
158 args += "-i \"" + inputFile + "\" ";
159 args += "-o \"" + outputFile + "\" ";
160
161 if (!mermaidConfigFile.isEmpty())
162 {
163 args += "-c \"" + mermaidConfigFile + "\" ";
164 }
165
166 msg("Generating Mermaid {} file {}\n", ext, outputFile);
167 Debug::print(Debug::Mermaid, 0, "*** MermaidManager::run Running: {} {}\n", mmdc, args);
168
169 int exitCode = Portable::system(mmdc.data(), args.data(), TRUE);
170 if (exitCode != 0)
171 {
172 err_full(mc.srcFile, mc.srcLine,
173 "Problems running Mermaid (mmdc). Verify that the command '{}' works from the command line. Exit code: {}.",
174 mmdc, exitCode);
175 }
176 }
177}
@ Mermaid
Definition debug.h:51
static void print(DebugMask mask, int prio, fmt::format_string< Args... > fmt, Args &&... args)
Definition debug.h:77
Minimal replacement for QFileInfo.
Definition fileinfo.h:23
This is an alternative implementation of QCString.
Definition qcstring.h:101
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:593
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
const std::string & str() const
Definition qcstring.h:552
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
#define Config_getString(name)
Definition config.h:32
#define msg(fmt,...)
Definition message.h:94
#define err_full(file, line, fmt,...)
Definition message.h:132
int system(const QCString &command, const QCString &args, bool commandHasConsole=true)
Definition portable.cpp:105
#define TRUE
Definition qcstring.h:37
QCString fileToString(const QCString &name, bool filter, bool isSourceCode)
Definition util.cpp:1494

References QCString::at(), Config_getString, QCString::data(), err_full, FileInfo::exists(), fileToString(), QCString::isEmpty(), QCString::length(), MermaidManager::MERM_BITMAP, MermaidManager::MERM_SVG, Debug::Mermaid, msg, Debug::print(), QCString::str(), Portable::system(), and TRUE.

Referenced by MermaidManager::run().

Variable Documentation

◆ g_mermaidIndex

int g_mermaidIndex = 1
static

Definition at line 30 of file mermaid.cpp.

Referenced by MermaidManager::writeMermaidSource().

◆ g_mermaidMutex

std::mutex g_mermaidMutex
static

Definition at line 29 of file mermaid.cpp.

Referenced by MermaidManager::writeMermaidSource().