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;