{"version":3,"sources":["../../node_modules/codemirror/mode/coffeescript/coffeescript.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","conf","parserConf","ERRORCLASS","wordRegexp","words","RegExp","join","operators","delimiters","identifiers","atProp","wordOperators","indentKeywords","commonKeywords","keywords","concat","stringPrefixes","regexPrefixes","commonConstants","constants","tokenBase","stream","state","sol","scope","align","scopeOffset","offset","eatSpace","lineOffset","indentation","type","dedent","ch","peek","match","skipToEnd","tokenize","longComment","floatLiteral","backUp","intLiteral","tokenFactory","current","prop","next","delimiter","singleline","outclass","eol","eatWhile","eat","singleLineStringErrors","indent","alignOffset","prev","indentUnit","column","length","_indent","matched","tokenLexer","style","delimiter_index","indexOf","slice","exec","external","startState","basecolumn","token","fillAlign","text","closer","charAt","closes","lineComment","fold","defineMIME"],"mappings":"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","file":"coffeescript.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n/**\n * Link to the project's GitHub page:\n * https://github.com/pickhardt/coffeescript-codemirror-mode\n */\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"coffeescript\", function(conf, parserConf) {\n var ERRORCLASS = \"error\";\n\n function wordRegexp(words) {\n return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n }\n\n var operators = /^(?:->|=>|\\+[+=]?|-[\\-=]?|\\*[\\*=]?|\\/[\\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\\|=?|\\^=?|\\~|!|\\?|(or|and|\\|\\||&&|\\?)=)/;\n var delimiters = /^(?:[()\\[\\]{},:`=;]|\\.\\.?\\.?)/;\n var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/;\n var atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/;\n\n var wordOperators = wordRegexp([\"and\", \"or\", \"not\",\n \"is\", \"isnt\", \"in\",\n \"instanceof\", \"typeof\"]);\n var indentKeywords = [\"for\", \"while\", \"loop\", \"if\", \"unless\", \"else\",\n \"switch\", \"try\", \"catch\", \"finally\", \"class\"];\n var commonKeywords = [\"break\", \"by\", \"continue\", \"debugger\", \"delete\",\n \"do\", \"in\", \"of\", \"new\", \"return\", \"then\",\n \"this\", \"@\", \"throw\", \"when\", \"until\", \"extends\"];\n\n var keywords = wordRegexp(indentKeywords.concat(commonKeywords));\n\n indentKeywords = wordRegexp(indentKeywords);\n\n\n var stringPrefixes = /^('{3}|\\\"{3}|['\\\"])/;\n var regexPrefixes = /^(\\/{3}|\\/)/;\n var commonConstants = [\"Infinity\", \"NaN\", \"undefined\", \"null\", \"true\", \"false\", \"on\", \"off\", \"yes\", \"no\"];\n var constants = wordRegexp(commonConstants);\n\n // Tokenizers\n function tokenBase(stream, state) {\n // Handle scope changes\n if (stream.sol()) {\n if (state.scope.align === null) state.scope.align = false;\n var scopeOffset = state.scope.offset;\n if (stream.eatSpace()) {\n var lineOffset = stream.indentation();\n if (lineOffset > scopeOffset && state.scope.type == \"coffee\") {\n return \"indent\";\n } else if (lineOffset < scopeOffset) {\n return \"dedent\";\n }\n return null;\n } else {\n if (scopeOffset > 0) {\n dedent(stream, state);\n }\n }\n }\n if (stream.eatSpace()) {\n return null;\n }\n\n var ch = stream.peek();\n\n // Handle docco title comment (single line)\n if (stream.match(\"####\")) {\n stream.skipToEnd();\n return \"comment\";\n }\n\n // Handle multi line comments\n if (stream.match(\"###\")) {\n state.tokenize = longComment;\n return state.tokenize(stream, state);\n }\n\n // Single line comment\n if (ch === \"#\") {\n stream.skipToEnd();\n return \"comment\";\n }\n\n // Handle number literals\n if (stream.match(/^-?[0-9\\.]/, false)) {\n var floatLiteral = false;\n // Floats\n if (stream.match(/^-?\\d*\\.\\d+(e[\\+\\-]?\\d+)?/i)) {\n floatLiteral = true;\n }\n if (stream.match(/^-?\\d+\\.\\d*/)) {\n floatLiteral = true;\n }\n if (stream.match(/^-?\\.\\d+/)) {\n floatLiteral = true;\n }\n\n if (floatLiteral) {\n // prevent from getting extra . on 1..\n if (stream.peek() == \".\"){\n stream.backUp(1);\n }\n return \"number\";\n }\n // Integers\n var intLiteral = false;\n // Hex\n if (stream.match(/^-?0x[0-9a-f]+/i)) {\n intLiteral = true;\n }\n // Decimal\n if (stream.match(/^-?[1-9]\\d*(e[\\+\\-]?\\d+)?/)) {\n intLiteral = true;\n }\n // Zero by itself with no other piece of number.\n if (stream.match(/^-?0(?![\\dx])/i)) {\n intLiteral = true;\n }\n if (intLiteral) {\n return \"number\";\n }\n }\n\n // Handle strings\n if (stream.match(stringPrefixes)) {\n state.tokenize = tokenFactory(stream.current(), false, \"string\");\n return state.tokenize(stream, state);\n }\n // Handle regex literals\n if (stream.match(regexPrefixes)) {\n if (stream.current() != \"/\" || stream.match(/^.*\\//, false)) { // prevent highlight of division\n state.tokenize = tokenFactory(stream.current(), true, \"string-2\");\n return state.tokenize(stream, state);\n } else {\n stream.backUp(1);\n }\n }\n\n\n\n // Handle operators and delimiters\n if (stream.match(operators) || stream.match(wordOperators)) {\n return \"operator\";\n }\n if (stream.match(delimiters)) {\n return \"punctuation\";\n }\n\n if (stream.match(constants)) {\n return \"atom\";\n }\n\n if (stream.match(atProp) || state.prop && stream.match(identifiers)) {\n return \"property\";\n }\n\n if (stream.match(keywords)) {\n return \"keyword\";\n }\n\n if (stream.match(identifiers)) {\n return \"variable\";\n }\n\n // Handle non-detected items\n stream.next();\n return ERRORCLASS;\n }\n\n function tokenFactory(delimiter, singleline, outclass) {\n return function(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^'\"\\/\\\\]/);\n if (stream.eat(\"\\\\\")) {\n stream.next();\n if (singleline && stream.eol()) {\n return outclass;\n }\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenBase;\n return outclass;\n } else {\n stream.eat(/['\"\\/]/);\n }\n }\n if (singleline) {\n if (parserConf.singleLineStringErrors) {\n outclass = ERRORCLASS;\n } else {\n state.tokenize = tokenBase;\n }\n }\n return outclass;\n };\n }\n\n function longComment(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^#]/);\n if (stream.match(\"###\")) {\n state.tokenize = tokenBase;\n break;\n }\n stream.eatWhile(\"#\");\n }\n return \"comment\";\n }\n\n function indent(stream, state, type) {\n type = type || \"coffee\";\n var offset = 0, align = false, alignOffset = null;\n for (var scope = state.scope; scope; scope = scope.prev) {\n if (scope.type === \"coffee\" || scope.type == \"}\") {\n offset = scope.offset + conf.indentUnit;\n break;\n }\n }\n if (type !== \"coffee\") {\n align = null;\n alignOffset = stream.column() + stream.current().length;\n } else if (state.scope.align) {\n state.scope.align = false;\n }\n state.scope = {\n offset: offset,\n type: type,\n prev: state.scope,\n align: align,\n alignOffset: alignOffset\n };\n }\n\n function dedent(stream, state) {\n if (!state.scope.prev) return;\n if (state.scope.type === \"coffee\") {\n var _indent = stream.indentation();\n var matched = false;\n for (var scope = state.scope; scope; scope = scope.prev) {\n if (_indent === scope.offset) {\n matched = true;\n break;\n }\n }\n if (!matched) {\n return true;\n }\n while (state.scope.prev && state.scope.offset !== _indent) {\n state.scope = state.scope.prev;\n }\n return false;\n } else {\n state.scope = state.scope.prev;\n return false;\n }\n }\n\n function tokenLexer(stream, state) {\n var style = state.tokenize(stream, state);\n var current = stream.current();\n\n // Handle scope changes.\n if (current === \"return\") {\n state.dedent = true;\n }\n if (((current === \"->\" || current === \"=>\") && stream.eol())\n || style === \"indent\") {\n indent(stream, state);\n }\n var delimiter_index = \"[({\".indexOf(current);\n if (delimiter_index !== -1) {\n indent(stream, state, \"])}\".slice(delimiter_index, delimiter_index+1));\n }\n if (indentKeywords.exec(current)){\n indent(stream, state);\n }\n if (current == \"then\"){\n dedent(stream, state);\n }\n\n\n if (style === \"dedent\") {\n if (dedent(stream, state)) {\n return ERRORCLASS;\n }\n }\n delimiter_index = \"])}\".indexOf(current);\n if (delimiter_index !== -1) {\n while (state.scope.type == \"coffee\" && state.scope.prev)\n state.scope = state.scope.prev;\n if (state.scope.type == current)\n state.scope = state.scope.prev;\n }\n if (state.dedent && stream.eol()) {\n if (state.scope.type == \"coffee\" && state.scope.prev)\n state.scope = state.scope.prev;\n state.dedent = false;\n }\n\n return style;\n }\n\n var external = {\n startState: function(basecolumn) {\n return {\n tokenize: tokenBase,\n scope: {offset:basecolumn || 0, type:\"coffee\", prev: null, align: false},\n prop: false,\n dedent: 0\n };\n },\n\n token: function(stream, state) {\n var fillAlign = state.scope.align === null && state.scope;\n if (fillAlign && stream.sol()) fillAlign.align = false;\n\n var style = tokenLexer(stream, state);\n if (style && style != \"comment\") {\n if (fillAlign) fillAlign.align = true;\n state.prop = style == \"punctuation\" && stream.current() == \".\"\n }\n\n return style;\n },\n\n indent: function(state, text) {\n if (state.tokenize != tokenBase) return 0;\n var scope = state.scope;\n var closer = text && \"])}\".indexOf(text.charAt(0)) > -1;\n if (closer) while (scope.type == \"coffee\" && scope.prev) scope = scope.prev;\n var closes = closer && scope.type === text.charAt(0);\n if (scope.align)\n return scope.alignOffset - (closes ? 1 : 0);\n else\n return (closes ? scope.prev : scope).offset;\n },\n\n lineComment: \"#\",\n fold: \"indent\"\n };\n return external;\n});\n\n// IANA registered media type\n// https://www.iana.org/assignments/media-types/\nCodeMirror.defineMIME(\"application/vnd.coffeescript\", \"coffeescript\");\n\nCodeMirror.defineMIME(\"text/x-coffeescript\", \"coffeescript\");\nCodeMirror.defineMIME(\"text/coffeescript\", \"coffeescript\");\n\n});\n"]}