| Current Path : /proc/1908984/root/proc/thread-self/root/proc/self/root/proc/1908984/root/proc/1155695/cwd/ |
| Current File : //proc/1908984/root/proc/thread-self/root/proc/self/root/proc/1908984/root/proc/1155695/cwd/oz.tar |
oz.js 0000644 00000015005 15235150046 0005534 0 ustar 00 // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://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("oz", function (conf) {
function wordRegexp(words) {
return new RegExp("^((" + words.join(")|(") + "))\\b");
}
var singleOperators = /[\^@!\|<>#~\.\*\-\+\\/,=]/;
var doubleOperators = /(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/;
var tripleOperators = /(:::)|(\.\.\.)|(=<:)|(>=:)/;
var middle = ["in", "then", "else", "of", "elseof", "elsecase", "elseif", "catch",
"finally", "with", "require", "prepare", "import", "export", "define", "do"];
var end = ["end"];
var atoms = wordRegexp(["true", "false", "nil", "unit"]);
var commonKeywords = wordRegexp(["andthen", "at", "attr", "declare", "feat", "from", "lex",
"mod", "div", "mode", "orelse", "parser", "prod", "prop", "scanner", "self", "syn", "token"]);
var openingKeywords = wordRegexp(["local", "proc", "fun", "case", "class", "if", "cond", "or", "dis",
"choice", "not", "thread", "try", "raise", "lock", "for", "suchthat", "meth", "functor"]);
var middleKeywords = wordRegexp(middle);
var endKeywords = wordRegexp(end);
// Tokenizers
function tokenBase(stream, state) {
if (stream.eatSpace()) {
return null;
}
// Brackets
if(stream.match(/[{}]/)) {
return "bracket";
}
// Special [] keyword
if (stream.match('[]')) {
return "keyword"
}
// Operators
if (stream.match(tripleOperators) || stream.match(doubleOperators)) {
return "operator";
}
// Atoms
if(stream.match(atoms)) {
return 'atom';
}
// Opening keywords
var matched = stream.match(openingKeywords);
if (matched) {
if (!state.doInCurrentLine)
state.currentIndent++;
else
state.doInCurrentLine = false;
// Special matching for signatures
if(matched[0] == "proc" || matched[0] == "fun")
state.tokenize = tokenFunProc;
else if(matched[0] == "class")
state.tokenize = tokenClass;
else if(matched[0] == "meth")
state.tokenize = tokenMeth;
return 'keyword';
}
// Middle and other keywords
if (stream.match(middleKeywords) || stream.match(commonKeywords)) {
return "keyword"
}
// End keywords
if (stream.match(endKeywords)) {
state.currentIndent--;
return 'keyword';
}
// Eat the next char for next comparisons
var ch = stream.next();
// Strings
if (ch == '"' || ch == "'") {
state.tokenize = tokenString(ch);
return state.tokenize(stream, state);
}
// Numbers
if (/[~\d]/.test(ch)) {
if (ch == "~") {
if(! /^[0-9]/.test(stream.peek()))
return null;
else if (( stream.next() == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/))
return "number";
}
if ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/))
return "number";
return null;
}
// Comments
if (ch == "%") {
stream.skipToEnd();
return 'comment';
}
else if (ch == "/") {
if (stream.eat("*")) {
state.tokenize = tokenComment;
return tokenComment(stream, state);
}
}
// Single operators
if(singleOperators.test(ch)) {
return "operator";
}
// If nothing match, we skip the entire alphanumeric block
stream.eatWhile(/\w/);
return "variable";
}
function tokenClass(stream, state) {
if (stream.eatSpace()) {
return null;
}
stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/);
state.tokenize = tokenBase;
return "variable-3"
}
function tokenMeth(stream, state) {
if (stream.eatSpace()) {
return null;
}
stream.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/);
state.tokenize = tokenBase;
return "def"
}
function tokenFunProc(stream, state) {
if (stream.eatSpace()) {
return null;
}
if(!state.hasPassedFirstStage && stream.eat("{")) {
state.hasPassedFirstStage = true;
return "bracket";
}
else if(state.hasPassedFirstStage) {
stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/);
state.hasPassedFirstStage = false;
state.tokenize = tokenBase;
return "def"
}
else {
state.tokenize = tokenBase;
return null;
}
}
function tokenComment(stream, state) {
var maybeEnd = false, ch;
while (ch = stream.next()) {
if (ch == "/" && maybeEnd) {
state.tokenize = tokenBase;
break;
}
maybeEnd = (ch == "*");
}
return "comment";
}
function tokenString(quote) {
return function (stream, state) {
var escaped = false, next, end = false;
while ((next = stream.next()) != null) {
if (next == quote && !escaped) {
end = true;
break;
}
escaped = !escaped && next == "\\";
}
if (end || !escaped)
state.tokenize = tokenBase;
return "string";
};
}
function buildElectricInputRegEx() {
// Reindentation should occur on [] or on a match of any of
// the block closing keywords, at the end of a line.
var allClosings = middle.concat(end);
return new RegExp("[\\[\\]]|(" + allClosings.join("|") + ")$");
}
return {
startState: function () {
return {
tokenize: tokenBase,
currentIndent: 0,
doInCurrentLine: false,
hasPassedFirstStage: false
};
},
token: function (stream, state) {
if (stream.sol())
state.doInCurrentLine = 0;
return state.tokenize(stream, state);
},
indent: function (state, textAfter) {
var trueText = textAfter.replace(/^\s+|\s+$/g, '');
if (trueText.match(endKeywords) || trueText.match(middleKeywords) || trueText.match(/(\[])/))
return conf.indentUnit * (state.currentIndent - 1);
if (state.currentIndent < 0)
return 0;
return state.currentIndent * conf.indentUnit;
},
fold: "indent",
electricInput: buildElectricInputRegEx(),
lineComment: "%",
blockCommentStart: "/*",
blockCommentEnd: "*/"
};
});
CodeMirror.defineMIME("text/x-oz", "oz");
});
oz.min.js 0000644 00000006133 15235150046 0006320 0 ustar 00 !(function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)})((function(a){"use strict";a.defineMode("oz",(function(a){function b(a){return new RegExp("^(("+a.join(")|(")+"))\\b")}function c(a,b){if(a.eatSpace())return null;if(a.match(/[{}]/))return"bracket";if(a.match("[]"))return"keyword";if(a.match(k)||a.match(j))return"operator";if(a.match(n))return"atom";var c=a.match(p);if(c)return b.doInCurrentLine?b.doInCurrentLine=!1:b.currentIndent++,"proc"==c[0]||"fun"==c[0]?b.tokenize=f:"class"==c[0]?b.tokenize=d:"meth"==c[0]&&(b.tokenize=e),"keyword";if(a.match(q)||a.match(o))return"keyword";if(a.match(r))return b.currentIndent--,"keyword";var l=a.next();if('"'==l||"'"==l)return b.tokenize=h(l),b.tokenize(a,b);if(/[~\d]/.test(l)){if("~"==l){if(!/^[0-9]/.test(a.peek()))return null;if("0"==a.next()&&a.match(/^[xX][0-9a-fA-F]+/)||a.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/))return"number"}return"0"==l&&a.match(/^[xX][0-9a-fA-F]+/)||a.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)?"number":null}return"%"==l?(a.skipToEnd(),"comment"):"/"==l&&a.eat("*")?(b.tokenize=g,g(a,b)):i.test(l)?"operator":(a.eatWhile(/\w/),"variable")}function d(a,b){return a.eatSpace()?null:(a.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/),b.tokenize=c,"variable-3")}function e(a,b){return a.eatSpace()?null:(a.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/),b.tokenize=c,"def")}function f(a,b){return a.eatSpace()?null:!b.hasPassedFirstStage&&a.eat("{")?(b.hasPassedFirstStage=!0,"bracket"):b.hasPassedFirstStage?(a.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/),b.hasPassedFirstStage=!1,b.tokenize=c,"def"):(b.tokenize=c,null)}function g(a,b){for(var d,e=!1;d=a.next();){if("/"==d&&e){b.tokenize=c;break}e="*"==d}return"comment"}function h(a){return function(b,d){for(var e,f=!1,g=!1;null!=(e=b.next());){if(e==a&&!f){g=!0;break}f=!f&&"\\"==e}return!g&&f||(d.tokenize=c),"string"}}var i=/[\^@!\|<>#~\.\*\-\+\\\/,=]/,j=/(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/,k=/(:::)|(\.\.\.)|(=<:)|(>=:)/,l=["in","then","else","of","elseof","elsecase","elseif","catch","finally","with","require","prepare","import","export","define","do"],m=["end"],n=b(["true","false","nil","unit"]),o=b(["andthen","at","attr","declare","feat","from","lex","mod","div","mode","orelse","parser","prod","prop","scanner","self","syn","token"]),p=b(["local","proc","fun","case","class","if","cond","or","dis","choice","not","thread","try","raise","lock","for","suchthat","meth","functor"]),q=b(l),r=b(m);return{startState:function(){return{tokenize:c,currentIndent:0,doInCurrentLine:!1,hasPassedFirstStage:!1}},token:function(a,b){return a.sol()&&(b.doInCurrentLine=0),b.tokenize(a,b)},indent:function(b,c){var d=c.replace(/^\s+|\s+$/g,"");return d.match(r)||d.match(q)||d.match(/(\[])/)?a.indentUnit*(b.currentIndent-1):b.currentIndent<0?0:b.currentIndent*a.indentUnit},fold:"indent",electricInput:(function(){var a=l.concat(m);return new RegExp("[\\[\\]]|("+a.join("|")+")$")})(),lineComment:"%",blockCommentStart:"/*",blockCommentEnd:"*/"}})),a.defineMIME("text/x-oz","oz")}));