# 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 :)