<?xml version="1.0" encoding="UTF-8"?>
<!-- copy this file to $HOME/.local/share/katepart5/syntax/ to get Kate Syntax Highlighting for FeenoX input files -->
<language name="FeenoX" version="1" kateversion="5.54.0" section="Scientific" extensions="*.fee" author="jeremy theler" license="GPL">
  <highlighting>
    <list name="prim_keywords">
      <item>ABORT</item>
      <item>ALIAS</item>
      <item>AS</item>
      <item>ASCENDING</item>
      <item>ASCENDING_ORDER</item>
      <item>ASCII_FILE</item>
      <item>ASCII_FILE_PATH</item>
      <item>AXISYMMETRIC</item>
      <item>BC</item>
      <item>BINARY_FILE</item>
      <item>BINARY_FILE_PATH</item>
      <item>BOUNDARY_CONDITION</item>
      <item>CELL</item>
      <item>CELLS</item>
      <item>CLOSE</item>
      <item>COLS</item>
      <item>COLUMNS</item>
      <item>DATA</item>
      <item>DEFAULT_ARGUMENT_VALUE</item>
      <item>DESCENDING</item>
      <item>DESCENDING_ORDER</item>
      <item>DIM</item>
      <item>DIMENSION</item>
      <item>DIMENSIONS</item>
      <item>DIRICHLET_SCALING</item>
      <item>DUMP</item>
      <item>EIGEN_FORMULATION</item>
      <item>EIGEN_SOLVER</item>
      <item>ELSE</item>
      <item>ENDIF</item>
      <item>EPS</item>
      <item>EPSABS</item>
      <item>EPSREL</item>
      <item>EPS_TYPE</item>
      <item>FILE</item>
      <item>FILE_FORMAT</item>
      <item>FILE_PATH</item>
      <item>FIND_EXTREMA</item>
      <item>FIT</item>
      <item>FORMAT</item>
      <item>FROM</item>
      <item>FUNCTION</item>
      <item>FUNCTION_DATA</item>
      <item>GAUSS</item>
      <item>GRADIENT</item>
      <item>GUESS</item>
      <item>HEADER</item>
      <item>HISTORY</item>
      <item>ID</item>
      <item>IF</item>
      <item>IGNORE_NULL</item>
      <item>I_MAX</item>
      <item>I_MIN</item>
      <item>IMPLICIT</item>
      <item>INCLUDE</item>
      <item>INITIAL_CONDITIONS</item>
      <item>INITIAL_CONDITIONS_MODE</item>
      <item>INPUT</item>
      <item>INPUT_FILE</item>
      <item>INTEGRATE</item>
      <item>INTEGRATION</item>
      <item>INTERPOLATION</item>
      <item>INTERPOLATION_THRESHOLD</item>
      <item>IS</item>
      <item>K</item>
      <item>K_bc</item>
      <item>KSP</item>
      <item>KSP_TYPE</item>
      <item>LINEAR</item>
      <item>LINEAR_SOLVER</item>
      <item>M</item>
      <item>MAIN</item>
      <item>MATERIAL</item>
      <item>MATRIX</item>
      <item>MAX</item>
      <item>MAX_ITER</item>
      <item>M_bc</item>
      <item>MESH</item>
      <item>METHOD</item>
      <item>MIN</item>
      <item>MODE</item>
      <item>MODES</item>
      <item>NODE</item>
      <item>NODES</item>
      <item>NO_MESH</item>
      <item>NOMESH</item>
      <item>NONEWLINE</item>
      <item>NON_LINEAR</item>
      <item>NON_LINEAR_SOLVER</item>
      <item>NONLINEAR_SOLVER</item>
      <item>NO_PHYSICAL_NAMES</item>
      <item>NSTEPS</item>
      <item>OFFSET</item>
      <item>OPEN</item>
      <item>OUTPUT</item>
      <item>OUTPUT_FILE</item>
      <item>OVER</item>
      <item>PATH</item>
      <item>PC</item>
      <item>PC_TYPE</item>
      <item>PHASE_SPACE</item>
      <item>PHYSICAL_ENTITY</item>
      <item>PHYSICAL_GROUP</item>
      <item>PRECONDITIONER</item>
      <item>PRINT</item>
      <item>PRINT_FUNCTION</item>
      <item>PRINT_VECTOR</item>
      <item>PROBLEM</item>
      <item>PROGRESS</item>
      <item>PROGRESS_ASCII</item>
      <item>QUASISTATIC</item>
      <item>RANGE_MAX</item>
      <item>RANGE_MIN</item>
      <item>READ</item>
      <item>READ_FIELD</item>
      <item>READ_FUNCTION</item>
      <item>READ_MESH</item>
      <item>RE_READ</item>
      <item>RESIDUALS</item>
      <item>RESULT</item>
      <item>ROWS</item>
      <item>SCALAR_FORMAT</item>
      <item>SCALE</item>
      <item>SEM</item>
      <item>SEMAPHORE</item>
      <item>SEP</item>
      <item>SEPARATOR</item>
      <item>SHEPARD_EXPONENT</item>
      <item>SHEPARD_RADIUS</item>
      <item>SHM</item>
      <item>SHM_OBJECT</item>
      <item>SIZE</item>
      <item>SIZES</item>
      <item>SNES</item>
      <item>SNES_TYPE</item>
      <item>SOLVE</item>
      <item>SOLVE_PROBLEM</item>
      <item>SORT_VECTOR</item>
      <item>SPECTRAL_TRANSFORMATION</item>
      <item>ST</item>
      <item>STEP</item>
      <item>STRING</item>
      <item>ST_TYPE</item>
      <item>TEXT</item>
      <item>TIME_ADAPTATION</item>
      <item>TIME_PATH</item>
      <item>TO</item>
      <item>TOL_ABS</item>
      <item>TOL_REL</item>
      <item>TRANSIENT</item>
      <item>TRANSIENT_SOLVER</item>
      <item>TS</item>
      <item>TS_ADAPT</item>
      <item>TS_ADAPT_TYPE</item>
      <item>TS_TYPE</item>
      <item>UNKNOWNS</item>
      <item>UPDATE_EACH_STEP</item>
      <item>VAR</item>
      <item>VARIABLE</item>
      <item>VARIABLES</item>
      <item>VARS</item>
      <item>VECTOR</item>
      <item>VECTORS</item>
      <item>VECTOR_SORT</item>
      <item>VERBOSE</item>
      <item>VIA</item>
      <item>WRITE</item>
      <item>WRITE_MESH</item>
      <item>X_INCREASES_FIRST</item>
      <item>X_MAX</item>
      <item>X_MIN</item>
      <item>Y_MAX</item>
      <item>Y_MIN</item>
      <item>Z_MAX</item>
      <item>Z_MIN</item>
      <item>ALLOWED</item>
      <item>AS_PROVIDED</item>
      <item>NONE</item>
      <item>POST</item>
      <item>SKIP_HEADER_STEP</item>
      <item>SKIP_STATIC_STEP</item>
      <item>SKIP_STEP</item>
      <item>SKIP_TIME</item>
      <item>WAIT</item>
    </list>
    <list name="sec_keywords">
    </list>
    <list name="internals">
      <item>dae_rtol</item>
      <item>done</item>
      <item>done_static</item>
      <item>done_transient</item>
      <item>dont_quit</item>
      <item>dont_report</item>
      <item>dt</item>
      <item>end_time</item>
      <item>i</item>
      <item>infinite</item>
      <item>in_static</item>
      <item>in_static_first</item>
      <item>in_static_last</item>
      <item>in_transient</item>
      <item>in_transient_first</item>
      <item>in_transient_last</item>
      <item>j</item>
      <item>max_dt</item>
      <item>min_dt</item>
      <item>ncores</item>
      <item>on_gsl_error</item>
      <item>on_nan</item>
      <item>on_sundials_error</item>
      <item>pi</item>
      <item>pid</item>
      <item>quit</item>
      <item>realtime_scale</item>
      <item>report</item>
      <item>static_steps</item>
      <item>step_static</item>
      <item>step_transient</item>
      <item>t</item>
      <item>zero</item>
    </list>
    <list name="functions">
      <item>abs</item>
      <item>acos</item>
      <item>asin</item>
      <item>atan</item>
      <item>atan2</item>
      <item>ceil</item>
      <item>clock</item>
      <item>cos</item>
      <item>cosh</item>
      <item>cpu_time</item>
      <item>d_dt</item>
      <item>deadband</item>
      <item>derivative</item>
      <item>equal</item>
      <item>exp</item>
      <item>expint1</item>
      <item>expint2</item>
      <item>expint3</item>
      <item>expintn</item>
      <item>floor</item>
      <item>func_min</item>
      <item>gauss_kronrod</item>
      <item>gauss_legendre</item>
      <item>heaviside</item>
      <item>if</item>
      <item>integral</item>
      <item>integral_dt</item>
      <item>integral_euler_dt</item>
      <item>is_even</item>
      <item>is_in_interval</item>
      <item>is_odd</item>
      <item>j0</item>
      <item>lag</item>
      <item>lag_bilinear</item>
      <item>lag_euler</item>
      <item>last</item>
      <item>limit</item>
      <item>limit_dt</item>
      <item>log</item>
      <item>mark_max</item>
      <item>mark_min</item>
      <item>max</item>
      <item>memory</item>
      <item>min</item>
      <item>mod</item>
      <item>not</item>
      <item>prod</item>
      <item>quasi_random</item>
      <item>random</item>
      <item>random_gauss</item>
      <item>root</item>
      <item>round</item>
      <item>sawtooth_wave</item>
      <item>sgn</item>
      <item>sin</item>
      <item>sinh</item>
      <item>sqrt</item>
      <item>square_wave</item>
      <item>sum</item>
      <item>tan</item>
      <item>tanh</item>
      <item>threshold_max</item>
      <item>threshold_min</item>
      <item>triangular_wave</item>
      <item>vecdot</item>
      <item>vecmax</item>
      <item>vecmaxindex</item>
      <item>vecmin</item>
      <item>vecminindex</item>
      <item>vecnorm</item>
      <item>vecsize</item>
      <item>vecsum</item>
      <item>wall_time</item>
    </list>
    <contexts>
      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">

<!-- do not detect strings (for now) -->
<!--         <DetectChar attribute="String" context="String" char="&quot;"/> -->
<!--         <DetectChar attribute="Normal Text" context="#stay"  char="&quot;"/> -->

        <keyword attribute="Keyword1" context="#stay" String="prim_keywords"/>
        <keyword attribute="Keyword2" context="#stay" String="sec_keywords"/>
        <keyword attribute="Identifier" context="#stay" String="internals"/>
        <keyword attribute="Function" context="#stay" String="functions"/>

        <DetectChar char="{" attribute="Operator" context="#stay" beginRegion="block" />
        <DetectChar char="}" attribute="Operator" context="#stay" endRegion="block" />

        <DetectChar char="=" attribute="Operator" context="#stay" />
        <DetectChar char="!" attribute="Operator" context="#stay" />
        <DetectChar char="+" attribute="Operator" context="#stay" />
        <DetectChar char="-" attribute="Operator" context="#stay" />
        <DetectChar char="/" attribute="Operator" context="#stay" />
        <DetectChar char="*" attribute="Operator" context="#stay" />
        <DetectChar char="^" attribute="Operator" context="#stay" />
<!--        <DetectChar char="<" attribute="Operator" context="#stay" />-->
<!--        <DetectChar char=">" attribute="Operator" context="#stay" />-->
        <DetectChar char="^" attribute="Operator" context="#stay" />
        <DetectChar char="(" attribute="Operator" context="#stay" />
        <DetectChar char=")" attribute="Operator" context="#stay" />

        <Float attribute="Types" context="#stay"/>
        <Int attribute="Types" context="#stay"/>
        <Detect2Chars char="\" char1="#" attribute="Normal Text" context="#stay" />
        <DetectChar attribute="Comment" context="Comment" char="#"/>
      </context>
    
      <context name="Comment" attribute="Comment" lineEndContext="#pop"/>

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

    </contexts>

    <itemDatas>
      <itemData name="Normal Text" defStyleNum="dsNormal"/>
      <itemData name="Keyword1" defStyleNum="dsKeyword"/>
      <itemData name="Keyword2" defStyleNum="dsKeyword" color="#003300"/>
      <itemData name="Operator" defStyleNum="dsOperator" color="#666666"/>
      <itemData name="Identifier" defStyleNum="dsOthers" color="#663333" italic="1"/>
      <itemData name="Function" defStyleNum="dsFunction" color="#006600" bold="1"/>
      <itemData name="Types" defStyleNum="dsDataType" color="#3333CC"/>
      <itemData name="String" defStyleNum="dsString" color="#666699"/>
      <itemData name="Comment" defStyleNum="dsComment"/>
    </itemDatas>
  </highlighting>

  <general>
    <comments>
      <comment name="singleLine" start="#" />
    </comments>
    <keywords casesensitive="1" />
  </general>
</language>
