<?xml version="1.0"?>

<!DOCTYPE MODE SYSTEM "xmode.dtd">

<!-- LotusScript mode by Johan Känngård, http://dev.kanngard.net/ -->
<!-- 2003-11-19 Added constant "me" -->
<!-- 2003-05-07 Added tab and space whitespace rules -->
<!-- Put in into (jEdit home)/modes and add these lines to the (jEdit home)/modes/catalog file:
&ltMODE NAME="lotusscript"  FILE="lotusscript.xml"
        FILE_NAME_GLOB="*.{ls,lss}" /&gt
-->
<!-- Created using the vbscript.xml file (created by Andre Kaplan) supplied with jEdit 4.1 -->
<MODE>
  <PROPS>
    <PROPERTY NAME="lineComment" VALUE="'" />
  </PROPS>

  <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">
    <!-- whitespace: (space and tab) -->
    <WHITESPACE> </WHITESPACE>
    <WHITESPACE>  </WHITESPACE>

    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
      <BEGIN>"</BEGIN>
      <END>"</END>
    </SPAN>
    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">
      <BEGIN>|</BEGIN>
      <END>|</END>
    </SPAN>

    <!-- conditional compilation -->
    <EOL_SPAN TYPE="KEYWORD2">%if</EOL_SPAN>
    <EOL_SPAN TYPE="KEYWORD2">%else</EOL_SPAN>
    <EOL_SPAN TYPE="KEYWORD2">%elseif</EOL_SPAN>
    <EOL_SPAN TYPE="KEYWORD2">%end if</EOL_SPAN>
    <EOL_SPAN TYPE="KEYWORD2">%include</EOL_SPAN>
    
    <EOL_SPAN TYPE="KEYWORD2">declare</EOL_SPAN>
    <EOL_SPAN TYPE="KEYWORD2">lib</EOL_SPAN>
    <EOL_SPAN TYPE="KEYWORD2">alias</EOL_SPAN>
    <EOL_SPAN TYPE="KEYWORD2">use</EOL_SPAN>
    <EOL_SPAN TYPE="KEYWORD2">uselsx</EOL_SPAN>


    <!-- comments -->
    <EOL_SPAN TYPE="COMMENT1">'</EOL_SPAN>
    <EOL_SPAN TYPE="COMMENT1">rem </EOL_SPAN>
    <SPAN TYPE="COMMENT2">
      <BEGIN>%REM</BEGIN>
      <END>%END REM</END>
    </SPAN>

    <!-- Comparison operators -->
    <SEQ TYPE="OPERATOR">&lt;</SEQ>
    <SEQ TYPE="OPERATOR">&lt;=</SEQ>
    <SEQ TYPE="OPERATOR">&gt;=</SEQ>
    <SEQ TYPE="OPERATOR">&gt;</SEQ>
    <SEQ TYPE="OPERATOR">=</SEQ>
    <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>
    <SEQ TYPE="OPERATOR">.</SEQ>
    <!-- See in keywords: is -->

    <!-- Arithmetic operators -->
    <SEQ TYPE="OPERATOR">+</SEQ>
    <SEQ TYPE="OPERATOR">-</SEQ>
    <SEQ TYPE="OPERATOR">*</SEQ>
    <SEQ TYPE="OPERATOR">/</SEQ>
    <SEQ TYPE="OPERATOR">\</SEQ>
    <!-- See in keywords: mod -->
    <SEQ TYPE="OPERATOR">^</SEQ>

    <!-- Concatenation operators -->
    <SEQ TYPE="OPERATOR">&amp;</SEQ>
    <!-- <SEQ TYPE="OPERATOR">+</SEQ> -->
 
    <!-- Logical operators -->
    <!-- See in keywords: and, or, not, xor, eqv -->

    <!-- EOL Continuation -->
<!--    <SEQ TYPE="NULL">_</SEQ>-->
    <!-- Instruction separator -->
    <MARK_PREVIOUS TYPE="LABEL" EXCLUDE_MATCH="TRUE"
      AT_LINE_START="TRUE">:</MARK_PREVIOUS>

    <KEYWORDS>
      <!-- Deftype Statements -->
      <KEYWORD1>defcur</KEYWORD1>
      <KEYWORD1>defdbl</KEYWORD1>
      <KEYWORD1>defint</KEYWORD1>
      <KEYWORD1>deflng</KEYWORD1>
      <KEYWORD1>defsng</KEYWORD1>
      <KEYWORD1>defstr</KEYWORD1>
      <KEYWORD1>defvar</KEYWORD1>
    
      <!-- Conditional Statements -->
      <KEYWORD1>if</KEYWORD1>
      <KEYWORD1>then</KEYWORD1>
      <KEYWORD1>else</KEYWORD1>
      <KEYWORD1>elseif</KEYWORD1>
      <KEYWORD1>select</KEYWORD1>
      <KEYWORD1>case</KEYWORD1>

      <!-- Loop Statements -->
      <!-- For..Next -->
      <KEYWORD1>for</KEYWORD1>
      <KEYWORD1>to</KEYWORD1>
      <KEYWORD1>step</KEYWORD1>
      <KEYWORD1>next</KEYWORD1>
      <!-- ForAll..End ForAll -->
      <KEYWORD1>forall</KEYWORD1>
      <KEYWORD1>in</KEYWORD1>
      <!-- Do..Loop -->
      <KEYWORD1>do</KEYWORD1>
      <KEYWORD1>while</KEYWORD1>
      <KEYWORD1>until</KEYWORD1>
      <KEYWORD1>loop</KEYWORD1>
      <!-- While..Wend -->
      <KEYWORD1>wend</KEYWORD1>

      <!-- Closing, Exit Statements -->
      <KEYWORD1>exit</KEYWORD1>
      <KEYWORD1>end</KEYWORD1>

      <!-- Methods, Functions, Class, Properties, Variables -->
      <KEYWORD1>function</KEYWORD1>
      <KEYWORD1>sub</KEYWORD1>
      <KEYWORD1>class</KEYWORD1>
      <KEYWORD1>type</KEYWORD1>
      <KEYWORD1>property</KEYWORD1>
      <KEYWORD1>get</KEYWORD1>
      <KEYWORD1>let</KEYWORD1>
      <KEYWORD1>set</KEYWORD1>
      <KEYWORD1>bind</KEYWORD1>
      <KEYWORD1>getobject</KEYWORD1>
      <!-- Special functions / subs -->
      <KEYWORD1>(options)</KEYWORD1>
      <KEYWORD1>(declarations)</KEYWORD1>
      <KEYWORD1>initialize</KEYWORD1>
      <KEYWORD1>terminate</KEYWORD1>

      <!-- Parameters passing -->
      <KEYWORD1>byval</KEYWORD1>

      <!-- Declaration -->
      <KEYWORD1>const</KEYWORD1>
      <KEYWORD1>dim</KEYWORD1>
      <KEYWORD1>redim</KEYWORD1>
      <KEYWORD1>preserve</KEYWORD1>
      <KEYWORD1>as</KEYWORD1>
      
      <!-- Object Assignement/Instantiation/Deletion -->
      <KEYWORD1>set</KEYWORD1>
      <KEYWORD1>with</KEYWORD1>
      <KEYWORD1>new</KEYWORD1>
      <KEYWORD1>delete</KEYWORD1>
      
      <!-- Visibility -->
      <KEYWORD1>public</KEYWORD1>
      <KEYWORD1>private</KEYWORD1>
      <KEYWORD1>static</KEYWORD1>

      <!-- Comments -->
      <KEYWORD1>rem</KEYWORD1>

      <!-- Function Call - Dynamic Evaluation -->
      <KEYWORD1>call</KEYWORD1>
      <KEYWORD1>execute</KEYWORD1>
      <KEYWORD1>evaluate</KEYWORD1>

      <!-- Miscellaneous -->
      <KEYWORD1>on</KEYWORD1>
      <KEYWORD1>error</KEYWORD1>
      <KEYWORD1>event</KEYWORD1>
      <KEYWORD1>from</KEYWORD1>
      <KEYWORD1>remove</KEYWORD1>
      <KEYWORD1>goto</KEYWORD1>
      <KEYWORD1>gosub</KEYWORD1>
      <KEYWORD1>return</KEYWORD1>
      <KEYWORD1>resume</KEYWORD1>
      <KEYWORD1>option</KEYWORD1>
      <KEYWORD1>base</KEYWORD1>
      <KEYWORD1>explicit</KEYWORD1>
      <KEYWORD1>compare</KEYWORD1>
      <KEYWORD1>declare</KEYWORD1>
      <KEYWORD1>erase</KEYWORD1>
      <KEYWORD1>randomize</KEYWORD1>

      <!-- Operators -->
      <!-- Comparison operators -->
      <OPERATOR>is</OPERATOR>
      <OPERATOR>isa</OPERATOR>
      <!-- Arithmetic operators -->
      <OPERATOR>mod</OPERATOR>
      <!-- Logical operators -->
      <OPERATOR>and</OPERATOR>
      <OPERATOR>or</OPERATOR>
      <OPERATOR>not</OPERATOR>
      <OPERATOR>xor</OPERATOR>
      <OPERATOR>imp</OPERATOR>

      <!-- Datatypes Constants/Literals -->
      <KEYWORD3>false</KEYWORD3>
      <KEYWORD3>true</KEYWORD3>
      <KEYWORD3>empty</KEYWORD3>
      <KEYWORD3>nothing</KEYWORD3>
      <KEYWORD3>null</KEYWORD3>
      <KEYWORD3>double</KEYWORD3>
      <KEYWORD3>single</KEYWORD3>
      <KEYWORD3>currency</KEYWORD3>
      <KEYWORD3>long</KEYWORD3>
      <KEYWORD3>integer</KEYWORD3>
      <KEYWORD3>variant</KEYWORD3>
      <KEYWORD3>string</KEYWORD3>
      <KEYWORD3>list</KEYWORD3>
      <KEYWORD3>me</KEYWORD3>
      
      <KEYWORD2>err</KEYWORD2>
      <KEYWORD2>erl</KEYWORD2>

      <!-- Built-in Functions -->
      <!-- File Handling -->
      <KEYWORD2>curdir</KEYWORD2>
      <KEYWORD2>curdrive</KEYWORD2>
      <KEYWORD2>chdir</KEYWORD2>
      <KEYWORD2>chdrive</KEYWORD2>
      <KEYWORD2>mkdir</KEYWORD2>
      <KEYWORD2>rmdir</KEYWORD2>
      <KEYWORD2>name</KEYWORD2>
      <KEYWORD2>dir</KEYWORD2>
      <KEYWORD2>kill</KEYWORD2>
      <KEYWORD2>binary</KEYWORD2>
      <KEYWORD2>random</KEYWORD2>
      <KEYWORD2>open</KEYWORD2>
      <KEYWORD2>close</KEYWORD2>
      <KEYWORD2>append</KEYWORD2>
      <KEYWORD2>output</KEYWORD2>
      <KEYWORD2>width</KEYWORD2>
      <KEYWORD2>eof</KEYWORD2>
      <KEYWORD2>lof</KEYWORD2>
      <KEYWORD2>loc</KEYWORD2>
      <KEYWORD2>seek</KEYWORD2>
      <KEYWORD2>tab</KEYWORD2>
      <KEYWORD2>lock</KEYWORD2>
      <KEYWORD2>unlock</KEYWORD2>
      <KEYWORD2>fileattr</KEYWORD2>
      <KEYWORD2>getfileattr</KEYWORD2>
      <KEYWORD2>setfileattr</KEYWORD2>
      <KEYWORD2>getattr</KEYWORD2>
      <KEYWORD2>setattr</KEYWORD2>
      <KEYWORD2>filecopy</KEYWORD2>
      <KEYWORD2>filedatetime</KEYWORD2>
      <KEYWORD2>filelen</KEYWORD2>
      <KEYWORD2>freefile</KEYWORD2>
      <KEYWORD2>reset</KEYWORD2>
      <KEYWORD2>input</KEYWORD2>
      <KEYWORD2>inputb</KEYWORD2>
      <KEYWORD2>inputbp</KEYWORD2>
      <KEYWORD2>line input</KEYWORD2>
      <KEYWORD2>put</KEYWORD2>
      <KEYWORD2>write</KEYWORD2>
      <!-- Array Handling -->
      <KEYWORD2>lbound</KEYWORD2>
      <KEYWORD2>ubound</KEYWORD2>
      <KEYWORD2>arrayappend</KEYWORD2>
      <KEYWORD2>arraygetindex</KEYWORD2>
      <KEYWORD2>arrayreplace</KEYWORD2>
      <KEYWORD2>listtag</KEYWORD2>
      <!-- Conversion Functions (Variant) -->
      <KEYWORD2>ccur</KEYWORD2>
      <KEYWORD2>cdat</KEYWORD2>
      <KEYWORD2>cdbl</KEYWORD2>
      <KEYWORD2>cint</KEYWORD2>
      <KEYWORD2>clng</KEYWORD2>
      <KEYWORD2>csng</KEYWORD2>
      <KEYWORD2>cstr</KEYWORD2>
      <KEYWORD2>cvar</KEYWORD2>
      <KEYWORD2>val</KEYWORD2>
      <!-- Conversion Functions (Radix) -->
      <KEYWORD2>hex</KEYWORD2>
      <KEYWORD2>oct</KEYWORD2>
      <KEYWORD2>bin</KEYWORD2>
      <!-- Date/Time Functions -->
      <KEYWORD2>date</KEYWORD2>
      <KEYWORD2>time</KEYWORD2>
      <KEYWORD2>datenumber</KEYWORD2>
      <KEYWORD2>datevalue</KEYWORD2>
      <KEYWORD2>day</KEYWORD2>
      <KEYWORD2>month</KEYWORD2>
      <KEYWORD2>weekday</KEYWORD2>
      <KEYWORD2>year</KEYWORD2>
      <KEYWORD2>hour</KEYWORD2>
      <KEYWORD2>minute</KEYWORD2>
      <KEYWORD2>second</KEYWORD2>
      <KEYWORD2>now</KEYWORD2>
      <KEYWORD2>today</KEYWORD2>
      <KEYWORD2>timer</KEYWORD2>
      <KEYWORD2>timeserial</KEYWORD2>
      <KEYWORD2>timenumber</KEYWORD2>
      <KEYWORD2>timevalue</KEYWORD2>
      <!-- Formatting Strings -->
      <KEYWORD2>format</KEYWORD2>
      <!-- Input/Output -->
      <KEYWORD2>inputbox</KEYWORD2>
      <KEYWORD2>msgbox</KEYWORD2>
      <KEYWORD2>messagebox</KEYWORD2>
      <KEYWORD2>print</KEYWORD2>
      <KEYWORD2>beep</KEYWORD2>
      <KEYWORD2>environ</KEYWORD2>
      <KEYWORD2>sendkeys</KEYWORD2>
      <!-- Math Functions -->
      <KEYWORD2>atn</KEYWORD2>
      <KEYWORD2>atn2</KEYWORD2>
      <KEYWORD2>cos</KEYWORD2>
      <KEYWORD2>acos</KEYWORD2>
      <KEYWORD2>sin</KEYWORD2>
      <KEYWORD2>asin</KEYWORD2>
      <KEYWORD2>tan</KEYWORD2>
      <KEYWORD2>exp</KEYWORD2>
      <KEYWORD2>log</KEYWORD2>
      <KEYWORD2>sqr</KEYWORD2>
      <KEYWORD2>rnd</KEYWORD2>
      <!-- Objects -->
      <KEYWORD2>createobject</KEYWORD2>
      <!-- Rounding -->
      <KEYWORD2>abs</KEYWORD2>
      <KEYWORD2>int</KEYWORD2>
      <KEYWORD2>fix</KEYWORD2>
      <KEYWORD2>fraction</KEYWORD2>
      <KEYWORD2>round</KEYWORD2>
      <KEYWORD2>sgn</KEYWORD2>
      <!-- Strings -->
      <KEYWORD2>asc</KEYWORD2>
      <KEYWORD2>uni</KEYWORD2>
      <KEYWORD2>chr</KEYWORD2>
      <KEYWORD2>uchr</KEYWORD2>
      <KEYWORD2>instr</KEYWORD2>
      <KEYWORD2>instrb</KEYWORD2>
      <KEYWORD2>instrbp</KEYWORD2>
      <KEYWORD2>instrc</KEYWORD2>
      <KEYWORD2>len</KEYWORD2>
      <KEYWORD2>lenb</KEYWORD2>
      <KEYWORD2>lenbp</KEYWORD2>
      <KEYWORD2>lenc</KEYWORD2>
      <KEYWORD2>lcase</KEYWORD2>
      <KEYWORD2>ucase</KEYWORD2>
      <KEYWORD2>left</KEYWORD2>
      <KEYWORD2>leftb</KEYWORD2>
      <KEYWORD2>leftbp</KEYWORD2>
      <KEYWORD2>leftc</KEYWORD2>
      <KEYWORD2>like</KEYWORD2>
      <KEYWORD2>lset</KEYWORD2>
      <KEYWORD2>mid</KEYWORD2>
      <KEYWORD2>midb</KEYWORD2>
      <KEYWORD2>midbp</KEYWORD2>
      <KEYWORD2>midc</KEYWORD2>
      <KEYWORD2>right</KEYWORD2>
      <KEYWORD2>rightb</KEYWORD2>
      <KEYWORD2>rightbp</KEYWORD2>
      <KEYWORD2>rightc</KEYWORD2>
      <KEYWORD2>rset</KEYWORD2>
      <KEYWORD2>space</KEYWORD2>
      <KEYWORD2>spc</KEYWORD2>
      <KEYWORD2>strcomp</KEYWORD2>
      <KEYWORD2>str</KEYWORD2>
      <KEYWORD2>strcompare</KEYWORD2>
      <KEYWORD2>strconv</KEYWORD2>
      <KEYWORD2>ltrim</KEYWORD2>
      <KEYWORD2>rtrim</KEYWORD2>
      <KEYWORD2>trim</KEYWORD2>
      <KEYWORD2>fulltrim</KEYWORD2>
      <KEYWORD2>strleft</KEYWORD2>
      <KEYWORD2>strleftback</KEYWORD2>
      <KEYWORD2>strright</KEYWORD2>
      <KEYWORD2>strrightback</KEYWORD2>
      <KEYWORD2>imesetmode</KEYWORD2>
      <KEYWORD2>imestatus</KEYWORD2>
      <KEYWORD2>ustring</KEYWORD2>
      
      <!-- Variants -->
      <KEYWORD2>isarray</KEYWORD2>
      <KEYWORD2>isdate</KEYWORD2>
      <KEYWORD2>isdefined</KEYWORD2>
      <KEYWORD2>isempty</KEYWORD2>
      <KEYWORD2>iselement</KEYWORD2>
      <KEYWORD2>isnull</KEYWORD2>
      <KEYWORD2>islist</KEYWORD2>
      <KEYWORD2>isnumeric</KEYWORD2>
      <KEYWORD2>isobject</KEYWORD2>
      <KEYWORD2>isscalar</KEYWORD2>
      <KEYWORD2>isunknown</KEYWORD2>
      <KEYWORD2>typename</KEYWORD2>
      <KEYWORD2>datatype</KEYWORD2>
      <KEYWORD2>vartype</KEYWORD2>
      <!-- Thread / sync handling -->
      <KEYWORD2>sleep</KEYWORD2>
      <KEYWORD2>yield</KEYWORD2>
      <KEYWORD2>createlock</KEYWORD2>
      <KEYWORD2>destroylock</KEYWORD2>
      <KEYWORD2>codelock</KEYWORD2>
      <KEYWORD2>codeunlock</KEYWORD2>
      <KEYWORD2>codelockcheck</KEYWORD2>
      <KEYWORD2>activateapp</KEYWORD2>
      <KEYWORD2>shell</KEYWORD2>
      <KEYWORD2>command</KEYWORD2>
      <KEYWORD2>lsi_info</KEYWORD2>
      <KEYWORD2>getthreadinfo</KEYWORD2>
      <KEYWORD2>stop</KEYWORD2>
    </KEYWORDS>
  </RULES>
</MODE>

