{"version":3,"file":"forth-CqDKyQE2.cjs","sources":["../../../node_modules/@codemirror/legacy-modes/mode/forth.js"],"sourcesContent":["function toWordList(words) {\n  var ret = [];\n  words.split(' ').forEach(function(e){\n    ret.push({name: e});\n  });\n  return ret;\n}\n\nvar coreWordList = toWordList(\n  'INVERT AND OR XOR\\\n 2* 2/ LSHIFT RSHIFT\\\n 0= = 0< < > U< MIN MAX\\\n 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP\\\n >R R> R@\\\n + - 1+ 1- ABS NEGATE\\\n S>D * M* UM*\\\n FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD\\\n HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2!\\\n ALIGN ALIGNED +! ALLOT\\\n CHAR [CHAR] [ ] BL\\\n FIND EXECUTE IMMEDIATE COUNT LITERAL STATE\\\n ; DOES> >BODY\\\n EVALUATE\\\n SOURCE >IN\\\n <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL\\\n FILL MOVE\\\n . CR EMIT SPACE SPACES TYPE U. .R U.R\\\n ACCEPT\\\n TRUE FALSE\\\n <> U> 0<> 0>\\\n NIP TUCK ROLL PICK\\\n 2>R 2R@ 2R>\\\n WITHIN UNUSED MARKER\\\n I J\\\n TO\\\n COMPILE, [COMPILE]\\\n SAVE-INPUT RESTORE-INPUT\\\n PAD ERASE\\\n 2LITERAL DNEGATE\\\n D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS\\\n M+ M*/ D. D.R 2ROT DU<\\\n CATCH THROW\\\n FREE RESIZE ALLOCATE\\\n CS-PICK CS-ROLL\\\n GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER\\\n PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER\\\n -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL');\n\nvar immediateWordList = toWordList('IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE');\n\nfunction searchWordList (wordList, word) {\n  var i;\n  for (i = wordList.length - 1; i >= 0; i--) {\n    if (wordList[i].name === word.toUpperCase()) {\n      return wordList[i];\n    }\n  }\n  return undefined;\n}\nexport const forth = {\n  name: \"forth\",\n  startState: function() {\n    return {\n      state: '',\n      base: 10,\n      coreWordList: coreWordList,\n      immediateWordList: immediateWordList,\n      wordList: []\n    };\n  },\n  token: function (stream, stt) {\n    var mat;\n    if (stream.eatSpace()) {\n      return null;\n    }\n    if (stt.state === '') { // interpretation\n      if (stream.match(/^(\\]|:NONAME)(\\s|$)/i)) {\n        stt.state = ' compilation';\n        return 'builtin';\n      }\n      mat = stream.match(/^(\\:)\\s+(\\S+)(\\s|$)+/);\n      if (mat) {\n        stt.wordList.push({name: mat[2].toUpperCase()});\n        stt.state = ' compilation';\n        return 'def';\n      }\n      mat = stream.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\\s+(\\S+)(\\s|$)+/i);\n      if (mat) {\n        stt.wordList.push({name: mat[2].toUpperCase()});\n        return 'def';\n      }\n      mat = stream.match(/^(\\'|\\[\\'\\])\\s+(\\S+)(\\s|$)+/);\n      if (mat) {\n        return 'builtin'\n      }\n    } else { // compilation\n      // ; [\n      if (stream.match(/^(\\;|\\[)(\\s)/)) {\n        stt.state = '';\n        stream.backUp(1);\n        return 'builtin';\n      }\n      if (stream.match(/^(\\;|\\[)($)/)) {\n        stt.state = '';\n        return 'builtin';\n      }\n      if (stream.match(/^(POSTPONE)\\s+\\S+(\\s|$)+/)) {\n        return 'builtin';\n      }\n    }\n\n    // dynamic wordlist\n    mat = stream.match(/^(\\S+)(\\s+|$)/);\n    if (mat) {\n      if (searchWordList(stt.wordList, mat[1]) !== undefined) {\n        return 'variable';\n      }\n\n      // comments\n      if (mat[1] === '\\\\') {\n        stream.skipToEnd();\n        return 'comment';\n      }\n\n      // core words\n      if (searchWordList(stt.coreWordList, mat[1]) !== undefined) {\n        return 'builtin';\n      }\n      if (searchWordList(stt.immediateWordList, mat[1]) !== undefined) {\n        return 'keyword';\n      }\n\n      if (mat[1] === '(') {\n        stream.eatWhile(function (s) { return s !== ')'; });\n        stream.eat(')');\n        return 'comment';\n      }\n\n      // // strings\n      if (mat[1] === '.(') {\n        stream.eatWhile(function (s) { return s !== ')'; });\n        stream.eat(')');\n        return 'string';\n      }\n      if (mat[1] === 'S\"' || mat[1] === '.\"' || mat[1] === 'C\"') {\n        stream.eatWhile(function (s) { return s !== '\"'; });\n        stream.eat('\"');\n        return 'string';\n      }\n\n      // numbers\n      if (mat[1] - 0xfffffffff) {\n        return 'number';\n      }\n      // if (mat[1].match(/^[-+]?[0-9]+\\.[0-9]*/)) {\n      //     return 'number';\n      // }\n\n      return 'atom';\n    }\n  }\n};\n"],"names":["toWordList","words","ret","split","forEach","e","push","name","coreWordList","immediateWordList","searchWordList","wordList","word","i","length","toUpperCase","forth","startState","state","base","token","stream","stt","mat","eatSpace","match","backUp","undefined","skipToEnd","eatWhile","s","eat"],"mappings":"aAAA,SAASA,EAAWC,GAClB,IAAIC,EAAM,GAIV,OAHAD,EAAME,MAAM,KAAKC,QAAQ,SAASC,GAChCH,EAAII,KAAK,CAACC,KAAMF,GAClB,GACOH,CACT,oEAEA,IAAIM,EAAeR,EACjB,u6BAuCES,EAAoBT,EAAW,oIAEnC,SAASU,EAAgBC,EAAUC,GACjC,IAAIC,EACJ,IAAKA,EAAIF,EAASG,OAAS,EAAGD,GAAK,EAAGA,IACpC,GAAIF,EAASE,GAAGN,OAASK,EAAKG,cAC5B,OAAOJ,EAASE,EAItB,CACY,MAACG,EAAQ,CACnBT,KAAM,QACNU,WAAY,WACV,MAAO,CACLC,MAAO,GACPC,KAAM,GACNX,aAAcA,EACdC,kBAAmBA,EACnBE,SAAU,GAEd,EACAS,MAAO,SAAUC,EAAQC,GACvB,IAAIC,EACJ,GAAIF,EAAOG,WACT,OAAO,KAET,GAAkB,KAAdF,EAAIJ,MAAc,CACpB,GAAIG,EAAOI,MAAM,wBAEf,OADAH,EAAIJ,MAAQ,eACL,UAGT,GADAK,EAAMF,EAAOI,MAAM,wBAIjB,OAFAH,EAAIX,SAASL,KAAK,CAACC,KAAMgB,EAAI,GAAGR,gBAChCO,EAAIJ,MAAQ,eACL,MAGT,GADAK,EAAMF,EAAOI,MAAM,uFAGjB,OADAH,EAAIX,SAASL,KAAK,CAACC,KAAMgB,EAAI,GAAGR,gBACzB,MAGT,GADAQ,EAAMF,EAAOI,MAAM,+BAEjB,MAAO,SAEX,KAAO,CAEL,GAAIJ,EAAOI,MAAM,gBAGf,OAFAH,EAAIJ,MAAQ,GACZG,EAAOK,OAAO,GACP,UAET,GAAIL,EAAOI,MAAM,eAEf,OADAH,EAAIJ,MAAQ,GACL,UAET,GAAIG,EAAOI,MAAM,4BACf,MAAO,SAEX,CAIA,OADAF,EAAMF,EAAOI,MAAM,uBAE4BE,IAAzCjB,EAAeY,EAAIX,SAAUY,EAAI,IAC5B,WAIM,OAAXA,EAAI,IACNF,EAAOO,YACA,gBAIwCD,IAA7CjB,EAAeY,EAAId,aAAce,EAAI,IAChC,eAE6CI,IAAlDjB,EAAeY,EAAIb,kBAAmBc,EAAI,IACrC,UAGM,MAAXA,EAAI,IACNF,EAAOQ,SAAS,SAAUC,GAAK,MAAa,MAANA,CAAW,GACjDT,EAAOU,IAAI,KACJ,WAIM,OAAXR,EAAI,IACNF,EAAOQ,SAAS,SAAUC,GAAK,MAAa,MAANA,CAAW,GACjDT,EAAOU,IAAI,KACJ,UAEM,OAAXR,EAAI,IAA0B,OAAXA,EAAI,IAA0B,OAAXA,EAAI,IAC5CF,EAAOQ,SAAS,SAAUC,GAAK,MAAa,MAANA,CAAW,GACjDT,EAAOU,IAAI,KACJ,UAILR,EAAI,GAAK,YACJ,SAMF,YA7CT,CA+CF","x_google_ignoreList":[0]}