<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<!-- author: Giancarlo Niccolai (giancarlo@niccolai.ws) -->
<!-- This file is released under GPL license 2.0 or any later version at your choice. -->
<language name="Inform" version="2" kateversion="2.4" section="Sources" extensions="*.inf;*.h" mimetype="text/x-inform-src" author="Giancarlo Niccolai (giancarlo@niccolai.ws)" license="GPL">
<highlighting>
   <list name="keywords">
      <item> if </item>
      <item> for </item>
      <item> else </item>
      <item> box </item>
      <item> break </item>
      <item> continue </item>
      <item> do </item>
      <item> until </item>
      <item> font </item>
      <item> give </item>
      <item> inversion </item>
      <item> jump </item>
      <item> on </item>
      <item> to </item>
      <item> move </item>
      <item> new_line </item>
      <item> objectloop </item>
      <item> print </item>
      <item> print_ret </item>
      <item> quit </item>
      <item> read </item>
      <item> remove </item>
      <item> restore </item>
      <item> return </item>
      <item> rtrue </item>
      <item> rfalse </item>
      <item> save </item>
      <item> spaces </item>
      <item> spring </item>
      <item> style </item>
      <item> switch </item>
   </list>

   <list name="functions">
      <item> metaclass </item>
      <item> parent </item>
      <item> child </item>
      <item> children </item>
      <item> Achieved </item>
      <item> AddToScope </item>
      <item> allowpushdir </item>
      <item> CDefArt </item>
      <item> ChangeDefault </item>
      <item> DefArt </item>
      <item> DoMenu </item>
      <item> EnglishNumber </item>
      <item> HasLightSource </item>
      <item> InDefArt </item>
      <item> Locale </item>
      <item> LoopOverScope </item>
      <item> NextWord </item>
      <item> NextWordStopped </item>
      <item> NounDomain </item>
      <item> ObjectIsUntouchable </item>
      <item> OffersLight </item>
      <item> PlaceInScope </item>
      <item> PlayerTo </item>
      <item> PrintShortName </item>
      <item> ScopeWithin </item>
      <item> SetTime </item>
      <item> StartDaemon </item>
      <item> StartTimer </item>
      <item> StopDaemon </item>
      <item> StopTimer </item>
      <item> TestScope </item>
      <item> TryNumber </item>
      <item> UnsignedCompare </item>
      <item> WordAddress </item>
      <item> WordLenght </item>
      <item> WriteListFrom </item>
      <item> YesOrNo </item>
      <item> ZRegion </item>
   </list>
   <list name="actions">
      <item> Pronouns </item>
      <item> Quit </item>
      <item> Restore </item>
      <item> Save </item>
      <item> Verify </item>
      <item> Restart </item>
      <item> ScriptOn </item>
      <item> ScriptOff </item>
      <item> NotifyOn </item>
      <item> NotifyOff </item>
      <item> Places </item>
      <item> Objects </item>
      <item> Score </item>
      <item> FullScore </item>
      <item> Version </item>
      <item> LMode1 </item>
      <item> LMode2 </item>
      <item> LMode3 </item>
      <item> Inv </item>


      <item> Inv </item>
      <item> InvTall </item>
      <item> InvWide </item>
      <item> Take </item>
      <item> Drop </item>
      <item> Empty </item>
      <item> Enter </item>
      <item> Exit </item>
      <item> GetOff </item>
      <item> Go </item>
      <item> GoIn </item>
      <item> Look </item>
      <item> Examine </item>
      <item> Search </item>
      <item> Give </item>
      <item> Show </item>
      <item> Unlock </item>
      <item> Lock </item>
      <item> SwitchOn </item>
      <item> SwitchOff </item>
      <item> Open </item>
      <item> Close </item>
      <item> Disrobe </item>
      <item> Wear </item>
      <item> Eat </item>

      <item> LetGo </item>
      <item> Receive </item>
      <item> Insert </item>
      <item> PutOn </item>
      <item> Transfer </item>
      <item> Empty </item>
      <item> EmptyT </item>
      <item> GetOff </item>
      <item> GoIn </item>
      <item> Listen </item>
      <item> Taste </item>
      <item> Touch </item>

      <item> Pull </item>
      <item> Push </item>
      <item> Wave </item>
      <item> Turn </item>
      <item> PushDir </item>
      <item> ThrowAt </item>
      <item> ThrownAt </item>
      <item> JumpOn </item>
      <item> Drink </item>
      <item> Attack </item>
      <item> Tie </item>
      <item> Fill </item>
      <item> Swing </item>
      <item> Blow </item>
      <item> Rub </item>
      <item> Set </item>
      <item> SetTo </item>
      <item> Buy </item>
      <item> Climb </item>
      <item> Squeeze </item>
      <item> Climb </item>
      <item> Burn </item>
      <item> Cut </item>
      <item> Dig </item>

      <item> Consult </item>
      <item> Tell </item>
      <item> Answer </item>
      <item> Ask </item>
      <item> AskFor </item>
      <item> Kiss </item>

      <item> Sleep </item>
      <item> Sing </item>
      <item> WaveHands </item>
      <item> Swim </item>
      <item> Sorry </item>
      <item> Sing </item>
      <item> Strong </item>
      <item> Mild </item>
      <item> Smell </item>
      <item> Pray </item>
      <item> Jump </item>
      <item> Think </item>
      <item> VagueGo </item>
      <item> Yes </item>
      <item> No </item>
      <item> Sing </item>
   </list>

   <list name="special_vals" >
      <item> String </item>
      <item> Routine </item>
      <item> bold </item>
      <item> roman </item>
      <item> underline </item>
      <item> fixed </item>
      <item> nothing </item>
      <item> true </item>
      <item> false </item>
      <item> on </item>
      <item> off </item>
      <item> sender </item>
      <item> self </item>
      <item> location </item>
      <item> score </item>
      <item> action </item>
      <item> actor </item>
      <item> noun </item>
      <item> second </item>
      <item> the_time </item>
      <item> consult_from </item>
      <item> consult_words </item>
      <item> wn </item>
      <item> actors_location </item>
      <item> buffer </item>
      <item> player </item>
   </list>

   <list name="pragmas" >
      <item> Ifdef </item>
      <item> Ifndef </item>
      <item> Iftrue </item>
      <item> Iffalse </item>
      <item> Ifnot </item>
      <item> Endif </item>
      <item> End </item>
      <item> Abbreviate </item>
      <item> Array </item>
      <item> Attribute </item>
      <item> Constant </item>
      <item> Default </item>
      <item> Extend </item>
      <item> Global </item>
      <item> Ifnot </item>
      <item> Iftrue </item>
      <item> Iffalse </item>
      <item> Import </item>
      <item> Include </item>
      <item> Link </item>
      <item> Lowstring </item>
      <item> Message </item>
      <item> Property </item>
      <item> Release </item>
      <item> Replace </item>
      <item> Serial </item>
      <item> Switches </item>
      <item> Statusline </item>
      <item> score </item>
      <item> System_file </item>
      <item> Verb </item>
   </list>

   <list name="inline_pragmas" >
      <item> #ifdef </item>
      <item> #else </item>
      <item> #ifndef </item>
      <item> #endif </item>
   </list>

   <list name="operators">
      <item> has </item>
      <item> hasn't </item>
      <item> in </item>
      <item> notin </item>
      <item> provides </item>
      <item> ofclass </item>
      <item> or </item>
   </list>

   <list name="ClassDeclOps">
      <item> with </item>
      <item> private </item>
      <item> has </item>
   </list>

   <contexts>
      <context attribute="Normal Text" lineEndContext="#stay" name="TopLevel">
         <DetectChar attribute="Comment" context="comment" char="!" />
         <DetectChar attribute="String" context="string" char="&quot;" />
         <RegExpr attribute="Function" context="funcdef" beginRegion="reg_function"
            String="[[]\s*[a-zA-Z_]+\w*" />

         <RegExpr String=" *object | *class " attribute="Pragma"
            context="ClassDecl"
            insensitive="true" beginRegion="reg_class" column="0"/>

         <keyword attribute="Pragma" context="#stay" String="pragmas" />
         <keyword attribute="Pragma" context="#stay" String="inline_pragmas" />

         <RegExpr attribute="Operator" context="#stay" String="--?>" />
         <RegExpr attribute="Normal Text" context="#stay" String="[a-zA-Z_]+\d*" />
         <RegExpr attribute="Number" context="#stay" String="\$[0-9a-fA-F]{1,4}" />
         <RegExpr attribute="Number" context="#stay" String="\d+" />
      </context>

      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
         <DetectChar attribute="Comment" context="comment" char="!" />
         <DetectChar attribute="String" context="string" char="&quot;" />
         <DetectChar attribute="Word" context="word" char="'" />
         <keyword attribute="Pragma" context="#stay" String="inline_pragmas" />
         <RegExpr attribute="Operator" context="#stay" String="--?>" />
         <keyword attribute="Keyword" context="#stay" String="keywords" />
         <keyword attribute="Actions" context="#stay" String="actions" />
         <keyword attribute="PredefFunction" context="#stay" String="functions" />
         <keyword attribute="Values" context="#stay" String="special_vals" />
         <keyword attribute="Operator" context="#stay" String="operators" />
         <RegExpr attribute="Actions" context="#stay" String="##[a-zA-Z_]+\w*" />
         <RegExpr attribute="OpCode" context="#stay" String="@[a-zA-Z_]+\w*" />
         <RegExpr attribute="Number" context="#stay" String="\$[0-9a-fA-F]{1,4}" />
         <RegExpr String="[a-zA-Z_]+\w*" attribute="Normal Text" context="#stay" />
         <RegExpr attribute="Number" context="#stay" String="\d+" />
         <DetectChar char="{" attribute="Keyword" context="#stay"
               beginRegion="reg_compound" />
         <DetectChar char="}" attribute="Keyword" context="#stay"
               endRegion="reg_compound" />
         <AnyChar attribute="Operator" context="#stay" String="%&amp;()+-&lt;=&gt;{|}~"/>
      </context>

      <context attribute="Normal Text" lineEndContext="#stay" name="PropDefVal rules">
         <DetectChar attribute="Comment" context="comment" char="!" />
         <DetectChar attribute="String" context="string" char="&quot;" />
         <DetectChar attribute="Word" context="word" char="'" />
         <DetectChar attribute="Function" context="prop_func_def" char="[" beginRegion="reg_prop_def_func" />
         <DetectChar attribute="Operator" context="#pop" char="," />
         <RegExpr attribute="Number" context="#stay" String="\$[0-9a-fA-F]{1,4}" />
         <RegExpr attribute="Number" context="#stay" String="\d+" />
      </context>


      <context name="funcdef" attribute="Normal Text" lineEndContext="#stay" >
         <IncludeRules context="Normal" />
         <Detect2Chars attribute="Function" context="#pop" char="]" char1=";"
            endRegion="reg_function"/>
      </context>

     <context name="ClassDecl" attribute="Normal Text" lineEndContext="ClassDecl_1">
        <IncludeRules context="PropDefVal rules" />
     </context>

     <context name="ClassDecl_1" attribute="Normal Text" lineEndContext="#stay">
         <RegExpr String="^[\t ]*has " attribute="Keyword" context="has_decl" insensitive="true"/>
         <keyword String="ClassDeclOps" attribute="Keyword" context="#stay" />
         <RegExpr String="[a-zA-Z_]+\w*" context = "prop_def"
            attribute="Function"/>
         <DetectChar char=";" context="#pop" attribute="Pragma" endRegion="reg_class"/>
      </context>


      <context attribute="Word" lineEndContext="#pop" name="word">
         <DetectChar attribute="Word" context="#pop" char="'" />
      </context>

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

      <context name="prop_func_def" attribute="Normal Text" lineEndContext="#stay">
         <DetectChar context="#pop" char="]" attribute="Function"
            endRegion="reg_prop_func"/>
         <IncludeRules context="Normal" />
      </context>

      <context name="prop_def" attribute="Normal Text" lineEndContext="#stay" >
         <DetectChar char="," context="#pop"  attribute="Function"
            endRegion="reg_prop"/>
         <DetectChar char=";" context="#pop#pop#pop" attribute="Pragma" endRegion="reg_class"/>
         <DetectChar char="[" context="prop_func_def"  attribute="Function"
            beginRegion="reg_prop_func"/>
         <IncludeRules context="PropDefVal rules" />
      </context>

      <context name="has_decl" attribute="Normal Text" lineEndContext="#stay" >
         <DetectChar char=";" context="#pop#pop#pop"  attribute="Pragma" endRegion="reg_class"/>
         <IncludeRules context="PropDefVal rules" />
      </context>

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

   </contexts>

   <itemDatas>
      <itemData name="Normal Text" defStyleNum="dsNormal"/>
      <itemData name="Keyword"  defStyleNum="dsKeyword"/>
      <itemData name="Actions"  defStyleNum="dsDataType" color="#E06060" selColor="#400000" bold="0" italic="0"/>
		<itemData name="Operator"  defStyleNum="Operator" color="#A01060" selColor="#400040" bold="0" italic="0"/>
      <itemData name="Number"  defStyleNum="dsDecVal" color="#5050C0" selColor="#000000" bold="0" italic="0"/>
		<itemData name="OpCode"  defStyleNum="dsKeyword" color="#3015F0" selColor="#000000" bold="1" italic="0"/>
      <itemData name="Values"  defStyleNum="dsBaseN" color="#7020F0" selColor="#400000" bold="1" italic="0" />
      <itemData name="Pragma"  defStyleNum="dsOthers" color="#109010" selColor="#400000" bold="1" italic="0" />
      <itemData name="PredefFunction"  defStyleNum="dsFunction" />
      <itemData name="Function"        defStyleNum="dsFunction" />
      <itemData name="Comment"  defStyleNum="dsComment" color="#707070" selColor="#ffffff" bold="0" italic="1"/>
      <itemData name="String"  defStyleNum="dsString" color="#007000" selColor="#007000" bold="0" italic="0"/>
		<itemData name="Word"  defStyleNum="dsSpecialString" color="#007000" selColor="#007000" bold="0" italic="1"/>
   </itemDatas>
</highlighting>
<general>
   <comments>
      <comment name="singleLine" start="!" />
   </comments>
   <keywords casesensitive="1" />
</general>
</language>