!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.defineMode("ebnf",function(t){var a=null;return t.bracesMode&&(a=e.getMode(t,t.bracesMode)),{startState:function(){return{stringType:null,commentType:null,braced:0,lhs:!0,localState:null,stack:[],inDefinition:!1}},token:function(t,r){if(t){switch(0===r.stack.length&&('"'==t.peek()||"'"==t.peek()?(r.stringType=t.peek(),t.next(),r.stack.unshift(1)):t.match("/*")?(r.stack.unshift(0),r.commentType=0):t.match("(*")&&(r.stack.unshift(0),r.commentType=1)),r.stack[0]){case 1:for(;1===r.stack[0]&&!t.eol();)t.peek()===r.stringType?(t.next(),r.stack.shift()):"\\"===t.peek()?(t.next(),t.next()):t.match(/^.[^\\\"\']*/);return r.lhs?"property string":"string";case 0:for(;0===r.stack[0]&&!t.eol();)0===r.commentType&&t.match("*/")?(r.stack.shift(),r.commentType=null):1===r.commentType&&t.match("*)")?(r.stack.shift(),r.commentType=null):t.match(/^.[^\*]*/);return"comment";case 2:for(;2===r.stack[0]&&!t.eol();)t.match(/^[^\]\\]+/)||t.match(".")||r.stack.shift();return"operator"}var c=t.peek();if(null!==a&&(r.braced||"{"===c)){null===r.localState&&(r.localState=e.startState(a));var n=a.token(t,r.localState),i=t.current();if(!n)for(var o=0;o<i.length;o++)"{"===i[o]?(0===r.braced&&(n="matchingbracket"),r.braced++):"}"===i[o]&&(r.braced--,0===r.braced&&(n="matchingbracket"));return n}switch(c){case"[":return t.next(),r.stack.unshift(2),"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"matchingbracket";break;case"/":if(t.match(/[\/][A-Za-z]+/))return"keyword";case"\\":if(t.match(/[\][a-z]+/))return"string-2";case".":if(t.match("."))return"atom";case"*":case"-":case"+":case"^":if(t.match(c))return"atom";case"$":if(t.match("$$"))return"builtin";if(t.match(/[$][0-9]+/))return"variable-3";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":"variable-2":-1!=["[","]","(",")"].indexOf(t.peek())?(t.next(),"bracket"):(t.eatSpace()||t.next(),null)}}}}),e.defineMIME("text/x-ebnf","ebnf")});