{"version":3,"sources":["../../node_modules/codemirror/mode/mumps/mumps.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","wordRegexp","words","RegExp","join","singleOperators","doubleOperators","singleDelimiters","brackets","identifiers","commandKeywords","intrinsicFuncsWords","intrinsicFuncs","command","tokenBase","stream","state","sol","label","commandMode","ch","peek","skipToEnd","match","skipTo","next","test","eatWhile","startState","token","style","defineMIME"],"mappings":"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","file":"mumps.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n/*\n This MUMPS Language script was constructed using vbscript.js as a template.\n*/\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\n CodeMirror.defineMode(\"mumps\", function() {\n function wordRegexp(words) {\n return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\", \"i\");\n }\n\n var singleOperators = new RegExp(\"^[\\\\+\\\\-\\\\*/&#!_?\\\\\\\\<>=\\\\'\\\\[\\\\]]\");\n var doubleOperators = new RegExp(\"^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))\");\n var singleDelimiters = new RegExp(\"^[\\\\.,:]\");\n var brackets = new RegExp(\"[()]\");\n var identifiers = new RegExp(\"^[%A-Za-z][A-Za-z0-9]*\");\n var commandKeywords = [\"break\",\"close\",\"do\",\"else\",\"for\",\"goto\", \"halt\", \"hang\", \"if\", \"job\",\"kill\",\"lock\",\"merge\",\"new\",\"open\", \"quit\", \"read\", \"set\", \"tcommit\", \"trollback\", \"tstart\", \"use\", \"view\", \"write\", \"xecute\", \"b\",\"c\",\"d\",\"e\",\"f\",\"g\", \"h\", \"i\", \"j\",\"k\",\"l\",\"m\",\"n\",\"o\", \"q\", \"r\", \"s\", \"tc\", \"tro\", \"ts\", \"u\", \"v\", \"w\", \"x\"];\n // The following list includes instrinsic functions _and_ special variables\n var intrinsicFuncsWords = [\"\\\\$ascii\", \"\\\\$char\", \"\\\\$data\", \"\\\\$ecode\", \"\\\\$estack\", \"\\\\$etrap\", \"\\\\$extract\", \"\\\\$find\", \"\\\\$fnumber\", \"\\\\$get\", \"\\\\$horolog\", \"\\\\$io\", \"\\\\$increment\", \"\\\\$job\", \"\\\\$justify\", \"\\\\$length\", \"\\\\$name\", \"\\\\$next\", \"\\\\$order\", \"\\\\$piece\", \"\\\\$qlength\", \"\\\\$qsubscript\", \"\\\\$query\", \"\\\\$quit\", \"\\\\$random\", \"\\\\$reverse\", \"\\\\$select\", \"\\\\$stack\", \"\\\\$test\", \"\\\\$text\", \"\\\\$translate\", \"\\\\$view\", \"\\\\$x\", \"\\\\$y\", \"\\\\$a\", \"\\\\$c\", \"\\\\$d\", \"\\\\$e\", \"\\\\$ec\", \"\\\\$es\", \"\\\\$et\", \"\\\\$f\", \"\\\\$fn\", \"\\\\$g\", \"\\\\$h\", \"\\\\$i\", \"\\\\$j\", \"\\\\$l\", \"\\\\$n\", \"\\\\$na\", \"\\\\$o\", \"\\\\$p\", \"\\\\$q\", \"\\\\$ql\", \"\\\\$qs\", \"\\\\$r\", \"\\\\$re\", \"\\\\$s\", \"\\\\$st\", \"\\\\$t\", \"\\\\$tr\", \"\\\\$v\", \"\\\\$z\"];\n var intrinsicFuncs = wordRegexp(intrinsicFuncsWords);\n var command = wordRegexp(commandKeywords);\n\n function tokenBase(stream, state) {\n if (stream.sol()) {\n state.label = true;\n state.commandMode = 0;\n }\n\n // The character has meaning in MUMPS. Ignoring consecutive\n // spaces would interfere with interpreting whether the next non-space\n // character belongs to the command or argument context.\n\n // Examine each character and update a mode variable whose interpretation is:\n // >0 => command 0 => argument <0 => command post-conditional\n var ch = stream.peek();\n\n if (ch == \" \" || ch == \"\\t\") { // Pre-process \n state.label = false;\n if (state.commandMode == 0)\n state.commandMode = 1;\n else if ((state.commandMode < 0) || (state.commandMode == 2))\n state.commandMode = 0;\n } else if ((ch != \".\") && (state.commandMode > 0)) {\n if (ch == \":\")\n state.commandMode = -1; // SIS - Command post-conditional\n else\n state.commandMode = 2;\n }\n\n // Do not color parameter list as line tag\n if ((ch === \"(\") || (ch === \"\\u0009\"))\n state.label = false;\n\n // MUMPS comment starts with \";\"\n if (ch === \";\") {\n stream.skipToEnd();\n return \"comment\";\n }\n\n // Number Literals // SIS/RLM - MUMPS permits canonic number followed by concatenate operator\n if (stream.match(/^[-+]?\\d+(\\.\\d+)?([eE][-+]?\\d+)?/))\n return \"number\";\n\n // Handle Strings\n if (ch == '\"') {\n if (stream.skipTo('\"')) {\n stream.next();\n return \"string\";\n } else {\n stream.skipToEnd();\n return \"error\";\n }\n }\n\n // Handle operators and Delimiters\n if (stream.match(doubleOperators) || stream.match(singleOperators))\n return \"operator\";\n\n // Prevents leading \".\" in DO block from falling through to error\n if (stream.match(singleDelimiters))\n return null;\n\n if (brackets.test(ch)) {\n stream.next();\n return \"bracket\";\n }\n\n if (state.commandMode > 0 && stream.match(command))\n return \"variable-2\";\n\n if (stream.match(intrinsicFuncs))\n return \"builtin\";\n\n if (stream.match(identifiers))\n return \"variable\";\n\n // Detect dollar-sign when not a documented intrinsic function\n // \"^\" may introduce a GVN or SSVN - Color same as function\n if (ch === \"$\" || ch === \"^\") {\n stream.next();\n return \"builtin\";\n }\n\n // MUMPS Indirection\n if (ch === \"@\") {\n stream.next();\n return \"string-2\";\n }\n\n if (/[\\w%]/.test(ch)) {\n stream.eatWhile(/[\\w%]/);\n return \"variable\";\n }\n\n // Handle non-detected items\n stream.next();\n return \"error\";\n }\n\n return {\n startState: function() {\n return {\n label: false,\n commandMode: 0\n };\n },\n\n token: function(stream, state) {\n var style = tokenBase(stream, state);\n if (state.label) return \"tag\";\n return style;\n }\n };\n });\n\n CodeMirror.defineMIME(\"text/x-mumps\", \"mumps\");\n});\n"]}