2 <!DOCTYPE MODE SYSTEM "xmode.dtd">
4 <!-- CoffeeScript mode by Dennis Hotson, Balazs Toth, Marc Häfner
9 - reconsider (un)indentation rules for brackets
13 <PROPERTY NAME="commentStart" VALUE="###" />
14 <PROPERTY NAME="commentEnd" VALUE="###" />
15 <PROPERTY NAME="lineComment" VALUE="#" />
16 <PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
19 <PROPERTY NAME="indentNextLines"
20 VALUE="((\s*|.*\s+)([\-=]>|[\+\-\*/%\\<>=\!&\|\^~]|(.*:|<<|>>|>>>|\+=|\-=|\*=|/=|%=|<=|>=|==|===|\!=|\!==|is|isnt|not|and|or|&&|\|\||of|in|loop))|\s*(if|else|try|catch|finally|class|while|until|for)(\s*|\s+.*))\s*" />
22 <PROPERTY NAME="unindentThisLine" VALUE="^\s*(else|catch|finally)(\s*|\s+.*)$" />
23 <PROPERTY NAME="unindentNextLines" VALUE="^\s*(else|catch|finally)(\s*|\s+.*)$" />
25 <!-- Props regarding brackets generally do not play well with CoffeScript -->
27 <!-- Triggers reindentation on character input.
28 TODO: reconsider the use of this one, including "ehy" -->
29 <!-- PROPERTY NAME="electricKeys" VALUE="}])" /-->
31 <!-- Originally designed for Python, does not work correctly with CS -->
32 <!-- PROPERTY NAME="ignoreWhitespace" VALUE="false" /-->
37 HIGHLIGHT_DIGITS="TRUE"
39 DIGIT_RE="(0b[01]+)|(0o[0-7]+)|(0x\p{XDigit}+)|(\d*\.?\d+(e[+-]?\d+)?)">
41 <SPAN_REGEXP TYPE="COMMENT2" HASH_CHARS="###">
42 <BEGIN>###(?!#)</BEGIN>
43 <END REGEXP="TRUE">#{3,}</END>
45 <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>
47 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE" ESCAPE="\" DELEGATE="doubleQuoteLiteral">
52 <SPAN TYPE="LITERAL2" NO_LINE_BREAK="FALSE" ESCAPE="\">
57 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE" ESCAPE="\" DELEGATE="doubleQuoteLiteral">
62 <SPAN TYPE="LITERAL2" NO_LINE_BREAK="FALSE" ESCAPE="\">
67 <SPAN TYPE="LITERAL1" DELEGATE="javascript::MAIN">
73 <SPAN TYPE="MARKUP" DELEGATE="hereRegexp" ESCAPE="\">
77 <!-- Javascript-style regexps -->
78 <SPAN_REGEXP TYPE="MARKUP" HASH_CHAR="/" AT_WORD_START="TRUE" NO_LINE_BREAK="TRUE" ESCAPE="\">
79 <BEGIN>/(?![\s=*])</BEGIN>
80 <END REGEXP="TRUE">/[igmy]{0,4}</END>
83 <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
84 <!-- Seems to be equivalent to
85 SEQ_REGEXP TYPE="FUNCTION">([a-zA-Z\$_](\w|\$)*)(?=\s*\()</SEQ_REGEXP -->
87 <SEQ TYPE="OPERATOR">)</SEQ>
88 <SEQ TYPE="OPERATOR">{</SEQ>
89 <SEQ TYPE="OPERATOR">}</SEQ>
90 <SEQ TYPE="OPERATOR">[</SEQ>
91 <SEQ TYPE="OPERATOR">]</SEQ>
92 <SEQ TYPE="OPERATOR">.</SEQ>
94 <SEQ TYPE="OPERATOR">+</SEQ>
95 <SEQ TYPE="OPERATOR">/</SEQ>
96 <SEQ TYPE="OPERATOR">*</SEQ>
97 <SEQ TYPE="OPERATOR">&</SEQ>
98 <SEQ TYPE="OPERATOR">|</SEQ>
99 <SEQ TYPE="OPERATOR">\</SEQ>
100 <SEQ TYPE="OPERATOR">-</SEQ>
101 <SEQ TYPE="OPERATOR">%</SEQ>
102 <SEQ TYPE="OPERATOR">=</SEQ>
103 <SEQ TYPE="OPERATOR"><</SEQ>
104 <SEQ TYPE="OPERATOR">></SEQ>
105 <SEQ TYPE="OPERATOR">:</SEQ>
106 <SEQ TYPE="OPERATOR">!</SEQ>
107 <SEQ TYPE="OPERATOR">;</SEQ>
108 <SEQ TYPE="OPERATOR">^</SEQ>
109 <SEQ TYPE="OPERATOR">~</SEQ>
110 <SEQ TYPE="OPERATOR">?</SEQ>
112 <SEQ_REGEXP TYPE="KEYWORD3">@([\p{L}\p{Nl}\$_][\p{L}\p{Nl}\p{Nd}\$_]*)</SEQ_REGEXP>
113 <SEQ_REGEXP TYPE="KEYWORD4">([\p{L}\p{Nl}\$_][\p{L}\p{Nl}\p{Nd}\$_]*)(?=\s*(?:[:\.]|\?\.))</SEQ_REGEXP>
114 <SEQ_REGEXP TYPE="KEYWORD1" AT_WORD_START="TRUE" HASH_CHARS="for ">for\s+own(?![\p{L}\p{Nl}\p{Nd}\$_])</SEQ_REGEXP>
117 <KEYWORD3>this</KEYWORD3>
118 <KEYWORD3>super</KEYWORD3>
120 <KEYWORD1>if</KEYWORD1>
121 <KEYWORD1>else</KEYWORD1>
122 <KEYWORD1>new</KEYWORD1>
123 <KEYWORD1>return</KEYWORD1>
124 <KEYWORD1>try</KEYWORD1>
125 <KEYWORD1>catch</KEYWORD1>
126 <KEYWORD1>finally</KEYWORD1>
127 <KEYWORD1>throw</KEYWORD1>
128 <KEYWORD1>break</KEYWORD1>
129 <KEYWORD1>continue</KEYWORD1>
130 <KEYWORD1>for</KEYWORD1>
131 <KEYWORD1>in</KEYWORD1>
132 <KEYWORD1>while</KEYWORD1>
133 <KEYWORD1>loop</KEYWORD1>
134 <KEYWORD1>delete</KEYWORD1>
135 <KEYWORD1>instanceof</KEYWORD1>
136 <KEYWORD1>typeof</KEYWORD1>
137 <KEYWORD1>switch</KEYWORD1>
138 <KEYWORD1>extends</KEYWORD1>
139 <KEYWORD1>class</KEYWORD1>
140 <KEYWORD1>constructor</KEYWORD1>
141 <KEYWORD1>do</KEYWORD1>
142 <KEYWORD1>then</KEYWORD1>
143 <KEYWORD1>unless</KEYWORD1>
144 <KEYWORD1>until</KEYWORD1>
145 <KEYWORD1>of</KEYWORD1>
146 <KEYWORD1>by</KEYWORD1>
147 <KEYWORD1>when</KEYWORD1>
149 <KEYWORD1>and</KEYWORD1>
150 <KEYWORD1>or</KEYWORD1>
151 <KEYWORD1>not</KEYWORD1>
152 <KEYWORD1>is</KEYWORD1>
153 <KEYWORD1>isnt</KEYWORD1>
155 <KEYWORD3>prototype</KEYWORD3>
156 <KEYWORD3>Array</KEYWORD3>
157 <KEYWORD3>Boolean</KEYWORD3>
158 <KEYWORD3>Date</KEYWORD3>
159 <KEYWORD3>Function</KEYWORD3>
160 <KEYWORD3>Global</KEYWORD3>
161 <KEYWORD3>Math</KEYWORD3>
162 <KEYWORD3>Number</KEYWORD3>
163 <KEYWORD3>Object</KEYWORD3>
164 <KEYWORD3>RegExp</KEYWORD3><!-- Not ECMA -->
165 <KEYWORD3>String</KEYWORD3>
168 <LITERAL2>undefined</LITERAL2>
169 <LITERAL2>false</LITERAL2>
170 <LITERAL2>null</LITERAL2>
171 <LITERAL2>true</LITERAL2>
172 <LITERAL2>yes</LITERAL2>
173 <LITERAL2>no</LITERAL2>
174 <LITERAL2>on</LITERAL2>
175 <LITERAL2>off</LITERAL2>
176 <LITERAL2>NaN</LITERAL2>
177 <LITERAL2>Infinity</LITERAL2>
179 <!-- Global functions -->
180 <LITERAL2>eval</LITERAL2>
181 <LITERAL2>parseInt</LITERAL2>
182 <LITERAL2>parseFloat</LITERAL2>
183 <LITERAL2>escape</LITERAL2>
184 <LITERAL2>unescape</LITERAL2>
185 <LITERAL2>isNaN</LITERAL2>
186 <LITERAL2>isFinite</LITERAL2>
190 <!-- Delegate contents of #{} expression in double quotes to MAIN so that
191 it will be syntax highlighted as well -->
192 <RULES DEFAULT="LITERAL1" SET="doubleQuoteLiteral" ESCAPE="\">
193 <SPAN DELEGATE="MAIN" TYPE="OPERATOR">
199 <!-- Comments and #{} interpolation in heregexes -->
200 <RULES DEFAULT="MARKUP" SET="hereRegexp" ESCAPE="\">
201 <SPAN DELEGATE="MAIN" TYPE="OPERATOR">
205 <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>