summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2016-07-03 22:02:05 +0300
committerOrgad Shaneh <orgads@gmail.com>2016-07-18 13:15:58 +0000
commit3be096f1524ee8009400053823e4332fedb1df0c (patch)
treebec03d7a8b0da3a92560af764d31f78a2905c69f
parenteece696da383bdcd55e7d3d8a51b5226b3d3419f (diff)
downloadqt-creator-3be096f1524ee8009400053823e4332fedb1df0c.tar.gz
Utils: Support default value substitution in macro expansion
Syntax is similar to bash substitution: %{variable:-default} Change-Id: I50e4e18a186c5408dc8b7b95cebbf891d13e03bf Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: hjk <hjk@qt.io>
-rw-r--r--src/libs/utils/stringutils.cpp9
-rw-r--r--tests/auto/utils/stringutils/tst_stringutils.cpp1
2 files changed, 10 insertions, 0 deletions
diff --git a/src/libs/utils/stringutils.cpp b/src/libs/utils/stringutils.cpp
index 274a8bfb7c..3b2de69ec7 100644
--- a/src/libs/utils/stringutils.cpp
+++ b/src/libs/utils/stringutils.cpp
@@ -128,6 +128,7 @@ bool AbstractMacroExpander::expandNestedMacros(const QString &str, int *pos, QSt
{
QString varName;
QString pattern, replace;
+ QString defaultValue;
QString *currArg = &varName;
QChar prev;
QChar c;
@@ -172,12 +173,20 @@ bool AbstractMacroExpander::expandNestedMacros(const QString &str, int *pos, QSt
}
return true;
}
+ if (!defaultValue.isEmpty()) {
+ *pos = i;
+ *ret = defaultValue;
+ return true;
+ }
return false;
} else if (c == '{' && prev == '%') {
if (!expandNestedMacros(str, &i, ret))
return false;
varName.chop(1);
varName += ret;
+ } else if (currArg == &varName && c == '-' && prev == ':' && validateVarName(varName)) {
+ varName.chop(1);
+ currArg = &defaultValue;
} else if (currArg == &varName && c == '/' && validateVarName(varName)) {
currArg = &pattern;
if (i < strLen && str.at(i) == '/') {
diff --git a/tests/auto/utils/stringutils/tst_stringutils.cpp b/tests/auto/utils/stringutils/tst_stringutils.cpp
index 972d0b35d5..051baf3470 100644
--- a/tests/auto/utils/stringutils/tst_stringutils.cpp
+++ b/tests/auto/utils/stringutils/tst_stringutils.cpp
@@ -153,6 +153,7 @@ void tst_StringUtils::testMacroExpander_data()
{ "%{sl\\/sh/(.)(a)(.)/\\2\\1\\3as}", "salsash" }, // escape in variable name
{ "%{JS:foo/b/c}", "%{JS:foo/b/c}" }, // No replacement for JS (all considered varName)
{ "%{%{a}%{a}/b/c}", "car" },
+ { "%{nonsense:-sense}", "sense" },
};
for (unsigned i = 0; i < sizeof(vals)/sizeof(vals[0]); i++)