1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
#pragma once
#include "utils_global.h"
#include <QCoreApplication>
#include <QList>
#include <QVector>
#include <functional>
namespace Utils {
namespace Internal { class MacroExpanderPrivate; }
class FilePath;
class MacroExpander;
using MacroExpanderProvider = std::function<MacroExpander *()>;
using MacroExpanderProviders = QVector<MacroExpanderProvider>;
class QTCREATOR_UTILS_EXPORT MacroExpander
{
Q_DECLARE_TR_FUNCTIONS(Utils::MacroExpander)
Q_DISABLE_COPY(MacroExpander)
public:
explicit MacroExpander();
~MacroExpander();
bool resolveMacro(const QString &name, QString *ret) const;
QString value(const QByteArray &variable, bool *found = nullptr) const;
QString expand(const QString &stringWithVariables) const;
FilePath expand(const FilePath &fileNameWithVariables) const;
QByteArray expand(const QByteArray &stringWithVariables) const;
QVariant expandVariant(const QVariant &v) const;
QString expandProcessArgs(const QString &argsWithVariables) const;
using PrefixFunction = std::function<QString(QString)>;
using ResolverFunction = std::function<bool(QString, QString *)>;
using StringFunction = std::function<QString()>;
using FileFunction = std::function<FilePath()>;
using IntFunction = std::function<int()>;
void registerPrefix(const QByteArray &prefix,
const QString &description, const PrefixFunction &value, bool visible = true);
void registerVariable(const QByteArray &variable,
const QString &description, const StringFunction &value,
bool visibleInChooser = true);
void registerIntVariable(const QByteArray &variable,
const QString &description, const IntFunction &value);
void registerFileVariables(const QByteArray &prefix,
const QString &heading, const FileFunction &value,
bool visibleInChooser = true);
void registerExtraResolver(const ResolverFunction &value);
QList<QByteArray> visibleVariables() const;
QString variableDescription(const QByteArray &variable) const;
bool isPrefixVariable(const QByteArray &variable) const;
MacroExpanderProviders subProviders() const;
QString displayName() const;
void setDisplayName(const QString &displayName);
void registerSubProvider(const MacroExpanderProvider &provider);
bool isAccumulating() const;
void setAccumulating(bool on);
private:
friend class Internal::MacroExpanderPrivate;
Internal::MacroExpanderPrivate *d;
};
QTCREATOR_UTILS_EXPORT MacroExpander *globalMacroExpander();
} // namespace Utils
|