QStringList splitOutsideQuotes(const QString& text)
{
- const QRegularExpression subTermsRegExp("(\\S*?\"[^\"]*?\"|(?<=\\s|^)\\S+(?=\\s|$))");
+ // Match groups on 3 possible conditions:
+ // - Groups with two leading quotes must close both on them (filename:""abc xyz" tuv")
+ // - Groups enclosed in quotes
+ // - Words separated by spaces
+ const QRegularExpression subTermsRegExp("(\\S*?\"\"[^\"]+\"[^\"]+\"+|\\S*?\"[^\"]+\"+|(?<=\\s|^)\\S+(?=\\s|$))");
auto subTermsMatchIterator = subTermsRegExp.globalMatch(text);
QStringList textParts;
return textParts;
}
#endif
+
+ QString trimChar(const QString& text, const QLatin1Char aChar)
+ {
+ const int start = text.startsWith(aChar) ? 1 : 0;
+ const int end = (text.length() > 1 && text.endsWith(aChar)) ? 1 : 0;
+
+ return text.mid(start, text.length() - start - end);
+ }
}
if (searchUrl.scheme() == QLatin1String("baloosearch")) {
model.parseBalooQuery();
+ } else if (searchUrl.scheme() == QLatin1String("tags")) {
+ // tags can contain # symbols or slashes within the Url
+ QString tag = trimChar(searchUrl.toString(QUrl::RemoveScheme), QLatin1Char('/'));
+ model.m_searchTerms << QStringLiteral("tag:%1").arg(tag);
}
return model;
{
static const QStringList supportedSchemes = {
QStringLiteral("baloosearch"),
+ QStringLiteral("tags"),
};
return supportedSchemes.contains(urlScheme);