function wordRegexp(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var singleOperators=/[\^@!\|<>#~\.\*\-\+\\/,=]/,doubleOperators=/(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/,tripleOperators=/(:::)|(\.\.\.)|(=<:)|(>=:)/,middle=["in","then","else","of","elseof","elsecase","elseif","catch","finally","with","require","prepare","import","export","define","do"],end=["end"],atoms=wordRegexp(["true","false","nil","unit"]),commonKeywords=wordRegexp(["andthen","at","attr","declare","feat","from","lex","mod","div","mode","orelse","parser","prod","prop","scanner","self","syn","token"]),openingKeywords=wordRegexp(["local","proc","fun","case","class","if","cond","or","dis","choice","not","thread","try","raise","lock","for","suchthat","meth","functor"]),middleKeywords=wordRegexp(middle),endKeywords=wordRegexp(end);function tokenBase(e,t){if(e.eatSpace())return null;if(e.match(/[{}]/))return "bracket";if(e.match("[]"))return "keyword";if(e.match(tripleOperators)||e.match(doubleOperators))return "operator";if(e.match(atoms))return "atom";var n=e.match(openingKeywords);if(n)return t.doInCurrentLine?t.doInCurrentLine=!1:t.currentIndent++,"proc"==n[0]||"fun"==n[0]?t.tokenize=tokenFunProc:"class"==n[0]?t.tokenize=tokenClass:"meth"==n[0]&&(t.tokenize=tokenMeth),"keyword";if(e.match(middleKeywords)||e.match(commonKeywords))return "keyword";if(e.match(endKeywords))return t.currentIndent--,"keyword";var r=e.next();if('"'==r||"'"==r)return t.tokenize=tokenString(r),t.tokenize(e,t);if(/[~\d]/.test(r)){if("~"==r){if(!/^[0-9]/.test(e.peek()))return null;if("0"==e.next()&&e.match(/^[xX][0-9a-fA-F]+/)||e.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/))return "number"}return "0"==r&&e.match(/^[xX][0-9a-fA-F]+/)||e.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)?"number":null}return "%"==r?(e.skipToEnd(),"comment"):"/"==r&&e.eat("*")?(t.tokenize=tokenComment,tokenComment(e,t)):singleOperators.test(r)?"operator":(e.eatWhile(/\w/),"variable")}function tokenClass(e,t){return e.eatSpace()?null:(e.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/),t.tokenize=tokenBase,"type")}function tokenMeth(e,t){return e.eatSpace()?null:(e.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/),t.tokenize=tokenBase,"def")}function tokenFunProc(e,t){return e.eatSpace()?null:!t.hasPassedFirstStage&&e.eat("{")?(t.hasPassedFirstStage=!0,"bracket"):t.hasPassedFirstStage?(e.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/),t.hasPassedFirstStage=!1,t.tokenize=tokenBase,"def"):(t.tokenize=tokenBase,null)}function tokenComment(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=tokenBase;break}r="*"==n;}return "comment"}function tokenString(e){return function(t,n){for(var r,o=!1,a=!1;null!=(r=t.next());){if(r==e&&!o){a=!0;break}o=!o&&"\\"==r;}return !a&&o||(n.tokenize=tokenBase),"string"}}function buildElectricInputRegEx(){var e=middle.concat(end);return new RegExp("[\\[\\]]|("+e.join("|")+")$")}const oz={startState:function(){return {tokenize:tokenBase,currentIndent:0,doInCurrentLine:!1,hasPassedFirstStage:!1}},token:function(e,t){return e.sol()&&(t.doInCurrentLine=0),t.tokenize(e,t)},indent:function(e,t,n){var r=t.replace(/^\s+|\s+$/g,"");return r.match(endKeywords)||r.match(middleKeywords)||r.match(/(\[])/)?n.unit*(e.currentIndent-1):e.currentIndent<0?0:e.currentIndent*n.unit},languageData:{indentOnInut:buildElectricInputRegEx(),commentTokens:{line:"%",block:{open:"/*",close:"*/"}}}};

export { oz };
