##// END OF EJS Templates
pull-requests: increase stability of concurrent pull requests creation by flushing prematurly the statuses of commits....
pull-requests: increase stability of concurrent pull requests creation by flushing prematurly the statuses of commits. This is required to increase the versions on each concurrent call. Otherwise we could get into an integrity errors of commitsha+version+repo

File last commit:

r1:854a839a default
r3408:2a133f7e stable
Show More
eiffel.js
160 lines | 3.7 KiB | application/javascript | JavascriptLexer
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.defineMode("eiffel", function() {
function wordObj(words) {
var o = {};
for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;
return o;
}
var keywords = wordObj([
'note',
'across',
'when',
'variant',
'until',
'unique',
'undefine',
'then',
'strip',
'select',
'retry',
'rescue',
'require',
'rename',
'reference',
'redefine',
'prefix',
'once',
'old',
'obsolete',
'loop',
'local',
'like',
'is',
'inspect',
'infix',
'include',
'if',
'frozen',
'from',
'external',
'export',
'ensure',
'end',
'elseif',
'else',
'do',
'creation',
'create',
'check',
'alias',
'agent',
'separate',
'invariant',
'inherit',
'indexing',
'feature',
'expanded',
'deferred',
'class',
'Void',
'True',
'Result',
'Precursor',
'False',
'Current',
'create',
'attached',
'detachable',
'as',
'and',
'implies',
'not',
'or'
]);
var operators = wordObj([":=", "and then","and", "or","<<",">>"]);
function chain(newtok, stream, state) {
state.tokenize.push(newtok);
return newtok(stream, state);
}
function tokenBase(stream, state) {
if (stream.eatSpace()) return null;
var ch = stream.next();
if (ch == '"'||ch == "'") {
return chain(readQuoted(ch, "string"), stream, state);
} else if (ch == "-"&&stream.eat("-")) {
stream.skipToEnd();
return "comment";
} else if (ch == ":"&&stream.eat("=")) {
return "operator";
} else if (/[0-9]/.test(ch)) {
stream.eatWhile(/[xXbBCc0-9\.]/);
stream.eat(/[\?\!]/);
return "ident";
} else if (/[a-zA-Z_0-9]/.test(ch)) {
stream.eatWhile(/[a-zA-Z_0-9]/);
stream.eat(/[\?\!]/);
return "ident";
} else if (/[=+\-\/*^%<>~]/.test(ch)) {
stream.eatWhile(/[=+\-\/*^%<>~]/);
return "operator";
} else {
return null;
}
}
function readQuoted(quote, style, unescaped) {
return function(stream, state) {
var escaped = false, ch;
while ((ch = stream.next()) != null) {
if (ch == quote && (unescaped || !escaped)) {
state.tokenize.pop();
break;
}
escaped = !escaped && ch == "%";
}
return style;
};
}
return {
startState: function() {
return {tokenize: [tokenBase]};
},
token: function(stream, state) {
var style = state.tokenize[state.tokenize.length-1](stream, state);
if (style == "ident") {
var word = stream.current();
style = keywords.propertyIsEnumerable(stream.current()) ? "keyword"
: operators.propertyIsEnumerable(stream.current()) ? "operator"
: /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag"
: /^0[bB][0-1]+$/g.test(word) ? "number"
: /^0[cC][0-7]+$/g.test(word) ? "number"
: /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number"
: /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number"
: /^[0-9]+$/g.test(word) ? "number"
: "variable";
}
return style;
},
lineComment: "--"
};
});
CodeMirror.defineMIME("text/x-eiffel", "eiffel");
});