<!DOCTYPE language SYSTEM "language.dtd">
<language name="NQC" version="1.0" kateversion="2.4" section="Sources" extensions="*.nqc" mimetype="text/x-nqc" author="Bruno Adele [bruno.adele@jesuislibre.org]" license="GPL">
  <highlighting>
    <list name="functions">
      <!-- Syntax from http://www.informatik.uni-kiel.de/inf/von-Hanxleden/mindstorms/Programmierung/NQC/rcx2_index.html -->
      
      <!-- Sensors -->
      <item>SetSensor</item>
      <item>SetSensorType</item>
      <item>SetSensorMode</item>
      <item>ClearSensor</item>
      <item>SensorValue</item>
      <item>SensorType</item>
      <item>SensorMode</item>
      <item>SensorValueBool</item>
      <item>SensorValueRaw</item>
      
      <!-- Ouputs -->
      <item>SetOutput</item>
      <item>SetDirection</item>
      <item>SetPower</item>
      <item>On</item>
      <item>Off</item>
      <item>Float</item>
      <item>Fwd</item>
      <item>Rev</item>
      <item>Toggle</item>
      <item>OnFwd</item>
      <item>OnRev</item>
      <item>OnFor</item>
      <item>SetGlobalOutput</item>
      <item>SetGlobalDirection</item>
      <item>SetMaxPower</item>
      <item>OutputStatus</item>
      <item>GlobalOutputStatus</item>
      
      <!-- Sound -->
      <item>PlaySound</item>
      <item>PlayTone</item>
      <item>MuteSound</item>
      <item>UnmuteSound</item>
      <item>ClearSound</item>
      
      <!-- Timers -->
      <item>ClearTimer</item>
      <item>SetTimer</item>
      <item>Timer</item>
      <item>FastTimer</item>
      
      <!-- Communication -->
      <item>ClearMessage</item>
      <item>SendMessage</item>
      <item>SetTxPower</item>
      <item>SetSerialComm</item>
      <item>SetSerialPacket</item>
      <item>SetSerialData</item>
      <item>SendSerial</item>
      <item>Message</item>
      <item>SerialData</item>
      
      <!-- LCD Display -->
      <item>SelectDisplay</item>
      <item>SetUserDisplay</item>
      
      <!-- Data Logging -->
      <item>CreateDatalog</item>
      <item>AddToDatalog</item>
      <item>UploadDatalog</item>
      
      <!-- Counters -->
      <item>ClearCounter</item>
      <item>IncCounter</item>
      <item>DecCounter</item>
      <item>Counter</item>
      
      <!-- Access Control -->
      <item>SetPriority</item>
      
      <!-- Events -->
      <item>Event</item>
      <item>SetEvent</item>
      <item>CalibrateEvent</item>
      <item>SetUpperLimit</item>
      <item>SetLowerLimit</item>
      <item>SetHysteresis</item>
      <item>SetClickTime</item>
      <item>SetClickCounter</item>
      <item>ActiveEvents</item>
      <item>CurrentEvents</item>
      <item>ClearEvent</item>
      <item>ClearAllEvents</item>
      <item>EventState</item>
      <item>UpperLimit</item>
      <item>LowerLimit</item>
      <item>Hysteresis</item>
      <item>ClickTime</item>
      <item>ClickCounter</item>
      
      <!-- Misc features -->
      <item>Wait</item>
      <item>StopAllTasks</item>
      <item>SetSleepTime</item>
      <item>SleepNow</item>
      <item>SetWatch</item>
      <item>SetRandomSeed</item>
      <item>SelectProgram</item>
      <item>Random</item>
      <item>Program</item>
      <item>Watch</item>
      <item>BatteryLevel</item>
      <item>FirmwareVersion</item>
    </list>
    <list name="keywords">
      <item>__event_src</item>
      <item>__sensor</item>
      <item>__type</item>
      <item>abs</item>
      <item>aquire</item>
      <item>catch</item>
      <item>const</item>
      <item>break</item>
      <item>case</item>
      <item>continue</item>
      <item>default</item>
      <item>do</item>
      <item>else</item>
      <item>for</item>
      <item>monitor</item>
      <item>if</item>
      <item>return</item>
      <item>repeat</item>
      <item>sign</item>
      <item>start</item>
      <item>stop</item>
      <item>sub</item>
      <item>switch</item>
      <item>task</item>
      <item>while</item>
      <item>asm</item>
      <item>inline</item>
      <item>int</item>
      <item>void</item>
    </list>
    <list name="types">
      <item>bool</item>
      <item>byte</item>
      <item>char</item>
      <item>const</item>
      <item>decimal</item>
      <item>double</item>
      <item>float</item>
      <item>int</item>
      <item>long</item>
      <item>object</item>
      <item>uint</item>
      <item>ushort</item>
      <item>ulong</item>
      <item>sbyte</item>
      <item>short</item>
      <item>string</item>
      <item>void</item>-->
    </list>
    <!-- From kate perl syntax highlighting -->
    
    <!-- Inpired from jedit syntax highlighting --> 
    <list name="constants">
      <item>true</item>
      <item>false</item>
      <item>NULL</item>
      
      <item>SENSOR_1</item>
      <item>SENSOR_2</item>
      <item>SENSOR_3</item>
      
      <item>SENSOR_TYPE_NONE</item>
      <item>SENSOR_TYPE_TOUCH</item>
      <item>SENSOR_TYPE_TEMPERATURE</item>
      <item>SENSOR_TYPE_LIGHT</item>
      <item>SENSOR_TYPE_ROTATION</item>
      
      <item>SENSOR_MODE_RAW</item>
      <item>SENSOR_MODE_BOOL</item>
      <item>SENSOR_MODE_EDGE</item>
      <item>SENSOR_MODE_PULSE</item>
      <item>SENSOR_MODE_PERCENT</item>
      <item>SENSOR_MODE_FAHRENHEIT</item>
      <item>SENSOR_MODE_CELSIUS</item>
      <item>SENSOR_MODE_ROTATION</item>
      
      <item>SENSOR_TOUCH</item>
      <item>SENSOR_LIGHT</item>
      <item>SENSOR_EDGE</item>
      <item>SENSOR_PULSE</item>
      <item>SENSOR_FAHRENHEIT</item>
      <item>SENSOR_CELSIUS</item>
      <item>SENSOR_ROTATION</item>
      
      <item>OUT_A</item>
      <item>OUT_B</item>
      <item>OUT_C</item>
      
      <item>OUT_OFF</item>
      <item>OUT_ON</item>
      <item>OUT_FLOAT</item>
      
      <item>OUT_FWD</item>
      <item>OUT_REV</item>
      <item>OUT_TOOGLE</item>
      
      <item>OUT_FULL</item>
      <item>OUT_HALF</item>
      <item>OUT_LOW</item>
      
      <item>SOUND_CLICK</item>
      <item>SOUND_DOUBLE_BEEP</item>
      <item>SOUND_DOWN</item>
      <item>SOUND_UP</item>
      <item>SOUND_LOW_BEEP</item>
      <item>SOUND_FAST_UP</item>
      
      <item>DISPLAY_WATCH</item>
      <item>DISPLAY_OUT_A</item>
      <item>DISPLAY_OUT_B</item>
      <item>DISPLAY_OUT_C</item>
      <item>DISPLAY_SENSOR_1</item>
      <item>DISPLAY_SENSOR_2</item>
      <item>DISPLAY_SENSOR_3</item>
      
      <item>TX_POWER_LO</item>
      <item>TX_POWER_HI</item>
      
      <item>SERIAL_COMM_DEFAULT</item>
      <item>SERIAL_COMM_4800</item>
      <item>SERIAL_COMM_DUTY25</item>
      <item>SERIAL_COMM_76KHZ</item>
      
      <item>SERIAL_PACKET_PREAMBLE</item>
      <item>SERIAL_PACKET_DEFAULT</item>
      <item>SERIAL_PACKET_NEGATED</item>
      <item>SERIAL_PACKET_CHECKSUM</item>
      <item>SERIAL_PACKET_RCX</item>
      <item>SERIAL_PACKET_</item>
      
      <item>ACQUIRE_OUT_A</item>
      <item>ACQUIRE_OUT_B</item>
      <item>ACQUIRE_OUT_C</item>
      <item>ACQUIRE_SOUND</item>
      <item>ACQUIRE_USER_1</item>
      <item>ACQUIRE_USER_2</item>
      <item>ACQUIRE_USER_3</item>
      <item>ACQUIRE_USER_4</item>
      
      <item>EVENT_TYPE_PRESSED</item>
      <item>EVENT_TYPE_RELEASED</item>
      <item>EVENT_TYPE_PULSE</item>
      <item>EVENT_TYPE_EDGE</item>
      <item>EVENT_TYPE_FASTCHANGE</item>
      <item>EVENT_TYPE_LOW</item>
      <item>EVENT_TYPE_NORMAL</item>
      <item>EVENT_TYPE_HIGH</item>
      <item>EVENT_TYPE_CLICK</item>
      <item>EVENT_TYPE_DOUBLECLICK</item>
      <item>EVENT_TYPE_MESSAGE</item>
      
      <item>EVENT_1_PRESSED</item>
      <item>EVENT_1_RELEASED</item>
      <item>EVENT_2_PRESSED</item>
      <item>EVENT_2_RELEASED</item>
      <item>EVENT_LIGHT_HIGH</item>
      <item>EVENT_LIGHT_NORMAL</item>
      <item>EVENT_LIGHT_LOW</item>
      <item>EVENT_LIGHT_CLICK</item>
      <item>EVENT_LIGHT_DOUBLECLICK</item>
      <item>EVENT_COUNTER_0</item>
      <item>EVENT_COUNTER_1</item>
      <item>EVENT_TIMER_0</item>
      <item>EVENT_TIMER_1</item>
      <item>EVENT_TIMER_2</item>
      <item>EVENT_MESSAGE</item>
    </list>
    <contexts>
      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
        <keyword attribute="Constant" context="#stay" String="constants" />
        <keyword attribute="Function" context="#stay" String="functions" />
        <keyword attribute="Keyword" context="#stay" String="keywords" />
        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
        <DetectChar attribute="Preprocessor" context="Preprocessor" char="#" firstNonSpace="true" />
        <Float attribute="Float" context="#stay"/>
        <Int attribute="Decimal" context="#stay"/>
      </context>
      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
        <DetectSpaces />
        <IncludeRules context="##Alerts" />
        <DetectIdentifier />
      </context>
      <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
        <DetectSpaces />
        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
        <IncludeRules context="##Alerts" />
        <DetectIdentifier />
      </context>
      <context attribute="Preprocessor" lineEndContext="#pop" name="Preprocessor" />
    </contexts>
    <itemDatas>
      <itemData name="Normal Text"  defStyleNum="dsNormal"/>
      <itemData name="Keyword"      defStyleNum="dsKeyword"/>
      <itemData name="Function"     defStyleNum="dsFunction"/>
      <itemData name="Constant"     defStyleNum="dsDataType"/>
      <itemData name="Comment"      defStyleNum="dsComment"/>
      <itemData name="Preprocessor" defStyleNum="dsOthers"/>
      <itemData name="Decimal"           defStyleNum="dsDecVal"/>
      <itemData name="Float"             defStyleNum="dsFloat"/>
      
      
    </itemDatas>
  </highlighting>
  <general>
    <comments>
      <comment name="singleLine" start="//" />
      <comment name="multiLine" start="/*" end="*/"/>
    </comments>
    <keywords casesensitive="1" />
  </general>
</language>

