diff --git a/src/plugins/texteditor/generichighlighter/highlighter.cpp b/src/plugins/texteditor/generichighlighter/highlighter.cpp index 89150ac6d4c..d3c0b47d506 100644 --- a/src/plugins/texteditor/generichighlighter/highlighter.cpp +++ b/src/plugins/texteditor/generichighlighter/highlighter.cpp @@ -45,6 +45,7 @@ namespace { static const QLatin1String kPop("#pop"); static const QLatin1Char kBackSlash('\\'); static const QLatin1Char kHash('#'); + static const QLatin1Char kExclamationMark('!'); } class HighlighterCodeFormatterData : public CodeFormatterData @@ -414,8 +415,13 @@ void Highlighter::changeContext(const QString &contextName, const QSharedPointer &definition, const bool assignCurrent) { - if (contextName.startsWith(kPop)) { - const int count = contextName.splitRef(kHash, QString::SkipEmptyParts).size(); + QString identifier = contextName; + if (identifier.startsWith(kPop)) { + const QStringList complexOrder = contextName.split(kExclamationMark); + const QString orders = complexOrder.first(); + identifier = complexOrder.size() > 1 ? complexOrder[1] : QString(); + + const int count = orders.splitRef(kHash, QString::SkipEmptyParts).size(); for (int i = 0; i < count; ++i) { if (m_contexts.isEmpty()) { throw HighlighterException( @@ -434,8 +440,9 @@ void Highlighter::changeContext(const QString &contextName, setCurrentBlockState( computeState(m_leadingObservableStates.value(currentSequence))); } - } else { - const QSharedPointer &context = definition->context(contextName); + } + if (!identifier.isEmpty()) { + const QSharedPointer &context = definition->context(identifier); if (context->isDynamic()) pushDynamicContext(context);