var commentType={slash:0,parenthesis:1},stateType={comment:0,_string:1,characterClass:2};const ebnf={startState:function(){return {stringType:null,commentType:null,braced:0,lhs:!0,localState:null,stack:[],inDefinition:!1}},token:function(e,t){if(e){switch(0===t.stack.length&&('"'==e.peek()||"'"==e.peek()?(t.stringType=e.peek(),e.next(),t.stack.unshift(stateType._string)):e.match("/*")?(t.stack.unshift(stateType.comment),t.commentType=commentType.slash):e.match("(*")&&(t.stack.unshift(stateType.comment),t.commentType=commentType.parenthesis)),t.stack[0]){case stateType._string:for(;t.stack[0]===stateType._string&&!e.eol();)e.peek()===t.stringType?(e.next(),t.stack.shift()):"\\"===e.peek()?(e.next(),e.next()):e.match(/^.[^\\\"\']*/);return t.lhs?"property":"string";case stateType.comment:for(;t.stack[0]===stateType.comment&&!e.eol();)t.commentType===commentType.slash&&e.match("*/")||t.commentType===commentType.parenthesis&&e.match("*)")?(t.stack.shift(),t.commentType=null):e.match(/^.[^\*]*/);return "comment";case stateType.characterClass:for(;t.stack[0]===stateType.characterClass&&!e.eol();)e.match(/^[^\]\\]+/)||e.match(".")||t.stack.shift();return "operator"}var a=e.peek();switch(a){case"[":return e.next(),t.stack.unshift(stateType.characterClass),"bracket";case":":case"|":case";":return e.next(),"operator";case"%":if(e.match("%%"))return "header";if(e.match(/[%][A-Za-z]+/))return "keyword";if(e.match(/[%][}]/))return "bracket";break;case"/":if(e.match(/[\/][A-Za-z]+/))return "keyword";case"\\":if(e.match(/[\][a-z]+/))return "string.special";case".":if(e.match("."))return "atom";case"*":case"-":case"+":case"^":if(e.match(a))return "atom";case"$":if(e.match("$$"))return "builtin";if(e.match(/[$][0-9]+/))return "variableName.special";case"<":if(e.match(/<<[a-zA-Z_]+>>/))return "builtin"}return e.match("//")?(e.skipToEnd(),"comment"):e.match("return")?"operator":e.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)?e.match(/(?=[\(.])/)?"variable":e.match(/(?=[\s\n]*[:=])/)?"def":"variableName.special":-1!=["[","]","(",")"].indexOf(e.peek())?(e.next(),"bracket"):(e.eatSpace()||e.next(),null)}}};

export { ebnf };
