{"version":3,"sources":["../../node_modules/codemirror/mode/julia/julia.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","config","parserConf","wordRegexp","words","end","RegExp","join","octChar","hexChar","sChar","uChar","operators","delimiters","identifiers","chars","openersList","closersList","keywordsList","builtinsList","registerHelper","concat","openers","closers","keywords","builtins","macro","symbol","stringPrefixes","inArray","state","nestedArrays","inGenerator","nestedGenerators","currentScope","n","scopes","length","tokenBase","stream","match","tokenize","tokenComment","leavingExpr","sol","eatSpace","ch","peek","skipToEnd","push","pop","lastToken","tokenAnnotation","imMatcher","numberLiteral","tokenChar","tokenStringFactory","current","isDefinition","tokenCallOrDef","next","firstParenPos","charsAdvanced","backUp","nestedParameters","nestedComments","isChar","value","parseInt","delimiter","substr","tokenString","eat","eatWhile","external","startState","token","style","indent","textAfter","delta","test","indentUnit","electricInput","blockCommentStart","blockCommentEnd","lineComment","closeBrackets","fold","defineMIME"],"mappings":"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","file":"julia.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\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(\"julia\", function(config, parserConf) {\n function wordRegexp(words, end) {\n if (typeof end === \"undefined\") { end = \"\\\\b\"; }\n return new RegExp(\"^((\" + words.join(\")|(\") + \"))\" + end);\n }\n\n var octChar = \"\\\\\\\\[0-7]{1,3}\";\n var hexChar = \"\\\\\\\\x[A-Fa-f0-9]{1,2}\";\n var sChar = \"\\\\\\\\[abefnrtv0%?'\\\"\\\\\\\\]\";\n var uChar = \"([^\\\\u0027\\\\u005C\\\\uD800-\\\\uDFFF]|[\\\\uD800-\\\\uDFFF][\\\\uDC00-\\\\uDFFF])\";\n\n var operators = parserConf.operators || wordRegexp([\n \"[<>]:\", \"[<>=]=\", \"<<=?\", \">>>?=?\", \"=>\", \"->\", \"\\\\/\\\\/\",\n \"[\\\\\\\\%*+\\\\-<>!=\\\\/^|&\\\\u00F7\\\\u22BB]=?\", \"\\\\?\", \"\\\\$\", \"~\", \":\",\n \"\\\\u00D7\", \"\\\\u2208\", \"\\\\u2209\", \"\\\\u220B\", \"\\\\u220C\", \"\\\\u2218\",\n \"\\\\u221A\", \"\\\\u221B\", \"\\\\u2229\", \"\\\\u222A\", \"\\\\u2260\", \"\\\\u2264\",\n \"\\\\u2265\", \"\\\\u2286\", \"\\\\u2288\", \"\\\\u228A\", \"\\\\u22C5\",\n \"\\\\b(in|isa)\\\\b(?!\\.?\\\\()\"], \"\");\n var delimiters = parserConf.delimiters || /^[;,()[\\]{}]/;\n var identifiers = parserConf.identifiers ||\n /^[_A-Za-z\\u00A1-\\u2217\\u2219-\\uFFFF][\\w\\u00A1-\\u2217\\u2219-\\uFFFF]*!*/;\n\n var chars = wordRegexp([octChar, hexChar, sChar, uChar], \"'\");\n\n var openersList = [\"begin\", \"function\", \"type\", \"struct\", \"immutable\", \"let\",\n \"macro\", \"for\", \"while\", \"quote\", \"if\", \"else\", \"elseif\", \"try\",\n \"finally\", \"catch\", \"do\"];\n\n var closersList = [\"end\", \"else\", \"elseif\", \"catch\", \"finally\"];\n\n var keywordsList = [\"if\", \"else\", \"elseif\", \"while\", \"for\", \"begin\", \"let\",\n \"end\", \"do\", \"try\", \"catch\", \"finally\", \"return\", \"break\", \"continue\",\n \"global\", \"local\", \"const\", \"export\", \"import\", \"importall\", \"using\",\n \"function\", \"where\", \"macro\", \"module\", \"baremodule\", \"struct\", \"type\",\n \"mutable\", \"immutable\", \"quote\", \"typealias\", \"abstract\", \"primitive\",\n \"bitstype\"];\n\n var builtinsList = [\"true\", \"false\", \"nothing\", \"NaN\", \"Inf\"];\n\n CodeMirror.registerHelper(\"hintWords\", \"julia\", keywordsList.concat(builtinsList));\n\n var openers = wordRegexp(openersList);\n var closers = wordRegexp(closersList);\n var keywords = wordRegexp(keywordsList);\n var builtins = wordRegexp(builtinsList);\n\n var macro = /^@[_A-Za-z][\\w]*/;\n var symbol = /^:[_A-Za-z\\u00A1-\\uFFFF][\\w\\u00A1-\\uFFFF]*!*/;\n var stringPrefixes = /^(`|([_A-Za-z\\u00A1-\\uFFFF]*\"(\"\")?))/;\n\n function inArray(state) {\n return (state.nestedArrays > 0);\n }\n\n function inGenerator(state) {\n return (state.nestedGenerators > 0);\n }\n\n function currentScope(state, n) {\n if (typeof(n) === \"undefined\") { n = 0; }\n if (state.scopes.length <= n) {\n return null;\n }\n return state.scopes[state.scopes.length - (n + 1)];\n }\n\n // tokenizers\n function tokenBase(stream, state) {\n // Handle multiline comments\n if (stream.match(/^#=/, false)) {\n state.tokenize = tokenComment;\n return state.tokenize(stream, state);\n }\n\n // Handle scope changes\n var leavingExpr = state.leavingExpr;\n if (stream.sol()) {\n leavingExpr = false;\n }\n state.leavingExpr = false;\n\n if (leavingExpr) {\n if (stream.match(/^'+/)) {\n return \"operator\";\n }\n }\n\n if (stream.match(/\\.{4,}/)) {\n return \"error\";\n } else if (stream.match(/\\.{1,3}/)) {\n return \"operator\";\n }\n\n if (stream.eatSpace()) {\n return null;\n }\n\n var ch = stream.peek();\n\n // Handle single line comments\n if (ch === '#') {\n stream.skipToEnd();\n return \"comment\";\n }\n\n if (ch === '[') {\n state.scopes.push('[');\n state.nestedArrays++;\n }\n\n if (ch === '(') {\n state.scopes.push('(');\n state.nestedGenerators++;\n }\n\n if (inArray(state) && ch === ']') {\n while (state.scopes.length && currentScope(state) !== \"[\") { state.scopes.pop(); }\n state.scopes.pop();\n state.nestedArrays--;\n state.leavingExpr = true;\n }\n\n if (inGenerator(state) && ch === ')') {\n while (state.scopes.length && currentScope(state) !== \"(\") { state.scopes.pop(); }\n state.scopes.pop();\n state.nestedGenerators--;\n state.leavingExpr = true;\n }\n\n if (inArray(state)) {\n if (state.lastToken == \"end\" && stream.match(/^:/)) {\n return \"operator\";\n }\n if (stream.match(/^end/)) {\n return \"number\";\n }\n }\n\n var match;\n if (match = stream.match(openers, false)) {\n state.scopes.push(match[0]);\n }\n\n if (stream.match(closers, false)) {\n state.scopes.pop();\n }\n\n // Handle type annotations\n if (stream.match(/^::(?![:\\$])/)) {\n state.tokenize = tokenAnnotation;\n return state.tokenize(stream, state);\n }\n\n // Handle symbols\n if (!leavingExpr && stream.match(symbol) ||\n stream.match(/:([<>]:|<<=?|>>>?=?|->|\\/\\/|\\.{2,3}|[\\.\\\\%*+\\-<>!\\/^|&]=?|[~\\?\\$])/)) {\n return \"builtin\";\n }\n\n // Handle parametric types\n //if (stream.match(/^{[^}]*}(?=\\()/)) {\n // return \"builtin\";\n //}\n\n // Handle operators and Delimiters\n if (stream.match(operators)) {\n return \"operator\";\n }\n\n // Handle Number Literals\n if (stream.match(/^\\.?\\d/, false)) {\n var imMatcher = RegExp(/^im\\b/);\n var numberLiteral = false;\n if (stream.match(/^0x\\.[0-9a-f_]+p[\\+\\-]?[_\\d]+/i)) { numberLiteral = true; }\n // Integers\n if (stream.match(/^0x[0-9a-f_]+/i)) { numberLiteral = true; } // Hex\n if (stream.match(/^0b[01_]+/i)) { numberLiteral = true; } // Binary\n if (stream.match(/^0o[0-7_]+/i)) { numberLiteral = true; } // Octal\n // Floats\n if (stream.match(/^(?:(?:\\d[_\\d]*)?\\.(?!\\.)(?:\\d[_\\d]*)?|\\d[_\\d]*\\.(?!\\.)(?:\\d[_\\d]*))?([Eef][\\+\\-]?[_\\d]+)?/i)) { numberLiteral = true; }\n if (stream.match(/^\\d[_\\d]*(e[\\+\\-]?\\d+)?/i)) { numberLiteral = true; } // Decimal\n if (numberLiteral) {\n // Integer literals may be \"long\"\n stream.match(imMatcher);\n state.leavingExpr = true;\n return \"number\";\n }\n }\n\n // Handle Chars\n if (stream.match(/^'/)) {\n state.tokenize = tokenChar;\n return state.tokenize(stream, state);\n }\n\n // Handle Strings\n if (stream.match(stringPrefixes)) {\n state.tokenize = tokenStringFactory(stream.current());\n return state.tokenize(stream, state);\n }\n\n if (stream.match(macro)) {\n return \"meta\";\n }\n\n if (stream.match(delimiters)) {\n return null;\n }\n\n if (stream.match(keywords)) {\n return \"keyword\";\n }\n\n if (stream.match(builtins)) {\n return \"builtin\";\n }\n\n var isDefinition = state.isDefinition || state.lastToken == \"function\" ||\n state.lastToken == \"macro\" || state.lastToken == \"type\" ||\n state.lastToken == \"struct\" || state.lastToken == \"immutable\";\n\n if (stream.match(identifiers)) {\n if (isDefinition) {\n if (stream.peek() === '.') {\n state.isDefinition = true;\n return \"variable\";\n }\n state.isDefinition = false;\n return \"def\";\n }\n if (stream.match(/^({[^}]*})*\\(/, false)) {\n state.tokenize = tokenCallOrDef;\n return state.tokenize(stream, state);\n }\n state.leavingExpr = true;\n return \"variable\";\n }\n\n // Handle non-detected items\n stream.next();\n return \"error\";\n }\n\n function tokenCallOrDef(stream, state) {\n var match = stream.match(/^(\\(\\s*)/);\n if (match) {\n if (state.firstParenPos < 0)\n state.firstParenPos = state.scopes.length;\n state.scopes.push('(');\n state.charsAdvanced += match[1].length;\n }\n if (currentScope(state) == '(' && stream.match(/^\\)/)) {\n state.scopes.pop();\n state.charsAdvanced += 1;\n if (state.scopes.length <= state.firstParenPos) {\n var isDefinition = stream.match(/^(\\s*where\\s+[^\\s=]+)*\\s*?=(?!=)/, false);\n stream.backUp(state.charsAdvanced);\n state.firstParenPos = -1;\n state.charsAdvanced = 0;\n state.tokenize = tokenBase;\n if (isDefinition)\n return \"def\";\n return \"builtin\";\n }\n }\n // Unfortunately javascript does not support multiline strings, so we have\n // to undo anything done upto here if a function call or definition splits\n // over two or more lines.\n if (stream.match(/^$/g, false)) {\n stream.backUp(state.charsAdvanced);\n while (state.scopes.length > state.firstParenPos)\n state.scopes.pop();\n state.firstParenPos = -1;\n state.charsAdvanced = 0;\n state.tokenize = tokenBase;\n return \"builtin\";\n }\n state.charsAdvanced += stream.match(/^([^()]*)/)[1].length;\n return state.tokenize(stream, state);\n }\n\n function tokenAnnotation(stream, state) {\n stream.match(/.*?(?=,|;|{|}|\\(|\\)|=|$|\\s)/);\n if (stream.match(/^{/)) {\n state.nestedParameters++;\n } else if (stream.match(/^}/) && state.nestedParameters > 0) {\n state.nestedParameters--;\n }\n if (state.nestedParameters > 0) {\n stream.match(/.*?(?={|})/) || stream.next();\n } else if (state.nestedParameters == 0) {\n state.tokenize = tokenBase;\n }\n return \"builtin\";\n }\n\n function tokenComment(stream, state) {\n if (stream.match(/^#=/)) {\n state.nestedComments++;\n }\n if (!stream.match(/.*?(?=(#=|=#))/)) {\n stream.skipToEnd();\n }\n if (stream.match(/^=#/)) {\n state.nestedComments--;\n if (state.nestedComments == 0)\n state.tokenize = tokenBase;\n }\n return \"comment\";\n }\n\n function tokenChar(stream, state) {\n var isChar = false, match;\n if (stream.match(chars)) {\n isChar = true;\n } else if (match = stream.match(/\\\\u([a-f0-9]{1,4})(?=')/i)) {\n var value = parseInt(match[1], 16);\n if (value <= 55295 || value >= 57344) { // (U+0,U+D7FF), (U+E000,U+FFFF)\n isChar = true;\n stream.next();\n }\n } else if (match = stream.match(/\\\\U([A-Fa-f0-9]{5,8})(?=')/)) {\n var value = parseInt(match[1], 16);\n if (value <= 1114111) { // U+10FFFF\n isChar = true;\n stream.next();\n }\n }\n if (isChar) {\n state.leavingExpr = true;\n state.tokenize = tokenBase;\n return \"string\";\n }\n if (!stream.match(/^[^']+(?=')/)) { stream.skipToEnd(); }\n if (stream.match(/^'/)) { state.tokenize = tokenBase; }\n return \"error\";\n }\n\n function tokenStringFactory(delimiter) {\n if (delimiter.substr(-3) === '\"\"\"') {\n delimiter = '\"\"\"';\n } else if (delimiter.substr(-1) === '\"') {\n delimiter = '\"';\n }\n function tokenString(stream, state) {\n if (stream.eat('\\\\')) {\n stream.next();\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenBase;\n state.leavingExpr = true;\n return \"string\";\n } else {\n stream.eat(/[`\"]/);\n }\n stream.eatWhile(/[^\\\\`\"]/);\n return \"string\";\n }\n return tokenString;\n }\n\n var external = {\n startState: function() {\n return {\n tokenize: tokenBase,\n scopes: [],\n lastToken: null,\n leavingExpr: false,\n isDefinition: false,\n nestedArrays: 0,\n nestedComments: 0,\n nestedGenerators: 0,\n nestedParameters: 0,\n charsAdvanced: 0,\n firstParenPos: -1\n };\n },\n\n token: function(stream, state) {\n var style = state.tokenize(stream, state);\n var current = stream.current();\n\n if (current && style) {\n state.lastToken = current;\n }\n\n return style;\n },\n\n indent: function(state, textAfter) {\n var delta = 0;\n if ( textAfter === ']' || textAfter === ')' || /^end\\b/.test(textAfter) ||\n /^else/.test(textAfter) || /^catch\\b/.test(textAfter) || /^elseif\\b/.test(textAfter) ||\n /^finally/.test(textAfter) ) {\n delta = -1;\n }\n return (state.scopes.length + delta) * config.indentUnit;\n },\n\n electricInput: /\\b(end|else|catch|finally)\\b/,\n blockCommentStart: \"#=\",\n blockCommentEnd: \"=#\",\n lineComment: \"#\",\n closeBrackets: \"()[]{}\\\"\\\"\",\n fold: \"indent\"\n };\n return external;\n});\n\n\nCodeMirror.defineMIME(\"text/x-julia\", \"julia\");\n\n});\n"]}