From 39a8bae5299b165f63ad713aaca6214131f0825d Mon Sep 17 00:00:00 2001 From: Le Tan Date: Mon, 7 May 2018 08:51:24 +0800 Subject: [PATCH] add plantuml_cmd config for custom command --- src/resources/vnote.ini | 7 +++++++ src/vconfigmanager.cpp | 2 ++ src/vconfigmanager.h | 8 ++++++++ src/vplantumlhelper.cpp | 27 ++++++++++++++++++++------- src/vplantumlhelper.h | 6 +++++- 5 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/resources/vnote.ini b/src/resources/vnote.ini index 1e83e2a7..a502ef58 100644 --- a/src/resources/vnote.ini +++ b/src/resources/vnote.ini @@ -285,6 +285,13 @@ plantuml_jar= ; Double quotes to enclose arguments with spaces plantuml_args= +; Custom PlantUML command to execute to convert a PlantUML diagram in local PlantUML +; Read data definition from stdin and output diagram result to stdout +; When set, other local PlantUML related settings are ignored +; %0 will be replaced with the format string like svg or png +; plantuml_cmd=/bin/sh -c \"cat | java -jar /opt/plantuml/plantuml.jar -charset UTF-8 -nbthread 4 -pipe -t%0\" +plantuml_cmd= + ; Graphviz Dot location graphviz_dot= diff --git a/src/vconfigmanager.cpp b/src/vconfigmanager.cpp index d0dec726..a52394f7 100644 --- a/src/vconfigmanager.cpp +++ b/src/vconfigmanager.cpp @@ -292,6 +292,8 @@ void VConfigManager::initialize() QString plantUMLArgs = getConfigFromSettings("web", "plantuml_args").toString(); m_plantUMLArgs = VUtils::parseCombinedArgString(plantUMLArgs); + m_plantUMLCmd = getConfigFromSettings("web", "plantuml_cmd").toString(); + m_enableGraphviz = getConfigFromSettings("global", "enable_graphviz").toBool(); m_graphvizDot = getConfigFromSettings("web", "graphviz_dot").toString(); } diff --git a/src/vconfigmanager.h b/src/vconfigmanager.h index 4c5928ac..3bdc14a3 100644 --- a/src/vconfigmanager.h +++ b/src/vconfigmanager.h @@ -479,6 +479,7 @@ public: void setPlantUMLJar(const QString &p_jarPath); const QStringList &getPlantUMLArgs() const; + const QString &getPlantUMLCmd() const; const QString &getGraphvizDot() const; void setGraphvizDot(const QString &p_dotPath); @@ -892,6 +893,8 @@ private: QStringList m_plantUMLArgs; + QString m_plantUMLCmd; + // The name of the config file in each directory, obsolete. // Use c_dirConfigFile instead. static const QString c_obsoleteDirConfigFile; @@ -2288,6 +2291,11 @@ inline const QStringList &VConfigManager::getPlantUMLArgs() const return m_plantUMLArgs; } +inline const QString &VConfigManager::getPlantUMLCmd() const +{ + return m_plantUMLCmd; +} + inline const QString &VConfigManager::getGraphvizDot() const { return m_graphvizDot; diff --git a/src/vplantumlhelper.cpp b/src/vplantumlhelper.cpp index 745a800b..ad8daf43 100644 --- a/src/vplantumlhelper.cpp +++ b/src/vplantumlhelper.cpp @@ -14,7 +14,7 @@ extern VConfigManager *g_config; VPlantUMLHelper::VPlantUMLHelper(QObject *p_parent) : QObject(p_parent) { - prepareCommand(m_program, m_args); + prepareCommand(m_customCmd, m_program, m_args); } void VPlantUMLHelper::processAsync(int p_id, @@ -29,12 +29,18 @@ void VPlantUMLHelper::processAsync(int p_id, connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(handleProcessFinished(int, QProcess::ExitStatus))); - QStringList args(m_args); - args << ("-t" + p_format); + if (m_customCmd.isEmpty()) { + QStringList args(m_args); + args << ("-t" + p_format); + qDebug() << m_program << args; + process->start(m_program, args); + } else { + QString cmd(m_customCmd); + cmd.replace("%0", p_format); + qDebug() << cmd; + process->start(cmd); + } - qDebug() << m_program << args; - - process->start(m_program, args); if (process->write(p_text.toUtf8()) == -1) { qWarning() << "fail to write to QProcess:" << process->errorString(); } @@ -42,8 +48,15 @@ void VPlantUMLHelper::processAsync(int p_id, process->closeWriteChannel(); } -void VPlantUMLHelper::prepareCommand(QString &p_program, QStringList &p_args) const +void VPlantUMLHelper::prepareCommand(QString &p_customCmd, + QString &p_program, + QStringList &p_args) const { + p_customCmd = g_config->getPlantUMLCmd(); + if (!p_customCmd.isEmpty()) { + return; + } + p_program = "java"; p_args << "-jar" << g_config->getPlantUMLJar(); diff --git a/src/vplantumlhelper.h b/src/vplantumlhelper.h index b4dd3219..8de56908 100644 --- a/src/vplantumlhelper.h +++ b/src/vplantumlhelper.h @@ -19,7 +19,7 @@ public: const QString &p_format, const QString &p_text); - void prepareCommand(QString &p_cmd, QStringList &p_args) const; + void prepareCommand(QString &p_customCmd, QString &p_cmd, QStringList &p_args) const; signals: void resultReady(int p_id, TimeStamp p_timeStamp, const QString &p_format, const QString &p_result); @@ -29,7 +29,11 @@ private slots: private: QString m_program; + QStringList m_args; + + // When not empty, @m_program and @m_args will be ignored. + QString m_customCmd; }; #endif // VPLANTUMLHELPER_H