You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
1.9 KiB
1 lines
1.9 KiB
var r={slash:0,parenthesis:1},e={comment:0,_string:1,characterClass:2};const s={name:"ebnf",startState:function(){return{stringType:null,commentType:null,braced:0,lhs:!0,localState:null,stack:[],inDefinition:!1}},token:function(t,a){if(t){switch(a.stack.length===0&&(t.peek()=='"'||t.peek()=="'"?(a.stringType=t.peek(),t.next(),a.stack.unshift(e._string)):t.match("/*")?(a.stack.unshift(e.comment),a.commentType=r.slash):t.match("(*")&&(a.stack.unshift(e.comment),a.commentType=r.parenthesis)),a.stack[0]){case e._string:for(;a.stack[0]===e._string&&!t.eol();)t.peek()===a.stringType?(t.next(),a.stack.shift()):t.peek()==="\\"?(t.next(),t.next()):t.match(/^.[^\\\"\']*/);return a.lhs?"property":"string";case e.comment:for(;a.stack[0]===e.comment&&!t.eol();)a.commentType===r.slash&&t.match("*/")||a.commentType===r.parenthesis&&t.match("*)")?(a.stack.shift(),a.commentType=null):t.match(/^.[^\*]*/);return"comment";case e.characterClass:for(;a.stack[0]===e.characterClass&&!t.eol();)t.match(/^[^\]\\]+/)||t.match(".")||a.stack.shift();return"operator"}var n=t.peek();switch(n){case"[":return t.next(),a.stack.unshift(e.characterClass),"bracket";case":":case"|":case";":return t.next(),"operator";case"%":if(t.match("%%"))return"header";if(t.match(/[%][A-Za-z]+/))return"keyword";if(t.match(/[%][}]/))return"bracket";break;case"/":if(t.match(/[\/][A-Za-z]+/))return"keyword";case"\\":if(t.match(/[\][a-z]+/))return"string.special";case".":if(t.match("."))return"atom";case"*":case"-":case"+":case"^":if(t.match(n))return"atom";case"$":if(t.match("$$"))return"builtin";if(t.match(/[$][0-9]+/))return"variableName.special";case"<":if(t.match(/<<[a-zA-Z_]+>>/))return"builtin"}return t.match("//")?(t.skipToEnd(),"comment"):t.match("return")?"operator":t.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)?t.match(/(?=[\(.])/)?"variable":t.match(/(?=[\s\n]*[:=])/)?"def":"variableName.special":["[","]","(",")"].indexOf(t.peek())!=-1?(t.next(),"bracket"):(t.eatSpace()||t.next(),null)}}};export{s as ebnf};
|