{"version":3,"file":"mumps-DQ_3S9Ud.cjs","sources":["../../../node_modules/@codemirror/legacy-modes/mode/mumps.js"],"sourcesContent":["function wordRegexp(words) {\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\", \"i\");\n}\n\nvar singleOperators = new RegExp(\"^[\\\\+\\\\-\\\\*/&#!_?\\\\\\\\<>=\\\\'\\\\[\\\\]]\");\nvar doubleOperators = new RegExp(\"^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))\");\nvar singleDelimiters = new RegExp(\"^[\\\\.,:]\");\nvar brackets = new RegExp(\"[()]\");\nvar identifiers = new RegExp(\"^[%A-Za-z][A-Za-z0-9]*\");\nvar 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 intrinsic functions _and_ special variables\nvar 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\"];\nvar intrinsicFuncs = wordRegexp(intrinsicFuncsWords);\nvar command = wordRegexp(commandKeywords);\n\nfunction 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 \"controlKeyword\";\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.special\";\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\nexport const mumps = {\n  name: \"mumps\",\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"],"names":["wordRegexp","words","RegExp","join","singleOperators","doubleOperators","singleDelimiters","brackets","identifiers","intrinsicFuncs","command","mumps","name","startState","label","commandMode","token","stream","state","style","sol","ch","peek","skipToEnd","match","skipTo","next","test","eatWhile","tokenBase"],"mappings":"aAAA,SAASA,EAAWC,GAClB,OAAO,IAAIC,OAAO,MAAQD,EAAME,KAAK,OAAS,QAAS,IACzD,oEAEA,IAAIC,EAAkB,IAAIF,OAAO,sCAC7BG,EAAkB,IAAIH,OAAO,8CAC7BI,EAAmB,IAAIJ,OAAO,YAC9BK,EAAW,IAAIL,OAAO,QACtBM,EAAc,IAAIN,OAAO,0BAIzBO,EAAiBT,EADK,CAAC,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,SAE9pBU,EAAUV,EAJQ,CAAC,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,MAuG7T,MAACW,EAAQ,CACnBC,KAAM,QACNC,WAAY,WACV,MAAO,CACLC,OAAO,EACPC,YAAa,EAEjB,EAEAC,MAAO,SAASC,EAAQC,GACtB,IAAIC,EA3GR,SAAmBF,EAAQC,GACrBD,EAAOG,QACTF,EAAMJ,OAAQ,EACdI,EAAMH,YAAc,GAStB,IAAIM,EAAKJ,EAAOK,OAoBhB,MAlBU,KAAND,GAAmB,MAANA,GACfH,EAAMJ,OAAQ,EACW,GAArBI,EAAMH,YACRG,EAAMH,YAAc,GACZG,EAAMH,YAAc,GAA4B,GAArBG,EAAMH,eACzCG,EAAMH,YAAc,IACN,KAANM,GAAeH,EAAMH,YAAc,IAE3CG,EAAMH,YADE,KAANM,KAGkB,GAIZ,MAAPA,GAAuB,OAAPA,IACnBH,EAAMJ,OAAQ,GAGL,MAAPO,GACFJ,EAAOM,YACA,WAILN,EAAOO,MAAM,oCACR,SAGC,KAANH,EACEJ,EAAOQ,OAAO,MAChBR,EAAOS,OACA,WAEPT,EAAOM,YACA,SAKPN,EAAOO,MAAMnB,IAAoBY,EAAOO,MAAMpB,GACzC,WAGLa,EAAOO,MAAMlB,GACR,KAELC,EAASoB,KAAKN,IAChBJ,EAAOS,OACA,WAGLR,EAAMH,YAAc,GAAKE,EAAOO,MAAMd,GACjC,iBAELO,EAAOO,MAAMf,GACR,UAELQ,EAAOO,MAAMhB,GACR,WAIE,MAAPa,GAAqB,MAAPA,GAChBJ,EAAOS,OACA,WAIE,MAAPL,GACFJ,EAAOS,OACA,kBAGL,QAAQC,KAAKN,IACfJ,EAAOW,SAAS,SACT,aAITX,EAAOS,OACA,QACT,CAYgBG,CAAUZ,EAAQC,GAC9B,OAAIA,EAAMJ,MAAc,MACjBK,CACT","x_google_ignoreList":[0]}