<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<!-- PIC (14 bits) assembler syntaxfile for gpasm/mpasm assembler by
	Alain GIBAUD  (alain.gibaud@univ-valenciennes.fr)
Small modifications for the new DTD by Joseph Wenninger <jowenn@kde.org>
 -->
<language name="PicAsm" version="1.01" kateversion="2.0" section="Sources"
		extensions="*.src;*.SRC;*.asm;*.ASM;*.pic;*.PIC" mimetype="text/x-PicSrc;text/x-PicHdr">


  <highlighting>
    <list name="directives">
      <item> __BADRAM </item>
      <item> __CONFIG </item>
      <item> __IDLOCS </item>
      <item> __MAXRAM </item>

      <item> cblock </item>
      <item> constant </item>
      <item> da </item>
      <item> data </item>
      <item> db </item>
      <item> de </item>
      <item> dt </item>
      <item> dw </item>
      <item> endm </item>
      <item> equ </item>
      <item> error </item>
      <item> errorlevel </item>
      <item> exitm </item>
      <item> fill </item>
      <item> list </item>
      <item> local </item>
      <item> macro </item>
      <item> messg </item>
      <item> noexpand </item>
      <item> nolist </item>
      <item> org </item>
      <item> page </item>
      <item> processor </item>
      <item> radix </item>
      <item> res </item>
      <item> set </item>
      <item> space </item>
      <item> subtitle </item>
      <item> title </item>
      <item> variable </item>
      <item> end </item>

      <item> CBLOCK </item>
      <item> CONSTANT </item>
      <item> DA </item>
      <item> DATA </item>
      <item> DB </item>
      <item> DE </item>
      <item> DT </item>
      <item> DW </item>
      <item> ENDM </item>
      <item> EQU </item>
      <item> ERROR </item>
      <item> ERRORLEVEL </item>
      <item> EXITM </item>
      <item> FILL </item>
      <item> LIST </item>
      <item> LOCAL </item>
      <item> MACRO </item>
      <item> MESSG </item>
      <item> NOEXPAND </item>
      <item> NOLIST </item>
      <item> ORG </item>
      <item> PAGE </item>
      <item> PROCESSOR </item>
      <item> RADIX </item>
      <item> RES </item>
      <item> SET </item>
      <item> SPACE </item>
      <item> SUBTITLE </item>
      <item> TITLE </item>
      <item> VARIABLE </item>
      <item> END </item>
   </list>

    <list name="conditionnal">
      <item> if </item>
      <item> else </item>
      <item> idef </item>
      <item> ifndef </item>
      <item> endif </item>
      <item> while </item>
      <item> include </item>
      <item> endw </item>
      <item> { </item>
      <item> } </item>
    </list>

    <list name="gpasm_macro">
      <item> addcf </item>
      <item> b </item>
      <item> bc </item>
      <item> bz </item>
      <item> bnc </item>
      <item> bnz </item>
      <item> clrc </item>
      <item> clrz </item>
      <item> setc </item>
      <item> setz </item>
      <item> movfw </item>
      <item> negf </item>
      <item> skpc </item>
      <item> skpz </item>
      <item> skpnc </item>
      <item> skpnz </item>
      <item> subcf </item>
      <item> tstf </item>

      <item> ADDCF </item>
      <item> B </item>
      <item> BC </item>
      <item> BZ </item>
      <item> BNC </item>
      <item> BNZ </item>
      <item> CLRC </item>
      <item> CLRZ </item>
      <item> SETC </item>
      <item> SETZ </item>
      <item> MOVFW </item>
      <item> NEGF </item>
      <item> SKPC </item>
      <item> SKPZ </item>
      <item> SKPNC </item>
      <item> SKPNZ </item>
      <item> SUBCF </item>
      <item> TSTF </item>
    </list>

    <list name="instructions">
      <item> addlw </item>
      <item> addwf </item>
      <item> bcf </item>
      <item> bsf </item>
      <item> btfsc </item>
      <item> btfss </item>
      <item> call </item>
      <item> clrf </item>
      <item> clrw </item>
      <item> clrwtd </item>
      <item> comf </item>
      <item> decf </item>
      <item> decfsz </item>
      <item> goto </item>
      <item> incf </item>
      <item> incfsz </item>
      <item> iorlw </item>
      <item> movf </item>
      <item> movlw </item>
      <item> movwf </item>
      <item> nop </item>
      <item> option </item>
      <item> retfie </item>
      <item> retlw </item>
      <item> return </item>
      <item> rlf </item>
      <item> rrf </item>
      <item> sleep </item>
      <item> sublw </item>
      <item> subwf </item>
      <item> swapf </item>
      <item> tris </item>
      <item> xorlw </item>
      <item> xorwf </item>

      <item> ADDLW </item>
      <item> ADDWF </item>
      <item> BCF </item>
      <item> BSF </item>
      <item> BTFSC </item>
      <item> BTFSS </item>
      <item> CALL </item>
      <item> CLRF </item>
      <item> CLRW </item>
      <item> CLRWTD </item>
      <item> COMF </item>
      <item> DECF </item>
      <item> DECFSZ </item>
      <item> GOTO </item>
      <item> INCF </item>
      <item> INCFSZ </item>
      <item> IORLW </item>
      <item> MOVF </item>
      <item> MOVLW </item>
      <item> MOVWF </item>
      <item> NOP </item>
      <item> OPTION </item>
      <item> RETFIE </item>
      <item> RETLW </item>
      <item> RETURN </item>
      <item> RLF </item>
      <item> RRF </item>
      <item> SLEEP </item>
      <item> SUBLW </item>
      <item> SUBWF </item>
      <item> SWAPF </item>
      <item> TRIS </item>
      <item> XORLW </item>
      <item> XORWF </item>
    </list>
    <contexts>

      <context name="normal" attribute="Normal Text" lineEndContext="#stay">
        <keyword attribute="Directives" context="#stay" String="directives"/>
        <keyword attribute="Instructions" context="#stay" String="instructions"/>
        <keyword attribute="Preprocessor" context="#stay" String="conditionnal"/>
        <keyword attribute="GPASM-macros" context="#stay" String="gpasm_macro"/>
        <HlCHex attribute="Based Numbers" context="#stay"/>
        <RegExpr attribute="Based Numbers" context="#stay" String="([0-9A-F]+H)" insensitive="TRUE" />
        <RegExpr attribute="Based Numbers" context="#stay" String="([0-9]+D)" insensitive="TRUE" />
        <RegExpr attribute="Based Numbers" context="#stay" String="([0-7]+O)" insensitive="TRUE" />
        <RegExpr attribute="Based Numbers" context="#stay" String="([0-1]+B)" insensitive="TRUE" />
        <Int attribute="Non Based Numbers" context="#stay" />
        <HlCChar attribute="Char" context="#stay"/>
        <StringDetect attribute="Char" context="ASCIIChar" String="A'" insensitive="TRUE" />
        <StringDetect attribute="Based Numbers" context="binaryDigits" String="B'" insensitive="TRUE" />
        <StringDetect attribute="Based Numbers" context="hexDigits" String="H'" insensitive="TRUE" />
        <StringDetect attribute="Based Numbers" context="octDigits" String="O'" insensitive="TRUE" />
        <StringDetect attribute="Based Numbers" context="decimalDigits" String="D'" insensitive="TRUE" />
        <DetectChar attribute="String" context="string" char="&quot;"/>
        <DetectChar attribute="Comment" context="comment" char=";" />
        <RegExpr attribute="Symbol" context="#stay" String="[-/*%+=&gt;&lt;&amp;|^!~]"/>
        <RegExpr attribute="Symbol" context="#stay" String="(HIGH|LOW)"/>
        <RegExpr attribute="Preprocessor" context="#stay" String="(#define|#undefine|#v)"/>
      </context>

      <context name="string" attribute="String" lineEndContext="#pop">
        <LineContinue attribute="String" context="#stay"/>
        <HlCStringChar attribute="Char" context="#stay"/>
        <DetectChar attribute="String" context="#pop" char="&quot;"/>
      </context>


      <context name="comment" attribute="Comment" lineEndContext="#pop">
        <RegExpr attribute="Instructions" context="#stay"
           String="(FIXME|TODO|fixme|todo|INPUT|OUTPUT|PARAMETERS|AUTHOR|EMAIL)" />
      </context>


       <context name="decimalDigits" attribute="Based Numbers" lineEndContext="#pop">
        <DetectChar attribute="Based Numbers" context="#pop" char="'"/>
        <RegExpr attribute="Normal Text" context="#pop" String="[^0-9]" />
      </context>

       <context name="binaryDigits" attribute="Based Numbers" lineEndContext="#pop">
        <DetectChar attribute="Based Numbers" context="#pop" char="'"/>
        <RegExpr attribute="Normal Text" context="#pop" String="[^0-1]" />
      </context>

       <context name="hexDigits" attribute="Based Numbers" lineEndContext="#pop">
        <DetectChar attribute="Based Numbers" context="#pop" char="'"/>
        <RegExpr attribute="Normal Text" context="#pop" String="[^0-9A-Fa-f]" />
      </context>

       <context name="octDigits" attribute="Based Numbers" lineEndContext="#pop">
        <DetectChar attribute="Based Numbers" context="#pop" char="'"/>
        <RegExpr attribute="Normal Text" context="#pop" String="[^0-7]" />
      </context>

      <context name="ASCIIChar" attribute="Char" lineEndContext="#pop">
        <DetectChar attribute="Char" context="#pop" char="'"/>
      </context>

    </contexts>
    <itemDatas>
      <itemData name="Normal Text" 		defStyleNum="dsNormal"/>
      <itemData name="Directives"  		defStyleNum="dsOthers"/>
      <itemData name="Preprocessor"  	defStyleNum="dsNormal" color="#D819D8" selColor="#D819D8" bold="0" italic="0"/>
      <itemData name="Instructions"  	defStyleNum="dsKeyword"/>
      <itemData name="Non Based Numbers"  	defStyleNum="dsDecVal"/>
      <itemData name="Char"  			defStyleNum="dsChar"/>
      <itemData name="String"  			defStyleNum="dsString"/>
      <itemData name="Comment"  		defStyleNum="dsNormal" color="#FF3118" selColor="#FF3118" bold="0" italic="1" />
      <itemData name="Symbol"  			defStyleNum="dsNormal" color="#FF0000" selColor="#083194" bold="0" italic="0" />
      <itemData name="Prep. Lib"  		defStyleNum="dsOthers"/>
      <itemData name="Based Numbers"  	defStyleNum="dsBaseN" />
      <itemData name="GPASM-macros"  	defStyleNum="dsNormal" color="#000000" selColor="#000000" bold="1" italic="1"/>
    </itemDatas>
  </highlighting>
  <general>
    <comments>
            <comment name="singleLine" start=";" />
    </comments>
    <keywords casesensitive="1" />
  </general>
</language>
