
Previously, we were at an ACE editor published between 1.1.8 and 1.1.9. This caused multiple issues and was especially a problem for the upcoming pair programming feature. Further, updating ace is a long-time priority, see https://github.com/openHPI/codeocean/issues/250. Now, we are not yet updating to the latest version, but rather to the next minor version. This already contains breaking changes, and we are currently interested to keep the number of changes as low as possible. Further updating ACE might be still a future task. The new ACE version 1.2.0 is taken from this tag: https://github.com/ajaxorg/ace-builds/releases/tag/v1.2.0. We are using the src build (not minified, not in the noconflict version), since the same was used before as well. Further, we need to change our migration for storing editor events. Since the table is not yet used (in production), we also update the enum.
247 lines
9.2 KiB
JavaScript
247 lines
9.2 KiB
JavaScript
define("ace/mode/io_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
|
|
"use strict";
|
|
|
|
var oop = require("../lib/oop");
|
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
|
|
|
var IoHighlightRules = function() {
|
|
|
|
this.$rules = { start:
|
|
[ { token: [ 'text', 'meta.empty-parenthesis.io' ],
|
|
regex: '(\\()(\\))',
|
|
comment: 'we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob' },
|
|
{ token: [ 'text', 'meta.comma-parenthesis.io' ],
|
|
regex: '(\\,)(\\))',
|
|
comment: 'We want to do the same for ,) -- Seckar; same as above -- Rob' },
|
|
{ token: 'keyword.control.io',
|
|
regex: '\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\b' },
|
|
{ token: 'punctuation.definition.comment.io',
|
|
regex: '/\\*',
|
|
push:
|
|
[ { token: 'punctuation.definition.comment.io',
|
|
regex: '\\*/',
|
|
next: 'pop' },
|
|
{ defaultToken: 'comment.block.io' } ] },
|
|
{ token: 'punctuation.definition.comment.io',
|
|
regex: '//',
|
|
push:
|
|
[ { token: 'comment.line.double-slash.io',
|
|
regex: '$',
|
|
next: 'pop' },
|
|
{ defaultToken: 'comment.line.double-slash.io' } ] },
|
|
{ token: 'punctuation.definition.comment.io',
|
|
regex: '#',
|
|
push:
|
|
[ { token: 'comment.line.number-sign.io', regex: '$', next: 'pop' },
|
|
{ defaultToken: 'comment.line.number-sign.io' } ] },
|
|
{ token: 'variable.language.io',
|
|
regex: '\\b(?:self|sender|target|proto|protos|parent)\\b',
|
|
comment: 'I wonder if some of this isn\'t variable.other.language? --Allan; scoping this as variable.language to match Objective-C\'s handling of \'self\', which is inconsistent with C++\'s handling of \'this\' but perhaps intentionally so -- Rob' },
|
|
{ token: 'keyword.operator.io',
|
|
regex: '<=|>=|=|:=|\\*|\\||\\|\\||\\+|-|/|&|&&|>|<|\\?|@|@@|\\b(?:and|or)\\b' },
|
|
{ token: 'constant.other.io', regex: '\\bGL[\\w_]+\\b' },
|
|
{ token: 'support.class.io', regex: '\\b[A-Z](?:\\w+)?\\b' },
|
|
{ token: 'support.function.io',
|
|
regex: '\\b(?:clone|call|init|method|list|vector|block|\\w+(?=\\s*\\())\\b' },
|
|
{ token: 'support.function.open-gl.io',
|
|
regex: '\\bgl(?:u|ut)?[A-Z]\\w+\\b' },
|
|
{ token: 'punctuation.definition.string.begin.io',
|
|
regex: '"""',
|
|
push:
|
|
[ { token: 'punctuation.definition.string.end.io',
|
|
regex: '"""',
|
|
next: 'pop' },
|
|
{ token: 'constant.character.escape.io', regex: '\\\\.' },
|
|
{ defaultToken: 'string.quoted.triple.io' } ] },
|
|
{ token: 'punctuation.definition.string.begin.io',
|
|
regex: '"',
|
|
push:
|
|
[ { token: 'punctuation.definition.string.end.io',
|
|
regex: '"',
|
|
next: 'pop' },
|
|
{ token: 'constant.character.escape.io', regex: '\\\\.' },
|
|
{ defaultToken: 'string.quoted.double.io' } ] },
|
|
{ token: 'constant.numeric.io',
|
|
regex: '\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\b' },
|
|
{ token: 'variable.other.global.io', regex: 'Lobby\\b' },
|
|
{ token: 'constant.language.io',
|
|
regex: '\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\b' } ] }
|
|
|
|
this.normalizeRules();
|
|
};
|
|
|
|
IoHighlightRules.metaData = { fileTypes: [ 'io' ],
|
|
keyEquivalent: '^~I',
|
|
name: 'Io',
|
|
scopeName: 'source.io' }
|
|
|
|
|
|
oop.inherits(IoHighlightRules, TextHighlightRules);
|
|
|
|
exports.IoHighlightRules = IoHighlightRules;
|
|
});
|
|
|
|
define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) {
|
|
"use strict";
|
|
|
|
var oop = require("../../lib/oop");
|
|
var Range = require("../../range").Range;
|
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
|
|
|
var FoldMode = exports.FoldMode = function(commentRegex) {
|
|
if (commentRegex) {
|
|
this.foldingStartMarker = new RegExp(
|
|
this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
|
|
);
|
|
this.foldingStopMarker = new RegExp(
|
|
this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
|
|
);
|
|
}
|
|
};
|
|
oop.inherits(FoldMode, BaseFoldMode);
|
|
|
|
(function() {
|
|
|
|
this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
|
|
this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
|
|
this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
|
|
this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
|
|
this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
|
|
this._getFoldWidgetBase = this.getFoldWidget;
|
|
this.getFoldWidget = function(session, foldStyle, row) {
|
|
var line = session.getLine(row);
|
|
|
|
if (this.singleLineBlockCommentRe.test(line)) {
|
|
if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
|
|
return "";
|
|
}
|
|
|
|
var fw = this._getFoldWidgetBase(session, foldStyle, row);
|
|
|
|
if (!fw && this.startRegionRe.test(line))
|
|
return "start"; // lineCommentRegionStart
|
|
|
|
return fw;
|
|
};
|
|
|
|
this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
|
|
var line = session.getLine(row);
|
|
|
|
if (this.startRegionRe.test(line))
|
|
return this.getCommentRegionBlock(session, line, row);
|
|
|
|
var match = line.match(this.foldingStartMarker);
|
|
if (match) {
|
|
var i = match.index;
|
|
|
|
if (match[1])
|
|
return this.openingBracketBlock(session, match[1], row, i);
|
|
|
|
var range = session.getCommentFoldRange(row, i + match[0].length, 1);
|
|
|
|
if (range && !range.isMultiLine()) {
|
|
if (forceMultiline) {
|
|
range = this.getSectionRange(session, row);
|
|
} else if (foldStyle != "all")
|
|
range = null;
|
|
}
|
|
|
|
return range;
|
|
}
|
|
|
|
if (foldStyle === "markbegin")
|
|
return;
|
|
|
|
var match = line.match(this.foldingStopMarker);
|
|
if (match) {
|
|
var i = match.index + match[0].length;
|
|
|
|
if (match[1])
|
|
return this.closingBracketBlock(session, match[1], row, i);
|
|
|
|
return session.getCommentFoldRange(row, i, -1);
|
|
}
|
|
};
|
|
|
|
this.getSectionRange = function(session, row) {
|
|
var line = session.getLine(row);
|
|
var startIndent = line.search(/\S/);
|
|
var startRow = row;
|
|
var startColumn = line.length;
|
|
row = row + 1;
|
|
var endRow = row;
|
|
var maxRow = session.getLength();
|
|
while (++row < maxRow) {
|
|
line = session.getLine(row);
|
|
var indent = line.search(/\S/);
|
|
if (indent === -1)
|
|
continue;
|
|
if (startIndent > indent)
|
|
break;
|
|
var subRange = this.getFoldWidgetRange(session, "all", row);
|
|
|
|
if (subRange) {
|
|
if (subRange.start.row <= startRow) {
|
|
break;
|
|
} else if (subRange.isMultiLine()) {
|
|
row = subRange.end.row;
|
|
} else if (startIndent == indent) {
|
|
break;
|
|
}
|
|
}
|
|
endRow = row;
|
|
}
|
|
|
|
return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
|
|
};
|
|
this.getCommentRegionBlock = function(session, line, row) {
|
|
var startColumn = line.search(/\s*$/);
|
|
var maxRow = session.getLength();
|
|
var startRow = row;
|
|
|
|
var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
|
|
var depth = 1;
|
|
while (++row < maxRow) {
|
|
line = session.getLine(row);
|
|
var m = re.exec(line);
|
|
if (!m) continue;
|
|
if (m[1]) depth--;
|
|
else depth++;
|
|
|
|
if (!depth) break;
|
|
}
|
|
|
|
var endRow = row;
|
|
if (endRow > startRow) {
|
|
return new Range(startRow, startColumn, endRow, line.length);
|
|
}
|
|
};
|
|
|
|
}).call(FoldMode.prototype);
|
|
|
|
});
|
|
|
|
define("ace/mode/io",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/io_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module) {
|
|
"use strict";
|
|
|
|
var oop = require("../lib/oop");
|
|
var TextMode = require("./text").Mode;
|
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
|
var IoHighlightRules = require("./io_highlight_rules").IoHighlightRules;
|
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
|
|
|
var Mode = function() {
|
|
this.HighlightRules = IoHighlightRules;
|
|
this.foldingRules = new FoldMode();
|
|
};
|
|
oop.inherits(Mode, TextMode);
|
|
|
|
(function() {
|
|
this.lineCommentStart = "//";
|
|
this.blockComment = {start: "/*", end: "*/"};
|
|
this.$id = "ace/mode/io"
|
|
}).call(Mode.prototype);
|
|
|
|
exports.Mode = Mode;
|
|
});
|