<?xml version="1.0" encoding="UTF-8"?>
<!--
  Julia syntax definition for gridmicrotex.
  Written for this package, not derived from any third-party grammar.
  Reserved words follow the Julia manual's list.
-->
<language name="Julia" alternativeNames="jl" section="Scientific"
          extensions="*.jl" version="1" kateversion="5.0"
          casesensitive="1" license="MIT">
  <highlighting>
    <list name="controlflow">
      <item>if</item>
      <item>elseif</item>
      <item>else</item>
      <item>end</item>
      <item>for</item>
      <item>while</item>
      <item>break</item>
      <item>continue</item>
      <item>return</item>
      <item>do</item>
      <item>try</item>
      <item>catch</item>
      <item>finally</item>
      <item>in</item>
      <item>isa</item>
      <item>where</item>
    </list>
    <list name="keywords">
      <item>function</item>
      <item>macro</item>
      <item>module</item>
      <item>baremodule</item>
      <item>using</item>
      <item>import</item>
      <item>export</item>
      <item>struct</item>
      <item>mutable</item>
      <item>abstract</item>
      <item>primitive</item>
      <item>type</item>
      <item>let</item>
      <item>global</item>
      <item>local</item>
      <item>const</item>
      <item>quote</item>
      <item>begin</item>
    </list>
    <list name="constants">
      <item>true</item>
      <item>false</item>
      <item>nothing</item>
      <item>missing</item>
      <item>Inf</item>
      <item>NaN</item>
      <item>pi</item>
    </list>
    <list name="types">
      <item>Int</item>
      <item>Int8</item>
      <item>Int16</item>
      <item>Int32</item>
      <item>Int64</item>
      <item>UInt</item>
      <item>Float16</item>
      <item>Float32</item>
      <item>Float64</item>
      <item>Bool</item>
      <item>Char</item>
      <item>String</item>
      <item>Symbol</item>
      <item>Array</item>
      <item>Vector</item>
      <item>Matrix</item>
      <item>Dict</item>
      <item>Set</item>
      <item>Tuple</item>
      <item>Any</item>
      <item>Number</item>
      <item>Real</item>
      <item>Complex</item>
      <item>Rational</item>
      <item>AbstractArray</item>
      <item>AbstractString</item>
    </list>
    <contexts>
      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
        <DetectSpaces attribute="Normal Text"/>
        <RegExpr attribute="Comment" String="#.*$"/>
        <RegExpr attribute="String" String="&quot;&quot;&quot;.*?&quot;&quot;&quot;"/>
        <RegExpr attribute="String" String="&quot;(?:[^&quot;\\]|\\.)*&quot;"/>
        <RegExpr attribute="Char" String="'(?:[^'\\]|\\.)'"/>
        <RegExpr attribute="Macro" String="@[A-Za-z_][A-Za-z0-9_!]*"/>
        <keyword attribute="Control Flow" String="controlflow"/>
        <keyword attribute="Keyword" String="keywords"/>
        <keyword attribute="Constant" String="constants"/>
        <keyword attribute="Data Type" String="types"/>
        <RegExpr attribute="Float" String="\b[0-9]*\.[0-9]+(?:[eE][-+]?[0-9]+)?\b"/>
        <RegExpr attribute="Decimal" String="\b[0-9][0-9_]*\b"/>
        <RegExpr attribute="Function" String="\b[A-Za-z_][A-Za-z0-9_!]*(?=\s*\()"/>
        <!-- Last, so keywords and calls win. Consuming a whole
             identifier in one match keeps the scan off the
             per-character path. -->
        <DetectIdentifier attribute="Normal Text"/>
      </context>
    </contexts>
    <itemDatas>
      <itemData name="Normal Text"  defStyleNum="dsNormal"/>
      <itemData name="Comment"      defStyleNum="dsComment"/>
      <itemData name="String"       defStyleNum="dsString"/>
      <itemData name="Char"         defStyleNum="dsChar"/>
      <itemData name="Keyword"      defStyleNum="dsKeyword"/>
      <itemData name="Control Flow" defStyleNum="dsControlFlow"/>
      <itemData name="Constant"     defStyleNum="dsConstant"/>
      <itemData name="Data Type"    defStyleNum="dsDataType"/>
      <itemData name="Macro"        defStyleNum="dsPreprocessor"/>
      <itemData name="Decimal"      defStyleNum="dsDecVal"/>
      <itemData name="Float"        defStyleNum="dsFloat"/>
      <itemData name="Function"     defStyleNum="dsFunction"/>
    </itemDatas>
  </highlighting>
</language>
