1{"version":3,"sources":["../../node_modules/codemirror/mode/forth/forth.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","toWordList","words","ret","split","forEach","e","push","name","coreWordList","immediateWordList","defineMode","searchWordList","wordList","word","i","length","toUpperCase","undefined","startState","state","base","token","stream","stt","mat","eatSpace","match","backUp","skipToEnd","eatWhile","s","eat","defineMIME"],"mappings":"CAKA,SAAUA,GACR,SAAWC,UAAW,gBAAmBC,SAAU,SACjDF,EAAIG,QAAQ,6BACT,UAAWC,SAAU,YAAcA,OAAOC,IAC7CD,QAAQ,wBAAyBJ,OAEjCA,GAAIM,cACL,SAASA,GACV,YAEA,SAASC,GAAWC,GAClB,GAAIC,KACJD,GAAME,MAAM,KAAKC,QAAQ,SAASC,GAChCH,EAAII,MAAMC,KAAMF,KAElB,OAAOH,GAGT,GAAIM,GAAeR,EACrB,s6BAuCE,IAAIS,GAAoBT,EAAW,mIAEnCD,GAAWW,WAAW,QAAS,WAC7B,QAASC,GAAgBC,EAAUC,GACjC,GAAIC,EACJ,KAAKA,EAAIF,EAASG,OAAS,EAAGD,GAAK,EAAGA,IAAK,CACzC,GAAIF,EAASE,GAAGP,OAASM,EAAKG,cAAe,CAC3C,MAAOJ,GAASE,IAGpB,MAAOG,WAEX,OACEC,WAAY,WACV,OACEC,MAAO,GACPC,KAAM,GACNZ,aAAcA,EACdC,kBAAmBA,EACnBG,cAGJS,MAAO,SAAUC,EAAQC,GACvB,GAAIC,EACJ,IAAIF,EAAOG,WAAY,CACrB,MAAO,MAET,GAAIF,EAAIJ,QAAU,GAAI,CACpB,GAAIG,EAAOI,MAAM,wBAAyB,CACxCH,EAAIJ,MAAQ,cACZ,OAAO,sBAETK,EAAMF,EAAOI,MAAM,uBACnB,IAAIF,EAAK,CACPD,EAAIX,SAASN,MAAMC,KAAMiB,EAAI,GAAGR,eAChCO,GAAIJ,MAAQ,cACZ,OAAO,MAAQI,EAAIJ,MAErBK,EAAMF,EAAOI,MAAM,sFACnB,IAAIF,EAAK,CACPD,EAAIX,SAASN,MAAMC,KAAMiB,EAAI,GAAGR,eAChC,OAAO,MAAQO,EAAIJ,MAErBK,EAAMF,EAAOI,MAAM,8BACnB,IAAIF,EAAK,CACP,MAAO,UAAYD,EAAIJ,WAElB,CAEP,GAAIG,EAAOI,MAAM,gBAAiB,CAChCH,EAAIJ,MAAQ,EACZG,GAAOK,OAAO,EACd,OAAO,sBAET,GAAIL,EAAOI,MAAM,eAAgB,CAC/BH,EAAIJ,MAAQ,EACZ,OAAO,sBAET,GAAIG,EAAOI,MAAM,4BAA6B,CAC5C,MAAO,WAKXF,EAAMF,EAAOI,MAAM,gBACnB,IAAIF,EAAK,CACP,GAAIb,EAAeY,EAAIX,SAAUY,EAAI,MAAQP,UAAW,CACtD,MAAO,WAAaM,EAAIJ,MAI1B,GAAIK,EAAI,KAAO,KAAM,CACnBF,EAAOM,WACL,OAAO,UAAYL,EAAIJ,MAIzB,GAAIR,EAAeY,EAAIf,aAAcgB,EAAI,MAAQP,UAAW,CAC1D,MAAO,UAAYM,EAAIJ,MAEzB,GAAIR,EAAeY,EAAId,kBAAmBe,EAAI,MAAQP,UAAW,CAC/D,MAAO,UAAYM,EAAIJ,MAGzB,GAAIK,EAAI,KAAO,IAAK,CAClBF,EAAOO,SAAS,SAAUC,GAAK,MAAOA,KAAM,KAC5CR,GAAOS,IAAI,IACX,OAAO,UAAYR,EAAIJ,MAIzB,GAAIK,EAAI,KAAO,KAAM,CACnBF,EAAOO,SAAS,SAAUC,GAAK,MAAOA,KAAM,KAC5CR,GAAOS,IAAI,IACX,OAAO,SAAWR,EAAIJ,MAExB,GAAIK,EAAI,KAAO,MAAQA,EAAI,KAAO,MAAQA,EAAI,KAAO,KAAM,CACzDF,EAAOO,SAAS,SAAUC,GAAK,MAAOA,KAAM,KAC5CR,GAAOS,IAAI,IACX,OAAO,SAAWR,EAAIJ,MAIxB,GAAIK,EAAI,GAAK,YAAa,CACxB,MAAO,SAAWD,EAAIJ,MAMxB,MAAO,OAASI,EAAIJ,UAK5BpB,GAAWiC,WAAW,eAAgB","file":"forth.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Author: Aliaksei Chapyzhenka\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  function toWordList(words) {\n    var ret = [];\n    words.split(' ').forEach(function(e){\n      ret.push({name: e});\n    });\n    return ret;\n  }\n\n  var 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\n  var 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\n  CodeMirror.defineMode('forth', function() {\n    function 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    }\n  return {\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 compilation';\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' + stt.state;\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' + stt.state;\n        }\n        mat = stream.match(/^(\\'|\\[\\'\\])\\s+(\\S+)(\\s|$)+/);\n        if (mat) {\n          return 'builtin' + stt.state;\n        }\n        } else { // compilation\n        // ; [\n        if (stream.match(/^(\\;|\\[)(\\s)/)) {\n          stt.state = '';\n          stream.backUp(1);\n          return 'builtin compilation';\n        }\n        if (stream.match(/^(\\;|\\[)($)/)) {\n          stt.state = '';\n          return 'builtin compilation';\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' + stt.state;\n        }\n\n        // comments\n        if (mat[1] === '\\\\') {\n          stream.skipToEnd();\n            return 'comment' + stt.state;\n          }\n\n          // core words\n          if (searchWordList(stt.coreWordList, mat[1]) !== undefined) {\n            return 'builtin' + stt.state;\n          }\n          if (searchWordList(stt.immediateWordList, mat[1]) !== undefined) {\n            return 'keyword' + stt.state;\n          }\n\n          if (mat[1] === '(') {\n            stream.eatWhile(function (s) { return s !== ')'; });\n            stream.eat(')');\n            return 'comment' + stt.state;\n          }\n\n          // // strings\n          if (mat[1] === '.(') {\n            stream.eatWhile(function (s) { return s !== ')'; });\n            stream.eat(')');\n            return 'string' + stt.state;\n          }\n          if (mat[1] === 'S\"' || mat[1] === '.\"' || mat[1] === 'C\"') {\n            stream.eatWhile(function (s) { return s !== '\"'; });\n            stream.eat('\"');\n            return 'string' + stt.state;\n          }\n\n          // numbers\n          if (mat[1] - 0xfffffffff) {\n            return 'number' + stt.state;\n          }\n          // if (mat[1].match(/^[-+]?[0-9]+\\.[0-9]*/)) {\n          //     return 'number' + stt.state;\n          // }\n\n          return 'atom' + stt.state;\n        }\n      }\n    };\n  });\n  CodeMirror.defineMIME(\"text/x-forth\", \"forth\");\n});\n"]}