annotate .cms/lib/codemirror/mode/haskell/haskell.js @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 (function(mod) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 if (typeof exports == "object" && typeof module == "object") // CommonJS
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 mod(require("../../lib/codemirror"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 else if (typeof define == "function" && define.amd) // AMD
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 define(["../../lib/codemirror"], mod);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 else // Plain browser env
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 mod(CodeMirror);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 })(function(CodeMirror) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 CodeMirror.defineMode("haskell", function(_config, modeConfig) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 function switchState(source, setState, f) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 setState(f);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 return f(source, setState);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 // These should all be Unicode extended, as per the Haskell 2010 report
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 var smallRE = /[a-z_]/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 var largeRE = /[A-Z]/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 var digitRE = /\d/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 var hexitRE = /[0-9A-Fa-f]/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 var octitRE = /[0-7]/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 var idRE = /[a-z_A-Z0-9'\xa1-\uffff]/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:]/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 var specialRE = /[(),;[\]`{}]/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 function normal(source, setState) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 if (source.eatWhile(whiteCharRE)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 var ch = source.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 if (specialRE.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 if (ch == '{' && source.eat('-')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 var t = "comment";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 if (source.eat('#')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 t = "meta";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 return switchState(source, setState, ncomment(t, 1));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 if (ch == '\'') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 if (source.eat('\\')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 source.next(); // should handle other escapes here
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 source.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 if (source.eat('\'')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 return "string";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 return "string error";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 if (ch == '"') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 return switchState(source, setState, stringLiteral);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 if (largeRE.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 source.eatWhile(idRE);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 if (source.eat('.')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 return "qualifier";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 return "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 if (smallRE.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 source.eatWhile(idRE);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 return "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 if (digitRE.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 if (ch == '0') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 if (source.eat(/[xX]/)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 source.eatWhile(hexitRE); // should require at least 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 return "integer";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 if (source.eat(/[oO]/)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 source.eatWhile(octitRE); // should require at least 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 source.eatWhile(digitRE);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 var t = "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 if (source.match(/^\.\d+/)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 t = "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 if (source.eat(/[eE]/)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 t = "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 source.eat(/[-+]/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 source.eatWhile(digitRE); // should require at least 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 return t;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 if (ch == "." && source.eat("."))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 return "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 if (symbolRE.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 if (ch == '-' && source.eat(/-/)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 source.eatWhile(/-/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 if (!source.eat(symbolRE)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 source.skipToEnd();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 return "comment";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 var t = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 if (ch == ':') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 t = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 source.eatWhile(symbolRE);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 return t;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 return "error";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 function ncomment(type, nest) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 if (nest == 0) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 return normal;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 return function(source, setState) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 var currNest = nest;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 while (!source.eol()) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 var ch = source.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 if (ch == '{' && source.eat('-')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 ++currNest;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 else if (ch == '-' && source.eat('}')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 --currNest;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 if (currNest == 0) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 setState(normal);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140 return type;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 setState(ncomment(type, currNest));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 return type;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 function stringLiteral(source, setState) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 while (!source.eol()) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 var ch = source.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152 if (ch == '"') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 setState(normal);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 return "string";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 if (ch == '\\') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 if (source.eol() || source.eat(whiteCharRE)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158 setState(stringGap);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 return "string";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 if (source.eat('&')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163 else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164 source.next(); // should handle other escapes here
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 setState(normal);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169 return "string error";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 function stringGap(source, setState) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173 if (source.eat('\\')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174 return switchState(source, setState, stringLiteral);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176 source.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 setState(normal);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178 return "error";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182 var wellKnownWords = (function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183 var wkw = {};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
184 function setType(t) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
185 return function () {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
186 for (var i = 0; i < arguments.length; i++)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
187 wkw[arguments[i]] = t;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
188 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
189 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
190
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
191 setType("keyword")(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
192 "case", "class", "data", "default", "deriving", "do", "else", "foreign",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
193 "if", "import", "in", "infix", "infixl", "infixr", "instance", "let",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
194 "module", "newtype", "of", "then", "type", "where", "_");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
195
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
196 setType("keyword")(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
197 "\.\.", ":", "::", "=", "\\", "<-", "->", "@", "~", "=>");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
198
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
199 setType("builtin")(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
200 "!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<*", "<=",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
201 "<$>", "<*>", "=<<", "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
202 "*>", "**");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
203
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
204 setType("builtin")(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
205 "Applicative", "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
206 "Eq", "False", "FilePath", "Float", "Floating", "Fractional", "Functor",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
207 "GT", "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
208 "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
209 "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
210 "String", "True");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
211
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
212 setType("builtin")(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
213 "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
214 "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
215 "compare", "concat", "concatMap", "const", "cos", "cosh", "curry",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
216 "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
217 "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
218 "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
219 "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
220 "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
221 "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
222 "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
223 "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
224 "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
225 "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
226 "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
227 "otherwise", "pi", "pred", "print", "product", "properFraction", "pure",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
228 "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
229 "readIO", "readList", "readLn", "readParen", "reads", "readsPrec",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
230 "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
231 "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
232 "sequence", "sequence_", "show", "showChar", "showList", "showParen",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
233 "showString", "shows", "showsPrec", "significand", "signum", "sin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
234 "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
235 "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
236 "toRational", "truncate", "uncurry", "undefined", "unlines", "until",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
237 "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
238 "zip3", "zipWith", "zipWith3");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
239
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
240 var override = modeConfig.overrideKeywords;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
241 if (override) for (var word in override) if (override.hasOwnProperty(word))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
242 wkw[word] = override[word];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
243
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
244 return wkw;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
245 })();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
246
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
247
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
248
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
249 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
250 startState: function () { return { f: normal }; },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
251 copyState: function (s) { return { f: s.f }; },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
252
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
253 token: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
254 var t = state.f(stream, function(s) { state.f = s; });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
255 var w = stream.current();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
256 return wellKnownWords.hasOwnProperty(w) ? wellKnownWords[w] : t;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
257 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
258
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
259 blockCommentStart: "{-",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
260 blockCommentEnd: "-}",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
261 lineComment: "--"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
262 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
263
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
264 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
265
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
266 CodeMirror.defineMIME("text/x-haskell", "haskell");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
267
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
268 });