1{"version":3,"sources":["../../node_modules/codemirror/mode/yacas/yacas.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","_config","_parserConfig","words","str","obj","split","i","length","bodiedOps","pFloatForm","pIdentifier","reFloatForm","RegExp","reIdentifier","rePattern","reFunctionLike","tokenBase","stream","state","ch","next","tokenize","tokenString","eat","tokenComment","skipToEnd","backUp","m","match","hasOwnProperty","scopes","push","scope","currentScope","pop","end","escaped","prev","startState","token","eatSpace","indent","textAfter","Pass","delta","indentUnit","electricChars","blockCommentStart","blockCommentEnd","lineComment","defineMIME","name"],"mappings":"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","file":"yacas.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Yacas mode copyright (c) 2015 by Grzegorz Mazur\n// Loosely based on mathematica mode by Calin Barbat\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('yacas', function(_config, _parserConfig) {\n\n  function words(str) {\n    var obj = {}, words = str.split(\" \");\n    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n    return obj;\n  }\n\n  var bodiedOps = words(\"Assert BackQuote D Defun Deriv For ForEach FromFile \" +\n                        \"FromString Function Integrate InverseTaylor Limit \" +\n                        \"LocalSymbols Macro MacroRule MacroRulePattern \" +\n                        \"NIntegrate Rule RulePattern Subst TD TExplicitSum \" +\n                        \"TSum Taylor Taylor1 Taylor2 Taylor3 ToFile \" +\n                        \"ToStdout ToString TraceRule Until While\");\n\n  // patterns\n  var pFloatForm  = \"(?:(?:\\\\.\\\\d+|\\\\d+\\\\.\\\\d*|\\\\d+)(?:[eE][+-]?\\\\d+)?)\";\n  var pIdentifier = \"(?:[a-zA-Z\\\\$'][a-zA-Z0-9\\\\$']*)\";\n\n  // regular expressions\n  var reFloatForm    = new RegExp(pFloatForm);\n  var reIdentifier   = new RegExp(pIdentifier);\n  var rePattern      = new RegExp(pIdentifier + \"?_\" + pIdentifier);\n  var reFunctionLike = new RegExp(pIdentifier + \"\\\\s*\\\\(\");\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.tokenize = tokenComment;\n        return state.tokenize(stream, state);\n      }\n      if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n    }\n\n    // go back one character\n    stream.backUp(1);\n\n    // update scope info\n    var m = stream.match(/^(\\w+)\\s*\\(/, false);\n    if (m !== null && bodiedOps.hasOwnProperty(m[1]))\n      state.scopes.push('bodied');\n\n    var scope = currentScope(state);\n\n    if (scope === 'bodied' && ch === '[')\n      state.scopes.pop();\n\n    if (ch === '[' || ch === '{' || ch === '(')\n      state.scopes.push(ch);\n\n    scope = currentScope(state);\n\n    if (scope === '[' && ch === ']' ||\n        scope === '{' && ch === '}' ||\n        scope === '(' && ch === ')')\n      state.scopes.pop();\n\n    if (ch === ';') {\n      while (scope === 'bodied') {\n        state.scopes.pop();\n        scope = currentScope(state);\n      }\n    }\n\n    // look for ordered rules\n    if (stream.match(/\\d+ *#/, true, false)) {\n      return 'qualifier';\n    }\n\n    // look for numbers\n    if (stream.match(reFloatForm, true, false)) {\n      return 'number';\n    }\n\n    // look for placeholders\n    if (stream.match(rePattern, 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    // literals looking like function calls\n    if (stream.match(reFunctionLike, true, false)) {\n      stream.backUp(1);\n      return 'variable';\n    }\n\n    // all other identifiers\n    if (stream.match(reIdentifier, true, false)) {\n      return 'variable-2';\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    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((next = stream.next()) != null) {\n      if (prev === '*' && next === '/') {\n        state.tokenize = tokenBase;\n        break;\n      }\n      prev = next;\n    }\n    return 'comment';\n  }\n\n  function currentScope(state) {\n    var scope = null;\n    if (state.scopes.length > 0)\n      scope = state.scopes[state.scopes.length - 1];\n    return scope;\n  }\n\n  return {\n    startState: function() {\n      return {\n        tokenize: tokenBase,\n        scopes: []\n      };\n    },\n    token: function(stream, state) {\n      if (stream.eatSpace()) return null;\n      return state.tokenize(stream, state);\n    },\n    indent: function(state, textAfter) {\n      if (state.tokenize !== tokenBase && state.tokenize !== null)\n        return CodeMirror.Pass;\n\n      var delta = 0;\n      if (textAfter === ']' || textAfter === '];' ||\n          textAfter === '}' || textAfter === '};' ||\n          textAfter === ');')\n        delta = -1;\n\n      return (state.scopes.length + delta) * _config.indentUnit;\n    },\n    electricChars: \"{}[]();\",\n    blockCommentStart: \"/*\",\n    blockCommentEnd: \"*/\",\n    lineComment: \"//\"\n  };\n});\n\nCodeMirror.defineMIME('text/x-yacas', {\n  name: 'yacas'\n});\n\n});\n"]}