diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebInspectorUI/UserInterface/External/CodeMirror/coffeescript.js | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/External/CodeMirror/coffeescript.js')
-rw-r--r-- | Source/WebInspectorUI/UserInterface/External/CodeMirror/coffeescript.js | 81 |
1 files changed, 41 insertions, 40 deletions
diff --git a/Source/WebInspectorUI/UserInterface/External/CodeMirror/coffeescript.js b/Source/WebInspectorUI/UserInterface/External/CodeMirror/coffeescript.js index e8bfe48a2..adf2184fd 100644 --- a/Source/WebInspectorUI/UserInterface/External/CodeMirror/coffeescript.js +++ b/Source/WebInspectorUI/UserInterface/External/CodeMirror/coffeescript.js @@ -1,18 +1,31 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + /** * Link to the project's GitHub page: * https://github.com/pickhardt/coffeescript-codemirror-mode */ -CodeMirror.defineMode("coffeescript", function(conf) { +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("coffeescript", function(conf, parserConf) { var ERRORCLASS = "error"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } - var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?)/; + var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/; var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; - var properties = /^(@|this\.)[_A-Za-z$][_A-Za-z$0-9]*/; + var atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/; var wordOperators = wordRegexp(["and", "or", "not", "is", "isnt", "in", @@ -21,7 +34,7 @@ CodeMirror.defineMode("coffeescript", function(conf) { "switch", "try", "catch", "finally", "class"]; var commonKeywords = ["break", "by", "continue", "debugger", "delete", "do", "in", "of", "new", "return", "then", - "this", "throw", "when", "until"]; + "this", "@", "throw", "when", "until", "extends"]; var keywords = wordRegexp(indentKeywords.concat(commonKeywords)); @@ -119,19 +132,21 @@ CodeMirror.defineMode("coffeescript", function(conf) { // Handle strings if (stream.match(stringPrefixes)) { - state.tokenize = tokenFactory(stream.current(), "string"); + state.tokenize = tokenFactory(stream.current(), false, "string"); return state.tokenize(stream, state); } // Handle regex literals if (stream.match(regexPrefixes)) { if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent highlight of division - state.tokenize = tokenFactory(stream.current(), "string-2"); + state.tokenize = tokenFactory(stream.current(), true, "string-2"); return state.tokenize(stream, state); } else { stream.backUp(1); } } + + // Handle operators and delimiters if (stream.match(operators) || stream.match(wordOperators)) { return "operator"; @@ -144,6 +159,10 @@ CodeMirror.defineMode("coffeescript", function(conf) { return "atom"; } + if (stream.match(atProp) || state.prop && stream.match(identifiers)) { + return "property"; + } + if (stream.match(keywords)) { return "keyword"; } @@ -152,17 +171,12 @@ CodeMirror.defineMode("coffeescript", function(conf) { return "variable"; } - if (stream.match(properties)) { - return "property"; - } - // Handle non-detected items stream.next(); return ERRORCLASS; } - function tokenFactory(delimiter, outclass) { - var singleline = delimiter.length == 1; + function tokenFactory(delimiter, singleline, outclass) { return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\/\\]/); @@ -179,7 +193,7 @@ CodeMirror.defineMode("coffeescript", function(conf) { } } if (singleline) { - if (conf.mode.singleLineStringErrors) { + if (parserConf.singleLineStringErrors) { outclass = ERRORCLASS; } else { state.tokenize = tokenBase; @@ -205,7 +219,7 @@ CodeMirror.defineMode("coffeescript", function(conf) { type = type || "coffee"; var offset = 0, align = false, alignOffset = null; for (var scope = state.scope; scope; scope = scope.prev) { - if (scope.type === "coffee") { + if (scope.type === "coffee" || scope.type == "}") { offset = scope.offset + conf.indentUnit; break; } @@ -253,24 +267,11 @@ CodeMirror.defineMode("coffeescript", function(conf) { var style = state.tokenize(stream, state); var current = stream.current(); - // Handle "." connected identifiers - if (current === ".") { - style = state.tokenize(stream, state); - current = stream.current(); - if (/^\.[\w$]+$/.test(current)) { - return "variable"; - } else { - return ERRORCLASS; - } - } - // Handle scope changes. if (current === "return") { - state.dedent += 1; + state.dedent = true; } - if (((current === "->" || current === "=>") && - !state.lambda && - !stream.peek()) + if (((current === "->" || current === "=>") && stream.eol()) || style === "indent") { indent(stream, state); } @@ -298,9 +299,10 @@ CodeMirror.defineMode("coffeescript", function(conf) { if (state.scope.type == current) state.scope = state.scope.prev; } - if (state.dedent > 0 && stream.eol() && state.scope.type == "coffee") { - if (state.scope.prev) state.scope = state.scope.prev; - state.dedent -= 1; + if (state.dedent && stream.eol()) { + if (state.scope.type == "coffee" && state.scope.prev) + state.scope = state.scope.prev; + state.dedent = false; } return style; @@ -311,8 +313,7 @@ CodeMirror.defineMode("coffeescript", function(conf) { return { tokenize: tokenBase, scope: {offset:basecolumn || 0, type:"coffee", prev: null, align: false}, - lastToken: null, - lambda: false, + prop: false, dedent: 0 }; }, @@ -322,12 +323,9 @@ CodeMirror.defineMode("coffeescript", function(conf) { if (fillAlign && stream.sol()) fillAlign.align = false; var style = tokenLexer(stream, state); - if (fillAlign && style && style != "comment") fillAlign.align = true; - - state.lastToken = {style:style, content: stream.current()}; - - if (stream.eol() && stream.lambda) { - state.lambda = false; + if (style && style != "comment") { + if (fillAlign) fillAlign.align = true; + state.prop = style == "punctuation" && stream.current() == "." } return style; @@ -352,3 +350,6 @@ CodeMirror.defineMode("coffeescript", function(conf) { }); CodeMirror.defineMIME("text/x-coffeescript", "coffeescript"); +CodeMirror.defineMIME("text/coffeescript", "coffeescript"); + +}); |