1{"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":"CAOA,SAAUA,GACR,SAAWC,UAAW,gBAAmBC,SAAU,SACjDF,EAAIG,QAAQ,6BACT,UAAWC,SAAU,YAAcA,OAAOC,IAC7CD,QAAQ,wBAAyBJ,OAEjCA,GAAIM,cACL,SAASA,GACV,YAEAA,GAAWC,WAAW,QAAS,WAC7B,QAASC,GAAWC,GAClB,MAAO,IAAIC,QAAO,MAAQD,EAAME,KAAK,OAAS,QAAS,KAGzD,GAAIC,GAAkB,GAAIF,QAAO,qCACjC,IAAIG,GAAkB,GAAIH,QAAO,6CACjC,IAAII,GAAmB,GAAIJ,QAAO,WAClC,IAAIK,GAAW,GAAIL,QAAO,OAC1B,IAAIM,GAAc,GAAIN,QAAO,yBAC7B,IAAIO,IAAmB,QAAQ,QAAQ,KAAK,OAAO,MAAM,OAAQ,OAAQ,OAAQ,KAAM,MAAM,OAAO,OAAO,QAAQ,MAAM,OAAQ,OAAQ,OAAQ,MAAO,UAAW,YAAa,SAAU,MAAO,OAAQ,QAAS,SAAU,IAAI,IAAI,IAAI,IAAI,IAAI,IAAK,IAAK,IAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAK,IAAK,IAAK,IAAK,KAAM,MAAO,KAAM,IAAK,IAAK,IAAK,IAEzU,IAAIC,IAAuB,WAAY,UAAW,UAAW,WAAY,YAAa,WAAY,aAAc,UAAW,aAAc,SAAU,aAAc,QAAS,eAAgB,SAAU,aAAc,YAAa,UAAW,UAAW,WAAY,WAAY,aAAc,gBAAiB,WAAY,UAAW,YAAa,aAAc,YAAa,WAAY,UAAW,UAAW,eAAgB,UAAW,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,QAAS,QAAS,OAAQ,QAAS,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,OAAQ,OAAQ,OAAQ,QAAS,QAAS,OAAQ,QAAS,OAAQ,QAAS,OAAQ,QAAS,OAAQ,OAClqB,IAAIC,GAAiBX,EAAWU,EAChC,IAAIE,GAAUZ,EAAWS,EAEzB,SAASI,GAAUC,EAAQC,GACzB,GAAID,EAAOE,MAAO,CAChBD,EAAME,MAAQ,IACdF,GAAMG,YAAc,EAStB,GAAIC,GAAKL,EAAOM,MAEhB,IAAID,GAAM,KAAOA,GAAM,KAAM,CAC3BJ,EAAME,MAAQ,KACd,IAAIF,EAAMG,aAAe,EACvBH,EAAMG,YAAc,MACjB,IAAKH,EAAMG,YAAc,GAAOH,EAAMG,aAAe,EACxDH,EAAMG,YAAc,MACjB,IAAKC,GAAM,KAASJ,EAAMG,YAAc,EAAI,CACjD,GAAIC,GAAM,IACRJ,EAAMG,aAAe,MAErBH,GAAMG,YAAc,EAIxB,GAAKC,IAAO,KAASA,IAAO,KAC1BJ,EAAME,MAAQ,KAGhB,IAAIE,IAAO,IAAK,CACdL,EAAOO,WACP,OAAO,UAIT,GAAIP,EAAOQ,MAAM,oCACf,MAAO,QAGT,IAAIH,GAAM,IAAK,CACb,GAAIL,EAAOS,OAAO,KAAM,CACtBT,EAAOU,MACP,OAAO,aACF,CACLV,EAAOO,WACP,OAAO,SAKX,GAAIP,EAAOQ,MAAMjB,IAAoBS,EAAOQ,MAAMlB,GAChD,MAAO,UAGT,IAAIU,EAAOQ,MAAMhB,GACf,MAAO,KAET,IAAIC,EAASkB,KAAKN,GAAK,CACrBL,EAAOU,MACP,OAAO,UAGT,GAAIT,EAAMG,YAAc,GAAKJ,EAAOQ,MAAMV,GACxC,MAAO,YAET,IAAIE,EAAOQ,MAAMX,GACf,MAAO,SAET,IAAIG,EAAOQ,MAAMd,GACf,MAAO,UAIT,IAAIW,IAAO,KAAOA,IAAO,IAAK,CAC5BL,EAAOU,MACP,OAAO,UAIT,GAAIL,IAAO,IAAK,CACdL,EAAOU,MACP,OAAO,WAGT,GAAI,QAAQC,KAAKN,GAAK,CACpBL,EAAOY,SAAS,QAChB,OAAO,WAITZ,EAAOU,MACP,OAAO,QAGT,OACEG,WAAY,WACV,OACEV,MAAO,MACPC,YAAa,IAIjBU,MAAO,SAASd,EAAQC,GACtB,GAAIc,GAAQhB,EAAUC,EAAQC,EAC9B,IAAIA,EAAME,MAAO,MAAO,KACxB,OAAOY,MAKb/B,GAAWgC,WAAW,eAAgB","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 <space> 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 <space>\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"]}