<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<language name="C65CM" version="1.0" kateversion="5.0" section="Sources" extensions="*.c65" mimetype="text/x-c65cm" author="Converted from Sublime" license="MIT">
  <highlighting>
    <list name="keywords">
      <item>ADD</item>
      <item>AND</item>
      <item>AS</item>
      <item>ASM</item>
      <item>BREAK</item>
      <item>BYTE</item>
      <item>CALL</item>
      <item>CASE</item>
      <item>CONST</item>
      <item>DEC</item>
      <item>DECREMENT</item>
      <item>DEFAULT</item>
      <item>DO</item>
      <item>ELSE</item>
      <item>ENDASM</item>
      <item>ENDIF</item>
      <item>ENDSCRIPT</item>
      <item>ENDSWITCH</item>
      <item>EXIT</item>
      <item>FEND</item>
      <item>FOR</item>
      <item>FUNC</item>
      <item>GOSUB</item>
      <item>GOTO</item>
      <item>IF</item>
      <item>INC</item>
      <item>INCREMENT</item>
      <item>LABEL</item>
      <item>LET</item>
      <item>LIBRARY</item>
      <item>MACRO</item>
      <item>NEXT</item>
      <item>OR</item>
      <item>ORIGIN</item>
      <item>PASSING</item>
      <item>PEEK</item>
      <item>PEEKW</item>
      <item>POINTER</item>
      <item>POKE</item>
      <item>POKEW</item>
      <item>SCRIPT</item>
      <item>STEP</item>
      <item>SUBEND</item>
      <item>SUBTRACT</item>
      <item>SWITCH</item>
      <item>THEN</item>
      <item>TO</item>
      <item>WHILE</item>
      <item>WITH</item>
      <item>WEND</item>
      <item>WORD</item>
      <item>XOR</item>
    </list>

    <list name="registers">
      <item>ACC</item>
      <item>XREG</item>
      <item>YREG</item>
    </list>

    <list name="opcodes">
      <item>adc</item>
      <item>and</item>
      <item>asl</item>
      <item>bcc</item>
      <item>bcs</item>
      <item>beq</item>
      <item>bit</item>
      <item>bmi</item>
      <item>bne</item>
      <item>bpl</item>
      <item>brk</item>
      <item>bvc</item>
      <item>bvs</item>
      <item>clc</item>
      <item>cld</item>
      <item>cli</item>
      <item>clv</item>
      <item>cmp</item>
      <item>cpx</item>
      <item>cpy</item>
      <item>dec</item>
      <item>dex</item>
      <item>dey</item>
      <item>eor</item>
      <item>inc</item>
      <item>inx</item>
      <item>iny</item>
      <item>jmp</item>
      <item>jsr</item>
      <item>lda</item>
      <item>ldx</item>
      <item>ldy</item>
      <item>lsr</item>
      <item>nop</item>
      <item>ora</item>
      <item>pha</item>
      <item>php</item>
      <item>pla</item>
      <item>plp</item>
      <item>rol</item>
      <item>ror</item>
      <item>rti</item>
      <item>rts</item>
      <item>sbc</item>
      <item>sec</item>
      <item>sed</item>
      <item>sei</item>
      <item>sta</item>
      <item>stx</item>
      <item>sty</item>
      <item>tax</item>
      <item>tay</item>
      <item>tsx</item>
      <item>txa</item>
      <item>txs</item>
      <item>tya</item>
    </list>

    <contexts>
      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
        <!-- C++ style comments -->
        <Detect2Chars attribute="Comment" context="Comment" char="/" char1="/"/>
        
        <!-- Assembly style comments -->
        <DetectChar attribute="Comment" context="AsmComment" char=";"/>
        
        <!-- Preprocessor directives -->
        <RegExpr attribute="Preprocessor" context="#stay" String="^[ \t]*#(INCLUDE|PRAGMA|IFDEF|IFNDEF|IFEND|PRINT|HALT|UNDEF|DEFINE).*$"/>
        
        <!-- Strings -->
        <DetectChar attribute="String" context="String" char="&quot;"/>
        
        <!-- Parameter modifiers (in, out, io) followed by colon -->
        <RegExpr attribute="Parameter" context="#stay" String="\b(in|out|io)\b(?=\s*:)"/>
        
        <!-- Keywords -->
        <keyword attribute="Keyword" context="#stay" String="keywords"/>
        
        <!-- Registers -->
        <keyword attribute="Register" context="#stay" String="registers"/>
        
        <!-- Assembly opcodes -->
        <keyword attribute="Opcode" context="#stay" String="opcodes"/>
        
        <!-- Hexadecimal numbers -->
        <RegExpr attribute="Hex" context="#stay" String="\$[0-9a-fA-F]+"/>
        
        <!-- Decimal numbers (including floating point) -->
        <RegExpr attribute="Number" context="#stay" String="\b(([0-9]+)|([0-9]+\.[0-9]+([Ee][-]?[0-9]+)?))\b"/>
      </context>

      <context name="Comment" attribute="Comment" lineEndContext="#pop">
        <LineContinue attribute="Comment" context="#stay"/>
      </context>

      <context name="AsmComment" attribute="Comment" lineEndContext="#pop">
        <LineContinue attribute="Comment" context="#stay"/>
      </context>

      <context name="String" attribute="String" lineEndContext="#stay">
        <RegExpr attribute="Escape" context="#stay" String="\\."/>
        <DetectChar attribute="String" context="#pop" char="&quot;"/>
      </context>
    </contexts>

    <itemDatas>
      <itemData name="Normal Text" defStyleNum="dsNormal"/>
      <itemData name="Keyword" defStyleNum="dsKeyword" bold="1"/>
      <itemData name="Register" defStyleNum="dsConstant" bold="1"/>
      <itemData name="Opcode" defStyleNum="dsBuiltIn"/>
      <itemData name="Parameter" defStyleNum="dsAttribute"/>
      <itemData name="Comment" defStyleNum="dsComment"/>
      <itemData name="String" defStyleNum="dsString"/>
      <itemData name="Escape" defStyleNum="dsSpecialChar"/>
      <itemData name="Preprocessor" defStyleNum="dsPreprocessor"/>
      <itemData name="Number" defStyleNum="dsDecVal"/>
      <itemData name="Hex" defStyleNum="dsBaseN"/>
    </itemDatas>
  </highlighting>

  <general>
    <comments>
      <comment name="singleLine" start="//"/>
      <comment name="singleLine" start=";"/>
    </comments>
    <keywords casesensitive="0"/>
  </general>
</language>
