1{"version":3,"sources":["../../node_modules/codemirror/mode/mathematica/mathematica.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","_config","_parserConfig","Identifier","pBase","pFloat","pFloatBase","pPrecision","reBaseForm","RegExp","reFloatForm","reIdInContext","tokenBase","stream","state","ch","next","tokenize","tokenString","eat","commentLevel","tokenComment","backUp","match","end","escaped","prev","startState","token","eatSpace","blockCommentStart","blockCommentEnd","defineMIME","name"],"mappings":"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","file":"mathematica.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Mathematica mode copyright (c) 2015 by Calin Barbat\n// Based on code by Patrick Scheibe (halirutan)\n// See: https://github.com/halirutan/Mathematica-Source-Highlighting/tree/master/src/lang-mma.js\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('mathematica', function(_config, _parserConfig) {\n\n  // used pattern building blocks\n  var Identifier = '[a-zA-Z\\\\$][a-zA-Z0-9\\\\$]*';\n  var pBase      = \"(?:\\\\d+)\";\n  var pFloat     = \"(?:\\\\.\\\\d+|\\\\d+\\\\.\\\\d*|\\\\d+)\";\n  var pFloatBase = \"(?:\\\\.\\\\w+|\\\\w+\\\\.\\\\w*|\\\\w+)\";\n  var pPrecision = \"(?:`(?:`?\"+pFloat+\")?)\";\n\n  // regular expressions\n  var reBaseForm        = new RegExp('(?:'+pBase+'(?:\\\\^\\\\^'+pFloatBase+pPrecision+'?(?:\\\\*\\\\^[+-]?\\\\d+)?))');\n  var reFloatForm       = new RegExp('(?:' + pFloat + pPrecision + '?(?:\\\\*\\\\^[+-]?\\\\d+)?)');\n  var reIdInContext     = new RegExp('(?:`?)(?:' + Identifier + ')(?:`(?:' + Identifier + '))*(?:`?)');\n\n  function tokenBase(stream, state) {\n    var ch;\n\n    // get next character\n    ch = stream.next();\n\n    // string\n    if (ch === '\"') {\n      state.tokenize = tokenString;\n      return state.tokenize(stream, state);\n    }\n\n    // comment\n    if (ch === '(') {\n      if (stream.eat('*')) {\n        state.commentLevel++;\n        state.tokenize = tokenComment;\n        return state.tokenize(stream, state);\n      }\n    }\n\n    // go back one character\n    stream.backUp(1);\n\n    // look for numbers\n    // Numbers in a baseform\n    if (stream.match(reBaseForm, true, false)) {\n      return 'number';\n    }\n\n    // Mathematica numbers. Floats (1.2, .2, 1.) can have optionally a precision (`float) or an accuracy definition\n    // (``float). Note: while 1.2` is possible 1.2`` is not. At the end an exponent (float*^+12) can follow.\n    if (stream.match(reFloatForm, true, false)) {\n      return 'number';\n    }\n\n    /* In[23] and Out[34] */\n    if (stream.match(/(?:In|Out)\\[[0-9]*\\]/, true, false)) {\n      return 'atom';\n    }\n\n    // usage\n    if (stream.match(/([a-zA-Z\\$][a-zA-Z0-9\\$]*(?:`[a-zA-Z0-9\\$]+)*::usage)/, true, false)) {\n      return 'meta';\n    }\n\n    // message\n    if (stream.match(/([a-zA-Z\\$][a-zA-Z0-9\\$]*(?:`[a-zA-Z0-9\\$]+)*::[a-zA-Z\\$][a-zA-Z0-9\\$]*):?/, true, false)) {\n      return 'string-2';\n    }\n\n    // this makes a look-ahead match for something like variable:{_Integer}\n    // the match is then forwarded to the mma-patterns tokenizer.\n    if (stream.match(/([a-zA-Z\\$][a-zA-Z0-9\\$]*\\s*:)(?:(?:[a-zA-Z\\$][a-zA-Z0-9\\$]*)|(?:[^:=>~@\\^\\&\\*\\)\\[\\]'\\?,\\|])).*/, true, false)) {\n      return 'variable-2';\n    }\n\n    // catch variables which are used together with Blank (_), BlankSequence (__) or BlankNullSequence (___)\n    // Cannot start with a number, but can have numbers at any other position. Examples\n    // blub__Integer, a1_, b34_Integer32\n    if (stream.match(/[a-zA-Z\\$][a-zA-Z0-9\\$]*_+[a-zA-Z\\$][a-zA-Z0-9\\$]*/, true, false)) {\n      return 'variable-2';\n    }\n    if (stream.match(/[a-zA-Z\\$][a-zA-Z0-9\\$]*_+/, true, false)) {\n      return 'variable-2';\n    }\n    if (stream.match(/_+[a-zA-Z\\$][a-zA-Z0-9\\$]*/, true, false)) {\n      return 'variable-2';\n    }\n\n    // Named characters in Mathematica, like \\[Gamma].\n    if (stream.match(/\\\\\\[[a-zA-Z\\$][a-zA-Z0-9\\$]*\\]/, true, false)) {\n      return 'variable-3';\n    }\n\n    // Match all braces separately\n    if (stream.match(/(?:\\[|\\]|{|}|\\(|\\))/, true, false)) {\n      return 'bracket';\n    }\n\n    // Catch Slots (#, ##, #3, ##9 and the V10 named slots #name). I have never seen someone using more than one digit after #, so we match\n    // only one.\n    if (stream.match(/(?:#[a-zA-Z\\$][a-zA-Z0-9\\$]*|#+[0-9]?)/, true, false)) {\n      return 'variable-2';\n    }\n\n    // Literals like variables, keywords, functions\n    if (stream.match(reIdInContext, true, false)) {\n      return 'keyword';\n    }\n\n    // operators. Note that operators like @@ or /; are matched separately for each symbol.\n    if (stream.match(/(?:\\\\|\\+|\\-|\\*|\\/|,|;|\\.|:|@|~|=|>|<|&|\\||_|`|'|\\^|\\?|!|%)/, true, false)) {\n      return 'operator';\n    }\n\n    // everything else is an error\n    stream.next(); // advance the stream.\n    return 'error';\n  }\n\n  function tokenString(stream, state) {\n    var next, end = false, escaped = false;\n    while ((next = stream.next()) != null) {\n      if (next === '\"' && !escaped) {\n        end = true;\n        break;\n      }\n      escaped = !escaped && next === '\\\\';\n    }\n    if (end && !escaped) {\n      state.tokenize = tokenBase;\n    }\n    return 'string';\n  };\n\n  function tokenComment(stream, state) {\n    var prev, next;\n    while(state.commentLevel > 0 && (next = stream.next()) != null) {\n      if (prev === '(' && next === '*') state.commentLevel++;\n      if (prev === '*' && next === ')') state.commentLevel--;\n      prev = next;\n    }\n    if (state.commentLevel <= 0) {\n      state.tokenize = tokenBase;\n    }\n    return 'comment';\n  }\n\n  return {\n    startState: function() {return {tokenize: tokenBase, commentLevel: 0};},\n    token: function(stream, state) {\n      if (stream.eatSpace()) return null;\n      return state.tokenize(stream, state);\n    },\n    blockCommentStart: \"(*\",\n    blockCommentEnd: \"*)\"\n  };\n});\n\nCodeMirror.defineMIME('text/x-mathematica', {\n  name: 'mathematica'\n});\n\n});\n"]}