34#define MAP_CMD "cmapx"
95 DotRunner* rv =
nullptr;
99 auto insobj = std::make_unique<DotRunner>(absDotName, md5Hash);
106 if (md5Hash != runit->second->getMd5Hash())
108 err(
"md5 hash does not match for two different runs of %s !\n",
qPrint(absDotName));
110 rv = runit->second.get();
125 return &(rv.first->second);
132 if (numDotRuns+numFilePatchers>1)
136 msg(
"Generating dot graphs in single threaded mode...\n");
140 msg(
"Generating dot graphs using %d parallel threads...\n",
Config_getInt(DOT_NUM_THREADS));
172 msg(
"Running dot for graph %zu/%zu\n",prev,numDotRuns);
179 std::vector< std::future<void> > results;
182 DotRunner *runner = dr.second.get();
183 auto process = [runner]()
187 results.emplace_back(
m_workers.queue(process));
189 for (
auto &f : results)
192 msg(
"Running dot for graph %zu/%zu\n",prev,numDotRuns);
209 if (fp.second.isSVGFile())
211 msg(
"Patching output file %zu/%zu\n",i,numFilePatchers);
212 if (!fp.second.run())
return FALSE;
218 if (!fp.second.isSVGFile())
220 msg(
"Patching output file %zu/%zu\n",i,numFilePatchers);
221 if (!fp.second.run())
return FALSE;
232 const QCString &srcFile,
int srcLine)
237 term(
"Output dir %s does not exist!\n",
qPrint(outDir));
254 dotRun.
addJob(
"pdf",absOutFile+
".pdf",srcFile,srcLine);
258 dotRun.
addJob(
"ps",absOutFile+
".eps",srcFile,srcLine);
286 const QCString &context,
int graphId,
287 const QCString &srcFile,
int srcLine)
293 term(
"Output dir %s does not exist!\n",
qPrint(outDir));
298 QCString imgName = baseName+
"."+imgExt;
311 QCString svgName = outDir+
"/"+baseName+
".svg";
320 t <<
"<img src=\"" << relPath << imgName <<
"\" alt=\""
321 << imgName <<
"\" border=\"0\" usemap=\"#" << mapName <<
"\"/>\n";
325 t <<
"<map name=\"" << mapName <<
"\" id=\"" << mapName <<
"\">";
Class representing a directory in the file system.
std::string absPath() const
bool remove(const std::string &path, bool acceptsAbsPath=true) const
Helper class to insert a set of map file into an output file.
static bool convertMapFile(TextStream &t, const QCString &mapName, const QCString &relPath, bool urlOnly=FALSE, const QCString &context=QCString())
int addSVGConversion(const QCString &relPath, bool urlOnly, const QCString &context, bool zoomable, int graphId)
static bool writeSVGFigureLink(TextStream &out, const QCString &relPath, const QCString &baseName, const QCString &absImgName)
Check if a reference to a SVG figure can be written and do so if possible.
std::map< std::string, DotFilePatcher > m_filePatchers
DotFilePatcher * createFilePatcher(const QCString &fileName)
std::map< std::string, std::unique_ptr< DotRunner > > m_runners
static DotManager * instance()
DotRunner * createRunner(const QCString &absDotName, const QCString &md5Hash)
Helper class to run dot from doxygen from multiple threads.
void preventCleanUp()
Prevent cleanup of the dot file (for user provided dot files)
void addJob(const QCString &format, const QCString &output, const QCString &srcFile, int srcLine)
Adds an additional job to the run.
bool run()
Runs dot for all jobs added.
static IndexList * indexList
This is an alternative implementation of QCString.
QCString & prepend(const char *s)
bool isEmpty() const
Returns TRUE iff the string is empty.
const std::string & str() const
Text streaming class that buffers data.
bool empty() const
Returns true iff the buffer is empty.
std::string str() const
Return the contents of the buffer as a std::string object.
#define Config_getInt(name)
#define Config_getEnumAsString(name)
#define Config_getBool(name)
#define Config_getString(name)
static void setDotFontPath(const QCString &path)
static QCString g_dotFontPath
static void unsetDotFontPath()
static std::mutex g_dotManagerMutex
void writeDotImageMapFromFile(TextStream &t, const QCString &inFile, const QCString &outDir, const QCString &relPath, const QCString &baseName, const QCString &context, int graphId, const QCString &srcFile, int srcLine)
void writeDotGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, GraphOutputFormat format, const QCString &srcFile, int srcLine)
void msg(const char *fmt,...)
QCString pathListSeparator()
void setenv(const QCString &variable, const QCString &value)
void unsetenv(const QCString &variable)
QCString getenv(const QCString &variable)
Portable versions of functions that are platform dependent.
const char * qPrint(const char *s)
QCString getDotImageExtension()
A bunch of utility functions.