diff --git a/data/schema/language.xsd b/data/schema/language.xsd --- a/data/schema/language.xsd +++ b/data/schema/language.xsd @@ -399,10 +399,6 @@ --> - - - - @@ -453,10 +449,6 @@ --> - - - - diff --git a/data/syntax/actionscript.xml b/data/syntax/actionscript.xml --- a/data/syntax/actionscript.xml +++ b/data/syntax/actionscript.xml @@ -1,6 +1,6 @@ - + @@ -253,21 +253,10 @@ - - - + - - - - - - - - - - + @@ -283,6 +272,19 @@ + + + + + + + + + + + + + @@ -331,4 +333,4 @@ - \ No newline at end of file + diff --git a/data/syntax/ahk.xml b/data/syntax/ahk.xml --- a/data/syntax/ahk.xml +++ b/data/syntax/ahk.xml @@ -1,7 +1,7 @@ @@ -1007,29 +1007,33 @@ - - - + - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/data/syntax/ample.xml b/data/syntax/ample.xml --- a/data/syntax/ample.xml +++ b/data/syntax/ample.xml @@ -1,6 +1,6 @@ - + - + def @@ -736,14 +736,16 @@ - - - - - - + + + + + + + + diff --git a/data/syntax/crk.xml b/data/syntax/crk.xml --- a/data/syntax/crk.xml +++ b/data/syntax/crk.xml @@ -1,6 +1,6 @@ - + break @@ -45,21 +45,10 @@ - - - + - - - - - - - - - - + @@ -76,6 +65,21 @@ + + + + + + + + + + + + + + + diff --git a/data/syntax/cs.xml b/data/syntax/cs.xml --- a/data/syntax/cs.xml +++ b/data/syntax/cs.xml @@ -1,5 +1,5 @@ - + abstract @@ -94,21 +94,10 @@ - - - + - - - - - - - - - - + @@ -127,6 +116,19 @@ + + + + + + + + + + + + + diff --git a/data/syntax/ferite.xml b/data/syntax/ferite.xml --- a/data/syntax/ferite.xml +++ b/data/syntax/ferite.xml @@ -1,6 +1,6 @@ - + break @@ -37,29 +37,31 @@ - - - + - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/data/syntax/fgl-4gl.xml b/data/syntax/fgl-4gl.xml --- a/data/syntax/fgl-4gl.xml +++ b/data/syntax/fgl-4gl.xml @@ -1,6 +1,6 @@ - + at @@ -268,21 +268,10 @@ - - - + - - - - - - - - - - + @@ -294,6 +283,19 @@ + + + + + + + + + + + + + diff --git a/data/syntax/fgl-per.xml b/data/syntax/fgl-per.xml --- a/data/syntax/fgl-per.xml +++ b/data/syntax/fgl-per.xml @@ -1,6 +1,6 @@ - + by @@ -81,21 +81,10 @@ - - - + - - - - - - - - - - + @@ -106,6 +95,19 @@ + + + + + + + + + + + + + diff --git a/data/syntax/groovy.xml b/data/syntax/groovy.xml --- a/data/syntax/groovy.xml +++ b/data/syntax/groovy.xml @@ -3,7 +3,7 @@ - + ACTIVE @@ -3769,21 +3769,10 @@ - - - + - - - - - - - - - - + @@ -3805,6 +3794,19 @@ + + + + + + + + + + + + + diff --git a/data/syntax/ilerpg.xml b/data/syntax/ilerpg.xml --- a/data/syntax/ilerpg.xml +++ b/data/syntax/ilerpg.xml @@ -45,7 +45,7 @@ --> - + EXTPROC @@ -580,16 +580,18 @@ - - - - - - - - - - + + + + + + + + + + + + diff --git a/data/syntax/jsp.xml b/data/syntax/jsp.xml --- a/data/syntax/jsp.xml +++ b/data/syntax/jsp.xml @@ -1,6 +1,6 @@ - + @@ -2912,21 +2912,10 @@ - - - + - - - - - - - - - - + @@ -2938,28 +2927,32 @@ + + + + + + + + + + + + + + + - - - + - - - - - - - - - - + diff --git a/data/syntax/kotlin.xml b/data/syntax/kotlin.xml --- a/data/syntax/kotlin.xml +++ b/data/syntax/kotlin.xml @@ -1,7 +1,7 @@ - + package @@ -114,20 +114,24 @@ - - - - - - + + + + + + + + + + diff --git a/data/syntax/ld.xml b/data/syntax/ld.xml --- a/data/syntax/ld.xml +++ b/data/syntax/ld.xml @@ -1,7 +1,7 @@ - + AT @@ -42,19 +42,20 @@ - - - - - + + + + + + diff --git a/data/syntax/lpc.xml b/data/syntax/lpc.xml --- a/data/syntax/lpc.xml +++ b/data/syntax/lpc.xml @@ -16,7 +16,7 @@ --> - + @@ -84,9 +84,7 @@ - - - + @@ -97,6 +95,9 @@ + + + diff --git a/data/syntax/nesc.xml b/data/syntax/nesc.xml --- a/data/syntax/nesc.xml +++ b/data/syntax/nesc.xml @@ -1,6 +1,6 @@ - + break @@ -88,21 +88,10 @@ - - - + - - - - - - - - - - + @@ -113,6 +102,19 @@ + + + + + + + + + + + + + diff --git a/data/syntax/objectivec.xml b/data/syntax/objectivec.xml --- a/data/syntax/objectivec.xml +++ b/data/syntax/objectivec.xml @@ -1,6 +1,6 @@ - + break @@ -57,29 +57,31 @@ - - - + - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/data/syntax/objectivecpp.xml b/data/syntax/objectivecpp.xml --- a/data/syntax/objectivecpp.xml +++ b/data/syntax/objectivecpp.xml @@ -1,6 +1,6 @@ - + break @@ -173,21 +173,10 @@ - - - + - - - - - - - - - - + @@ -204,6 +193,19 @@ + + + + + + + + + + + + + diff --git a/data/syntax/opencl.xml b/data/syntax/opencl.xml --- a/data/syntax/opencl.xml +++ b/data/syntax/opencl.xml @@ -1,7 +1,7 @@ - - - + - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/data/syntax/pig.xml b/data/syntax/pig.xml --- a/data/syntax/pig.xml +++ b/data/syntax/pig.xml @@ -1,7 +1,7 @@ - + load @@ -128,16 +128,18 @@ - - - + + + + + diff --git a/data/syntax/protobuf.xml b/data/syntax/protobuf.xml --- a/data/syntax/protobuf.xml +++ b/data/syntax/protobuf.xml @@ -1,6 +1,6 @@ - + message @@ -54,18 +54,22 @@ - - - + - - - + + + + + + + + + diff --git a/data/syntax/python.xml b/data/syntax/python.xml --- a/data/syntax/python.xml +++ b/data/syntax/python.xml @@ -14,7 +14,7 @@ - + import @@ -346,9 +346,7 @@ - - - + @@ -368,6 +366,10 @@ + + + + diff --git a/data/syntax/scala.xml b/data/syntax/scala.xml --- a/data/syntax/scala.xml +++ b/data/syntax/scala.xml @@ -1,6 +1,6 @@ - - - - - - - - - - - - - - + + + @@ -348,6 +337,21 @@ + + + + + + + + + + + + + + + diff --git a/data/syntax/uscript.xml b/data/syntax/uscript.xml --- a/data/syntax/uscript.xml +++ b/data/syntax/uscript.xml @@ -1,6 +1,6 @@ - + break @@ -116,21 +116,10 @@ - - - + - - - - - - - - - - + @@ -143,6 +132,19 @@ + + + + + + + + + + + + + diff --git a/data/syntax/vala.xml b/data/syntax/vala.xml --- a/data/syntax/vala.xml +++ b/data/syntax/vala.xml @@ -22,7 +22,7 @@ * Boston, MA 02110-1301, USA. * ********************************************************************** --> - + abstract @@ -141,26 +141,33 @@ - - - + - - - - - - - + + + + + + + + + + + + + + + + diff --git a/src/lib/abstracthighlighter.cpp b/src/lib/abstracthighlighter.cpp --- a/src/lib/abstracthighlighter.cpp +++ b/src/lib/abstracthighlighter.cpp @@ -180,7 +180,7 @@ continue; } - const auto newResult = rule->match(text, offset, stateData->topCaptures()); + const auto newResult = rule->doMatch(text, offset, stateData->topCaptures()); newOffset = newResult.offset(); /** diff --git a/src/lib/rule.cpp b/src/lib/rule.cpp --- a/src/lib/rule.cpp +++ b/src/lib/rule.cpp @@ -162,39 +162,14 @@ if (m_lookAhead && m_context.isStay()) result = false; - reader.readNext(); - while (!reader.atEnd()) { - switch (reader.tokenType()) { - case QXmlStreamReader::StartElement: - { - auto rule = Rule::create(reader.name()); - if (rule) { - rule->setDefinition(m_def.definition()); - if (rule->load(reader)) { - m_subRules.push_back(rule); - reader.readNext(); - } - } else { - reader.skipCurrentElement(); - } - break; - } - case QXmlStreamReader::EndElement: - return result; - default: - reader.readNext(); - break; - } - } - + // be done with this rule, skip all subelements, e.g. no longer supported sub-rules + reader.skipCurrentElement(); return result; } void Rule::resolveContext() { m_context.resolve(m_def.definition()); - foreach (const auto &rule, m_subRules) - rule->resolveContext(); } void Rule::resolveAttributeFormat(Context *lookupContext) @@ -208,38 +183,14 @@ qCWarning(Log) << "Rule: Unknown format" << m_attribute << "in context" << lookupContext->name() << "of definition" << definition().name(); } } - - /** - * lookup formats for our sub-rules - */ - foreach (const auto &rule, m_subRules) { - rule->resolveAttributeFormat(lookupContext); - } } bool Rule::doLoad(QXmlStreamReader& reader) { Q_UNUSED(reader); return true; } -MatchResult Rule::match(const QString &text, int offset, const QStringList &captures) const -{ - Q_ASSERT(!text.isEmpty()); - - const auto result = doMatch(text, offset, captures); - if (result.offset() == offset || result.offset() == text.size()) - return result; - - foreach (const auto &subRule, m_subRules) { - const auto subResult = subRule->match(text, result.offset(), QStringList()); - if (subResult.offset() > result.offset()) - return MatchResult(subResult.offset(), result.captures()); - } - - return result; -} - Rule::Ptr Rule::create(const QStringRef& name) { Rule *rule = nullptr; diff --git a/src/lib/rule_p.h b/src/lib/rule_p.h --- a/src/lib/rule_p.h +++ b/src/lib/rule_p.h @@ -70,13 +70,12 @@ void resolveContext(); void resolveAttributeFormat(Context *lookupContext); - MatchResult match(const QString &text, int offset, const QStringList &captures) const; + virtual MatchResult doMatch(const QString &text, int offset, const QStringList &captures) const = 0; static Rule::Ptr create(const QStringRef &name); protected: virtual bool doLoad(QXmlStreamReader &reader); - virtual MatchResult doMatch(const QString &text, int offset, const QStringList &captures) const = 0; bool isWordDelimiter(QChar c) const; @@ -87,7 +86,6 @@ QString m_attribute; Format m_attributeFormat; ContextSwitch m_context; - QVector m_subRules; int m_column = -1; FoldingRegion m_beginRegion; FoldingRegion m_endRegion;