<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<language name="Oberon" version="1.03" kateversion="2.1" section="Sources" extensions="*.mod;*.obn" priority="2" casesensitive="1">
  <highlighting>
    <list name="directives">
      <item> END_VERBATIM </item>
      <item> VERBATIM </item>
      <item> Write </item>
      <item> WriteLn </item>
      <item> Read </item>
      <item> Sleep </item>
      <item> INSERT </item>
      <item> INC </item>
      <item> DEC </item>
      <item> SWAP </item>
      <item> PeekW </item>
      <item> PokeW </item>
    </list>
    <list name="keywords">
      <item> ANDB </item>
      <item> ARRAY </item>
      <item> BEGIN </item>
      <item> CASE </item>
      <item> CONST </item>
      <item> DIV </item>
      <item> DO </item>
      <item> ELSE </item>
      <item> ELSIF </item>
      <item> END </item>
      <item> FOR </item>
      <item> IF </item>
      <item> IN </item>
      <item> ISR </item>
      <item> ODD </item>
      <item> ORD </item>
      <item> MOD </item>
      <item> MODULE </item>
      <item> NOT </item>
      <item> OF </item>
      <item> OR </item>
      <item> ORB </item>
      <item> PROCEDURE </item>
      <item> RECORD </item>
      <item> REPEAT </item>
      <item> SFR </item>
      <item> THEN </item>
      <item> TO </item>
      <item> TYPE </item>
      <item> UNTIL </item>
      <item> VAR </item>
      <item> WHILE </item>
      <item> WITH </item>
      <item> FALSE </item>
      <item> TRUE </item>
      <item> BY </item>
      <item> FROM </item>
      <item> IMPORT </item>
      <item> XORB </item>
    </list>
    <list name="types">
      <item> INTEGER </item>
      <item> STRING </item>
      <item> BOOLEAN </item>
    </list>
    <contexts>
      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
	<RegExpr attribute="Keyword" context="#stay" String="\b(begin|case|record|if|while|for)(?=(\{[^}]*(\}|$)|\(\*.*(\*\)|$))*([\s]|$|//))" insensitive="true" beginRegion="Region1"/>
	<RegExpr attribute="ISO/Delphi Extended" context="#stay" String="\b((object|class)(?=(\(.*\))?(\{[^}]*(\}|$)|\(\*.*(\*\)|$))*;?([\s]|$|//))|try(?=(\{[^}]*(\}|$)|\(\*.*(\*\)|$))*([\s]|$|//)))" insensitive="true" beginRegion="Region1"/>
        <RegExpr attribute="Keyword" context="#stay" String="\bend(?=((\{[^}]*(\}|$)|\(\*.*(\*\)|$))*)([.;\s]|$)|//|$)" insensitive="true" endRegion="Region1"/>
        <keyword attribute="Keyword" context="#stay" String="keywords"/>
        <keyword attribute="Directive" context="#stay" String="directives"/>
        <keyword attribute="Type" context="#stay" String="types"/>
        <Float attribute="Number" context="#stay"/>
        <Int attribute="Number" context="#stay"/>
        <DetectChar attribute="String" context="String1" char="&quot;" />
        <DetectChar attribute="String" context="String2" char="'" />
        <StringDetect attribute="Directive" context="Prep1" String="(*$"/>
        <Detect2Chars attribute="Comment" context="Comment2" char="(" char1="*"/>
      </context>
      <context attribute="String" lineEndContext="#pop" name="String1">
        <DetectChar attribute="String" context="#pop" char="&quot;"/>
      </context>
      <context attribute="String" lineEndContext="#pop" name="String2">
        <DetectChar attribute="String" context="#pop" char="'" />
      </context>
      <context attribute="Comment" lineEndContext="#stay" name="Comment2">
        <Detect2Chars attribute="Comment" context="#pop" char="*" char1=")"/>
      </context>
      <context attribute="Comment" lineEndContext="#pop" name="Comment3" />
      <context attribute="Directive" lineEndContext="#stay" name="Prep1">
        <StringDetect attribute="Directive" context="Prep1" String="$*)"/>
      </context>

    </contexts>
    <itemDatas>
      <itemData name="Normal Text" defStyleNum="dsNormal" />
      <itemData name="Keyword"     defStyleNum="dsKeyword" />
      <itemData name="Type"        defStyleNum="dsDataType"/>
      <itemData name="Number"      defStyleNum="dsDecVal" />
      <itemData name="String"      defStyleNum="dsString" />
      <itemData name="Directive"   defStyleNum="dsOthers" />
      <itemData name="Comment"     defStyleNum="dsComment" />
    </itemDatas>
  </highlighting>
  <general>
    <keywords casesensitive="1" />
    <comments>
      <comment name="multiLine" start="(*" end="*)" />
    </comments>
  </general>
</language>
