Kate Highlighting Power
Kate’s highlighting capabilities are amazing. If you want you can highlight really complex syntax, without having to hardcode rules in C++. As an example, we’ll take a look at how Lua comments can be realized:
- –[=[ starts a multiline comment (the ‘=’ chars are optional)
- ]=] ends the multiline comment
- the number of ‘=’ chars in ]=] must match the number of –[=[
That means: When the highlighting processor matches the end of a multiline comment, it has to know how many ‘=’ chars started the comment. Thanks to the concept of dynamic rules and contexts Kate is able to do that. The highlighting file looks like this. First comes the header
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE language SYSTEM "language.dtd" > <language name="Test" version="1.0" kateversion="2.4" section="Markup" extensions="" mimetype=""> <highlighting>
Then the body with the contexts. We start in the first context called “Normal Text”. When the regular expression –[(=*)[ matches it switches to the context Comment.
<contexts> <context attribute="Normal Text" lineEndContext="#stay" name="Normal"> <RegExpr attribute="Comment" context="Comment" String="--\[(=*)\[" dynamic="true"/> </context>
The part (=*) is now available as %1 in the rule below:
<context name="Comment" attribute="Comment" lineEndContext="#stay" dynamic="true" > <RegExpr attribute="Comment" context="#pop" String="\]%1\]" dynamic="true" /> </context> </contexts>
The last part is the footer:
<itemDatas> <itemData name="Normal Text" defStyleNum="dsNormal" /> <itemData name="Comment" defStyleNum="dsComment" /> </itemDatas> </highlighting> </language>
If you want to know more about Kate’s highlighting, have a look at the documentation :) There are also lots of bug reports, so if you want to contribute you can fix them!
PS: As I don’t know much about Lua, comments might work differently. That does not really matter, as the example still shows what you can do :)