[prev in list] [next in list] [prev in thread] [next in thread]
List: kwrite-devel
Subject: CubeScript Highlighter
From: Kevin Meyer <billy65bob () gmail ! com>
Date: 2011-07-19 9:34:49
Message-ID: CANVAkGjqPcff6gOkpv5PxGnwrSDvOjw09m+aYmgMurZ-1J6CnQ () mail ! gmail ! com
[Download RAW message or body]
Greetings
I spent about 8 or so hours wrestling with the XML (it really wasn't
much fun to work with) yesterday to try and get a basic and
functioning highlighter for kate (should be attached) and it my
opinion it shaped up quite nicely.
So to cut to the chase, what can I do to improve the ruleset and get
it included officially?
Regards
~Kevin
["cubescript.xml" (text/xml)]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<!--
This is an attempt to write a quick and dirty syntax file for Cubescript.
This will not attempt to highlight most keywords nor document most internal \
commands it should be noted that it takes a lot of inspiration from Lisp
-->
<language name="CubeScript" section="Scripts" version="0.01" kateversion="2.3" \
extensions=".cfg" mimetype="" author="Kevin Meyer" license="zlib/libpng"> \
<highlighting> <!-- There are far more commands than these, these are just \
guaranteed to be in all forks --> <list name="commands">
<item> ? </item>
<item> alias </item>
<item> at </item>
<item> case </item>
<item> casef </item>
<item> cases </item>
<item> clearconsole </item>
<item> clearsleep </item>
<item> complete </item>
<item> concat </item>
<item> concatword </item>
<item> cond </item>
<item> conskip </item>
<item> echo </item>
<item> error </item>
<item> exec </item>
<item> format </item>
<item> getalias </item>
<item> getfvarmin </item>
<item> getfvarmax </item>
<item> getvarmin </item>
<item> getvarmax </item>
<item> history </item>
<item> if </item>
<item> indexof </item>
<item> inputcommand </item>
<item> keymap </item>
<item> listcomplete </item>
<item> listdel </item>
<item> listfind </item>
<item> listlen </item>
<item> loop </item>
<item> loopfiles </item>
<item> looplist </item>
<item> loopwhile </item>
<item> miniconskip </item>
<item> nodebug </item>
<item> onrelease </item>
<item> prettylist </item>
<item> push </item>
<item> resetvar </item>
<item> result </item>
<item> rnd </item>
<item> saycommand </item>
<item> searchbinds </item>
<item> searcheditbinds </item>
<item> searchspecbinds </item>
<item> sleep </item>
<item> strcmp </item>
<item> strlen </item>
<item> strreplace </item>
<item> strstr </item>
<item> sublist </item>
<item> substr </item>
<item> toggleconsole </item>
<item> while </item>
<item> writecfg </item>
</list>
<list name="bindcommands">
<item> bind </item>
<item> editbind </item>
<item> specbind </item>
<item> getbind </item>
<item> geteditbind </item>
<item> getspecbind </item>
</list>
<list name="operators">
<!-- listed in the same order as in src/engine/command.cpp -->
<item> + </item>
<item> * </item>
<item> - </item>
<item> +f </item>
<item> *f </item>
<item> -f </item>
<item> = </item>
<item> != </item>
<item> > </item>
<item> < </item>
<item> >= </item>
<item> <= </item>
<item> =f </item>
<item> !=f </item>
<item> >f </item>
<item> <f </item>
<item> >=f </item>
<item> <=f </item>
<item> ^ </item>
<item> ! </item>
<item> & </item>
<item> | </item>
<item> ~ </item>
<item> ^~ </item>
<item> &~ </item>
<item> |~ </item>
<item> << </item>
<item> >> </item>
<item> && </item>
<item> || </item>
<item> div </item>
<item> mod </item>
<item> divf </item>
<item> modf </item>
<item> sin </item>
<item> cos </item>
<item> tan </item>
<item> asin </item>
<item> acos </item>
<item> atan </item>
<item> sqrt </item>
<item> pow </item>
<item> loge </item>
<item> log2 </item>
<item> log10 </item>
<item> exp </item>
<item> min </item>
<item> max </item>
<item> minf </item>
<item> maxf </item>
<item> =s </item>
<item> !=s </item>
<item> <s </item>
<item> >s </item>
<item> <=s </item>
<item> >=s </item>
</list>
<list name="keys">
<item> MOUSE1 </item>
<item> MOUSE2 </item>
<item> MOUSE3 </item>
<item> MOUSE4 </item>
<item> MOUSE5 </item>
<item> BACKSPACE </item>
<item> TAB </item>
<item> CLEAR </item>
<item> RETURN </item>
<item> PAUSE </item>
<item> ESCAPE </item>
<item> SPACE </item>
<item> EXCLAIM </item>
<item> QUOTEDBL </item>
<item> HASH </item>
<item> DOLLAR </item>
<item> AMPERSAND </item>
<item> QUOTE </item>
<item> LEFTPAREN </item>
<item> RIGHTPAREN </item>
<item> ASTERISK </item>
<item> PLUS </item>
<item> COMMA </item>
<item> MINUS </item>
<item> PERIOD </item>
<item> SLASH </item>
<item> 0 </item>
<item> 1 </item>
<item> 2 </item>
<item> 3 </item>
<item> 4 </item>
<item> 5 </item>
<item> 6 </item>
<item> 7 </item>
<item> 8 </item>
<item> 9 </item>
<item> COLON </item>
<item> SEMICOLON </item>
<item> LESS </item>
<item> EQUALS </item>
<item> GREATER </item>
<item> QUESTION </item>
<item> AT </item>
<item> LEFTBRACKET </item>
<item> BACKSLASH </item>
<item> RIGHTBRACKET </item>
<item> CARET </item>
<item> UNDERSCORE </item>
<item> BACKQUOTE </item>
<item> A </item>
<item> B </item>
<item> C </item>
<item> D </item>
<item> E </item>
<item> F </item>
<item> G </item>
<item> H </item>
<item> I </item>
<item> J </item>
<item> K </item>
<item> L </item>
<item> M </item>
<item> N </item>
<item> O </item>
<item> P </item>
<item> Q </item>
<item> R </item>
<item> S </item>
<item> T </item>
<item> U </item>
<item> V </item>
<item> W </item>
<item> X </item>
<item> Y </item>
<item> Z </item>
<item> DELETE </item>
<item> KP0 </item>
<item> KP1 </item>
<item> KP2 </item>
<item> KP3 </item>
<item> KP4 </item>
<item> KP5 </item>
<item> KP6 </item>
<item> KP7 </item>
<item> KP8 </item>
<item> KP9 </item>
<item> KP_PERIOD </item>
<item> KP_DIVIDE </item>
<item> KP_MULTIPLY </item>
<item> KP_MINUS </item>
<item> KP_PLUS </item>
<item> KP_ENTER </item>
<item> KP_EQUALS </item>
<item> UP </item>
<item> DOWN </item>
<item> RIGHT </item>
<item> LEFT </item>
<item> INSERT </item>
<item> HOME </item>
<item> END </item>
<item> PAGEUP </item>
<item> PAGEDOWN </item>
<item> F1 </item>
<item> F2 </item>
<item> F3 </item>
<item> F4 </item>
<item> F5 </item>
<item> F6 </item>
<item> F7 </item>
<item> F8 </item>
<item> F9 </item>
<item> F10 </item>
<item> F11 </item>
<item> F12 </item>
<item> F13 </item>
<item> F14 </item>
<item> F15 </item>
<item> NUMLOCK </item>
<item> CAPSLOCK </item>
<item> SCROLLOCK </item>
<item> RSHIFT </item>
<item> LSHIFT </item>
<item> RCTRL </item>
<item> LCTRL </item>
<item> RALT </item>
<item> LALT </item>
<item> RMETA </item>
<item> LMETA </item>
<item> LSUPER </item>
<item> RSUPER </item>
<item> MODE </item>
<item> COMPOSE </item>
<item> HELP </item>
<item> PRINT </item>
<item> SYSREQ </item>
<item> BREAK </item>
<item> MENU </item>
</list>
<!--
TODO list for Cubescript
1) populate above lists
2) figure out what's up with operators - plenty aren't hightlighted
3) do better validation checking for variables - cubescript doesn't really \
give a damn so this is difficult
-->
<contexts>
<context name="Normal" attribute="Normal" lineEndContext="#stay">
<DetectSpaces />
<Detect2Chars attribute="Comment" context="Comment" char="/" char1="/"/>
<DetectChar attribute="Brackets" context="#stay" char="[" \
beginRegion="Block"/>
<DetectChar attribute="Brackets" context="#stay" char="]" endRegion="Block"/>
<DetectChar attribute="Brackets" context="#stay" char="(" \
beginRegion="Curly"/>
<DetectChar attribute="Brackets" context="#stay" char=")" endRegion="Curly"/>
<DetectChar attribute="String" context="String" char=""" />
<DetectChar attribute="Lookup" context="LookupNormal" char="$" />
<DetectChar attribute="Lookup" context="LookupNormal" char="@" />
<keyword attribute="Keyword" context="#stay" String="commands"/>
<keyword attribute="Keyword" context="Bind" String="bindcommands"/>
<keyword attribute="Operator" context="#stay" String="operators"/>
<HlCHex attribute="Int" context="#stay"/>
<HlCOct attribute="Int" context="#stay"/>
<Float attribute="Float" context="#stay" />
<Int attribute="Int" context="#stay"/>
</context>
<context attribute="Comment" lineEndContext="Normal" name="Comment"/>
<context name="Bind" attribute="Error" lineEndContext="#pop">
<DetectSpaces attribute="Normal" context="#stay" />
<keyword attribute="Key" context="#pop" String="keys" />
<AnyChar attribute="Lookup" context="LookupNormal" String="$@" />
<RegExpr firstNonSpace="true" attribute="Error" context="#pop" \
String="[\d\w]*" /> </context>
<context attribute="String" lineEndContext="Normal" name="String">
<Detect2Chars attribute="Escaped" context="#stay" char="^" char1="t" />
<Detect2Chars attribute="Escaped" context="#stay" char="^" char1="n" />
<Detect2Chars attribute="Escaped" context="#stay" char="^" char1="""/>
<Detect2Chars attribute="Escaped" context="#stay" char="^" char1="f" />
<DetectChar attribute="Lookup" context="LookupString" char="$" />
<DetectChar attribute="String" context="#pop" char=""" />
</context>
<context name="LookupError" attribute="Error" lineEndContext="#pop">
<AnyChar context="Normal" attribute="Normal" String=" )]" />
</context>
<context name="LookupNormal" attribute="Lookup" lineEndContext="#pop">
<AnyChar context="Normal" attribute="Normal" String=" ;" />
<DetectChar context="Normal" attribute="Brackets" char="[" \
beginRegion="Block"/>
<DetectChar context="Normal" attribute="Brackets" char="]" \
endRegion="Block"/>
<DetectChar context="Normal" attribute="Brackets" char="(" \
beginRegion="Curly"/>
<DetectChar context="Normal" attribute="Brackets" char=")" \
endRegion="Curly"/>
<RegExpr context="LookupError" attribute="Error" String="\w+\$\w*" />
</context>
<context name="LookupStringError" attribute="Error" lineEndContext="#pop">
<DetectChar context="#pop#pop#pop" attribute="String" Char=""" />
<DetectChar context="#pop" attribute="String" Char=" " />
</context>
<context name="LookupString" attribute="Lookup" lineEndContext="#pop">
<DetectChar context="#pop#pop" attribute="String" char=""" />
<RegExpr context="LookupStringError" attribute="Error" String="\w+$\w*" />
<DetectChar context="#pop" attribute="Normal" Char=" " />
</context>
</contexts>
<itemDatas>
<itemData name="Normal" defStyleNum="dsNormal" spellChecking="false"/>
<itemData name="Lookup" defStyleNum="dsDataType"/>
<itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
<itemData name="Int" defStyleNum="dsDecVal" spellChecking="false"/>
<itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
<itemData name="String" defStyleNum="dsString"/>
<itemData name="Escaped" defStyleNum="dsChar" spellChecking="false"/>
<!-- Just a personal preference, I don't like italics in my comments -->
<itemData name="Comment" defStyleNum="dsComment" italic="0"/>
<itemData name="Keyword" defStyleNum="dsFunction" spellChecking="false"/>
<itemData name="Operator" defStyleNum="dsKeyword" bold="1" \
spellChecking="false"/>
<itemData name="Key" defStyleNum="dsOthers" spellChecking="false"/>
<itemData name="Brackets" defStyleNum="dsNormal" bold="1" \
spellChecking="false"/> </itemDatas>
<general>
<comments>
<comment name="singleLine" start="//" />
</comments>
</general>
</highlighting>
</language>
<!--
// kate: space-indent on; indent-width 2; replace-tabs on;
-->
_______________________________________________
KWrite-Devel mailing list
KWrite-Devel@kde.org
https://mail.kde.org/mailman/listinfo/kwrite-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic