ebnf.min.js (2865B)
1 (function(e){if(typeof exports=='object'&&typeof module=='object')e(require('../../lib/codemirror'));else if(typeof define=='function'&&define.amd)define(['../../lib/codemirror'],e);else e(CodeMirror)})(function(e){'use strict';e.defineMode('ebnf',function(a){var c={slash:0,parenthesis:1};var t={comment:0,_string:1,characterClass:2};var r=null;if(a.bracesMode)r=e.getMode(a,a.bracesMode);return{startState:function(){return{stringType:null,commentType:null,braced:0,lhs:!0,localState:null,stack:[],inDefinition:!1}},token:function(a,n){if(!a)return;if(n.stack.length===0){if((a.peek()=='"')||(a.peek()=='\'')){n.stringType=a.peek();a.next();n.stack.unshift(t._string)} 2 else if(a.match(/^\/\*/)){n.stack.unshift(t.comment);n.commentType=c.slash} 3 else if(a.match(/^\(\*/)){n.stack.unshift(t.comment);n.commentType=c.parenthesis}};switch(n.stack[0]){case t._string:while(n.stack[0]===t._string&&!a.eol()){if(a.peek()===n.stringType){a.next();n.stack.shift()} 4 else if(a.peek()==='\\'){a.next();a.next()} 5 else{a.match(/^.[^\\"']*/)}};return n.lhs?'property string':'string';case t.comment:while(n.stack[0]===t.comment&&!a.eol()){if(n.commentType===c.slash&&a.match(/\*\//)){n.stack.shift();n.commentType=null} 6 else if(n.commentType===c.parenthesis&&a.match(/\*\)/)){n.stack.shift();n.commentType=null} 7 else{a.match(/^.[^\*]*/)}};return'comment';case t.characterClass:while(n.stack[0]===t.characterClass&&!a.eol()){if(!(a.match(/^[^\]\\]+/)||a.match(/^\\./))){n.stack.shift()}};return'operator'};var f=a.peek();if(r!==null&&(n.braced||f==='{')){if(n.localState===null)n.localState=e.startState(r);var i=r.token(a,n.localState),l=a.current();if(!i){for(var s=0;s<l.length;s++){if(l[s]==='{'){if(n.braced===0){i='matchingbracket'};n.braced++} 8 else if(l[s]==='}'){n.braced--;if(n.braced===0){i='matchingbracket'}}}};return i};switch(f){case'[':a.next();n.stack.unshift(t.characterClass);return'bracket';case':':case'|':case';':a.next();return'operator';case'%':if(a.match('%%')){return'header'} 9 else if(a.match(/[%][A-Za-z]+/)){return'keyword'} 10 else if(a.match(/[%][}]/)){return'matchingbracket'};break;case'/':if(a.match(/[\/][A-Za-z]+/)){return'keyword'};case'\\':if(a.match(/[\][a-z]+/)){return'string-2'};case'.':if(a.match('.')){return'atom'};case'*':case'-':case'+':case'^':if(a.match(f)){return'atom'};case'$':if(a.match('$$')){return'builtin'} 11 else if(a.match(/[$][0-9]+/)){return'variable-3'};case'<':if(a.match(/<<[a-zA-Z_]+>>/)){return'builtin'}};if(a.match(/^\/\//)){a.skipToEnd();return'comment'} 12 else if(a.match(/return/)){return'operator'} 13 else if(a.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)){if(a.match(/(?=[\(.])/)){return'variable'} 14 else if(a.match(/(?=[\s\n]*[:=])/)){return'def'};return'variable-2'} 15 else if(['[',']','(',')'].indexOf(a.peek())!=-1){a.next();return'bracket'} 16 else if(!a.eatSpace()){a.next()};return null}}});e.defineMIME('text/x-ebnf','ebnf')});