1{"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"]}