-<?xml version="1.0"?>\r
-\r
-<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
-\r
-<!--\r
- Haskell mode by Kristian Ovaska (kristian.ovaska@helsinki.fi)\r
- Based on Haskell 98\r
--->\r
-\r
-<MODE>\r
-\r
- <PROPS>\r
- <PROPERTY NAME="commentStart" VALUE="{-" />\r
- <PROPERTY NAME="commentEnd" VALUE="-}" />\r
- <PROPERTY NAME="lineComment" VALUE="--" />\r
- <!-- apparently, this is required... -->\r
- <PROPERTY NAME="tabSize" VALUE="8" />\r
- <PROPERTY NAME="indentSize" VALUE="8" />\r
- </PROPS>\r
-\r
- <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" ESCAPE="\">\r
- <!-- Pragmas. -->\r
- <SPAN TYPE="COMMENT2">\r
- <BEGIN>{-#</BEGIN>\r
- <END>#-}</END>\r
- </SPAN>\r
-\r
- <SPAN TYPE="COMMENT1">\r
- <BEGIN>{-</BEGIN>\r
- <END>-}</END>\r
- </SPAN>\r
-\r
- <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
-\r
- <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
- <BEGIN>"</BEGIN>\r
- <END>"</END>\r
- </SPAN>\r
-\r
- <!-- ' causes problems because not all ' are character\r
- definitions. I implemented an ugly and partial workaround. -->\r
- <SEQ TYPE="LITERAL1">' '</SEQ>\r
- <SEQ TYPE="LITERAL1">'!'</SEQ>\r
- <SEQ TYPE="LITERAL1">'"'</SEQ>\r
- <SEQ TYPE="LITERAL1">'$'</SEQ>\r
- <SEQ TYPE="LITERAL1">'%'</SEQ>\r
- <SEQ TYPE="LITERAL1">'/'</SEQ>\r
- <SEQ TYPE="LITERAL1">'('</SEQ>\r
- <SEQ TYPE="LITERAL1">')'</SEQ>\r
- <SEQ TYPE="LITERAL1">'['</SEQ>\r
- <SEQ TYPE="LITERAL1">']'</SEQ>\r
- <SEQ TYPE="LITERAL1">'+'</SEQ>\r
- <SEQ TYPE="LITERAL1">'-'</SEQ>\r
- <SEQ TYPE="LITERAL1">'*'</SEQ>\r
- <SEQ TYPE="LITERAL1">'='</SEQ>\r
- <SEQ TYPE="LITERAL1">'/'</SEQ>\r
- <SEQ TYPE="LITERAL1">'^'</SEQ>\r
- <SEQ TYPE="LITERAL1">'.'</SEQ>\r
- <SEQ TYPE="LITERAL1">','</SEQ>\r
- <SEQ TYPE="LITERAL1">':'</SEQ>\r
- <SEQ TYPE="LITERAL1">';'</SEQ>\r
- <SEQ TYPE="LITERAL1">'<'</SEQ>\r
- <SEQ TYPE="LITERAL1">'>'</SEQ>\r
- <SEQ TYPE="LITERAL1">'|'</SEQ>\r
- <SEQ TYPE="LITERAL1">'@'</SEQ>\r
-\r
- <SPAN TYPE="LITERAL1" NO_WORD_BREAK="TRUE">\r
- <BEGIN>'</BEGIN>\r
- <END>'</END>\r
- </SPAN>\r
-\r
- <SEQ TYPE="OPERATOR">..</SEQ>\r
- <SEQ TYPE="OPERATOR">&&</SEQ>\r
- <SEQ TYPE="OPERATOR">::</SEQ>\r
-\r
- <SEQ TYPE="OPERATOR"><</SEQ>\r
- <SEQ TYPE="OPERATOR">></SEQ>\r
- <SEQ TYPE="OPERATOR">+</SEQ>\r
- <SEQ TYPE="OPERATOR">-</SEQ>\r
- <SEQ TYPE="OPERATOR">*</SEQ>\r
- <SEQ TYPE="OPERATOR">/</SEQ>\r
- <SEQ TYPE="OPERATOR">%</SEQ>\r
- <SEQ TYPE="OPERATOR">^</SEQ>\r
- <SEQ TYPE="OPERATOR">=</SEQ>\r
- <SEQ TYPE="OPERATOR">|</SEQ>\r
- <SEQ TYPE="OPERATOR">@</SEQ>\r
- <SEQ TYPE="OPERATOR">~</SEQ>\r
- <SEQ TYPE="OPERATOR">!</SEQ>\r
- <SEQ TYPE="OPERATOR">$</SEQ>\r
-\r
- <!-- Defining this as OPERATOR causes float numbers not to be\r
- highlighted... Which is more important? -->\r
- <!-- <SEQ TYPE="NULL">.</SEQ> -->\r
-\r
- <KEYWORDS>\r
- <!-- Reserved words. -->\r
- <KEYWORD1>case</KEYWORD1>\r
- <KEYWORD1>class</KEYWORD1>\r
- <KEYWORD1>data</KEYWORD1>\r
- <KEYWORD1>default</KEYWORD1>\r
- <KEYWORD1>deriving</KEYWORD1>\r
- <KEYWORD1>do</KEYWORD1>\r
- <KEYWORD1>else</KEYWORD1>\r
- <KEYWORD1>if</KEYWORD1>\r
- <KEYWORD1>import</KEYWORD1>\r
- <KEYWORD1>in</KEYWORD1>\r
- <KEYWORD1>infix</KEYWORD1>\r
- <KEYWORD1>infixl</KEYWORD1>\r
- <KEYWORD1>infixr</KEYWORD1>\r
- <KEYWORD1>instance</KEYWORD1>\r
- <KEYWORD1>let</KEYWORD1>\r
- <KEYWORD1>module</KEYWORD1>\r
- <KEYWORD1>newtype</KEYWORD1>\r
- <KEYWORD1>of</KEYWORD1>\r
- <KEYWORD1>then</KEYWORD1>\r
- <KEYWORD1>type</KEYWORD1>\r
- <KEYWORD1>where</KEYWORD1>\r
- <KEYWORD1>_</KEYWORD1>\r
- <KEYWORD1>as</KEYWORD1>\r
- <KEYWORD1>qualified</KEYWORD1>\r
- <KEYWORD1>hiding</KEYWORD1>\r
-\r
- <KEYWORD3>Addr</KEYWORD3>\r
- <KEYWORD3>Bool</KEYWORD3>\r
- <KEYWORD3>Bounded</KEYWORD3>\r
- <KEYWORD3>Char</KEYWORD3>\r
- <KEYWORD3>Double</KEYWORD3>\r
- <KEYWORD3>Either</KEYWORD3>\r
- <KEYWORD3>Enum</KEYWORD3>\r
- <KEYWORD3>Eq</KEYWORD3>\r
- <KEYWORD3>FilePath</KEYWORD3>\r
- <KEYWORD3>Float</KEYWORD3>\r
- <KEYWORD3>Floating</KEYWORD3>\r
- <KEYWORD3>Fractional</KEYWORD3>\r
- <KEYWORD3>Functor</KEYWORD3>\r
- <KEYWORD3>IO</KEYWORD3>\r
- <KEYWORD3>IOError</KEYWORD3>\r
- <KEYWORD3>IOResult</KEYWORD3>\r
- <KEYWORD3>Int</KEYWORD3>\r
- <KEYWORD3>Integer</KEYWORD3>\r
- <KEYWORD3>Integral</KEYWORD3>\r
- <KEYWORD3>Ix</KEYWORD3>\r
- <KEYWORD3>Maybe</KEYWORD3>\r
- <KEYWORD3>Monad</KEYWORD3>\r
- <KEYWORD3>Num</KEYWORD3>\r
- <KEYWORD3>Ord</KEYWORD3>\r
- <KEYWORD3>Ordering</KEYWORD3>\r
- <KEYWORD3>Ratio</KEYWORD3>\r
- <KEYWORD3>Rational</KEYWORD3>\r
- <KEYWORD3>Read</KEYWORD3>\r
- <KEYWORD3>ReadS</KEYWORD3>\r
- <KEYWORD3>Real</KEYWORD3>\r
- <KEYWORD3>RealFloat</KEYWORD3>\r
- <KEYWORD3>RealFrac</KEYWORD3>\r
- <KEYWORD3>Show</KEYWORD3>\r
- <KEYWORD3>ShowS</KEYWORD3>\r
- <KEYWORD3>String</KEYWORD3>\r
-\r
- <LITERAL2>:</LITERAL2>\r
- <LITERAL2>EQ</LITERAL2>\r
- <LITERAL2>False</LITERAL2>\r
- <LITERAL2>GT</LITERAL2>\r
- <LITERAL2>Just</LITERAL2>\r
- <LITERAL2>LT</LITERAL2>\r
- <LITERAL2>Left</LITERAL2>\r
- <LITERAL2>Nothing</LITERAL2>\r
- <LITERAL2>Right</LITERAL2>\r
- <LITERAL2>True</LITERAL2>\r
-\r
- <OPERATOR>quot</OPERATOR>\r
- <OPERATOR>rem</OPERATOR>\r
- <OPERATOR>div</OPERATOR>\r
- <OPERATOR>mod</OPERATOR>\r
- <OPERATOR>elem</OPERATOR>\r
- <OPERATOR>notElem</OPERATOR>\r
- <OPERATOR>seq</OPERATOR>\r
- </KEYWORDS>\r
- </RULES>\r
-\r
-</MODE>\r
+<?xml version="1.0"?>
+
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+
+<!--
+ Haskell mode by Stephen Blackheath
+-->
+
+<MODE>
+
+ <PROPS>
+ <PROPERTY NAME="commentStart" VALUE="{-" />
+ <PROPERTY NAME="commentEnd" VALUE="-}" />
+ <PROPERTY NAME="lineComment" VALUE="--" />
+ </PROPS>
+
+ <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE">
+ <!-- Pragmas. -->
+ <SPAN TYPE="COMMENT2">
+ <BEGIN>{-#</BEGIN>
+ <END>#-}</END>
+ </SPAN>
+
+ <SPAN TYPE="COMMENT1">
+ <BEGIN>{-</BEGIN>
+ <END>-}</END>
+ </SPAN>
+
+ <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>
+
+ <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
+ <BEGIN>"</BEGIN>
+ <END>"</END>
+ </SPAN>
+
+ <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">
+ <BEGIN>'</BEGIN>
+ <END>'</END>
+ </SPAN>
+
+ <!-- Reserved words. -->
+ <SEQ_REGEXP TYPE="KEYWORD1">case(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">class(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">data(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">default(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">deriving(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">do(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">else(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">if(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">import(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">in(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">infix(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">infixl(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">infixr(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">instance(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">let(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">module(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">newtype(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">of(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">then(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">type(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">where(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">_(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">as(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">qualified(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">hiding(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <!-- Non-Haskell-98 keywords -->
+ <SEQ_REGEXP TYPE="KEYWORD1">foreign(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">family(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <!-- GHC extension keywords -->
+ <SEQ_REGEXP TYPE="KEYWORD1">proc(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">rec(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD1">mdo(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+
+ <SEQ_REGEXP TYPE="DIGIT">0[xXoO][0-9a-fA-F]+</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="DIGIT">[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)?</SEQ_REGEXP>
+
+ <!-- Reserved operators -->
+ <SEQ_REGEXP TYPE="KEYWORD4">\.\.(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD4">:(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD4">::(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD4">=(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+ <SEQ TYPE="KEYWORD4">\</SEQ>
+ <SEQ_REGEXP TYPE="KEYWORD4">\|(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD4"><-(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD4">->(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD4">@(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD4">~(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="KEYWORD4">=>(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+
+ <!-- GHC extension reserved operators -->
+ <SEQ_REGEXP TYPE="KEYWORD4">-(<{1,2})(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+
+ <!-- Normal operators, backquoted operators -->
+ <SEQ_REGEXP TYPE="OPERATOR">([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:]*</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="OPERATOR">`([A-Z][a-z_A-Z0-9']*\.)*[a-z_][a-z_A-Z0-9']*`</SEQ_REGEXP>
+
+ <!-- variable/function (qualified or not) -->
+ <SEQ_REGEXP TYPE="NULL">([A-Z][a-z_A-Z0-9']*\.)*[a-z_][a-z_A-Z0-9']*</SEQ_REGEXP>
+ <!-- contructor/type (qualified or not) -->
+ <SEQ_REGEXP TYPE="KEYWORD2">[A-Z][a-z_A-Z0-9']*(\.[A-Z][a-z_A-Z0-9']*)*</SEQ_REGEXP>
+
+ <!-- Operators in parentheses appear like functions, but this
+ doesn't match the special case of (..) used for imports -->
+ <SEQ_REGEXP TYPE="NULL">\(\s*([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+\./<=>?@\\\^\|\-~]\s*\)</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="NULL">\(\s*([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+/<=>?@\\\^\|\-~:][!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="NULL">\(\s*([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+/<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:][!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)</SEQ_REGEXP>
+ <SEQ_REGEXP TYPE="NULL">\(\s*([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:]{2,}\)</SEQ_REGEXP>
+
+ <!-- Infix constructors -->
+ <SEQ_REGEXP TYPE="KEYWORD2">([A-Z][a-z_A-Z0-9']*\.)*:[!#$%&\*+\./<=>?@\\\^\|\-~:]*</SEQ_REGEXP>
+ <!-- Infix constructors in parentheses -->
+ <SEQ_REGEXP TYPE="KEYWORD2">\(\s*([A-Z][a-z_A-Z0-9']*\.)*:[!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)</SEQ_REGEXP>
+
+ <!-- (, including the specific case of (..) but excluding all other cases
+ where it's an operator in parentheses -->
+ <SEQ_REGEXP TYPE="KEYWORD3">\((?!\s*([!#$%&\*+\./<=>?@\\\^\|\-~]\s*\)|[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+/<=>?@\\\^\|\-~:][!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)|[!#$%&\*+/<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:][!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)|[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:]{2,}\s*\)))</SEQ_REGEXP>
+ <SEQ TYPE="KEYWORD3">)</SEQ>
+ <SEQ TYPE="KEYWORD3">,</SEQ>
+ <SEQ TYPE="KEYWORD3">[</SEQ>
+ <SEQ TYPE="KEYWORD3">]</SEQ>
+ </RULES>
+
+</MODE>