| OLD | NEW |
| 1 // CodeMirror, copyright (c) by Marijn Haverbeke and others |
| 2 // Distributed under an MIT license: http://codemirror.net/LICENSE |
| 3 |
| 1 /** | 4 /** |
| 2 * Link to the project's GitHub page: | 5 * Link to the project's GitHub page: |
| 3 * https://github.com/pickhardt/coffeescript-codemirror-mode | 6 * https://github.com/pickhardt/coffeescript-codemirror-mode |
| 4 */ | 7 */ |
| 8 (function(mod) { |
| 9 if (typeof exports == "object" && typeof module == "object") // CommonJS |
| 10 mod(require("../../lib/codemirror")); |
| 11 else if (typeof define == "function" && define.amd) // AMD |
| 12 define(["../../lib/codemirror"], mod); |
| 13 else // Plain browser env |
| 14 mod(CodeMirror); |
| 15 })(function(CodeMirror) { |
| 16 "use strict"; |
| 17 |
| 5 CodeMirror.defineMode("coffeescript", function(conf) { | 18 CodeMirror.defineMode("coffeescript", function(conf) { |
| 6 var ERRORCLASS = "error"; | 19 var ERRORCLASS = "error"; |
| 7 | 20 |
| 8 function wordRegexp(words) { | 21 function wordRegexp(words) { |
| 9 return new RegExp("^((" + words.join(")|(") + "))\\b"); | 22 return new RegExp("^((" + words.join(")|(") + "))\\b"); |
| 10 } | 23 } |
| 11 | 24 |
| 12 var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>
?=?|%=?|&=?|\|=?|\^=?|\~|!|\?)/; | 25 var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>
?=?|%=?|&=?|\|=?|\^=?|\~|!|\?)/; |
| 13 var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; | 26 var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; |
| 14 var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; | 27 var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 if (stream.match(/^-?0(?![\dx])/i)) { | 125 if (stream.match(/^-?0(?![\dx])/i)) { |
| 113 intLiteral = true; | 126 intLiteral = true; |
| 114 } | 127 } |
| 115 if (intLiteral) { | 128 if (intLiteral) { |
| 116 return "number"; | 129 return "number"; |
| 117 } | 130 } |
| 118 } | 131 } |
| 119 | 132 |
| 120 // Handle strings | 133 // Handle strings |
| 121 if (stream.match(stringPrefixes)) { | 134 if (stream.match(stringPrefixes)) { |
| 122 state.tokenize = tokenFactory(stream.current(), "string"); | 135 state.tokenize = tokenFactory(stream.current(), false, "string"); |
| 123 return state.tokenize(stream, state); | 136 return state.tokenize(stream, state); |
| 124 } | 137 } |
| 125 // Handle regex literals | 138 // Handle regex literals |
| 126 if (stream.match(regexPrefixes)) { | 139 if (stream.match(regexPrefixes)) { |
| 127 if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent
highlight of division | 140 if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent
highlight of division |
| 128 state.tokenize = tokenFactory(stream.current(), "string-2"); | 141 state.tokenize = tokenFactory(stream.current(), true, "string-2"); |
| 129 return state.tokenize(stream, state); | 142 return state.tokenize(stream, state); |
| 130 } else { | 143 } else { |
| 131 stream.backUp(1); | 144 stream.backUp(1); |
| 132 } | 145 } |
| 133 } | 146 } |
| 134 | 147 |
| 135 // Handle operators and delimiters | 148 // Handle operators and delimiters |
| 136 if (stream.match(operators) || stream.match(wordOperators)) { | 149 if (stream.match(operators) || stream.match(wordOperators)) { |
| 137 return "operator"; | 150 return "operator"; |
| 138 } | 151 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 154 | 167 |
| 155 if (stream.match(properties)) { | 168 if (stream.match(properties)) { |
| 156 return "property"; | 169 return "property"; |
| 157 } | 170 } |
| 158 | 171 |
| 159 // Handle non-detected items | 172 // Handle non-detected items |
| 160 stream.next(); | 173 stream.next(); |
| 161 return ERRORCLASS; | 174 return ERRORCLASS; |
| 162 } | 175 } |
| 163 | 176 |
| 164 function tokenFactory(delimiter, outclass) { | 177 function tokenFactory(delimiter, singleline, outclass) { |
| 165 var singleline = delimiter.length == 1; | |
| 166 return function(stream, state) { | 178 return function(stream, state) { |
| 167 while (!stream.eol()) { | 179 while (!stream.eol()) { |
| 168 stream.eatWhile(/[^'"\/\\]/); | 180 stream.eatWhile(/[^'"\/\\]/); |
| 169 if (stream.eat("\\")) { | 181 if (stream.eat("\\")) { |
| 170 stream.next(); | 182 stream.next(); |
| 171 if (singleline && stream.eol()) { | 183 if (singleline && stream.eol()) { |
| 172 return outclass; | 184 return outclass; |
| 173 } | 185 } |
| 174 } else if (stream.match(delimiter)) { | 186 } else if (stream.match(delimiter)) { |
| 175 state.tokenize = tokenBase; | 187 state.tokenize = tokenBase; |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 return (closes ? scope.prev : scope).offset; | 357 return (closes ? scope.prev : scope).offset; |
| 346 }, | 358 }, |
| 347 | 359 |
| 348 lineComment: "#", | 360 lineComment: "#", |
| 349 fold: "indent" | 361 fold: "indent" |
| 350 }; | 362 }; |
| 351 return external; | 363 return external; |
| 352 }); | 364 }); |
| 353 | 365 |
| 354 CodeMirror.defineMIME("text/x-coffeescript", "coffeescript"); | 366 CodeMirror.defineMIME("text/x-coffeescript", "coffeescript"); |
| 367 |
| 368 }); |
| OLD | NEW |