[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> &gt; </item>
      <item> &lt; </item>
      <item> &gt;= </item>
      <item> &lt;= </item>
      <item> =f </item>
      <item> !=f </item>
      <item> &gt;f </item>
      <item> &lt;f </item>
      <item> &gt;=f </item>
      <item> &lt;=f </item>
      <item> ^ </item>
      <item> ! </item>
      <item> &amp; </item>
      <item> | </item>
      <item> ~ </item>
      <item> ^~ </item>
      <item> &amp;~ </item>
      <item> |~ </item>
      <item> &lt;&lt; </item>
      <item> &gt;&gt; </item>
      <item> &amp;&amp; </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> &lt;s </item>
      <item> &gt;s </item>
      <item> &lt;=s </item>
      <item> &gt;=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="&quot;" />
        <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="&quot;"/>
        <Detect2Chars attribute="Escaped" context="#stay" char="^" char1="f" />
        <DetectChar attribute="Lookup" context="LookupString" char="$" />
        <DetectChar attribute="String" context="#pop" char="&quot;" />
      </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="&quot;" />
        <DetectChar context="#pop" attribute="String" Char=" " />
      </context>

      <context name="LookupString" attribute="Lookup" lineEndContext="#pop">
        <DetectChar context="#pop#pop" attribute="String" char="&quot;" />
        <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