<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<language name="Test" version="1.00" kateversion="2.3" section="Sources" extensions="*.test" priority="5">
<highlighting>
<contexts>
<context attribute="Normal Text" lineEndContext="#stay" name="Normal">
<RegExpr attribute="Variable" context="VarEq" String="^\w+(?=\s*=)"/>
<RegExpr attribute="Keyword" context="#pop" String="^FIN_\w+" endRegion="Bloc" />
<RegExpr attribute="Keyword" context="Normal" String="^DEBUT_\w+" beginRegion="Bloc" />
</context>
<context attribute="Symbol" lineEndContext="#pop" name="VarEq" fallthrough="true" fallthroughContext="VarDecl">
<RegExpr attribute="Symbol" context="#stay" String="\s|="/>
</context>
<context attribute="Value" lineEndContext="#pop#pop" name="VarDecl">
<RegExpr attribute="Keyword" context="#stay" String="\\[^\\]*\\" />
<DetectChar attribute="Backslash" context="#stay" char="\" />
<DetectChar attribute="Symbol" context="#pop#pop" char=";" />
</context>
</contexts>
<itemDatas>
<itemData name="Normal Text" defStyleNum="dsNormal"/>
<itemData name="Keyword" defStyleNum="dsKeyword"/>
<itemData name="BackSlash" defStyleNum="dsFunction"/>
<itemData name="Value" defStyleNum="dsString"/>
<itemData name="Variable" defStyleNum="dsChar"/>
<itemData name="Comment" defStyleNum="dsComment"/>
<itemData name="Symbol" defStyleNum="dsNormal"/>
<itemData name="Alert" defStyleNum="dsAlert" />
</itemDatas>
</highlighting>
</language> |
Voici un exemple qui donne un premier résultat. C'est une sorte de machine à états : elle commence dans le premier context avec l'attribut "Normal Text". Ensuite elle regarde si une des règle s'applique. Exemple: détection de la regexpr ^\w+(?=\s*=) (i.e. une chaîne de caractères suivie d'un signe égal, sans capturer le signe égal) et en cas de détection, elle saute dans le nouveau contexte en empilant l'ancien...
On est alors dans le contexte VarEq et le processus recommence. Si elle trouve eds espaces ou des =, elle les colorie. Sinon, comme aucune règle ne s'est appliquée, elle part dans le contexte de "fallback".
On est alors dans le contexte VarDecl. Ici aussi quelques règles pour colorier les \ et les \blabla\. Et une règle qui capture le ; et remonte de deux étages dans la pile de contexte (=> retour au contexte initial).
Message édité par djdie le 13-10-2004 à 23:58:57