forked from qt-creator/qt-creator
JsonWizard: Make template processing more widely available
Change-Id: I2c6eecc5d2a3c5429ce3a6a564d65f24ae3d23eb Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
#include "../project.h"
|
#include "../project.h"
|
||||||
#include "../projectexplorer.h"
|
#include "../projectexplorer.h"
|
||||||
|
#include "../customwizard/customwizardpreprocessor.h"
|
||||||
|
|
||||||
#include <coreplugin/editormanager/editormanager.h>
|
#include <coreplugin/editormanager/editormanager.h>
|
||||||
#include <coreplugin/messagemanager.h>
|
#include <coreplugin/messagemanager.h>
|
||||||
@@ -201,6 +202,51 @@ QHash<QString, QVariant> JsonWizard::variables() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString JsonWizard::processText(Utils::MacroExpander *expander, const QString &input,
|
||||||
|
QString *errorMessage)
|
||||||
|
{
|
||||||
|
errorMessage->clear();
|
||||||
|
|
||||||
|
if (input.isEmpty())
|
||||||
|
return input;
|
||||||
|
|
||||||
|
// Recursively expand macros:
|
||||||
|
QString in = input;
|
||||||
|
QString oldIn;
|
||||||
|
for (int i = 0; i < 5 && in != oldIn; ++i) {
|
||||||
|
oldIn = in;
|
||||||
|
in = expander->expand(oldIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString out;
|
||||||
|
if (!Internal::customWizardPreprocess(in, &out, errorMessage))
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
// Expand \n, \t and handle line continuation:
|
||||||
|
QString result;
|
||||||
|
result.reserve(out.count());
|
||||||
|
bool isEscaped = false;
|
||||||
|
for (int i = 0; i < out.count(); ++i) {
|
||||||
|
const QChar c = out.at(i);
|
||||||
|
|
||||||
|
if (isEscaped) {
|
||||||
|
if (c == QLatin1Char('n'))
|
||||||
|
result.append(QLatin1Char('\n'));
|
||||||
|
else if (c == QLatin1Char('t'))
|
||||||
|
result.append(QLatin1Char('\t'));
|
||||||
|
else if (c != QLatin1Char('\n'))
|
||||||
|
result.append(c);
|
||||||
|
isEscaped = false;
|
||||||
|
} else {
|
||||||
|
if (c == QLatin1Char('\\'))
|
||||||
|
isEscaped = true;
|
||||||
|
else
|
||||||
|
result.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void JsonWizard::accept()
|
void JsonWizard::accept()
|
||||||
{
|
{
|
||||||
auto page = qobject_cast<Utils::WizardPage *>(currentPage());
|
auto page = qobject_cast<Utils::WizardPage *>(currentPage());
|
||||||
|
|||||||
@@ -86,6 +86,9 @@ public:
|
|||||||
|
|
||||||
QHash<QString, QVariant> variables() const override;
|
QHash<QString, QVariant> variables() const override;
|
||||||
|
|
||||||
|
static QString processText(Utils::MacroExpander *expander, const QString &input,
|
||||||
|
QString *errorMessage);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void preGenerateFiles(); // emitted before files are generated (can happen several times!)
|
void preGenerateFiles(); // emitted before files are generated (can happen several times!)
|
||||||
void postGenerateFiles(const JsonWizard::GeneratorFiles &files); // emitted after commitToFileList was called.
|
void postGenerateFiles(const JsonWizard::GeneratorFiles &files); // emitted after commitToFileList was called.
|
||||||
|
|||||||
@@ -30,7 +30,6 @@
|
|||||||
|
|
||||||
#include "jsonwizardfilegenerator.h"
|
#include "jsonwizardfilegenerator.h"
|
||||||
|
|
||||||
#include "../customwizard/customwizardpreprocessor.h"
|
|
||||||
#include "../projectexplorer.h"
|
#include "../projectexplorer.h"
|
||||||
#include "jsonwizard.h"
|
#include "jsonwizard.h"
|
||||||
#include "jsonwizardfactory.h"
|
#include "jsonwizardfactory.h"
|
||||||
@@ -48,51 +47,6 @@
|
|||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
static QString processTextFileContents(Utils::MacroExpander *expander,
|
|
||||||
const QString &input, QString *errorMessage)
|
|
||||||
{
|
|
||||||
errorMessage->clear();
|
|
||||||
|
|
||||||
if (input.isEmpty())
|
|
||||||
return input;
|
|
||||||
|
|
||||||
// Recursively expand macros:
|
|
||||||
QString in = input;
|
|
||||||
QString oldIn;
|
|
||||||
for (int i = 0; i < 5 && in != oldIn; ++i) {
|
|
||||||
oldIn = in;
|
|
||||||
in = expander->expand(oldIn);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString out;
|
|
||||||
if (!customWizardPreprocess(in, &out, errorMessage))
|
|
||||||
return QString();
|
|
||||||
|
|
||||||
// Expand \n, \t and handle line continuation:
|
|
||||||
QString result;
|
|
||||||
result.reserve(out.count());
|
|
||||||
bool isEscaped = false;
|
|
||||||
for (int i = 0; i < out.count(); ++i) {
|
|
||||||
const QChar c = out.at(i);
|
|
||||||
|
|
||||||
if (isEscaped) {
|
|
||||||
if (c == QLatin1Char('n'))
|
|
||||||
result.append(QLatin1Char('\n'));
|
|
||||||
else if (c == QLatin1Char('t'))
|
|
||||||
result.append(QLatin1Char('\t'));
|
|
||||||
else if (c != QLatin1Char('\n'))
|
|
||||||
result.append(c);
|
|
||||||
isEscaped = false;
|
|
||||||
} else {
|
|
||||||
if (c == QLatin1Char('\\'))
|
|
||||||
isEscaped = true;
|
|
||||||
else
|
|
||||||
result.append(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool JsonWizardFileGenerator::setup(const QVariant &data, QString *errorMessage)
|
bool JsonWizardFileGenerator::setup(const QVariant &data, QString *errorMessage)
|
||||||
{
|
{
|
||||||
QVariantList list = JsonWizardFactory::objectOrList(data, errorMessage);
|
QVariantList list = JsonWizardFactory::objectOrList(data, errorMessage);
|
||||||
@@ -210,7 +164,8 @@ Core::GeneratedFiles JsonWizardFileGenerator::fileList(Utils::MacroExpander *exp
|
|||||||
});
|
});
|
||||||
nested.registerExtraResolver([expander](QString n, QString *ret) { return expander->resolveMacro(n, ret); });
|
nested.registerExtraResolver([expander](QString n, QString *ret) { return expander->resolveMacro(n, ret); });
|
||||||
|
|
||||||
gf.setContents(processTextFileContents(&nested, QString::fromUtf8(reader.data()), errorMessage));
|
gf.setContents(JsonWizard::processText(&nested, QString::fromUtf8(reader.data()),
|
||||||
|
errorMessage));
|
||||||
if (!errorMessage->isEmpty()) {
|
if (!errorMessage->isEmpty()) {
|
||||||
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonWizard", "When processing \"%1\":<br>%2")
|
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonWizard", "When processing \"%1\":<br>%2")
|
||||||
.arg(sourcePath, *errorMessage);
|
.arg(sourcePath, *errorMessage);
|
||||||
|
|||||||
Reference in New Issue
Block a user