|
12 | 12 | "use strict"; |
13 | 13 |
|
14 | 14 | CodeMirror.defineMode("julia", function(config, parserConf) { |
15 | | - function wordRegexp(words, end) { |
| 15 | + function wordRegexp(words, end, pre) { |
| 16 | + if (typeof pre === "undefined") { pre = ""; } |
16 | 17 | if (typeof end === "undefined") { end = "\\b"; } |
17 | | - return new RegExp("^((" + words.join(")|(") + "))" + end); |
| 18 | + return new RegExp("^" + pre + "((" + words.join(")|(") + "))" + end); |
18 | 19 | } |
19 | 20 |
|
20 | 21 | var octChar = "\\\\[0-7]{1,3}"; |
21 | 22 | var hexChar = "\\\\x[A-Fa-f0-9]{1,2}"; |
22 | 23 | var sChar = "\\\\[abefnrtv0%?'\"\\\\]"; |
23 | 24 | var uChar = "([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])"; |
24 | 25 |
|
| 26 | + var asciiOperatorsList = [ |
| 27 | + "[<>]:", "[<>=]=", "<<=?", ">>>?=?", "=>", "--?>", "<--[->]?", "\\/\\/", |
| 28 | + "\\.{2,3}", "[\\.\\\\%*+\\-<>!\\/^|&]=?", "\\?", "\\$", "~", ":" |
| 29 | + ]; |
25 | 30 | var operators = parserConf.operators || wordRegexp([ |
26 | | - "[<>]:", "[<>=]=", "<<=?", ">>>?=?", "=>", "->", "\\/\\/", |
27 | | - "[\\\\%*+\\-<>!=\\/^|&\\u00F7\\u22BB]=?", "\\?", "\\$", "~", ":", |
28 | | - "\\u00D7", "\\u2208", "\\u2209", "\\u220B", "\\u220C", "\\u2218", |
29 | | - "\\u221A", "\\u221B", "\\u2229", "\\u222A", "\\u2260", "\\u2264", |
30 | | - "\\u2265", "\\u2286", "\\u2288", "\\u228A", "\\u22C5", |
31 | | - "\\b(in|isa)\\b(?!\.?\\()"], ""); |
| 31 | + "[<>]:", "[<>=]=", "<<=?", ">>>?=?", "=>", "--?>", "<--[->]?", "\\/\\/", |
| 32 | + "[\\\\%*+\\-<>!\\/^|&\\u00F7\\u22BB]=?", "\\?", "\\$", "~", ":", |
| 33 | + "\\u00D7", "\\u2208", "\\u2209", "\\u220B", "\\u220C", "\\u2218", |
| 34 | + "\\u221A", "\\u221B", "\\u2229", "\\u222A", "\\u2260", "\\u2264", |
| 35 | + "\\u2265", "\\u2286", "\\u2288", "\\u228A", "\\u22C5", |
| 36 | + "\\b(in|isa)\\b(?!\.?\\()" |
| 37 | + ], ""); |
32 | 38 | var delimiters = parserConf.delimiters || /^[;,()[\]{}]/; |
33 | 39 | var identifiers = parserConf.identifiers || |
34 | 40 | /^[_A-Za-z\u00A1-\u2217\u2219-\uFFFF][\w\u00A1-\u2217\u2219-\uFFFF]*!*/; |
@@ -57,10 +63,13 @@ CodeMirror.defineMode("julia", function(config, parserConf) { |
57 | 63 | var keywords = wordRegexp(keywordsList); |
58 | 64 | var builtins = wordRegexp(builtinsList); |
59 | 65 |
|
60 | | - var macro = /^@[_A-Za-z][\w]*/; |
| 66 | + var macro = /^@[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; |
61 | 67 | var symbol = /^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; |
62 | 68 | var stringPrefixes = /^(`|([_A-Za-z\u00A1-\uFFFF]*"("")?))/; |
63 | 69 |
|
| 70 | + var macroOperators = wordRegexp(asciiOperatorsList, "", "@"); |
| 71 | + var symbolOperators = wordRegexp(asciiOperatorsList, "", ":"); |
| 72 | + |
64 | 73 | function inArray(state) { |
65 | 74 | return (state.nestedArrays > 0); |
66 | 75 | } |
@@ -165,8 +174,7 @@ CodeMirror.defineMode("julia", function(config, parserConf) { |
165 | 174 | } |
166 | 175 |
|
167 | 176 | // Handle symbols |
168 | | - if (!leavingExpr && stream.match(symbol) || |
169 | | - stream.match(/:([<>]:|<<=?|>>>?=?|->|\/\/|\.{2,3}|[\.\\%*+\-<>!\/^|&]=?|[~\?\$])/)) { |
| 177 | + if (!leavingExpr && (stream.match(symbol) || stream.match(symbolOperators))) { |
170 | 178 | return "builtin"; |
171 | 179 | } |
172 | 180 |
|
@@ -212,7 +220,7 @@ CodeMirror.defineMode("julia", function(config, parserConf) { |
212 | 220 | return state.tokenize(stream, state); |
213 | 221 | } |
214 | 222 |
|
215 | | - if (stream.match(macro)) { |
| 223 | + if (stream.match(macro) || stream.match(macroOperators)) { |
216 | 224 | return "meta"; |
217 | 225 | } |
218 | 226 |
|
|
0 commit comments