Path: blob/master/web-gui/buildyourownbotnet/assets/js/codemirror/mode/eiffel/eiffel.js
1294 views
CodeMirror.defineMode("eiffel", function() {1function wordObj(words) {2var o = {};3for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;4return o;5}6var keywords = wordObj([7'note',8'across',9'when',10'variant',11'until',12'unique',13'undefine',14'then',15'strip',16'select',17'retry',18'rescue',19'require',20'rename',21'reference',22'redefine',23'prefix',24'once',25'old',26'obsolete',27'loop',28'local',29'like',30'is',31'inspect',32'infix',33'include',34'if',35'frozen',36'from',37'external',38'export',39'ensure',40'end',41'elseif',42'else',43'do',44'creation',45'create',46'check',47'alias',48'agent',49'separate',50'invariant',51'inherit',52'indexing',53'feature',54'expanded',55'deferred',56'class',57'Void',58'True',59'Result',60'Precursor',61'False',62'Current',63'create',64'attached',65'detachable',66'as',67'and',68'implies',69'not',70'or'71]);72var operators = wordObj([":=", "and then","and", "or","<<",">>"]);73var curPunc;7475function chain(newtok, stream, state) {76state.tokenize.push(newtok);77return newtok(stream, state);78}7980function tokenBase(stream, state) {81curPunc = null;82if (stream.eatSpace()) return null;83var ch = stream.next();84if (ch == '"'||ch == "'") {85return chain(readQuoted(ch, "string"), stream, state);86} else if (ch == "-"&&stream.eat("-")) {87stream.skipToEnd();88return "comment";89} else if (ch == ":"&&stream.eat("=")) {90return "operator";91} else if (/[0-9]/.test(ch)) {92stream.eatWhile(/[xXbBCc0-9\.]/);93stream.eat(/[\?\!]/);94return "ident";95} else if (/[a-zA-Z_0-9]/.test(ch)) {96stream.eatWhile(/[a-zA-Z_0-9]/);97stream.eat(/[\?\!]/);98return "ident";99} else if (/[=+\-\/*^%<>~]/.test(ch)) {100stream.eatWhile(/[=+\-\/*^%<>~]/);101return "operator";102} else {103return null;104}105}106107function readQuoted(quote, style, unescaped) {108return function(stream, state) {109var escaped = false, ch;110while ((ch = stream.next()) != null) {111if (ch == quote && (unescaped || !escaped)) {112state.tokenize.pop();113break;114}115escaped = !escaped && ch == "%";116}117return style;118};119}120121return {122startState: function() {123return {tokenize: [tokenBase]};124},125126token: function(stream, state) {127var style = state.tokenize[state.tokenize.length-1](stream, state);128if (style == "ident") {129var word = stream.current();130style = keywords.propertyIsEnumerable(stream.current()) ? "keyword"131: operators.propertyIsEnumerable(stream.current()) ? "operator"132: /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag"133: /^0[bB][0-1]+$/g.test(word) ? "number"134: /^0[cC][0-7]+$/g.test(word) ? "number"135: /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number"136: /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number"137: /^[0-9]+$/g.test(word) ? "number"138: "variable";139}140return style;141},142lineComment: "--"143};144});145146CodeMirror.defineMIME("text/x-eiffel", "eiffel");147148149