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"]}