Add Docker pages #2
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,330 @@
|
||||||
|
define("ace/ext/beautify",["require","exports","module","ace/token_iterator"], function(require, exports, module){// [WIP]
|
||||||
|
"use strict";
|
||||||
|
var TokenIterator = require("../token_iterator").TokenIterator;
|
||||||
|
function is(token, type) {
|
||||||
|
return token.type.lastIndexOf(type + ".xml") > -1;
|
||||||
|
}
|
||||||
|
exports.singletonTags = ["area", "base", "br", "col", "command", "embed", "hr", "html", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"];
|
||||||
|
exports.blockTags = ["article", "aside", "blockquote", "body", "div", "dl", "fieldset", "footer", "form", "head", "header", "html", "nav", "ol", "p", "script", "section", "style", "table", "tbody", "tfoot", "thead", "ul"];
|
||||||
|
exports.formatOptions = {
|
||||||
|
lineBreaksAfterCommasInCurlyBlock: true
|
||||||
|
};
|
||||||
|
exports.beautify = function (session) {
|
||||||
|
var iterator = new TokenIterator(session, 0, 0);
|
||||||
|
var token = iterator.getCurrentToken();
|
||||||
|
var tabString = session.getTabString();
|
||||||
|
var singletonTags = exports.singletonTags;
|
||||||
|
var blockTags = exports.blockTags;
|
||||||
|
var formatOptions = exports.formatOptions || {};
|
||||||
|
var nextToken;
|
||||||
|
var breakBefore = false;
|
||||||
|
var spaceBefore = false;
|
||||||
|
var spaceAfter = false;
|
||||||
|
var code = "";
|
||||||
|
var value = "";
|
||||||
|
var tagName = "";
|
||||||
|
var depth = 0;
|
||||||
|
var lastDepth = 0;
|
||||||
|
var lastIndent = 0;
|
||||||
|
var indent = 0;
|
||||||
|
var unindent = 0;
|
||||||
|
var roundDepth = 0;
|
||||||
|
var curlyDepth = 0;
|
||||||
|
var row;
|
||||||
|
var curRow = 0;
|
||||||
|
var rowsToAdd = 0;
|
||||||
|
var rowTokens = [];
|
||||||
|
var abort = false;
|
||||||
|
var i;
|
||||||
|
var indentNextLine = false;
|
||||||
|
var inTag = false;
|
||||||
|
var inCSS = false;
|
||||||
|
var inBlock = false;
|
||||||
|
var levels = { 0: 0 };
|
||||||
|
var parents = [];
|
||||||
|
var caseBody = false;
|
||||||
|
var trimNext = function () {
|
||||||
|
if (nextToken && nextToken.value && nextToken.type !== 'string.regexp')
|
||||||
|
nextToken.value = nextToken.value.replace(/^\s*/, "");
|
||||||
|
};
|
||||||
|
var trimLine = function () {
|
||||||
|
var end = code.length - 1;
|
||||||
|
while (true) {
|
||||||
|
if (end == 0)
|
||||||
|
break;
|
||||||
|
if (code[end] !== " ")
|
||||||
|
break;
|
||||||
|
end = end - 1;
|
||||||
|
}
|
||||||
|
code = code.slice(0, end + 1);
|
||||||
|
};
|
||||||
|
var trimCode = function () {
|
||||||
|
code = code.trimRight();
|
||||||
|
breakBefore = false;
|
||||||
|
};
|
||||||
|
while (token !== null) {
|
||||||
|
curRow = iterator.getCurrentTokenRow();
|
||||||
|
rowTokens = iterator.$rowTokens;
|
||||||
|
nextToken = iterator.stepForward();
|
||||||
|
if (typeof token !== "undefined") {
|
||||||
|
value = token.value;
|
||||||
|
unindent = 0;
|
||||||
|
inCSS = (tagName === "style" || session.$modeId === "ace/mode/css");
|
||||||
|
if (is(token, "tag-open")) {
|
||||||
|
inTag = true;
|
||||||
|
if (nextToken)
|
||||||
|
inBlock = (blockTags.indexOf(nextToken.value) !== -1);
|
||||||
|
if (value === "</") {
|
||||||
|
if (inBlock && !breakBefore && rowsToAdd < 1)
|
||||||
|
rowsToAdd++;
|
||||||
|
if (inCSS)
|
||||||
|
rowsToAdd = 1;
|
||||||
|
unindent = 1;
|
||||||
|
inBlock = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (is(token, "tag-close")) {
|
||||||
|
inTag = false;
|
||||||
|
}
|
||||||
|
else if (is(token, "comment.start")) {
|
||||||
|
inBlock = true;
|
||||||
|
}
|
||||||
|
else if (is(token, "comment.end")) {
|
||||||
|
inBlock = false;
|
||||||
|
}
|
||||||
|
if (!inTag && !rowsToAdd && token.type === "paren.rparen" && token.value.substr(0, 1) === "}") {
|
||||||
|
rowsToAdd++;
|
||||||
|
}
|
||||||
|
if (curRow !== row) {
|
||||||
|
rowsToAdd = curRow;
|
||||||
|
if (row)
|
||||||
|
rowsToAdd -= row;
|
||||||
|
}
|
||||||
|
if (rowsToAdd) {
|
||||||
|
trimCode();
|
||||||
|
for (; rowsToAdd > 0; rowsToAdd--)
|
||||||
|
code += "\n";
|
||||||
|
breakBefore = true;
|
||||||
|
if (!is(token, "comment") && !token.type.match(/^(comment|string)$/))
|
||||||
|
value = value.trimLeft();
|
||||||
|
}
|
||||||
|
if (value) {
|
||||||
|
if (token.type === "keyword" && value.match(/^(if|else|elseif|for|foreach|while|switch)$/)) {
|
||||||
|
parents[depth] = value;
|
||||||
|
trimNext();
|
||||||
|
spaceAfter = true;
|
||||||
|
if (value.match(/^(else|elseif)$/)) {
|
||||||
|
if (code.match(/\}[\s]*$/)) {
|
||||||
|
trimCode();
|
||||||
|
spaceBefore = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (token.type === "paren.lparen") {
|
||||||
|
trimNext();
|
||||||
|
if (value.substr(-1) === "{") {
|
||||||
|
spaceAfter = true;
|
||||||
|
indentNextLine = false;
|
||||||
|
if (!inTag)
|
||||||
|
rowsToAdd = 1;
|
||||||
|
}
|
||||||
|
if (value.substr(0, 1) === "{") {
|
||||||
|
spaceBefore = true;
|
||||||
|
if (code.substr(-1) !== '[' && code.trimRight().substr(-1) === '[') {
|
||||||
|
trimCode();
|
||||||
|
spaceBefore = false;
|
||||||
|
}
|
||||||
|
else if (code.trimRight().substr(-1) === ')') {
|
||||||
|
trimCode();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
trimLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (token.type === "paren.rparen") {
|
||||||
|
unindent = 1;
|
||||||
|
if (value.substr(0, 1) === "}") {
|
||||||
|
if (parents[depth - 1] === 'case')
|
||||||
|
unindent++;
|
||||||
|
if (code.trimRight().substr(-1) === '{') {
|
||||||
|
trimCode();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
spaceBefore = true;
|
||||||
|
if (inCSS)
|
||||||
|
rowsToAdd += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (value.substr(0, 1) === "]") {
|
||||||
|
if (code.substr(-1) !== '}' && code.trimRight().substr(-1) === '}') {
|
||||||
|
spaceBefore = false;
|
||||||
|
indent++;
|
||||||
|
trimCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (value.substr(0, 1) === ")") {
|
||||||
|
if (code.substr(-1) !== '(' && code.trimRight().substr(-1) === '(') {
|
||||||
|
spaceBefore = false;
|
||||||
|
indent++;
|
||||||
|
trimCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trimLine();
|
||||||
|
}
|
||||||
|
else if ((token.type === "keyword.operator" || token.type === "keyword") && value.match(/^(=|==|===|!=|!==|&&|\|\||and|or|xor|\+=|.=|>|>=|<|<=|=>)$/)) {
|
||||||
|
trimCode();
|
||||||
|
trimNext();
|
||||||
|
spaceBefore = true;
|
||||||
|
spaceAfter = true;
|
||||||
|
}
|
||||||
|
else if (token.type === "punctuation.operator" && value === ';') {
|
||||||
|
trimCode();
|
||||||
|
trimNext();
|
||||||
|
spaceAfter = true;
|
||||||
|
if (inCSS)
|
||||||
|
rowsToAdd++;
|
||||||
|
}
|
||||||
|
else if (token.type === "punctuation.operator" && value.match(/^(:|,)$/)) {
|
||||||
|
trimCode();
|
||||||
|
trimNext();
|
||||||
|
if (value.match(/^(,)$/) && curlyDepth > 0 && roundDepth === 0 && formatOptions.lineBreaksAfterCommasInCurlyBlock) {
|
||||||
|
rowsToAdd++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
spaceAfter = true;
|
||||||
|
breakBefore = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (token.type === "support.php_tag" && value === "?>" && !breakBefore) {
|
||||||
|
trimCode();
|
||||||
|
spaceBefore = true;
|
||||||
|
}
|
||||||
|
else if (is(token, "attribute-name") && code.substr(-1).match(/^\s$/)) {
|
||||||
|
spaceBefore = true;
|
||||||
|
}
|
||||||
|
else if (is(token, "attribute-equals")) {
|
||||||
|
trimLine();
|
||||||
|
trimNext();
|
||||||
|
}
|
||||||
|
else if (is(token, "tag-close")) {
|
||||||
|
trimLine();
|
||||||
|
if (value === "/>")
|
||||||
|
spaceBefore = true;
|
||||||
|
}
|
||||||
|
else if (token.type === "keyword" && value.match(/^(case|default)$/)) {
|
||||||
|
if (caseBody)
|
||||||
|
unindent = 1;
|
||||||
|
}
|
||||||
|
if (breakBefore && !(token.type.match(/^(comment)$/) && !value.substr(0, 1).match(/^[/#]$/)) && !(token.type.match(/^(string)$/) && !value.substr(0, 1).match(/^['"@]$/))) {
|
||||||
|
indent = lastIndent;
|
||||||
|
if (depth > lastDepth) {
|
||||||
|
indent++;
|
||||||
|
for (i = depth; i > lastDepth; i--)
|
||||||
|
levels[i] = indent;
|
||||||
|
}
|
||||||
|
else if (depth < lastDepth)
|
||||||
|
indent = levels[depth];
|
||||||
|
lastDepth = depth;
|
||||||
|
lastIndent = indent;
|
||||||
|
if (unindent)
|
||||||
|
indent -= unindent;
|
||||||
|
if (indentNextLine && !roundDepth) {
|
||||||
|
indent++;
|
||||||
|
indentNextLine = false;
|
||||||
|
}
|
||||||
|
for (i = 0; i < indent; i++)
|
||||||
|
code += tabString;
|
||||||
|
}
|
||||||
|
if (token.type === "keyword" && value.match(/^(case|default)$/)) {
|
||||||
|
if (caseBody === false) {
|
||||||
|
parents[depth] = value;
|
||||||
|
depth++;
|
||||||
|
caseBody = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (token.type === "keyword" && value.match(/^(break)$/)) {
|
||||||
|
if (parents[depth - 1] && parents[depth - 1].match(/^(case|default)$/)) {
|
||||||
|
depth--;
|
||||||
|
caseBody = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (token.type === "paren.lparen") {
|
||||||
|
roundDepth += (value.match(/\(/g) || []).length;
|
||||||
|
curlyDepth += (value.match(/\{/g) || []).length;
|
||||||
|
depth += value.length;
|
||||||
|
}
|
||||||
|
if (token.type === "keyword" && value.match(/^(if|else|elseif|for|while)$/)) {
|
||||||
|
indentNextLine = true;
|
||||||
|
roundDepth = 0;
|
||||||
|
}
|
||||||
|
else if (!roundDepth && value.trim() && token.type !== "comment")
|
||||||
|
indentNextLine = false;
|
||||||
|
if (token.type === "paren.rparen") {
|
||||||
|
roundDepth -= (value.match(/\)/g) || []).length;
|
||||||
|
curlyDepth -= (value.match(/\}/g) || []).length;
|
||||||
|
for (i = 0; i < value.length; i++) {
|
||||||
|
depth--;
|
||||||
|
if (value.substr(i, 1) === '}' && parents[depth] === 'case') {
|
||||||
|
depth--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (token.type == "text")
|
||||||
|
value = value.replace(/\s+$/, " ");
|
||||||
|
if (spaceBefore && !breakBefore) {
|
||||||
|
trimLine();
|
||||||
|
if (code.substr(-1) !== "\n")
|
||||||
|
code += " ";
|
||||||
|
}
|
||||||
|
code += value;
|
||||||
|
if (spaceAfter)
|
||||||
|
code += " ";
|
||||||
|
breakBefore = false;
|
||||||
|
spaceBefore = false;
|
||||||
|
spaceAfter = false;
|
||||||
|
if ((is(token, "tag-close") && (inBlock || blockTags.indexOf(tagName) !== -1)) || (is(token, "doctype") && value === ">")) {
|
||||||
|
if (inBlock && nextToken && nextToken.value === "</")
|
||||||
|
rowsToAdd = -1;
|
||||||
|
else
|
||||||
|
rowsToAdd = 1;
|
||||||
|
}
|
||||||
|
if (nextToken && singletonTags.indexOf(nextToken.value) === -1) {
|
||||||
|
if (is(token, "tag-open") && value === "</") {
|
||||||
|
depth--;
|
||||||
|
}
|
||||||
|
else if (is(token, "tag-open") && value === "<") {
|
||||||
|
depth++;
|
||||||
|
}
|
||||||
|
else if (is(token, "tag-close") && value === "/>") {
|
||||||
|
depth--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (is(token, "tag-name")) {
|
||||||
|
tagName = value;
|
||||||
|
}
|
||||||
|
row = curRow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
token = nextToken;
|
||||||
|
}
|
||||||
|
code = code.trim();
|
||||||
|
session.doc.setValue(code);
|
||||||
|
};
|
||||||
|
exports.commands = [{
|
||||||
|
name: "beautify",
|
||||||
|
description: "Format selection (Beautify)",
|
||||||
|
exec: function (editor) {
|
||||||
|
exports.beautify(editor.session);
|
||||||
|
},
|
||||||
|
bindKey: "Ctrl-Shift-B"
|
||||||
|
}];
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/beautify"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,202 @@
|
||||||
|
define("ace/ext/code_lens",["require","exports","module","ace/line_widgets","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/editor","ace/config"], function(require, exports, module){"use strict";
|
||||||
|
var LineWidgets = require("../line_widgets").LineWidgets;
|
||||||
|
var event = require("../lib/event");
|
||||||
|
var lang = require("../lib/lang");
|
||||||
|
var dom = require("../lib/dom");
|
||||||
|
function clearLensElements(renderer) {
|
||||||
|
var textLayer = renderer.$textLayer;
|
||||||
|
var lensElements = textLayer.$lenses;
|
||||||
|
if (lensElements)
|
||||||
|
lensElements.forEach(function (el) { el.remove(); });
|
||||||
|
textLayer.$lenses = null;
|
||||||
|
}
|
||||||
|
function renderWidgets(changes, renderer) {
|
||||||
|
var changed = changes & renderer.CHANGE_LINES
|
||||||
|
|| changes & renderer.CHANGE_FULL
|
||||||
|
|| changes & renderer.CHANGE_SCROLL
|
||||||
|
|| changes & renderer.CHANGE_TEXT;
|
||||||
|
if (!changed)
|
||||||
|
return;
|
||||||
|
var session = renderer.session;
|
||||||
|
var lineWidgets = renderer.session.lineWidgets;
|
||||||
|
var textLayer = renderer.$textLayer;
|
||||||
|
var lensElements = textLayer.$lenses;
|
||||||
|
if (!lineWidgets) {
|
||||||
|
if (lensElements)
|
||||||
|
clearLensElements(renderer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var textCells = renderer.$textLayer.$lines.cells;
|
||||||
|
var config = renderer.layerConfig;
|
||||||
|
var padding = renderer.$padding;
|
||||||
|
if (!lensElements)
|
||||||
|
lensElements = textLayer.$lenses = [];
|
||||||
|
var index = 0;
|
||||||
|
for (var i = 0; i < textCells.length; i++) {
|
||||||
|
var row = textCells[i].row;
|
||||||
|
var widget = lineWidgets[row];
|
||||||
|
var lenses = widget && widget.lenses;
|
||||||
|
if (!lenses || !lenses.length)
|
||||||
|
continue;
|
||||||
|
var lensContainer = lensElements[index];
|
||||||
|
if (!lensContainer) {
|
||||||
|
lensContainer = lensElements[index]
|
||||||
|
= dom.buildDom(["div", { class: "ace_codeLens" }], renderer.container);
|
||||||
|
}
|
||||||
|
lensContainer.style.height = config.lineHeight + "px";
|
||||||
|
index++;
|
||||||
|
for (var j = 0; j < lenses.length; j++) {
|
||||||
|
var el = lensContainer.childNodes[2 * j];
|
||||||
|
if (!el) {
|
||||||
|
if (j != 0)
|
||||||
|
lensContainer.appendChild(dom.createTextNode("\xa0|\xa0"));
|
||||||
|
el = dom.buildDom(["a"], lensContainer);
|
||||||
|
}
|
||||||
|
el.textContent = lenses[j].title;
|
||||||
|
el.lensCommand = lenses[j];
|
||||||
|
}
|
||||||
|
while (lensContainer.childNodes.length > 2 * j - 1)
|
||||||
|
lensContainer.lastChild.remove();
|
||||||
|
var top = renderer.$cursorLayer.getPixelPosition({
|
||||||
|
row: row,
|
||||||
|
column: 0
|
||||||
|
}, true).top - config.lineHeight * widget.rowsAbove - config.offset;
|
||||||
|
lensContainer.style.top = top + "px";
|
||||||
|
var left = renderer.gutterWidth;
|
||||||
|
var indent = session.getLine(row).search(/\S|$/);
|
||||||
|
if (indent == -1)
|
||||||
|
indent = 0;
|
||||||
|
left += indent * config.characterWidth;
|
||||||
|
lensContainer.style.paddingLeft = padding + left + "px";
|
||||||
|
}
|
||||||
|
while (index < lensElements.length)
|
||||||
|
lensElements.pop().remove();
|
||||||
|
}
|
||||||
|
function clearCodeLensWidgets(session) {
|
||||||
|
if (!session.lineWidgets)
|
||||||
|
return;
|
||||||
|
var widgetManager = session.widgetManager;
|
||||||
|
session.lineWidgets.forEach(function (widget) {
|
||||||
|
if (widget && widget.lenses)
|
||||||
|
widgetManager.removeLineWidget(widget);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.setLenses = function (session, lenses) {
|
||||||
|
var firstRow = Number.MAX_VALUE;
|
||||||
|
clearCodeLensWidgets(session);
|
||||||
|
lenses && lenses.forEach(function (lens) {
|
||||||
|
var row = lens.start.row;
|
||||||
|
var column = lens.start.column;
|
||||||
|
var widget = session.lineWidgets && session.lineWidgets[row];
|
||||||
|
if (!widget || !widget.lenses) {
|
||||||
|
widget = session.widgetManager.$registerLineWidget({
|
||||||
|
rowCount: 1,
|
||||||
|
rowsAbove: 1,
|
||||||
|
row: row,
|
||||||
|
column: column,
|
||||||
|
lenses: []
|
||||||
|
});
|
||||||
|
}
|
||||||
|
widget.lenses.push(lens.command);
|
||||||
|
if (row < firstRow)
|
||||||
|
firstRow = row;
|
||||||
|
});
|
||||||
|
session._emit("changeFold", { data: { start: { row: firstRow } } });
|
||||||
|
return firstRow;
|
||||||
|
};
|
||||||
|
function attachToEditor(editor) {
|
||||||
|
editor.codeLensProviders = [];
|
||||||
|
editor.renderer.on("afterRender", renderWidgets);
|
||||||
|
if (!editor.$codeLensClickHandler) {
|
||||||
|
editor.$codeLensClickHandler = function (e) {
|
||||||
|
var command = e.target.lensCommand;
|
||||||
|
if (!command)
|
||||||
|
return;
|
||||||
|
editor.execCommand(command.id, command.arguments);
|
||||||
|
editor._emit("codeLensClick", e);
|
||||||
|
};
|
||||||
|
event.addListener(editor.container, "click", editor.$codeLensClickHandler, editor);
|
||||||
|
}
|
||||||
|
editor.$updateLenses = function () {
|
||||||
|
var session = editor.session;
|
||||||
|
if (!session)
|
||||||
|
return;
|
||||||
|
if (!session.widgetManager) {
|
||||||
|
session.widgetManager = new LineWidgets(session);
|
||||||
|
session.widgetManager.attach(editor);
|
||||||
|
}
|
||||||
|
var providersToWaitNum = editor.codeLensProviders.length;
|
||||||
|
var lenses = [];
|
||||||
|
editor.codeLensProviders.forEach(function (provider) {
|
||||||
|
provider.provideCodeLenses(session, function (err, payload) {
|
||||||
|
if (err)
|
||||||
|
return;
|
||||||
|
payload.forEach(function (lens) {
|
||||||
|
lenses.push(lens);
|
||||||
|
});
|
||||||
|
providersToWaitNum--;
|
||||||
|
if (providersToWaitNum == 0) {
|
||||||
|
applyLenses();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
function applyLenses() {
|
||||||
|
var cursor = session.selection.cursor;
|
||||||
|
var oldRow = session.documentToScreenRow(cursor);
|
||||||
|
var scrollTop = session.getScrollTop();
|
||||||
|
var firstRow = exports.setLenses(session, lenses);
|
||||||
|
var lastDelta = session.$undoManager && session.$undoManager.$lastDelta;
|
||||||
|
if (lastDelta && lastDelta.action == "remove" && lastDelta.lines.length > 1)
|
||||||
|
return;
|
||||||
|
var row = session.documentToScreenRow(cursor);
|
||||||
|
var lineHeight = editor.renderer.layerConfig.lineHeight;
|
||||||
|
var top = session.getScrollTop() + (row - oldRow) * lineHeight;
|
||||||
|
if (firstRow == 0 && scrollTop < lineHeight / 4 && scrollTop > -lineHeight / 4) {
|
||||||
|
top = -lineHeight;
|
||||||
|
}
|
||||||
|
session.setScrollTop(top);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var updateLenses = lang.delayedCall(editor.$updateLenses);
|
||||||
|
editor.$updateLensesOnInput = function () {
|
||||||
|
updateLenses.delay(250);
|
||||||
|
};
|
||||||
|
editor.on("input", editor.$updateLensesOnInput);
|
||||||
|
}
|
||||||
|
function detachFromEditor(editor) {
|
||||||
|
editor.off("input", editor.$updateLensesOnInput);
|
||||||
|
editor.renderer.off("afterRender", renderWidgets);
|
||||||
|
if (editor.$codeLensClickHandler)
|
||||||
|
editor.container.removeEventListener("click", editor.$codeLensClickHandler);
|
||||||
|
}
|
||||||
|
exports.registerCodeLensProvider = function (editor, codeLensProvider) {
|
||||||
|
editor.setOption("enableCodeLens", true);
|
||||||
|
editor.codeLensProviders.push(codeLensProvider);
|
||||||
|
editor.$updateLensesOnInput();
|
||||||
|
};
|
||||||
|
exports.clear = function (session) {
|
||||||
|
exports.setLenses(session, null);
|
||||||
|
};
|
||||||
|
var Editor = require("../editor").Editor;
|
||||||
|
require("../config").defineOptions(Editor.prototype, "editor", {
|
||||||
|
enableCodeLens: {
|
||||||
|
set: function (val) {
|
||||||
|
if (val) {
|
||||||
|
attachToEditor(this);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
detachFromEditor(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dom.importCssString("\n.ace_codeLens {\n position: absolute;\n color: #aaa;\n font-size: 88%;\n background: inherit;\n width: 100%;\n display: flex;\n align-items: flex-end;\n pointer-events: none;\n}\n.ace_codeLens > a {\n cursor: pointer;\n pointer-events: auto;\n}\n.ace_codeLens > a:hover {\n color: #0000ff;\n text-decoration: underline;\n}\n.ace_dark > .ace_codeLens > a:hover {\n color: #4e94ce;\n}\n", "codelense.css", false);
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/code_lens"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,459 @@
|
||||||
|
define("ace/ext/command_bar",["require","exports","module","ace/tooltip","ace/lib/event_emitter","ace/lib/lang","ace/lib/dom","ace/lib/oop","ace/lib/useragent"], function(require, exports, module){var __values = (this && this.__values) || function(o) {
|
||||||
|
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
||||||
|
if (m) return m.call(o);
|
||||||
|
if (o && typeof o.length === "number") return {
|
||||||
|
next: function () {
|
||||||
|
if (o && i >= o.length) o = void 0;
|
||||||
|
return { value: o && o[i++], done: !o };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
||||||
|
};
|
||||||
|
var Tooltip = require("../tooltip").Tooltip;
|
||||||
|
var EventEmitter = require("../lib/event_emitter").EventEmitter;
|
||||||
|
var lang = require("../lib/lang");
|
||||||
|
var dom = require("../lib/dom");
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var useragent = require("../lib/useragent");
|
||||||
|
var BUTTON_CLASS_NAME = 'command_bar_tooltip_button';
|
||||||
|
var VALUE_CLASS_NAME = 'command_bar_button_value';
|
||||||
|
var CAPTION_CLASS_NAME = 'command_bar_button_caption';
|
||||||
|
var KEYBINDING_CLASS_NAME = 'command_bar_keybinding';
|
||||||
|
var TOOLTIP_CLASS_NAME = 'command_bar_tooltip';
|
||||||
|
var MORE_OPTIONS_BUTTON_ID = 'MoreOptionsButton';
|
||||||
|
var defaultDelay = 100;
|
||||||
|
var defaultMaxElements = 4;
|
||||||
|
var minPosition = function (posA, posB) {
|
||||||
|
if (posB.row > posA.row) {
|
||||||
|
return posA;
|
||||||
|
}
|
||||||
|
else if (posB.row === posA.row && posB.column > posA.column) {
|
||||||
|
return posA;
|
||||||
|
}
|
||||||
|
return posB;
|
||||||
|
};
|
||||||
|
var keyDisplayMap = {
|
||||||
|
"Ctrl": { mac: "^" },
|
||||||
|
"Option": { mac: "⌥" },
|
||||||
|
"Command": { mac: "⌘" },
|
||||||
|
"Cmd": { mac: "⌘" },
|
||||||
|
"Shift": "⇧",
|
||||||
|
"Left": "←",
|
||||||
|
"Right": "→",
|
||||||
|
"Up": "↑",
|
||||||
|
"Down": "↓"
|
||||||
|
};
|
||||||
|
var CommandBarTooltip = /** @class */ (function () {
|
||||||
|
function CommandBarTooltip(parentNode, options) {
|
||||||
|
var e_1, _a;
|
||||||
|
options = options || {};
|
||||||
|
this.parentNode = parentNode;
|
||||||
|
this.tooltip = new Tooltip(this.parentNode);
|
||||||
|
this.moreOptions = new Tooltip(this.parentNode);
|
||||||
|
this.maxElementsOnTooltip = options.maxElementsOnTooltip || defaultMaxElements;
|
||||||
|
this.$alwaysShow = options.alwaysShow || false;
|
||||||
|
this.eventListeners = {};
|
||||||
|
this.elements = {};
|
||||||
|
this.commands = {};
|
||||||
|
this.tooltipEl = dom.buildDom(['div', { class: TOOLTIP_CLASS_NAME }], this.tooltip.getElement());
|
||||||
|
this.moreOptionsEl = dom.buildDom(['div', { class: TOOLTIP_CLASS_NAME + " tooltip_more_options" }], this.moreOptions.getElement());
|
||||||
|
this.$showTooltipTimer = lang.delayedCall(this.$showTooltip.bind(this), options.showDelay || defaultDelay);
|
||||||
|
this.$hideTooltipTimer = lang.delayedCall(this.$hideTooltip.bind(this), options.hideDelay || defaultDelay);
|
||||||
|
this.$tooltipEnter = this.$tooltipEnter.bind(this);
|
||||||
|
this.$onMouseMove = this.$onMouseMove.bind(this);
|
||||||
|
this.$onChangeScroll = this.$onChangeScroll.bind(this);
|
||||||
|
this.$onEditorChangeSession = this.$onEditorChangeSession.bind(this);
|
||||||
|
this.$scheduleTooltipForHide = this.$scheduleTooltipForHide.bind(this);
|
||||||
|
this.$preventMouseEvent = this.$preventMouseEvent.bind(this);
|
||||||
|
try {
|
||||||
|
for (var _b = __values(["mousedown", "mouseup", "click"]), _c = _b.next(); !_c.done; _c = _b.next()) {
|
||||||
|
var event = _c.value;
|
||||||
|
this.tooltip.getElement().addEventListener(event, this.$preventMouseEvent);
|
||||||
|
this.moreOptions.getElement().addEventListener(event, this.$preventMouseEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
||||||
|
finally {
|
||||||
|
try {
|
||||||
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
||||||
|
}
|
||||||
|
finally { if (e_1) throw e_1.error; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CommandBarTooltip.prototype.registerCommand = function (id, command) {
|
||||||
|
var registerForMainTooltip = Object.keys(this.commands).length < this.maxElementsOnTooltip;
|
||||||
|
if (!registerForMainTooltip && !this.elements[MORE_OPTIONS_BUTTON_ID]) {
|
||||||
|
this.$createCommand(MORE_OPTIONS_BUTTON_ID, {
|
||||||
|
name: "···",
|
||||||
|
exec:
|
||||||
|
function () {
|
||||||
|
this.$shouldHideMoreOptions = false;
|
||||||
|
this.$setMoreOptionsVisibility(!this.isMoreOptionsShown());
|
||||||
|
}.bind(this),
|
||||||
|
type: "checkbox",
|
||||||
|
getValue: function () {
|
||||||
|
return this.isMoreOptionsShown();
|
||||||
|
}.bind(this),
|
||||||
|
enabled: true
|
||||||
|
}, true);
|
||||||
|
}
|
||||||
|
this.$createCommand(id, command, registerForMainTooltip);
|
||||||
|
if (this.isShown()) {
|
||||||
|
this.updatePosition();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.isShown = function () {
|
||||||
|
return !!this.tooltip && this.tooltip.isOpen;
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.isMoreOptionsShown = function () {
|
||||||
|
return !!this.moreOptions && this.moreOptions.isOpen;
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.getAlwaysShow = function () {
|
||||||
|
return this.$alwaysShow;
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.setAlwaysShow = function (alwaysShow) {
|
||||||
|
this.$alwaysShow = alwaysShow;
|
||||||
|
this.$updateOnHoverHandlers(!this.$alwaysShow);
|
||||||
|
this._signal("alwaysShow", this.$alwaysShow);
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.attach = function (editor) {
|
||||||
|
if (!editor || (this.isShown() && this.editor === editor)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.detach();
|
||||||
|
this.editor = editor;
|
||||||
|
this.editor.on("changeSession", this.$onEditorChangeSession);
|
||||||
|
if (this.editor.session) {
|
||||||
|
this.editor.session.on("changeScrollLeft", this.$onChangeScroll);
|
||||||
|
this.editor.session.on("changeScrollTop", this.$onChangeScroll);
|
||||||
|
}
|
||||||
|
if (this.getAlwaysShow()) {
|
||||||
|
this.$showTooltip();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.$updateOnHoverHandlers(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.updatePosition = function () {
|
||||||
|
if (!this.editor) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var renderer = this.editor.renderer;
|
||||||
|
var ranges;
|
||||||
|
if (this.editor.selection.getAllRanges) {
|
||||||
|
ranges = this.editor.selection.getAllRanges();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ranges = [this.editor.getSelectionRange()];
|
||||||
|
}
|
||||||
|
if (!ranges.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var minPos = minPosition(ranges[0].start, ranges[0].end);
|
||||||
|
for (var i = 0, range; range = ranges[i]; i++) {
|
||||||
|
minPos = minPosition(minPos, minPosition(range.start, range.end));
|
||||||
|
}
|
||||||
|
var pos = renderer.$cursorLayer.getPixelPosition(minPos, true);
|
||||||
|
var tooltipEl = this.tooltip.getElement();
|
||||||
|
var screenWidth = window.innerWidth;
|
||||||
|
var screenHeight = window.innerHeight;
|
||||||
|
var rect = this.editor.container.getBoundingClientRect();
|
||||||
|
pos.top += rect.top - renderer.layerConfig.offset;
|
||||||
|
pos.left += rect.left + renderer.gutterWidth - renderer.scrollLeft;
|
||||||
|
var cursorVisible = pos.top >= rect.top && pos.top <= rect.bottom &&
|
||||||
|
pos.left >= rect.left + renderer.gutterWidth && pos.left <= rect.right;
|
||||||
|
if (!cursorVisible && this.isShown()) {
|
||||||
|
this.$hideTooltip();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (cursorVisible && !this.isShown() && this.getAlwaysShow()) {
|
||||||
|
this.$showTooltip();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var top = pos.top - tooltipEl.offsetHeight;
|
||||||
|
var left = Math.min(screenWidth - tooltipEl.offsetWidth, pos.left);
|
||||||
|
var tooltipFits = top >= 0 && top + tooltipEl.offsetHeight <= screenHeight &&
|
||||||
|
left >= 0 && left + tooltipEl.offsetWidth <= screenWidth;
|
||||||
|
if (!tooltipFits) {
|
||||||
|
this.$hideTooltip();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.tooltip.setPosition(left, top);
|
||||||
|
if (this.isMoreOptionsShown()) {
|
||||||
|
top = top + tooltipEl.offsetHeight;
|
||||||
|
left = this.elements[MORE_OPTIONS_BUTTON_ID].getBoundingClientRect().left;
|
||||||
|
var moreOptionsEl = this.moreOptions.getElement();
|
||||||
|
var screenHeight = window.innerHeight;
|
||||||
|
if (top + moreOptionsEl.offsetHeight > screenHeight) {
|
||||||
|
top -= tooltipEl.offsetHeight + moreOptionsEl.offsetHeight;
|
||||||
|
}
|
||||||
|
if (left + moreOptionsEl.offsetWidth > screenWidth) {
|
||||||
|
left = screenWidth - moreOptionsEl.offsetWidth;
|
||||||
|
}
|
||||||
|
this.moreOptions.setPosition(left, top);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.update = function () {
|
||||||
|
Object.keys(this.elements).forEach(this.$updateElement.bind(this));
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.detach = function () {
|
||||||
|
this.tooltip.hide();
|
||||||
|
this.moreOptions.hide();
|
||||||
|
this.$updateOnHoverHandlers(false);
|
||||||
|
if (this.editor) {
|
||||||
|
this.editor.off("changeSession", this.$onEditorChangeSession);
|
||||||
|
if (this.editor.session) {
|
||||||
|
this.editor.session.off("changeScrollLeft", this.$onChangeScroll);
|
||||||
|
this.editor.session.off("changeScrollTop", this.$onChangeScroll);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.$mouseInTooltip = false;
|
||||||
|
this.editor = null;
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.destroy = function () {
|
||||||
|
if (this.tooltip && this.moreOptions) {
|
||||||
|
this.detach();
|
||||||
|
this.tooltip.destroy();
|
||||||
|
this.moreOptions.destroy();
|
||||||
|
}
|
||||||
|
this.eventListeners = {};
|
||||||
|
this.commands = {};
|
||||||
|
this.elements = {};
|
||||||
|
this.tooltip = this.moreOptions = this.parentNode = null;
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$createCommand = function (id, command, forMainTooltip) {
|
||||||
|
var parentEl = forMainTooltip ? this.tooltipEl : this.moreOptionsEl;
|
||||||
|
var keyParts = [];
|
||||||
|
var bindKey = command.bindKey;
|
||||||
|
if (bindKey) {
|
||||||
|
if (typeof bindKey === 'object') {
|
||||||
|
bindKey = useragent.isMac ? bindKey.mac : bindKey.win;
|
||||||
|
}
|
||||||
|
bindKey = bindKey.split("|")[0];
|
||||||
|
keyParts = bindKey.split("-");
|
||||||
|
keyParts = keyParts.map(function (key) {
|
||||||
|
if (keyDisplayMap[key]) {
|
||||||
|
if (typeof keyDisplayMap[key] === 'string') {
|
||||||
|
return keyDisplayMap[key];
|
||||||
|
}
|
||||||
|
else if (useragent.isMac && keyDisplayMap[key].mac) {
|
||||||
|
return keyDisplayMap[key].mac;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return key;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var buttonNode;
|
||||||
|
if (forMainTooltip && command.iconCssClass) {
|
||||||
|
buttonNode = [
|
||||||
|
'div',
|
||||||
|
{
|
||||||
|
class: ["ace_icon_svg", command.iconCssClass].join(" "),
|
||||||
|
"aria-label": command.name + " (" + command.bindKey + ")"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
buttonNode = [
|
||||||
|
['div', { class: VALUE_CLASS_NAME }],
|
||||||
|
['div', { class: CAPTION_CLASS_NAME }, command.name]
|
||||||
|
];
|
||||||
|
if (keyParts.length) {
|
||||||
|
buttonNode.push([
|
||||||
|
'div',
|
||||||
|
{ class: KEYBINDING_CLASS_NAME },
|
||||||
|
keyParts.map(function (keyPart) {
|
||||||
|
return ['div', keyPart];
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dom.buildDom(['div', { class: [BUTTON_CLASS_NAME, command.cssClass || ""].join(" "), ref: id }, buttonNode], parentEl, this.elements);
|
||||||
|
this.commands[id] = command;
|
||||||
|
var eventListener =
|
||||||
|
function (e) {
|
||||||
|
if (this.editor) {
|
||||||
|
this.editor.focus();
|
||||||
|
}
|
||||||
|
this.$shouldHideMoreOptions = this.isMoreOptionsShown();
|
||||||
|
if (!this.elements[id].disabled && command.exec) {
|
||||||
|
command.exec(this.editor);
|
||||||
|
}
|
||||||
|
if (this.$shouldHideMoreOptions) {
|
||||||
|
this.$setMoreOptionsVisibility(false);
|
||||||
|
}
|
||||||
|
this.update();
|
||||||
|
e.preventDefault();
|
||||||
|
}.bind(this);
|
||||||
|
this.eventListeners[id] = eventListener;
|
||||||
|
this.elements[id].addEventListener('click', eventListener.bind(this));
|
||||||
|
this.$updateElement(id);
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$setMoreOptionsVisibility = function (visible) {
|
||||||
|
if (visible) {
|
||||||
|
this.moreOptions.setTheme(this.editor.renderer.theme);
|
||||||
|
this.moreOptions.setClassName(TOOLTIP_CLASS_NAME + "_wrapper");
|
||||||
|
this.moreOptions.show();
|
||||||
|
this.update();
|
||||||
|
this.updatePosition();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.moreOptions.hide();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$onEditorChangeSession = function (e) {
|
||||||
|
if (e.oldSession) {
|
||||||
|
e.oldSession.off("changeScrollTop", this.$onChangeScroll);
|
||||||
|
e.oldSession.off("changeScrollLeft", this.$onChangeScroll);
|
||||||
|
}
|
||||||
|
this.detach();
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$onChangeScroll = function () {
|
||||||
|
if (this.editor.renderer && (this.isShown() || this.getAlwaysShow())) {
|
||||||
|
this.editor.renderer.once("afterRender", this.updatePosition.bind(this));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$onMouseMove = function (e) {
|
||||||
|
if (this.$mouseInTooltip) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var cursorPosition = this.editor.getCursorPosition();
|
||||||
|
var cursorScreenPosition = this.editor.renderer.textToScreenCoordinates(cursorPosition.row, cursorPosition.column);
|
||||||
|
var lineHeight = this.editor.renderer.lineHeight;
|
||||||
|
var isInCurrentLine = e.clientY >= cursorScreenPosition.pageY && e.clientY < cursorScreenPosition.pageY + lineHeight;
|
||||||
|
if (isInCurrentLine) {
|
||||||
|
if (!this.isShown() && !this.$showTooltipTimer.isPending()) {
|
||||||
|
this.$showTooltipTimer.delay();
|
||||||
|
}
|
||||||
|
if (this.$hideTooltipTimer.isPending()) {
|
||||||
|
this.$hideTooltipTimer.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (this.isShown() && !this.$hideTooltipTimer.isPending()) {
|
||||||
|
this.$hideTooltipTimer.delay();
|
||||||
|
}
|
||||||
|
if (this.$showTooltipTimer.isPending()) {
|
||||||
|
this.$showTooltipTimer.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$preventMouseEvent = function (e) {
|
||||||
|
if (this.editor) {
|
||||||
|
this.editor.focus();
|
||||||
|
}
|
||||||
|
e.preventDefault();
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$scheduleTooltipForHide = function () {
|
||||||
|
this.$mouseInTooltip = false;
|
||||||
|
this.$showTooltipTimer.cancel();
|
||||||
|
this.$hideTooltipTimer.delay();
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$tooltipEnter = function () {
|
||||||
|
this.$mouseInTooltip = true;
|
||||||
|
if (this.$showTooltipTimer.isPending()) {
|
||||||
|
this.$showTooltipTimer.cancel();
|
||||||
|
}
|
||||||
|
if (this.$hideTooltipTimer.isPending()) {
|
||||||
|
this.$hideTooltipTimer.cancel();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$updateOnHoverHandlers = function (enableHover) {
|
||||||
|
var tooltipEl = this.tooltip.getElement();
|
||||||
|
var moreOptionsEl = this.moreOptions.getElement();
|
||||||
|
if (enableHover) {
|
||||||
|
if (this.editor) {
|
||||||
|
this.editor.on("mousemove", this.$onMouseMove);
|
||||||
|
this.editor.renderer.getMouseEventTarget().addEventListener("mouseout", this.$scheduleTooltipForHide, true);
|
||||||
|
}
|
||||||
|
tooltipEl.addEventListener('mouseenter', this.$tooltipEnter);
|
||||||
|
tooltipEl.addEventListener('mouseleave', this.$scheduleTooltipForHide);
|
||||||
|
moreOptionsEl.addEventListener('mouseenter', this.$tooltipEnter);
|
||||||
|
moreOptionsEl.addEventListener('mouseleave', this.$scheduleTooltipForHide);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (this.editor) {
|
||||||
|
this.editor.off("mousemove", this.$onMouseMove);
|
||||||
|
this.editor.renderer.getMouseEventTarget().removeEventListener("mouseout", this.$scheduleTooltipForHide, true);
|
||||||
|
}
|
||||||
|
tooltipEl.removeEventListener('mouseenter', this.$tooltipEnter);
|
||||||
|
tooltipEl.removeEventListener('mouseleave', this.$scheduleTooltipForHide);
|
||||||
|
moreOptionsEl.removeEventListener('mouseenter', this.$tooltipEnter);
|
||||||
|
moreOptionsEl.removeEventListener('mouseleave', this.$scheduleTooltipForHide);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$showTooltip = function () {
|
||||||
|
if (this.isShown()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.tooltip.setTheme(this.editor.renderer.theme);
|
||||||
|
this.tooltip.setClassName(TOOLTIP_CLASS_NAME + "_wrapper");
|
||||||
|
this.tooltip.show();
|
||||||
|
this.update();
|
||||||
|
this.updatePosition();
|
||||||
|
this._signal("show");
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$hideTooltip = function () {
|
||||||
|
this.$mouseInTooltip = false;
|
||||||
|
if (!this.isShown()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.moreOptions.hide();
|
||||||
|
this.tooltip.hide();
|
||||||
|
this._signal("hide");
|
||||||
|
};
|
||||||
|
CommandBarTooltip.prototype.$updateElement = function (id) {
|
||||||
|
var command = this.commands[id];
|
||||||
|
if (!command) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var el = this.elements[id];
|
||||||
|
var commandEnabled = command.enabled;
|
||||||
|
if (typeof commandEnabled === 'function') {
|
||||||
|
commandEnabled = commandEnabled(this.editor);
|
||||||
|
}
|
||||||
|
if (typeof command.getValue === 'function') {
|
||||||
|
var value = command.getValue(this.editor);
|
||||||
|
if (command.type === 'text') {
|
||||||
|
el.textContent = value;
|
||||||
|
}
|
||||||
|
else if (command.type === 'checkbox') {
|
||||||
|
var domCssFn = value ? dom.addCssClass : dom.removeCssClass;
|
||||||
|
var isOnTooltip = el.parentElement === this.tooltipEl;
|
||||||
|
el.ariaChecked = value;
|
||||||
|
if (isOnTooltip) {
|
||||||
|
domCssFn(el, "ace_selected");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
el = el.querySelector("." + VALUE_CLASS_NAME);
|
||||||
|
domCssFn(el, "ace_checkmark");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (commandEnabled && el.disabled) {
|
||||||
|
dom.removeCssClass(el, "ace_disabled");
|
||||||
|
el.ariaDisabled = el.disabled = false;
|
||||||
|
el.removeAttribute("disabled");
|
||||||
|
}
|
||||||
|
else if (!commandEnabled && !el.disabled) {
|
||||||
|
dom.addCssClass(el, "ace_disabled");
|
||||||
|
el.ariaDisabled = el.disabled = true;
|
||||||
|
el.setAttribute("disabled", "");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return CommandBarTooltip;
|
||||||
|
}());
|
||||||
|
oop.implement(CommandBarTooltip.prototype, EventEmitter);
|
||||||
|
dom.importCssString("\n.ace_tooltip.".concat(TOOLTIP_CLASS_NAME, "_wrapper {\n padding: 0;\n}\n\n.ace_tooltip .").concat(TOOLTIP_CLASS_NAME, " {\n padding: 1px 5px;\n display: flex;\n pointer-events: auto;\n}\n\n.ace_tooltip .").concat(TOOLTIP_CLASS_NAME, ".tooltip_more_options {\n padding: 1px;\n flex-direction: column;\n}\n\ndiv.").concat(BUTTON_CLASS_NAME, " {\n display: inline-flex;\n cursor: pointer;\n margin: 1px;\n border-radius: 2px;\n padding: 2px 5px;\n align-items: center;\n}\n\ndiv.").concat(BUTTON_CLASS_NAME, ".ace_selected,\ndiv.").concat(BUTTON_CLASS_NAME, ":hover:not(.ace_disabled) {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\ndiv.").concat(BUTTON_CLASS_NAME, ".ace_disabled {\n color: #777;\n pointer-events: none;\n}\n\ndiv.").concat(BUTTON_CLASS_NAME, " .ace_icon_svg {\n height: 12px;\n background-color: #000;\n}\n\ndiv.").concat(BUTTON_CLASS_NAME, ".ace_disabled .ace_icon_svg {\n background-color: #777;\n}\n\n.").concat(TOOLTIP_CLASS_NAME, ".tooltip_more_options .").concat(BUTTON_CLASS_NAME, " {\n display: flex;\n}\n\n.").concat(TOOLTIP_CLASS_NAME, ".").concat(VALUE_CLASS_NAME, " {\n display: none;\n}\n\n.").concat(TOOLTIP_CLASS_NAME, ".tooltip_more_options .").concat(VALUE_CLASS_NAME, " {\n display: inline-block;\n width: 12px;\n}\n\n.").concat(CAPTION_CLASS_NAME, " {\n display: inline-block;\n}\n\n.").concat(KEYBINDING_CLASS_NAME, " {\n margin: 0 2px;\n display: inline-block;\n font-size: 8px;\n}\n\n.").concat(TOOLTIP_CLASS_NAME, ".tooltip_more_options .").concat(KEYBINDING_CLASS_NAME, " {\n margin-left: auto;\n}\n\n.").concat(KEYBINDING_CLASS_NAME, " div {\n display: inline-block;\n min-width: 8px;\n padding: 2px;\n margin: 0 1px;\n border-radius: 2px;\n background-color: #ccc;\n text-align: center;\n}\n\n.ace_dark.ace_tooltip .").concat(TOOLTIP_CLASS_NAME, " {\n background-color: #373737;\n color: #eee;\n}\n\n.ace_dark div.").concat(BUTTON_CLASS_NAME, ".ace_disabled {\n color: #979797;\n}\n\n.ace_dark div.").concat(BUTTON_CLASS_NAME, ".ace_selected,\n.ace_dark div.").concat(BUTTON_CLASS_NAME, ":hover:not(.ace_disabled) {\n background-color: rgba(255, 255, 255, 0.1);\n}\n\n.ace_dark div.").concat(BUTTON_CLASS_NAME, " .ace_icon_svg {\n background-color: #eee;\n}\n\n.ace_dark div.").concat(BUTTON_CLASS_NAME, ".ace_disabled .ace_icon_svg {\n background-color: #979797;\n}\n\n.ace_dark .").concat(BUTTON_CLASS_NAME, ".ace_disabled {\n color: #979797;\n}\n\n.ace_dark .").concat(KEYBINDING_CLASS_NAME, " div {\n background-color: #575757;\n}\n\n.ace_checkmark::before {\n content: '\u2713';\n}\n"), "commandbar.css", false);
|
||||||
|
exports.CommandBarTooltip = CommandBarTooltip;
|
||||||
|
exports.TOOLTIP_CLASS_NAME = TOOLTIP_CLASS_NAME;
|
||||||
|
exports.BUTTON_CLASS_NAME = BUTTON_CLASS_NAME;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/command_bar"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,227 @@
|
||||||
|
define("ace/ext/elastic_tabstops_lite",["require","exports","module","ace/editor","ace/config"], function(require, exports, module){"use strict";
|
||||||
|
var ElasticTabstopsLite = /** @class */ (function () {
|
||||||
|
function ElasticTabstopsLite(editor) {
|
||||||
|
this.$editor = editor;
|
||||||
|
var self = this;
|
||||||
|
var changedRows = [];
|
||||||
|
var recordChanges = false;
|
||||||
|
this.onAfterExec = function () {
|
||||||
|
recordChanges = false;
|
||||||
|
self.processRows(changedRows);
|
||||||
|
changedRows = [];
|
||||||
|
};
|
||||||
|
this.onExec = function () {
|
||||||
|
recordChanges = true;
|
||||||
|
};
|
||||||
|
this.onChange = function (delta) {
|
||||||
|
if (recordChanges) {
|
||||||
|
if (changedRows.indexOf(delta.start.row) == -1)
|
||||||
|
changedRows.push(delta.start.row);
|
||||||
|
if (delta.end.row != delta.start.row)
|
||||||
|
changedRows.push(delta.end.row);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
ElasticTabstopsLite.prototype.processRows = function (rows) {
|
||||||
|
this.$inChange = true;
|
||||||
|
var checkedRows = [];
|
||||||
|
for (var r = 0, rowCount = rows.length; r < rowCount; r++) {
|
||||||
|
var row = rows[r];
|
||||||
|
if (checkedRows.indexOf(row) > -1)
|
||||||
|
continue;
|
||||||
|
var cellWidthObj = this.$findCellWidthsForBlock(row);
|
||||||
|
var cellWidths = this.$setBlockCellWidthsToMax(cellWidthObj.cellWidths);
|
||||||
|
var rowIndex = cellWidthObj.firstRow;
|
||||||
|
for (var w = 0, l = cellWidths.length; w < l; w++) {
|
||||||
|
var widths = cellWidths[w];
|
||||||
|
checkedRows.push(rowIndex);
|
||||||
|
this.$adjustRow(rowIndex, widths);
|
||||||
|
rowIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.$inChange = false;
|
||||||
|
};
|
||||||
|
ElasticTabstopsLite.prototype.$findCellWidthsForBlock = function (row) {
|
||||||
|
var cellWidths = [], widths;
|
||||||
|
var rowIter = row;
|
||||||
|
while (rowIter >= 0) {
|
||||||
|
widths = this.$cellWidthsForRow(rowIter);
|
||||||
|
if (widths.length == 0)
|
||||||
|
break;
|
||||||
|
cellWidths.unshift(widths);
|
||||||
|
rowIter--;
|
||||||
|
}
|
||||||
|
var firstRow = rowIter + 1;
|
||||||
|
rowIter = row;
|
||||||
|
var numRows = this.$editor.session.getLength();
|
||||||
|
while (rowIter < numRows - 1) {
|
||||||
|
rowIter++;
|
||||||
|
widths = this.$cellWidthsForRow(rowIter);
|
||||||
|
if (widths.length == 0)
|
||||||
|
break;
|
||||||
|
cellWidths.push(widths);
|
||||||
|
}
|
||||||
|
return { cellWidths: cellWidths, firstRow: firstRow };
|
||||||
|
};
|
||||||
|
ElasticTabstopsLite.prototype.$cellWidthsForRow = function (row) {
|
||||||
|
var selectionColumns = this.$selectionColumnsForRow(row);
|
||||||
|
var tabs = [-1].concat(this.$tabsForRow(row));
|
||||||
|
var widths = tabs.map(function (el) { return 0; }).slice(1);
|
||||||
|
var line = this.$editor.session.getLine(row);
|
||||||
|
for (var i = 0, len = tabs.length - 1; i < len; i++) {
|
||||||
|
var leftEdge = tabs[i] + 1;
|
||||||
|
var rightEdge = tabs[i + 1];
|
||||||
|
var rightmostSelection = this.$rightmostSelectionInCell(selectionColumns, rightEdge);
|
||||||
|
var cell = line.substring(leftEdge, rightEdge);
|
||||||
|
widths[i] = Math.max(cell.replace(/\s+$/g, '').length, rightmostSelection - leftEdge);
|
||||||
|
}
|
||||||
|
return widths;
|
||||||
|
};
|
||||||
|
ElasticTabstopsLite.prototype.$selectionColumnsForRow = function (row) {
|
||||||
|
var selections = [], cursor = this.$editor.getCursorPosition();
|
||||||
|
if (this.$editor.session.getSelection().isEmpty()) {
|
||||||
|
if (row == cursor.row)
|
||||||
|
selections.push(cursor.column);
|
||||||
|
}
|
||||||
|
return selections;
|
||||||
|
};
|
||||||
|
ElasticTabstopsLite.prototype.$setBlockCellWidthsToMax = function (cellWidths) {
|
||||||
|
var startingNewBlock = true, blockStartRow, blockEndRow, maxWidth;
|
||||||
|
var columnInfo = this.$izip_longest(cellWidths);
|
||||||
|
for (var c = 0, l = columnInfo.length; c < l; c++) {
|
||||||
|
var column = columnInfo[c];
|
||||||
|
if (!column.push) {
|
||||||
|
console.error(column);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
column.push(NaN);
|
||||||
|
for (var r = 0, s = column.length; r < s; r++) {
|
||||||
|
var width = column[r];
|
||||||
|
if (startingNewBlock) {
|
||||||
|
blockStartRow = r;
|
||||||
|
maxWidth = 0;
|
||||||
|
startingNewBlock = false;
|
||||||
|
}
|
||||||
|
if (isNaN(width)) {
|
||||||
|
blockEndRow = r;
|
||||||
|
for (var j = blockStartRow; j < blockEndRow; j++) {
|
||||||
|
cellWidths[j][c] = maxWidth;
|
||||||
|
}
|
||||||
|
startingNewBlock = true;
|
||||||
|
}
|
||||||
|
maxWidth = Math.max(maxWidth, width);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cellWidths;
|
||||||
|
};
|
||||||
|
ElasticTabstopsLite.prototype.$rightmostSelectionInCell = function (selectionColumns, cellRightEdge) {
|
||||||
|
var rightmost = 0;
|
||||||
|
if (selectionColumns.length) {
|
||||||
|
var lengths = [];
|
||||||
|
for (var s = 0, length = selectionColumns.length; s < length; s++) {
|
||||||
|
if (selectionColumns[s] <= cellRightEdge)
|
||||||
|
lengths.push(s);
|
||||||
|
else
|
||||||
|
lengths.push(0);
|
||||||
|
}
|
||||||
|
rightmost = Math.max.apply(Math, lengths);
|
||||||
|
}
|
||||||
|
return rightmost;
|
||||||
|
};
|
||||||
|
ElasticTabstopsLite.prototype.$tabsForRow = function (row) {
|
||||||
|
var rowTabs = [], line = this.$editor.session.getLine(row), re = /\t/g, match;
|
||||||
|
while ((match = re.exec(line)) != null) {
|
||||||
|
rowTabs.push(match.index);
|
||||||
|
}
|
||||||
|
return rowTabs;
|
||||||
|
};
|
||||||
|
ElasticTabstopsLite.prototype.$adjustRow = function (row, widths) {
|
||||||
|
var rowTabs = this.$tabsForRow(row);
|
||||||
|
if (rowTabs.length == 0)
|
||||||
|
return;
|
||||||
|
var bias = 0, location = -1;
|
||||||
|
var expandedSet = this.$izip(widths, rowTabs);
|
||||||
|
for (var i = 0, l = expandedSet.length; i < l; i++) {
|
||||||
|
var w = expandedSet[i][0], it = expandedSet[i][1];
|
||||||
|
location += 1 + w;
|
||||||
|
it += bias;
|
||||||
|
var difference = location - it;
|
||||||
|
if (difference == 0)
|
||||||
|
continue;
|
||||||
|
var partialLine = this.$editor.session.getLine(row).substr(0, it);
|
||||||
|
var strippedPartialLine = partialLine.replace(/\s*$/g, "");
|
||||||
|
var ispaces = partialLine.length - strippedPartialLine.length;
|
||||||
|
if (difference > 0) {
|
||||||
|
this.$editor.session.getDocument().insertInLine({ row: row, column: it + 1 }, Array(difference + 1).join(" ") + "\t");
|
||||||
|
this.$editor.session.getDocument().removeInLine(row, it, it + 1);
|
||||||
|
bias += difference;
|
||||||
|
}
|
||||||
|
if (difference < 0 && ispaces >= -difference) {
|
||||||
|
this.$editor.session.getDocument().removeInLine(row, it + difference, it);
|
||||||
|
bias += difference;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ElasticTabstopsLite.prototype.$izip_longest = function (iterables) {
|
||||||
|
if (!iterables[0])
|
||||||
|
return [];
|
||||||
|
var longest = iterables[0].length;
|
||||||
|
var iterablesLength = iterables.length;
|
||||||
|
for (var i = 1; i < iterablesLength; i++) {
|
||||||
|
var iLength = iterables[i].length;
|
||||||
|
if (iLength > longest)
|
||||||
|
longest = iLength;
|
||||||
|
}
|
||||||
|
var expandedSet = [];
|
||||||
|
for (var l = 0; l < longest; l++) {
|
||||||
|
var set = [];
|
||||||
|
for (var i = 0; i < iterablesLength; i++) {
|
||||||
|
if (iterables[i][l] === "")
|
||||||
|
set.push(NaN);
|
||||||
|
else
|
||||||
|
set.push(iterables[i][l]);
|
||||||
|
}
|
||||||
|
expandedSet.push(set);
|
||||||
|
}
|
||||||
|
return expandedSet;
|
||||||
|
};
|
||||||
|
ElasticTabstopsLite.prototype.$izip = function (widths, tabs) {
|
||||||
|
var size = widths.length >= tabs.length ? tabs.length : widths.length;
|
||||||
|
var expandedSet = [];
|
||||||
|
for (var i = 0; i < size; i++) {
|
||||||
|
var set = [widths[i], tabs[i]];
|
||||||
|
expandedSet.push(set);
|
||||||
|
}
|
||||||
|
return expandedSet;
|
||||||
|
};
|
||||||
|
return ElasticTabstopsLite;
|
||||||
|
}());
|
||||||
|
exports.ElasticTabstopsLite = ElasticTabstopsLite;
|
||||||
|
var Editor = require("../editor").Editor;
|
||||||
|
require("../config").defineOptions(Editor.prototype, "editor", {
|
||||||
|
useElasticTabstops: {
|
||||||
|
set: function (val) {
|
||||||
|
if (val) {
|
||||||
|
if (!this.elasticTabstops)
|
||||||
|
this.elasticTabstops = new ElasticTabstopsLite(this);
|
||||||
|
this.commands.on("afterExec", this.elasticTabstops.onAfterExec);
|
||||||
|
this.commands.on("exec", this.elasticTabstops.onExec);
|
||||||
|
this.on("change", this.elasticTabstops.onChange);
|
||||||
|
}
|
||||||
|
else if (this.elasticTabstops) {
|
||||||
|
this.commands.removeListener("afterExec", this.elasticTabstops.onAfterExec);
|
||||||
|
this.commands.removeListener("exec", this.elasticTabstops.onExec);
|
||||||
|
this.removeListener("change", this.elasticTabstops.onChange);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/elastic_tabstops_lite"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
; (function() {
|
||||||
|
window.require(["ace/ext/error_marker"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,116 @@
|
||||||
|
define("ace/ext/hardwrap",["require","exports","module","ace/range","ace/editor","ace/config"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
function hardWrap(editor, options) {
|
||||||
|
var max = options.column || editor.getOption("printMarginColumn");
|
||||||
|
var allowMerge = options.allowMerge != false;
|
||||||
|
var row = Math.min(options.startRow, options.endRow);
|
||||||
|
var endRow = Math.max(options.startRow, options.endRow);
|
||||||
|
var session = editor.session;
|
||||||
|
while (row <= endRow) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
if (line.length > max) {
|
||||||
|
var space = findSpace(line, max, 5);
|
||||||
|
if (space) {
|
||||||
|
var indentation = /^\s*/.exec(line)[0];
|
||||||
|
session.replace(new Range(row, space.start, row, space.end), "\n" + indentation);
|
||||||
|
}
|
||||||
|
endRow++;
|
||||||
|
}
|
||||||
|
else if (allowMerge && /\S/.test(line) && row != endRow) {
|
||||||
|
var nextLine = session.getLine(row + 1);
|
||||||
|
if (nextLine && /\S/.test(nextLine)) {
|
||||||
|
var trimmedLine = line.replace(/\s+$/, "");
|
||||||
|
var trimmedNextLine = nextLine.replace(/^\s+/, "");
|
||||||
|
var mergedLine = trimmedLine + " " + trimmedNextLine;
|
||||||
|
var space = findSpace(mergedLine, max, 5);
|
||||||
|
if (space && space.start > trimmedLine.length || mergedLine.length < max) {
|
||||||
|
var replaceRange = new Range(row, trimmedLine.length, row + 1, nextLine.length - trimmedNextLine.length);
|
||||||
|
session.replace(replaceRange, " ");
|
||||||
|
row--;
|
||||||
|
endRow--;
|
||||||
|
}
|
||||||
|
else if (trimmedLine.length < line.length) {
|
||||||
|
session.remove(new Range(row, trimmedLine.length, row, line.length));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
row++;
|
||||||
|
}
|
||||||
|
function findSpace(line, max, min) {
|
||||||
|
if (line.length < max)
|
||||||
|
return;
|
||||||
|
var before = line.slice(0, max);
|
||||||
|
var after = line.slice(max);
|
||||||
|
var spaceAfter = /^(?:(\s+)|(\S+)(\s+))/.exec(after);
|
||||||
|
var spaceBefore = /(?:(\s+)|(\s+)(\S+))$/.exec(before);
|
||||||
|
var start = 0;
|
||||||
|
var end = 0;
|
||||||
|
if (spaceBefore && !spaceBefore[2]) {
|
||||||
|
start = max - spaceBefore[1].length;
|
||||||
|
end = max;
|
||||||
|
}
|
||||||
|
if (spaceAfter && !spaceAfter[2]) {
|
||||||
|
if (!start)
|
||||||
|
start = max;
|
||||||
|
end = max + spaceAfter[1].length;
|
||||||
|
}
|
||||||
|
if (start) {
|
||||||
|
return {
|
||||||
|
start: start,
|
||||||
|
end: end
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (spaceBefore && spaceBefore[2] && spaceBefore.index > min) {
|
||||||
|
return {
|
||||||
|
start: spaceBefore.index,
|
||||||
|
end: spaceBefore.index + spaceBefore[2].length
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (spaceAfter && spaceAfter[2]) {
|
||||||
|
start = max + spaceAfter[2].length;
|
||||||
|
return {
|
||||||
|
start: start,
|
||||||
|
end: start + spaceAfter[3].length
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function wrapAfterInput(e) {
|
||||||
|
if (e.command.name == "insertstring" && /\S/.test(e.args)) {
|
||||||
|
var editor = e.editor;
|
||||||
|
var cursor = editor.selection.cursor;
|
||||||
|
if (cursor.column <= editor.renderer.$printMarginColumn)
|
||||||
|
return;
|
||||||
|
var lastDelta = editor.session.$undoManager.$lastDelta;
|
||||||
|
hardWrap(editor, {
|
||||||
|
startRow: cursor.row, endRow: cursor.row,
|
||||||
|
allowMerge: false
|
||||||
|
});
|
||||||
|
if (lastDelta != editor.session.$undoManager.$lastDelta)
|
||||||
|
editor.session.markUndoGroup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var Editor = require("../editor").Editor;
|
||||||
|
require("../config").defineOptions(Editor.prototype, "editor", {
|
||||||
|
hardWrap: {
|
||||||
|
set: function (val) {
|
||||||
|
if (val) {
|
||||||
|
this.commands.on("afterExec", wrapAfterInput);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.commands.off("afterExec", wrapAfterInput);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
value: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
exports.hardWrap = hardWrap;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/hardwrap"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,136 @@
|
||||||
|
define("ace/ext/menu_tools/settings_menu.css",["require","exports","module"], function(require, exports, module){module.exports = "#ace_settingsmenu, #kbshortcutmenu {\n background-color: #F7F7F7;\n color: black;\n box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\n padding: 1em 0.5em 2em 1em;\n overflow: auto;\n position: absolute;\n margin: 0;\n bottom: 0;\n right: 0;\n top: 0;\n z-index: 9991;\n cursor: default;\n}\n\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\n box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\n background-color: rgba(255, 255, 255, 0.6);\n color: black;\n}\n\n.ace_optionsMenuEntry:hover {\n background-color: rgba(100, 100, 100, 0.1);\n transition: all 0.3s\n}\n\n.ace_closeButton {\n background: rgba(245, 146, 146, 0.5);\n border: 1px solid #F48A8A;\n border-radius: 50%;\n padding: 7px;\n position: absolute;\n right: -8px;\n top: -8px;\n z-index: 100000;\n}\n.ace_closeButton{\n background: rgba(245, 146, 146, 0.9);\n}\n.ace_optionsMenuKey {\n color: darkslateblue;\n font-weight: bold;\n}\n.ace_optionsMenuCommand {\n color: darkcyan;\n font-weight: normal;\n}\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\n vertical-align: middle;\n}\n\n.ace_optionsMenuEntry button[ace_selected_button=true] {\n background: #e7e7e7;\n box-shadow: 1px 0px 2px 0px #adadad inset;\n border-color: #adadad;\n}\n.ace_optionsMenuEntry button {\n background: white;\n border: 1px solid lightgray;\n margin: 0px;\n}\n.ace_optionsMenuEntry button:hover{\n background: #f0f0f0;\n}";
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/menu_tools/overlay_page",["require","exports","module","ace/lib/dom","ace/ext/menu_tools/settings_menu.css"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/
|
||||||
|
'use strict';
|
||||||
|
var dom = require("../../lib/dom");
|
||||||
|
var cssText = require("./settings_menu.css");
|
||||||
|
dom.importCssString(cssText, "settings_menu.css", false);
|
||||||
|
module.exports.overlayPage = function overlayPage(editor, contentElement, callback) {
|
||||||
|
var closer = document.createElement('div');
|
||||||
|
var ignoreFocusOut = false;
|
||||||
|
function documentEscListener(e) {
|
||||||
|
if (e.keyCode === 27) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function close() {
|
||||||
|
if (!closer)
|
||||||
|
return;
|
||||||
|
document.removeEventListener('keydown', documentEscListener);
|
||||||
|
closer.parentNode.removeChild(closer);
|
||||||
|
if (editor) {
|
||||||
|
editor.focus();
|
||||||
|
}
|
||||||
|
closer = null;
|
||||||
|
callback && callback();
|
||||||
|
}
|
||||||
|
function setIgnoreFocusOut(ignore) {
|
||||||
|
ignoreFocusOut = ignore;
|
||||||
|
if (ignore) {
|
||||||
|
closer.style.pointerEvents = "none";
|
||||||
|
contentElement.style.pointerEvents = "auto";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closer.style.cssText = 'margin: 0; padding: 0; ' +
|
||||||
|
'position: fixed; top:0; bottom:0; left:0; right:0;' +
|
||||||
|
'z-index: 9990; ' +
|
||||||
|
(editor ? 'background-color: rgba(0, 0, 0, 0.3);' : '');
|
||||||
|
closer.addEventListener('click', function (e) {
|
||||||
|
if (!ignoreFocusOut) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.addEventListener('keydown', documentEscListener);
|
||||||
|
contentElement.addEventListener('click', function (e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
closer.appendChild(contentElement);
|
||||||
|
document.body.appendChild(closer);
|
||||||
|
if (editor) {
|
||||||
|
editor.blur();
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
close: close,
|
||||||
|
setIgnoreFocusOut: setIgnoreFocusOut
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/menu_tools/get_editor_keyboard_shortcuts",["require","exports","module","ace/lib/keys"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/
|
||||||
|
"use strict"; var keys = require("../../lib/keys");
|
||||||
|
module.exports.getEditorKeybordShortcuts = function (editor) {
|
||||||
|
var KEY_MODS = keys.KEY_MODS;
|
||||||
|
var keybindings = [];
|
||||||
|
var commandMap = {};
|
||||||
|
editor.keyBinding.$handlers.forEach(function (handler) {
|
||||||
|
var ckb = handler["commandKeyBinding"];
|
||||||
|
for (var i in ckb) {
|
||||||
|
var key = i.replace(/(^|-)\w/g, function (x) { return x.toUpperCase(); });
|
||||||
|
var commands = ckb[i];
|
||||||
|
if (!Array.isArray(commands))
|
||||||
|
commands = [commands];
|
||||||
|
commands.forEach(function (command) {
|
||||||
|
if (typeof command != "string")
|
||||||
|
command = command.name;
|
||||||
|
if (commandMap[command]) {
|
||||||
|
commandMap[command].key += "|" + key;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
commandMap[command] = { key: key, command: command };
|
||||||
|
keybindings.push(commandMap[command]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return keybindings;
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/keybinding_menu",["require","exports","module","ace/editor","ace/ext/menu_tools/overlay_page","ace/ext/menu_tools/get_editor_keyboard_shortcuts"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/
|
||||||
|
"use strict";
|
||||||
|
var Editor = require("../editor").Editor;
|
||||||
|
function showKeyboardShortcuts(editor) {
|
||||||
|
if (!document.getElementById('kbshortcutmenu')) {
|
||||||
|
var overlayPage = require('./menu_tools/overlay_page').overlayPage;
|
||||||
|
var getEditorKeybordShortcuts = require('./menu_tools/get_editor_keyboard_shortcuts').getEditorKeybordShortcuts;
|
||||||
|
var kb = getEditorKeybordShortcuts(editor);
|
||||||
|
var el = document.createElement('div');
|
||||||
|
var commands = kb.reduce(function (previous, current) {
|
||||||
|
return previous + '<div class="ace_optionsMenuEntry"><span class="ace_optionsMenuCommand">'
|
||||||
|
+ current.command + '</span> : '
|
||||||
|
+ '<span class="ace_optionsMenuKey">' + current.key + '</span></div>';
|
||||||
|
}, '');
|
||||||
|
el.id = 'kbshortcutmenu';
|
||||||
|
el.innerHTML = '<h1>Keyboard Shortcuts</h1>' + commands + '</div>';
|
||||||
|
overlayPage(editor, el);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
module.exports.init = function (editor) {
|
||||||
|
Editor.prototype.showKeyboardShortcuts = function () {
|
||||||
|
showKeyboardShortcuts(this);
|
||||||
|
};
|
||||||
|
editor.commands.addCommands([{
|
||||||
|
name: "showKeyboardShortcuts",
|
||||||
|
bindKey: {
|
||||||
|
win: "Ctrl-Alt-h",
|
||||||
|
mac: "Command-Alt-h"
|
||||||
|
},
|
||||||
|
exec:
|
||||||
|
function (editor, line) {
|
||||||
|
editor.showKeyboardShortcuts();
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
};
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/keybinding_menu"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,56 @@
|
||||||
|
define("ace/ext/linking",["require","exports","module","ace/editor","ace/config"], function(require, exports, module){var Editor = require("../editor").Editor;
|
||||||
|
require("../config").defineOptions(Editor.prototype, "editor", {
|
||||||
|
enableLinking: {
|
||||||
|
set: function (val) {
|
||||||
|
if (val) {
|
||||||
|
this.on("click", onClick);
|
||||||
|
this.on("mousemove", onMouseMove);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.off("click", onClick);
|
||||||
|
this.off("mousemove", onMouseMove);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
value: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
exports.previousLinkingHover = false;
|
||||||
|
function onMouseMove(e) {
|
||||||
|
var editor = e.editor;
|
||||||
|
var ctrl = e.getAccelKey();
|
||||||
|
if (ctrl) {
|
||||||
|
var editor = e.editor;
|
||||||
|
var docPos = e.getDocumentPosition();
|
||||||
|
var session = editor.session;
|
||||||
|
var token = session.getTokenAt(docPos.row, docPos.column);
|
||||||
|
if (exports.previousLinkingHover && exports.previousLinkingHover != token) {
|
||||||
|
editor._emit("linkHoverOut");
|
||||||
|
}
|
||||||
|
editor._emit("linkHover", { position: docPos, token: token });
|
||||||
|
exports.previousLinkingHover = token;
|
||||||
|
}
|
||||||
|
else if (exports.previousLinkingHover) {
|
||||||
|
editor._emit("linkHoverOut");
|
||||||
|
exports.previousLinkingHover = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function onClick(e) {
|
||||||
|
var ctrl = e.getAccelKey();
|
||||||
|
var button = e.getButton();
|
||||||
|
if (button == 0 && ctrl) {
|
||||||
|
var editor = e.editor;
|
||||||
|
var docPos = e.getDocumentPosition();
|
||||||
|
var session = editor.session;
|
||||||
|
var token = session.getTokenAt(docPos.row, docPos.column);
|
||||||
|
editor._emit("linkClick", { position: docPos, token: token });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/linking"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,264 @@
|
||||||
|
define("ace/ext/modelist",["require","exports","module"], function(require, exports, module){"use strict";
|
||||||
|
var modes = [];
|
||||||
|
function getModeForPath(path) {
|
||||||
|
var mode = modesByName.text;
|
||||||
|
var fileName = path.split(/[\/\\]/).pop();
|
||||||
|
for (var i = 0; i < modes.length; i++) {
|
||||||
|
if (modes[i].supportsFile(fileName)) {
|
||||||
|
mode = modes[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
var Mode = /** @class */ (function () {
|
||||||
|
function Mode(name, caption, extensions) {
|
||||||
|
this.name = name;
|
||||||
|
this.caption = caption;
|
||||||
|
this.mode = "ace/mode/" + name;
|
||||||
|
this.extensions = extensions;
|
||||||
|
var re;
|
||||||
|
if (/\^/.test(extensions)) {
|
||||||
|
re = extensions.replace(/\|(\^)?/g, function (a, b) {
|
||||||
|
return "$|" + (b ? "^" : "^.*\\.");
|
||||||
|
}) + "$";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
re = "^.*\\.(" + extensions + ")$";
|
||||||
|
}
|
||||||
|
this.extRe = new RegExp(re, "gi");
|
||||||
|
}
|
||||||
|
Mode.prototype.supportsFile = function (filename) {
|
||||||
|
return filename.match(this.extRe);
|
||||||
|
};
|
||||||
|
return Mode;
|
||||||
|
}());
|
||||||
|
var supportedModes = {
|
||||||
|
ABAP: ["abap"],
|
||||||
|
ABC: ["abc"],
|
||||||
|
ActionScript: ["as"],
|
||||||
|
ADA: ["ada|adb"],
|
||||||
|
Alda: ["alda"],
|
||||||
|
Apache_Conf: ["^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd"],
|
||||||
|
Apex: ["apex|cls|trigger|tgr"],
|
||||||
|
AQL: ["aql"],
|
||||||
|
AsciiDoc: ["asciidoc|adoc"],
|
||||||
|
ASL: ["dsl|asl|asl.json"],
|
||||||
|
Assembly_ARM32: ["s"],
|
||||||
|
Assembly_x86: ["asm|a"],
|
||||||
|
Astro: ["astro"],
|
||||||
|
AutoHotKey: ["ahk"],
|
||||||
|
BatchFile: ["bat|cmd"],
|
||||||
|
BibTeX: ["bib"],
|
||||||
|
C_Cpp: ["cpp|c|cc|cxx|h|hh|hpp|ino"],
|
||||||
|
C9Search: ["c9search_results"],
|
||||||
|
Cirru: ["cirru|cr"],
|
||||||
|
Clojure: ["clj|cljs"],
|
||||||
|
Cobol: ["CBL|COB"],
|
||||||
|
coffee: ["coffee|cf|cson|^Cakefile"],
|
||||||
|
ColdFusion: ["cfm|cfc"],
|
||||||
|
Crystal: ["cr"],
|
||||||
|
CSharp: ["cs"],
|
||||||
|
Csound_Document: ["csd"],
|
||||||
|
Csound_Orchestra: ["orc"],
|
||||||
|
Csound_Score: ["sco"],
|
||||||
|
CSS: ["css"],
|
||||||
|
Curly: ["curly"],
|
||||||
|
Cuttlefish: ["conf"],
|
||||||
|
D: ["d|di"],
|
||||||
|
Dart: ["dart"],
|
||||||
|
Diff: ["diff|patch"],
|
||||||
|
Django: ["djt|html.djt|dj.html|djhtml"],
|
||||||
|
Dockerfile: ["^Dockerfile"],
|
||||||
|
Dot: ["dot"],
|
||||||
|
Drools: ["drl"],
|
||||||
|
Edifact: ["edi"],
|
||||||
|
Eiffel: ["e|ge"],
|
||||||
|
EJS: ["ejs"],
|
||||||
|
Elixir: ["ex|exs"],
|
||||||
|
Elm: ["elm"],
|
||||||
|
Erlang: ["erl|hrl"],
|
||||||
|
Flix: ["flix"],
|
||||||
|
Forth: ["frt|fs|ldr|fth|4th"],
|
||||||
|
Fortran: ["f|f90"],
|
||||||
|
FSharp: ["fsi|fs|ml|mli|fsx|fsscript"],
|
||||||
|
FSL: ["fsl"],
|
||||||
|
FTL: ["ftl"],
|
||||||
|
Gcode: ["gcode"],
|
||||||
|
Gherkin: ["feature"],
|
||||||
|
Gitignore: ["^.gitignore"],
|
||||||
|
Glsl: ["glsl|frag|vert"],
|
||||||
|
Gobstones: ["gbs"],
|
||||||
|
golang: ["go"],
|
||||||
|
GraphQLSchema: ["gql"],
|
||||||
|
Groovy: ["groovy"],
|
||||||
|
HAML: ["haml"],
|
||||||
|
Handlebars: ["hbs|handlebars|tpl|mustache"],
|
||||||
|
Haskell: ["hs"],
|
||||||
|
Haskell_Cabal: ["cabal"],
|
||||||
|
haXe: ["hx"],
|
||||||
|
Hjson: ["hjson"],
|
||||||
|
HTML: ["html|htm|xhtml|we|wpy"],
|
||||||
|
HTML_Elixir: ["eex|html.eex"],
|
||||||
|
HTML_Ruby: ["erb|rhtml|html.erb"],
|
||||||
|
INI: ["ini|conf|cfg|prefs"],
|
||||||
|
Io: ["io"],
|
||||||
|
Ion: ["ion"],
|
||||||
|
Jack: ["jack"],
|
||||||
|
Jade: ["jade|pug"],
|
||||||
|
Java: ["java"],
|
||||||
|
JavaScript: ["js|jsm|cjs|mjs"],
|
||||||
|
JEXL: ["jexl"],
|
||||||
|
JSON: ["json"],
|
||||||
|
JSON5: ["json5"],
|
||||||
|
JSONiq: ["jq"],
|
||||||
|
JSP: ["jsp"],
|
||||||
|
JSSM: ["jssm|jssm_state"],
|
||||||
|
JSX: ["jsx"],
|
||||||
|
Julia: ["jl"],
|
||||||
|
Kotlin: ["kt|kts"],
|
||||||
|
LaTeX: ["tex|latex|ltx|bib"],
|
||||||
|
Latte: ["latte"],
|
||||||
|
LESS: ["less"],
|
||||||
|
Liquid: ["liquid"],
|
||||||
|
Lisp: ["lisp"],
|
||||||
|
LiveScript: ["ls"],
|
||||||
|
Log: ["log"],
|
||||||
|
LogiQL: ["logic|lql"],
|
||||||
|
Logtalk: ["lgt"],
|
||||||
|
LSL: ["lsl"],
|
||||||
|
Lua: ["lua"],
|
||||||
|
LuaPage: ["lp"],
|
||||||
|
Lucene: ["lucene"],
|
||||||
|
Makefile: ["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"],
|
||||||
|
Markdown: ["md|markdown"],
|
||||||
|
Mask: ["mask"],
|
||||||
|
MATLAB: ["matlab"],
|
||||||
|
Maze: ["mz"],
|
||||||
|
MediaWiki: ["wiki|mediawiki"],
|
||||||
|
MEL: ["mel"],
|
||||||
|
MIPS: ["s|asm"],
|
||||||
|
MIXAL: ["mixal"],
|
||||||
|
MUSHCode: ["mc|mush"],
|
||||||
|
MySQL: ["mysql"],
|
||||||
|
Nasal: ["nas"],
|
||||||
|
Nginx: ["nginx|conf"],
|
||||||
|
Nim: ["nim"],
|
||||||
|
Nix: ["nix"],
|
||||||
|
NSIS: ["nsi|nsh"],
|
||||||
|
Nunjucks: ["nunjucks|nunjs|nj|njk"],
|
||||||
|
ObjectiveC: ["m|mm"],
|
||||||
|
OCaml: ["ml|mli"],
|
||||||
|
Odin: ["odin"],
|
||||||
|
PartiQL: ["partiql|pql"],
|
||||||
|
Pascal: ["pas|p"],
|
||||||
|
Perl: ["pl|pm"],
|
||||||
|
pgSQL: ["pgsql"],
|
||||||
|
PHP: ["php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module"],
|
||||||
|
PHP_Laravel_blade: ["blade.php"],
|
||||||
|
Pig: ["pig"],
|
||||||
|
PLSQL: ["plsql"],
|
||||||
|
Powershell: ["ps1"],
|
||||||
|
Praat: ["praat|praatscript|psc|proc"],
|
||||||
|
Prisma: ["prisma"],
|
||||||
|
Prolog: ["plg|prolog"],
|
||||||
|
Properties: ["properties"],
|
||||||
|
Protobuf: ["proto"],
|
||||||
|
PRQL: ["prql"],
|
||||||
|
Puppet: ["epp|pp"],
|
||||||
|
Python: ["py"],
|
||||||
|
QML: ["qml"],
|
||||||
|
R: ["r"],
|
||||||
|
Raku: ["raku|rakumod|rakutest|p6|pl6|pm6"],
|
||||||
|
Razor: ["cshtml|asp"],
|
||||||
|
RDoc: ["Rd"],
|
||||||
|
Red: ["red|reds"],
|
||||||
|
RHTML: ["Rhtml"],
|
||||||
|
Robot: ["robot|resource"],
|
||||||
|
RST: ["rst"],
|
||||||
|
Ruby: ["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"],
|
||||||
|
Rust: ["rs"],
|
||||||
|
SaC: ["sac"],
|
||||||
|
SASS: ["sass"],
|
||||||
|
SCAD: ["scad"],
|
||||||
|
Scala: ["scala|sbt"],
|
||||||
|
Scheme: ["scm|sm|rkt|oak|scheme"],
|
||||||
|
Scrypt: ["scrypt"],
|
||||||
|
SCSS: ["scss"],
|
||||||
|
SH: ["sh|bash|^.bashrc"],
|
||||||
|
SJS: ["sjs"],
|
||||||
|
Slim: ["slim|skim"],
|
||||||
|
Smarty: ["smarty|tpl"],
|
||||||
|
Smithy: ["smithy"],
|
||||||
|
snippets: ["snippets"],
|
||||||
|
Soy_Template: ["soy"],
|
||||||
|
Space: ["space"],
|
||||||
|
SPARQL: ["rq"],
|
||||||
|
SQL: ["sql"],
|
||||||
|
SQLServer: ["sqlserver"],
|
||||||
|
Stylus: ["styl|stylus"],
|
||||||
|
SVG: ["svg"],
|
||||||
|
Swift: ["swift"],
|
||||||
|
Tcl: ["tcl"],
|
||||||
|
Terraform: ["tf", "tfvars", "terragrunt"],
|
||||||
|
Tex: ["tex"],
|
||||||
|
Text: ["txt"],
|
||||||
|
Textile: ["textile"],
|
||||||
|
Toml: ["toml"],
|
||||||
|
TSX: ["tsx"],
|
||||||
|
Turtle: ["ttl"],
|
||||||
|
Twig: ["twig|swig"],
|
||||||
|
Typescript: ["ts|mts|cts|typescript|str"],
|
||||||
|
Vala: ["vala"],
|
||||||
|
VBScript: ["vbs|vb"],
|
||||||
|
Velocity: ["vm"],
|
||||||
|
Verilog: ["v|vh|sv|svh"],
|
||||||
|
VHDL: ["vhd|vhdl"],
|
||||||
|
Visualforce: ["vfp|component|page"],
|
||||||
|
Vue: ["vue"],
|
||||||
|
Wollok: ["wlk|wpgm|wtest"],
|
||||||
|
XML: ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml"],
|
||||||
|
XQuery: ["xq"],
|
||||||
|
YAML: ["yaml|yml"],
|
||||||
|
Zeek: ["zeek|bro"],
|
||||||
|
Zig: ["zig"]
|
||||||
|
};
|
||||||
|
var nameOverrides = {
|
||||||
|
ObjectiveC: "Objective-C",
|
||||||
|
CSharp: "C#",
|
||||||
|
golang: "Go",
|
||||||
|
C_Cpp: "C and C++",
|
||||||
|
Csound_Document: "Csound Document",
|
||||||
|
Csound_Orchestra: "Csound",
|
||||||
|
Csound_Score: "Csound Score",
|
||||||
|
coffee: "CoffeeScript",
|
||||||
|
HTML_Ruby: "HTML (Ruby)",
|
||||||
|
HTML_Elixir: "HTML (Elixir)",
|
||||||
|
FTL: "FreeMarker",
|
||||||
|
PHP_Laravel_blade: "PHP (Blade Template)",
|
||||||
|
Perl6: "Perl 6",
|
||||||
|
AutoHotKey: "AutoHotkey / AutoIt"
|
||||||
|
};
|
||||||
|
var modesByName = {};
|
||||||
|
for (var name in supportedModes) {
|
||||||
|
var data = supportedModes[name];
|
||||||
|
var displayName = (nameOverrides[name] || name).replace(/_/g, " ");
|
||||||
|
var filename = name.toLowerCase();
|
||||||
|
var mode = new Mode(filename, displayName, data[0]);
|
||||||
|
modesByName[filename] = mode;
|
||||||
|
modes.push(mode);
|
||||||
|
}
|
||||||
|
module.exports = {
|
||||||
|
getModeForPath: getModeForPath,
|
||||||
|
modes: modes,
|
||||||
|
modesByName: modesByName
|
||||||
|
};
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/modelist"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,767 @@
|
||||||
|
define("ace/ext/menu_tools/settings_menu.css",["require","exports","module"], function(require, exports, module){module.exports = "#ace_settingsmenu, #kbshortcutmenu {\n background-color: #F7F7F7;\n color: black;\n box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\n padding: 1em 0.5em 2em 1em;\n overflow: auto;\n position: absolute;\n margin: 0;\n bottom: 0;\n right: 0;\n top: 0;\n z-index: 9991;\n cursor: default;\n}\n\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\n box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\n background-color: rgba(255, 255, 255, 0.6);\n color: black;\n}\n\n.ace_optionsMenuEntry:hover {\n background-color: rgba(100, 100, 100, 0.1);\n transition: all 0.3s\n}\n\n.ace_closeButton {\n background: rgba(245, 146, 146, 0.5);\n border: 1px solid #F48A8A;\n border-radius: 50%;\n padding: 7px;\n position: absolute;\n right: -8px;\n top: -8px;\n z-index: 100000;\n}\n.ace_closeButton{\n background: rgba(245, 146, 146, 0.9);\n}\n.ace_optionsMenuKey {\n color: darkslateblue;\n font-weight: bold;\n}\n.ace_optionsMenuCommand {\n color: darkcyan;\n font-weight: normal;\n}\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\n vertical-align: middle;\n}\n\n.ace_optionsMenuEntry button[ace_selected_button=true] {\n background: #e7e7e7;\n box-shadow: 1px 0px 2px 0px #adadad inset;\n border-color: #adadad;\n}\n.ace_optionsMenuEntry button {\n background: white;\n border: 1px solid lightgray;\n margin: 0px;\n}\n.ace_optionsMenuEntry button:hover{\n background: #f0f0f0;\n}";
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/menu_tools/overlay_page",["require","exports","module","ace/lib/dom","ace/ext/menu_tools/settings_menu.css"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/
|
||||||
|
'use strict';
|
||||||
|
var dom = require("../../lib/dom");
|
||||||
|
var cssText = require("./settings_menu.css");
|
||||||
|
dom.importCssString(cssText, "settings_menu.css", false);
|
||||||
|
module.exports.overlayPage = function overlayPage(editor, contentElement, callback) {
|
||||||
|
var closer = document.createElement('div');
|
||||||
|
var ignoreFocusOut = false;
|
||||||
|
function documentEscListener(e) {
|
||||||
|
if (e.keyCode === 27) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function close() {
|
||||||
|
if (!closer)
|
||||||
|
return;
|
||||||
|
document.removeEventListener('keydown', documentEscListener);
|
||||||
|
closer.parentNode.removeChild(closer);
|
||||||
|
if (editor) {
|
||||||
|
editor.focus();
|
||||||
|
}
|
||||||
|
closer = null;
|
||||||
|
callback && callback();
|
||||||
|
}
|
||||||
|
function setIgnoreFocusOut(ignore) {
|
||||||
|
ignoreFocusOut = ignore;
|
||||||
|
if (ignore) {
|
||||||
|
closer.style.pointerEvents = "none";
|
||||||
|
contentElement.style.pointerEvents = "auto";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closer.style.cssText = 'margin: 0; padding: 0; ' +
|
||||||
|
'position: fixed; top:0; bottom:0; left:0; right:0;' +
|
||||||
|
'z-index: 9990; ' +
|
||||||
|
(editor ? 'background-color: rgba(0, 0, 0, 0.3);' : '');
|
||||||
|
closer.addEventListener('click', function (e) {
|
||||||
|
if (!ignoreFocusOut) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.addEventListener('keydown', documentEscListener);
|
||||||
|
contentElement.addEventListener('click', function (e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
closer.appendChild(contentElement);
|
||||||
|
document.body.appendChild(closer);
|
||||||
|
if (editor) {
|
||||||
|
editor.blur();
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
close: close,
|
||||||
|
setIgnoreFocusOut: setIgnoreFocusOut
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/modelist",["require","exports","module"], function(require, exports, module){"use strict";
|
||||||
|
var modes = [];
|
||||||
|
function getModeForPath(path) {
|
||||||
|
var mode = modesByName.text;
|
||||||
|
var fileName = path.split(/[\/\\]/).pop();
|
||||||
|
for (var i = 0; i < modes.length; i++) {
|
||||||
|
if (modes[i].supportsFile(fileName)) {
|
||||||
|
mode = modes[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
var Mode = /** @class */ (function () {
|
||||||
|
function Mode(name, caption, extensions) {
|
||||||
|
this.name = name;
|
||||||
|
this.caption = caption;
|
||||||
|
this.mode = "ace/mode/" + name;
|
||||||
|
this.extensions = extensions;
|
||||||
|
var re;
|
||||||
|
if (/\^/.test(extensions)) {
|
||||||
|
re = extensions.replace(/\|(\^)?/g, function (a, b) {
|
||||||
|
return "$|" + (b ? "^" : "^.*\\.");
|
||||||
|
}) + "$";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
re = "^.*\\.(" + extensions + ")$";
|
||||||
|
}
|
||||||
|
this.extRe = new RegExp(re, "gi");
|
||||||
|
}
|
||||||
|
Mode.prototype.supportsFile = function (filename) {
|
||||||
|
return filename.match(this.extRe);
|
||||||
|
};
|
||||||
|
return Mode;
|
||||||
|
}());
|
||||||
|
var supportedModes = {
|
||||||
|
ABAP: ["abap"],
|
||||||
|
ABC: ["abc"],
|
||||||
|
ActionScript: ["as"],
|
||||||
|
ADA: ["ada|adb"],
|
||||||
|
Alda: ["alda"],
|
||||||
|
Apache_Conf: ["^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd"],
|
||||||
|
Apex: ["apex|cls|trigger|tgr"],
|
||||||
|
AQL: ["aql"],
|
||||||
|
AsciiDoc: ["asciidoc|adoc"],
|
||||||
|
ASL: ["dsl|asl|asl.json"],
|
||||||
|
Assembly_ARM32: ["s"],
|
||||||
|
Assembly_x86: ["asm|a"],
|
||||||
|
Astro: ["astro"],
|
||||||
|
AutoHotKey: ["ahk"],
|
||||||
|
BatchFile: ["bat|cmd"],
|
||||||
|
BibTeX: ["bib"],
|
||||||
|
C_Cpp: ["cpp|c|cc|cxx|h|hh|hpp|ino"],
|
||||||
|
C9Search: ["c9search_results"],
|
||||||
|
Cirru: ["cirru|cr"],
|
||||||
|
Clojure: ["clj|cljs"],
|
||||||
|
Cobol: ["CBL|COB"],
|
||||||
|
coffee: ["coffee|cf|cson|^Cakefile"],
|
||||||
|
ColdFusion: ["cfm|cfc"],
|
||||||
|
Crystal: ["cr"],
|
||||||
|
CSharp: ["cs"],
|
||||||
|
Csound_Document: ["csd"],
|
||||||
|
Csound_Orchestra: ["orc"],
|
||||||
|
Csound_Score: ["sco"],
|
||||||
|
CSS: ["css"],
|
||||||
|
Curly: ["curly"],
|
||||||
|
Cuttlefish: ["conf"],
|
||||||
|
D: ["d|di"],
|
||||||
|
Dart: ["dart"],
|
||||||
|
Diff: ["diff|patch"],
|
||||||
|
Django: ["djt|html.djt|dj.html|djhtml"],
|
||||||
|
Dockerfile: ["^Dockerfile"],
|
||||||
|
Dot: ["dot"],
|
||||||
|
Drools: ["drl"],
|
||||||
|
Edifact: ["edi"],
|
||||||
|
Eiffel: ["e|ge"],
|
||||||
|
EJS: ["ejs"],
|
||||||
|
Elixir: ["ex|exs"],
|
||||||
|
Elm: ["elm"],
|
||||||
|
Erlang: ["erl|hrl"],
|
||||||
|
Flix: ["flix"],
|
||||||
|
Forth: ["frt|fs|ldr|fth|4th"],
|
||||||
|
Fortran: ["f|f90"],
|
||||||
|
FSharp: ["fsi|fs|ml|mli|fsx|fsscript"],
|
||||||
|
FSL: ["fsl"],
|
||||||
|
FTL: ["ftl"],
|
||||||
|
Gcode: ["gcode"],
|
||||||
|
Gherkin: ["feature"],
|
||||||
|
Gitignore: ["^.gitignore"],
|
||||||
|
Glsl: ["glsl|frag|vert"],
|
||||||
|
Gobstones: ["gbs"],
|
||||||
|
golang: ["go"],
|
||||||
|
GraphQLSchema: ["gql"],
|
||||||
|
Groovy: ["groovy"],
|
||||||
|
HAML: ["haml"],
|
||||||
|
Handlebars: ["hbs|handlebars|tpl|mustache"],
|
||||||
|
Haskell: ["hs"],
|
||||||
|
Haskell_Cabal: ["cabal"],
|
||||||
|
haXe: ["hx"],
|
||||||
|
Hjson: ["hjson"],
|
||||||
|
HTML: ["html|htm|xhtml|we|wpy"],
|
||||||
|
HTML_Elixir: ["eex|html.eex"],
|
||||||
|
HTML_Ruby: ["erb|rhtml|html.erb"],
|
||||||
|
INI: ["ini|conf|cfg|prefs"],
|
||||||
|
Io: ["io"],
|
||||||
|
Ion: ["ion"],
|
||||||
|
Jack: ["jack"],
|
||||||
|
Jade: ["jade|pug"],
|
||||||
|
Java: ["java"],
|
||||||
|
JavaScript: ["js|jsm|cjs|mjs"],
|
||||||
|
JEXL: ["jexl"],
|
||||||
|
JSON: ["json"],
|
||||||
|
JSON5: ["json5"],
|
||||||
|
JSONiq: ["jq"],
|
||||||
|
JSP: ["jsp"],
|
||||||
|
JSSM: ["jssm|jssm_state"],
|
||||||
|
JSX: ["jsx"],
|
||||||
|
Julia: ["jl"],
|
||||||
|
Kotlin: ["kt|kts"],
|
||||||
|
LaTeX: ["tex|latex|ltx|bib"],
|
||||||
|
Latte: ["latte"],
|
||||||
|
LESS: ["less"],
|
||||||
|
Liquid: ["liquid"],
|
||||||
|
Lisp: ["lisp"],
|
||||||
|
LiveScript: ["ls"],
|
||||||
|
Log: ["log"],
|
||||||
|
LogiQL: ["logic|lql"],
|
||||||
|
Logtalk: ["lgt"],
|
||||||
|
LSL: ["lsl"],
|
||||||
|
Lua: ["lua"],
|
||||||
|
LuaPage: ["lp"],
|
||||||
|
Lucene: ["lucene"],
|
||||||
|
Makefile: ["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"],
|
||||||
|
Markdown: ["md|markdown"],
|
||||||
|
Mask: ["mask"],
|
||||||
|
MATLAB: ["matlab"],
|
||||||
|
Maze: ["mz"],
|
||||||
|
MediaWiki: ["wiki|mediawiki"],
|
||||||
|
MEL: ["mel"],
|
||||||
|
MIPS: ["s|asm"],
|
||||||
|
MIXAL: ["mixal"],
|
||||||
|
MUSHCode: ["mc|mush"],
|
||||||
|
MySQL: ["mysql"],
|
||||||
|
Nasal: ["nas"],
|
||||||
|
Nginx: ["nginx|conf"],
|
||||||
|
Nim: ["nim"],
|
||||||
|
Nix: ["nix"],
|
||||||
|
NSIS: ["nsi|nsh"],
|
||||||
|
Nunjucks: ["nunjucks|nunjs|nj|njk"],
|
||||||
|
ObjectiveC: ["m|mm"],
|
||||||
|
OCaml: ["ml|mli"],
|
||||||
|
Odin: ["odin"],
|
||||||
|
PartiQL: ["partiql|pql"],
|
||||||
|
Pascal: ["pas|p"],
|
||||||
|
Perl: ["pl|pm"],
|
||||||
|
pgSQL: ["pgsql"],
|
||||||
|
PHP: ["php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module"],
|
||||||
|
PHP_Laravel_blade: ["blade.php"],
|
||||||
|
Pig: ["pig"],
|
||||||
|
PLSQL: ["plsql"],
|
||||||
|
Powershell: ["ps1"],
|
||||||
|
Praat: ["praat|praatscript|psc|proc"],
|
||||||
|
Prisma: ["prisma"],
|
||||||
|
Prolog: ["plg|prolog"],
|
||||||
|
Properties: ["properties"],
|
||||||
|
Protobuf: ["proto"],
|
||||||
|
PRQL: ["prql"],
|
||||||
|
Puppet: ["epp|pp"],
|
||||||
|
Python: ["py"],
|
||||||
|
QML: ["qml"],
|
||||||
|
R: ["r"],
|
||||||
|
Raku: ["raku|rakumod|rakutest|p6|pl6|pm6"],
|
||||||
|
Razor: ["cshtml|asp"],
|
||||||
|
RDoc: ["Rd"],
|
||||||
|
Red: ["red|reds"],
|
||||||
|
RHTML: ["Rhtml"],
|
||||||
|
Robot: ["robot|resource"],
|
||||||
|
RST: ["rst"],
|
||||||
|
Ruby: ["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"],
|
||||||
|
Rust: ["rs"],
|
||||||
|
SaC: ["sac"],
|
||||||
|
SASS: ["sass"],
|
||||||
|
SCAD: ["scad"],
|
||||||
|
Scala: ["scala|sbt"],
|
||||||
|
Scheme: ["scm|sm|rkt|oak|scheme"],
|
||||||
|
Scrypt: ["scrypt"],
|
||||||
|
SCSS: ["scss"],
|
||||||
|
SH: ["sh|bash|^.bashrc"],
|
||||||
|
SJS: ["sjs"],
|
||||||
|
Slim: ["slim|skim"],
|
||||||
|
Smarty: ["smarty|tpl"],
|
||||||
|
Smithy: ["smithy"],
|
||||||
|
snippets: ["snippets"],
|
||||||
|
Soy_Template: ["soy"],
|
||||||
|
Space: ["space"],
|
||||||
|
SPARQL: ["rq"],
|
||||||
|
SQL: ["sql"],
|
||||||
|
SQLServer: ["sqlserver"],
|
||||||
|
Stylus: ["styl|stylus"],
|
||||||
|
SVG: ["svg"],
|
||||||
|
Swift: ["swift"],
|
||||||
|
Tcl: ["tcl"],
|
||||||
|
Terraform: ["tf", "tfvars", "terragrunt"],
|
||||||
|
Tex: ["tex"],
|
||||||
|
Text: ["txt"],
|
||||||
|
Textile: ["textile"],
|
||||||
|
Toml: ["toml"],
|
||||||
|
TSX: ["tsx"],
|
||||||
|
Turtle: ["ttl"],
|
||||||
|
Twig: ["twig|swig"],
|
||||||
|
Typescript: ["ts|mts|cts|typescript|str"],
|
||||||
|
Vala: ["vala"],
|
||||||
|
VBScript: ["vbs|vb"],
|
||||||
|
Velocity: ["vm"],
|
||||||
|
Verilog: ["v|vh|sv|svh"],
|
||||||
|
VHDL: ["vhd|vhdl"],
|
||||||
|
Visualforce: ["vfp|component|page"],
|
||||||
|
Vue: ["vue"],
|
||||||
|
Wollok: ["wlk|wpgm|wtest"],
|
||||||
|
XML: ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml"],
|
||||||
|
XQuery: ["xq"],
|
||||||
|
YAML: ["yaml|yml"],
|
||||||
|
Zeek: ["zeek|bro"],
|
||||||
|
Zig: ["zig"]
|
||||||
|
};
|
||||||
|
var nameOverrides = {
|
||||||
|
ObjectiveC: "Objective-C",
|
||||||
|
CSharp: "C#",
|
||||||
|
golang: "Go",
|
||||||
|
C_Cpp: "C and C++",
|
||||||
|
Csound_Document: "Csound Document",
|
||||||
|
Csound_Orchestra: "Csound",
|
||||||
|
Csound_Score: "Csound Score",
|
||||||
|
coffee: "CoffeeScript",
|
||||||
|
HTML_Ruby: "HTML (Ruby)",
|
||||||
|
HTML_Elixir: "HTML (Elixir)",
|
||||||
|
FTL: "FreeMarker",
|
||||||
|
PHP_Laravel_blade: "PHP (Blade Template)",
|
||||||
|
Perl6: "Perl 6",
|
||||||
|
AutoHotKey: "AutoHotkey / AutoIt"
|
||||||
|
};
|
||||||
|
var modesByName = {};
|
||||||
|
for (var name in supportedModes) {
|
||||||
|
var data = supportedModes[name];
|
||||||
|
var displayName = (nameOverrides[name] || name).replace(/_/g, " ");
|
||||||
|
var filename = name.toLowerCase();
|
||||||
|
var mode = new Mode(filename, displayName, data[0]);
|
||||||
|
modesByName[filename] = mode;
|
||||||
|
modes.push(mode);
|
||||||
|
}
|
||||||
|
module.exports = {
|
||||||
|
getModeForPath: getModeForPath,
|
||||||
|
modes: modes,
|
||||||
|
modesByName: modesByName
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/themelist",["require","exports","module"], function(require, exports, module){/**
|
||||||
|
* Generates a list of themes available when ace was built.
|
||||||
|
* @fileOverview Generates a list of themes available when ace was built.
|
||||||
|
* @author <a href="mailto:matthewkastor@gmail.com">
|
||||||
|
* Matthew Christopher Kastor-Inare III </a><br />
|
||||||
|
* ☭ Hial Atropa!! ☭
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var themeData = [
|
||||||
|
["Chrome"],
|
||||||
|
["Clouds"],
|
||||||
|
["Crimson Editor"],
|
||||||
|
["Dawn"],
|
||||||
|
["Dreamweaver"],
|
||||||
|
["Eclipse"],
|
||||||
|
["GitHub Light Default"],
|
||||||
|
["GitHub (Legacy)", "github", "light"],
|
||||||
|
["IPlastic"],
|
||||||
|
["Solarized Light"],
|
||||||
|
["TextMate"],
|
||||||
|
["Tomorrow"],
|
||||||
|
["XCode"],
|
||||||
|
["Kuroir"],
|
||||||
|
["KatzenMilch"],
|
||||||
|
["SQL Server", "sqlserver", "light"],
|
||||||
|
["CloudEditor", "cloud_editor", "light"],
|
||||||
|
["Ambiance", "ambiance", "dark"],
|
||||||
|
["Chaos", "chaos", "dark"],
|
||||||
|
["Clouds Midnight", "clouds_midnight", "dark"],
|
||||||
|
["Dracula", "", "dark"],
|
||||||
|
["Cobalt", "cobalt", "dark"],
|
||||||
|
["Gruvbox", "gruvbox", "dark"],
|
||||||
|
["Green on Black", "gob", "dark"],
|
||||||
|
["idle Fingers", "idle_fingers", "dark"],
|
||||||
|
["krTheme", "kr_theme", "dark"],
|
||||||
|
["Merbivore", "merbivore", "dark"],
|
||||||
|
["Merbivore Soft", "merbivore_soft", "dark"],
|
||||||
|
["Mono Industrial", "mono_industrial", "dark"],
|
||||||
|
["Monokai", "monokai", "dark"],
|
||||||
|
["Nord Dark", "nord_dark", "dark"],
|
||||||
|
["One Dark", "one_dark", "dark"],
|
||||||
|
["Pastel on dark", "pastel_on_dark", "dark"],
|
||||||
|
["Solarized Dark", "solarized_dark", "dark"],
|
||||||
|
["Terminal", "terminal", "dark"],
|
||||||
|
["Tomorrow Night", "tomorrow_night", "dark"],
|
||||||
|
["Tomorrow Night Blue", "tomorrow_night_blue", "dark"],
|
||||||
|
["Tomorrow Night Bright", "tomorrow_night_bright", "dark"],
|
||||||
|
["Tomorrow Night 80s", "tomorrow_night_eighties", "dark"],
|
||||||
|
["Twilight", "twilight", "dark"],
|
||||||
|
["Vibrant Ink", "vibrant_ink", "dark"],
|
||||||
|
["GitHub Dark", "github_dark", "dark"],
|
||||||
|
["CloudEditor Dark", "cloud_editor_dark", "dark"]
|
||||||
|
];
|
||||||
|
exports.themesByName = {};
|
||||||
|
exports.themes = themeData.map(function (data) {
|
||||||
|
var name = data[1] || data[0].replace(/ /g, "_").toLowerCase();
|
||||||
|
var theme = {
|
||||||
|
caption: data[0],
|
||||||
|
theme: "ace/theme/" + name,
|
||||||
|
isDark: data[2] == "dark",
|
||||||
|
name: name
|
||||||
|
};
|
||||||
|
exports.themesByName[name] = theme;
|
||||||
|
return theme;
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/options",["require","exports","module","ace/ext/menu_tools/overlay_page","ace/lib/dom","ace/lib/oop","ace/config","ace/lib/event_emitter","ace/ext/modelist","ace/ext/themelist"], function(require, exports, module){"use strict";
|
||||||
|
require("./menu_tools/overlay_page");
|
||||||
|
var dom = require("../lib/dom");
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var config = require("../config");
|
||||||
|
var EventEmitter = require("../lib/event_emitter").EventEmitter;
|
||||||
|
var buildDom = dom.buildDom;
|
||||||
|
var modelist = require("./modelist");
|
||||||
|
var themelist = require("./themelist");
|
||||||
|
var themes = { Bright: [], Dark: [] };
|
||||||
|
themelist.themes.forEach(function (x) {
|
||||||
|
themes[x.isDark ? "Dark" : "Bright"].push({ caption: x.caption, value: x.theme });
|
||||||
|
});
|
||||||
|
var modes = modelist.modes.map(function (x) {
|
||||||
|
return { caption: x.caption, value: x.mode };
|
||||||
|
});
|
||||||
|
var optionGroups = {
|
||||||
|
Main: {
|
||||||
|
Mode: {
|
||||||
|
path: "mode",
|
||||||
|
type: "select",
|
||||||
|
items: modes
|
||||||
|
},
|
||||||
|
Theme: {
|
||||||
|
path: "theme",
|
||||||
|
type: "select",
|
||||||
|
items: themes
|
||||||
|
},
|
||||||
|
"Keybinding": {
|
||||||
|
type: "buttonBar",
|
||||||
|
path: "keyboardHandler",
|
||||||
|
items: [
|
||||||
|
{ caption: "Ace", value: null },
|
||||||
|
{ caption: "Vim", value: "ace/keyboard/vim" },
|
||||||
|
{ caption: "Emacs", value: "ace/keyboard/emacs" },
|
||||||
|
{ caption: "Sublime", value: "ace/keyboard/sublime" },
|
||||||
|
{ caption: "VSCode", value: "ace/keyboard/vscode" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Font Size": {
|
||||||
|
path: "fontSize",
|
||||||
|
type: "number",
|
||||||
|
defaultValue: 12,
|
||||||
|
defaults: [
|
||||||
|
{ caption: "12px", value: 12 },
|
||||||
|
{ caption: "24px", value: 24 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Soft Wrap": {
|
||||||
|
type: "buttonBar",
|
||||||
|
path: "wrap",
|
||||||
|
items: [
|
||||||
|
{ caption: "Off", value: "off" },
|
||||||
|
{ caption: "View", value: "free" },
|
||||||
|
{ caption: "margin", value: "printMargin" },
|
||||||
|
{ caption: "40", value: "40" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Cursor Style": {
|
||||||
|
path: "cursorStyle",
|
||||||
|
items: [
|
||||||
|
{ caption: "Ace", value: "ace" },
|
||||||
|
{ caption: "Slim", value: "slim" },
|
||||||
|
{ caption: "Smooth", value: "smooth" },
|
||||||
|
{ caption: "Smooth And Slim", value: "smooth slim" },
|
||||||
|
{ caption: "Wide", value: "wide" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Folding": {
|
||||||
|
path: "foldStyle",
|
||||||
|
items: [
|
||||||
|
{ caption: "Manual", value: "manual" },
|
||||||
|
{ caption: "Mark begin", value: "markbegin" },
|
||||||
|
{ caption: "Mark begin and end", value: "markbeginend" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Soft Tabs": [{
|
||||||
|
path: "useSoftTabs"
|
||||||
|
}, {
|
||||||
|
ariaLabel: "Tab Size",
|
||||||
|
path: "tabSize",
|
||||||
|
type: "number",
|
||||||
|
values: [2, 3, 4, 8, 16]
|
||||||
|
}],
|
||||||
|
"Overscroll": {
|
||||||
|
type: "buttonBar",
|
||||||
|
path: "scrollPastEnd",
|
||||||
|
items: [
|
||||||
|
{ caption: "None", value: 0 },
|
||||||
|
{ caption: "Half", value: 0.5 },
|
||||||
|
{ caption: "Full", value: 1 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
More: {
|
||||||
|
"Atomic soft tabs": {
|
||||||
|
path: "navigateWithinSoftTabs"
|
||||||
|
},
|
||||||
|
"Enable Behaviours": {
|
||||||
|
path: "behavioursEnabled"
|
||||||
|
},
|
||||||
|
"Wrap with quotes": {
|
||||||
|
path: "wrapBehavioursEnabled"
|
||||||
|
},
|
||||||
|
"Enable Auto Indent": {
|
||||||
|
path: "enableAutoIndent"
|
||||||
|
},
|
||||||
|
"Full Line Selection": {
|
||||||
|
type: "checkbox",
|
||||||
|
values: "text|line",
|
||||||
|
path: "selectionStyle"
|
||||||
|
},
|
||||||
|
"Highlight Active Line": {
|
||||||
|
path: "highlightActiveLine"
|
||||||
|
},
|
||||||
|
"Show Invisibles": {
|
||||||
|
path: "showInvisibles"
|
||||||
|
},
|
||||||
|
"Show Indent Guides": {
|
||||||
|
path: "displayIndentGuides"
|
||||||
|
},
|
||||||
|
"Highlight Indent Guides": {
|
||||||
|
path: "highlightIndentGuides"
|
||||||
|
},
|
||||||
|
"Persistent HScrollbar": {
|
||||||
|
path: "hScrollBarAlwaysVisible"
|
||||||
|
},
|
||||||
|
"Persistent VScrollbar": {
|
||||||
|
path: "vScrollBarAlwaysVisible"
|
||||||
|
},
|
||||||
|
"Animate scrolling": {
|
||||||
|
path: "animatedScroll"
|
||||||
|
},
|
||||||
|
"Show Gutter": {
|
||||||
|
path: "showGutter"
|
||||||
|
},
|
||||||
|
"Show Line Numbers": {
|
||||||
|
path: "showLineNumbers"
|
||||||
|
},
|
||||||
|
"Relative Line Numbers": {
|
||||||
|
path: "relativeLineNumbers"
|
||||||
|
},
|
||||||
|
"Fixed Gutter Width": {
|
||||||
|
path: "fixedWidthGutter"
|
||||||
|
},
|
||||||
|
"Show Print Margin": [{
|
||||||
|
path: "showPrintMargin"
|
||||||
|
}, {
|
||||||
|
ariaLabel: "Print Margin",
|
||||||
|
type: "number",
|
||||||
|
path: "printMarginColumn"
|
||||||
|
}],
|
||||||
|
"Indented Soft Wrap": {
|
||||||
|
path: "indentedSoftWrap"
|
||||||
|
},
|
||||||
|
"Highlight selected word": {
|
||||||
|
path: "highlightSelectedWord"
|
||||||
|
},
|
||||||
|
"Fade Fold Widgets": {
|
||||||
|
path: "fadeFoldWidgets"
|
||||||
|
},
|
||||||
|
"Use textarea for IME": {
|
||||||
|
path: "useTextareaForIME"
|
||||||
|
},
|
||||||
|
"Merge Undo Deltas": {
|
||||||
|
path: "mergeUndoDeltas",
|
||||||
|
items: [
|
||||||
|
{ caption: "Always", value: "always" },
|
||||||
|
{ caption: "Never", value: "false" },
|
||||||
|
{ caption: "Timed", value: "true" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Elastic Tabstops": {
|
||||||
|
path: "useElasticTabstops"
|
||||||
|
},
|
||||||
|
"Incremental Search": {
|
||||||
|
path: "useIncrementalSearch"
|
||||||
|
},
|
||||||
|
"Read-only": {
|
||||||
|
path: "readOnly"
|
||||||
|
},
|
||||||
|
"Copy without selection": {
|
||||||
|
path: "copyWithEmptySelection"
|
||||||
|
},
|
||||||
|
"Live Autocompletion": {
|
||||||
|
path: "enableLiveAutocompletion"
|
||||||
|
},
|
||||||
|
"Custom scrollbar": {
|
||||||
|
path: "customScrollbar"
|
||||||
|
},
|
||||||
|
"Use SVG gutter icons": {
|
||||||
|
path: "useSvgGutterIcons"
|
||||||
|
},
|
||||||
|
"Annotations for folded lines": {
|
||||||
|
path: "showFoldedAnnotations"
|
||||||
|
},
|
||||||
|
"Keyboard Accessibility Mode": {
|
||||||
|
path: "enableKeyboardAccessibility"
|
||||||
|
},
|
||||||
|
"Gutter tooltip follows mouse": {
|
||||||
|
path: "tooltipFollowsMouse",
|
||||||
|
defaultValue: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var OptionPanel = /** @class */ (function () {
|
||||||
|
function OptionPanel(editor, element) {
|
||||||
|
this.editor = editor;
|
||||||
|
this.container = element || document.createElement("div");
|
||||||
|
this.groups = [];
|
||||||
|
this.options = {};
|
||||||
|
}
|
||||||
|
OptionPanel.prototype.add = function (config) {
|
||||||
|
if (config.Main)
|
||||||
|
oop.mixin(optionGroups.Main, config.Main);
|
||||||
|
if (config.More)
|
||||||
|
oop.mixin(optionGroups.More, config.More);
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.render = function () {
|
||||||
|
this.container.innerHTML = "";
|
||||||
|
buildDom(["table", { role: "presentation", id: "controls" },
|
||||||
|
this.renderOptionGroup(optionGroups.Main),
|
||||||
|
["tr", null, ["td", { colspan: 2 },
|
||||||
|
["table", { role: "presentation", id: "more-controls" },
|
||||||
|
this.renderOptionGroup(optionGroups.More)
|
||||||
|
]
|
||||||
|
]],
|
||||||
|
["tr", null, ["td", { colspan: 2 }, "version " + config.version]]
|
||||||
|
], this.container);
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.renderOptionGroup = function (group) {
|
||||||
|
return Object.keys(group).map(function (key, i) {
|
||||||
|
var item = group[key];
|
||||||
|
if (!item.position)
|
||||||
|
item.position = i / 10000;
|
||||||
|
if (!item.label)
|
||||||
|
item.label = key;
|
||||||
|
return item;
|
||||||
|
}).sort(function (a, b) {
|
||||||
|
return a.position - b.position;
|
||||||
|
}).map(function (item) {
|
||||||
|
return this.renderOption(item.label, item);
|
||||||
|
}, this);
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.renderOptionControl = function (key, option) {
|
||||||
|
var self = this;
|
||||||
|
if (Array.isArray(option)) {
|
||||||
|
return option.map(function (x) {
|
||||||
|
return self.renderOptionControl(key, x);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var control;
|
||||||
|
var value = self.getOption(option);
|
||||||
|
if (option.values && option.type != "checkbox") {
|
||||||
|
if (typeof option.values == "string")
|
||||||
|
option.values = option.values.split("|");
|
||||||
|
option.items = option.values.map(function (v) {
|
||||||
|
return { value: v, name: v };
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (option.type == "buttonBar") {
|
||||||
|
control = ["div", { role: "group", "aria-labelledby": option.path + "-label" }, option.items.map(function (item) {
|
||||||
|
return ["button", {
|
||||||
|
value: item.value,
|
||||||
|
ace_selected_button: value == item.value,
|
||||||
|
'aria-pressed': value == item.value,
|
||||||
|
onclick: function () {
|
||||||
|
self.setOption(option, item.value);
|
||||||
|
var nodes = this.parentNode.querySelectorAll("[ace_selected_button]");
|
||||||
|
for (var i = 0; i < nodes.length; i++) {
|
||||||
|
nodes[i].removeAttribute("ace_selected_button");
|
||||||
|
nodes[i].setAttribute("aria-pressed", false);
|
||||||
|
}
|
||||||
|
this.setAttribute("ace_selected_button", true);
|
||||||
|
this.setAttribute("aria-pressed", true);
|
||||||
|
}
|
||||||
|
}, item.desc || item.caption || item.name];
|
||||||
|
})];
|
||||||
|
}
|
||||||
|
else if (option.type == "number") {
|
||||||
|
control = ["input", { type: "number", value: value || option.defaultValue, style: "width:3em", oninput: function () {
|
||||||
|
self.setOption(option, parseInt(this.value));
|
||||||
|
} }];
|
||||||
|
if (option.ariaLabel) {
|
||||||
|
control[1]["aria-label"] = option.ariaLabel;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control[1].id = key;
|
||||||
|
}
|
||||||
|
if (option.defaults) {
|
||||||
|
control = [control, option.defaults.map(function (item) {
|
||||||
|
return ["button", { onclick: function () {
|
||||||
|
var input = this.parentNode.firstChild;
|
||||||
|
input.value = item.value;
|
||||||
|
input.oninput();
|
||||||
|
} }, item.caption];
|
||||||
|
})];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (option.items) {
|
||||||
|
var buildItems = function (items) {
|
||||||
|
return items.map(function (item) {
|
||||||
|
return ["option", { value: item.value || item.name }, item.desc || item.caption || item.name];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var items = Array.isArray(option.items)
|
||||||
|
? buildItems(option.items)
|
||||||
|
: Object.keys(option.items).map(function (key) {
|
||||||
|
return ["optgroup", { "label": key }, buildItems(option.items[key])];
|
||||||
|
});
|
||||||
|
control = ["select", { id: key, value: value, onchange: function () {
|
||||||
|
self.setOption(option, this.value);
|
||||||
|
} }, items];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (typeof option.values == "string")
|
||||||
|
option.values = option.values.split("|");
|
||||||
|
if (option.values)
|
||||||
|
value = value == option.values[1];
|
||||||
|
control = ["input", { type: "checkbox", id: key, checked: value || null, onchange: function () {
|
||||||
|
var value = this.checked;
|
||||||
|
if (option.values)
|
||||||
|
value = option.values[value ? 1 : 0];
|
||||||
|
self.setOption(option, value);
|
||||||
|
} }];
|
||||||
|
if (option.type == "checkedNumber") {
|
||||||
|
control = [control, []];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return control;
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.renderOption = function (key, option) {
|
||||||
|
if (option.path && !option.onchange && !this.editor.$options[option.path])
|
||||||
|
return;
|
||||||
|
var path = Array.isArray(option) ? option[0].path : option.path;
|
||||||
|
this.options[path] = option;
|
||||||
|
var safeKey = "-" + path;
|
||||||
|
var safeId = path + "-label";
|
||||||
|
var control = this.renderOptionControl(safeKey, option);
|
||||||
|
return ["tr", { class: "ace_optionsMenuEntry" }, ["td",
|
||||||
|
["label", { for: safeKey, id: safeId }, key]
|
||||||
|
], ["td", control]];
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.setOption = function (option, value) {
|
||||||
|
if (typeof option == "string")
|
||||||
|
option = this.options[option];
|
||||||
|
if (value == "false")
|
||||||
|
value = false;
|
||||||
|
if (value == "true")
|
||||||
|
value = true;
|
||||||
|
if (value == "null")
|
||||||
|
value = null;
|
||||||
|
if (value == "undefined")
|
||||||
|
value = undefined;
|
||||||
|
if (typeof value == "string" && parseFloat(value).toString() == value)
|
||||||
|
value = parseFloat(value);
|
||||||
|
if (option.onchange)
|
||||||
|
option.onchange(value);
|
||||||
|
else if (option.path)
|
||||||
|
this.editor.setOption(option.path, value);
|
||||||
|
this._signal("setOption", { name: option.path, value: value });
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.getOption = function (option) {
|
||||||
|
if (option.getValue)
|
||||||
|
return option.getValue();
|
||||||
|
return this.editor.getOption(option.path);
|
||||||
|
};
|
||||||
|
return OptionPanel;
|
||||||
|
}());
|
||||||
|
oop.implement(OptionPanel.prototype, EventEmitter);
|
||||||
|
exports.OptionPanel = OptionPanel;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/options"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,120 @@
|
||||||
|
define("ace/ext/rtl",["require","exports","module","ace/editor","ace/config"], function(require, exports, module){"use strict";
|
||||||
|
var commands = [{
|
||||||
|
name: "leftToRight",
|
||||||
|
bindKey: { win: "Ctrl-Alt-Shift-L", mac: "Command-Alt-Shift-L" },
|
||||||
|
exec: function (editor) {
|
||||||
|
editor.session.$bidiHandler.setRtlDirection(editor, false);
|
||||||
|
},
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "rightToLeft",
|
||||||
|
bindKey: { win: "Ctrl-Alt-Shift-R", mac: "Command-Alt-Shift-R" },
|
||||||
|
exec: function (editor) {
|
||||||
|
editor.session.$bidiHandler.setRtlDirection(editor, true);
|
||||||
|
},
|
||||||
|
readOnly: true
|
||||||
|
}];
|
||||||
|
var Editor = require("../editor").Editor;
|
||||||
|
require("../config").defineOptions(Editor.prototype, "editor", {
|
||||||
|
rtlText: {
|
||||||
|
set: function (val) {
|
||||||
|
if (val) {
|
||||||
|
this.on("change", onChange);
|
||||||
|
this.on("changeSelection", onChangeSelection);
|
||||||
|
this.renderer.on("afterRender", updateLineDirection);
|
||||||
|
this.commands.on("exec", onCommandEmitted);
|
||||||
|
this.commands.addCommands(commands);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.off("change", onChange);
|
||||||
|
this.off("changeSelection", onChangeSelection);
|
||||||
|
this.renderer.off("afterRender", updateLineDirection);
|
||||||
|
this.commands.off("exec", onCommandEmitted);
|
||||||
|
this.commands.removeCommands(commands);
|
||||||
|
clearTextLayer(this.renderer);
|
||||||
|
}
|
||||||
|
this.renderer.updateFull();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rtl: {
|
||||||
|
set: function (val) {
|
||||||
|
this.session.$bidiHandler.$isRtl = val;
|
||||||
|
if (val) {
|
||||||
|
this.setOption("rtlText", false);
|
||||||
|
this.renderer.on("afterRender", updateLineDirection);
|
||||||
|
this.session.$bidiHandler.seenBidi = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.renderer.off("afterRender", updateLineDirection);
|
||||||
|
clearTextLayer(this.renderer);
|
||||||
|
}
|
||||||
|
this.renderer.updateFull();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
function onChangeSelection(e, editor) {
|
||||||
|
var lead = editor.getSelection().lead;
|
||||||
|
if (editor.session.$bidiHandler.isRtlLine(lead.row)) {
|
||||||
|
if (lead.column === 0) {
|
||||||
|
if (editor.session.$bidiHandler.isMoveLeftOperation && lead.row > 0) {
|
||||||
|
editor.getSelection().moveCursorTo(lead.row - 1, editor.session.getLine(lead.row - 1).length);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (editor.getSelection().isEmpty())
|
||||||
|
lead.column += 1;
|
||||||
|
else
|
||||||
|
lead.setPosition(lead.row, lead.column + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function onCommandEmitted(commadEvent) {
|
||||||
|
commadEvent.editor.session.$bidiHandler.isMoveLeftOperation = /gotoleft|selectleft|backspace|removewordleft/.test(commadEvent.command.name);
|
||||||
|
}
|
||||||
|
function onChange(delta, editor) {
|
||||||
|
var session = editor.session;
|
||||||
|
session.$bidiHandler.currentRow = null;
|
||||||
|
if (session.$bidiHandler.isRtlLine(delta.start.row) && delta.action === 'insert' && delta.lines.length > 1) {
|
||||||
|
for (var row = delta.start.row; row < delta.end.row; row++) {
|
||||||
|
if (session.getLine(row + 1).charAt(0) !== session.$bidiHandler.RLE)
|
||||||
|
session.doc.$lines[row + 1] = session.$bidiHandler.RLE + session.getLine(row + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function updateLineDirection(e, renderer) {
|
||||||
|
var session = renderer.session;
|
||||||
|
var $bidiHandler = session.$bidiHandler;
|
||||||
|
var cells = renderer.$textLayer.$lines.cells;
|
||||||
|
var width = renderer.layerConfig.width - renderer.layerConfig.padding + "px";
|
||||||
|
cells.forEach(function (cell) {
|
||||||
|
var style = cell.element.style;
|
||||||
|
if ($bidiHandler && $bidiHandler.isRtlLine(cell.row)) {
|
||||||
|
style.direction = "rtl";
|
||||||
|
style.textAlign = "right";
|
||||||
|
style.width = width;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
style.direction = "";
|
||||||
|
style.textAlign = "";
|
||||||
|
style.width = "";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function clearTextLayer(renderer) {
|
||||||
|
var lines = renderer.$textLayer.$lines;
|
||||||
|
lines.cells.forEach(clear);
|
||||||
|
lines.cellCache.forEach(clear);
|
||||||
|
function clear(cell) {
|
||||||
|
var style = cell.element.style;
|
||||||
|
style.direction = style.textAlign = style.width = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/rtl"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,344 @@
|
||||||
|
define("ace/ext/searchbox-css",["require","exports","module"], function(require, exports, module){module.exports = "\n\n/* ------------------------------------------------------------------------------------------\n * Editor Search Form\n * --------------------------------------------------------------------------------------- */\n.ace_search {\n background-color: #ddd;\n color: #666;\n border: 1px solid #cbcbcb;\n border-top: 0 none;\n overflow: hidden;\n margin: 0;\n padding: 4px 6px 0 4px;\n position: absolute;\n top: 0;\n z-index: 99;\n white-space: normal;\n}\n.ace_search.left {\n border-left: 0 none;\n border-radius: 0px 0px 5px 0px;\n left: 0;\n}\n.ace_search.right {\n border-radius: 0px 0px 0px 5px;\n border-right: 0 none;\n right: 0;\n}\n\n.ace_search_form, .ace_replace_form {\n margin: 0 20px 4px 0;\n overflow: hidden;\n line-height: 1.9;\n}\n.ace_replace_form {\n margin-right: 0;\n}\n.ace_search_form.ace_nomatch {\n outline: 1px solid red;\n}\n\n.ace_search_field {\n border-radius: 3px 0 0 3px;\n background-color: white;\n color: black;\n border: 1px solid #cbcbcb;\n border-right: 0 none;\n outline: 0;\n padding: 0;\n font-size: inherit;\n margin: 0;\n line-height: inherit;\n padding: 0 6px;\n min-width: 17em;\n vertical-align: top;\n min-height: 1.8em;\n box-sizing: content-box;\n}\n.ace_searchbtn {\n border: 1px solid #cbcbcb;\n line-height: inherit;\n display: inline-block;\n padding: 0 6px;\n background: #fff;\n border-right: 0 none;\n border-left: 1px solid #dcdcdc;\n cursor: pointer;\n margin: 0;\n position: relative;\n color: #666;\n}\n.ace_searchbtn:last-child {\n border-radius: 0 3px 3px 0;\n border-right: 1px solid #cbcbcb;\n}\n.ace_searchbtn:disabled {\n background: none;\n cursor: default;\n}\n.ace_searchbtn:hover {\n background-color: #eef1f6;\n}\n.ace_searchbtn.prev, .ace_searchbtn.next {\n padding: 0px 0.7em\n}\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\n content: \"\";\n border: solid 2px #888;\n width: 0.5em;\n height: 0.5em;\n border-width: 2px 0 0 2px;\n display:inline-block;\n transform: rotate(-45deg);\n}\n.ace_searchbtn.next:after {\n border-width: 0 2px 2px 0 ;\n}\n.ace_searchbtn_close {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\n border-radius: 50%;\n border: 0 none;\n color: #656565;\n cursor: pointer;\n font: 16px/16px Arial;\n padding: 0;\n height: 14px;\n width: 14px;\n top: 9px;\n right: 7px;\n position: absolute;\n}\n.ace_searchbtn_close:hover {\n background-color: #656565;\n background-position: 50% 100%;\n color: white;\n}\n\n.ace_button {\n margin-left: 2px;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -o-user-select: none;\n -ms-user-select: none;\n user-select: none;\n overflow: hidden;\n opacity: 0.7;\n border: 1px solid rgba(100,100,100,0.23);\n padding: 1px;\n box-sizing: border-box!important;\n color: black;\n}\n\n.ace_button:hover {\n background-color: #eee;\n opacity:1;\n}\n.ace_button:active {\n background-color: #ddd;\n}\n\n.ace_button.checked {\n border-color: #3399ff;\n opacity:1;\n}\n\n.ace_search_options{\n margin-bottom: 3px;\n text-align: right;\n -webkit-user-select: none;\n -moz-user-select: none;\n -o-user-select: none;\n -ms-user-select: none;\n user-select: none;\n clear: both;\n}\n\n.ace_search_counter {\n float: left;\n font-family: arial;\n padding: 0 8px;\n}";
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/ext/searchbox-css","ace/keyboard/hash_handler","ace/lib/keys","ace/config"], function(require, exports, module){"use strict";
|
||||||
|
var dom = require("../lib/dom");
|
||||||
|
var lang = require("../lib/lang");
|
||||||
|
var event = require("../lib/event");
|
||||||
|
var searchboxCss = require("./searchbox-css");
|
||||||
|
var HashHandler = require("../keyboard/hash_handler").HashHandler;
|
||||||
|
var keyUtil = require("../lib/keys");
|
||||||
|
var nls = require("../config").nls;
|
||||||
|
var MAX_COUNT = 999;
|
||||||
|
dom.importCssString(searchboxCss, "ace_searchbox", false);
|
||||||
|
var SearchBox = /** @class */ (function () {
|
||||||
|
function SearchBox(editor, range, showReplaceForm) {
|
||||||
|
this.activeInput;
|
||||||
|
var div = dom.createElement("div");
|
||||||
|
dom.buildDom(["div", { class: "ace_search right" },
|
||||||
|
["span", { action: "hide", class: "ace_searchbtn_close" }],
|
||||||
|
["div", { class: "ace_search_form" },
|
||||||
|
["input", { class: "ace_search_field", placeholder: nls("search-box.find.placeholder", "Search for"), spellcheck: "false" }],
|
||||||
|
["span", { action: "findPrev", class: "ace_searchbtn prev" }, "\u200b"],
|
||||||
|
["span", { action: "findNext", class: "ace_searchbtn next" }, "\u200b"],
|
||||||
|
["span", { action: "findAll", class: "ace_searchbtn", title: "Alt-Enter" }, nls("search-box.find-all.text", "All")]
|
||||||
|
],
|
||||||
|
["div", { class: "ace_replace_form" },
|
||||||
|
["input", { class: "ace_search_field", placeholder: nls("search-box.replace.placeholder", "Replace with"), spellcheck: "false" }],
|
||||||
|
["span", { action: "replaceAndFindNext", class: "ace_searchbtn" }, nls("search-box.replace-next.text", "Replace")],
|
||||||
|
["span", { action: "replaceAll", class: "ace_searchbtn" }, nls("search-box.replace-all.text", "All")]
|
||||||
|
],
|
||||||
|
["div", { class: "ace_search_options" },
|
||||||
|
["span", { action: "toggleReplace", class: "ace_button", title: nls("search-box.toggle-replace.title", "Toggle Replace mode"),
|
||||||
|
style: "float:left;margin-top:-2px;padding:0 5px;" }, "+"],
|
||||||
|
["span", { class: "ace_search_counter" }],
|
||||||
|
["span", { action: "toggleRegexpMode", class: "ace_button", title: nls("search-box.toggle-regexp.title", "RegExp Search") }, ".*"],
|
||||||
|
["span", { action: "toggleCaseSensitive", class: "ace_button", title: nls("search-box.toggle-case.title", "CaseSensitive Search") }, "Aa"],
|
||||||
|
["span", { action: "toggleWholeWords", class: "ace_button", title: nls("search-box.toggle-whole-word.title", "Whole Word Search") }, "\\b"],
|
||||||
|
["span", { action: "searchInSelection", class: "ace_button", title: nls("search-box.toggle-in-selection.title", "Search In Selection") }, "S"]
|
||||||
|
]
|
||||||
|
], div);
|
||||||
|
this.element = div.firstChild;
|
||||||
|
this.setSession = this.setSession.bind(this);
|
||||||
|
this.$init();
|
||||||
|
this.setEditor(editor);
|
||||||
|
dom.importCssString(searchboxCss, "ace_searchbox", editor.container);
|
||||||
|
}
|
||||||
|
SearchBox.prototype.setEditor = function (editor) {
|
||||||
|
editor.searchBox = this;
|
||||||
|
editor.renderer.scroller.appendChild(this.element);
|
||||||
|
this.editor = editor;
|
||||||
|
};
|
||||||
|
SearchBox.prototype.setSession = function (e) {
|
||||||
|
this.searchRange = null;
|
||||||
|
this.$syncOptions(true);
|
||||||
|
};
|
||||||
|
SearchBox.prototype.$initElements = function (sb) {
|
||||||
|
this.searchBox = sb.querySelector(".ace_search_form");
|
||||||
|
this.replaceBox = sb.querySelector(".ace_replace_form");
|
||||||
|
this.searchOption = sb.querySelector("[action=searchInSelection]");
|
||||||
|
this.replaceOption = sb.querySelector("[action=toggleReplace]");
|
||||||
|
this.regExpOption = sb.querySelector("[action=toggleRegexpMode]");
|
||||||
|
this.caseSensitiveOption = sb.querySelector("[action=toggleCaseSensitive]");
|
||||||
|
this.wholeWordOption = sb.querySelector("[action=toggleWholeWords]");
|
||||||
|
this.searchInput = this.searchBox.querySelector(".ace_search_field");
|
||||||
|
this.replaceInput = this.replaceBox.querySelector(".ace_search_field");
|
||||||
|
this.searchCounter = sb.querySelector(".ace_search_counter");
|
||||||
|
};
|
||||||
|
SearchBox.prototype.$init = function () {
|
||||||
|
var sb = this.element;
|
||||||
|
this.$initElements(sb);
|
||||||
|
var _this = this;
|
||||||
|
event.addListener(sb, "mousedown", function (e) {
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.activeInput.focus();
|
||||||
|
}, 0);
|
||||||
|
event.stopPropagation(e);
|
||||||
|
});
|
||||||
|
event.addListener(sb, "click", function (e) {
|
||||||
|
var t = e.target || e.srcElement;
|
||||||
|
var action = t.getAttribute("action");
|
||||||
|
if (action && _this[action])
|
||||||
|
_this[action]();
|
||||||
|
else if (_this.$searchBarKb.commands[action])
|
||||||
|
_this.$searchBarKb.commands[action].exec(_this);
|
||||||
|
event.stopPropagation(e);
|
||||||
|
});
|
||||||
|
event.addCommandKeyListener(sb, function (e, hashId, keyCode) {
|
||||||
|
var keyString = keyUtil.keyCodeToString(keyCode);
|
||||||
|
var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);
|
||||||
|
if (command && command.exec) {
|
||||||
|
command.exec(_this);
|
||||||
|
event.stopEvent(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.$onChange = lang.delayedCall(function () {
|
||||||
|
_this.find(false, false);
|
||||||
|
});
|
||||||
|
event.addListener(this.searchInput, "input", function () {
|
||||||
|
_this.$onChange.schedule(20);
|
||||||
|
});
|
||||||
|
event.addListener(this.searchInput, "focus", function () {
|
||||||
|
_this.activeInput = _this.searchInput;
|
||||||
|
_this.searchInput.value && _this.highlight();
|
||||||
|
});
|
||||||
|
event.addListener(this.replaceInput, "focus", function () {
|
||||||
|
_this.activeInput = _this.replaceInput;
|
||||||
|
_this.searchInput.value && _this.highlight();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
SearchBox.prototype.setSearchRange = function (range) {
|
||||||
|
this.searchRange = range;
|
||||||
|
if (range) {
|
||||||
|
this.searchRangeMarker = this.editor.session.addMarker(range, "ace_active-line");
|
||||||
|
}
|
||||||
|
else if (this.searchRangeMarker) {
|
||||||
|
this.editor.session.removeMarker(this.searchRangeMarker);
|
||||||
|
this.searchRangeMarker = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
SearchBox.prototype.$syncOptions = function (preventScroll) {
|
||||||
|
dom.setCssClass(this.replaceOption, "checked", this.searchRange);
|
||||||
|
dom.setCssClass(this.searchOption, "checked", this.searchOption.checked);
|
||||||
|
this.replaceOption.textContent = this.replaceOption.checked ? "-" : "+";
|
||||||
|
dom.setCssClass(this.regExpOption, "checked", this.regExpOption.checked);
|
||||||
|
dom.setCssClass(this.wholeWordOption, "checked", this.wholeWordOption.checked);
|
||||||
|
dom.setCssClass(this.caseSensitiveOption, "checked", this.caseSensitiveOption.checked);
|
||||||
|
var readOnly = this.editor.getReadOnly();
|
||||||
|
this.replaceOption.style.display = readOnly ? "none" : "";
|
||||||
|
this.replaceBox.style.display = this.replaceOption.checked && !readOnly ? "" : "none";
|
||||||
|
this.find(false, false, preventScroll);
|
||||||
|
};
|
||||||
|
SearchBox.prototype.highlight = function (re) {
|
||||||
|
this.editor.session.highlight(re || this.editor.$search.$options.re);
|
||||||
|
this.editor.renderer.updateBackMarkers();
|
||||||
|
};
|
||||||
|
SearchBox.prototype.find = function (skipCurrent, backwards, preventScroll) {
|
||||||
|
var range = this.editor.find(this.searchInput.value, {
|
||||||
|
skipCurrent: skipCurrent,
|
||||||
|
backwards: backwards,
|
||||||
|
wrap: true,
|
||||||
|
regExp: this.regExpOption.checked,
|
||||||
|
caseSensitive: this.caseSensitiveOption.checked,
|
||||||
|
wholeWord: this.wholeWordOption.checked,
|
||||||
|
preventScroll: preventScroll,
|
||||||
|
range: this.searchRange
|
||||||
|
});
|
||||||
|
var noMatch = !range && this.searchInput.value;
|
||||||
|
dom.setCssClass(this.searchBox, "ace_nomatch", noMatch);
|
||||||
|
this.editor._emit("findSearchBox", { match: !noMatch });
|
||||||
|
this.highlight();
|
||||||
|
this.updateCounter();
|
||||||
|
};
|
||||||
|
SearchBox.prototype.updateCounter = function () {
|
||||||
|
var editor = this.editor;
|
||||||
|
var regex = editor.$search.$options.re;
|
||||||
|
var supportsUnicodeFlag = regex.unicode;
|
||||||
|
var all = 0;
|
||||||
|
var before = 0;
|
||||||
|
if (regex) {
|
||||||
|
var value = this.searchRange
|
||||||
|
? editor.session.getTextRange(this.searchRange)
|
||||||
|
: editor.getValue();
|
||||||
|
var offset = editor.session.doc.positionToIndex(editor.selection.anchor);
|
||||||
|
if (this.searchRange)
|
||||||
|
offset -= editor.session.doc.positionToIndex(this.searchRange.start);
|
||||||
|
var last = regex.lastIndex = 0;
|
||||||
|
var m;
|
||||||
|
while ((m = regex.exec(value))) {
|
||||||
|
all++;
|
||||||
|
last = m.index;
|
||||||
|
if (last <= offset)
|
||||||
|
before++;
|
||||||
|
if (all > MAX_COUNT)
|
||||||
|
break;
|
||||||
|
if (!m[0]) {
|
||||||
|
regex.lastIndex = last += lang.skipEmptyMatch(value, last, supportsUnicodeFlag);
|
||||||
|
if (last >= value.length)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.searchCounter.textContent = nls("search-box.search-counter", "$0 of $1", [before, (all > MAX_COUNT ? MAX_COUNT + "+" : all)]);
|
||||||
|
};
|
||||||
|
SearchBox.prototype.findNext = function () {
|
||||||
|
this.find(true, false);
|
||||||
|
};
|
||||||
|
SearchBox.prototype.findPrev = function () {
|
||||||
|
this.find(true, true);
|
||||||
|
};
|
||||||
|
SearchBox.prototype.findAll = function () {
|
||||||
|
var range = this.editor.findAll(this.searchInput.value, {
|
||||||
|
regExp: this.regExpOption.checked,
|
||||||
|
caseSensitive: this.caseSensitiveOption.checked,
|
||||||
|
wholeWord: this.wholeWordOption.checked
|
||||||
|
});
|
||||||
|
var noMatch = !range && this.searchInput.value;
|
||||||
|
dom.setCssClass(this.searchBox, "ace_nomatch", noMatch);
|
||||||
|
this.editor._emit("findSearchBox", { match: !noMatch });
|
||||||
|
this.highlight();
|
||||||
|
this.hide();
|
||||||
|
};
|
||||||
|
SearchBox.prototype.replace = function () {
|
||||||
|
if (!this.editor.getReadOnly())
|
||||||
|
this.editor.replace(this.replaceInput.value);
|
||||||
|
};
|
||||||
|
SearchBox.prototype.replaceAndFindNext = function () {
|
||||||
|
if (!this.editor.getReadOnly()) {
|
||||||
|
this.editor.replace(this.replaceInput.value);
|
||||||
|
this.findNext();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
SearchBox.prototype.replaceAll = function () {
|
||||||
|
if (!this.editor.getReadOnly())
|
||||||
|
this.editor.replaceAll(this.replaceInput.value);
|
||||||
|
};
|
||||||
|
SearchBox.prototype.hide = function () {
|
||||||
|
this.active = false;
|
||||||
|
this.setSearchRange(null);
|
||||||
|
this.editor.off("changeSession", this.setSession);
|
||||||
|
this.element.style.display = "none";
|
||||||
|
this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);
|
||||||
|
this.editor.focus();
|
||||||
|
};
|
||||||
|
SearchBox.prototype.show = function (value, isReplace) {
|
||||||
|
this.active = true;
|
||||||
|
this.editor.on("changeSession", this.setSession);
|
||||||
|
this.element.style.display = "";
|
||||||
|
this.replaceOption.checked = isReplace;
|
||||||
|
if (value)
|
||||||
|
this.searchInput.value = value;
|
||||||
|
this.searchInput.focus();
|
||||||
|
this.searchInput.select();
|
||||||
|
this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);
|
||||||
|
this.$syncOptions(true);
|
||||||
|
};
|
||||||
|
SearchBox.prototype.isFocused = function () {
|
||||||
|
var el = document.activeElement;
|
||||||
|
return el == this.searchInput || el == this.replaceInput;
|
||||||
|
};
|
||||||
|
return SearchBox;
|
||||||
|
}());
|
||||||
|
var $searchBarKb = new HashHandler();
|
||||||
|
$searchBarKb.bindKeys({
|
||||||
|
"Ctrl-f|Command-f": function (sb) {
|
||||||
|
var isReplace = sb.isReplace = !sb.isReplace;
|
||||||
|
sb.replaceBox.style.display = isReplace ? "" : "none";
|
||||||
|
sb.replaceOption.checked = false;
|
||||||
|
sb.$syncOptions();
|
||||||
|
sb.searchInput.focus();
|
||||||
|
},
|
||||||
|
"Ctrl-H|Command-Option-F": function (sb) {
|
||||||
|
if (sb.editor.getReadOnly())
|
||||||
|
return;
|
||||||
|
sb.replaceOption.checked = true;
|
||||||
|
sb.$syncOptions();
|
||||||
|
sb.replaceInput.focus();
|
||||||
|
},
|
||||||
|
"Ctrl-G|Command-G": function (sb) {
|
||||||
|
sb.findNext();
|
||||||
|
},
|
||||||
|
"Ctrl-Shift-G|Command-Shift-G": function (sb) {
|
||||||
|
sb.findPrev();
|
||||||
|
},
|
||||||
|
"esc": function (sb) {
|
||||||
|
setTimeout(function () { sb.hide(); });
|
||||||
|
},
|
||||||
|
"Return": function (sb) {
|
||||||
|
if (sb.activeInput == sb.replaceInput)
|
||||||
|
sb.replace();
|
||||||
|
sb.findNext();
|
||||||
|
},
|
||||||
|
"Shift-Return": function (sb) {
|
||||||
|
if (sb.activeInput == sb.replaceInput)
|
||||||
|
sb.replace();
|
||||||
|
sb.findPrev();
|
||||||
|
},
|
||||||
|
"Alt-Return": function (sb) {
|
||||||
|
if (sb.activeInput == sb.replaceInput)
|
||||||
|
sb.replaceAll();
|
||||||
|
sb.findAll();
|
||||||
|
},
|
||||||
|
"Tab": function (sb) {
|
||||||
|
(sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$searchBarKb.addCommands([{
|
||||||
|
name: "toggleRegexpMode",
|
||||||
|
bindKey: { win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/" },
|
||||||
|
exec: function (sb) {
|
||||||
|
sb.regExpOption.checked = !sb.regExpOption.checked;
|
||||||
|
sb.$syncOptions();
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "toggleCaseSensitive",
|
||||||
|
bindKey: { win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I" },
|
||||||
|
exec: function (sb) {
|
||||||
|
sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;
|
||||||
|
sb.$syncOptions();
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "toggleWholeWords",
|
||||||
|
bindKey: { win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W" },
|
||||||
|
exec: function (sb) {
|
||||||
|
sb.wholeWordOption.checked = !sb.wholeWordOption.checked;
|
||||||
|
sb.$syncOptions();
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "toggleReplace",
|
||||||
|
exec: function (sb) {
|
||||||
|
sb.replaceOption.checked = !sb.replaceOption.checked;
|
||||||
|
sb.$syncOptions();
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "searchInSelection",
|
||||||
|
exec: function (sb) {
|
||||||
|
sb.searchOption.checked = !sb.searchRange;
|
||||||
|
sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());
|
||||||
|
sb.$syncOptions();
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
var $closeSearchBarKb = new HashHandler([{
|
||||||
|
bindKey: "Esc",
|
||||||
|
name: "closeSearchBar",
|
||||||
|
exec: function (editor) {
|
||||||
|
editor.searchBox.hide();
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
SearchBox.prototype.$searchBarKb = $searchBarKb;
|
||||||
|
SearchBox.prototype.$closeSearchBarKb = $closeSearchBarKb;
|
||||||
|
exports.SearchBox = SearchBox;
|
||||||
|
exports.Search = function (editor, isReplace) {
|
||||||
|
var sb = editor.searchBox || new SearchBox(editor);
|
||||||
|
sb.show(editor.session.getTextRange(), isReplace);
|
||||||
|
};
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/searchbox"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,789 @@
|
||||||
|
define("ace/ext/menu_tools/settings_menu.css",["require","exports","module"], function(require, exports, module){module.exports = "#ace_settingsmenu, #kbshortcutmenu {\n background-color: #F7F7F7;\n color: black;\n box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\n padding: 1em 0.5em 2em 1em;\n overflow: auto;\n position: absolute;\n margin: 0;\n bottom: 0;\n right: 0;\n top: 0;\n z-index: 9991;\n cursor: default;\n}\n\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\n box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\n background-color: rgba(255, 255, 255, 0.6);\n color: black;\n}\n\n.ace_optionsMenuEntry:hover {\n background-color: rgba(100, 100, 100, 0.1);\n transition: all 0.3s\n}\n\n.ace_closeButton {\n background: rgba(245, 146, 146, 0.5);\n border: 1px solid #F48A8A;\n border-radius: 50%;\n padding: 7px;\n position: absolute;\n right: -8px;\n top: -8px;\n z-index: 100000;\n}\n.ace_closeButton{\n background: rgba(245, 146, 146, 0.9);\n}\n.ace_optionsMenuKey {\n color: darkslateblue;\n font-weight: bold;\n}\n.ace_optionsMenuCommand {\n color: darkcyan;\n font-weight: normal;\n}\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\n vertical-align: middle;\n}\n\n.ace_optionsMenuEntry button[ace_selected_button=true] {\n background: #e7e7e7;\n box-shadow: 1px 0px 2px 0px #adadad inset;\n border-color: #adadad;\n}\n.ace_optionsMenuEntry button {\n background: white;\n border: 1px solid lightgray;\n margin: 0px;\n}\n.ace_optionsMenuEntry button:hover{\n background: #f0f0f0;\n}";
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/menu_tools/overlay_page",["require","exports","module","ace/lib/dom","ace/ext/menu_tools/settings_menu.css"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/
|
||||||
|
'use strict';
|
||||||
|
var dom = require("../../lib/dom");
|
||||||
|
var cssText = require("./settings_menu.css");
|
||||||
|
dom.importCssString(cssText, "settings_menu.css", false);
|
||||||
|
module.exports.overlayPage = function overlayPage(editor, contentElement, callback) {
|
||||||
|
var closer = document.createElement('div');
|
||||||
|
var ignoreFocusOut = false;
|
||||||
|
function documentEscListener(e) {
|
||||||
|
if (e.keyCode === 27) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function close() {
|
||||||
|
if (!closer)
|
||||||
|
return;
|
||||||
|
document.removeEventListener('keydown', documentEscListener);
|
||||||
|
closer.parentNode.removeChild(closer);
|
||||||
|
if (editor) {
|
||||||
|
editor.focus();
|
||||||
|
}
|
||||||
|
closer = null;
|
||||||
|
callback && callback();
|
||||||
|
}
|
||||||
|
function setIgnoreFocusOut(ignore) {
|
||||||
|
ignoreFocusOut = ignore;
|
||||||
|
if (ignore) {
|
||||||
|
closer.style.pointerEvents = "none";
|
||||||
|
contentElement.style.pointerEvents = "auto";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closer.style.cssText = 'margin: 0; padding: 0; ' +
|
||||||
|
'position: fixed; top:0; bottom:0; left:0; right:0;' +
|
||||||
|
'z-index: 9990; ' +
|
||||||
|
(editor ? 'background-color: rgba(0, 0, 0, 0.3);' : '');
|
||||||
|
closer.addEventListener('click', function (e) {
|
||||||
|
if (!ignoreFocusOut) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.addEventListener('keydown', documentEscListener);
|
||||||
|
contentElement.addEventListener('click', function (e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
closer.appendChild(contentElement);
|
||||||
|
document.body.appendChild(closer);
|
||||||
|
if (editor) {
|
||||||
|
editor.blur();
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
close: close,
|
||||||
|
setIgnoreFocusOut: setIgnoreFocusOut
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/modelist",["require","exports","module"], function(require, exports, module){"use strict";
|
||||||
|
var modes = [];
|
||||||
|
function getModeForPath(path) {
|
||||||
|
var mode = modesByName.text;
|
||||||
|
var fileName = path.split(/[\/\\]/).pop();
|
||||||
|
for (var i = 0; i < modes.length; i++) {
|
||||||
|
if (modes[i].supportsFile(fileName)) {
|
||||||
|
mode = modes[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
var Mode = /** @class */ (function () {
|
||||||
|
function Mode(name, caption, extensions) {
|
||||||
|
this.name = name;
|
||||||
|
this.caption = caption;
|
||||||
|
this.mode = "ace/mode/" + name;
|
||||||
|
this.extensions = extensions;
|
||||||
|
var re;
|
||||||
|
if (/\^/.test(extensions)) {
|
||||||
|
re = extensions.replace(/\|(\^)?/g, function (a, b) {
|
||||||
|
return "$|" + (b ? "^" : "^.*\\.");
|
||||||
|
}) + "$";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
re = "^.*\\.(" + extensions + ")$";
|
||||||
|
}
|
||||||
|
this.extRe = new RegExp(re, "gi");
|
||||||
|
}
|
||||||
|
Mode.prototype.supportsFile = function (filename) {
|
||||||
|
return filename.match(this.extRe);
|
||||||
|
};
|
||||||
|
return Mode;
|
||||||
|
}());
|
||||||
|
var supportedModes = {
|
||||||
|
ABAP: ["abap"],
|
||||||
|
ABC: ["abc"],
|
||||||
|
ActionScript: ["as"],
|
||||||
|
ADA: ["ada|adb"],
|
||||||
|
Alda: ["alda"],
|
||||||
|
Apache_Conf: ["^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd"],
|
||||||
|
Apex: ["apex|cls|trigger|tgr"],
|
||||||
|
AQL: ["aql"],
|
||||||
|
AsciiDoc: ["asciidoc|adoc"],
|
||||||
|
ASL: ["dsl|asl|asl.json"],
|
||||||
|
Assembly_ARM32: ["s"],
|
||||||
|
Assembly_x86: ["asm|a"],
|
||||||
|
Astro: ["astro"],
|
||||||
|
AutoHotKey: ["ahk"],
|
||||||
|
BatchFile: ["bat|cmd"],
|
||||||
|
BibTeX: ["bib"],
|
||||||
|
C_Cpp: ["cpp|c|cc|cxx|h|hh|hpp|ino"],
|
||||||
|
C9Search: ["c9search_results"],
|
||||||
|
Cirru: ["cirru|cr"],
|
||||||
|
Clojure: ["clj|cljs"],
|
||||||
|
Cobol: ["CBL|COB"],
|
||||||
|
coffee: ["coffee|cf|cson|^Cakefile"],
|
||||||
|
ColdFusion: ["cfm|cfc"],
|
||||||
|
Crystal: ["cr"],
|
||||||
|
CSharp: ["cs"],
|
||||||
|
Csound_Document: ["csd"],
|
||||||
|
Csound_Orchestra: ["orc"],
|
||||||
|
Csound_Score: ["sco"],
|
||||||
|
CSS: ["css"],
|
||||||
|
Curly: ["curly"],
|
||||||
|
Cuttlefish: ["conf"],
|
||||||
|
D: ["d|di"],
|
||||||
|
Dart: ["dart"],
|
||||||
|
Diff: ["diff|patch"],
|
||||||
|
Django: ["djt|html.djt|dj.html|djhtml"],
|
||||||
|
Dockerfile: ["^Dockerfile"],
|
||||||
|
Dot: ["dot"],
|
||||||
|
Drools: ["drl"],
|
||||||
|
Edifact: ["edi"],
|
||||||
|
Eiffel: ["e|ge"],
|
||||||
|
EJS: ["ejs"],
|
||||||
|
Elixir: ["ex|exs"],
|
||||||
|
Elm: ["elm"],
|
||||||
|
Erlang: ["erl|hrl"],
|
||||||
|
Flix: ["flix"],
|
||||||
|
Forth: ["frt|fs|ldr|fth|4th"],
|
||||||
|
Fortran: ["f|f90"],
|
||||||
|
FSharp: ["fsi|fs|ml|mli|fsx|fsscript"],
|
||||||
|
FSL: ["fsl"],
|
||||||
|
FTL: ["ftl"],
|
||||||
|
Gcode: ["gcode"],
|
||||||
|
Gherkin: ["feature"],
|
||||||
|
Gitignore: ["^.gitignore"],
|
||||||
|
Glsl: ["glsl|frag|vert"],
|
||||||
|
Gobstones: ["gbs"],
|
||||||
|
golang: ["go"],
|
||||||
|
GraphQLSchema: ["gql"],
|
||||||
|
Groovy: ["groovy"],
|
||||||
|
HAML: ["haml"],
|
||||||
|
Handlebars: ["hbs|handlebars|tpl|mustache"],
|
||||||
|
Haskell: ["hs"],
|
||||||
|
Haskell_Cabal: ["cabal"],
|
||||||
|
haXe: ["hx"],
|
||||||
|
Hjson: ["hjson"],
|
||||||
|
HTML: ["html|htm|xhtml|we|wpy"],
|
||||||
|
HTML_Elixir: ["eex|html.eex"],
|
||||||
|
HTML_Ruby: ["erb|rhtml|html.erb"],
|
||||||
|
INI: ["ini|conf|cfg|prefs"],
|
||||||
|
Io: ["io"],
|
||||||
|
Ion: ["ion"],
|
||||||
|
Jack: ["jack"],
|
||||||
|
Jade: ["jade|pug"],
|
||||||
|
Java: ["java"],
|
||||||
|
JavaScript: ["js|jsm|cjs|mjs"],
|
||||||
|
JEXL: ["jexl"],
|
||||||
|
JSON: ["json"],
|
||||||
|
JSON5: ["json5"],
|
||||||
|
JSONiq: ["jq"],
|
||||||
|
JSP: ["jsp"],
|
||||||
|
JSSM: ["jssm|jssm_state"],
|
||||||
|
JSX: ["jsx"],
|
||||||
|
Julia: ["jl"],
|
||||||
|
Kotlin: ["kt|kts"],
|
||||||
|
LaTeX: ["tex|latex|ltx|bib"],
|
||||||
|
Latte: ["latte"],
|
||||||
|
LESS: ["less"],
|
||||||
|
Liquid: ["liquid"],
|
||||||
|
Lisp: ["lisp"],
|
||||||
|
LiveScript: ["ls"],
|
||||||
|
Log: ["log"],
|
||||||
|
LogiQL: ["logic|lql"],
|
||||||
|
Logtalk: ["lgt"],
|
||||||
|
LSL: ["lsl"],
|
||||||
|
Lua: ["lua"],
|
||||||
|
LuaPage: ["lp"],
|
||||||
|
Lucene: ["lucene"],
|
||||||
|
Makefile: ["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"],
|
||||||
|
Markdown: ["md|markdown"],
|
||||||
|
Mask: ["mask"],
|
||||||
|
MATLAB: ["matlab"],
|
||||||
|
Maze: ["mz"],
|
||||||
|
MediaWiki: ["wiki|mediawiki"],
|
||||||
|
MEL: ["mel"],
|
||||||
|
MIPS: ["s|asm"],
|
||||||
|
MIXAL: ["mixal"],
|
||||||
|
MUSHCode: ["mc|mush"],
|
||||||
|
MySQL: ["mysql"],
|
||||||
|
Nasal: ["nas"],
|
||||||
|
Nginx: ["nginx|conf"],
|
||||||
|
Nim: ["nim"],
|
||||||
|
Nix: ["nix"],
|
||||||
|
NSIS: ["nsi|nsh"],
|
||||||
|
Nunjucks: ["nunjucks|nunjs|nj|njk"],
|
||||||
|
ObjectiveC: ["m|mm"],
|
||||||
|
OCaml: ["ml|mli"],
|
||||||
|
Odin: ["odin"],
|
||||||
|
PartiQL: ["partiql|pql"],
|
||||||
|
Pascal: ["pas|p"],
|
||||||
|
Perl: ["pl|pm"],
|
||||||
|
pgSQL: ["pgsql"],
|
||||||
|
PHP: ["php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module"],
|
||||||
|
PHP_Laravel_blade: ["blade.php"],
|
||||||
|
Pig: ["pig"],
|
||||||
|
PLSQL: ["plsql"],
|
||||||
|
Powershell: ["ps1"],
|
||||||
|
Praat: ["praat|praatscript|psc|proc"],
|
||||||
|
Prisma: ["prisma"],
|
||||||
|
Prolog: ["plg|prolog"],
|
||||||
|
Properties: ["properties"],
|
||||||
|
Protobuf: ["proto"],
|
||||||
|
PRQL: ["prql"],
|
||||||
|
Puppet: ["epp|pp"],
|
||||||
|
Python: ["py"],
|
||||||
|
QML: ["qml"],
|
||||||
|
R: ["r"],
|
||||||
|
Raku: ["raku|rakumod|rakutest|p6|pl6|pm6"],
|
||||||
|
Razor: ["cshtml|asp"],
|
||||||
|
RDoc: ["Rd"],
|
||||||
|
Red: ["red|reds"],
|
||||||
|
RHTML: ["Rhtml"],
|
||||||
|
Robot: ["robot|resource"],
|
||||||
|
RST: ["rst"],
|
||||||
|
Ruby: ["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"],
|
||||||
|
Rust: ["rs"],
|
||||||
|
SaC: ["sac"],
|
||||||
|
SASS: ["sass"],
|
||||||
|
SCAD: ["scad"],
|
||||||
|
Scala: ["scala|sbt"],
|
||||||
|
Scheme: ["scm|sm|rkt|oak|scheme"],
|
||||||
|
Scrypt: ["scrypt"],
|
||||||
|
SCSS: ["scss"],
|
||||||
|
SH: ["sh|bash|^.bashrc"],
|
||||||
|
SJS: ["sjs"],
|
||||||
|
Slim: ["slim|skim"],
|
||||||
|
Smarty: ["smarty|tpl"],
|
||||||
|
Smithy: ["smithy"],
|
||||||
|
snippets: ["snippets"],
|
||||||
|
Soy_Template: ["soy"],
|
||||||
|
Space: ["space"],
|
||||||
|
SPARQL: ["rq"],
|
||||||
|
SQL: ["sql"],
|
||||||
|
SQLServer: ["sqlserver"],
|
||||||
|
Stylus: ["styl|stylus"],
|
||||||
|
SVG: ["svg"],
|
||||||
|
Swift: ["swift"],
|
||||||
|
Tcl: ["tcl"],
|
||||||
|
Terraform: ["tf", "tfvars", "terragrunt"],
|
||||||
|
Tex: ["tex"],
|
||||||
|
Text: ["txt"],
|
||||||
|
Textile: ["textile"],
|
||||||
|
Toml: ["toml"],
|
||||||
|
TSX: ["tsx"],
|
||||||
|
Turtle: ["ttl"],
|
||||||
|
Twig: ["twig|swig"],
|
||||||
|
Typescript: ["ts|mts|cts|typescript|str"],
|
||||||
|
Vala: ["vala"],
|
||||||
|
VBScript: ["vbs|vb"],
|
||||||
|
Velocity: ["vm"],
|
||||||
|
Verilog: ["v|vh|sv|svh"],
|
||||||
|
VHDL: ["vhd|vhdl"],
|
||||||
|
Visualforce: ["vfp|component|page"],
|
||||||
|
Vue: ["vue"],
|
||||||
|
Wollok: ["wlk|wpgm|wtest"],
|
||||||
|
XML: ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml"],
|
||||||
|
XQuery: ["xq"],
|
||||||
|
YAML: ["yaml|yml"],
|
||||||
|
Zeek: ["zeek|bro"],
|
||||||
|
Zig: ["zig"]
|
||||||
|
};
|
||||||
|
var nameOverrides = {
|
||||||
|
ObjectiveC: "Objective-C",
|
||||||
|
CSharp: "C#",
|
||||||
|
golang: "Go",
|
||||||
|
C_Cpp: "C and C++",
|
||||||
|
Csound_Document: "Csound Document",
|
||||||
|
Csound_Orchestra: "Csound",
|
||||||
|
Csound_Score: "Csound Score",
|
||||||
|
coffee: "CoffeeScript",
|
||||||
|
HTML_Ruby: "HTML (Ruby)",
|
||||||
|
HTML_Elixir: "HTML (Elixir)",
|
||||||
|
FTL: "FreeMarker",
|
||||||
|
PHP_Laravel_blade: "PHP (Blade Template)",
|
||||||
|
Perl6: "Perl 6",
|
||||||
|
AutoHotKey: "AutoHotkey / AutoIt"
|
||||||
|
};
|
||||||
|
var modesByName = {};
|
||||||
|
for (var name in supportedModes) {
|
||||||
|
var data = supportedModes[name];
|
||||||
|
var displayName = (nameOverrides[name] || name).replace(/_/g, " ");
|
||||||
|
var filename = name.toLowerCase();
|
||||||
|
var mode = new Mode(filename, displayName, data[0]);
|
||||||
|
modesByName[filename] = mode;
|
||||||
|
modes.push(mode);
|
||||||
|
}
|
||||||
|
module.exports = {
|
||||||
|
getModeForPath: getModeForPath,
|
||||||
|
modes: modes,
|
||||||
|
modesByName: modesByName
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/themelist",["require","exports","module"], function(require, exports, module){/**
|
||||||
|
* Generates a list of themes available when ace was built.
|
||||||
|
* @fileOverview Generates a list of themes available when ace was built.
|
||||||
|
* @author <a href="mailto:matthewkastor@gmail.com">
|
||||||
|
* Matthew Christopher Kastor-Inare III </a><br />
|
||||||
|
* ☭ Hial Atropa!! ☭
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var themeData = [
|
||||||
|
["Chrome"],
|
||||||
|
["Clouds"],
|
||||||
|
["Crimson Editor"],
|
||||||
|
["Dawn"],
|
||||||
|
["Dreamweaver"],
|
||||||
|
["Eclipse"],
|
||||||
|
["GitHub Light Default"],
|
||||||
|
["GitHub (Legacy)", "github", "light"],
|
||||||
|
["IPlastic"],
|
||||||
|
["Solarized Light"],
|
||||||
|
["TextMate"],
|
||||||
|
["Tomorrow"],
|
||||||
|
["XCode"],
|
||||||
|
["Kuroir"],
|
||||||
|
["KatzenMilch"],
|
||||||
|
["SQL Server", "sqlserver", "light"],
|
||||||
|
["CloudEditor", "cloud_editor", "light"],
|
||||||
|
["Ambiance", "ambiance", "dark"],
|
||||||
|
["Chaos", "chaos", "dark"],
|
||||||
|
["Clouds Midnight", "clouds_midnight", "dark"],
|
||||||
|
["Dracula", "", "dark"],
|
||||||
|
["Cobalt", "cobalt", "dark"],
|
||||||
|
["Gruvbox", "gruvbox", "dark"],
|
||||||
|
["Green on Black", "gob", "dark"],
|
||||||
|
["idle Fingers", "idle_fingers", "dark"],
|
||||||
|
["krTheme", "kr_theme", "dark"],
|
||||||
|
["Merbivore", "merbivore", "dark"],
|
||||||
|
["Merbivore Soft", "merbivore_soft", "dark"],
|
||||||
|
["Mono Industrial", "mono_industrial", "dark"],
|
||||||
|
["Monokai", "monokai", "dark"],
|
||||||
|
["Nord Dark", "nord_dark", "dark"],
|
||||||
|
["One Dark", "one_dark", "dark"],
|
||||||
|
["Pastel on dark", "pastel_on_dark", "dark"],
|
||||||
|
["Solarized Dark", "solarized_dark", "dark"],
|
||||||
|
["Terminal", "terminal", "dark"],
|
||||||
|
["Tomorrow Night", "tomorrow_night", "dark"],
|
||||||
|
["Tomorrow Night Blue", "tomorrow_night_blue", "dark"],
|
||||||
|
["Tomorrow Night Bright", "tomorrow_night_bright", "dark"],
|
||||||
|
["Tomorrow Night 80s", "tomorrow_night_eighties", "dark"],
|
||||||
|
["Twilight", "twilight", "dark"],
|
||||||
|
["Vibrant Ink", "vibrant_ink", "dark"],
|
||||||
|
["GitHub Dark", "github_dark", "dark"],
|
||||||
|
["CloudEditor Dark", "cloud_editor_dark", "dark"]
|
||||||
|
];
|
||||||
|
exports.themesByName = {};
|
||||||
|
exports.themes = themeData.map(function (data) {
|
||||||
|
var name = data[1] || data[0].replace(/ /g, "_").toLowerCase();
|
||||||
|
var theme = {
|
||||||
|
caption: data[0],
|
||||||
|
theme: "ace/theme/" + name,
|
||||||
|
isDark: data[2] == "dark",
|
||||||
|
name: name
|
||||||
|
};
|
||||||
|
exports.themesByName[name] = theme;
|
||||||
|
return theme;
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/options",["require","exports","module","ace/ext/menu_tools/overlay_page","ace/lib/dom","ace/lib/oop","ace/config","ace/lib/event_emitter","ace/ext/modelist","ace/ext/themelist"], function(require, exports, module){"use strict";
|
||||||
|
require("./menu_tools/overlay_page");
|
||||||
|
var dom = require("../lib/dom");
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var config = require("../config");
|
||||||
|
var EventEmitter = require("../lib/event_emitter").EventEmitter;
|
||||||
|
var buildDom = dom.buildDom;
|
||||||
|
var modelist = require("./modelist");
|
||||||
|
var themelist = require("./themelist");
|
||||||
|
var themes = { Bright: [], Dark: [] };
|
||||||
|
themelist.themes.forEach(function (x) {
|
||||||
|
themes[x.isDark ? "Dark" : "Bright"].push({ caption: x.caption, value: x.theme });
|
||||||
|
});
|
||||||
|
var modes = modelist.modes.map(function (x) {
|
||||||
|
return { caption: x.caption, value: x.mode };
|
||||||
|
});
|
||||||
|
var optionGroups = {
|
||||||
|
Main: {
|
||||||
|
Mode: {
|
||||||
|
path: "mode",
|
||||||
|
type: "select",
|
||||||
|
items: modes
|
||||||
|
},
|
||||||
|
Theme: {
|
||||||
|
path: "theme",
|
||||||
|
type: "select",
|
||||||
|
items: themes
|
||||||
|
},
|
||||||
|
"Keybinding": {
|
||||||
|
type: "buttonBar",
|
||||||
|
path: "keyboardHandler",
|
||||||
|
items: [
|
||||||
|
{ caption: "Ace", value: null },
|
||||||
|
{ caption: "Vim", value: "ace/keyboard/vim" },
|
||||||
|
{ caption: "Emacs", value: "ace/keyboard/emacs" },
|
||||||
|
{ caption: "Sublime", value: "ace/keyboard/sublime" },
|
||||||
|
{ caption: "VSCode", value: "ace/keyboard/vscode" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Font Size": {
|
||||||
|
path: "fontSize",
|
||||||
|
type: "number",
|
||||||
|
defaultValue: 12,
|
||||||
|
defaults: [
|
||||||
|
{ caption: "12px", value: 12 },
|
||||||
|
{ caption: "24px", value: 24 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Soft Wrap": {
|
||||||
|
type: "buttonBar",
|
||||||
|
path: "wrap",
|
||||||
|
items: [
|
||||||
|
{ caption: "Off", value: "off" },
|
||||||
|
{ caption: "View", value: "free" },
|
||||||
|
{ caption: "margin", value: "printMargin" },
|
||||||
|
{ caption: "40", value: "40" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Cursor Style": {
|
||||||
|
path: "cursorStyle",
|
||||||
|
items: [
|
||||||
|
{ caption: "Ace", value: "ace" },
|
||||||
|
{ caption: "Slim", value: "slim" },
|
||||||
|
{ caption: "Smooth", value: "smooth" },
|
||||||
|
{ caption: "Smooth And Slim", value: "smooth slim" },
|
||||||
|
{ caption: "Wide", value: "wide" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Folding": {
|
||||||
|
path: "foldStyle",
|
||||||
|
items: [
|
||||||
|
{ caption: "Manual", value: "manual" },
|
||||||
|
{ caption: "Mark begin", value: "markbegin" },
|
||||||
|
{ caption: "Mark begin and end", value: "markbeginend" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Soft Tabs": [{
|
||||||
|
path: "useSoftTabs"
|
||||||
|
}, {
|
||||||
|
ariaLabel: "Tab Size",
|
||||||
|
path: "tabSize",
|
||||||
|
type: "number",
|
||||||
|
values: [2, 3, 4, 8, 16]
|
||||||
|
}],
|
||||||
|
"Overscroll": {
|
||||||
|
type: "buttonBar",
|
||||||
|
path: "scrollPastEnd",
|
||||||
|
items: [
|
||||||
|
{ caption: "None", value: 0 },
|
||||||
|
{ caption: "Half", value: 0.5 },
|
||||||
|
{ caption: "Full", value: 1 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
More: {
|
||||||
|
"Atomic soft tabs": {
|
||||||
|
path: "navigateWithinSoftTabs"
|
||||||
|
},
|
||||||
|
"Enable Behaviours": {
|
||||||
|
path: "behavioursEnabled"
|
||||||
|
},
|
||||||
|
"Wrap with quotes": {
|
||||||
|
path: "wrapBehavioursEnabled"
|
||||||
|
},
|
||||||
|
"Enable Auto Indent": {
|
||||||
|
path: "enableAutoIndent"
|
||||||
|
},
|
||||||
|
"Full Line Selection": {
|
||||||
|
type: "checkbox",
|
||||||
|
values: "text|line",
|
||||||
|
path: "selectionStyle"
|
||||||
|
},
|
||||||
|
"Highlight Active Line": {
|
||||||
|
path: "highlightActiveLine"
|
||||||
|
},
|
||||||
|
"Show Invisibles": {
|
||||||
|
path: "showInvisibles"
|
||||||
|
},
|
||||||
|
"Show Indent Guides": {
|
||||||
|
path: "displayIndentGuides"
|
||||||
|
},
|
||||||
|
"Highlight Indent Guides": {
|
||||||
|
path: "highlightIndentGuides"
|
||||||
|
},
|
||||||
|
"Persistent HScrollbar": {
|
||||||
|
path: "hScrollBarAlwaysVisible"
|
||||||
|
},
|
||||||
|
"Persistent VScrollbar": {
|
||||||
|
path: "vScrollBarAlwaysVisible"
|
||||||
|
},
|
||||||
|
"Animate scrolling": {
|
||||||
|
path: "animatedScroll"
|
||||||
|
},
|
||||||
|
"Show Gutter": {
|
||||||
|
path: "showGutter"
|
||||||
|
},
|
||||||
|
"Show Line Numbers": {
|
||||||
|
path: "showLineNumbers"
|
||||||
|
},
|
||||||
|
"Relative Line Numbers": {
|
||||||
|
path: "relativeLineNumbers"
|
||||||
|
},
|
||||||
|
"Fixed Gutter Width": {
|
||||||
|
path: "fixedWidthGutter"
|
||||||
|
},
|
||||||
|
"Show Print Margin": [{
|
||||||
|
path: "showPrintMargin"
|
||||||
|
}, {
|
||||||
|
ariaLabel: "Print Margin",
|
||||||
|
type: "number",
|
||||||
|
path: "printMarginColumn"
|
||||||
|
}],
|
||||||
|
"Indented Soft Wrap": {
|
||||||
|
path: "indentedSoftWrap"
|
||||||
|
},
|
||||||
|
"Highlight selected word": {
|
||||||
|
path: "highlightSelectedWord"
|
||||||
|
},
|
||||||
|
"Fade Fold Widgets": {
|
||||||
|
path: "fadeFoldWidgets"
|
||||||
|
},
|
||||||
|
"Use textarea for IME": {
|
||||||
|
path: "useTextareaForIME"
|
||||||
|
},
|
||||||
|
"Merge Undo Deltas": {
|
||||||
|
path: "mergeUndoDeltas",
|
||||||
|
items: [
|
||||||
|
{ caption: "Always", value: "always" },
|
||||||
|
{ caption: "Never", value: "false" },
|
||||||
|
{ caption: "Timed", value: "true" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Elastic Tabstops": {
|
||||||
|
path: "useElasticTabstops"
|
||||||
|
},
|
||||||
|
"Incremental Search": {
|
||||||
|
path: "useIncrementalSearch"
|
||||||
|
},
|
||||||
|
"Read-only": {
|
||||||
|
path: "readOnly"
|
||||||
|
},
|
||||||
|
"Copy without selection": {
|
||||||
|
path: "copyWithEmptySelection"
|
||||||
|
},
|
||||||
|
"Live Autocompletion": {
|
||||||
|
path: "enableLiveAutocompletion"
|
||||||
|
},
|
||||||
|
"Custom scrollbar": {
|
||||||
|
path: "customScrollbar"
|
||||||
|
},
|
||||||
|
"Use SVG gutter icons": {
|
||||||
|
path: "useSvgGutterIcons"
|
||||||
|
},
|
||||||
|
"Annotations for folded lines": {
|
||||||
|
path: "showFoldedAnnotations"
|
||||||
|
},
|
||||||
|
"Keyboard Accessibility Mode": {
|
||||||
|
path: "enableKeyboardAccessibility"
|
||||||
|
},
|
||||||
|
"Gutter tooltip follows mouse": {
|
||||||
|
path: "tooltipFollowsMouse",
|
||||||
|
defaultValue: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var OptionPanel = /** @class */ (function () {
|
||||||
|
function OptionPanel(editor, element) {
|
||||||
|
this.editor = editor;
|
||||||
|
this.container = element || document.createElement("div");
|
||||||
|
this.groups = [];
|
||||||
|
this.options = {};
|
||||||
|
}
|
||||||
|
OptionPanel.prototype.add = function (config) {
|
||||||
|
if (config.Main)
|
||||||
|
oop.mixin(optionGroups.Main, config.Main);
|
||||||
|
if (config.More)
|
||||||
|
oop.mixin(optionGroups.More, config.More);
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.render = function () {
|
||||||
|
this.container.innerHTML = "";
|
||||||
|
buildDom(["table", { role: "presentation", id: "controls" },
|
||||||
|
this.renderOptionGroup(optionGroups.Main),
|
||||||
|
["tr", null, ["td", { colspan: 2 },
|
||||||
|
["table", { role: "presentation", id: "more-controls" },
|
||||||
|
this.renderOptionGroup(optionGroups.More)
|
||||||
|
]
|
||||||
|
]],
|
||||||
|
["tr", null, ["td", { colspan: 2 }, "version " + config.version]]
|
||||||
|
], this.container);
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.renderOptionGroup = function (group) {
|
||||||
|
return Object.keys(group).map(function (key, i) {
|
||||||
|
var item = group[key];
|
||||||
|
if (!item.position)
|
||||||
|
item.position = i / 10000;
|
||||||
|
if (!item.label)
|
||||||
|
item.label = key;
|
||||||
|
return item;
|
||||||
|
}).sort(function (a, b) {
|
||||||
|
return a.position - b.position;
|
||||||
|
}).map(function (item) {
|
||||||
|
return this.renderOption(item.label, item);
|
||||||
|
}, this);
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.renderOptionControl = function (key, option) {
|
||||||
|
var self = this;
|
||||||
|
if (Array.isArray(option)) {
|
||||||
|
return option.map(function (x) {
|
||||||
|
return self.renderOptionControl(key, x);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var control;
|
||||||
|
var value = self.getOption(option);
|
||||||
|
if (option.values && option.type != "checkbox") {
|
||||||
|
if (typeof option.values == "string")
|
||||||
|
option.values = option.values.split("|");
|
||||||
|
option.items = option.values.map(function (v) {
|
||||||
|
return { value: v, name: v };
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (option.type == "buttonBar") {
|
||||||
|
control = ["div", { role: "group", "aria-labelledby": option.path + "-label" }, option.items.map(function (item) {
|
||||||
|
return ["button", {
|
||||||
|
value: item.value,
|
||||||
|
ace_selected_button: value == item.value,
|
||||||
|
'aria-pressed': value == item.value,
|
||||||
|
onclick: function () {
|
||||||
|
self.setOption(option, item.value);
|
||||||
|
var nodes = this.parentNode.querySelectorAll("[ace_selected_button]");
|
||||||
|
for (var i = 0; i < nodes.length; i++) {
|
||||||
|
nodes[i].removeAttribute("ace_selected_button");
|
||||||
|
nodes[i].setAttribute("aria-pressed", false);
|
||||||
|
}
|
||||||
|
this.setAttribute("ace_selected_button", true);
|
||||||
|
this.setAttribute("aria-pressed", true);
|
||||||
|
}
|
||||||
|
}, item.desc || item.caption || item.name];
|
||||||
|
})];
|
||||||
|
}
|
||||||
|
else if (option.type == "number") {
|
||||||
|
control = ["input", { type: "number", value: value || option.defaultValue, style: "width:3em", oninput: function () {
|
||||||
|
self.setOption(option, parseInt(this.value));
|
||||||
|
} }];
|
||||||
|
if (option.ariaLabel) {
|
||||||
|
control[1]["aria-label"] = option.ariaLabel;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control[1].id = key;
|
||||||
|
}
|
||||||
|
if (option.defaults) {
|
||||||
|
control = [control, option.defaults.map(function (item) {
|
||||||
|
return ["button", { onclick: function () {
|
||||||
|
var input = this.parentNode.firstChild;
|
||||||
|
input.value = item.value;
|
||||||
|
input.oninput();
|
||||||
|
} }, item.caption];
|
||||||
|
})];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (option.items) {
|
||||||
|
var buildItems = function (items) {
|
||||||
|
return items.map(function (item) {
|
||||||
|
return ["option", { value: item.value || item.name }, item.desc || item.caption || item.name];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var items = Array.isArray(option.items)
|
||||||
|
? buildItems(option.items)
|
||||||
|
: Object.keys(option.items).map(function (key) {
|
||||||
|
return ["optgroup", { "label": key }, buildItems(option.items[key])];
|
||||||
|
});
|
||||||
|
control = ["select", { id: key, value: value, onchange: function () {
|
||||||
|
self.setOption(option, this.value);
|
||||||
|
} }, items];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (typeof option.values == "string")
|
||||||
|
option.values = option.values.split("|");
|
||||||
|
if (option.values)
|
||||||
|
value = value == option.values[1];
|
||||||
|
control = ["input", { type: "checkbox", id: key, checked: value || null, onchange: function () {
|
||||||
|
var value = this.checked;
|
||||||
|
if (option.values)
|
||||||
|
value = option.values[value ? 1 : 0];
|
||||||
|
self.setOption(option, value);
|
||||||
|
} }];
|
||||||
|
if (option.type == "checkedNumber") {
|
||||||
|
control = [control, []];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return control;
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.renderOption = function (key, option) {
|
||||||
|
if (option.path && !option.onchange && !this.editor.$options[option.path])
|
||||||
|
return;
|
||||||
|
var path = Array.isArray(option) ? option[0].path : option.path;
|
||||||
|
this.options[path] = option;
|
||||||
|
var safeKey = "-" + path;
|
||||||
|
var safeId = path + "-label";
|
||||||
|
var control = this.renderOptionControl(safeKey, option);
|
||||||
|
return ["tr", { class: "ace_optionsMenuEntry" }, ["td",
|
||||||
|
["label", { for: safeKey, id: safeId }, key]
|
||||||
|
], ["td", control]];
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.setOption = function (option, value) {
|
||||||
|
if (typeof option == "string")
|
||||||
|
option = this.options[option];
|
||||||
|
if (value == "false")
|
||||||
|
value = false;
|
||||||
|
if (value == "true")
|
||||||
|
value = true;
|
||||||
|
if (value == "null")
|
||||||
|
value = null;
|
||||||
|
if (value == "undefined")
|
||||||
|
value = undefined;
|
||||||
|
if (typeof value == "string" && parseFloat(value).toString() == value)
|
||||||
|
value = parseFloat(value);
|
||||||
|
if (option.onchange)
|
||||||
|
option.onchange(value);
|
||||||
|
else if (option.path)
|
||||||
|
this.editor.setOption(option.path, value);
|
||||||
|
this._signal("setOption", { name: option.path, value: value });
|
||||||
|
};
|
||||||
|
OptionPanel.prototype.getOption = function (option) {
|
||||||
|
if (option.getValue)
|
||||||
|
return option.getValue();
|
||||||
|
return this.editor.getOption(option.path);
|
||||||
|
};
|
||||||
|
return OptionPanel;
|
||||||
|
}());
|
||||||
|
oop.implement(OptionPanel.prototype, EventEmitter);
|
||||||
|
exports.OptionPanel = OptionPanel;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/settings_menu",["require","exports","module","ace/ext/options","ace/ext/menu_tools/overlay_page","ace/editor"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/
|
||||||
|
"use strict";
|
||||||
|
var OptionPanel = require("./options").OptionPanel;
|
||||||
|
var overlayPage = require('./menu_tools/overlay_page').overlayPage;
|
||||||
|
function showSettingsMenu(editor) {
|
||||||
|
if (!document.getElementById('ace_settingsmenu')) {
|
||||||
|
var options = new OptionPanel(editor);
|
||||||
|
options.render();
|
||||||
|
options.container.id = "ace_settingsmenu";
|
||||||
|
overlayPage(editor, options.container);
|
||||||
|
options.container.querySelector("select,input,button,checkbox").focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
module.exports.init = function () {
|
||||||
|
var Editor = require("../editor").Editor;
|
||||||
|
Editor.prototype.showSettingsMenu = function () {
|
||||||
|
showSettingsMenu(this);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/settings_menu"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
define("ace/ext/simple_tokenizer",["require","exports","module","ace/tokenizer","ace/layer/text_util"], function(require, exports, module){"use strict";
|
||||||
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||||
|
var isTextToken = require("../layer/text_util").isTextToken;
|
||||||
|
var SimpleTokenizer = /** @class */ (function () {
|
||||||
|
function SimpleTokenizer(content, tokenizer) {
|
||||||
|
this._lines = content.split(/\r\n|\r|\n/);
|
||||||
|
this._states = [];
|
||||||
|
this._tokenizer = tokenizer;
|
||||||
|
}
|
||||||
|
SimpleTokenizer.prototype.getTokens = function (row) {
|
||||||
|
var line = this._lines[row];
|
||||||
|
var previousState = this._states[row - 1];
|
||||||
|
var data = this._tokenizer.getLineTokens(line, previousState);
|
||||||
|
this._states[row] = data.state;
|
||||||
|
return data.tokens;
|
||||||
|
};
|
||||||
|
SimpleTokenizer.prototype.getLength = function () {
|
||||||
|
return this._lines.length;
|
||||||
|
};
|
||||||
|
return SimpleTokenizer;
|
||||||
|
}());
|
||||||
|
function tokenize(content, highlightRules) {
|
||||||
|
var tokenizer = new SimpleTokenizer(content, new Tokenizer(highlightRules.getRules()));
|
||||||
|
var result = [];
|
||||||
|
for (var lineIndex = 0; lineIndex < tokenizer.getLength(); lineIndex++) {
|
||||||
|
var lineTokens = tokenizer.getTokens(lineIndex);
|
||||||
|
result.push(lineTokens.map(function (token) { return ({
|
||||||
|
className: isTextToken(token.type) ? undefined : "ace_" + token.type.replace(/\./g, " ace_"),
|
||||||
|
value: token.value
|
||||||
|
}); }));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
module.exports = {
|
||||||
|
tokenize: tokenize
|
||||||
|
};
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/simple_tokenizer"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
define("ace/ext/spellcheck",["require","exports","module","ace/lib/event","ace/editor","ace/config"], function(require, exports, module){"use strict";
|
||||||
|
var event = require("../lib/event");
|
||||||
|
exports.contextMenuHandler = function (e) {
|
||||||
|
var host = e.target;
|
||||||
|
var text = host.textInput.getElement();
|
||||||
|
if (!host.selection.isEmpty())
|
||||||
|
return;
|
||||||
|
var c = host.getCursorPosition();
|
||||||
|
var r = host.session.getWordRange(c.row, c.column);
|
||||||
|
var w = host.session.getTextRange(r);
|
||||||
|
host.session.tokenRe.lastIndex = 0;
|
||||||
|
if (!host.session.tokenRe.test(w))
|
||||||
|
return;
|
||||||
|
var PLACEHOLDER = "\x01\x01";
|
||||||
|
var value = w + " " + PLACEHOLDER;
|
||||||
|
text.value = value;
|
||||||
|
text.setSelectionRange(w.length, w.length + 1);
|
||||||
|
text.setSelectionRange(0, 0);
|
||||||
|
text.setSelectionRange(0, w.length);
|
||||||
|
var afterKeydown = false;
|
||||||
|
event.addListener(text, "keydown", function onKeydown() {
|
||||||
|
event.removeListener(text, "keydown", onKeydown);
|
||||||
|
afterKeydown = true;
|
||||||
|
});
|
||||||
|
host.textInput.setInputHandler(function (newVal) {
|
||||||
|
if (newVal == value)
|
||||||
|
return '';
|
||||||
|
if (newVal.lastIndexOf(value, 0) === 0)
|
||||||
|
return newVal.slice(value.length);
|
||||||
|
if (newVal.substr(text.selectionEnd) == value)
|
||||||
|
return newVal.slice(0, -value.length);
|
||||||
|
if (newVal.slice(-2) == PLACEHOLDER) {
|
||||||
|
var val = newVal.slice(0, -2);
|
||||||
|
if (val.slice(-1) == " ") {
|
||||||
|
if (afterKeydown)
|
||||||
|
return val.substring(0, text.selectionEnd);
|
||||||
|
val = val.slice(0, -1);
|
||||||
|
host.session.replace(r, val);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newVal;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var Editor = require("../editor").Editor;
|
||||||
|
require("../config").defineOptions(Editor.prototype, "editor", {
|
||||||
|
spellcheck: {
|
||||||
|
set: function (val) {
|
||||||
|
var text = this.textInput.getElement();
|
||||||
|
text.spellcheck = !!val;
|
||||||
|
if (!val)
|
||||||
|
this.removeListener("nativecontextmenu", exports.contextMenuHandler);
|
||||||
|
else
|
||||||
|
this.on("nativecontextmenu", exports.contextMenuHandler);
|
||||||
|
},
|
||||||
|
value: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/spellcheck"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,186 @@
|
||||||
|
define("ace/split",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/editor","ace/virtual_renderer","ace/edit_session"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("./lib/oop");
|
||||||
|
var lang = require("./lib/lang");
|
||||||
|
var EventEmitter = require("./lib/event_emitter").EventEmitter;
|
||||||
|
var Editor = require("./editor").Editor;
|
||||||
|
var Renderer = require("./virtual_renderer").VirtualRenderer;
|
||||||
|
var EditSession = require("./edit_session").EditSession;
|
||||||
|
var Split;
|
||||||
|
Split = function (container, theme, splits) {
|
||||||
|
this.BELOW = 1;
|
||||||
|
this.BESIDE = 0;
|
||||||
|
this.$container = container;
|
||||||
|
this.$theme = theme;
|
||||||
|
this.$splits = 0;
|
||||||
|
this.$editorCSS = "";
|
||||||
|
this.$editors = [];
|
||||||
|
this.$orientation = this.BESIDE;
|
||||||
|
this.setSplits(splits || 1);
|
||||||
|
this.$cEditor = this.$editors[0];
|
||||||
|
this.on("focus", function (editor) {
|
||||||
|
this.$cEditor = editor;
|
||||||
|
}.bind(this));
|
||||||
|
};
|
||||||
|
(function () {
|
||||||
|
oop.implement(this, EventEmitter);
|
||||||
|
this.$createEditor = function () {
|
||||||
|
var el = document.createElement("div");
|
||||||
|
el.className = this.$editorCSS;
|
||||||
|
el.style.cssText = "position: absolute; top:0px; bottom:0px";
|
||||||
|
this.$container.appendChild(el);
|
||||||
|
var editor = new Editor(new Renderer(el, this.$theme));
|
||||||
|
editor.on("focus", function () {
|
||||||
|
this._emit("focus", editor);
|
||||||
|
}.bind(this));
|
||||||
|
this.$editors.push(editor);
|
||||||
|
editor.setFontSize(this.$fontSize);
|
||||||
|
return editor;
|
||||||
|
};
|
||||||
|
this.setSplits = function (splits) {
|
||||||
|
var editor;
|
||||||
|
if (splits < 1) {
|
||||||
|
throw "The number of splits have to be > 0!";
|
||||||
|
}
|
||||||
|
if (splits == this.$splits) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (splits > this.$splits) {
|
||||||
|
while (this.$splits < this.$editors.length && this.$splits < splits) {
|
||||||
|
editor = this.$editors[this.$splits];
|
||||||
|
this.$container.appendChild(editor.container);
|
||||||
|
editor.setFontSize(this.$fontSize);
|
||||||
|
this.$splits++;
|
||||||
|
}
|
||||||
|
while (this.$splits < splits) {
|
||||||
|
this.$createEditor();
|
||||||
|
this.$splits++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
while (this.$splits > splits) {
|
||||||
|
editor = this.$editors[this.$splits - 1];
|
||||||
|
this.$container.removeChild(editor.container);
|
||||||
|
this.$splits--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.resize();
|
||||||
|
};
|
||||||
|
this.getSplits = function () {
|
||||||
|
return this.$splits;
|
||||||
|
};
|
||||||
|
this.getEditor = function (idx) {
|
||||||
|
return this.$editors[idx];
|
||||||
|
};
|
||||||
|
this.getCurrentEditor = function () {
|
||||||
|
return this.$cEditor;
|
||||||
|
};
|
||||||
|
this.focus = function () {
|
||||||
|
this.$cEditor.focus();
|
||||||
|
};
|
||||||
|
this.blur = function () {
|
||||||
|
this.$cEditor.blur();
|
||||||
|
};
|
||||||
|
this.setTheme = function (theme) {
|
||||||
|
this.$editors.forEach(function (editor) {
|
||||||
|
editor.setTheme(theme);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
this.setKeyboardHandler = function (keybinding) {
|
||||||
|
this.$editors.forEach(function (editor) {
|
||||||
|
editor.setKeyboardHandler(keybinding);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
this.forEach = function (callback, scope) {
|
||||||
|
this.$editors.forEach(callback, scope);
|
||||||
|
};
|
||||||
|
this.$fontSize = "";
|
||||||
|
this.setFontSize = function (size) {
|
||||||
|
this.$fontSize = size;
|
||||||
|
this.forEach(function (editor) {
|
||||||
|
editor.setFontSize(size);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
this.$cloneSession = function (session) {
|
||||||
|
var s = new EditSession(session.getDocument(), session.getMode());
|
||||||
|
var undoManager = session.getUndoManager();
|
||||||
|
s.setUndoManager(undoManager);
|
||||||
|
s.setTabSize(session.getTabSize());
|
||||||
|
s.setUseSoftTabs(session.getUseSoftTabs());
|
||||||
|
s.setOverwrite(session.getOverwrite());
|
||||||
|
s.setBreakpoints(session.getBreakpoints());
|
||||||
|
s.setUseWrapMode(session.getUseWrapMode());
|
||||||
|
s.setUseWorker(session.getUseWorker());
|
||||||
|
s.setWrapLimitRange(session.$wrapLimitRange.min, session.$wrapLimitRange.max);
|
||||||
|
s.$foldData = session.$cloneFoldData();
|
||||||
|
return s;
|
||||||
|
};
|
||||||
|
this.setSession = function (session, idx) {
|
||||||
|
var editor;
|
||||||
|
if (idx == null) {
|
||||||
|
editor = this.$cEditor;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
editor = this.$editors[idx];
|
||||||
|
}
|
||||||
|
var isUsed = this.$editors.some(function (editor) {
|
||||||
|
return editor.session === session;
|
||||||
|
});
|
||||||
|
if (isUsed) {
|
||||||
|
session = this.$cloneSession(session);
|
||||||
|
}
|
||||||
|
editor.setSession(session);
|
||||||
|
return session;
|
||||||
|
};
|
||||||
|
this.getOrientation = function () {
|
||||||
|
return this.$orientation;
|
||||||
|
};
|
||||||
|
this.setOrientation = function (orientation) {
|
||||||
|
if (this.$orientation == orientation) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.$orientation = orientation;
|
||||||
|
this.resize();
|
||||||
|
};
|
||||||
|
this.resize = function () {
|
||||||
|
var width = this.$container.clientWidth;
|
||||||
|
var height = this.$container.clientHeight;
|
||||||
|
var editor;
|
||||||
|
if (this.$orientation == this.BESIDE) {
|
||||||
|
var editorWidth = width / this.$splits;
|
||||||
|
for (var i = 0; i < this.$splits; i++) {
|
||||||
|
editor = this.$editors[i];
|
||||||
|
editor.container.style.width = editorWidth + "px";
|
||||||
|
editor.container.style.top = "0px";
|
||||||
|
editor.container.style.left = i * editorWidth + "px";
|
||||||
|
editor.container.style.height = height + "px";
|
||||||
|
editor.resize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var editorHeight = height / this.$splits;
|
||||||
|
for (var i = 0; i < this.$splits; i++) {
|
||||||
|
editor = this.$editors[i];
|
||||||
|
editor.container.style.width = width + "px";
|
||||||
|
editor.container.style.top = i * editorHeight + "px";
|
||||||
|
editor.container.style.left = "0px";
|
||||||
|
editor.container.style.height = editorHeight + "px";
|
||||||
|
editor.resize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}).call(Split.prototype);
|
||||||
|
exports.Split = Split;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/split",["require","exports","module","ace/split"], function(require, exports, module){"use strict";
|
||||||
|
module.exports = require("../split");
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/split"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
define("ace/ext/static-css",["require","exports","module"], function(require, exports, module){module.exports = ".ace_static_highlight {\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', 'Droid Sans Mono', monospace;\n font-size: 12px;\n white-space: pre-wrap\n}\n\n.ace_static_highlight .ace_gutter {\n width: 2em;\n text-align: right;\n padding: 0 3px 0 0;\n margin-right: 3px;\n contain: none;\n}\n\n.ace_static_highlight.ace_show_gutter .ace_line {\n padding-left: 2.6em;\n}\n\n.ace_static_highlight .ace_line { position: relative; }\n\n.ace_static_highlight .ace_gutter-cell {\n -moz-user-select: -moz-none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n top: 0;\n bottom: 0;\n left: 0;\n position: absolute;\n}\n\n\n.ace_static_highlight .ace_gutter-cell:before {\n content: counter(ace_line, decimal);\n counter-increment: ace_line;\n}\n.ace_static_highlight {\n counter-reset: ace_line;\n}\n";
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/ext/static_highlight",["require","exports","module","ace/edit_session","ace/layer/text","ace/ext/static-css","ace/config","ace/lib/dom","ace/lib/lang"], function(require, exports, module){"use strict";
|
||||||
|
var EditSession = require("../edit_session").EditSession;
|
||||||
|
var TextLayer = require("../layer/text").Text;
|
||||||
|
var baseStyles = require("./static-css");
|
||||||
|
var config = require("../config");
|
||||||
|
var dom = require("../lib/dom");
|
||||||
|
var escapeHTML = require("../lib/lang").escapeHTML;
|
||||||
|
var Element = /** @class */ (function () {
|
||||||
|
function Element(type) { this.className;
|
||||||
|
this.type = type;
|
||||||
|
this.style = {};
|
||||||
|
this.textContent = "";
|
||||||
|
}
|
||||||
|
Element.prototype.cloneNode = function () {
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Element.prototype.appendChild = function (child) {
|
||||||
|
this.textContent += child.toString();
|
||||||
|
};
|
||||||
|
Element.prototype.toString = function () {
|
||||||
|
var stringBuilder = [];
|
||||||
|
if (this.type != "fragment") {
|
||||||
|
stringBuilder.push("<", this.type);
|
||||||
|
if (this.className)
|
||||||
|
stringBuilder.push(" class='", this.className, "'");
|
||||||
|
var styleStr = [];
|
||||||
|
for (var key in this.style) {
|
||||||
|
styleStr.push(key, ":", this.style[key]);
|
||||||
|
}
|
||||||
|
if (styleStr.length)
|
||||||
|
stringBuilder.push(" style='", styleStr.join(""), "'");
|
||||||
|
stringBuilder.push(">");
|
||||||
|
}
|
||||||
|
if (this.textContent) {
|
||||||
|
stringBuilder.push(this.textContent);
|
||||||
|
}
|
||||||
|
if (this.type != "fragment") {
|
||||||
|
stringBuilder.push("</", this.type, ">");
|
||||||
|
}
|
||||||
|
return stringBuilder.join("");
|
||||||
|
};
|
||||||
|
return Element;
|
||||||
|
}());
|
||||||
|
var simpleDom = {
|
||||||
|
createTextNode: function (/** @type {string} */ textContent, /** @type {any} */ element) {
|
||||||
|
return escapeHTML(textContent);
|
||||||
|
},
|
||||||
|
createElement: function (/** @type {string} */ type) {
|
||||||
|
return new Element(type);
|
||||||
|
},
|
||||||
|
createFragment: function () {
|
||||||
|
return new Element("fragment");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var SimpleTextLayer = function () {
|
||||||
|
this.config = {};
|
||||||
|
this.dom = simpleDom;
|
||||||
|
};
|
||||||
|
SimpleTextLayer.prototype = TextLayer.prototype;
|
||||||
|
var highlight = function (el, opts, callback) {
|
||||||
|
var m = el.className.match(/lang-(\w+)/);
|
||||||
|
var mode = opts.mode || m && ("ace/mode/" + m[1]);
|
||||||
|
if (!mode)
|
||||||
|
return false;
|
||||||
|
var theme = opts.theme || "ace/theme/textmate";
|
||||||
|
var data = "";
|
||||||
|
var nodes = [];
|
||||||
|
if (el.firstElementChild) {
|
||||||
|
var textLen = 0;
|
||||||
|
for (var i = 0; i < el.childNodes.length; i++) {
|
||||||
|
var ch = el.childNodes[i];
|
||||||
|
if (ch.nodeType == 3) {
|
||||||
|
textLen += ch.data.length;
|
||||||
|
data += ch.data;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
nodes.push(textLen, ch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data = el.textContent;
|
||||||
|
if (opts.trim)
|
||||||
|
data = data.trim();
|
||||||
|
}
|
||||||
|
highlight.render(data, mode, theme, opts.firstLineNumber, !opts.showGutter, function (highlighted) {
|
||||||
|
dom.importCssString(highlighted.css, "ace_highlight", true);
|
||||||
|
el.innerHTML = highlighted.html;
|
||||||
|
var container = el.firstChild.firstChild;
|
||||||
|
for (var i = 0; i < nodes.length; i += 2) {
|
||||||
|
var pos = highlighted.session.doc.indexToPosition(nodes[i]);
|
||||||
|
var node = nodes[i + 1];
|
||||||
|
var lineEl = container.children[pos.row];
|
||||||
|
lineEl && lineEl.appendChild(node);
|
||||||
|
}
|
||||||
|
callback && callback();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
highlight.render = function (input, mode, theme, lineStart, disableGutter, callback) {
|
||||||
|
var waiting = 1;
|
||||||
|
var modeCache = EditSession.prototype.$modes;
|
||||||
|
if (typeof theme == "string") {
|
||||||
|
waiting++;
|
||||||
|
config.loadModule(['theme', theme], function (m) {
|
||||||
|
theme = m;
|
||||||
|
--waiting || done();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var modeOptions;
|
||||||
|
if (mode && typeof mode === "object" && !mode.getTokenizer) {
|
||||||
|
modeOptions = mode;
|
||||||
|
mode = modeOptions.path;
|
||||||
|
}
|
||||||
|
if (typeof mode == "string") {
|
||||||
|
waiting++;
|
||||||
|
config.loadModule(['mode', mode], function (m) {
|
||||||
|
if (!modeCache[ /**@type{string}*/(mode)] || modeOptions)
|
||||||
|
modeCache[ /**@type{string}*/(mode)] = new m.Mode(modeOptions);
|
||||||
|
mode = modeCache[ /**@type{string}*/(mode)];
|
||||||
|
--waiting || done();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function done() {
|
||||||
|
var result = highlight.renderSync(input, mode, theme, lineStart, disableGutter);
|
||||||
|
return callback ? callback(result) : result;
|
||||||
|
}
|
||||||
|
return --waiting || done();
|
||||||
|
};
|
||||||
|
highlight.renderSync = function (input, mode, theme, lineStart, disableGutter) {
|
||||||
|
lineStart = parseInt(lineStart || 1, 10);
|
||||||
|
var session = new EditSession("");
|
||||||
|
session.setUseWorker(false);
|
||||||
|
session.setMode(mode);
|
||||||
|
var textLayer = new SimpleTextLayer();
|
||||||
|
textLayer.setSession(session);
|
||||||
|
Object.keys(textLayer.$tabStrings).forEach(function (k) {
|
||||||
|
if (typeof textLayer.$tabStrings[k] == "string") {
|
||||||
|
var el = simpleDom.createFragment();
|
||||||
|
el.textContent = textLayer.$tabStrings[k];
|
||||||
|
textLayer.$tabStrings[k] = el;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
session.setValue(input);
|
||||||
|
var length = session.getLength();
|
||||||
|
var outerEl = simpleDom.createElement("div");
|
||||||
|
outerEl.className = theme.cssClass;
|
||||||
|
var innerEl = simpleDom.createElement("div");
|
||||||
|
innerEl.className = "ace_static_highlight" + (disableGutter ? "" : " ace_show_gutter");
|
||||||
|
innerEl.style["counter-reset"] = "ace_line " + (lineStart - 1);
|
||||||
|
for (var ix = 0; ix < length; ix++) {
|
||||||
|
var lineEl = simpleDom.createElement("div");
|
||||||
|
lineEl.className = "ace_line";
|
||||||
|
if (!disableGutter) {
|
||||||
|
var gutterEl = simpleDom.createElement("span");
|
||||||
|
gutterEl.className = "ace_gutter ace_gutter-cell";
|
||||||
|
gutterEl.textContent = "";
|
||||||
|
lineEl.appendChild(gutterEl);
|
||||||
|
}
|
||||||
|
textLayer.$renderLine(lineEl, ix, false);
|
||||||
|
lineEl.textContent += "\n";
|
||||||
|
innerEl.appendChild(lineEl);
|
||||||
|
}
|
||||||
|
outerEl.appendChild(innerEl);
|
||||||
|
return {
|
||||||
|
css: baseStyles + theme.cssText,
|
||||||
|
html: outerEl.toString(),
|
||||||
|
session: session
|
||||||
|
};
|
||||||
|
};
|
||||||
|
module.exports = highlight;
|
||||||
|
module.exports.highlight = highlight;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/static_highlight"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
define("ace/ext/statusbar",["require","exports","module","ace/lib/dom","ace/lib/lang"], function(require, exports, module){"use strict";
|
||||||
|
var dom = require("../lib/dom");
|
||||||
|
var lang = require("../lib/lang");
|
||||||
|
var StatusBar = /** @class */ (function () {
|
||||||
|
function StatusBar(editor, parentNode) {
|
||||||
|
this.element = dom.createElement("div");
|
||||||
|
this.element.className = "ace_status-indicator";
|
||||||
|
this.element.style.cssText = "display: inline-block;";
|
||||||
|
parentNode.appendChild(this.element);
|
||||||
|
var statusUpdate = lang.delayedCall(function () {
|
||||||
|
this.updateStatus(editor);
|
||||||
|
}.bind(this)).schedule.bind(null, 100);
|
||||||
|
editor.on("changeStatus", statusUpdate);
|
||||||
|
editor.on("changeSelection", statusUpdate);
|
||||||
|
editor.on("keyboardActivity", statusUpdate);
|
||||||
|
}
|
||||||
|
StatusBar.prototype.updateStatus = function (editor) {
|
||||||
|
var status = [];
|
||||||
|
function add(str, separator) {
|
||||||
|
str && status.push(str, separator || "|");
|
||||||
|
}
|
||||||
|
add(editor.keyBinding.getStatusText(editor));
|
||||||
|
if (editor.commands.recording)
|
||||||
|
add("REC");
|
||||||
|
var sel = editor.selection;
|
||||||
|
var c = sel.lead;
|
||||||
|
if (!sel.isEmpty()) {
|
||||||
|
var r = editor.getSelectionRange();
|
||||||
|
add("(" + (r.end.row - r.start.row) + ":" + (r.end.column - r.start.column) + ")", " ");
|
||||||
|
}
|
||||||
|
add(c.row + ":" + c.column, " ");
|
||||||
|
if (sel.rangeCount)
|
||||||
|
add("[" + sel.rangeCount + "]", " ");
|
||||||
|
status.pop();
|
||||||
|
this.element.textContent = status.join("");
|
||||||
|
};
|
||||||
|
return StatusBar;
|
||||||
|
}());
|
||||||
|
exports.StatusBar = StatusBar;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/statusbar"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,380 @@
|
||||||
|
define("ace/ext/textarea",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/ace"], function(require, exports, module){"use strict";
|
||||||
|
var event = require("../lib/event");
|
||||||
|
var UA = require("../lib/useragent");
|
||||||
|
var ace = require("../ace");
|
||||||
|
module.exports = exports = ace;
|
||||||
|
var getCSSProperty = function (element, container, property) {
|
||||||
|
var ret = element.style[property];
|
||||||
|
if (!ret) {
|
||||||
|
if (window.getComputedStyle) {
|
||||||
|
ret = window.getComputedStyle(element, '').getPropertyValue(property);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = element.currentStyle[property];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ret || ret == 'auto' || ret == 'intrinsic') {
|
||||||
|
ret = container.style[property];
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
};
|
||||||
|
function applyStyles(elm, styles) {
|
||||||
|
for (var style in styles) {
|
||||||
|
elm.style[style] = styles[style];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function setupContainer(element, getValue) {
|
||||||
|
if (element.type != 'textarea') {
|
||||||
|
throw new Error("Textarea required!");
|
||||||
|
}
|
||||||
|
var parentNode = element.parentNode;
|
||||||
|
var container = document.createElement('div');
|
||||||
|
var resizeEvent = function () {
|
||||||
|
var style = 'position:relative;';
|
||||||
|
[
|
||||||
|
'margin-top', 'margin-left', 'margin-right', 'margin-bottom'
|
||||||
|
].forEach(function (item) {
|
||||||
|
style += item + ':' +
|
||||||
|
getCSSProperty(element, container, item) + ';';
|
||||||
|
});
|
||||||
|
var width = getCSSProperty(element, container, 'width') || (element.clientWidth + "px");
|
||||||
|
var height = getCSSProperty(element, container, 'height') || (element.clientHeight + "px");
|
||||||
|
style += 'height:' + height + ';width:' + width + ';';
|
||||||
|
style += 'display:inline-block;';
|
||||||
|
container.style.cssText = style;
|
||||||
|
};
|
||||||
|
event.addListener(window, 'resize', resizeEvent);
|
||||||
|
resizeEvent();
|
||||||
|
parentNode.insertBefore(container, element.nextSibling);
|
||||||
|
while (parentNode !== document) {
|
||||||
|
if (parentNode.tagName.toUpperCase() === 'FORM') {
|
||||||
|
var oldSumit = parentNode.onsubmit;
|
||||||
|
parentNode.onsubmit = function (evt) {
|
||||||
|
element.value = getValue();
|
||||||
|
if (oldSumit) {
|
||||||
|
oldSumit.call(this, evt);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
parentNode = parentNode.parentNode;
|
||||||
|
}
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
exports.transformTextarea = function (element, options) {
|
||||||
|
var isFocused = element.autofocus || document.activeElement == element;
|
||||||
|
var session;
|
||||||
|
var container = setupContainer(element, function () {
|
||||||
|
return session.getValue();
|
||||||
|
});
|
||||||
|
element.style.display = 'none';
|
||||||
|
container.style.background = 'white';
|
||||||
|
var editorDiv = document.createElement("div");
|
||||||
|
applyStyles(editorDiv, {
|
||||||
|
top: "0px",
|
||||||
|
left: "0px",
|
||||||
|
right: "0px",
|
||||||
|
bottom: "0px",
|
||||||
|
border: "1px solid gray",
|
||||||
|
position: "absolute"
|
||||||
|
});
|
||||||
|
container.appendChild(editorDiv);
|
||||||
|
var settingOpener = document.createElement("div");
|
||||||
|
applyStyles(settingOpener, {
|
||||||
|
position: "absolute",
|
||||||
|
right: "0px",
|
||||||
|
bottom: "0px",
|
||||||
|
cursor: "nw-resize",
|
||||||
|
border: "solid 9px",
|
||||||
|
borderColor: "lightblue gray gray #ceade6",
|
||||||
|
zIndex: 101
|
||||||
|
});
|
||||||
|
var settingDiv = document.createElement("div");
|
||||||
|
var settingDivStyles = {
|
||||||
|
top: "0px",
|
||||||
|
left: "20%",
|
||||||
|
right: "0px",
|
||||||
|
bottom: "0px",
|
||||||
|
position: "absolute",
|
||||||
|
padding: "5px",
|
||||||
|
zIndex: 100,
|
||||||
|
color: "white",
|
||||||
|
display: "none",
|
||||||
|
overflow: "auto",
|
||||||
|
fontSize: "14px",
|
||||||
|
boxShadow: "-5px 2px 3px gray"
|
||||||
|
};
|
||||||
|
if (!UA.isOldIE) {
|
||||||
|
settingDivStyles.backgroundColor = "rgba(0, 0, 0, 0.6)";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
settingDivStyles.backgroundColor = "#333";
|
||||||
|
}
|
||||||
|
applyStyles(settingDiv, settingDivStyles);
|
||||||
|
container.appendChild(settingDiv);
|
||||||
|
options = options || exports.defaultOptions;
|
||||||
|
var editor = ace.edit(editorDiv);
|
||||||
|
session = editor.getSession();
|
||||||
|
session.setValue(element.value || element.innerHTML);
|
||||||
|
if (isFocused)
|
||||||
|
editor.focus();
|
||||||
|
container.appendChild(settingOpener);
|
||||||
|
setupApi(editor, editorDiv, settingDiv, ace, options);
|
||||||
|
setupSettingPanel(settingDiv, settingOpener, editor);
|
||||||
|
var state = "";
|
||||||
|
event.addListener(settingOpener, "mousemove", function (e) {
|
||||||
|
var rect = this.getBoundingClientRect();
|
||||||
|
var x = e.clientX - rect.left, y = e.clientY - rect.top;
|
||||||
|
if (x + y < (rect.width + rect.height) / 2) {
|
||||||
|
this.style.cursor = "pointer";
|
||||||
|
state = "toggle";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
state = "resize";
|
||||||
|
this.style.cursor = "nw-resize";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
event.addListener(settingOpener, "mousedown", function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
if (state == "toggle") {
|
||||||
|
editor.setDisplaySettings();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
container.style.zIndex = "100000";
|
||||||
|
var rect = container.getBoundingClientRect();
|
||||||
|
var startX = rect.width + rect.left - e.clientX;
|
||||||
|
var startY = rect.height + rect.top - e.clientY;
|
||||||
|
event.capture(settingOpener, function (e) {
|
||||||
|
container.style.width = e.clientX - rect.left + startX + "px";
|
||||||
|
container.style.height = e.clientY - rect.top + startY + "px";
|
||||||
|
editor.resize();
|
||||||
|
}, function () { });
|
||||||
|
});
|
||||||
|
return editor;
|
||||||
|
};
|
||||||
|
function setupApi(editor, editorDiv, settingDiv, ace, options) {
|
||||||
|
function toBool(value) {
|
||||||
|
return value === "true" || value == true;
|
||||||
|
}
|
||||||
|
editor.setDisplaySettings = function (display) {
|
||||||
|
if (display == null)
|
||||||
|
display = settingDiv.style.display == "none";
|
||||||
|
if (display) {
|
||||||
|
settingDiv.style.display = "block";
|
||||||
|
settingDiv.hideButton.focus();
|
||||||
|
editor.on("focus", function onFocus() {
|
||||||
|
editor.removeListener("focus", onFocus);
|
||||||
|
settingDiv.style.display = "none";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
editor.focus();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
editor.$setOption = editor.setOption;
|
||||||
|
editor.$getOption = editor.getOption;
|
||||||
|
editor.setOption = function (key, value) {
|
||||||
|
switch (key) {
|
||||||
|
case "mode":
|
||||||
|
editor.$setOption("mode", "ace/mode/" + value);
|
||||||
|
break;
|
||||||
|
case "theme":
|
||||||
|
editor.$setOption("theme", "ace/theme/" + value);
|
||||||
|
break;
|
||||||
|
case "keybindings":
|
||||||
|
switch (value) {
|
||||||
|
case "vim":
|
||||||
|
editor.setKeyboardHandler("ace/keyboard/vim");
|
||||||
|
break;
|
||||||
|
case "emacs":
|
||||||
|
editor.setKeyboardHandler("ace/keyboard/emacs");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
editor.setKeyboardHandler(null);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "wrap":
|
||||||
|
case "fontSize":
|
||||||
|
editor.$setOption(key, value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
editor.$setOption(key, toBool(value));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
editor.getOption = function (key) {
|
||||||
|
switch (key) {
|
||||||
|
case "mode":
|
||||||
|
return editor.$getOption("mode").substr("ace/mode/".length);
|
||||||
|
break;
|
||||||
|
case "theme":
|
||||||
|
return editor.$getOption("theme").substr("ace/theme/".length);
|
||||||
|
break;
|
||||||
|
case "keybindings":
|
||||||
|
var value = editor.getKeyboardHandler();
|
||||||
|
switch (value && value.$id) {
|
||||||
|
case "ace/keyboard/vim":
|
||||||
|
return "vim";
|
||||||
|
case "ace/keyboard/emacs":
|
||||||
|
return "emacs";
|
||||||
|
default:
|
||||||
|
return "ace";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return editor.$getOption(key);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
editor.setOptions(options);
|
||||||
|
return editor;
|
||||||
|
}
|
||||||
|
function setupSettingPanel(settingDiv, settingOpener, editor) {
|
||||||
|
var BOOL = null;
|
||||||
|
var desc = {
|
||||||
|
mode: "Mode:",
|
||||||
|
wrap: "Soft Wrap:",
|
||||||
|
theme: "Theme:",
|
||||||
|
fontSize: "Font Size:",
|
||||||
|
showGutter: "Display Gutter:",
|
||||||
|
keybindings: "Keyboard",
|
||||||
|
showPrintMargin: "Show Print Margin:",
|
||||||
|
useSoftTabs: "Use Soft Tabs:",
|
||||||
|
showInvisibles: "Show Invisibles"
|
||||||
|
};
|
||||||
|
var optionValues = {
|
||||||
|
mode: {
|
||||||
|
text: "Plain",
|
||||||
|
javascript: "JavaScript",
|
||||||
|
xml: "XML",
|
||||||
|
html: "HTML",
|
||||||
|
css: "CSS",
|
||||||
|
scss: "SCSS",
|
||||||
|
python: "Python",
|
||||||
|
php: "PHP",
|
||||||
|
java: "Java",
|
||||||
|
ruby: "Ruby",
|
||||||
|
c_cpp: "C/C++",
|
||||||
|
coffee: "CoffeeScript",
|
||||||
|
json: "json",
|
||||||
|
perl: "Perl",
|
||||||
|
clojure: "Clojure",
|
||||||
|
ocaml: "OCaml",
|
||||||
|
csharp: "C#",
|
||||||
|
haxe: "haXe",
|
||||||
|
svg: "SVG",
|
||||||
|
textile: "Textile",
|
||||||
|
groovy: "Groovy",
|
||||||
|
liquid: "Liquid",
|
||||||
|
Scala: "Scala"
|
||||||
|
},
|
||||||
|
theme: {
|
||||||
|
clouds: "Clouds",
|
||||||
|
clouds_midnight: "Clouds Midnight",
|
||||||
|
cobalt: "Cobalt",
|
||||||
|
crimson_editor: "Crimson Editor",
|
||||||
|
dawn: "Dawn",
|
||||||
|
gob: "Green on Black",
|
||||||
|
eclipse: "Eclipse",
|
||||||
|
idle_fingers: "Idle Fingers",
|
||||||
|
kr_theme: "Kr Theme",
|
||||||
|
merbivore: "Merbivore",
|
||||||
|
merbivore_soft: "Merbivore Soft",
|
||||||
|
mono_industrial: "Mono Industrial",
|
||||||
|
monokai: "Monokai",
|
||||||
|
pastel_on_dark: "Pastel On Dark",
|
||||||
|
solarized_dark: "Solarized Dark",
|
||||||
|
solarized_light: "Solarized Light",
|
||||||
|
textmate: "Textmate",
|
||||||
|
twilight: "Twilight",
|
||||||
|
vibrant_ink: "Vibrant Ink"
|
||||||
|
},
|
||||||
|
showGutter: BOOL,
|
||||||
|
fontSize: {
|
||||||
|
"10px": "10px",
|
||||||
|
"11px": "11px",
|
||||||
|
"12px": "12px",
|
||||||
|
"14px": "14px",
|
||||||
|
"16px": "16px"
|
||||||
|
},
|
||||||
|
wrap: {
|
||||||
|
off: "Off",
|
||||||
|
40: "40",
|
||||||
|
80: "80",
|
||||||
|
free: "Free"
|
||||||
|
},
|
||||||
|
keybindings: {
|
||||||
|
ace: "ace",
|
||||||
|
vim: "vim",
|
||||||
|
emacs: "emacs"
|
||||||
|
},
|
||||||
|
showPrintMargin: BOOL,
|
||||||
|
useSoftTabs: BOOL,
|
||||||
|
showInvisibles: BOOL
|
||||||
|
};
|
||||||
|
var table = [];
|
||||||
|
table.push("<table><tr><th>Setting</th><th>Value</th></tr>");
|
||||||
|
function renderOption(builder, option, obj, cValue) {
|
||||||
|
if (!obj) {
|
||||||
|
builder.push("<input type='checkbox' title='", option, "' ", cValue + "" == "true" ? "checked='true'" : "", "'></input>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
builder.push("<select title='" + option + "'>");
|
||||||
|
for (var value in obj) {
|
||||||
|
builder.push("<option value='" + value + "' ");
|
||||||
|
if (cValue == value) {
|
||||||
|
builder.push(" selected ");
|
||||||
|
}
|
||||||
|
builder.push(">", obj[value], "</option>");
|
||||||
|
}
|
||||||
|
builder.push("</select>");
|
||||||
|
}
|
||||||
|
for (var option in exports.defaultOptions) {
|
||||||
|
table.push("<tr><td>", desc[option], "</td>");
|
||||||
|
table.push("<td>");
|
||||||
|
renderOption(table, option, optionValues[option], editor.getOption(option));
|
||||||
|
table.push("</td></tr>");
|
||||||
|
}
|
||||||
|
table.push("</table>");
|
||||||
|
settingDiv.innerHTML = table.join("");
|
||||||
|
var onChange = function (e) {
|
||||||
|
var select = e.currentTarget;
|
||||||
|
editor.setOption(select.title, select.value);
|
||||||
|
};
|
||||||
|
var onClick = function (e) {
|
||||||
|
var cb = e.currentTarget;
|
||||||
|
editor.setOption(cb.title, cb.checked);
|
||||||
|
};
|
||||||
|
var selects = settingDiv.getElementsByTagName("select");
|
||||||
|
for (var i = 0; i < selects.length; i++)
|
||||||
|
selects[i].onchange = onChange;
|
||||||
|
var cbs = settingDiv.getElementsByTagName("input");
|
||||||
|
for (var i = 0; i < cbs.length; i++)
|
||||||
|
cbs[i].onclick = onClick;
|
||||||
|
var button = document.createElement("input");
|
||||||
|
button.type = "button";
|
||||||
|
button.value = "Hide";
|
||||||
|
event.addListener(button, "click", function () {
|
||||||
|
editor.setDisplaySettings(false);
|
||||||
|
});
|
||||||
|
settingDiv.appendChild(button);
|
||||||
|
settingDiv.hideButton = button;
|
||||||
|
}
|
||||||
|
exports.defaultOptions = {
|
||||||
|
mode: "javascript",
|
||||||
|
theme: "textmate",
|
||||||
|
wrap: "off",
|
||||||
|
fontSize: "12px",
|
||||||
|
showGutter: "false",
|
||||||
|
keybindings: "ace",
|
||||||
|
showPrintMargin: "false",
|
||||||
|
useSoftTabs: "true",
|
||||||
|
showInvisibles: "false"
|
||||||
|
};
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/textarea"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
define("ace/ext/themelist",["require","exports","module"], function(require, exports, module){/**
|
||||||
|
* Generates a list of themes available when ace was built.
|
||||||
|
* @fileOverview Generates a list of themes available when ace was built.
|
||||||
|
* @author <a href="mailto:matthewkastor@gmail.com">
|
||||||
|
* Matthew Christopher Kastor-Inare III </a><br />
|
||||||
|
* ☭ Hial Atropa!! ☭
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var themeData = [
|
||||||
|
["Chrome"],
|
||||||
|
["Clouds"],
|
||||||
|
["Crimson Editor"],
|
||||||
|
["Dawn"],
|
||||||
|
["Dreamweaver"],
|
||||||
|
["Eclipse"],
|
||||||
|
["GitHub Light Default"],
|
||||||
|
["GitHub (Legacy)", "github", "light"],
|
||||||
|
["IPlastic"],
|
||||||
|
["Solarized Light"],
|
||||||
|
["TextMate"],
|
||||||
|
["Tomorrow"],
|
||||||
|
["XCode"],
|
||||||
|
["Kuroir"],
|
||||||
|
["KatzenMilch"],
|
||||||
|
["SQL Server", "sqlserver", "light"],
|
||||||
|
["CloudEditor", "cloud_editor", "light"],
|
||||||
|
["Ambiance", "ambiance", "dark"],
|
||||||
|
["Chaos", "chaos", "dark"],
|
||||||
|
["Clouds Midnight", "clouds_midnight", "dark"],
|
||||||
|
["Dracula", "", "dark"],
|
||||||
|
["Cobalt", "cobalt", "dark"],
|
||||||
|
["Gruvbox", "gruvbox", "dark"],
|
||||||
|
["Green on Black", "gob", "dark"],
|
||||||
|
["idle Fingers", "idle_fingers", "dark"],
|
||||||
|
["krTheme", "kr_theme", "dark"],
|
||||||
|
["Merbivore", "merbivore", "dark"],
|
||||||
|
["Merbivore Soft", "merbivore_soft", "dark"],
|
||||||
|
["Mono Industrial", "mono_industrial", "dark"],
|
||||||
|
["Monokai", "monokai", "dark"],
|
||||||
|
["Nord Dark", "nord_dark", "dark"],
|
||||||
|
["One Dark", "one_dark", "dark"],
|
||||||
|
["Pastel on dark", "pastel_on_dark", "dark"],
|
||||||
|
["Solarized Dark", "solarized_dark", "dark"],
|
||||||
|
["Terminal", "terminal", "dark"],
|
||||||
|
["Tomorrow Night", "tomorrow_night", "dark"],
|
||||||
|
["Tomorrow Night Blue", "tomorrow_night_blue", "dark"],
|
||||||
|
["Tomorrow Night Bright", "tomorrow_night_bright", "dark"],
|
||||||
|
["Tomorrow Night 80s", "tomorrow_night_eighties", "dark"],
|
||||||
|
["Twilight", "twilight", "dark"],
|
||||||
|
["Vibrant Ink", "vibrant_ink", "dark"],
|
||||||
|
["GitHub Dark", "github_dark", "dark"],
|
||||||
|
["CloudEditor Dark", "cloud_editor_dark", "dark"]
|
||||||
|
];
|
||||||
|
exports.themesByName = {};
|
||||||
|
exports.themes = themeData.map(function (data) {
|
||||||
|
var name = data[1] || data[0].replace(/ /g, "_").toLowerCase();
|
||||||
|
var theme = {
|
||||||
|
caption: data[0],
|
||||||
|
theme: "ace/theme/" + name,
|
||||||
|
isDark: data[2] == "dark",
|
||||||
|
name: name
|
||||||
|
};
|
||||||
|
exports.themesByName[name] = theme;
|
||||||
|
return theme;
|
||||||
|
});
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/themelist"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,192 @@
|
||||||
|
define("ace/ext/whitespace",["require","exports","module","ace/lib/lang"], function(require, exports, module){"use strict";
|
||||||
|
var lang = require("../lib/lang");
|
||||||
|
exports.$detectIndentation = function (lines, fallback) {
|
||||||
|
var stats = [];
|
||||||
|
var changes = [];
|
||||||
|
var tabIndents = 0;
|
||||||
|
var prevSpaces = 0;
|
||||||
|
var max = Math.min(lines.length, 1000);
|
||||||
|
for (var i = 0; i < max; i++) {
|
||||||
|
var line = lines[i];
|
||||||
|
if (!/^\s*[^*+\-\s]/.test(line))
|
||||||
|
continue;
|
||||||
|
if (line[0] == "\t") {
|
||||||
|
tabIndents++;
|
||||||
|
prevSpaces = -Number.MAX_VALUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var spaces = line.match(/^ */)[0].length;
|
||||||
|
if (spaces && line[spaces] != "\t") {
|
||||||
|
var diff = spaces - prevSpaces;
|
||||||
|
if (diff > 0 && !(prevSpaces % diff) && !(spaces % diff))
|
||||||
|
changes[diff] = (changes[diff] || 0) + 1;
|
||||||
|
stats[spaces] = (stats[spaces] || 0) + 1;
|
||||||
|
}
|
||||||
|
prevSpaces = spaces;
|
||||||
|
}
|
||||||
|
while (i < max && line[line.length - 1] == "\\")
|
||||||
|
line = lines[i++];
|
||||||
|
}
|
||||||
|
function getScore(indent) {
|
||||||
|
var score = 0;
|
||||||
|
for (var i = indent; i < stats.length; i += indent)
|
||||||
|
score += stats[i] || 0;
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
var changesTotal = changes.reduce(function (a, b) { return a + b; }, 0);
|
||||||
|
var first = { score: 0, length: 0 };
|
||||||
|
var spaceIndents = 0;
|
||||||
|
for (var i = 1; i < 12; i++) {
|
||||||
|
var score = getScore(i);
|
||||||
|
if (i == 1) {
|
||||||
|
spaceIndents = score;
|
||||||
|
score = stats[1] ? 0.9 : 0.8;
|
||||||
|
if (!stats.length)
|
||||||
|
score = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
score /= spaceIndents;
|
||||||
|
if (changes[i])
|
||||||
|
score += changes[i] / changesTotal;
|
||||||
|
if (score > first.score)
|
||||||
|
first = { score: score, length: i };
|
||||||
|
}
|
||||||
|
if (first.score && first.score > 1.4)
|
||||||
|
var tabLength = first.length;
|
||||||
|
if (tabIndents > spaceIndents + 1) {
|
||||||
|
if (tabLength == 1 || spaceIndents < tabIndents / 4 || first.score < 1.8)
|
||||||
|
tabLength = undefined;
|
||||||
|
return { ch: "\t", length: tabLength };
|
||||||
|
}
|
||||||
|
if (spaceIndents > tabIndents + 1)
|
||||||
|
return { ch: " ", length: tabLength };
|
||||||
|
};
|
||||||
|
exports.detectIndentation = function (session) {
|
||||||
|
var lines = session.getLines(0, 1000);
|
||||||
|
var indent = exports.$detectIndentation(lines) || {};
|
||||||
|
if (indent.ch)
|
||||||
|
session.setUseSoftTabs(indent.ch == " ");
|
||||||
|
if (indent.length)
|
||||||
|
session.setTabSize(indent.length);
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
exports.trimTrailingSpace = function (session, options) {
|
||||||
|
var doc = session.getDocument();
|
||||||
|
var lines = doc.getAllLines();
|
||||||
|
var min = options && options.trimEmpty ? -1 : 0;
|
||||||
|
var cursors = [], ci = -1;
|
||||||
|
if (options && options.keepCursorPosition) {
|
||||||
|
if (session.selection.rangeCount) {
|
||||||
|
session.selection.rangeList.ranges.forEach(function (x, i, ranges) {
|
||||||
|
var next = ranges[i + 1];
|
||||||
|
if (next && next.cursor.row == x.cursor.row)
|
||||||
|
return;
|
||||||
|
cursors.push(x.cursor);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cursors.push(session.selection.getCursor());
|
||||||
|
}
|
||||||
|
ci = 0;
|
||||||
|
}
|
||||||
|
var cursorRow = cursors[ci] && cursors[ci].row;
|
||||||
|
for (var i = 0, l = lines.length; i < l; i++) {
|
||||||
|
var line = lines[i];
|
||||||
|
var index = line.search(/\s+$/);
|
||||||
|
if (i == cursorRow) {
|
||||||
|
if (index < cursors[ci].column && index > min)
|
||||||
|
index = cursors[ci].column;
|
||||||
|
ci++;
|
||||||
|
cursorRow = cursors[ci] ? cursors[ci].row : -1;
|
||||||
|
}
|
||||||
|
if (index > min)
|
||||||
|
doc.removeInLine(i, index, line.length);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.convertIndentation = function (session, ch, len) {
|
||||||
|
var oldCh = session.getTabString()[0];
|
||||||
|
var oldLen = session.getTabSize();
|
||||||
|
if (!len)
|
||||||
|
len = oldLen;
|
||||||
|
if (!ch)
|
||||||
|
ch = oldCh;
|
||||||
|
var tab = ch == "\t" ? ch : lang.stringRepeat(ch, len);
|
||||||
|
var doc = session.doc;
|
||||||
|
var lines = doc.getAllLines();
|
||||||
|
var cache = {};
|
||||||
|
var spaceCache = {};
|
||||||
|
for (var i = 0, l = lines.length; i < l; i++) {
|
||||||
|
var line = lines[i];
|
||||||
|
var match = line.match(/^\s*/)[0];
|
||||||
|
if (match) {
|
||||||
|
var w = session.$getStringScreenWidth(match)[0];
|
||||||
|
var tabCount = Math.floor(w / oldLen);
|
||||||
|
var reminder = w % oldLen;
|
||||||
|
var toInsert = cache[tabCount] || (cache[tabCount] = lang.stringRepeat(tab, tabCount));
|
||||||
|
toInsert += spaceCache[reminder] || (spaceCache[reminder] = lang.stringRepeat(" ", reminder));
|
||||||
|
if (toInsert != match) {
|
||||||
|
doc.removeInLine(i, 0, match.length);
|
||||||
|
doc.insertInLine({ row: i, column: 0 }, toInsert);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
session.setTabSize(len);
|
||||||
|
session.setUseSoftTabs(ch == " ");
|
||||||
|
};
|
||||||
|
exports.$parseStringArg = function (text) {
|
||||||
|
var indent = {};
|
||||||
|
if (/t/.test(text))
|
||||||
|
indent.ch = "\t";
|
||||||
|
else if (/s/.test(text))
|
||||||
|
indent.ch = " ";
|
||||||
|
var m = text.match(/\d+/);
|
||||||
|
if (m)
|
||||||
|
indent.length = parseInt(m[0], 10);
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
exports.$parseArg = function (arg) {
|
||||||
|
if (!arg)
|
||||||
|
return {};
|
||||||
|
if (typeof arg == "string")
|
||||||
|
return exports.$parseStringArg(arg);
|
||||||
|
if (typeof arg.text == "string")
|
||||||
|
return exports.$parseStringArg(arg.text);
|
||||||
|
return arg;
|
||||||
|
};
|
||||||
|
exports.commands = [{
|
||||||
|
name: "detectIndentation",
|
||||||
|
description: "Detect indentation from content",
|
||||||
|
exec: function (editor) {
|
||||||
|
exports.detectIndentation(editor.session);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "trimTrailingSpace",
|
||||||
|
description: "Trim trailing whitespace",
|
||||||
|
exec: function (editor, args) {
|
||||||
|
exports.trimTrailingSpace(editor.session, args);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "convertIndentation",
|
||||||
|
description: "Convert indentation to ...",
|
||||||
|
exec: function (editor, arg) {
|
||||||
|
var indent = exports.$parseArg(arg);
|
||||||
|
exports.convertIndentation(editor.session, indent.ch, indent.length);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "setIndentation",
|
||||||
|
description: "Set indentation",
|
||||||
|
exec: function (editor, arg) {
|
||||||
|
var indent = exports.$parseArg(arg);
|
||||||
|
indent.length && editor.session.setTabSize(indent.length);
|
||||||
|
indent.ch && editor.session.setUseSoftTabs(indent.ch == " ");
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/ext/whitespace"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,409 @@
|
||||||
|
define("ace/keyboard/sublime",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module){"use strict";
|
||||||
|
var HashHandler = require("../keyboard/hash_handler").HashHandler;
|
||||||
|
function moveBySubWords(editor, direction, extend) {
|
||||||
|
var selection = editor.selection;
|
||||||
|
var row = selection.lead.row;
|
||||||
|
var column = selection.lead.column;
|
||||||
|
var line = editor.session.getLine(row);
|
||||||
|
if (!line[column + direction]) {
|
||||||
|
var method = (extend ? "selectWord" : "moveCursorShortWord")
|
||||||
|
+ (direction == 1 ? "Right" : "Left");
|
||||||
|
return editor.selection[method]();
|
||||||
|
}
|
||||||
|
if (direction == -1)
|
||||||
|
column--;
|
||||||
|
while (line[column]) {
|
||||||
|
var type = getType(line[column]) + getType(line[column + direction]);
|
||||||
|
column += direction;
|
||||||
|
if (direction == 1) {
|
||||||
|
if (type == "WW" && getType(line[column + 1]) == "w")
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (type == "wW") {
|
||||||
|
if (getType(line[column - 1]) == "W") {
|
||||||
|
column -= 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == "Ww")
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (/w[s_oW]|_[sWo]|o[s_wW]|s[W]|W[so]/.test(type))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (direction == -1)
|
||||||
|
column++;
|
||||||
|
if (extend)
|
||||||
|
editor.selection.moveCursorTo(row, column);
|
||||||
|
else
|
||||||
|
editor.selection.moveTo(row, column);
|
||||||
|
function getType(x) {
|
||||||
|
if (!x)
|
||||||
|
return "-";
|
||||||
|
if (/\s/.test(x))
|
||||||
|
return "s";
|
||||||
|
if (x == "_")
|
||||||
|
return "_";
|
||||||
|
if (x.toUpperCase() == x && x.toLowerCase() != x)
|
||||||
|
return "W";
|
||||||
|
if (x.toUpperCase() != x && x.toLowerCase() == x)
|
||||||
|
return "w";
|
||||||
|
return "o";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.handler = new HashHandler();
|
||||||
|
exports.handler.addCommands([{
|
||||||
|
name: "find_all_under",
|
||||||
|
exec: function (editor) {
|
||||||
|
if (editor.selection.isEmpty())
|
||||||
|
editor.selection.selectWord();
|
||||||
|
editor.findAll();
|
||||||
|
},
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "find_under",
|
||||||
|
exec: function (editor) {
|
||||||
|
if (editor.selection.isEmpty())
|
||||||
|
editor.selection.selectWord();
|
||||||
|
editor.findNext();
|
||||||
|
},
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "find_under_prev",
|
||||||
|
exec: function (editor) {
|
||||||
|
if (editor.selection.isEmpty())
|
||||||
|
editor.selection.selectWord();
|
||||||
|
editor.findPrevious();
|
||||||
|
},
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "find_under_expand",
|
||||||
|
exec: function (editor) {
|
||||||
|
editor.selectMore(1, false, true);
|
||||||
|
},
|
||||||
|
scrollIntoView: "animate",
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "find_under_expand_skip",
|
||||||
|
exec: function (editor) {
|
||||||
|
editor.selectMore(1, true, true);
|
||||||
|
},
|
||||||
|
scrollIntoView: "animate",
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "delete_to_hard_bol",
|
||||||
|
exec: function (editor) {
|
||||||
|
var pos = editor.selection.getCursor();
|
||||||
|
editor.session.remove({
|
||||||
|
start: { row: pos.row, column: 0 },
|
||||||
|
end: pos
|
||||||
|
});
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor"
|
||||||
|
}, {
|
||||||
|
name: "delete_to_hard_eol",
|
||||||
|
exec: function (editor) {
|
||||||
|
var pos = editor.selection.getCursor();
|
||||||
|
editor.session.remove({
|
||||||
|
start: pos,
|
||||||
|
end: { row: pos.row, column: Infinity }
|
||||||
|
});
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor"
|
||||||
|
}, {
|
||||||
|
name: "moveToWordStartLeft",
|
||||||
|
exec: function (editor) {
|
||||||
|
editor.selection.moveCursorLongWordLeft();
|
||||||
|
editor.clearSelection();
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor"
|
||||||
|
}, {
|
||||||
|
name: "moveToWordEndRight",
|
||||||
|
exec: function (editor) {
|
||||||
|
editor.selection.moveCursorLongWordRight();
|
||||||
|
editor.clearSelection();
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor"
|
||||||
|
}, {
|
||||||
|
name: "selectToWordStartLeft",
|
||||||
|
exec: function (editor) {
|
||||||
|
var sel = editor.selection;
|
||||||
|
sel.$moveSelection(sel.moveCursorLongWordLeft);
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor"
|
||||||
|
}, {
|
||||||
|
name: "selectToWordEndRight",
|
||||||
|
exec: function (editor) {
|
||||||
|
var sel = editor.selection;
|
||||||
|
sel.$moveSelection(sel.moveCursorLongWordRight);
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor"
|
||||||
|
}, {
|
||||||
|
name: "selectSubWordRight",
|
||||||
|
exec: function (editor) {
|
||||||
|
moveBySubWords(editor, 1, true);
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor",
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "selectSubWordLeft",
|
||||||
|
exec: function (editor) {
|
||||||
|
moveBySubWords(editor, -1, true);
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor",
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "moveSubWordRight",
|
||||||
|
exec: function (editor) {
|
||||||
|
moveBySubWords(editor, 1);
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor",
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "moveSubWordLeft",
|
||||||
|
exec: function (editor) {
|
||||||
|
moveBySubWords(editor, -1);
|
||||||
|
},
|
||||||
|
multiSelectAction: "forEach",
|
||||||
|
scrollIntoView: "cursor",
|
||||||
|
readOnly: true
|
||||||
|
}]);
|
||||||
|
[{
|
||||||
|
bindKey: { mac: "cmd-k cmd-backspace|cmd-backspace", win: "ctrl-shift-backspace|ctrl-k ctrl-backspace" },
|
||||||
|
name: "removetolinestarthard"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-k cmd-k|cmd-delete|ctrl-k", win: "ctrl-shift-delete|ctrl-k ctrl-k" },
|
||||||
|
name: "removetolineendhard"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-shift-d", win: "ctrl-shift-d" },
|
||||||
|
name: "duplicateSelection"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-l", win: "ctrl-l" },
|
||||||
|
name: "expandtoline"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "cmd-shift-a", win: "ctrl-shift-a" },
|
||||||
|
name: "expandSelection",
|
||||||
|
args: { to: "tag" }
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-shift-j", win: "ctrl-shift-j" },
|
||||||
|
name: "expandSelection",
|
||||||
|
args: { to: "indentation" }
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-shift-m", win: "ctrl-shift-m" },
|
||||||
|
name: "expandSelection",
|
||||||
|
args: { to: "brackets" }
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-shift-space", win: "ctrl-shift-space" },
|
||||||
|
name: "expandSelection",
|
||||||
|
args: { to: "scope" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "ctrl-cmd-g", win: "alt-f3" },
|
||||||
|
name: "find_all_under"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "alt-cmd-g", win: "ctrl-f3" },
|
||||||
|
name: "find_under"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "shift-alt-cmd-g", win: "ctrl-shift-f3" },
|
||||||
|
name: "find_under_prev"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-g", win: "f3" },
|
||||||
|
name: "findnext"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "shift-cmd-g", win: "shift-f3" },
|
||||||
|
name: "findprevious"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-d", win: "ctrl-d" },
|
||||||
|
name: "find_under_expand"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-k cmd-d", win: "ctrl-k ctrl-d" },
|
||||||
|
name: "find_under_expand_skip"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "cmd-alt-[", win: "ctrl-shift-[" },
|
||||||
|
name: "toggleFoldWidget"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-alt-]", win: "ctrl-shift-]" },
|
||||||
|
name: "unfold"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-k cmd-0|cmd-k cmd-j", win: "ctrl-k ctrl-0|ctrl-k ctrl-j" },
|
||||||
|
name: "unfoldall"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-k cmd-1", win: "ctrl-k ctrl-1" },
|
||||||
|
name: "foldOther",
|
||||||
|
args: { level: 1 }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { win: "ctrl-left", mac: "alt-left" },
|
||||||
|
name: "moveToWordStartLeft"
|
||||||
|
}, {
|
||||||
|
bindKey: { win: "ctrl-right", mac: "alt-right" },
|
||||||
|
name: "moveToWordEndRight"
|
||||||
|
}, {
|
||||||
|
bindKey: { win: "ctrl-shift-left", mac: "alt-shift-left" },
|
||||||
|
name: "selectToWordStartLeft"
|
||||||
|
}, {
|
||||||
|
bindKey: { win: "ctrl-shift-right", mac: "alt-shift-right" },
|
||||||
|
name: "selectToWordEndRight"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "ctrl-alt-shift-right|ctrl-shift-right", win: "alt-shift-right" },
|
||||||
|
name: "selectSubWordRight"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-alt-shift-left|ctrl-shift-left", win: "alt-shift-left" },
|
||||||
|
name: "selectSubWordLeft"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-alt-right|ctrl-right", win: "alt-right" },
|
||||||
|
name: "moveSubWordRight"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-alt-left|ctrl-left", win: "alt-left" },
|
||||||
|
name: "moveSubWordLeft"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "ctrl-m", win: "ctrl-m" },
|
||||||
|
name: "jumptomatching",
|
||||||
|
args: { to: "brackets" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "ctrl-f6", win: "ctrl-f6" },
|
||||||
|
name: "goToNextError"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-shift-f6", win: "ctrl-shift-f6" },
|
||||||
|
name: "goToPreviousError"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "ctrl-o" },
|
||||||
|
name: "splitline"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "ctrl-shift-w", win: "alt-shift-w" },
|
||||||
|
name: "surrowndWithTag"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-alt-.", win: "alt-." },
|
||||||
|
name: "close_tag"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "cmd-j", win: "ctrl-j" },
|
||||||
|
name: "joinlines"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "ctrl--", win: "alt--" },
|
||||||
|
name: "jumpBack"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-shift--", win: "alt-shift--" },
|
||||||
|
name: "jumpForward"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "cmd-k cmd-l", win: "ctrl-k ctrl-l" },
|
||||||
|
name: "tolowercase"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-k cmd-u", win: "ctrl-k ctrl-u" },
|
||||||
|
name: "touppercase"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "cmd-shift-v", win: "ctrl-shift-v" },
|
||||||
|
name: "paste_and_indent"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-k cmd-v|cmd-alt-v", win: "ctrl-k ctrl-v" },
|
||||||
|
name: "paste_from_history"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "cmd-shift-enter", win: "ctrl-shift-enter" },
|
||||||
|
name: "addLineBefore"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-enter", win: "ctrl-enter" },
|
||||||
|
name: "addLineAfter"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-shift-k", win: "ctrl-shift-k" },
|
||||||
|
name: "removeline"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-alt-up", win: "ctrl-up" },
|
||||||
|
name: "scrollup"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-alt-down", win: "ctrl-down" },
|
||||||
|
name: "scrolldown"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-a", win: "ctrl-a" },
|
||||||
|
name: "selectall"
|
||||||
|
}, {
|
||||||
|
bindKey: { linux: "alt-shift-down", mac: "ctrl-shift-down", win: "ctrl-alt-down" },
|
||||||
|
name: "addCursorBelow"
|
||||||
|
}, {
|
||||||
|
bindKey: { linux: "alt-shift-up", mac: "ctrl-shift-up", win: "ctrl-alt-up" },
|
||||||
|
name: "addCursorAbove"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "cmd-k cmd-c|ctrl-l", win: "ctrl-k ctrl-c" },
|
||||||
|
name: "centerselection"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "f5", win: "f9" },
|
||||||
|
name: "sortlines"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "ctrl-f5", win: "ctrl-f9" },
|
||||||
|
name: "sortlines",
|
||||||
|
args: { caseSensitive: true }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "cmd-shift-l", win: "ctrl-shift-l" },
|
||||||
|
name: "splitSelectionIntoLines"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-cmd-down", win: "ctrl-shift-down" },
|
||||||
|
name: "movelinesdown"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "ctrl-cmd-up", win: "ctrl-shift-up" },
|
||||||
|
name: "movelinesup"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "alt-down", win: "alt-down" },
|
||||||
|
name: "modifyNumberDown"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "alt-up", win: "alt-up" },
|
||||||
|
name: "modifyNumberUp"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-/", win: "ctrl-/" },
|
||||||
|
name: "togglecomment"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "cmd-alt-/", win: "ctrl-shift-/" },
|
||||||
|
name: "toggleBlockComment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { linux: "ctrl-alt-q", mac: "ctrl-q", win: "ctrl-q" },
|
||||||
|
name: "togglerecording"
|
||||||
|
}, {
|
||||||
|
bindKey: { linux: "ctrl-alt-shift-q", mac: "ctrl-shift-q", win: "ctrl-shift-q" },
|
||||||
|
name: "replaymacro"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
bindKey: { mac: "ctrl-t", win: "ctrl-t" },
|
||||||
|
name: "transpose"
|
||||||
|
}
|
||||||
|
].forEach(function (binding) {
|
||||||
|
var command = exports.handler.commands[binding.name];
|
||||||
|
if (command)
|
||||||
|
command.bindKey = binding.bindKey;
|
||||||
|
exports.handler.bindKey(binding.bindKey, command || binding.name);
|
||||||
|
});
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/keyboard/sublime"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,255 @@
|
||||||
|
define("ace/keyboard/vscode",["require","exports","module","ace/keyboard/hash_handler","ace/config"], function(require, exports, module){"use strict";
|
||||||
|
var HashHandler = require("../keyboard/hash_handler").HashHandler;
|
||||||
|
var config = require("../config");
|
||||||
|
exports.handler = new HashHandler();
|
||||||
|
exports.handler.$id = "ace/keyboard/vscode";
|
||||||
|
exports.handler.addCommands([{
|
||||||
|
name: "toggleWordWrap",
|
||||||
|
exec: function (editor) {
|
||||||
|
var wrapUsed = editor.session.getUseWrapMode();
|
||||||
|
editor.session.setUseWrapMode(!wrapUsed);
|
||||||
|
},
|
||||||
|
readOnly: true
|
||||||
|
}, {
|
||||||
|
name: "navigateToLastEditLocation",
|
||||||
|
exec: function (editor) {
|
||||||
|
var lastDelta = editor.session.getUndoManager().$lastDelta;
|
||||||
|
var range = (lastDelta.action == "remove") ? lastDelta.start : lastDelta.end;
|
||||||
|
editor.moveCursorTo(range.row, range.column);
|
||||||
|
editor.clearSelection();
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "replaceAll",
|
||||||
|
exec: function (editor) {
|
||||||
|
if (!editor.searchBox) {
|
||||||
|
config.loadModule("ace/ext/searchbox", function (e) {
|
||||||
|
e.Search(editor, true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (editor.searchBox.active === true && editor.searchBox.replaceOption.checked === true) {
|
||||||
|
editor.searchBox.replaceAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "replaceOne",
|
||||||
|
exec: function (editor) {
|
||||||
|
if (!editor.searchBox) {
|
||||||
|
config.loadModule("ace/ext/searchbox", function (e) {
|
||||||
|
e.Search(editor, true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (editor.searchBox.active === true && editor.searchBox.replaceOption.checked === true) {
|
||||||
|
editor.searchBox.replace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "selectAllMatches",
|
||||||
|
exec: function (editor) {
|
||||||
|
if (!editor.searchBox) {
|
||||||
|
config.loadModule("ace/ext/searchbox", function (e) {
|
||||||
|
e.Search(editor, false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (editor.searchBox.active === true) {
|
||||||
|
editor.searchBox.findAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "toggleFindCaseSensitive",
|
||||||
|
exec: function (editor) {
|
||||||
|
config.loadModule("ace/ext/searchbox", function (e) {
|
||||||
|
e.Search(editor, false);
|
||||||
|
var sb = editor.searchBox;
|
||||||
|
sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;
|
||||||
|
sb.$syncOptions();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "toggleFindInSelection",
|
||||||
|
exec: function (editor) {
|
||||||
|
config.loadModule("ace/ext/searchbox", function (e) {
|
||||||
|
e.Search(editor, false);
|
||||||
|
var sb = editor.searchBox;
|
||||||
|
sb.searchOption.checked = !sb.searchRange;
|
||||||
|
sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());
|
||||||
|
sb.$syncOptions();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "toggleFindRegex",
|
||||||
|
exec: function (editor) {
|
||||||
|
config.loadModule("ace/ext/searchbox", function (e) {
|
||||||
|
e.Search(editor, false);
|
||||||
|
var sb = editor.searchBox;
|
||||||
|
sb.regExpOption.checked = !sb.regExpOption.checked;
|
||||||
|
sb.$syncOptions();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "toggleFindWholeWord",
|
||||||
|
exec: function (editor) {
|
||||||
|
config.loadModule("ace/ext/searchbox", function (e) {
|
||||||
|
e.Search(editor, false);
|
||||||
|
var sb = editor.searchBox;
|
||||||
|
sb.wholeWordOption.checked = !sb.wholeWordOption.checked;
|
||||||
|
sb.$syncOptions();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "removeSecondaryCursors",
|
||||||
|
exec: function (editor) {
|
||||||
|
var ranges = editor.selection.ranges;
|
||||||
|
if (ranges && ranges.length > 1)
|
||||||
|
editor.selection.toSingleRange(ranges[ranges.length - 1]);
|
||||||
|
else
|
||||||
|
editor.selection.clearSelection();
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
[{
|
||||||
|
bindKey: { mac: "Ctrl-G", win: "Ctrl-G" },
|
||||||
|
name: "gotoline"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Shift-L|Command-F2", win: "Ctrl-Shift-L|Ctrl-F2" },
|
||||||
|
name: "findAll"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Shift-F8|Shift-Option-F8", win: "Shift-F8|Shift-Alt-F8" },
|
||||||
|
name: "goToPreviousError"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "F8|Option-F8", win: "F8|Alt-F8" },
|
||||||
|
name: "goToNextError"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Shift-P|F1", win: "Ctrl-Shift-P|F1" },
|
||||||
|
name: "openCommandPalette"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Shift-Option-Up", win: "Alt-Shift-Up" },
|
||||||
|
name: "copylinesup"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Shift-Option-Down", win: "Alt-Shift-Down" },
|
||||||
|
name: "copylinesdown"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Shift-K", win: "Ctrl-Shift-K" },
|
||||||
|
name: "removeline"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Enter", win: "Ctrl-Enter" },
|
||||||
|
name: "addLineAfter"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Shift-Enter", win: "Ctrl-Shift-Enter" },
|
||||||
|
name: "addLineBefore"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Shift-\\", win: "Ctrl-Shift-\\" },
|
||||||
|
name: "jumptomatching"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-]", win: "Ctrl-]" },
|
||||||
|
name: "blockindent"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-[", win: "Ctrl-[" },
|
||||||
|
name: "blockoutdent"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Ctrl-PageDown", win: "Alt-PageDown" },
|
||||||
|
name: "pagedown"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Ctrl-PageUp", win: "Alt-PageUp" },
|
||||||
|
name: "pageup"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Shift-Option-A", win: "Shift-Alt-A" },
|
||||||
|
name: "toggleBlockComment"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Option-Z", win: "Alt-Z" },
|
||||||
|
name: "toggleWordWrap"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-G", win: "F3|Ctrl-K Ctrl-D" },
|
||||||
|
name: "findnext"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Shift-G", win: "Shift-F3" },
|
||||||
|
name: "findprevious"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Option-Enter", win: "Alt-Enter" },
|
||||||
|
name: "selectAllMatches"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-D", win: "Ctrl-D" },
|
||||||
|
name: "selectMoreAfter"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-K Command-D", win: "Ctrl-K Ctrl-D" },
|
||||||
|
name: "selectOrFindNext"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Shift-Option-I", win: "Shift-Alt-I" },
|
||||||
|
name: "splitSelectionIntoLines"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-K M", win: "Ctrl-K M" },
|
||||||
|
name: "modeSelect"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Option-[", win: "Ctrl-Shift-[" },
|
||||||
|
name: "toggleFoldWidget"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Option-]", win: "Ctrl-Shift-]" },
|
||||||
|
name: "toggleFoldWidget"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-K Command-0", win: "Ctrl-K Ctrl-0" },
|
||||||
|
name: "foldall"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-K Command-J", win: "Ctrl-K Ctrl-J" },
|
||||||
|
name: "unfoldall"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-K Command-1", win: "Ctrl-K Ctrl-1" },
|
||||||
|
name: "foldOther"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-K Command-Q", win: "Ctrl-K Ctrl-Q" },
|
||||||
|
name: "navigateToLastEditLocation"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-K Command-R|Command-K Command-S", win: "Ctrl-K Ctrl-R|Ctrl-K Ctrl-S" },
|
||||||
|
name: "showKeyboardShortcuts"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-K Command-X", win: "Ctrl-K Ctrl-X" },
|
||||||
|
name: "trimTrailingSpace"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Shift-Down|Command-Shift-Down", win: "Shift-Down|Ctrl-Shift-Down" },
|
||||||
|
name: "selectdown"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Shift-Up|Command-Shift-Up", win: "Shift-Up|Ctrl-Shift-Up" },
|
||||||
|
name: "selectup"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Alt-Enter", win: "Ctrl-Alt-Enter" },
|
||||||
|
name: "replaceAll"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-Shift-1", win: "Ctrl-Shift-1" },
|
||||||
|
name: "replaceOne"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Option-C", win: "Alt-C" },
|
||||||
|
name: "toggleFindCaseSensitive"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Option-L", win: "Alt-L" },
|
||||||
|
name: "toggleFindInSelection"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Option-R", win: "Alt-R" },
|
||||||
|
name: "toggleFindRegex"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Option-W", win: "Alt-W" },
|
||||||
|
name: "toggleFindWholeWord"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Command-L", win: "Ctrl-L" },
|
||||||
|
name: "expandtoline"
|
||||||
|
}, {
|
||||||
|
bindKey: { mac: "Shift-Esc", win: "Shift-Esc" },
|
||||||
|
name: "removeSecondaryCursors"
|
||||||
|
}
|
||||||
|
].forEach(function (binding) {
|
||||||
|
var command = exports.handler.commands[binding.name];
|
||||||
|
if (command)
|
||||||
|
command.bindKey = binding.bindKey;
|
||||||
|
exports.handler.bindKey(binding.bindKey, command || binding.name);
|
||||||
|
});
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/keyboard/vscode"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,200 @@
|
||||||
|
define("ace/mode/abap_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/*
|
||||||
|
* based on
|
||||||
|
* " Vim ABAP syntax file
|
||||||
|
* " Language: SAP - ABAP/R4
|
||||||
|
* " Revision: 2.1
|
||||||
|
* " Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com>
|
||||||
|
* " Last Change: 2012 Oct 23
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var AbapHighlightRules = function () {
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"variable.language": "this",
|
||||||
|
"keyword": "ADD ALIAS ALIASES ASCENDING ASSERT ASSIGN ASSIGNING AT BACK" +
|
||||||
|
" CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY" +
|
||||||
|
" DATA DEFINE DEFINITION DEFERRED DELETE DESCENDING DESCRIBE DETAIL DIVIDE DO" +
|
||||||
|
" ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT" +
|
||||||
|
" FETCH FIELDS FORM FORMAT FREE FROM FUNCTION" +
|
||||||
|
" GENERATE GET" +
|
||||||
|
" HIDE" +
|
||||||
|
" IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION" +
|
||||||
|
" LEAVE LIKE LINE LOAD LOCAL LOOP" +
|
||||||
|
" MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY" +
|
||||||
|
" ON OVERLAY OPTIONAL OTHERS" +
|
||||||
|
" PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT" +
|
||||||
|
" RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURN RETURNING ROLLBACK" +
|
||||||
|
" SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS" +
|
||||||
|
" TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES" +
|
||||||
|
" UNASSIGN ULINE UNPACK UPDATE" +
|
||||||
|
" WHEN WHILE WINDOW WRITE" +
|
||||||
|
" OCCURS STRUCTURE OBJECT PROPERTY" +
|
||||||
|
" CASTING APPEND RAISING VALUE COLOR" +
|
||||||
|
" CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT" +
|
||||||
|
" ID NUMBER FOR TITLE OUTPUT" +
|
||||||
|
" WITH EXIT USING" +
|
||||||
|
" INTO WHERE GROUP BY HAVING ORDER BY SINGLE" +
|
||||||
|
" APPENDING CORRESPONDING FIELDS OF TABLE" +
|
||||||
|
" LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING" +
|
||||||
|
" EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN",
|
||||||
|
"constant.language": "TRUE FALSE NULL SPACE",
|
||||||
|
"support.type": "c n i p f d t x string xstring decfloat16 decfloat34",
|
||||||
|
"keyword.operator": "abs sign ceil floor trunc frac acos asin atan cos sin tan" +
|
||||||
|
" abapOperator cosh sinh tanh exp log log10 sqrt" +
|
||||||
|
" strlen xstrlen charlen numofchar dbmaxlen lines"
|
||||||
|
}, "text", true, " ");
|
||||||
|
var compoundKeywords = "WITH\\W+(?:HEADER\\W+LINE|FRAME|KEY)|NO\\W+STANDARD\\W+PAGE\\W+HEADING|" +
|
||||||
|
"EXIT\\W+FROM\\W+STEP\\W+LOOP|BEGIN\\W+OF\\W+(?:BLOCK|LINE)|BEGIN\\W+OF|" +
|
||||||
|
"END\\W+OF\\W+(?:BLOCK|LINE)|END\\W+OF|NO\\W+INTERVALS|" +
|
||||||
|
"RESPECTING\\W+BLANKS|SEPARATED\\W+BY|USING\\W+(?:EDIT\\W+MASK)|" +
|
||||||
|
"WHERE\\W+(?:LINE)|RADIOBUTTON\\W+GROUP|REF\\W+TO|" +
|
||||||
|
"(?:PUBLIC|PRIVATE|PROTECTED)(?:\\W+SECTION)?|DELETING\\W+(?:TRAILING|LEADING)" +
|
||||||
|
"(?:ALL\\W+OCCURRENCES)|(?:FIRST|LAST)\\W+OCCURRENCE|INHERITING\\W+FROM|" +
|
||||||
|
"LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|" +
|
||||||
|
"CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|" +
|
||||||
|
"FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|" +
|
||||||
|
"NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|" +
|
||||||
|
"START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|" +
|
||||||
|
"TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|" +
|
||||||
|
"IS\\W+(?:NOT\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)";
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{ token: "string", regex: "`", next: "string" },
|
||||||
|
{ token: "string", regex: "'", next: "qstring" },
|
||||||
|
{ token: "doc.comment", regex: /^\*.+/ },
|
||||||
|
{ token: "comment", regex: /".+$/ },
|
||||||
|
{ token: "invalid", regex: "\\.{2,}" },
|
||||||
|
{ token: "keyword.operator", regex: /\W[\-+%=<>*]\W|\*\*|[~:,\.&$]|->*?|=>/ },
|
||||||
|
{ token: "paren.lparen", regex: "[\\[({]" },
|
||||||
|
{ token: "paren.rparen", regex: "[\\])}]" },
|
||||||
|
{ token: "constant.numeric", regex: "[+-]?\\d+\\b" },
|
||||||
|
{ token: "variable.parameter", regex: /sy|pa?\d\d\d\d\|t\d\d\d\.|innnn/ },
|
||||||
|
{ token: "keyword", regex: compoundKeywords },
|
||||||
|
{ token: "variable.parameter", regex: /\w+-\w[\-\w]*/ },
|
||||||
|
{ token: keywordMapper, regex: "\\b\\w+\\b" },
|
||||||
|
{ caseInsensitive: true }
|
||||||
|
],
|
||||||
|
"qstring": [
|
||||||
|
{ token: "constant.language.escape", regex: "''" },
|
||||||
|
{ token: "string", regex: "'", next: "start" },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
],
|
||||||
|
"string": [
|
||||||
|
{ token: "constant.language.escape", regex: "``" },
|
||||||
|
{ token: "string", regex: "`", next: "start" },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(AbapHighlightRules, TextHighlightRules);
|
||||||
|
exports.AbapHighlightRules = AbapHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.commentBlock = function (session, row) {
|
||||||
|
var re = /\S/;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startLevel = line.search(re);
|
||||||
|
if (startLevel == -1 || line[startLevel] != "#")
|
||||||
|
return;
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
var level = line.search(re);
|
||||||
|
if (level == -1)
|
||||||
|
continue;
|
||||||
|
if (line[level] != "#")
|
||||||
|
break;
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var range = this.indentationBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
range = this.commentBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var indent = line.search(/\S/);
|
||||||
|
var next = session.getLine(row + 1);
|
||||||
|
var prev = session.getLine(row - 1);
|
||||||
|
var prevIndent = prev.search(/\S/);
|
||||||
|
var nextIndent = next.search(/\S/);
|
||||||
|
if (indent == -1) {
|
||||||
|
session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? "start" : "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (prevIndent == -1) {
|
||||||
|
if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
|
||||||
|
if (session.getLine(row - 2).search(/\S/) == -1) {
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prevIndent != -1 && prevIndent < indent)
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
else
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
if (indent < nextIndent)
|
||||||
|
return "start";
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/abap",["require","exports","module","ace/mode/abap_highlight_rules","ace/mode/folding/coffee","ace/range","ace/mode/text","ace/lib/oop"], function(require, exports, module){"use strict";
|
||||||
|
var Rules = require("./abap_highlight_rules").AbapHighlightRules;
|
||||||
|
var FoldMode = require("./folding/coffee").FoldMode;
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
function Mode() {
|
||||||
|
this.HighlightRules = Rules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
}
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = '"';
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/abap";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/abap"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,243 @@
|
||||||
|
define("ace/mode/abc_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was partially autogenerated from https://github.com/jimhawkridge/SublimeABC
|
||||||
|
|
||||||
|
Modifications
|
||||||
|
|
||||||
|
- more classes to express the abc semantic
|
||||||
|
- added syntax highlighting for Zupfnoter conventions (https://github.com/bwl21/zupfnoter)
|
||||||
|
- separate note pitch and note duration - even if it looks the same
|
||||||
|
|
||||||
|
***********************************************************************************************/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var ABCHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
start: [
|
||||||
|
{
|
||||||
|
token: ['zupfnoter.information.comment.line.percentage', 'information.keyword', 'in formation.keyword.embedded'],
|
||||||
|
regex: '(%%%%)(hn\\.[a-z]*)(.*)',
|
||||||
|
comment: 'Instruction Comment'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: ['information.comment.line.percentage', 'information.keyword.embedded'],
|
||||||
|
regex: '(%%)(.*)',
|
||||||
|
comment: 'Instruction Comment'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'comment.line.percentage',
|
||||||
|
regex: '%.*',
|
||||||
|
comment: 'Comments'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'barline.keyword.operator',
|
||||||
|
regex: '[\\[:]*[|:][|\\]:]*(?:\\[?[0-9]+)?|\\[[0-9]+',
|
||||||
|
comment: 'Bar lines'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: ['information.keyword.embedded', 'information.argument.string.unquoted'],
|
||||||
|
regex: '(\\[[A-Za-z]:)([^\\]]*\\])',
|
||||||
|
comment: 'embedded Header lines'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: ['information.keyword', 'information.argument.string.unquoted'],
|
||||||
|
regex: '^([A-Za-z]:)([^%\\\\]*)',
|
||||||
|
comment: 'Header lines'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: ['text', 'entity.name.function', 'string.unquoted', 'text'],
|
||||||
|
regex: '(\\[)([A-Z]:)(.*?)(\\])',
|
||||||
|
comment: 'Inline fields'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: ['accent.constant.language', 'pitch.constant.numeric', 'duration.constant.numeric'],
|
||||||
|
regex: '([\\^=_]*)([A-Ga-gz][,\']*)([0-9]*/*[><0-9]*)',
|
||||||
|
comment: 'Notes'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'zupfnoter.jumptarget.string.quoted',
|
||||||
|
regex: '[\\"!]\\^\\:.*?[\\"!]',
|
||||||
|
comment: 'Zupfnoter jumptarget'
|
||||||
|
}, {
|
||||||
|
token: 'zupfnoter.goto.string.quoted',
|
||||||
|
regex: '[\\"!]\\^\\@.*?[\\"!]',
|
||||||
|
comment: 'Zupfnoter goto'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'zupfnoter.annotation.string.quoted',
|
||||||
|
regex: '[\\"!]\\^\\!.*?[\\"!]',
|
||||||
|
comment: 'Zupfnoter annoation'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'zupfnoter.annotationref.string.quoted',
|
||||||
|
regex: '[\\"!]\\^\\#.*?[\\"!]',
|
||||||
|
comment: 'Zupfnoter annotation reference'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'chordname.string.quoted',
|
||||||
|
regex: '[\\"!]\\^.*?[\\"!]',
|
||||||
|
comment: 'abc chord'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'string.quoted',
|
||||||
|
regex: '[\\"!].*?[\\"!]',
|
||||||
|
comment: 'abc annotation'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
ABCHighlightRules.metaData = {
|
||||||
|
fileTypes: ['abc'],
|
||||||
|
name: 'ABC',
|
||||||
|
scopeName: 'text.abcnotation'
|
||||||
|
};
|
||||||
|
oop.inherits(ABCHighlightRules, TextHighlightRules);
|
||||||
|
exports.ABCHighlightRules = ABCHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/abc",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/abc_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var ABCHighlightRules = require("./abc_highlight_rules").ABCHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = ABCHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "%";
|
||||||
|
this.$id = "ace/mode/abc";
|
||||||
|
this.snippetFileId = "ace/snippets/abc";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/abc"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,108 @@
|
||||||
|
define("ace/mode/ada_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 AdaHighlightRules = function () {
|
||||||
|
var keywords = "abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|" +
|
||||||
|
"access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|" +
|
||||||
|
"array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|" +
|
||||||
|
"body|private|then|if|procedure|type|case|in|protected|constant|interface|until|" +
|
||||||
|
"|is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor";
|
||||||
|
var builtinConstants = ("true|false|null");
|
||||||
|
var builtinFunctions = ("count|min|max|avg|sum|rank|now|coalesce|main");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"support.function": builtinFunctions,
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": builtinConstants
|
||||||
|
}, "identifier", true);
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
token: "comment",
|
||||||
|
regex: "--.*$"
|
||||||
|
}, {
|
||||||
|
token: "string", // " string
|
||||||
|
regex: '".*?"'
|
||||||
|
}, {
|
||||||
|
token: "string", // character
|
||||||
|
regex: "'.'"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[\\(]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\)]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(AdaHighlightRules, TextHighlightRules);
|
||||||
|
exports.AdaHighlightRules = AdaHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/ada",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ada_highlight_rules","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var AdaHighlightRules = require("./ada_highlight_rules").AdaHighlightRules;
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = AdaHighlightRules;
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "--";
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*(begin|loop|then|is|do)\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
var complete_line = line + input;
|
||||||
|
if (complete_line.match(/^\s*(begin|end)$/)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, session, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var prevLine = session.getLine(row - 1);
|
||||||
|
var prevIndent = this.$getIndent(prevLine).length;
|
||||||
|
var indent = this.$getIndent(line).length;
|
||||||
|
if (indent <= prevIndent) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
session.outdentRows(new Range(row, 0, row + 2, 0));
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/ada";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/ada"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,279 @@
|
||||||
|
define("ace/mode/alda_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from ../../src/alda.JSON-tmLanguage (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var AldaHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
pitch: [{
|
||||||
|
token: "variable.parameter.operator.pitch.alda",
|
||||||
|
regex: /(?:[+\-]+|\=)/
|
||||||
|
}, {
|
||||||
|
token: "",
|
||||||
|
regex: "",
|
||||||
|
next: "timing"
|
||||||
|
}],
|
||||||
|
timing: [{
|
||||||
|
token: "string.quoted.operator.timing.alda",
|
||||||
|
regex: /\d+(?:s|ms)?/
|
||||||
|
}, {
|
||||||
|
token: "",
|
||||||
|
regex: "",
|
||||||
|
next: "start"
|
||||||
|
}],
|
||||||
|
start: [{
|
||||||
|
token: [
|
||||||
|
"constant.language.instrument.alda",
|
||||||
|
"constant.language.instrument.alda",
|
||||||
|
"meta.part.call.alda",
|
||||||
|
"storage.type.nickname.alda",
|
||||||
|
"meta.part.call.alda"
|
||||||
|
],
|
||||||
|
regex: /^([a-zA-Z]{2}[\w\-+\'()]*)((?:\s*\/\s*[a-zA-Z]{2}[\w\-+\'()]*)*)(?:(\s*)(\"[a-zA-Z]{2}[\w\-+\'()]*\"))?(\s*:)/
|
||||||
|
}, {
|
||||||
|
token: [
|
||||||
|
"text",
|
||||||
|
"entity.other.inherited-class.voice.alda",
|
||||||
|
"text"
|
||||||
|
],
|
||||||
|
regex: /^(\s*)(V\d+)(:)/
|
||||||
|
}, {
|
||||||
|
token: "comment.line.number-sign.alda",
|
||||||
|
regex: /#.*$/
|
||||||
|
}, {
|
||||||
|
token: "entity.name.function.pipe.measure.alda",
|
||||||
|
regex: /\|/
|
||||||
|
}, {
|
||||||
|
token: "comment.block.inline.alda",
|
||||||
|
regex: /\(comment\b/,
|
||||||
|
push: [{
|
||||||
|
token: "comment.block.inline.alda",
|
||||||
|
regex: /\)/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment.block.inline.alda"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "entity.name.function.marker.alda",
|
||||||
|
regex: /%[a-zA-Z]{2}[\w\-+\'()]*/
|
||||||
|
}, {
|
||||||
|
token: "entity.name.function.at-marker.alda",
|
||||||
|
regex: /@[a-zA-Z]{2}[\w\-+\'()]*/
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator.octave-change.alda",
|
||||||
|
regex: /\bo\d+\b/
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator.octave-shift.alda",
|
||||||
|
regex: /[><]/
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator.repeat.alda",
|
||||||
|
regex: /\*\s*\d+/
|
||||||
|
}, {
|
||||||
|
token: "string.quoted.operator.timing.alda",
|
||||||
|
regex: /[.]|r\d*(?:s|ms)?/
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: /([cdefgab])/,
|
||||||
|
next: "pitch"
|
||||||
|
}, {
|
||||||
|
token: "string.quoted.operator.timing.alda",
|
||||||
|
regex: /~/,
|
||||||
|
next: "timing"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.section.embedded.cram.alda",
|
||||||
|
regex: /\}/,
|
||||||
|
next: "timing"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric.subchord.alda",
|
||||||
|
regex: /\//
|
||||||
|
}, {
|
||||||
|
todo: {
|
||||||
|
token: "punctuation.section.embedded.cram.alda",
|
||||||
|
regex: /\{/,
|
||||||
|
push: [{
|
||||||
|
token: "punctuation.section.embedded.cram.alda",
|
||||||
|
regex: /\}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "$self"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
todo: {
|
||||||
|
token: "keyword.control.sequence.alda",
|
||||||
|
regex: /\[/,
|
||||||
|
push: [{
|
||||||
|
token: "keyword.control.sequence.alda",
|
||||||
|
regex: /\]/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "$self"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
token: "meta.inline.clojure.alda",
|
||||||
|
regex: /\(/,
|
||||||
|
push: [{
|
||||||
|
token: "meta.inline.clojure.alda",
|
||||||
|
regex: /\)/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "source.clojure"
|
||||||
|
}, {
|
||||||
|
defaultToken: "meta.inline.clojure.alda"
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
AldaHighlightRules.metaData = {
|
||||||
|
scopeName: "source.alda",
|
||||||
|
fileTypes: ["alda"],
|
||||||
|
name: "Alda"
|
||||||
|
};
|
||||||
|
oop.inherits(AldaHighlightRules, TextHighlightRules);
|
||||||
|
exports.AldaHighlightRules = AldaHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/alda",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/alda_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var AldaHighlightRules = require("./alda_highlight_rules").AldaHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = AldaHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/alda";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/alda"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,318 @@
|
||||||
|
define("ace/mode/apache_conf_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from https://raw.github.com/colinta/ApacheConf.tmLanguage/master/ApacheConf.tmLanguage (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var ApacheConfHighlightRules = function () {
|
||||||
|
this.$rules = { start: [{ token: ['punctuation.definition.comment.apacheconf',
|
||||||
|
'comment.line.hash.ini',
|
||||||
|
'comment.line.hash.ini'],
|
||||||
|
regex: '^((?:\\s)*)(#)(.*$)' },
|
||||||
|
{ token: ['punctuation.definition.tag.apacheconf',
|
||||||
|
'entity.tag.apacheconf',
|
||||||
|
'text',
|
||||||
|
'string.value.apacheconf',
|
||||||
|
'punctuation.definition.tag.apacheconf'],
|
||||||
|
regex: '(<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(?:(\\s)(.+?))?(>)' },
|
||||||
|
{ token: ['punctuation.definition.tag.apacheconf',
|
||||||
|
'entity.tag.apacheconf',
|
||||||
|
'punctuation.definition.tag.apacheconf'],
|
||||||
|
regex: '(</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(>)' },
|
||||||
|
{ token: ['keyword.alias.apacheconf', 'text',
|
||||||
|
'string.regexp.apacheconf', 'text',
|
||||||
|
'string.replacement.apacheconf', 'text'],
|
||||||
|
regex: '(Rewrite(?:Rule|Cond))(\\s+)(.+?)(\\s+)(.+?)($|\\s)' },
|
||||||
|
{ token: ['keyword.alias.apacheconf', 'text',
|
||||||
|
'entity.status.apacheconf', 'text',
|
||||||
|
'string.regexp.apacheconf', 'text',
|
||||||
|
'string.path.apacheconf', 'text'],
|
||||||
|
regex: '(RedirectMatch)(?:(\\s+)(\\d\\d\\d|permanent|temp|seeother|gone))?(\\s+)(.+?)(\\s+)(?:(.+?)($|\\s))?' },
|
||||||
|
{ token: ['keyword.alias.apacheconf', 'text',
|
||||||
|
'entity.status.apacheconf', 'text',
|
||||||
|
'string.path.apacheconf', 'text',
|
||||||
|
'string.path.apacheconf', 'text'],
|
||||||
|
regex: '(Redirect)(?:(\\s+)(\\d\\d\\d|permanent|temp|seeother|gone))?(\\s+)(.+?)(\\s+)(?:(.+?)($|\\s))?' },
|
||||||
|
{ token: ['keyword.alias.apacheconf', 'text',
|
||||||
|
'string.regexp.apacheconf', 'text',
|
||||||
|
'string.path.apacheconf', 'text'],
|
||||||
|
regex: '(ScriptAliasMatch|AliasMatch)(\\s+)(.+?)(\\s+)(?:(.+?)(\\s))?' },
|
||||||
|
{ token: ['keyword.alias.apacheconf', 'text',
|
||||||
|
'string.path.apacheconf', 'text',
|
||||||
|
'string.path.apacheconf', 'text'],
|
||||||
|
regex: '(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\s+)(.+?)(\\s+)(?:(.+?)($|\\s))?' },
|
||||||
|
{ token: 'keyword.core.apacheconf',
|
||||||
|
regex: '\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\b' },
|
||||||
|
{ token: 'keyword.mpm.apacheconf',
|
||||||
|
regex: '\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\b' },
|
||||||
|
{ token: 'keyword.access.apacheconf',
|
||||||
|
regex: '\\b(?:Allow|Deny|Order)\\b' },
|
||||||
|
{ token: 'keyword.actions.apacheconf',
|
||||||
|
regex: '\\b(?:Action|Script)\\b' },
|
||||||
|
{ token: 'keyword.alias.apacheconf',
|
||||||
|
regex: '\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\b' },
|
||||||
|
{ token: 'keyword.auth.apacheconf',
|
||||||
|
regex: '\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\b' },
|
||||||
|
{ token: 'keyword.auth_anon.apacheconf',
|
||||||
|
regex: '\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\b' },
|
||||||
|
{ token: 'keyword.auth_dbm.apacheconf',
|
||||||
|
regex: '\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\b' },
|
||||||
|
{ token: 'keyword.auth_digest.apacheconf',
|
||||||
|
regex: '\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\b' },
|
||||||
|
{ token: 'keyword.auth_ldap.apacheconf',
|
||||||
|
regex: '\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\b' },
|
||||||
|
{ token: 'keyword.autoindex.apacheconf',
|
||||||
|
regex: '\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\b' },
|
||||||
|
{ token: 'keyword.cache.apacheconf',
|
||||||
|
regex: '\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\b' },
|
||||||
|
{ token: 'keyword.cern_meta.apacheconf',
|
||||||
|
regex: '\\b(?:MetaDir|MetaFiles|MetaSuffix)\\b' },
|
||||||
|
{ token: 'keyword.cgi.apacheconf',
|
||||||
|
regex: '\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\b' },
|
||||||
|
{ token: 'keyword.cgid.apacheconf',
|
||||||
|
regex: '\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\b' },
|
||||||
|
{ token: 'keyword.charset_lite.apacheconf',
|
||||||
|
regex: '\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\b' },
|
||||||
|
{ token: 'keyword.dav.apacheconf',
|
||||||
|
regex: '\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\b' },
|
||||||
|
{ token: 'keyword.deflate.apacheconf',
|
||||||
|
regex: '\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\b' },
|
||||||
|
{ token: 'keyword.dir.apacheconf',
|
||||||
|
regex: '\\b(?:DirectoryIndex|DirectorySlash)\\b' },
|
||||||
|
{ token: 'keyword.disk_cache.apacheconf',
|
||||||
|
regex: '\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\b' },
|
||||||
|
{ token: 'keyword.dumpio.apacheconf',
|
||||||
|
regex: '\\b(?:DumpIOInput|DumpIOOutput)\\b' },
|
||||||
|
{ token: 'keyword.env.apacheconf',
|
||||||
|
regex: '\\b(?:PassEnv|SetEnv|UnsetEnv)\\b' },
|
||||||
|
{ token: 'keyword.expires.apacheconf',
|
||||||
|
regex: '\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\b' },
|
||||||
|
{ token: 'keyword.ext_filter.apacheconf',
|
||||||
|
regex: '\\b(?:ExtFilterDefine|ExtFilterOptions)\\b' },
|
||||||
|
{ token: 'keyword.file_cache.apacheconf',
|
||||||
|
regex: '\\b(?:CacheFile|MMapFile)\\b' },
|
||||||
|
{ token: 'keyword.headers.apacheconf',
|
||||||
|
regex: '\\b(?:Header|RequestHeader)\\b' },
|
||||||
|
{ token: 'keyword.imap.apacheconf',
|
||||||
|
regex: '\\b(?:ImapBase|ImapDefault|ImapMenu)\\b' },
|
||||||
|
{ token: 'keyword.include.apacheconf',
|
||||||
|
regex: '\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\b' },
|
||||||
|
{ token: 'keyword.isapi.apacheconf',
|
||||||
|
regex: '\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\b' },
|
||||||
|
{ token: 'keyword.ldap.apacheconf',
|
||||||
|
regex: '\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\b' },
|
||||||
|
{ token: 'keyword.log.apacheconf',
|
||||||
|
regex: '\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\b' },
|
||||||
|
{ token: 'keyword.mem_cache.apacheconf',
|
||||||
|
regex: '\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\b' },
|
||||||
|
{ token: 'keyword.mime.apacheconf',
|
||||||
|
regex: '\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\b' },
|
||||||
|
{ token: 'keyword.misc.apacheconf',
|
||||||
|
regex: '\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\b' },
|
||||||
|
{ token: 'keyword.negotiation.apacheconf',
|
||||||
|
regex: '\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\b' },
|
||||||
|
{ token: 'keyword.nw_ssl.apacheconf',
|
||||||
|
regex: '\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\b' },
|
||||||
|
{ token: 'keyword.proxy.apacheconf',
|
||||||
|
regex: '\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\b' },
|
||||||
|
{ token: 'keyword.rewrite.apacheconf',
|
||||||
|
regex: '\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\b' },
|
||||||
|
{ token: 'keyword.setenvif.apacheconf',
|
||||||
|
regex: '\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\b' },
|
||||||
|
{ token: 'keyword.so.apacheconf',
|
||||||
|
regex: '\\b(?:LoadFile|LoadModule)\\b' },
|
||||||
|
{ token: 'keyword.ssl.apacheconf',
|
||||||
|
regex: '\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\b' },
|
||||||
|
{ token: 'keyword.usertrack.apacheconf',
|
||||||
|
regex: '\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\b' },
|
||||||
|
{ token: 'keyword.vhost_alias.apacheconf',
|
||||||
|
regex: '\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\b' },
|
||||||
|
{ token: ['keyword.php.apacheconf',
|
||||||
|
'text',
|
||||||
|
'entity.property.apacheconf',
|
||||||
|
'text',
|
||||||
|
'string.value.apacheconf',
|
||||||
|
'text'],
|
||||||
|
regex: '\\b(php_value|php_flag)\\b(?:(\\s+)(.+?)(?:(\\s+)(.+?))?)?(\\s)' },
|
||||||
|
{ token: ['punctuation.variable.apacheconf',
|
||||||
|
'variable.env.apacheconf',
|
||||||
|
'variable.misc.apacheconf',
|
||||||
|
'punctuation.variable.apacheconf'],
|
||||||
|
regex: '(%\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\})' },
|
||||||
|
{ token: ['entity.mime-type.apacheconf', 'text'],
|
||||||
|
regex: '\\b((?:text|image|application|video|audio)/.+?)(\\s)' },
|
||||||
|
{ token: 'entity.helper.apacheconf',
|
||||||
|
regex: '\\b(?:from|unset|set|on|off)\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'constant.integer.apacheconf', regex: '\\b\\d+\\b' },
|
||||||
|
{ token: ['text',
|
||||||
|
'punctuation.definition.flag.apacheconf',
|
||||||
|
'string.flag.apacheconf',
|
||||||
|
'punctuation.definition.flag.apacheconf',
|
||||||
|
'text'],
|
||||||
|
regex: '(\\s)(\\[)(.*?)(\\])(\\s)' }] };
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
ApacheConfHighlightRules.metaData = { fileTypes: ['conf',
|
||||||
|
'CONF',
|
||||||
|
'htaccess',
|
||||||
|
'HTACCESS',
|
||||||
|
'htgroups',
|
||||||
|
'HTGROUPS',
|
||||||
|
'htpasswd',
|
||||||
|
'HTPASSWD',
|
||||||
|
'.htaccess',
|
||||||
|
'.HTACCESS',
|
||||||
|
'.htgroups',
|
||||||
|
'.HTGROUPS',
|
||||||
|
'.htpasswd',
|
||||||
|
'.HTPASSWD'],
|
||||||
|
name: 'Apache Conf',
|
||||||
|
scopeName: 'source.apacheconf' };
|
||||||
|
oop.inherits(ApacheConfHighlightRules, TextHighlightRules);
|
||||||
|
exports.ApacheConfHighlightRules = ApacheConfHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/apache_conf",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/apache_conf_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var ApacheConfHighlightRules = require("./apache_conf_highlight_rules").ApacheConfHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = ApacheConfHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "#";
|
||||||
|
this.$id = "ace/mode/apache_conf";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/apache_conf"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,402 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/apex_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/doc_comment_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("../mode/text_highlight_rules").TextHighlightRules;
|
||||||
|
var DocCommentHighlightRules = require("../mode/doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var ApexHighlightRules = function () {
|
||||||
|
var mainKeywordMapper = this.createKeywordMapper({
|
||||||
|
"variable.language": "activate|any|autonomous|begin|bigdecimal|byte|cast|char|collect|const"
|
||||||
|
+ "|end|exit|export|float|goto|group|having|hint|import|inner|into|join|loop|number|object|of|outer"
|
||||||
|
+ "|parallel|pragma|retrieve|returning|search|short|stat|synchronized|then|this_month"
|
||||||
|
+ "|transaction|type|when",
|
||||||
|
"keyword": "private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final"
|
||||||
|
+ "|and|array|as|asc|break|bulk|by|catch|class|commit|continue|convertcurrency"
|
||||||
|
+ "|delete|desc|do|else|enum|extends|false|final|finally|for|from|future|global"
|
||||||
|
+ "|if|implements|in|insert|instanceof|interface|last_90_days|last_month"
|
||||||
|
+ "|last_n_days|last_week|like|limit|list|map|merge|new|next_90_days|next_month|next_n_days"
|
||||||
|
+ "|next_week|not|null|nulls|on|or|override|package|return"
|
||||||
|
+ "|rollback|savepoint|select|set|sort|super|testmethod|this|this_week|throw|today"
|
||||||
|
+ "|tolabel|tomorrow|trigger|true|try|undelete|update|upsert|using|virtual|webservice"
|
||||||
|
+ "|where|while|yesterday|switch|case|default",
|
||||||
|
"storage.type": "def|boolean|byte|char|short|int|float|pblob|date|datetime|decimal|double|id|integer|long|string|time|void|blob|Object",
|
||||||
|
"constant.language": "true|false|null|after|before|count|excludes|first|includes|last|order|sharing|with",
|
||||||
|
"support.function": "system|apex|label|apexpages|userinfo|schema"
|
||||||
|
}, "identifier", true);
|
||||||
|
function keywordMapper(value) {
|
||||||
|
if (value.slice(-3) == "__c")
|
||||||
|
return "support.function";
|
||||||
|
return mainKeywordMapper(value);
|
||||||
|
}
|
||||||
|
function string(start, options) {
|
||||||
|
return {
|
||||||
|
regex: start + (options.multiline ? "" : "(?=.)"),
|
||||||
|
token: "string.start",
|
||||||
|
next: [{
|
||||||
|
regex: options.escape,
|
||||||
|
token: "character.escape"
|
||||||
|
}, {
|
||||||
|
regex: options.error,
|
||||||
|
token: "error.invalid"
|
||||||
|
}, {
|
||||||
|
regex: start + (options.multiline ? "" : "|$"),
|
||||||
|
token: "string.end",
|
||||||
|
next: options.next || "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function comments() {
|
||||||
|
return [{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\/\\/(?=.)",
|
||||||
|
next: [
|
||||||
|
DocCommentHighlightRules.getTagRule(),
|
||||||
|
{ token: "comment", regex: "$|^", next: "start" },
|
||||||
|
{ defaultToken: "comment", caseInsensitive: true }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: /\/\*/,
|
||||||
|
next: [
|
||||||
|
DocCommentHighlightRules.getTagRule(),
|
||||||
|
{ token: "comment", regex: "\\*\\/", next: "start" },
|
||||||
|
{ defaultToken: "comment", caseInsensitive: true }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
this.$rules = {
|
||||||
|
start: [
|
||||||
|
string("'", {
|
||||||
|
escape: /\\[nb'"\\]/,
|
||||||
|
error: /\\./,
|
||||||
|
multiline: false
|
||||||
|
}),
|
||||||
|
comments("c"),
|
||||||
|
{
|
||||||
|
type: "decoration",
|
||||||
|
token: [
|
||||||
|
"meta.package.apex",
|
||||||
|
"keyword.other.package.apex",
|
||||||
|
"meta.package.apex",
|
||||||
|
"storage.modifier.package.apex",
|
||||||
|
"meta.package.apex",
|
||||||
|
"punctuation.terminator.apex"
|
||||||
|
],
|
||||||
|
regex: /^(\s*)(package)\b(?:(\s*)([^ ;$]+)(\s*)((?:;)?))?/
|
||||||
|
}, {
|
||||||
|
regex: /@[a-zA-Z_$][a-zA-Z_$\d\u0080-\ufffe]*/,
|
||||||
|
token: "constant.language"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: /[a-zA-Z_$][a-zA-Z_$\d\u0080-\ufffe]*/,
|
||||||
|
token: keywordMapper
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "`#%",
|
||||||
|
token: "error.invalid"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: /[+-]?\d+(?:(?:\.\d*)?(?:[LlDdEe][+-]?\d+)?)\b|\.\d+[LlDdEe]/
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: /[?:,;.]/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /[\[]/,
|
||||||
|
next: "maybe_soql",
|
||||||
|
merge: false
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /[\[({]/,
|
||||||
|
next: "start",
|
||||||
|
merge: false
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /[\])}]/,
|
||||||
|
merge: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
maybe_soql: [{
|
||||||
|
regex: /\s+/,
|
||||||
|
token: "text"
|
||||||
|
}, {
|
||||||
|
regex: /(SELECT|FIND)\b/,
|
||||||
|
token: "keyword",
|
||||||
|
caseInsensitive: true,
|
||||||
|
next: "soql"
|
||||||
|
}, {
|
||||||
|
regex: "",
|
||||||
|
token: "none",
|
||||||
|
next: "start"
|
||||||
|
}],
|
||||||
|
soql: [{
|
||||||
|
regex: "(:?ASC|BY|CATEGORY|CUBE|DATA|DESC|END|FIND|FIRST|FOR|FROM|GROUP|HAVING|IN|LAST"
|
||||||
|
+ "|LIMIT|NETWORK|NULLS|OFFSET|ORDER|REFERENCE|RETURNING|ROLLUP|SCOPE|SELECT"
|
||||||
|
+ "|SNIPPET|TRACKING|TYPEOF|UPDATE|USING|VIEW|VIEWSTAT|WHERE|WITH|AND|OR)\\b",
|
||||||
|
token: "keyword",
|
||||||
|
caseInsensitive: true
|
||||||
|
}, {
|
||||||
|
regex: "(:?target_length|toLabel|convertCurrency|count|Contact|Account|User|FIELDS)\\b",
|
||||||
|
token: "support.function",
|
||||||
|
caseInsensitive: true
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /[\]]/,
|
||||||
|
next: "start",
|
||||||
|
merge: false
|
||||||
|
},
|
||||||
|
string("'", {
|
||||||
|
escape: /\\[nb'"\\]/,
|
||||||
|
error: /\\./,
|
||||||
|
multiline: false,
|
||||||
|
next: "soql"
|
||||||
|
}),
|
||||||
|
string('"', {
|
||||||
|
escape: /\\[nb'"\\]/,
|
||||||
|
error: /\\./,
|
||||||
|
multiline: false,
|
||||||
|
next: "soql"
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
regex: /\\./,
|
||||||
|
token: "character.escape"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: /[\?\&\|\!\{\}\[\]\(\)\^\~\*\:\"\'\+\-\,\.=\\\/]/,
|
||||||
|
token: "keyword.operator"
|
||||||
|
}],
|
||||||
|
"log-start": [{
|
||||||
|
token: "timestamp.invisible",
|
||||||
|
regex: /^[\d:.() ]+\|/,
|
||||||
|
next: "log-header"
|
||||||
|
}, {
|
||||||
|
token: "timestamp.invisible",
|
||||||
|
regex: /^ (Number of|Maximum)[^:]*:/,
|
||||||
|
next: "log-comment"
|
||||||
|
}, {
|
||||||
|
token: "invisible",
|
||||||
|
regex: /^Execute Anonymous:/,
|
||||||
|
next: "log-comment"
|
||||||
|
}, {
|
||||||
|
defaultToken: "text"
|
||||||
|
}],
|
||||||
|
"log-comment": [{
|
||||||
|
token: "log-comment",
|
||||||
|
regex: /.*$/,
|
||||||
|
next: "log-start"
|
||||||
|
}],
|
||||||
|
"log-header": [{
|
||||||
|
token: "timestamp.invisible",
|
||||||
|
regex: /((USER_DEBUG|\[\d+\]|DEBUG)\|)+/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "keyword",
|
||||||
|
regex: "(?:EXECUTION_FINISHED|EXECUTION_STARTED|CODE_UNIT_STARTED"
|
||||||
|
+ "|CUMULATIVE_LIMIT_USAGE|LIMIT_USAGE_FOR_NS"
|
||||||
|
+ "|CUMULATIVE_LIMIT_USAGE_END|CODE_UNIT_FINISHED)"
|
||||||
|
}, {
|
||||||
|
regex: "",
|
||||||
|
next: "log-start"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(ApexHighlightRules, TextHighlightRules);
|
||||||
|
exports.ApexHighlightRules = ApexHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/apex",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/apex_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/* caption: Apex; extensions: apex,cls,trigger,tgr */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("../mode/text").Mode;
|
||||||
|
var ApexHighlightRules = require("./apex_highlight_rules").ApexHighlightRules;
|
||||||
|
var FoldMode = require("../mode/folding/cstyle").FoldMode;
|
||||||
|
function ApexMode() {
|
||||||
|
TextMode.call(this);
|
||||||
|
this.HighlightRules = ApexHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
}
|
||||||
|
oop.inherits(ApexMode, TextMode);
|
||||||
|
ApexMode.prototype.lineCommentStart = "//";
|
||||||
|
ApexMode.prototype.blockComment = {
|
||||||
|
start: "/*",
|
||||||
|
end: "*/"
|
||||||
|
};
|
||||||
|
exports.Mode = ApexMode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/apex"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,232 @@
|
||||||
|
define("ace/mode/applescript_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 AppleScriptHighlightRules = function () {
|
||||||
|
var keywords = ("about|above|after|against|and|around|as|at|back|before|beginning|" +
|
||||||
|
"behind|below|beneath|beside|between|but|by|considering|" +
|
||||||
|
"contain|contains|continue|copy|div|does|eighth|else|end|equal|" +
|
||||||
|
"equals|error|every|exit|fifth|first|for|fourth|from|front|" +
|
||||||
|
"get|given|global|if|ignoring|in|into|is|it|its|last|local|me|" +
|
||||||
|
"middle|mod|my|ninth|not|of|on|onto|or|over|prop|property|put|ref|" +
|
||||||
|
"reference|repeat|returning|script|second|set|seventh|since|" +
|
||||||
|
"sixth|some|tell|tenth|that|the|then|third|through|thru|" +
|
||||||
|
"timeout|times|to|transaction|try|until|where|while|whose|with|without");
|
||||||
|
var builtinConstants = ("AppleScript|false|linefeed|return|pi|quote|result|space|tab|true");
|
||||||
|
var builtinFunctions = ("activate|beep|count|delay|launch|log|offset|read|round|run|say|" +
|
||||||
|
"summarize|write");
|
||||||
|
var builtinTypes = ("alias|application|boolean|class|constant|date|file|integer|list|" +
|
||||||
|
"number|real|record|string|text|character|characters|contents|day|" +
|
||||||
|
"frontmost|id|item|length|month|name|paragraph|paragraphs|rest|" +
|
||||||
|
"reverse|running|time|version|weekday|word|words|year");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"support.function": builtinFunctions,
|
||||||
|
"constant.language": builtinConstants,
|
||||||
|
"support.type": builtinTypes,
|
||||||
|
"keyword": keywords
|
||||||
|
}, "identifier");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "--.*$"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\(\\*",
|
||||||
|
next: "comment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string", // " string
|
||||||
|
regex: '".*?"'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "support.type",
|
||||||
|
regex: '\\b(POSIX file|POSIX path|(date|time) string|quoted form)\\b'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "support.function",
|
||||||
|
regex: '\\b(clipboard info|the clipboard|info for|list (disks|folder)|' +
|
||||||
|
'mount volume|path to|(close|open for) access|(get|set) eof|' +
|
||||||
|
'current date|do shell script|get volume settings|random number|' +
|
||||||
|
'set volume|system attribute|system info|time to GMT|' +
|
||||||
|
'(load|run|store) script|scripting components|' +
|
||||||
|
'ASCII (character|number)|localized string|' +
|
||||||
|
'choose (application|color|file|file name|' +
|
||||||
|
'folder|from list|remote application|URL)|' +
|
||||||
|
'display (alert|dialog))\\b|^\\s*return\\b'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.language",
|
||||||
|
regex: '\\b(text item delimiters|current application|missing value)\\b'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "keyword",
|
||||||
|
regex: '\\b(apart from|aside from|instead of|out of|greater than|' +
|
||||||
|
"isn't|(doesn't|does not) (equal|come before|come after|contain)|" +
|
||||||
|
'(greater|less) than( or equal)?|(starts?|ends|begins?) with|' +
|
||||||
|
'contained by|comes (before|after)|a (ref|reference))\\b'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z][a-zA-Z0-9_]*\\b"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\)",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(AppleScriptHighlightRules, TextHighlightRules);
|
||||||
|
exports.AppleScriptHighlightRules = AppleScriptHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/applescript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/applescript_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var AppleScriptHighlightRules = require("./applescript_highlight_rules").AppleScriptHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = AppleScriptHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "--";
|
||||||
|
this.blockComment = { start: "(*", end: "*)" };
|
||||||
|
this.$id = "ace/mode/applescript";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/applescript"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
define("ace/mode/aql_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 AqlHighlightRules = function () {
|
||||||
|
var keywords = ("for|return|filter|search|sort|limit|let|collect|asc|desc|in|into|insert|update|remove|replace|upsert|options|with|and|or|not|distinct|graph|shortest_path|outbound|inbound|any|all|none|at least|aggregate|like|k_shortest_paths|k_paths|all_shortest_paths|prune|window");
|
||||||
|
var builtinConstants = ("true|false");
|
||||||
|
var builtinFunctions = ("to_bool|to_number|to_string|to_array|to_list|is_null|is_bool|is_number|is_string|is_array|is_list|is_object|is_document|is_datestring|" +
|
||||||
|
"typename|json_stringify|json_parse|concat|concat_separator|char_length|lower|upper|substring|left|right|trim|reverse|contains|" +
|
||||||
|
"log|log2|log10|exp|exp2|sin|cos|tan|asin|acos|atan|atan2|radians|degrees|pi|regex_test|regex_replace|" +
|
||||||
|
"like|floor|ceil|round|abs|rand|sqrt|pow|length|count|min|max|average|avg|sum|product|median|variance_population|variance_sample|variance|percentile|" +
|
||||||
|
"bit_and|bit_or|bit_xor|bit_negate|bit_test|bit_popcount|bit_shift_left|bit_shift_right|bit_construct|bit_deconstruct|bit_to_string|bit_from_string|" +
|
||||||
|
"first|last|unique|outersection|interleave|in_range|jaccard|matches|merge|merge_recursive|has|attributes|keys|values|unset|unset_recursive|keep|keep_recursive|" +
|
||||||
|
"near|within|within_rectangle|is_in_polygon|distance|fulltext|stddev_sample|stddev_population|stddev|" +
|
||||||
|
"slice|nth|position|contains_array|translate|zip|call|apply|push|append|pop|shift|unshift|remove_value|remove_values|" +
|
||||||
|
"remove_nth|replace_nth|date_now|date_timestamp|date_iso8601|date_dayofweek|date_year|date_month|date_day|date_hour|" +
|
||||||
|
"date_minute|date_second|date_millisecond|date_dayofyear|date_isoweek|date_isoweekyear|date_leapyear|date_quarter|date_days_in_month|date_trunc|date_round|" +
|
||||||
|
"date_add|date_subtract|date_diff|date_compare|date_format|date_utctolocal|date_localtoutc|date_timezone|date_timezones|" +
|
||||||
|
"fail|passthru|v8|sleep|schema_get|schema_validate|shard_id|call_greenspun|version|noopt|noeval|not_null|" +
|
||||||
|
"first_list|first_document|parse_identifier|current_user|current_database|collection_count|pregel_result|" +
|
||||||
|
"collections|document|decode_rev|range|union|union_distinct|minus|intersection|flatten|is_same_collection|check_document|" +
|
||||||
|
"ltrim|rtrim|find_first|find_last|split|substitute|ipv4_to_number|ipv4_from_number|is_ipv4|md5|sha1|sha512|crc32|fnv64|hash|random_token|to_base64|" +
|
||||||
|
"to_hex|encode_uri_component|soundex|assert|warn|is_key|sorted|sorted_unique|count_distinct|count_unique|" +
|
||||||
|
"levenshtein_distance|levenshtein_match|regex_matches|regex_split|ngram_match|ngram_similarity|ngram_positional_similarity|uuid|" +
|
||||||
|
"tokens|exists|starts_with|phrase|min_match|bm25|tfidf|boost|analyzer|" +
|
||||||
|
"cosine_similarity|decay_exp|decay_gauss|decay_linear|l1_distance|l2_distance|minhash|minhash_count|minhash_error|minhash_match|" +
|
||||||
|
"geo_point|geo_multipoint|geo_polygon|geo_multipolygon|geo_linestring|geo_multilinestring|geo_contains|geo_intersects|" +
|
||||||
|
"geo_equals|geo_distance|geo_area|geo_in_range");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"support.function": builtinFunctions,
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": builtinConstants
|
||||||
|
}, "identifier", true);
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
token: "comment",
|
||||||
|
regex: "//.*$"
|
||||||
|
}, {
|
||||||
|
token: "string", // " string
|
||||||
|
regex: '".*?"'
|
||||||
|
}, {
|
||||||
|
token: "string", // ' string
|
||||||
|
regex: "'.*?'"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[\\(]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\)]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(AqlHighlightRules, TextHighlightRules);
|
||||||
|
exports.AqlHighlightRules = AqlHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/aql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/aql_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var AqlHighlightRules = require("./aql_highlight_rules").AqlHighlightRules;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = AqlHighlightRules;
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.$id = "ace/mode/aql";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/aql"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,311 @@
|
||||||
|
define("ace/mode/asciidoc_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 AsciidocHighlightRules = function () {
|
||||||
|
var identifierRe = "[a-zA-Z\u00a1-\uffff]+\\b";
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{ token: "empty", regex: /$/ },
|
||||||
|
{ token: "literal", regex: /^\.{4,}\s*$/, next: "listingBlock" },
|
||||||
|
{ token: "literal", regex: /^-{4,}\s*$/, next: "literalBlock" },
|
||||||
|
{ token: "string", regex: /^\+{4,}\s*$/, next: "passthroughBlock" },
|
||||||
|
{ token: "keyword", regex: /^={4,}\s*$/ },
|
||||||
|
{ token: "text", regex: /^\s*$/ },
|
||||||
|
{ token: "empty", regex: "", next: "dissallowDelimitedBlock" }
|
||||||
|
],
|
||||||
|
"dissallowDelimitedBlock": [
|
||||||
|
{ include: "paragraphEnd" },
|
||||||
|
{ token: "comment", regex: '^//.+$' },
|
||||||
|
{ token: "keyword", regex: "^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):" },
|
||||||
|
{ include: "listStart" },
|
||||||
|
{ token: "literal", regex: /^\s+.+$/, next: "indentedBlock" },
|
||||||
|
{ token: "empty", regex: "", next: "text" }
|
||||||
|
],
|
||||||
|
"paragraphEnd": [
|
||||||
|
{ token: "doc.comment", regex: /^\/{4,}\s*$/, next: "commentBlock" },
|
||||||
|
{ token: "tableBlock", regex: /^\s*[|!]=+\s*$/, next: "tableBlock" },
|
||||||
|
{ token: "keyword", regex: /^(?:--|''')\s*$/, next: "start" },
|
||||||
|
{ token: "option", regex: /^\[.*\]\s*$/, next: "start" },
|
||||||
|
{ token: "pageBreak", regex: /^>{3,}$/, next: "start" },
|
||||||
|
{ token: "literal", regex: /^\.{4,}\s*$/, next: "listingBlock" },
|
||||||
|
{ token: "titleUnderline", regex: /^(?:={2,}|-{2,}|~{2,}|\^{2,}|\+{2,})\s*$/, next: "start" },
|
||||||
|
{ token: "singleLineTitle", regex: /^={1,5}\s+\S.*$/, next: "start" },
|
||||||
|
{ token: "otherBlock", regex: /^(?:\*{2,}|_{2,})\s*$/, next: "start" },
|
||||||
|
{ token: "optionalTitle", regex: /^\.[^.\s].+$/, next: "start" }
|
||||||
|
],
|
||||||
|
"listStart": [
|
||||||
|
{ token: "keyword", regex: /^\s*(?:\d+\.|[a-zA-Z]\.|[ixvmIXVM]+\)|\*{1,5}|-|\.{1,5})\s/, next: "listText" },
|
||||||
|
{ token: "meta.tag", regex: /^.+(?::{2,4}|;;)(?: |$)/, next: "listText" },
|
||||||
|
{ token: "support.function.list.callout", regex: /^(?:<\d+>|\d+>|>) /, next: "text" },
|
||||||
|
{ token: "keyword", regex: /^\+\s*$/, next: "start" }
|
||||||
|
],
|
||||||
|
"text": [
|
||||||
|
{ token: ["link", "variable.language"], regex: /((?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+)(\[.*?\])/ },
|
||||||
|
{ token: "link", regex: /(?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+/ },
|
||||||
|
{ token: "link", regex: /\b[\w\.\/\-]+@[\w\.\/\-]+\b/ },
|
||||||
|
{ include: "macros" },
|
||||||
|
{ include: "paragraphEnd" },
|
||||||
|
{ token: "literal", regex: /\+{3,}/, next: "smallPassthrough" },
|
||||||
|
{ token: "escape", regex: /\((?:C|TM|R)\)|\.{3}|->|<-|=>|<=|&#(?:\d+|x[a-fA-F\d]+);|(?: |^)--(?=\s+\S)/ },
|
||||||
|
{ token: "escape", regex: /\\[_*'`+#]|\\{2}[_*'`+#]{2}/ },
|
||||||
|
{ token: "keyword", regex: /\s\+$/ },
|
||||||
|
{ token: "text", regex: identifierRe },
|
||||||
|
{ token: ["keyword", "string", "keyword"],
|
||||||
|
regex: /(<<[\w\d\-$]+,)(.*?)(>>|$)/ },
|
||||||
|
{ token: "keyword", regex: /<<[\w\d\-$]+,?|>>/ },
|
||||||
|
{ token: "constant.character", regex: /\({2,3}.*?\){2,3}/ },
|
||||||
|
{ token: "keyword", regex: /\[\[.+?\]\]/ },
|
||||||
|
{ token: "support", regex: /^\[{3}[\w\d =\-]+\]{3}/ },
|
||||||
|
{ include: "quotes" },
|
||||||
|
{ token: "empty", regex: /^\s*$/, next: "start" }
|
||||||
|
],
|
||||||
|
"listText": [
|
||||||
|
{ include: "listStart" },
|
||||||
|
{ include: "text" }
|
||||||
|
],
|
||||||
|
"indentedBlock": [
|
||||||
|
{ token: "literal", regex: /^[\s\w].+$/, next: "indentedBlock" },
|
||||||
|
{ token: "literal", regex: "", next: "start" }
|
||||||
|
],
|
||||||
|
"listingBlock": [
|
||||||
|
{ token: "literal", regex: /^\.{4,}\s*$/, next: "dissallowDelimitedBlock" },
|
||||||
|
{ token: "constant.numeric", regex: '<\\d+>' },
|
||||||
|
{ token: "literal", regex: '[^<]+' },
|
||||||
|
{ token: "literal", regex: '<' }
|
||||||
|
],
|
||||||
|
"literalBlock": [
|
||||||
|
{ token: "literal", regex: /^-{4,}\s*$/, next: "dissallowDelimitedBlock" },
|
||||||
|
{ token: "constant.numeric", regex: '<\\d+>' },
|
||||||
|
{ token: "literal", regex: '[^<]+' },
|
||||||
|
{ token: "literal", regex: '<' }
|
||||||
|
],
|
||||||
|
"passthroughBlock": [
|
||||||
|
{ token: "literal", regex: /^\+{4,}\s*$/, next: "dissallowDelimitedBlock" },
|
||||||
|
{ token: "literal", regex: identifierRe + "|\\d+" },
|
||||||
|
{ include: "macros" },
|
||||||
|
{ token: "literal", regex: "." }
|
||||||
|
],
|
||||||
|
"smallPassthrough": [
|
||||||
|
{ token: "literal", regex: /[+]{3,}/, next: "dissallowDelimitedBlock" },
|
||||||
|
{ token: "literal", regex: /^\s*$/, next: "dissallowDelimitedBlock" },
|
||||||
|
{ token: "literal", regex: identifierRe + "|\\d+" },
|
||||||
|
{ include: "macros" }
|
||||||
|
],
|
||||||
|
"commentBlock": [
|
||||||
|
{ token: "doc.comment", regex: /^\/{4,}\s*$/, next: "dissallowDelimitedBlock" },
|
||||||
|
{ token: "doc.comment", regex: '^.*$' }
|
||||||
|
],
|
||||||
|
"tableBlock": [
|
||||||
|
{ token: "tableBlock", regex: /^\s*\|={3,}\s*$/, next: "dissallowDelimitedBlock" },
|
||||||
|
{ token: "tableBlock", regex: /^\s*!={3,}\s*$/, next: "innerTableBlock" },
|
||||||
|
{ token: "tableBlock", regex: /\|/ },
|
||||||
|
{ include: "text", noEscape: true }
|
||||||
|
],
|
||||||
|
"innerTableBlock": [
|
||||||
|
{ token: "tableBlock", regex: /^\s*!={3,}\s*$/, next: "tableBlock" },
|
||||||
|
{ token: "tableBlock", regex: /^\s*|={3,}\s*$/, next: "dissallowDelimitedBlock" },
|
||||||
|
{ token: "tableBlock", regex: /!/ }
|
||||||
|
],
|
||||||
|
"macros": [
|
||||||
|
{ token: "macro", regex: /{[\w\-$]+}/ },
|
||||||
|
{ token: ["text", "string", "text", "constant.character", "text"], regex: /({)([\w\-$]+)(:)?(.+)?(})/ },
|
||||||
|
{ token: ["text", "markup.list.macro", "keyword", "string"], regex: /(\w+)(footnote(?:ref)?::?)([^\s\[]+)?(\[.*?\])?/ },
|
||||||
|
{ token: ["markup.list.macro", "keyword", "string"], regex: /([a-zA-Z\-][\w\.\/\-]*::?)([^\s\[]+)(\[.*?\])?/ },
|
||||||
|
{ token: ["markup.list.macro", "keyword"], regex: /([a-zA-Z\-][\w\.\/\-]+::?)(\[.*?\])/ },
|
||||||
|
{ token: "keyword", regex: /^:.+?:(?= |$)/ }
|
||||||
|
],
|
||||||
|
"quotes": [
|
||||||
|
{ token: "string.italic", regex: /__[^_\s].*?__/ },
|
||||||
|
{ token: "string.italic", regex: quoteRule("_") },
|
||||||
|
{ token: "keyword.bold", regex: /\*\*[^*\s].*?\*\*/ },
|
||||||
|
{ token: "keyword.bold", regex: quoteRule("\\*") },
|
||||||
|
{ token: "literal", regex: quoteRule("\\+") },
|
||||||
|
{ token: "literal", regex: /\+\+[^+\s].*?\+\+/ },
|
||||||
|
{ token: "literal", regex: /\$\$.+?\$\$/ },
|
||||||
|
{ token: "literal", regex: quoteRule("`") },
|
||||||
|
{ token: "keyword", regex: quoteRule("^") },
|
||||||
|
{ token: "keyword", regex: quoteRule("~") },
|
||||||
|
{ token: "keyword", regex: /##?/ },
|
||||||
|
{ token: "keyword", regex: /(?:\B|^)``|\b''/ }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
function quoteRule(ch) {
|
||||||
|
var prefix = /\w/.test(ch) ? "\\b" : "(?:\\B|^)";
|
||||||
|
return prefix + ch + "[^" + ch + "].*?" + ch + "(?![\\w*])";
|
||||||
|
}
|
||||||
|
var tokenMap = {
|
||||||
|
macro: "constant.character",
|
||||||
|
tableBlock: "doc.comment",
|
||||||
|
titleUnderline: "markup.heading",
|
||||||
|
singleLineTitle: "markup.heading",
|
||||||
|
pageBreak: "string",
|
||||||
|
option: "string.regexp",
|
||||||
|
otherBlock: "markup.list",
|
||||||
|
literal: "support.function",
|
||||||
|
optionalTitle: "constant.numeric",
|
||||||
|
escape: "constant.language.escape",
|
||||||
|
link: "markup.underline.list"
|
||||||
|
};
|
||||||
|
for (var state in this.$rules) {
|
||||||
|
var stateRules = this.$rules[state];
|
||||||
|
for (var i = stateRules.length; i--;) {
|
||||||
|
var rule = stateRules[i];
|
||||||
|
if (rule.include || typeof rule == "string") {
|
||||||
|
var args = [i, 1].concat(this.$rules[rule.include || rule]);
|
||||||
|
if (rule.noEscape) {
|
||||||
|
args = args.filter(function (x) {
|
||||||
|
return !x.next;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
stateRules.splice.apply(stateRules, args);
|
||||||
|
}
|
||||||
|
else if (rule.token in tokenMap) {
|
||||||
|
rule.token = tokenMap[rule.token];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
oop.inherits(AsciidocHighlightRules, TextHighlightRules);
|
||||||
|
exports.AsciidocHighlightRules = AsciidocHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/asciidoc",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.foldingStartMarker = /^(?:\|={10,}|[\.\/=\-~^+]{4,}\s*$|={1,5} )/;
|
||||||
|
this.singleLineHeadingRe = /^={1,5}(?=\s+\S)/;
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
if (!this.foldingStartMarker.test(line))
|
||||||
|
return "";
|
||||||
|
if (line[0] == "=") {
|
||||||
|
if (this.singleLineHeadingRe.test(line))
|
||||||
|
return "start";
|
||||||
|
if (session.getLine(row - 1).length != session.getLine(row).length)
|
||||||
|
return "";
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
if (session.bgTokenizer.getState(row) == "dissallowDelimitedBlock")
|
||||||
|
return "end";
|
||||||
|
return "start";
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
if (!line.match(this.foldingStartMarker))
|
||||||
|
return;
|
||||||
|
var token;
|
||||||
|
function getTokenType(row) {
|
||||||
|
token = session.getTokens(row)[0];
|
||||||
|
return token && token.type;
|
||||||
|
}
|
||||||
|
var levels = ["=", "-", "~", "^", "+"];
|
||||||
|
var heading = "markup.heading";
|
||||||
|
var singleLineHeadingRe = this.singleLineHeadingRe;
|
||||||
|
function getLevel() {
|
||||||
|
var match = token.value.match(singleLineHeadingRe);
|
||||||
|
if (match)
|
||||||
|
return match[0].length;
|
||||||
|
var level = levels.indexOf(token.value[0]) + 1;
|
||||||
|
if (level == 1) {
|
||||||
|
if (session.getLine(row - 1).length != session.getLine(row).length)
|
||||||
|
return Infinity;
|
||||||
|
}
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
if (getTokenType(row) == heading) {
|
||||||
|
var startHeadingLevel = getLevel();
|
||||||
|
while (++row < maxRow) {
|
||||||
|
if (getTokenType(row) != heading)
|
||||||
|
continue;
|
||||||
|
var level = getLevel();
|
||||||
|
if (level <= startHeadingLevel)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var isSingleLineHeading = token && token.value.match(this.singleLineHeadingRe);
|
||||||
|
endRow = isSingleLineHeading ? row - 1 : row - 2;
|
||||||
|
if (endRow > startRow) {
|
||||||
|
while (endRow > startRow && (!getTokenType(endRow) || token.value[0] == "["))
|
||||||
|
endRow--;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var state = session.bgTokenizer.getState(row);
|
||||||
|
if (state == "dissallowDelimitedBlock") {
|
||||||
|
while (row-- > 0) {
|
||||||
|
if (session.bgTokenizer.getState(row).lastIndexOf("Block") == -1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
endRow = row + 1;
|
||||||
|
if (endRow < startRow) {
|
||||||
|
var endColumn = session.getLine(row).length;
|
||||||
|
return new Range(endRow, 5, startRow, startColumn - 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
while (++row < maxRow) {
|
||||||
|
if (session.bgTokenizer.getState(row) == "dissallowDelimitedBlock")
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
endRow = row;
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(row).length;
|
||||||
|
return new Range(startRow, 5, endRow, endColumn - 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/asciidoc",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/asciidoc_highlight_rules","ace/mode/folding/asciidoc"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var AsciidocHighlightRules = require("./asciidoc_highlight_rules").AsciidocHighlightRules;
|
||||||
|
var AsciidocFoldMode = require("./folding/asciidoc").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = AsciidocHighlightRules;
|
||||||
|
this.foldingRules = new AsciidocFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.type = "text";
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
if (state == "listblock") {
|
||||||
|
var match = /^((?:.+)?)([-+*][ ]+)/.exec(line);
|
||||||
|
if (match) {
|
||||||
|
return new Array(match[1].length + 1).join(" ") + match[2];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return this.$getIndent(line);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/asciidoc";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/asciidoc"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,357 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/asl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var ASLHighlightRules = function () {
|
||||||
|
var keywords = ("Default|DefinitionBlock|Device|Method|Else|ElseIf|For|Function|If|Include|Method|Return|" +
|
||||||
|
"Scope|Switch|Case|While|Break|BreakPoint|Continue|NoOp|Wait|True|False|" +
|
||||||
|
"AccessAs|Acquire|Alias|BankField|Buffer|Concatenate|ConcatenateResTemplate|" +
|
||||||
|
"CondRefOf|Connection|CopyObject|CreateBitField|CreateByteField|CreateDWordField|" +
|
||||||
|
"CreateField|CreateQWordField|CreateWordField|DataTableRegion|Debug|" +
|
||||||
|
"DMA|DWordIO|DWordMemory|DWordSpace|EisaId|EISAID|EndDependentFn|Event|ExtendedIO|" +
|
||||||
|
"ExtendedMemory|ExtendedSpace|External|Fatal|Field|FindSetLeftBit|FindSetRightBit|" +
|
||||||
|
"FixedDMA|FixedIO|Fprintf|FromBCD|GpioInt|GpioIo|I2CSerialBusV2|IndexField|" +
|
||||||
|
"Interrupt|IO|IRQ|IRQNoFlags|Load|LoadTable|Match|Memory32|Memory32Fixed|" +
|
||||||
|
"Mid|Mutex|Name|Notify|Offset|ObjectType|OperationRegion|Package|PowerResource|Printf|" +
|
||||||
|
"QWordIO|QWordMemory|QWordSpace|RawDataBuffer|Register|Release|Reset|ResourceTemplate|" +
|
||||||
|
"Signal|SizeOf|Sleep|SPISerialBusV2|Stall|StartDependentFn|StartDependentFnNoPri|" +
|
||||||
|
"Store|ThermalZone|Timer|ToBCD|ToBuffer|ToDecimalString|ToInteger|ToPLD|ToString|" +
|
||||||
|
"ToUUID|UARTSerialBusV2|Unicode|Unload|VendorLong|VendorShort|WordBusNumber|WordIO|" +
|
||||||
|
"WordSpace");
|
||||||
|
var keywordOperators = ("Add|And|Decrement|Divide|Increment|Index|LAnd|LEqual|LGreater|LGreaterEqual|" +
|
||||||
|
"LLess|LLessEqual|LNot|LNotEqual|LOr|Mod|Multiply|NAnd|NOr|Not|Or|RefOf|Revision|" +
|
||||||
|
"ShiftLeft|ShiftRight|Subtract|XOr|DerefOf");
|
||||||
|
var flags = ("AttribQuick|AttribSendReceive|AttribByte|AttribBytes|AttribRawBytes|" +
|
||||||
|
"AttribRawProcessBytes|AttribWord|AttribBlock|AttribProcessCall|AttribBlockProcessCall|" +
|
||||||
|
"AnyAcc|ByteAcc|WordAcc|DWordAcc|QWordAcc|BufferAcc|" +
|
||||||
|
"AddressRangeMemory|AddressRangeReserved|AddressRangeNVS|AddressRangeACPI|" +
|
||||||
|
"RegionSpaceKeyword|FFixedHW|PCC|" +
|
||||||
|
"AddressingMode7Bit|AddressingMode10Bit|" +
|
||||||
|
"DataBitsFive|DataBitsSix|DataBitsSeven|DataBitsEight|DataBitsNine|" +
|
||||||
|
"BusMaster|NotBusMaster|" +
|
||||||
|
"ClockPhaseFirst|ClockPhaseSecond|ClockPolarityLow|ClockPolarityHigh|" +
|
||||||
|
"SubDecode|PosDecode|" +
|
||||||
|
"BigEndianing|LittleEndian|" +
|
||||||
|
"FlowControlNone|FlowControlXon|FlowControlHardware|" +
|
||||||
|
"Edge|Level|ActiveHigh|ActiveLow|ActiveBoth|Decode16|Decode10|" +
|
||||||
|
"IoRestrictionNone|IoRestrictionInputOnly|IoRestrictionOutputOnly|" +
|
||||||
|
"IoRestrictionNoneAndPreserve|Lock|NoLock|MTR|MEQ|MLE|MLT|MGE|MGT|" +
|
||||||
|
"MaxFixed|MaxNotFixed|Cacheable|WriteCombining|Prefetchable|NonCacheable|" +
|
||||||
|
"MinFixed|MinNotFixed|" +
|
||||||
|
"ParityTypeNone|ParityTypeSpace|ParityTypeMark|ParityTypeOdd|ParityTypeEven|" +
|
||||||
|
"PullDefault|PullUp|PullDown|PullNone|PolarityHigh|PolarityLow|" +
|
||||||
|
"ISAOnlyRanges|NonISAOnlyRanges|EntireRange|ReadWrite|ReadOnly|" +
|
||||||
|
"UserDefRegionSpace|SystemIO|SystemMemory|PCI_Config|EmbeddedControl|" +
|
||||||
|
"SMBus|SystemCMOS|PciBarTarget|IPMI|GeneralPurposeIO|GenericSerialBus|" +
|
||||||
|
"ResourceConsumer|ResourceProducer|Serialized|NotSerialized|" +
|
||||||
|
"Shared|Exclusive|SharedAndWake|ExclusiveAndWake|ControllerInitiated|DeviceInitiated|" +
|
||||||
|
"StopBitsZero|StopBitsOne|StopBitsOnePlusHalf|StopBitsTwo|" +
|
||||||
|
"Width8Bit|Width16Bit|Width32Bit|Width64Bit|Width128Bit|Width256Bit|" +
|
||||||
|
"SparseTranslation|DenseTranslation|TypeTranslation|TypeStatic|" +
|
||||||
|
"Preserve|WriteAsOnes|WriteAsZeros|Transfer8|Transfer16|Transfer8_16|" +
|
||||||
|
"ThreeWireMode|FourWireMode");
|
||||||
|
var storageTypes = ("UnknownObj|IntObj|StrObj|BuffObj|PkgObj|FieldUnitObj|DeviceObj|" +
|
||||||
|
"EventObj|MethodObj|MutexObj|OpRegionObj|PowerResObj|ProcessorObj|" +
|
||||||
|
"ThermalZoneObj|BuffFieldObj|DDBHandleObj");
|
||||||
|
var builtinConstants = ("__FILE__|__PATH__|__LINE__|__DATE__|__IASL__");
|
||||||
|
var strNumbers = ("One|Ones|Zero");
|
||||||
|
var deprecated = ("Memory24|Processor");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.numeric": strNumbers,
|
||||||
|
"keyword.operator": keywordOperators,
|
||||||
|
"constant.language": builtinConstants,
|
||||||
|
"storage.type": storageTypes,
|
||||||
|
"constant.library": flags,
|
||||||
|
"invalid.deprecated": deprecated
|
||||||
|
}, "identifier");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\/\\/.*$"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // ignored fields / comments
|
||||||
|
regex: "\\\[",
|
||||||
|
next: "ignoredfield"
|
||||||
|
}, {
|
||||||
|
token: "variable",
|
||||||
|
regex: "\\Local[0-7]|\\Arg[0-6]"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // pre-compiler directives
|
||||||
|
regex: "#\\s*(?:define|elif|else|endif|error|if|ifdef|ifndef|include|includebuffer|line|pragma|undef|warning)\\b",
|
||||||
|
next: "directive"
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
|
||||||
|
}, {
|
||||||
|
token: "constant.character", // single line
|
||||||
|
regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: /0[xX][0-9a-fA-F]+\b/
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: /[0-9]+\b/
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /[!\~\*\/%+-<>\^|=&]/
|
||||||
|
}, {
|
||||||
|
token: "lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"ignoredfield": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing ignored fields / comments
|
||||||
|
regex: "\\\]",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directive": [
|
||||||
|
{
|
||||||
|
token: "constant.other.multiline",
|
||||||
|
regex: /\\/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other.multiline",
|
||||||
|
regex: /.*\\/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other",
|
||||||
|
regex: "\\s*<.+?>*s",
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other", // single line
|
||||||
|
regex: '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]*s',
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other", // single line
|
||||||
|
regex: "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']",
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other",
|
||||||
|
regex: /[^\\\/]+/,
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
};
|
||||||
|
oop.inherits(ASLHighlightRules, TextHighlightRules);
|
||||||
|
exports.ASLHighlightRules = ASLHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/asl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/asl_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var ASLHighlightRules = require("./asl_highlight_rules").ASLHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = ASLHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/asl";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/asl"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,185 @@
|
||||||
|
define("ace/mode/assembly_arm32_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 AssemblyARM32HighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
start: [
|
||||||
|
{
|
||||||
|
token: 'keyword.control.assembly',
|
||||||
|
regex: '\\b(?:cpsid|cpsie|cps|setend|(?:srs|rfe)(?:ia|ib|da|db|fd|ed|fa|ea)|bkpt|nop|pld|cdp2|mrc2|mrrc2|mcr2|mcrr2|ldc2|stc2|(?:add|adc|sub|sbc|rsb|rsc|mul|mla|umull|umlal|smull|smlal|mvn|and|eor|orr|bic)(?:eq|ne|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al)?s?|(?:(?:q|qd)?(?:add|sub)|umaal|smul(?:b|t)(?:b|t)|smulw(?:b|t)|smla(?:b|t)(?:b|t)|smlaw(?:b|t)|smlal(?:b|t)(?:b|t)|smuadx?|smladx?|smlaldx?|smusdx?|smlsdx?|smlsldx?|smmulr?|smmlar?|smmlsr?|mia|miaph|mia(?:b|t)(?:b|t)|clz|(?:s|q|sh|u|uq|uh)(?:add16|sub16|add8|sub8|addsubx|subaddx)|usad8|usada8|mrs|msr|mra|mar|cpy|tst|teq|cmp|cmn|ssat|ssat16|usat|usat16|pkhbt|pkhtb|sxth|sxtb16|sxtb|uxth|uxtb16|uxtb|sxtah|sxtab16|sxtab|uxtah|uxtab16|uxtab|rev|rev16|revsh|sel|b|bl|bx|blx|bxj|swi|svc|ldrex|strex|cdp|mrc|mrrc|mcr|mcrr|ldc|stc)(?:eq|ne|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al)?|ldr(?:eq|ne|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al)?(?:t|b|bt|sb|h|sh|d)?|str(?:eq|ne|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al)?(?:t|b|bt|h|d)?|(?:ldm|stm)(?:eq|ne|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al)?(?:ia|ib|da|db|fd|ed|fa|ea)|swp(?:eq|ne|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al)?b?|mov(?:t|w)?)\\b',
|
||||||
|
caseInsensitive: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'variable.parameter.register.assembly',
|
||||||
|
regex: '\\b(?:r0|r1|r2|r3|r4|r5|r6|r7|r8|r9|r10|r11|r12|r13|r14|r15|fp|ip|sp|lr|pc|cpsr|spsr|c|f|s|x|lsl|lsr|asr|ror|rrx)\\b',
|
||||||
|
caseInsensitive: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'constant.character.hexadecimal.assembly',
|
||||||
|
regex: '#0x[A-F0-9]+',
|
||||||
|
caseInsensitive: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'constant.character.decimal.assembly',
|
||||||
|
regex: '#[0-9]+'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'string.assembly',
|
||||||
|
regex: /'([^\\']|\\.)*'/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'string.assembly',
|
||||||
|
regex: /"([^\\"]|\\.)*"/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'support.function.directive.assembly',
|
||||||
|
regex: '(?:\.section|\.global|\.text|\.asciz|\.asciiz|\.ascii|\.align|\.byte|\.end|\.data|\.equ|\.extern|\.include)'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'entity.name.function.assembly',
|
||||||
|
regex: '^\\s*%%[\\w.]+?:$'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'entity.name.function.assembly',
|
||||||
|
regex: '^\\s*%\\$[\\w.]+?:$'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'entity.name.function.assembly',
|
||||||
|
regex: '^[\\w.]+?:'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'entity.name.function.assembly',
|
||||||
|
regex: '^[\\w.]+?\\b'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'comment.assembly',
|
||||||
|
regex: '\\/\\*', next: 'comment'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: 'comment.assembly',
|
||||||
|
regex: '(?:;|//|@).*$'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
comment: [
|
||||||
|
{
|
||||||
|
token: 'comment.assembly',
|
||||||
|
regex: '\\*\\/', next: 'start'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
defaultToken: 'comment'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
AssemblyARM32HighlightRules.metaData = { fileTypes: ['s'],
|
||||||
|
name: 'Assembly ARM32',
|
||||||
|
scopeName: 'source.assembly' };
|
||||||
|
oop.inherits(AssemblyARM32HighlightRules, TextHighlightRules);
|
||||||
|
exports.AssemblyARM32HighlightRules = AssemblyARM32HighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.commentBlock = function (session, row) {
|
||||||
|
var re = /\S/;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startLevel = line.search(re);
|
||||||
|
if (startLevel == -1 || line[startLevel] != "#")
|
||||||
|
return;
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
var level = line.search(re);
|
||||||
|
if (level == -1)
|
||||||
|
continue;
|
||||||
|
if (line[level] != "#")
|
||||||
|
break;
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var range = this.indentationBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
range = this.commentBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var indent = line.search(/\S/);
|
||||||
|
var next = session.getLine(row + 1);
|
||||||
|
var prev = session.getLine(row - 1);
|
||||||
|
var prevIndent = prev.search(/\S/);
|
||||||
|
var nextIndent = next.search(/\S/);
|
||||||
|
if (indent == -1) {
|
||||||
|
session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? "start" : "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (prevIndent == -1) {
|
||||||
|
if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
|
||||||
|
if (session.getLine(row - 2).search(/\S/) == -1) {
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prevIndent != -1 && prevIndent < indent)
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
else
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
if (indent < nextIndent)
|
||||||
|
return "start";
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/assembly_arm32",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/assembly_arm32_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var AssemblyARM32HighlightRules = require("./assembly_arm32_highlight_rules").AssemblyARM32HighlightRules;
|
||||||
|
var FoldMode = require("./folding/coffee").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = AssemblyARM32HighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = [";"];
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.$id = "ace/mode/assembly_arm32";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/assembly_arm32"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,170 @@
|
||||||
|
define("ace/mode/assembly_x86_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from Assembly x86.tmLanguage (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var AssemblyX86HighlightRules = function () {
|
||||||
|
this.$rules = { start: [{ token: 'keyword.control.assembly',
|
||||||
|
regex: '\\b(?:aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vtestps|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(?:n?e|n?z)?|call|j(?:mp|n?e|ge?|ae?|le?|be?|n?o|n?z))\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'variable.parameter.register.assembly',
|
||||||
|
regex: '\\b(?:CS|DS|ES|FS|GS|SS|RAX|EAX|RBX|EBX|RCX|ECX|RDX|EDX|RCX|RIP|EIP|IP|RSP|ESP|SP|RSI|ESI|SI|RDI|EDI|DI|RFLAGS|EFLAGS|FLAGS|R8-15|(?:Y|X)MM(?:[0-9]|10|11|12|13|14|15)|(?:A|B|C|D)(?:X|H|L)|CR(?:[0-4]|DR(?:[0-7]|TR6|TR7|EFER)))\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'constant.character.decimal.assembly',
|
||||||
|
regex: '\\b[0-9]+\\b' },
|
||||||
|
{ token: 'constant.character.hexadecimal.assembly',
|
||||||
|
regex: '\\b0x[A-F0-9]+\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'constant.character.hexadecimal.assembly',
|
||||||
|
regex: '\\b[A-F0-9]+h\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'string.assembly', regex: /'([^\\']|\\.)*'/ },
|
||||||
|
{ token: 'string.assembly', regex: /"([^\\"]|\\.)*"/ },
|
||||||
|
{ token: 'support.function.directive.assembly',
|
||||||
|
regex: '^\\[',
|
||||||
|
push: [{ token: 'support.function.directive.assembly',
|
||||||
|
regex: '\\]$',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'support.function.directive.assembly' }] },
|
||||||
|
{ token: ['support.function.directive.assembly',
|
||||||
|
'support.function.directive.assembly',
|
||||||
|
'entity.name.function.assembly'],
|
||||||
|
regex: '(^struc)( )([_a-zA-Z][_a-zA-Z0-9]*)' },
|
||||||
|
{ token: 'support.function.directive.assembly',
|
||||||
|
regex: '^endstruc\\b' },
|
||||||
|
{ token: ['support.function.directive.assembly',
|
||||||
|
'entity.name.function.assembly',
|
||||||
|
'support.function.directive.assembly',
|
||||||
|
'constant.character.assembly'],
|
||||||
|
regex: '^(%macro )([_a-zA-Z][_a-zA-Z0-9]*)( )([0-9]+)' },
|
||||||
|
{ token: 'support.function.directive.assembly',
|
||||||
|
regex: '^%endmacro' },
|
||||||
|
{ token: ['text',
|
||||||
|
'support.function.directive.assembly',
|
||||||
|
'text',
|
||||||
|
'entity.name.function.assembly'],
|
||||||
|
regex: '(\\s*)(%define|%xdefine|%idefine|%undef|%assign|%defstr|%strcat|%strlen|%substr|%00|%0|%rotate|%rep|%endrep|%include|\\$\\$|\\$|%unmacro|%if|%elif|%else|%endif|%(?:el)?ifdef|%(?:el)?ifmacro|%(?:el)?ifctx|%(?:el)?ifidn|%(?:el)?ifidni|%(?:el)?ifid|%(?:el)?ifnum|%(?:el)?ifstr|%(?:el)?iftoken|%(?:el)?ifempty|%(?:el)?ifenv|%pathsearch|%depend|%use|%push|%pop|%repl|%arg|%stacksize|%local|%error|%warning|%fatal|%line|%!|%comment|%endcomment|__NASM_VERSION_ID__|__NASM_VER__|__FILE__|__LINE__|__BITS__|__OUTPUT_FORMAT__|__DATE__|__TIME__|__DATE_NUM__|_TIME__NUM__|__UTC_DATE__|__UTC_TIME__|__UTC_DATE_NUM__|__UTC_TIME_NUM__|__POSIX_TIME__|__PASS__|ISTRUC|AT|IEND|BITS 16|BITS 32|BITS 64|USE16|USE32|__SECT__|ABSOLUTE|EXTERN|GLOBAL|COMMON|CPU|FLOAT)\\b( ?)((?:[_a-zA-Z][_a-zA-Z0-9]*)?)',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'support.function.directive.assembly',
|
||||||
|
regex: '\\b(?:d[bwdqtoy]|res[bwdqto]|equ|times|align|alignb|sectalign|section|ptr|byte|word|dword|qword|incbin)\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'entity.name.function.assembly', regex: '^\\s*%%[\\w.]+?:$' },
|
||||||
|
{ token: 'entity.name.function.assembly', regex: '^\\s*%\\$[\\w.]+?:$' },
|
||||||
|
{ token: 'entity.name.function.assembly', regex: '^[\\w.]+?:' },
|
||||||
|
{ token: 'entity.name.function.assembly', regex: '^[\\w.]+?\\b' },
|
||||||
|
{ token: 'comment.assembly', regex: ';.*$' }]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
AssemblyX86HighlightRules.metaData = { fileTypes: ['asm'],
|
||||||
|
name: 'Assembly x86',
|
||||||
|
scopeName: 'source.assembly' };
|
||||||
|
oop.inherits(AssemblyX86HighlightRules, TextHighlightRules);
|
||||||
|
exports.AssemblyX86HighlightRules = AssemblyX86HighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.commentBlock = function (session, row) {
|
||||||
|
var re = /\S/;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startLevel = line.search(re);
|
||||||
|
if (startLevel == -1 || line[startLevel] != "#")
|
||||||
|
return;
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
var level = line.search(re);
|
||||||
|
if (level == -1)
|
||||||
|
continue;
|
||||||
|
if (line[level] != "#")
|
||||||
|
break;
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var range = this.indentationBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
range = this.commentBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var indent = line.search(/\S/);
|
||||||
|
var next = session.getLine(row + 1);
|
||||||
|
var prev = session.getLine(row - 1);
|
||||||
|
var prevIndent = prev.search(/\S/);
|
||||||
|
var nextIndent = next.search(/\S/);
|
||||||
|
if (indent == -1) {
|
||||||
|
session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? "start" : "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (prevIndent == -1) {
|
||||||
|
if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
|
||||||
|
if (session.getLine(row - 2).search(/\S/) == -1) {
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prevIndent != -1 && prevIndent < indent)
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
else
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
if (indent < nextIndent)
|
||||||
|
return "start";
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/assembly_x86",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/assembly_x86_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var AssemblyX86HighlightRules = require("./assembly_x86_highlight_rules").AssemblyX86HighlightRules;
|
||||||
|
var FoldMode = require("./folding/coffee").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = AssemblyX86HighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = [";"];
|
||||||
|
this.$id = "ace/mode/assembly_x86";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/assembly_x86"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,199 @@
|
||||||
|
define("ace/mode/batchfile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from C:\Users\LED\AppData\Roaming\Sublime Text 2\Packages\Batch File\Batch File.tmLanguage (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var BatchFileHighlightRules = function () {
|
||||||
|
this.$rules = { start: [{ token: 'keyword.command.dosbatch',
|
||||||
|
regex: '\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.control.statement.dosbatch',
|
||||||
|
regex: '\\b(?:goto|call|exit)\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.control.conditional.if.dosbatch',
|
||||||
|
regex: '\\bif\\s+not\\s+(?:exist|defined|errorlevel|cmdextversion)\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.control.conditional.dosbatch',
|
||||||
|
regex: '\\b(?:if|else)\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.control.repeat.dosbatch',
|
||||||
|
regex: '\\bfor\\b',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.operator.dosbatch',
|
||||||
|
regex: '\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\b' },
|
||||||
|
{ token: ['doc.comment', 'comment'],
|
||||||
|
regex: '(?:^|\\b)(rem)($|\\s.*$)',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'comment.line.colons.dosbatch',
|
||||||
|
regex: '::.*$' },
|
||||||
|
{ include: 'variable' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.shell',
|
||||||
|
regex: '"',
|
||||||
|
push: [
|
||||||
|
{ token: 'punctuation.definition.string.end.shell', regex: '"', next: 'pop' },
|
||||||
|
{ include: 'variable' },
|
||||||
|
{ defaultToken: 'string.quoted.double.dosbatch' }
|
||||||
|
] },
|
||||||
|
{ token: 'keyword.operator.pipe.dosbatch', regex: '[|]' },
|
||||||
|
{ token: 'keyword.operator.redirect.shell',
|
||||||
|
regex: '&>|\\d*>&\\d*|\\d*(?:>>|>|<)|\\d*<&|\\d*<>' }],
|
||||||
|
variable: [
|
||||||
|
{ token: 'constant.numeric', regex: '%%\\w+|%[*\\d]|%\\w+%' },
|
||||||
|
{ token: 'constant.numeric', regex: '%~\\d+' },
|
||||||
|
{ token: ['markup.list', 'constant.other', 'markup.list'],
|
||||||
|
regex: '(%)(\\w+)(%?)' }
|
||||||
|
] };
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
BatchFileHighlightRules.metaData = { name: 'Batch File',
|
||||||
|
scopeName: 'source.dosbatch',
|
||||||
|
fileTypes: ['bat'] };
|
||||||
|
oop.inherits(BatchFileHighlightRules, TextHighlightRules);
|
||||||
|
exports.BatchFileHighlightRules = BatchFileHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/batchfile",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/batchfile_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var BatchFileHighlightRules = require("./batchfile_highlight_rules").BatchFileHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = BatchFileHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "::";
|
||||||
|
this.blockComment = "";
|
||||||
|
this.$id = "ace/mode/batchfile";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/batchfile"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,318 @@
|
||||||
|
define("ace/mode/bibtex_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 BibTeXHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
start: [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: /@Comment\{/,
|
||||||
|
stateName: "bibtexComment",
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: /}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: /\{/,
|
||||||
|
push: "bibtexComment"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: [
|
||||||
|
"keyword", "text", "paren.lparen", "text", "variable", "text", "keyword.operator"
|
||||||
|
],
|
||||||
|
regex: /(@String)(\s*)(\{)(\s*)([a-zA-Z]*)(\s*)(=)/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /\}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "#misc"
|
||||||
|
}, {
|
||||||
|
defaultToken: "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: [
|
||||||
|
"keyword", "text", "paren.lparen", "text", "variable", "text", "keyword.operator"
|
||||||
|
],
|
||||||
|
regex: /(@String)(\s*)(\()(\s*)([a-zA-Z]*)(\s*)(=)/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /\)/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "#misc"
|
||||||
|
}, {
|
||||||
|
defaultToken: "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: [
|
||||||
|
"keyword", "text", "paren.lparen"
|
||||||
|
],
|
||||||
|
regex: /(@preamble)(\s*)(\()/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /\)/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "#misc"
|
||||||
|
}, {
|
||||||
|
defaultToken: "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: [
|
||||||
|
"keyword", "text", "paren.lparen"
|
||||||
|
],
|
||||||
|
regex: /(@preamble)(\s*)(\{)/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /\}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "#misc"
|
||||||
|
}, {
|
||||||
|
defaultToken: "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: [
|
||||||
|
"keyword", "text", "paren.lparen", "text", "support.class"
|
||||||
|
],
|
||||||
|
regex: /(@[a-zA-Z]+)(\s*)(\{)(\s*)([\w-]+)/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /\}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: [
|
||||||
|
"variable", "text", "keyword.operator"
|
||||||
|
],
|
||||||
|
regex: /([a-zA-Z0-9\!\$\&\*\+\-\.\/\:\;\<\>\?\[\]\^\_\`\|]+)(\s*)(=)/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "text",
|
||||||
|
regex: /(?=[,}])/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "#misc"
|
||||||
|
}, {
|
||||||
|
include: "#integer"
|
||||||
|
}, {
|
||||||
|
defaultToken: "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "punctuation",
|
||||||
|
regex: /,/
|
||||||
|
}, {
|
||||||
|
defaultToken: "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"#integer": [
|
||||||
|
{
|
||||||
|
token: "constant.numeric.bibtex",
|
||||||
|
regex: /\d+/
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"#misc": [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: /"/,
|
||||||
|
push: "#string_quotes"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /\{/,
|
||||||
|
push: "#string_braces"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /#/
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"#string_braces": [
|
||||||
|
{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /\}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "invalid.illegal",
|
||||||
|
regex: /@/
|
||||||
|
}, {
|
||||||
|
include: "#misc"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"#string_quotes": [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: /"/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "#misc"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(BibTeXHighlightRules, TextHighlightRules);
|
||||||
|
exports.BibTeXHighlightRules = BibTeXHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/bibtex",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/bibtex_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var BibTeXHighlightRules = require("./bibtex_highlight_rules").BibTeXHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = BibTeXHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/bibtex";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/bibtex"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,250 @@
|
||||||
|
define("ace/mode/c9search_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var lang = require("../lib/lang");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
function safeCreateRegexp(source, flag) {
|
||||||
|
try {
|
||||||
|
return new RegExp(source, flag);
|
||||||
|
}
|
||||||
|
catch (e) { }
|
||||||
|
}
|
||||||
|
var C9SearchHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
tokenNames: ["c9searchresults.constant.numeric", "c9searchresults.text", "c9searchresults.text", "c9searchresults.keyword"],
|
||||||
|
regex: /(^\s+[0-9]+)(:)(\d*\s?)([^\r\n]+)/,
|
||||||
|
onMatch: function (val, state, stack) {
|
||||||
|
var values = this.splitRegex.exec(val);
|
||||||
|
var types = this.tokenNames;
|
||||||
|
var tokens = [{
|
||||||
|
type: types[0],
|
||||||
|
value: values[1]
|
||||||
|
}, {
|
||||||
|
type: types[1],
|
||||||
|
value: values[2]
|
||||||
|
}];
|
||||||
|
if (values[3]) {
|
||||||
|
if (values[3] == " ")
|
||||||
|
tokens[1] = { type: types[1], value: values[2] + " " };
|
||||||
|
else
|
||||||
|
tokens.push({ type: types[1], value: values[3] });
|
||||||
|
}
|
||||||
|
var regex = stack[1];
|
||||||
|
var str = values[4];
|
||||||
|
var m;
|
||||||
|
var last = 0;
|
||||||
|
if (regex && regex.exec) {
|
||||||
|
regex.lastIndex = 0;
|
||||||
|
while (m = regex.exec(str)) {
|
||||||
|
var skipped = str.substring(last, m.index);
|
||||||
|
last = regex.lastIndex;
|
||||||
|
if (skipped)
|
||||||
|
tokens.push({ type: types[2], value: skipped });
|
||||||
|
if (m[0])
|
||||||
|
tokens.push({ type: types[3], value: m[0] });
|
||||||
|
else if (!skipped)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (last < str.length)
|
||||||
|
tokens.push({ type: types[2], value: str.substr(last) });
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "^Searching for [^\\r\\n]*$",
|
||||||
|
onMatch: function (val, state, stack) {
|
||||||
|
var parts = val.split("\x01");
|
||||||
|
if (parts.length < 3)
|
||||||
|
return "text";
|
||||||
|
var options, search;
|
||||||
|
var i = 0;
|
||||||
|
var tokens = [{
|
||||||
|
value: parts[i++] + "'",
|
||||||
|
type: "text"
|
||||||
|
}, {
|
||||||
|
value: search = parts[i++],
|
||||||
|
type: "text" // "c9searchresults.keyword"
|
||||||
|
}, {
|
||||||
|
value: "'" + parts[i++],
|
||||||
|
type: "text"
|
||||||
|
}];
|
||||||
|
if (parts[2] !== " in") {
|
||||||
|
tokens.push({
|
||||||
|
value: "'" + parts[i++] + "'",
|
||||||
|
type: "text"
|
||||||
|
}, {
|
||||||
|
value: parts[i++],
|
||||||
|
type: "text"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
tokens.push({
|
||||||
|
value: " " + parts[i++] + " ",
|
||||||
|
type: "text"
|
||||||
|
});
|
||||||
|
if (parts[i + 1]) {
|
||||||
|
options = parts[i + 1];
|
||||||
|
tokens.push({
|
||||||
|
value: "(" + parts[i + 1] + ")",
|
||||||
|
type: "text"
|
||||||
|
});
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
i -= 1;
|
||||||
|
}
|
||||||
|
while (i++ < parts.length) {
|
||||||
|
parts[i] && tokens.push({
|
||||||
|
value: parts[i],
|
||||||
|
type: "text"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (search) {
|
||||||
|
if (!/regex/.test(options))
|
||||||
|
search = lang.escapeRegExp(search);
|
||||||
|
if (/whole/.test(options))
|
||||||
|
search = "\\b" + search + "\\b";
|
||||||
|
}
|
||||||
|
var regex = search && safeCreateRegexp("(" + search + ")", / sensitive/.test(options) ? "g" : "ig");
|
||||||
|
if (regex) {
|
||||||
|
stack[0] = state;
|
||||||
|
stack[1] = regex;
|
||||||
|
}
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "^(?=Found \\d+ matches)",
|
||||||
|
token: "text",
|
||||||
|
next: "numbers"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string", // single line
|
||||||
|
regex: "^\\S:?[^:]+",
|
||||||
|
next: "numbers"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
numbers: [{
|
||||||
|
regex: "\\d+",
|
||||||
|
token: "constant.numeric"
|
||||||
|
}, {
|
||||||
|
regex: "$",
|
||||||
|
token: "text",
|
||||||
|
next: "start"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(C9SearchHighlightRules, TextHighlightRules);
|
||||||
|
exports.C9SearchHighlightRules = C9SearchHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/c9search",["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 () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.foldingStartMarker = /^(\S.*:|Searching for.*)$/;
|
||||||
|
this.foldingStopMarker = /^(\s+|Found.*)$/;
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var lines = session.doc.getAllLines(row);
|
||||||
|
var line = lines[row];
|
||||||
|
var level1 = /^(Found.*|Searching for.*)$/;
|
||||||
|
var level2 = /^(\S.*:|\s*)$/;
|
||||||
|
var re = level1.test(line) ? level1 : level2;
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
if (this.foldingStartMarker.test(line)) {
|
||||||
|
for (var i = row + 1, l = session.getLength(); i < l; i++) {
|
||||||
|
if (re.test(lines[i]))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
endRow = i;
|
||||||
|
}
|
||||||
|
else if (this.foldingStopMarker.test(line)) {
|
||||||
|
for (var i = row - 1; i >= 0; i--) {
|
||||||
|
line = lines[i];
|
||||||
|
if (re.test(line))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
startRow = i;
|
||||||
|
}
|
||||||
|
if (startRow != endRow) {
|
||||||
|
var col = line.length;
|
||||||
|
if (re === level1)
|
||||||
|
col = line.search(/\(Found[^)]+\)$|$/);
|
||||||
|
return new Range(startRow, col, endRow, 0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/c9search",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c9search_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/c9search"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var C9SearchHighlightRules = require("./c9search_highlight_rules").C9SearchHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var C9StyleFoldMode = require("./folding/c9search").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = C9SearchHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.foldingRules = new C9StyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/c9search";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/c9search"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,417 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var cFunctions = exports.cFunctions = "hypot|hypotf|hypotl|sscanf|system|snprintf|scanf|scalbn|scalbnf|scalbnl|scalbln|scalblnf|scalblnl|sin|sinh|sinhf|sinhl|sinf|sinl|signal|signbit|strstr|strspn|strncpy|strncat|strncmp|strcspn|strchr|strcoll|strcpy|strcat|strcmp|strtoimax|strtod|strtoul|strtoull|strtoumax|strtok|strtof|strtol|strtold|strtoll|strerror|strpbrk|strftime|strlen|strrchr|strxfrm|sprintf|setjmp|setvbuf|setlocale|setbuf|sqrt|sqrtf|sqrtl|swscanf|swprintf|srand|nearbyint|nearbyintf|nearbyintl|nexttoward|nexttowardf|nexttowardl|nextafter|nextafterf|nextafterl|nan|nanf|nanl|csin|csinh|csinhf|csinhl|csinf|csinl|csqrt|csqrtf|csqrtl|ccos|ccosh|ccoshf|ccosf|ccosl|cimag|cimagf|cimagl|ctime|ctan|ctanh|ctanhf|ctanhl|ctanf|ctanl|cos|cosh|coshf|coshl|cosf|cosl|conj|conjf|conjl|copysign|copysignf|copysignl|cpow|cpowf|cpowl|cproj|cprojf|cprojl|ceil|ceilf|ceill|cexp|cexpf|cexpl|clock|clog|clogf|clogl|clearerr|casin|casinh|casinhf|casinhl|casinf|casinl|cacos|cacosh|cacoshf|cacoshl|cacosf|cacosl|catan|catanh|catanhf|catanhl|catanf|catanl|calloc|carg|cargf|cargl|cabs|cabsf|cabsl|creal|crealf|creall|cbrt|cbrtf|cbrtl|time|toupper|tolower|tan|tanh|tanhf|tanhl|tanf|tanl|trunc|truncf|truncl|tgamma|tgammaf|tgammal|tmpnam|tmpfile|isspace|isnormal|isnan|iscntrl|isinf|isdigit|isunordered|isupper|ispunct|isprint|isfinite|iswspace|iswcntrl|iswctype|iswdigit|iswupper|iswpunct|iswprint|iswlower|iswalnum|iswalpha|iswgraph|iswxdigit|iswblank|islower|isless|islessequal|islessgreater|isalnum|isalpha|isgreater|isgreaterequal|isgraph|isxdigit|isblank|ilogb|ilogbf|ilogbl|imaxdiv|imaxabs|div|difftime|_Exit|ungetc|ungetwc|pow|powf|powl|puts|putc|putchar|putwc|putwchar|perror|printf|erf|erfc|erfcf|erfcl|erff|erfl|exit|exp|exp2|exp2f|exp2l|expf|expl|expm1|expm1f|expm1l|vsscanf|vsnprintf|vscanf|vsprintf|vswscanf|vswprintf|vprintf|vfscanf|vfprintf|vfwscanf|vfwprintf|vwscanf|vwprintf|va_start|va_copy|va_end|va_arg|qsort|fscanf|fsetpos|fseek|fclose|ftell|fopen|fdim|fdimf|fdiml|fpclassify|fputs|fputc|fputws|fputwc|fprintf|feholdexcept|fesetenv|fesetexceptflag|fesetround|feclearexcept|fetestexcept|feof|feupdateenv|feraiseexcept|ferror|fegetenv|fegetexceptflag|fegetround|fflush|fwscanf|fwide|fwprintf|fwrite|floor|floorf|floorl|fabs|fabsf|fabsl|fgets|fgetc|fgetpos|fgetws|fgetwc|freopen|free|fread|frexp|frexpf|frexpl|fmin|fminf|fminl|fmod|fmodf|fmodl|fma|fmaf|fmal|fmax|fmaxf|fmaxl|ldiv|ldexp|ldexpf|ldexpl|longjmp|localtime|localeconv|log|log1p|log1pf|log1pl|log10|log10f|log10l|log2|log2f|log2l|logf|logl|logb|logbf|logbl|labs|lldiv|llabs|llrint|llrintf|llrintl|llround|llroundf|llroundl|lrint|lrintf|lrintl|lround|lroundf|lroundl|lgamma|lgammaf|lgammal|wscanf|wcsstr|wcsspn|wcsncpy|wcsncat|wcsncmp|wcscspn|wcschr|wcscoll|wcscpy|wcscat|wcscmp|wcstoimax|wcstod|wcstoul|wcstoull|wcstoumax|wcstok|wcstof|wcstol|wcstold|wcstoll|wcstombs|wcspbrk|wcsftime|wcslen|wcsrchr|wcsrtombs|wcsxfrm|wctob|wctomb|wcrtomb|wprintf|wmemset|wmemchr|wmemcpy|wmemcmp|wmemmove|assert|asctime|asin|asinh|asinhf|asinhl|asinf|asinl|acos|acosh|acoshf|acoshl|acosf|acosl|atoi|atof|atol|atoll|atexit|atan|atanh|atanhf|atanhl|atan2|atan2f|atan2l|atanf|atanl|abs|abort|gets|getc|getchar|getenv|getwc|getwchar|gmtime|rint|rintf|rintl|round|roundf|roundl|rename|realloc|rewind|remove|remquo|remquof|remquol|remainder|remainderf|remainderl|rand|raise|bsearch|btowc|modf|modff|modfl|memset|memchr|memcpy|memcmp|memmove|mktime|malloc|mbsinit|mbstowcs|mbsrtowcs|mbtowc|mblen|mbrtowc|mbrlen";
|
||||||
|
var c_cppHighlightRules = function (extraKeywords) {
|
||||||
|
var keywordControls = ("break|case|continue|default|do|else|for|goto|if|_Pragma|" +
|
||||||
|
"return|switch|while|catch|operator|try|throw|using");
|
||||||
|
var storageType = ("asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" +
|
||||||
|
"_Imaginary|int|int8_t|int16_t|int32_t|int64_t|long|short|signed|size_t|struct|typedef|uint8_t|uint16_t|uint32_t|uint64_t|union|unsigned|void|" +
|
||||||
|
"class|wchar_t|template|char16_t|char32_t");
|
||||||
|
var storageModifiers = ("const|extern|register|restrict|static|volatile|inline|private|" +
|
||||||
|
"protected|public|friend|explicit|virtual|export|mutable|typename|" +
|
||||||
|
"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local");
|
||||||
|
var keywordOperators = ("and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|" +
|
||||||
|
"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace");
|
||||||
|
var builtinConstants = ("NULL|true|false|TRUE|FALSE|nullptr");
|
||||||
|
var keywordMapper = this.$keywords = this.createKeywordMapper(Object.assign({
|
||||||
|
"keyword.control": keywordControls,
|
||||||
|
"storage.type": storageType,
|
||||||
|
"storage.modifier": storageModifiers,
|
||||||
|
"keyword.operator": keywordOperators,
|
||||||
|
"variable.language": "this",
|
||||||
|
"constant.language": builtinConstants,
|
||||||
|
"support.function.C99.c": cFunctions
|
||||||
|
}, extraKeywords), "identifier");
|
||||||
|
var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
|
||||||
|
var escapeRe = /\\(?:['"?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}U[a-fA-F\d]{8}|.)/.source;
|
||||||
|
var formatRe = "%"
|
||||||
|
+ /(\d+\$)?/.source // field (argument #)
|
||||||
|
+ /[#0\- +']*/.source // flags
|
||||||
|
+ /[,;:_]?/.source // separator character (AltiVec)
|
||||||
|
+ /((-?\d+)|\*(-?\d+\$)?)?/.source // minimum field width
|
||||||
|
+ /(\.((-?\d+)|\*(-?\d+\$)?)?)?/.source // precision
|
||||||
|
+ /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier
|
||||||
|
+ /(\[[^"\]]+\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "//$",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "//",
|
||||||
|
next: "singleLineComment"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "string", // character
|
||||||
|
regex: "'(?:" + escapeRe + "|.)?'"
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: '"',
|
||||||
|
stateName: "qqstring",
|
||||||
|
next: [
|
||||||
|
{ token: "string", regex: /\\\s*$/, next: "qqstring" },
|
||||||
|
{ token: "constant.language.escape", regex: escapeRe },
|
||||||
|
{ token: "constant.language.escape", regex: formatRe },
|
||||||
|
{ token: "string.end", regex: '"|$', next: "start" },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: 'R"\\(',
|
||||||
|
stateName: "rawString",
|
||||||
|
next: [
|
||||||
|
{ token: "string.end", regex: '\\)"', next: "start" },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // pre-compiler directives
|
||||||
|
regex: "#\\s*(?:include|import|pragma|line|define|undef)\\b",
|
||||||
|
next: "directive"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // special case pre-compiler directive
|
||||||
|
regex: "#\\s*(?:endif|if|ifdef|else|elif|ifndef)\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /--|\+\+|<<=|>>=|>>>=|<>|&&|\|\||\?:|[*%\/+\-&\^|~!<>=]=?/
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\?|\\:|\\,|\\;|\\."
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"singleLineComment": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: /\\$/,
|
||||||
|
next: "singleLineComment"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: /$/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directive": [
|
||||||
|
{
|
||||||
|
token: "constant.other.multiline",
|
||||||
|
regex: /\\/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other.multiline",
|
||||||
|
regex: /.*\\/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other",
|
||||||
|
regex: "\\s*<.+?>",
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other", // single line
|
||||||
|
regex: '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]',
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other", // single line
|
||||||
|
regex: "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']",
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other",
|
||||||
|
regex: /[^\\\/]+/,
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(c_cppHighlightRules, TextHighlightRules);
|
||||||
|
exports.c_cppHighlightRules = c_cppHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = c_cppHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
var endState = tokenizedLine.state;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (state == "doc-start") {
|
||||||
|
if (endState == "start") {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
var match = line.match(/^\s*(\/?)\*/);
|
||||||
|
if (match) {
|
||||||
|
if (match[1]) {
|
||||||
|
indent += " ";
|
||||||
|
}
|
||||||
|
indent += "* ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/c_cpp";
|
||||||
|
this.snippetFileId = "ace/snippets/c_cpp";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/c_cpp"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,192 @@
|
||||||
|
define("ace/mode/cirru_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 CirruHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
start: [{
|
||||||
|
token: 'constant.numeric',
|
||||||
|
regex: /[\d\.]+/
|
||||||
|
}, {
|
||||||
|
token: 'comment.line.double-dash',
|
||||||
|
regex: /--/,
|
||||||
|
next: 'comment'
|
||||||
|
}, {
|
||||||
|
token: 'storage.modifier',
|
||||||
|
regex: /\(/
|
||||||
|
}, {
|
||||||
|
token: 'storage.modifier',
|
||||||
|
regex: /,/,
|
||||||
|
next: 'line'
|
||||||
|
}, {
|
||||||
|
token: 'support.function',
|
||||||
|
regex: /[^\(\)"\s{}\[\]]+/,
|
||||||
|
next: 'line'
|
||||||
|
}, {
|
||||||
|
token: 'string.quoted.double',
|
||||||
|
regex: /"/,
|
||||||
|
next: 'string'
|
||||||
|
}, {
|
||||||
|
token: 'storage.modifier',
|
||||||
|
regex: /\)/
|
||||||
|
}],
|
||||||
|
comment: [{
|
||||||
|
token: 'comment.line.double-dash',
|
||||||
|
regex: / +[^\n]+/,
|
||||||
|
next: 'start'
|
||||||
|
}],
|
||||||
|
string: [{
|
||||||
|
token: 'string.quoted.double',
|
||||||
|
regex: /"/,
|
||||||
|
next: 'line'
|
||||||
|
}, {
|
||||||
|
token: 'constant.character.escape',
|
||||||
|
regex: /\\/,
|
||||||
|
next: 'escape'
|
||||||
|
}, {
|
||||||
|
token: 'string.quoted.double',
|
||||||
|
regex: /[^\\"]+/
|
||||||
|
}],
|
||||||
|
escape: [{
|
||||||
|
token: 'constant.character.escape',
|
||||||
|
regex: /./,
|
||||||
|
next: 'string'
|
||||||
|
}],
|
||||||
|
line: [{
|
||||||
|
token: 'constant.numeric',
|
||||||
|
regex: /[\d\.]+/
|
||||||
|
}, {
|
||||||
|
token: 'markup.raw',
|
||||||
|
regex: /^\s*/,
|
||||||
|
next: 'start'
|
||||||
|
}, {
|
||||||
|
token: 'storage.modifier',
|
||||||
|
regex: /\$/,
|
||||||
|
next: 'start'
|
||||||
|
}, {
|
||||||
|
token: 'variable.parameter',
|
||||||
|
regex: /[^\(\)"\s{}\[\]]+/
|
||||||
|
}, {
|
||||||
|
token: 'storage.modifier',
|
||||||
|
regex: /\(/,
|
||||||
|
next: 'start'
|
||||||
|
}, {
|
||||||
|
token: 'storage.modifier',
|
||||||
|
regex: /\)/
|
||||||
|
}, {
|
||||||
|
token: 'markup.raw',
|
||||||
|
regex: /^ */,
|
||||||
|
next: 'start'
|
||||||
|
}, {
|
||||||
|
token: 'string.quoted.double',
|
||||||
|
regex: /"/,
|
||||||
|
next: 'string'
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(CirruHighlightRules, TextHighlightRules);
|
||||||
|
exports.CirruHighlightRules = CirruHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.commentBlock = function (session, row) {
|
||||||
|
var re = /\S/;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startLevel = line.search(re);
|
||||||
|
if (startLevel == -1 || line[startLevel] != "#")
|
||||||
|
return;
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
var level = line.search(re);
|
||||||
|
if (level == -1)
|
||||||
|
continue;
|
||||||
|
if (line[level] != "#")
|
||||||
|
break;
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var range = this.indentationBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
range = this.commentBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var indent = line.search(/\S/);
|
||||||
|
var next = session.getLine(row + 1);
|
||||||
|
var prev = session.getLine(row - 1);
|
||||||
|
var prevIndent = prev.search(/\S/);
|
||||||
|
var nextIndent = next.search(/\S/);
|
||||||
|
if (indent == -1) {
|
||||||
|
session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? "start" : "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (prevIndent == -1) {
|
||||||
|
if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
|
||||||
|
if (session.getLine(row - 2).search(/\S/) == -1) {
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prevIndent != -1 && prevIndent < indent)
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
else
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
if (indent < nextIndent)
|
||||||
|
return "start";
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/cirru",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/cirru_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var CirruHighlightRules = require("./cirru_highlight_rules").CirruHighlightRules;
|
||||||
|
var CoffeeFoldMode = require("./folding/coffee").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = CirruHighlightRules;
|
||||||
|
this.foldingRules = new CoffeeFoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "--";
|
||||||
|
this.$id = "ace/mode/cirru";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/cirru"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,322 @@
|
||||||
|
define("ace/mode/clojure_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 ClojureHighlightRules = function () {
|
||||||
|
var builtinFunctions = ('* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* ' +
|
||||||
|
'*command-line-args* *compile-files* *compile-path* *e *err* *file* ' +
|
||||||
|
'*flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* ' +
|
||||||
|
'*print-dup* *print-length* *print-level* *print-meta* *print-readably* ' +
|
||||||
|
'*read-eval* *source-path* *use-context-classloader* ' +
|
||||||
|
'*warn-on-reflection* + - -> ->> .. / < <= = ' +
|
||||||
|
'== > > >= >= accessor aclone ' +
|
||||||
|
'add-classpath add-watch agent agent-errors aget alength alias all-ns ' +
|
||||||
|
'alter alter-meta! alter-var-root amap ancestors and apply areduce ' +
|
||||||
|
'array-map aset aset-boolean aset-byte aset-char aset-double aset-float ' +
|
||||||
|
'aset-int aset-long aset-short assert assoc assoc! assoc-in associative? ' +
|
||||||
|
'atom await await-for await1 bases bean bigdec bigint binding bit-and ' +
|
||||||
|
'bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left ' +
|
||||||
|
'bit-shift-right bit-test bit-xor boolean boolean-array booleans ' +
|
||||||
|
'bound-fn bound-fn* butlast byte byte-array bytes cast char char-array ' +
|
||||||
|
'char-escape-string char-name-string char? chars chunk chunk-append ' +
|
||||||
|
'chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? ' +
|
||||||
|
'class class? clear-agent-errors clojure-version coll? comment commute ' +
|
||||||
|
'comp comparator compare compare-and-set! compile complement concat cond ' +
|
||||||
|
'condp conj conj! cons constantly construct-proxy contains? count ' +
|
||||||
|
'counted? create-ns create-struct cycle dec decimal? declare definline ' +
|
||||||
|
'defmacro defmethod defmulti defn defn- defonce defstruct delay delay? ' +
|
||||||
|
'deliver deref derive descendants destructure disj disj! dissoc dissoc! ' +
|
||||||
|
'distinct distinct? doall doc dorun doseq dosync dotimes doto double ' +
|
||||||
|
'double-array doubles drop drop-last drop-while empty empty? ensure ' +
|
||||||
|
'enumeration-seq eval even? every? false? ffirst file-seq filter find ' +
|
||||||
|
'find-doc find-ns find-var first float float-array float? floats flush ' +
|
||||||
|
'fn fn? fnext for force format future future-call future-cancel ' +
|
||||||
|
'future-cancelled? future-done? future? gen-class gen-interface gensym ' +
|
||||||
|
'get get-in get-method get-proxy-class get-thread-bindings get-validator ' +
|
||||||
|
'hash hash-map hash-set identical? identity if-let if-not ifn? import ' +
|
||||||
|
'in-ns inc init-proxy instance? int int-array integer? interleave intern ' +
|
||||||
|
'interpose into into-array ints io! isa? iterate iterator-seq juxt key ' +
|
||||||
|
'keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list ' +
|
||||||
|
'list* list? load load-file load-reader load-string loaded-libs locking ' +
|
||||||
|
'long long-array longs loop macroexpand macroexpand-1 make-array ' +
|
||||||
|
'make-hierarchy map map? mapcat max max-key memfn memoize merge ' +
|
||||||
|
'merge-with meta method-sig methods min min-key mod name namespace neg? ' +
|
||||||
|
'newline next nfirst nil? nnext not not-any? not-empty not-every? not= ' +
|
||||||
|
'ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ' +
|
||||||
|
'ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? ' +
|
||||||
|
'or parents partial partition pcalls peek persistent! pmap pop pop! ' +
|
||||||
|
'pop-thread-bindings pos? pr pr-str prefer-method prefers ' +
|
||||||
|
'primitives-classnames print print-ctor print-doc print-dup print-method ' +
|
||||||
|
'print-namespace-doc print-simple print-special-doc print-str printf ' +
|
||||||
|
'println println-str prn prn-str promise proxy proxy-call-with-super ' +
|
||||||
|
'proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot ' +
|
||||||
|
'rand rand-int range ratio? rational? rationalize re-find re-groups ' +
|
||||||
|
're-matcher re-matches re-pattern re-seq read read-line read-string ' +
|
||||||
|
'reduce ref ref-history-count ref-max-history ref-min-history ref-set ' +
|
||||||
|
'refer refer-clojure release-pending-sends rem remove remove-method ' +
|
||||||
|
'remove-ns remove-watch repeat repeatedly replace replicate require ' +
|
||||||
|
'reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq ' +
|
||||||
|
'rsubseq second select-keys send send-off seq seq? seque sequence ' +
|
||||||
|
'sequential? set set-validator! set? short short-array shorts ' +
|
||||||
|
'shutdown-agents slurp some sort sort-by sorted-map sorted-map-by ' +
|
||||||
|
'sorted-set sorted-set-by sorted? special-form-anchor special-symbol? ' +
|
||||||
|
'split-at split-with str stream? string? struct struct-map subs subseq ' +
|
||||||
|
'subvec supers swap! symbol symbol? sync syntax-symbol-anchor take ' +
|
||||||
|
'take-last take-nth take-while test the-ns time to-array to-array-2d ' +
|
||||||
|
'trampoline transient tree-seq true? type unchecked-add unchecked-dec ' +
|
||||||
|
'unchecked-divide unchecked-inc unchecked-multiply unchecked-negate ' +
|
||||||
|
'unchecked-remainder unchecked-subtract underive unquote ' +
|
||||||
|
'unquote-splicing update-in update-proxy use val vals var-get var-set ' +
|
||||||
|
'var? vary-meta vec vector vector? when when-first when-let when-not ' +
|
||||||
|
'while with-bindings with-bindings* with-in-str with-loading-context ' +
|
||||||
|
'with-local-vars with-meta with-open with-out-str with-precision xml-seq ' +
|
||||||
|
'zero? zipmap');
|
||||||
|
var keywords = ('throw try var ' +
|
||||||
|
'def do fn if let loop monitor-enter monitor-exit new quote recur set!');
|
||||||
|
var buildinConstants = ("true false nil");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": buildinConstants,
|
||||||
|
"support.function": builtinFunctions
|
||||||
|
}, "identifier", false, " ");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: ";.*$"
|
||||||
|
}, {
|
||||||
|
token: "keyword", //parens
|
||||||
|
regex: "[\\(|\\)]"
|
||||||
|
}, {
|
||||||
|
token: "keyword", //lists
|
||||||
|
regex: "[\\'\\(]"
|
||||||
|
}, {
|
||||||
|
token: "keyword", //vectors
|
||||||
|
regex: "[\\[|\\]]"
|
||||||
|
}, {
|
||||||
|
token: "string.regexp", //Regular Expressions
|
||||||
|
regex: '#"',
|
||||||
|
next: "regex"
|
||||||
|
}, {
|
||||||
|
token: "keyword", //sets and maps
|
||||||
|
regex: "[\\{|\\}|\\#\\{|\\#\\}]"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // ampersands
|
||||||
|
regex: '[\\&]'
|
||||||
|
}, {
|
||||||
|
token: "keyword", // metadata
|
||||||
|
regex: '[\\#\\^\\{]'
|
||||||
|
}, {
|
||||||
|
token: "keyword", // anonymous fn syntactic sugar
|
||||||
|
regex: '[\\%]'
|
||||||
|
}, {
|
||||||
|
token: "keyword", // deref reader macro
|
||||||
|
regex: '[@]'
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.language",
|
||||||
|
regex: '[!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+||=|!=|<=|>=|<>|<|>|!|&&]'
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: '"',
|
||||||
|
next: "string"
|
||||||
|
}, {
|
||||||
|
token: "constant", // symbol
|
||||||
|
regex: /:[^()\[\]{}'"\^%`,;\s]+/
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"string": [
|
||||||
|
{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: "\\\\.|\\\\$"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"regex": [
|
||||||
|
{
|
||||||
|
token: "regexp.keyword.operator",
|
||||||
|
regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
|
||||||
|
}, {
|
||||||
|
token: "string.regexp",
|
||||||
|
regex: '"',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/
|
||||||
|
}, {
|
||||||
|
token: "constant.language.delimiter",
|
||||||
|
regex: /\|/
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\[\^?/,
|
||||||
|
next: "regex_character_class"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string.regexp"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"regex_character_class": [
|
||||||
|
{
|
||||||
|
token: "regexp.charclass.keyword.operator",
|
||||||
|
regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: "]",
|
||||||
|
next: "regex"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: "-"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string.regexp.charachterclass"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(ClojureHighlightRules, TextHighlightRules);
|
||||||
|
exports.ClojureHighlightRules = ClojureHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_parens_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingParensOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\)/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\))/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
var match = line.match(/^(\s+)/);
|
||||||
|
if (match) {
|
||||||
|
return match[1];
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
}).call(MatchingParensOutdent.prototype);
|
||||||
|
exports.MatchingParensOutdent = MatchingParensOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/clojure",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/clojure_highlight_rules","ace/mode/matching_parens_outdent"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var ClojureHighlightRules = require("./clojure_highlight_rules").ClojureHighlightRules;
|
||||||
|
var MatchingParensOutdent = require("./matching_parens_outdent").MatchingParensOutdent;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = ClojureHighlightRules;
|
||||||
|
this.$outdent = new MatchingParensOutdent();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = ";";
|
||||||
|
this.minorIndentFunctions = ["defn", "defn-", "defmacro", "def", "deftest", "testing"];
|
||||||
|
this.$toIndent = function (str) {
|
||||||
|
return str.split('').map(function (ch) {
|
||||||
|
if (/\s/.exec(ch)) {
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return ' ';
|
||||||
|
}
|
||||||
|
}).join('');
|
||||||
|
};
|
||||||
|
this.$calculateIndent = function (line, tab) {
|
||||||
|
var baseIndent = this.$getIndent(line);
|
||||||
|
var delta = 0;
|
||||||
|
var isParen, ch;
|
||||||
|
for (var i = line.length - 1; i >= 0; i--) {
|
||||||
|
ch = line[i];
|
||||||
|
if (ch === '(') {
|
||||||
|
delta--;
|
||||||
|
isParen = true;
|
||||||
|
}
|
||||||
|
else if (ch === '(' || ch === '[' || ch === '{') {
|
||||||
|
delta--;
|
||||||
|
isParen = false;
|
||||||
|
}
|
||||||
|
else if (ch === ')' || ch === ']' || ch === '}') {
|
||||||
|
delta++;
|
||||||
|
}
|
||||||
|
if (delta < 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (delta < 0 && isParen) {
|
||||||
|
i += 1;
|
||||||
|
var iBefore = i;
|
||||||
|
var fn = '';
|
||||||
|
while (true) {
|
||||||
|
ch = line[i];
|
||||||
|
if (ch === ' ' || ch === '\t') {
|
||||||
|
if (this.minorIndentFunctions.indexOf(fn) !== -1) {
|
||||||
|
return this.$toIndent(line.substring(0, iBefore - 1) + tab);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return this.$toIndent(line.substring(0, i + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ch === undefined) {
|
||||||
|
return this.$toIndent(line.substring(0, iBefore - 1) + tab);
|
||||||
|
}
|
||||||
|
fn += line[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (delta < 0 && !isParen) {
|
||||||
|
return this.$toIndent(line.substring(0, i + 1));
|
||||||
|
}
|
||||||
|
else if (delta > 0) {
|
||||||
|
baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);
|
||||||
|
return baseIndent;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return baseIndent;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
return this.$calculateIndent(line, tab);
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/clojure";
|
||||||
|
this.snippetFileId = "ace/snippets/clojure";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/clojure"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
define("ace/mode/cobol_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 CobolHighlightRules = function () {
|
||||||
|
var keywords = "ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|" +
|
||||||
|
"AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|" +
|
||||||
|
"ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|" +
|
||||||
|
"TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|" +
|
||||||
|
"UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|" +
|
||||||
|
"PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|" +
|
||||||
|
"CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|" +
|
||||||
|
"COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|" +
|
||||||
|
"RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|" +
|
||||||
|
"DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|" +
|
||||||
|
"ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|" +
|
||||||
|
"EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT";
|
||||||
|
var builtinConstants = ("true|false|null");
|
||||||
|
var builtinFunctions = ("count|min|max|avg|sum|rank|now|coalesce|main");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"support.function": builtinFunctions,
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": builtinConstants
|
||||||
|
}, "identifier", true);
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\*.*$"
|
||||||
|
}, {
|
||||||
|
token: "string", // " string
|
||||||
|
regex: '".*?"'
|
||||||
|
}, {
|
||||||
|
token: "string", // ' string
|
||||||
|
regex: "'.*?'"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[\\(]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\)]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(CobolHighlightRules, TextHighlightRules);
|
||||||
|
exports.CobolHighlightRules = CobolHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/cobol",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/cobol_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var CobolHighlightRules = require("./cobol_highlight_rules").CobolHighlightRules;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = CobolHighlightRules;
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "*";
|
||||||
|
this.$id = "ace/mode/cobol";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/cobol"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,335 @@
|
||||||
|
define("ace/mode/coffee_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;
|
||||||
|
oop.inherits(CoffeeHighlightRules, TextHighlightRules);
|
||||||
|
function CoffeeHighlightRules() {
|
||||||
|
var identifier = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
|
||||||
|
var keywords = ("this|throw|then|try|typeof|super|switch|return|break|by|continue|" +
|
||||||
|
"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|" +
|
||||||
|
"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|" +
|
||||||
|
"or|on|unless|until|and|yes|yield|export|import|default");
|
||||||
|
var langConstant = ("true|false|null|undefined|NaN|Infinity");
|
||||||
|
var illegal = ("case|const|function|var|void|with|enum|implements|" +
|
||||||
|
"interface|let|package|private|protected|public|static");
|
||||||
|
var supportClass = ("Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|" +
|
||||||
|
"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
|
||||||
|
"SyntaxError|TypeError|URIError|" +
|
||||||
|
"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
|
||||||
|
"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray");
|
||||||
|
var supportFunction = ("Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|" +
|
||||||
|
"encodeURIComponent|decodeURI|decodeURIComponent|String|");
|
||||||
|
var variableLanguage = ("window|arguments|prototype|document");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": langConstant,
|
||||||
|
"invalid.illegal": illegal,
|
||||||
|
"language.support.class": supportClass,
|
||||||
|
"language.support.function": supportFunction,
|
||||||
|
"variable.language": variableLanguage
|
||||||
|
}, "identifier");
|
||||||
|
var functionRule = {
|
||||||
|
token: ["paren.lparen", "variable.parameter", "paren.rparen", "text", "storage.type"],
|
||||||
|
regex: /(?:(\()((?:"[^")]*?"|'[^')]*?'|\/[^\/)]*?\/|[^()"'\/])*?)(\))(\s*))?([\-=]>)/.source
|
||||||
|
};
|
||||||
|
var stringEscape = /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;
|
||||||
|
this.$rules = {
|
||||||
|
start: [
|
||||||
|
{
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: "(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)"
|
||||||
|
}, {
|
||||||
|
stateName: "qdoc",
|
||||||
|
token: "string", regex: "'''", next: [
|
||||||
|
{ token: "string", regex: "'''", next: "start" },
|
||||||
|
{ token: "constant.language.escape", regex: stringEscape },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
stateName: "qqdoc",
|
||||||
|
token: "string",
|
||||||
|
regex: '"""',
|
||||||
|
next: [
|
||||||
|
{ token: "string", regex: '"""', next: "start" },
|
||||||
|
{ token: "paren.string", regex: '#{', push: "start" },
|
||||||
|
{ token: "constant.language.escape", regex: stringEscape },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
stateName: "qstring",
|
||||||
|
token: "string", regex: "'", next: [
|
||||||
|
{ token: "string", regex: "'", next: "start" },
|
||||||
|
{ token: "constant.language.escape", regex: stringEscape },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
stateName: "qqstring",
|
||||||
|
token: "string.start", regex: '"', next: [
|
||||||
|
{ token: "string.end", regex: '"', next: "start" },
|
||||||
|
{ token: "paren.string", regex: '#{', push: "start" },
|
||||||
|
{ token: "constant.language.escape", regex: stringEscape },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
stateName: "js",
|
||||||
|
token: "string", regex: "`", next: [
|
||||||
|
{ token: "string", regex: "`", next: "start" },
|
||||||
|
{ token: "constant.language.escape", regex: stringEscape },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
regex: "[{}]", onMatch: function (val, state, stack) {
|
||||||
|
this.next = "";
|
||||||
|
if (val == "{" && stack.length) {
|
||||||
|
stack.unshift("start", state);
|
||||||
|
return "paren";
|
||||||
|
}
|
||||||
|
if (val == "}" && stack.length) {
|
||||||
|
stack.shift();
|
||||||
|
this.next = stack.shift() || "";
|
||||||
|
if (this.next.indexOf("string") != -1)
|
||||||
|
return "paren.string";
|
||||||
|
}
|
||||||
|
return "paren";
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
token: "string.regex",
|
||||||
|
regex: "///",
|
||||||
|
next: "heregex"
|
||||||
|
}, {
|
||||||
|
token: "string.regex",
|
||||||
|
regex: /(?:\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)(?:[imgy]{0,4})(?!\w)/
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "###(?!#)",
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "#.*"
|
||||||
|
}, {
|
||||||
|
token: ["punctuation.operator", "text", "identifier"],
|
||||||
|
regex: "(\\.)(\\s*)(" + illegal + ")"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\.{1,3}"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "language.support.class",
|
||||||
|
"text", "keyword", "text", "language.support.class"],
|
||||||
|
regex: "(class)(\\s+)(" + identifier + ")(?:(\\s+)(extends)(\\s+)(" + identifier + "))?"
|
||||||
|
}, {
|
||||||
|
token: ["entity.name.function", "text", "keyword.operator", "text"].concat(functionRule.token),
|
||||||
|
regex: "(" + identifier + ")(\\s*)([=:])(\\s*)" + functionRule.regex
|
||||||
|
},
|
||||||
|
functionRule,
|
||||||
|
{
|
||||||
|
token: "variable",
|
||||||
|
regex: "@(?:" + identifier + ")?"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: identifier
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\,|\\."
|
||||||
|
}, {
|
||||||
|
token: "storage.type",
|
||||||
|
regex: "[\\-=]>"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "(?:[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|[!*+-=><])"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[({[]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\]})]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
heregex: [{
|
||||||
|
token: "string.regex",
|
||||||
|
regex: '.*?///[imgy]{0,4}',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "comment.regex",
|
||||||
|
regex: "\\s+(?:#.*)?"
|
||||||
|
}, {
|
||||||
|
token: "string.regex",
|
||||||
|
regex: "\\S+"
|
||||||
|
}],
|
||||||
|
comment: [{
|
||||||
|
token: "comment",
|
||||||
|
regex: '###',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
}
|
||||||
|
exports.CoffeeHighlightRules = CoffeeHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.commentBlock = function (session, row) {
|
||||||
|
var re = /\S/;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startLevel = line.search(re);
|
||||||
|
if (startLevel == -1 || line[startLevel] != "#")
|
||||||
|
return;
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
var level = line.search(re);
|
||||||
|
if (level == -1)
|
||||||
|
continue;
|
||||||
|
if (line[level] != "#")
|
||||||
|
break;
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var range = this.indentationBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
range = this.commentBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var indent = line.search(/\S/);
|
||||||
|
var next = session.getLine(row + 1);
|
||||||
|
var prev = session.getLine(row - 1);
|
||||||
|
var prevIndent = prev.search(/\S/);
|
||||||
|
var nextIndent = next.search(/\S/);
|
||||||
|
if (indent == -1) {
|
||||||
|
session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? "start" : "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (prevIndent == -1) {
|
||||||
|
if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
|
||||||
|
if (session.getLine(row - 2).search(/\S/) == -1) {
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prevIndent != -1 && prevIndent < indent)
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
else
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
if (indent < nextIndent)
|
||||||
|
return "start";
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/coffee",["require","exports","module","ace/mode/coffee_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/coffee","ace/range","ace/mode/text","ace/worker/worker_client","ace/lib/oop"], function(require, exports, module){"use strict";
|
||||||
|
var Rules = require("./coffee_highlight_rules").CoffeeHighlightRules;
|
||||||
|
var Outdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var FoldMode = require("./folding/coffee").FoldMode;
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
function Mode() {
|
||||||
|
this.HighlightRules = Rules;
|
||||||
|
this.$outdent = new Outdent();
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
}
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
var indenter = /(?:[({[=:]|[-=]>|\b(?:else|try|(?:swi|ca)tch(?:\s+[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$|^\s*(else\b\s*)?(?:if|for|while|loop)\b(?!.*\bthen\b)/;
|
||||||
|
this.lineCommentStart = "#";
|
||||||
|
this.blockComment = { start: "###", end: "###" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
|
||||||
|
if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&
|
||||||
|
state === 'start' && indenter.test(line))
|
||||||
|
indent += tab;
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.createWorker = function (session) {
|
||||||
|
var worker = new WorkerClient(["ace"], "ace/mode/coffee_worker", "Worker");
|
||||||
|
worker.attachToDocument(session.getDocument());
|
||||||
|
worker.on("annotate", function (e) {
|
||||||
|
session.setAnnotations(e.data);
|
||||||
|
});
|
||||||
|
worker.on("terminate", function () {
|
||||||
|
session.clearAnnotations();
|
||||||
|
});
|
||||||
|
return worker;
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/coffee";
|
||||||
|
this.snippetFileId = "ace/snippets/coffee";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/coffee"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,586 @@
|
||||||
|
define("ace/mode/crystal_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 CrystalHighlightRules = function () {
|
||||||
|
var builtinFunctions = ("puts|initialize|previous_def|typeof|as|pointerof|sizeof|instance_sizeof");
|
||||||
|
var keywords = ("if|end|else|elsif|unless|case|when|break|while|next|until|def|return|class|new|getter|setter|property|lib"
|
||||||
|
+ "|fun|do|struct|private|protected|public|module|super|abstract|include|extend|begin|enum|raise|yield|with"
|
||||||
|
+ "|alias|rescue|ensure|macro|uninitialized|union|type|require");
|
||||||
|
var buildinConstants = ("true|TRUE|false|FALSE|nil|NIL|__LINE__|__END_LINE__|__FILE__|__DIR__");
|
||||||
|
var builtinVariables = ("$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|" +
|
||||||
|
"root_url|flash|session|cookies|params|request|response|logger|self");
|
||||||
|
var keywordMapper = this.$keywords = this.createKeywordMapper({
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": buildinConstants,
|
||||||
|
"variable.language": builtinVariables,
|
||||||
|
"support.function": builtinFunctions
|
||||||
|
}, "identifier");
|
||||||
|
var hexNumber = "(?:0[xX][\\dA-Fa-f]+)";
|
||||||
|
var decNumber = "(?:[0-9][\\d_]*)";
|
||||||
|
var octNumber = "(?:0o[0-7][0-7]*)";
|
||||||
|
var binNumber = "(?:0[bB][01]+)";
|
||||||
|
var intNumber = "(?:[+-]?)(?:" + hexNumber + "|" + decNumber + "|" + octNumber + "|" + binNumber + ")(?:_?[iIuU](?:8|16|32|64))?\\b";
|
||||||
|
var escapeExpression = /\\(?:[nsrtvfbae'"\\]|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4}|u{[\da-fA-F]{1,6}})/;
|
||||||
|
var extEscapeExspresssion = /\\(?:[nsrtvfbae'"\\]|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4}|u{[\da-fA-F]{1,6}}|u{(:?[\da-fA-F]{2}\s)*[\da-fA-F]{2}})/;
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "#.*$"
|
||||||
|
}, {
|
||||||
|
token: "string.regexp",
|
||||||
|
regex: "[/]",
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: extEscapeExspresssion
|
||||||
|
}, {
|
||||||
|
token: "string.regexp",
|
||||||
|
regex: "[/][imx]*(?=[).,;\\s]|$)",
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string.regexp"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
[{
|
||||||
|
regex: "[{}]", onMatch: function (val, state, stack) {
|
||||||
|
this.next = val == "{" ? this.nextState : "";
|
||||||
|
if (val == "{" && stack.length) {
|
||||||
|
stack.unshift("start", state);
|
||||||
|
return "paren.lparen";
|
||||||
|
}
|
||||||
|
if (val == "}" && stack.length) {
|
||||||
|
stack.shift();
|
||||||
|
this.next = stack.shift();
|
||||||
|
if (this.next.indexOf("string") != -1)
|
||||||
|
return "paren.end";
|
||||||
|
}
|
||||||
|
return val == "{" ? "paren.lparen" : "paren.rparen";
|
||||||
|
},
|
||||||
|
nextState: "start"
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: /"/,
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: extEscapeExspresssion
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: /\\#{/
|
||||||
|
}, {
|
||||||
|
token: "paren.start",
|
||||||
|
regex: /#{/,
|
||||||
|
push: "start"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /"/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: /`/,
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: extEscapeExspresssion
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: /\\#{/
|
||||||
|
}, {
|
||||||
|
token: "paren.start",
|
||||||
|
regex: /#{/,
|
||||||
|
push: "start"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /`/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "rpstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[Qx]?\(/,
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: extEscapeExspresssion
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: /\(/,
|
||||||
|
push: "rpstring"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /\)/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "paren.start",
|
||||||
|
regex: /#{/,
|
||||||
|
push: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "spstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[Qx]?\[/,
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: extEscapeExspresssion
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: /\[/,
|
||||||
|
push: "spstring"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /]/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "paren.start",
|
||||||
|
regex: /#{/,
|
||||||
|
push: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "fpstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[Qx]?{/,
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: extEscapeExspresssion
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: /{/,
|
||||||
|
push: "fpstring"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "paren.start",
|
||||||
|
regex: /#{/,
|
||||||
|
push: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "tpstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[Qx]?</,
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: extEscapeExspresssion
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: /</,
|
||||||
|
push: "tpstring"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: />/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "paren.start",
|
||||||
|
regex: /#{/,
|
||||||
|
push: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "ppstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[Qx]?\|/,
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: extEscapeExspresssion
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /\|/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "paren.start",
|
||||||
|
regex: /#{/,
|
||||||
|
push: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "rpqstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[qwir]\(/,
|
||||||
|
push: [{
|
||||||
|
token: "string.start",
|
||||||
|
regex: /\(/,
|
||||||
|
push: "rpqstring"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /\)/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "spqstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[qwir]\[/,
|
||||||
|
push: [{
|
||||||
|
token: "string.start",
|
||||||
|
regex: /\[/,
|
||||||
|
push: "spqstring"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /]/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "fpqstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[qwir]{/,
|
||||||
|
push: [{
|
||||||
|
token: "string.start",
|
||||||
|
regex: /{/,
|
||||||
|
push: "fpqstring"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "tpqstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[qwir]</,
|
||||||
|
push: [{
|
||||||
|
token: "string.start",
|
||||||
|
regex: /</,
|
||||||
|
push: "tpqstring"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: />/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
stateName: "ppqstring",
|
||||||
|
token: "string.start",
|
||||||
|
regex: /%[qwir]\|/,
|
||||||
|
push: [{
|
||||||
|
token: "string.end",
|
||||||
|
regex: /\|/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: /'/,
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: escapeExpression
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: /'|$/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}], {
|
||||||
|
token: "text", // namespaces aren't symbols
|
||||||
|
regex: "::"
|
||||||
|
}, {
|
||||||
|
token: "variable.instance", // instance variable
|
||||||
|
regex: "@{1,2}[a-zA-Z_\\d]+"
|
||||||
|
}, {
|
||||||
|
token: "variable.fresh", // fresh variable
|
||||||
|
regex: "%[a-zA-Z_\\d]+"
|
||||||
|
}, {
|
||||||
|
token: "support.class", // class name
|
||||||
|
regex: "[A-Z][a-zA-Z_\\d]+"
|
||||||
|
}, {
|
||||||
|
token: "constant.other.symbol", // symbol
|
||||||
|
regex: "[:](?:(?:===|<=>|\\[]\\?|\\[]=|\\[]|>>|\\*\\*|<<|==|!=|>=|<=|!~|=~|<|\\+|-|\\*|\\/|%|&|\\||\\^|>|!|~)|(?:(?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?))"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?(?:_?[fF](?:32|64))?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: intNumber
|
||||||
|
}, {
|
||||||
|
token: "constant.other.symbol",
|
||||||
|
regex: ':"',
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: extEscapeExspresssion
|
||||||
|
}, {
|
||||||
|
token: "constant.other.symbol",
|
||||||
|
regex: '"',
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "constant.other.symbol"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "constant.language.boolean",
|
||||||
|
regex: "(?:true|false)\\b"
|
||||||
|
}, {
|
||||||
|
token: "support.function",
|
||||||
|
regex: "(?:is_a\\?|nil\\?|responds_to\\?|as\\?)"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$!?]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "variable.system",
|
||||||
|
regex: "\\$\\!|\\$\\?"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.separator.key-value",
|
||||||
|
regex: "=>"
|
||||||
|
}, {
|
||||||
|
stateName: "heredoc",
|
||||||
|
onMatch: function (value, currentState, stack) {
|
||||||
|
var next = "heredoc";
|
||||||
|
var tokens = value.split(this.splitRegex);
|
||||||
|
stack.push(next, tokens[3]);
|
||||||
|
return [
|
||||||
|
{ type: "constant", value: tokens[1] },
|
||||||
|
{ type: "string", value: tokens[2] },
|
||||||
|
{ type: "support.class", value: tokens[3] },
|
||||||
|
{ type: "string", value: tokens[4] }
|
||||||
|
];
|
||||||
|
},
|
||||||
|
regex: "(<<-)([']?)([\\w]+)([']?)",
|
||||||
|
rules: {
|
||||||
|
heredoc: [{
|
||||||
|
token: "string",
|
||||||
|
regex: "^ +"
|
||||||
|
}, {
|
||||||
|
onMatch: function (value, currentState, stack) {
|
||||||
|
if (value === stack[1]) {
|
||||||
|
stack.shift();
|
||||||
|
stack.shift();
|
||||||
|
this.next = stack[0] || "start";
|
||||||
|
return "support.class";
|
||||||
|
}
|
||||||
|
this.next = "";
|
||||||
|
return "string";
|
||||||
|
},
|
||||||
|
regex: ".*$",
|
||||||
|
next: "start"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
regex: "$",
|
||||||
|
token: "empty",
|
||||||
|
next: function (currentState, stack) {
|
||||||
|
if (stack[0] === "heredoc")
|
||||||
|
return stack[0];
|
||||||
|
return currentState;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: /[.]\s*(?![.])/,
|
||||||
|
push: [{
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: /[.]\s*(?![.])/
|
||||||
|
}, {
|
||||||
|
token: "support.function",
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
regex: "",
|
||||||
|
token: "empty",
|
||||||
|
next: "pop"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|\\?|\\:|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\^|\\|"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: /[?:,;.]/
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(CrystalHighlightRules, TextHighlightRules);
|
||||||
|
exports.CrystalHighlightRules = CrystalHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.commentBlock = function (session, row) {
|
||||||
|
var re = /\S/;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startLevel = line.search(re);
|
||||||
|
if (startLevel == -1 || line[startLevel] != "#")
|
||||||
|
return;
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
var level = line.search(re);
|
||||||
|
if (level == -1)
|
||||||
|
continue;
|
||||||
|
if (line[level] != "#")
|
||||||
|
break;
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var range = this.indentationBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
range = this.commentBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var indent = line.search(/\S/);
|
||||||
|
var next = session.getLine(row + 1);
|
||||||
|
var prev = session.getLine(row - 1);
|
||||||
|
var prevIndent = prev.search(/\S/);
|
||||||
|
var nextIndent = next.search(/\S/);
|
||||||
|
if (indent == -1) {
|
||||||
|
session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? "start" : "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (prevIndent == -1) {
|
||||||
|
if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
|
||||||
|
if (session.getLine(row - 2).search(/\S/) == -1) {
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prevIndent != -1 && prevIndent < indent)
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
else
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
if (indent < nextIndent)
|
||||||
|
return "start";
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/crystal",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/crystal_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/folding/coffee"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var CrystalHighlightRules = require("./crystal_highlight_rules").CrystalHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var FoldMode = require("./folding/coffee").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = CrystalHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "#";
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||||
|
var startingClassOrMethod = line.match(/^\s*(class|def|module)\s.*$/);
|
||||||
|
var startingDoBlock = line.match(/.*do(\s*|\s+\|.*\|\s*)$/);
|
||||||
|
var startingConditional = line.match(/^\s*(if|else|when)\s*/);
|
||||||
|
if (match || startingClassOrMethod || startingDoBlock || startingConditional) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return /^\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, session, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
if (/}/.test(line))
|
||||||
|
return this.$outdent.autoOutdent(session, row);
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var prevLine = session.getLine(row - 1);
|
||||||
|
var prevIndent = this.$getIndent(prevLine);
|
||||||
|
var tab = session.getTabString();
|
||||||
|
if (prevIndent.length <= indent.length) {
|
||||||
|
if (indent.slice(-tab.length) == tab)
|
||||||
|
session.remove(new Range(row, indent.length - tab.length, row, indent.length));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/crystal";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/crystal"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,413 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/csharp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var CSharpHighlightRules = function () {
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"variable.language": "this",
|
||||||
|
"keyword": "abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic",
|
||||||
|
"constant.language": "null|true|false"
|
||||||
|
}, "identifier");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\/\\/.*$"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "string", // character
|
||||||
|
regex: /'(?:.|\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n]))?'/
|
||||||
|
}, {
|
||||||
|
token: "string", start: '"', end: '"|$', next: [
|
||||||
|
{ token: "constant.language.escape", regex: /\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n])/ },
|
||||||
|
{ token: "invalid", regex: /\\./ }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "string", start: '@"', end: '"', next: [
|
||||||
|
{ token: "constant.language.escape", regex: '""' }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "string", start: /\$"/, end: '"|$', next: [
|
||||||
|
{ token: "constant.language.escape", regex: /\\(:?$)|{{/ },
|
||||||
|
{ token: "constant.language.escape", regex: /\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n])/ },
|
||||||
|
{ token: "invalid", regex: /\\./ }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.boolean",
|
||||||
|
regex: "(?:true|false)\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
|
||||||
|
}, {
|
||||||
|
token: "keyword",
|
||||||
|
regex: "^\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\?|\\:|\\,|\\;|\\."
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(CSharpHighlightRules, TextHighlightRules);
|
||||||
|
exports.CSharpHighlightRules = CSharpHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/folding/csharp",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var CFoldMode = require("./cstyle").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, CFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.usingRe = /^\s*using \S/;
|
||||||
|
this.getFoldWidgetRangeBase = this.getFoldWidgetRange;
|
||||||
|
this.getFoldWidgetBase = this.getFoldWidget;
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var fw = this.getFoldWidgetBase(session, foldStyle, row);
|
||||||
|
if (!fw) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
if (/^\s*#region\b/.test(line))
|
||||||
|
return "start";
|
||||||
|
var usingRe = this.usingRe;
|
||||||
|
if (usingRe.test(line)) {
|
||||||
|
var prev = session.getLine(row - 1);
|
||||||
|
var next = session.getLine(row + 1);
|
||||||
|
if (!usingRe.test(prev) && usingRe.test(next))
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fw;
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var range = this.getFoldWidgetRangeBase(session, foldStyle, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
if (this.usingRe.test(line))
|
||||||
|
return this.getUsingStatementBlock(session, line, row);
|
||||||
|
if (/^\s*#region\b/.test(line))
|
||||||
|
return this.getRegionBlock(session, line, row);
|
||||||
|
};
|
||||||
|
this.getUsingStatementBlock = function (session, line, row) {
|
||||||
|
var startColumn = line.match(this.usingRe)[0].length - 1;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
if (/^\s*$/.test(line))
|
||||||
|
continue;
|
||||||
|
if (!this.usingRe.test(line))
|
||||||
|
break;
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getRegionBlock = 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/csharp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/csharp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/csharp"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var CSharpHighlightRules = require("./csharp_highlight_rules").CSharpHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var CStyleFoldMode = require("./folding/csharp").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = CSharpHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.createWorker = function (session) {
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/csharp";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/csharp"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,409 @@
|
||||||
|
define("ace/mode/csound_preprocessor_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 CsoundPreprocessorHighlightRules = function (embeddedRulePrefix) {
|
||||||
|
this.embeddedRulePrefix = embeddedRulePrefix === undefined ? "" : embeddedRulePrefix;
|
||||||
|
this.semicolonComments = {
|
||||||
|
token: "comment.line.semicolon.csound",
|
||||||
|
regex: ";.*$"
|
||||||
|
};
|
||||||
|
this.comments = [
|
||||||
|
{
|
||||||
|
token: "punctuation.definition.comment.begin.csound",
|
||||||
|
regex: "/\\*",
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "punctuation.definition.comment.end.csound",
|
||||||
|
regex: "\\*/",
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment.block.csound"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "comment.line.double-slash.csound",
|
||||||
|
regex: "//.*$"
|
||||||
|
},
|
||||||
|
this.semicolonComments
|
||||||
|
];
|
||||||
|
this.macroUses = [
|
||||||
|
{
|
||||||
|
token: ["entity.name.function.preprocessor.csound", "punctuation.definition.macro-parameter-value-list.begin.csound"],
|
||||||
|
regex: /(\$[A-Z_a-z]\w*\.?)(\()/,
|
||||||
|
next: "macro parameter value list"
|
||||||
|
}, {
|
||||||
|
token: "entity.name.function.preprocessor.csound",
|
||||||
|
regex: /\$[A-Z_a-z]\w*(?:\.|\b)/
|
||||||
|
}
|
||||||
|
];
|
||||||
|
this.numbers = [
|
||||||
|
{
|
||||||
|
token: "constant.numeric.float.csound",
|
||||||
|
regex: /(?:\d+[Ee][+-]?\d+)|(?:\d+\.\d*|\d*\.\d+)(?:[Ee][+-]?\d+)?/
|
||||||
|
}, {
|
||||||
|
token: ["storage.type.number.csound", "constant.numeric.integer.hexadecimal.csound"],
|
||||||
|
regex: /(0[Xx])([0-9A-Fa-f]+)/
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric.integer.decimal.csound",
|
||||||
|
regex: /\d+/
|
||||||
|
}
|
||||||
|
];
|
||||||
|
this.bracedStringContents = [
|
||||||
|
{
|
||||||
|
token: "constant.character.escape.csound",
|
||||||
|
regex: /\\(?:[\\abnrt"]|[0-7]{1,3})/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.character.placeholder.csound",
|
||||||
|
regex: /%[#0\- +]*\d*(?:\.\d+)?[diuoxXfFeEgGaAcs]/
|
||||||
|
}, {
|
||||||
|
token: "constant.character.escape.csound",
|
||||||
|
regex: /%%/
|
||||||
|
}
|
||||||
|
];
|
||||||
|
this.quotedStringContents = [
|
||||||
|
this.macroUses,
|
||||||
|
this.bracedStringContents
|
||||||
|
];
|
||||||
|
var start = [
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "keyword.preprocessor.csound",
|
||||||
|
regex: /#(?:e(?:nd(?:if)?|lse)\b|##)|@@?[ \t]*\d+/
|
||||||
|
}, {
|
||||||
|
token: "keyword.preprocessor.csound",
|
||||||
|
regex: /#include/,
|
||||||
|
push: [
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "string.csound",
|
||||||
|
regex: /([^ \t])(?:.*?\1)/,
|
||||||
|
next: "pop"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "keyword.preprocessor.csound",
|
||||||
|
regex: /#includestr/,
|
||||||
|
push: [
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "string.csound",
|
||||||
|
regex: /([^ \t])(?:.*?\1)/,
|
||||||
|
next: "pop"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "keyword.preprocessor.csound",
|
||||||
|
regex: /#[ \t]*define/,
|
||||||
|
next: "define directive"
|
||||||
|
}, {
|
||||||
|
token: "keyword.preprocessor.csound",
|
||||||
|
regex: /#(?:ifn?def|undef)\b/,
|
||||||
|
next: "macro directive"
|
||||||
|
},
|
||||||
|
this.macroUses
|
||||||
|
];
|
||||||
|
this.$rules = {
|
||||||
|
"start": start,
|
||||||
|
"define directive": [
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "entity.name.function.preprocessor.csound",
|
||||||
|
regex: /[A-Z_a-z]\w*/
|
||||||
|
}, {
|
||||||
|
token: "punctuation.definition.macro-parameter-name-list.begin.csound",
|
||||||
|
regex: /\(/,
|
||||||
|
next: "macro parameter name list"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.definition.macro.begin.csound",
|
||||||
|
regex: /#/,
|
||||||
|
next: "macro body"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"macro parameter name list": [
|
||||||
|
{
|
||||||
|
token: "variable.parameter.preprocessor.csound",
|
||||||
|
regex: /[A-Z_a-z]\w*/
|
||||||
|
}, {
|
||||||
|
token: "punctuation.definition.macro-parameter-name-list.end.csound",
|
||||||
|
regex: /\)/,
|
||||||
|
next: "define directive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"macro body": [
|
||||||
|
{
|
||||||
|
token: "constant.character.escape.csound",
|
||||||
|
regex: /\\#/
|
||||||
|
}, {
|
||||||
|
token: "punctuation.definition.macro.end.csound",
|
||||||
|
regex: /#/,
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
start
|
||||||
|
],
|
||||||
|
"macro directive": [
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "entity.name.function.preprocessor.csound",
|
||||||
|
regex: /[A-Z_a-z]\w*/,
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"macro parameter value list": [
|
||||||
|
{
|
||||||
|
token: "punctuation.definition.macro-parameter-value-list.end.csound",
|
||||||
|
regex: /\)/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.definition.string.begin.csound",
|
||||||
|
regex: /"/,
|
||||||
|
next: "macro parameter value quoted string"
|
||||||
|
}, this.pushRule({
|
||||||
|
token: "punctuation.macro-parameter-value-parenthetical.begin.csound",
|
||||||
|
regex: /\(/,
|
||||||
|
next: "macro parameter value parenthetical"
|
||||||
|
}), {
|
||||||
|
token: "punctuation.macro-parameter-value-separator.csound",
|
||||||
|
regex: "[#']"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"macro parameter value quoted string": [
|
||||||
|
{
|
||||||
|
token: "constant.character.escape.csound",
|
||||||
|
regex: /\\[#'()]/
|
||||||
|
}, {
|
||||||
|
token: "invalid.illegal.csound",
|
||||||
|
regex: /[#'()]/
|
||||||
|
}, {
|
||||||
|
token: "punctuation.definition.string.end.csound",
|
||||||
|
regex: /"/,
|
||||||
|
next: "macro parameter value list"
|
||||||
|
},
|
||||||
|
this.quotedStringContents,
|
||||||
|
{
|
||||||
|
defaultToken: "string.quoted.csound"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"macro parameter value parenthetical": [
|
||||||
|
{
|
||||||
|
token: "constant.character.escape.csound",
|
||||||
|
regex: /\\\)/
|
||||||
|
}, this.popRule({
|
||||||
|
token: "punctuation.macro-parameter-value-parenthetical.end.csound",
|
||||||
|
regex: /\)/
|
||||||
|
}), this.pushRule({
|
||||||
|
token: "punctuation.macro-parameter-value-parenthetical.begin.csound",
|
||||||
|
regex: /\(/,
|
||||||
|
next: "macro parameter value parenthetical"
|
||||||
|
}),
|
||||||
|
start
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);
|
||||||
|
(function () {
|
||||||
|
this.pushRule = function (params) {
|
||||||
|
if (Array.isArray(params.next)) {
|
||||||
|
for (var i = 0; i < params.next.length; i++) {
|
||||||
|
params.next[i] = this.embeddedRulePrefix + params.next[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
regex: params.regex, onMatch: function (value, currentState, stack, line) {
|
||||||
|
if (stack.length === 0)
|
||||||
|
stack.push(currentState);
|
||||||
|
if (Array.isArray(params.next)) {
|
||||||
|
for (var i = 0; i < params.next.length; i++) {
|
||||||
|
stack.push(params.next[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
stack.push(params.next);
|
||||||
|
}
|
||||||
|
this.next = stack[stack.length - 1];
|
||||||
|
return params.token;
|
||||||
|
},
|
||||||
|
get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },
|
||||||
|
set next(next) {
|
||||||
|
if (!Array.isArray(params.next)) {
|
||||||
|
params.next = next;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
get token() { return params.token; }
|
||||||
|
};
|
||||||
|
};
|
||||||
|
this.popRule = function (params) {
|
||||||
|
if (params.next) {
|
||||||
|
params.next = this.embeddedRulePrefix + params.next;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
regex: params.regex, onMatch: function (value, currentState, stack, line) {
|
||||||
|
stack.pop();
|
||||||
|
if (params.next) {
|
||||||
|
stack.push(params.next);
|
||||||
|
this.next = stack[stack.length - 1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();
|
||||||
|
}
|
||||||
|
return params.token;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}).call(CsoundPreprocessorHighlightRules.prototype);
|
||||||
|
exports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/csound_score_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/csound_preprocessor_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var CsoundPreprocessorHighlightRules = require("./csound_preprocessor_highlight_rules").CsoundPreprocessorHighlightRules;
|
||||||
|
var CsoundScoreHighlightRules = function (embeddedRulePrefix) {
|
||||||
|
CsoundPreprocessorHighlightRules.call(this, embeddedRulePrefix);
|
||||||
|
this.quotedStringContents.push({
|
||||||
|
token: "invalid.illegal.csound-score",
|
||||||
|
regex: /[^"]*$/
|
||||||
|
});
|
||||||
|
var start = this.$rules.start;
|
||||||
|
start.push({
|
||||||
|
token: "keyword.control.csound-score",
|
||||||
|
regex: /[aBbCdefiqstvxy]/
|
||||||
|
}, {
|
||||||
|
token: "invalid.illegal.csound-score",
|
||||||
|
regex: /w/
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric.language.csound-score",
|
||||||
|
regex: /z/
|
||||||
|
}, {
|
||||||
|
token: ["keyword.control.csound-score", "constant.numeric.integer.decimal.csound-score"],
|
||||||
|
regex: /([nNpP][pP])(\d+)/
|
||||||
|
}, {
|
||||||
|
token: "keyword.other.csound-score",
|
||||||
|
regex: /[mn]/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "empty",
|
||||||
|
regex: /$/,
|
||||||
|
next: "pop"
|
||||||
|
},
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "entity.name.label.csound-score",
|
||||||
|
regex: /[A-Z_a-z]\w*/
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "keyword.preprocessor.csound-score",
|
||||||
|
regex: /r\b/,
|
||||||
|
next: "repeat section"
|
||||||
|
}, this.numbers, {
|
||||||
|
token: "keyword.operator.csound-score",
|
||||||
|
regex: "[!+\\-*/^%&|<>#~.]"
|
||||||
|
}, this.pushRule({
|
||||||
|
token: "punctuation.definition.string.begin.csound-score",
|
||||||
|
regex: /"/,
|
||||||
|
next: "quoted string"
|
||||||
|
}), this.pushRule({
|
||||||
|
token: "punctuation.braced-loop.begin.csound-score",
|
||||||
|
regex: /{/,
|
||||||
|
next: "loop after left brace"
|
||||||
|
}));
|
||||||
|
this.addRules({
|
||||||
|
"repeat section": [
|
||||||
|
{
|
||||||
|
token: "empty",
|
||||||
|
regex: /$/,
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "constant.numeric.integer.decimal.csound-score",
|
||||||
|
regex: /\d+/,
|
||||||
|
next: "repeat section before label"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat section before label": [
|
||||||
|
{
|
||||||
|
token: "empty",
|
||||||
|
regex: /$/,
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "entity.name.label.csound-score",
|
||||||
|
regex: /[A-Z_a-z]\w*/,
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"quoted string": [
|
||||||
|
this.popRule({
|
||||||
|
token: "punctuation.definition.string.end.csound-score",
|
||||||
|
regex: /"/
|
||||||
|
}),
|
||||||
|
this.quotedStringContents,
|
||||||
|
{
|
||||||
|
defaultToken: "string.quoted.csound-score"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"loop after left brace": [
|
||||||
|
this.popRule({
|
||||||
|
token: "constant.numeric.integer.decimal.csound-score",
|
||||||
|
regex: /\d+/,
|
||||||
|
next: "loop after repeat count"
|
||||||
|
}),
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "invalid.illegal.csound",
|
||||||
|
regex: /\S.*/
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"loop after repeat count": [
|
||||||
|
this.popRule({
|
||||||
|
token: "entity.name.function.preprocessor.csound-score",
|
||||||
|
regex: /[A-Z_a-z]\w*\b/,
|
||||||
|
next: "loop after macro name"
|
||||||
|
}),
|
||||||
|
this.comments,
|
||||||
|
{
|
||||||
|
token: "invalid.illegal.csound",
|
||||||
|
regex: /\S.*/
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"loop after macro name": [
|
||||||
|
start,
|
||||||
|
this.popRule({
|
||||||
|
token: "punctuation.braced-loop.end.csound-score",
|
||||||
|
regex: /}/
|
||||||
|
})
|
||||||
|
]
|
||||||
|
});
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);
|
||||||
|
exports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/csound_score",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/csound_score_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var CsoundScoreHighlightRules = require("./csound_score_highlight_rules").CsoundScoreHighlightRules;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = CsoundScoreHighlightRules;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = ";";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.$id = "ace/mode/csound_score";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/csound_score"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
define("ace/mode/csp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/*
|
||||||
|
EXPLANATION
|
||||||
|
|
||||||
|
This highlight rules were created to help developer spot typos when working
|
||||||
|
with Content-Security-Policy (CSP). See:
|
||||||
|
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var CspHighlightRules = function () {
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"constant.language": "child-src|connect-src|default-src|font-src|frame-src|img-src|manifest-src|media-src|object-src"
|
||||||
|
+ "|script-src|style-src|worker-src|base-uri|plugin-types|sandbox|disown-opener|form-action|frame-ancestors|report-uri"
|
||||||
|
+ "|report-to|upgrade-insecure-requests|block-all-mixed-content|require-sri-for|reflected-xss|referrer|policy-uri",
|
||||||
|
"variable": "'none'|'self'|'unsafe-inline'|'unsafe-eval'|'strict-dynamic'|'unsafe-hashed-attributes'"
|
||||||
|
}, "identifier", true);
|
||||||
|
this.$rules = {
|
||||||
|
start: [{
|
||||||
|
token: "string.link",
|
||||||
|
regex: /https?:[^;\s]*/
|
||||||
|
}, {
|
||||||
|
token: "operator.punctuation",
|
||||||
|
regex: /;/
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: /[^\s;]+/
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(CspHighlightRules, TextHighlightRules);
|
||||||
|
exports.CspHighlightRules = CspHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/csp",["require","exports","module","ace/mode/text","ace/mode/csp_highlight_rules","ace/lib/oop"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var CspHighlightRules = require("./csp_highlight_rules").CspHighlightRules;
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = CspHighlightRules;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/csp";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/csp"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,632 @@
|
||||||
|
define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var lang = require("../lib/lang");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index";
|
||||||
|
var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
|
||||||
|
var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom";
|
||||||
|
var supportConstantColor = exports.supportConstantColor = "aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen";
|
||||||
|
var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
|
||||||
|
var numRe = exports.numRe = "\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))";
|
||||||
|
var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
|
||||||
|
var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b";
|
||||||
|
var CssHighlightRules = function () {
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"support.function": supportFunction,
|
||||||
|
"support.constant": supportConstant,
|
||||||
|
"support.type": supportType,
|
||||||
|
"support.constant.color": supportConstantColor,
|
||||||
|
"support.constant.fonts": supportConstantFonts
|
||||||
|
}, "text", true);
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
include: ["strings", "url", "comments"]
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "\\{",
|
||||||
|
next: "ruleset"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "\\}"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "@(?!viewport)",
|
||||||
|
next: "media"
|
||||||
|
}, {
|
||||||
|
token: "keyword",
|
||||||
|
regex: "#[a-z0-9-_]+"
|
||||||
|
}, {
|
||||||
|
token: "keyword",
|
||||||
|
regex: "%"
|
||||||
|
}, {
|
||||||
|
token: "variable",
|
||||||
|
regex: "\\.[a-z0-9-_]+"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: ":[a-z0-9-_]+"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: numRe
|
||||||
|
}, {
|
||||||
|
token: "constant",
|
||||||
|
regex: "[a-z0-9-_]+"
|
||||||
|
}, {
|
||||||
|
caseInsensitive: true
|
||||||
|
}],
|
||||||
|
"media": [{
|
||||||
|
include: ["strings", "url", "comments"]
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "\\{",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "\\}",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: ";",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "keyword",
|
||||||
|
regex: "(?:media|supports|document|charset|import|namespace|media|supports|document"
|
||||||
|
+ "|page|font|keyframes|viewport|counter-style|font-feature-values"
|
||||||
|
+ "|swash|ornaments|annotation|stylistic|styleset|character-variant)"
|
||||||
|
}],
|
||||||
|
"comments": [{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
push: [{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"ruleset": [{
|
||||||
|
regex: "-(webkit|ms|moz|o)-",
|
||||||
|
token: "text"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "[:;]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "\\}",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
include: ["strings", "url", "comments"]
|
||||||
|
}, {
|
||||||
|
token: ["constant.numeric", "keyword"],
|
||||||
|
regex: "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: numRe
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex6 color
|
||||||
|
regex: "#[a-f0-9]{6}"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex3 color
|
||||||
|
regex: "#[a-f0-9]{3}"
|
||||||
|
}, {
|
||||||
|
token: ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
|
||||||
|
regex: pseudoElements
|
||||||
|
}, {
|
||||||
|
token: ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
|
||||||
|
regex: pseudoClasses
|
||||||
|
}, {
|
||||||
|
include: "url"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "\\{"
|
||||||
|
}, {
|
||||||
|
caseInsensitive: true
|
||||||
|
}],
|
||||||
|
url: [{
|
||||||
|
token: "support.function",
|
||||||
|
regex: "(?:url(:?-prefix)?|domain|regexp)\\(",
|
||||||
|
push: [{
|
||||||
|
token: "support.function",
|
||||||
|
regex: "\\)",
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
strings: [{
|
||||||
|
token: "string.start",
|
||||||
|
regex: "'",
|
||||||
|
push: [{
|
||||||
|
token: "string.end",
|
||||||
|
regex: "'|$",
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "escapes"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\$/,
|
||||||
|
consumeLineEnd: true
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: '"',
|
||||||
|
push: [{
|
||||||
|
token: "string.end",
|
||||||
|
regex: '"|$',
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "escapes"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\$/,
|
||||||
|
consumeLineEnd: true
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
escapes: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(CssHighlightRules, TextHighlightRules);
|
||||||
|
exports.CssHighlightRules = CssHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module){"use strict";
|
||||||
|
var propertyMap = {
|
||||||
|
"background": { "#$0": 1 },
|
||||||
|
"background-color": { "#$0": 1, "transparent": 1, "fixed": 1 },
|
||||||
|
"background-image": { "url('/$0')": 1 },
|
||||||
|
"background-repeat": { "repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1 },
|
||||||
|
"background-position": { "bottom": 2, "center": 2, "left": 2, "right": 2, "top": 2, "inherit": 2 },
|
||||||
|
"background-attachment": { "scroll": 1, "fixed": 1 },
|
||||||
|
"background-size": { "cover": 1, "contain": 1 },
|
||||||
|
"background-clip": { "border-box": 1, "padding-box": 1, "content-box": 1 },
|
||||||
|
"background-origin": { "border-box": 1, "padding-box": 1, "content-box": 1 },
|
||||||
|
"border": { "solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1 },
|
||||||
|
"border-color": { "#$0": 1 },
|
||||||
|
"border-style": { "solid": 2, "dashed": 2, "dotted": 2, "double": 2, "groove": 2, "hidden": 2, "inherit": 2, "inset": 2, "none": 2, "outset": 2, "ridged": 2 },
|
||||||
|
"border-collapse": { "collapse": 1, "separate": 1 },
|
||||||
|
"bottom": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"clear": { "left": 1, "right": 1, "both": 1, "none": 1 },
|
||||||
|
"color": { "#$0": 1, "rgb(#$00,0,0)": 1 },
|
||||||
|
"cursor": { "default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1 },
|
||||||
|
"display": { "none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1 },
|
||||||
|
"empty-cells": { "show": 1, "hide": 1 },
|
||||||
|
"float": { "left": 1, "right": 1, "none": 1 },
|
||||||
|
"font-family": { "Arial": 2, "Comic Sans MS": 2, "Consolas": 2, "Courier New": 2, "Courier": 2, "Georgia": 2, "Monospace": 2, "Sans-Serif": 2, "Segoe UI": 2, "Tahoma": 2, "Times New Roman": 2, "Trebuchet MS": 2, "Verdana": 1 },
|
||||||
|
"font-size": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"font-weight": { "bold": 1, "normal": 1 },
|
||||||
|
"font-style": { "italic": 1, "normal": 1 },
|
||||||
|
"font-variant": { "normal": 1, "small-caps": 1 },
|
||||||
|
"height": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"left": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"letter-spacing": { "normal": 1 },
|
||||||
|
"line-height": { "normal": 1 },
|
||||||
|
"list-style-type": { "none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1 },
|
||||||
|
"margin": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"margin-right": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"margin-left": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"margin-top": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"margin-bottom": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"max-height": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"max-width": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"min-height": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"min-width": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"overflow": { "hidden": 1, "visible": 1, "auto": 1, "scroll": 1 },
|
||||||
|
"overflow-x": { "hidden": 1, "visible": 1, "auto": 1, "scroll": 1 },
|
||||||
|
"overflow-y": { "hidden": 1, "visible": 1, "auto": 1, "scroll": 1 },
|
||||||
|
"padding": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"padding-top": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"padding-right": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"padding-bottom": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"padding-left": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"page-break-after": { "auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1 },
|
||||||
|
"page-break-before": { "auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1 },
|
||||||
|
"position": { "absolute": 1, "relative": 1, "fixed": 1, "static": 1 },
|
||||||
|
"right": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"table-layout": { "fixed": 1, "auto": 1 },
|
||||||
|
"text-decoration": { "none": 1, "underline": 1, "line-through": 1, "blink": 1 },
|
||||||
|
"text-align": { "left": 1, "right": 1, "center": 1, "justify": 1 },
|
||||||
|
"text-transform": { "capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1 },
|
||||||
|
"top": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"vertical-align": { "top": 1, "bottom": 1 },
|
||||||
|
"visibility": { "hidden": 1, "visible": 1 },
|
||||||
|
"white-space": { "nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1 },
|
||||||
|
"width": { "px": 1, "em": 1, "%": 1 },
|
||||||
|
"word-spacing": { "normal": 1 },
|
||||||
|
"filter": { "alpha(opacity=$0100)": 1 },
|
||||||
|
"text-shadow": { "$02px 2px 2px #777": 1 },
|
||||||
|
"text-overflow": { "ellipsis-word": 1, "clip": 1, "ellipsis": 1 },
|
||||||
|
"-moz-border-radius": 1,
|
||||||
|
"-moz-border-radius-topright": 1,
|
||||||
|
"-moz-border-radius-bottomright": 1,
|
||||||
|
"-moz-border-radius-topleft": 1,
|
||||||
|
"-moz-border-radius-bottomleft": 1,
|
||||||
|
"-webkit-border-radius": 1,
|
||||||
|
"-webkit-border-top-right-radius": 1,
|
||||||
|
"-webkit-border-top-left-radius": 1,
|
||||||
|
"-webkit-border-bottom-right-radius": 1,
|
||||||
|
"-webkit-border-bottom-left-radius": 1,
|
||||||
|
"-moz-box-shadow": 1,
|
||||||
|
"-webkit-box-shadow": 1,
|
||||||
|
"transform": { "rotate($00deg)": 1, "skew($00deg)": 1 },
|
||||||
|
"-moz-transform": { "rotate($00deg)": 1, "skew($00deg)": 1 },
|
||||||
|
"-webkit-transform": { "rotate($00deg)": 1, "skew($00deg)": 1 }
|
||||||
|
};
|
||||||
|
var CssCompletions = function () {
|
||||||
|
};
|
||||||
|
(function () {
|
||||||
|
this.completionsDefined = false;
|
||||||
|
this.defineCompletions = function () {
|
||||||
|
if (document) {
|
||||||
|
var style = document.createElement('c').style;
|
||||||
|
for (var i in style) {
|
||||||
|
if (typeof style[i] !== 'string')
|
||||||
|
continue;
|
||||||
|
var name = i.replace(/[A-Z]/g, function (x) {
|
||||||
|
return '-' + x.toLowerCase();
|
||||||
|
});
|
||||||
|
if (!propertyMap.hasOwnProperty(name))
|
||||||
|
propertyMap[name] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.completionsDefined = true;
|
||||||
|
};
|
||||||
|
this.getCompletions = function (state, session, pos, prefix) {
|
||||||
|
if (!this.completionsDefined) {
|
||||||
|
this.defineCompletions();
|
||||||
|
}
|
||||||
|
if (state === 'ruleset' || session.$mode.$id == "ace/mode/scss") {
|
||||||
|
var line = session.getLine(pos.row).substr(0, pos.column);
|
||||||
|
var inParens = /\([^)]*$/.test(line);
|
||||||
|
if (inParens) {
|
||||||
|
line = line.substr(line.lastIndexOf('(') + 1);
|
||||||
|
}
|
||||||
|
if (/:[^;]+$/.test(line)) {
|
||||||
|
/([\w\-]+):[^:]*$/.test(line);
|
||||||
|
return this.getPropertyValueCompletions(state, session, pos, prefix);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return this.getPropertyCompletions(state, session, pos, prefix, inParens);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
};
|
||||||
|
this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {
|
||||||
|
skipSemicolon = skipSemicolon || false;
|
||||||
|
var properties = Object.keys(propertyMap);
|
||||||
|
return properties.map(function (property) {
|
||||||
|
return {
|
||||||
|
caption: property,
|
||||||
|
snippet: property + ': $0' + (skipSemicolon ? '' : ';'),
|
||||||
|
meta: "property",
|
||||||
|
score: 1000000
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
this.getPropertyValueCompletions = function (state, session, pos, prefix) {
|
||||||
|
var line = session.getLine(pos.row).substr(0, pos.column);
|
||||||
|
var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1];
|
||||||
|
if (!property)
|
||||||
|
return [];
|
||||||
|
var values = [];
|
||||||
|
if (property in propertyMap && typeof propertyMap[property] === "object") {
|
||||||
|
values = Object.keys(propertyMap[property]);
|
||||||
|
}
|
||||||
|
return values.map(function (value) {
|
||||||
|
return {
|
||||||
|
caption: value,
|
||||||
|
snippet: value,
|
||||||
|
meta: "property value",
|
||||||
|
score: 1000000
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}).call(CssCompletions.prototype);
|
||||||
|
exports.CssCompletions = CssCompletions;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var Behaviour = require("../behaviour").Behaviour;
|
||||||
|
var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
|
||||||
|
var TokenIterator = require("../../token_iterator").TokenIterator;
|
||||||
|
var CssBehaviour = function () {
|
||||||
|
this.inherit(CstyleBehaviour);
|
||||||
|
this.add("colon", "insertion", function (state, action, editor, session, text) {
|
||||||
|
if (text === ':' && editor.selection.isEmpty()) {
|
||||||
|
var cursor = editor.getCursorPosition();
|
||||||
|
var iterator = new TokenIterator(session, cursor.row, cursor.column);
|
||||||
|
var token = iterator.getCurrentToken();
|
||||||
|
if (token && token.value.match(/\s+/)) {
|
||||||
|
token = iterator.stepBackward();
|
||||||
|
}
|
||||||
|
if (token && token.type === 'support.type') {
|
||||||
|
var line = session.doc.getLine(cursor.row);
|
||||||
|
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||||
|
if (rightChar === ':') {
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
selection: [1, 1]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (/^(\s+[^;]|\s*$)/.test(line.substring(cursor.column))) {
|
||||||
|
return {
|
||||||
|
text: ':;',
|
||||||
|
selection: [1, 1]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.add("colon", "deletion", function (state, action, editor, session, range) {
|
||||||
|
var selected = session.doc.getTextRange(range);
|
||||||
|
if (!range.isMultiLine() && selected === ':') {
|
||||||
|
var cursor = editor.getCursorPosition();
|
||||||
|
var iterator = new TokenIterator(session, cursor.row, cursor.column);
|
||||||
|
var token = iterator.getCurrentToken();
|
||||||
|
if (token && token.value.match(/\s+/)) {
|
||||||
|
token = iterator.stepBackward();
|
||||||
|
}
|
||||||
|
if (token && token.type === 'support.type') {
|
||||||
|
var line = session.doc.getLine(range.start.row);
|
||||||
|
var rightChar = line.substring(range.end.column, range.end.column + 1);
|
||||||
|
if (rightChar === ';') {
|
||||||
|
range.end.column++;
|
||||||
|
return range;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.add("semicolon", "insertion", function (state, action, editor, session, text) {
|
||||||
|
if (text === ';' && editor.selection.isEmpty()) {
|
||||||
|
var cursor = editor.getCursorPosition();
|
||||||
|
var line = session.doc.getLine(cursor.row);
|
||||||
|
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||||
|
if (rightChar === ';') {
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
selection: [1, 1]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.add("!important", "insertion", function (state, action, editor, session, text) {
|
||||||
|
if (text === '!' && editor.selection.isEmpty()) {
|
||||||
|
var cursor = editor.getCursorPosition();
|
||||||
|
var line = session.doc.getLine(cursor.row);
|
||||||
|
if (/^\s*(;|}|$)/.test(line.substring(cursor.column))) {
|
||||||
|
return {
|
||||||
|
text: '!important',
|
||||||
|
selection: [10, 10]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
oop.inherits(CssBehaviour, CstyleBehaviour);
|
||||||
|
exports.CssBehaviour = CssBehaviour;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
||||||
|
var CssCompletions = require("./css_completions").CssCompletions;
|
||||||
|
var CssBehaviour = require("./behaviour/css").CssBehaviour;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = CssHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.$behaviour = new CssBehaviour();
|
||||||
|
this.$completer = new CssCompletions();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.foldingRules = "cStyle";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
var match = line.match(/^.*\{\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.getCompletions = function (state, session, pos, prefix) {
|
||||||
|
return this.$completer.getCompletions(state, session, pos, prefix);
|
||||||
|
};
|
||||||
|
this.createWorker = function (session) {
|
||||||
|
var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
|
||||||
|
worker.attachToDocument(session.getDocument());
|
||||||
|
worker.on("annotate", function (e) {
|
||||||
|
session.setAnnotations(e.data);
|
||||||
|
});
|
||||||
|
worker.on("terminate", function () {
|
||||||
|
session.clearAnnotations();
|
||||||
|
});
|
||||||
|
return worker;
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/css";
|
||||||
|
this.snippetFileId = "ace/snippets/css";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/css"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,56 @@
|
||||||
|
define("ace/mode/cuttlefish_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 CuttlefishHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
start: [{
|
||||||
|
token: ['text', 'comment'],
|
||||||
|
regex: /^([ \t]*)(#.*)$/
|
||||||
|
}, {
|
||||||
|
token: ['text', 'keyword', 'text', 'string', 'text', 'comment'],
|
||||||
|
regex: /^([ \t]*)(include)([ \t]*)([A-Za-z0-9-\_\.\*\/]+)([ \t]*)(#.*)?$/
|
||||||
|
}, {
|
||||||
|
token: ['text', 'keyword', 'text', 'operator', 'text', 'string', 'text', 'comment'],
|
||||||
|
regex: /^([ \t]*)([A-Za-z0-9-_]+(?:\.[A-Za-z0-9-_]+)*)([ \t]*)(=)([ \t]*)([^ \t#][^#]*?)([ \t]*)(#.*)?$/
|
||||||
|
}, {
|
||||||
|
defaultToken: 'invalid'
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
CuttlefishHighlightRules.metaData = {
|
||||||
|
fileTypes: ['conf'],
|
||||||
|
keyEquivalent: '^~C',
|
||||||
|
name: 'Cuttlefish',
|
||||||
|
scopeName: 'source.conf'
|
||||||
|
};
|
||||||
|
oop.inherits(CuttlefishHighlightRules, TextHighlightRules);
|
||||||
|
exports.CuttlefishHighlightRules = CuttlefishHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/cuttlefish",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/cuttlefish_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var CuttlefishHighlightRules = require("./cuttlefish_highlight_rules").CuttlefishHighlightRules;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = CuttlefishHighlightRules;
|
||||||
|
this.foldingRules = null;
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "#";
|
||||||
|
this.blockComment = null;
|
||||||
|
this.$id = "ace/mode/cuttlefish";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/cuttlefish"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,450 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/d_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var DHighlightRules = function () {
|
||||||
|
var keywords = ("this|super|import|module|body|mixin|__traits|invariant|alias|asm|delete|" +
|
||||||
|
"typeof|typeid|sizeof|cast|new|in|is|typedef|__vector|__parameters");
|
||||||
|
var keywordControls = ("break|case|continue|default|do|else|for|foreach|foreach_reverse|goto|if|" +
|
||||||
|
"return|switch|while|catch|try|throw|finally|version|assert|unittest|with");
|
||||||
|
var types = ("auto|bool|char|dchar|wchar|byte|ubyte|float|double|real|" +
|
||||||
|
"cfloat|creal|cdouble|cent|ifloat|ireal|idouble|" +
|
||||||
|
"int|long|short|void|uint|ulong|ushort|ucent|" +
|
||||||
|
"function|delegate|string|wstring|dstring|size_t|ptrdiff_t|hash_t|Object");
|
||||||
|
var modifiers = ("abstract|align|debug|deprecated|export|extern|const|final|in|inout|out|" +
|
||||||
|
"ref|immutable|lazy|nothrow|override|package|pragma|private|protected|" +
|
||||||
|
"public|pure|scope|shared|__gshared|synchronized|static|volatile");
|
||||||
|
var storages = ("class|struct|union|template|interface|enum|macro");
|
||||||
|
var stringEscapesSeq = {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: "\\\\(?:(?:x[0-9A-F]{2})|(?:[0-7]{1,3})|(?:['\"\\?0abfnrtv\\\\])|" +
|
||||||
|
"(?:u[0-9a-fA-F]{4})|(?:U[0-9a-fA-F]{8}))"
|
||||||
|
};
|
||||||
|
var builtinConstants = ("null|true|false|" +
|
||||||
|
"__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__|" +
|
||||||
|
"__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__");
|
||||||
|
var operators = ("/|/\\=|&|&\\=|&&|\\|\\|\\=|\\|\\||\\-|\\-\\=|\\-\\-|\\+|" +
|
||||||
|
"\\+\\=|\\+\\+|\\<|\\<\\=|\\<\\<|\\<\\<\\=|\\<\\>|\\<\\>\\=|\\>|\\>\\=|\\>\\>\\=|" +
|
||||||
|
"\\>\\>\\>\\=|\\>\\>|\\>\\>\\>|\\!|\\!\\=|\\!\\<\\>|\\!\\<\\>\\=|\\!\\<|\\!\\<\\=|" +
|
||||||
|
"\\!\\>|\\!\\>\\=|\\?|\\$|\\=|\\=\\=|\\*|\\*\\=|%|%\\=|" +
|
||||||
|
"\\^|\\^\\=|\\^\\^|\\^\\^\\=|~|~\\=|\\=\\>|#");
|
||||||
|
var keywordMapper = this.$keywords = this.createKeywordMapper({
|
||||||
|
"keyword.modifier": modifiers,
|
||||||
|
"keyword.control": keywordControls,
|
||||||
|
"keyword.type": types,
|
||||||
|
"keyword": keywords,
|
||||||
|
"keyword.storage": storages,
|
||||||
|
"punctation": "\\.|\\,|;|\\.\\.|\\.\\.\\.",
|
||||||
|
"keyword.operator": operators,
|
||||||
|
"constant.language": builtinConstants
|
||||||
|
}, "identifier");
|
||||||
|
var identifierRe = "[a-zA-Z_\u00a1-\uffff][a-zA-Z\\d_\u00a1-\uffff]*\\b";
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\/\\/.*$"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "star-comment"
|
||||||
|
}, {
|
||||||
|
token: "comment.shebang",
|
||||||
|
regex: "^\\s*#!.*"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\/\\+",
|
||||||
|
next: "plus-comment"
|
||||||
|
}, {
|
||||||
|
onMatch: function (value, currentState, state) {
|
||||||
|
state.unshift(this.next, value.substr(2));
|
||||||
|
return "string";
|
||||||
|
},
|
||||||
|
regex: 'q"(?:[\\[\\(\\{\\<]+)',
|
||||||
|
next: 'operator-heredoc-string'
|
||||||
|
}, {
|
||||||
|
onMatch: function (value, currentState, state) {
|
||||||
|
state.unshift(this.next, value.substr(2));
|
||||||
|
return "string";
|
||||||
|
},
|
||||||
|
regex: 'q"(?:[a-zA-Z_]+)$',
|
||||||
|
next: 'identifier-heredoc-string'
|
||||||
|
}, {
|
||||||
|
token: "string", // multi line string start
|
||||||
|
regex: '[xr]?"',
|
||||||
|
next: "quote-string"
|
||||||
|
}, {
|
||||||
|
token: "string", // multi line string start
|
||||||
|
regex: '[xr]?`',
|
||||||
|
next: "backtick-string"
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: "[xr]?['](?:(?:\\\\.)|(?:[^'\\\\]))*?['][cdw]?"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "paren.lparen"],
|
||||||
|
regex: /(asm)(\s*)({)/,
|
||||||
|
next: "d-asm"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "paren.lparen", "constant.language"],
|
||||||
|
regex: "(__traits)(\\s*)(\\()(" + identifierRe + ")"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "variable.module"],
|
||||||
|
regex: "(import|module)(\\s+)((?:" + identifierRe + "\\.?)*)"
|
||||||
|
}, {
|
||||||
|
token: ["keyword.storage", "text", "entity.name.type"],
|
||||||
|
regex: "(" + storages + ")(\\s*)(" + identifierRe + ")"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "variable.storage", "text"],
|
||||||
|
regex: "(alias|typedef)(\\s*)(" + identifierRe + ")(\\s*)"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F_]+(l|ul|u|f|F|L|U|UL)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?(l|ul|u|f|F|L|U|UL)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "entity.other.attribute-name",
|
||||||
|
regex: "@" + identifierRe
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_][a-zA-Z0-9_]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: operators
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\?|\\:|\\,|\\;|\\.|\\:"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"star-comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: 'comment'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"plus-comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\+\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: 'comment'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"quote-string": [
|
||||||
|
stringEscapesSeq,
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"[cdw]?',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: 'string'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"backtick-string": [
|
||||||
|
stringEscapesSeq,
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '`[cdw]?',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: 'string'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"operator-heredoc-string": [
|
||||||
|
{
|
||||||
|
onMatch: function (value, currentState, state) {
|
||||||
|
value = value.substring(value.length - 2, value.length - 1);
|
||||||
|
var map = { '>': '<', ']': '[', ')': '(', '}': '{' };
|
||||||
|
if (Object.keys(map).indexOf(value) != -1)
|
||||||
|
value = map[value];
|
||||||
|
if (value != state[1])
|
||||||
|
return "string";
|
||||||
|
state.shift();
|
||||||
|
state.shift();
|
||||||
|
return "string";
|
||||||
|
},
|
||||||
|
regex: '(?:[\\]\\)}>]+)"',
|
||||||
|
next: 'start'
|
||||||
|
}, {
|
||||||
|
token: 'string',
|
||||||
|
regex: '[^\\]\\)}>]+'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"identifier-heredoc-string": [
|
||||||
|
{
|
||||||
|
onMatch: function (value, currentState, state) {
|
||||||
|
value = value.substring(0, value.length - 1);
|
||||||
|
if (value != state[1])
|
||||||
|
return "string";
|
||||||
|
state.shift();
|
||||||
|
state.shift();
|
||||||
|
return "string";
|
||||||
|
},
|
||||||
|
regex: '^(?:[A-Za-z_][a-zA-Z0-9]+)"',
|
||||||
|
next: 'start'
|
||||||
|
}, {
|
||||||
|
token: 'string',
|
||||||
|
regex: '[^\\]\\)}>]+'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"d-asm": [
|
||||||
|
{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "\\}",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: 'keyword.instruction',
|
||||||
|
regex: '[a-zA-Z]+',
|
||||||
|
next: 'd-asm-instruction'
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'd-asm-instruction': [
|
||||||
|
{
|
||||||
|
token: 'constant.language',
|
||||||
|
regex: /AL|AH|AX|EAX|BL|BH|BX|EBX|CL|CH|CX|ECX|DL|DH|DX|EDX|BP|EBP|SP|ESP|DI|EDI|SI|ESI/i
|
||||||
|
}, {
|
||||||
|
token: 'identifier',
|
||||||
|
regex: '[a-zA-Z]+'
|
||||||
|
}, {
|
||||||
|
token: 'string',
|
||||||
|
regex: '"[^"]*"'
|
||||||
|
}, {
|
||||||
|
token: 'comment',
|
||||||
|
regex: '//.*$'
|
||||||
|
}, {
|
||||||
|
token: 'constant.numeric',
|
||||||
|
regex: '[0-9.xA-F]+'
|
||||||
|
}, {
|
||||||
|
token: 'punctuation.operator',
|
||||||
|
regex: '\\,'
|
||||||
|
}, {
|
||||||
|
token: 'punctuation.operator',
|
||||||
|
regex: ';',
|
||||||
|
next: 'd-asm'
|
||||||
|
}, {
|
||||||
|
token: 'text',
|
||||||
|
regex: '\\s+'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
};
|
||||||
|
DHighlightRules.metaData = {
|
||||||
|
comment: 'D language',
|
||||||
|
fileTypes: ['d', 'di'],
|
||||||
|
firstLineMatch: '^#!.*\\b[glr]?dmd\\b.',
|
||||||
|
foldingStartMarker: '(?x)/\\*\\*(?!\\*)|^(?![^{]*?//|[^{]*?/\\*(?!.*?\\*/.*?\\{)).*?\\{\\s*($|//|/\\*(?!.*?\\*/.*\\S))',
|
||||||
|
foldingStopMarker: '(?<!\\*)\\*\\*/|^\\s*\\}',
|
||||||
|
keyEquivalent: '^~D',
|
||||||
|
name: 'D',
|
||||||
|
scopeName: 'source.d'
|
||||||
|
};
|
||||||
|
oop.inherits(DHighlightRules, TextHighlightRules);
|
||||||
|
exports.DHighlightRules = DHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/d",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/d_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var DHighlightRules = require("./d_highlight_rules").DHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = DHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.$id = "ace/mode/d";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/d"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,618 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var cFunctions = exports.cFunctions = "hypot|hypotf|hypotl|sscanf|system|snprintf|scanf|scalbn|scalbnf|scalbnl|scalbln|scalblnf|scalblnl|sin|sinh|sinhf|sinhl|sinf|sinl|signal|signbit|strstr|strspn|strncpy|strncat|strncmp|strcspn|strchr|strcoll|strcpy|strcat|strcmp|strtoimax|strtod|strtoul|strtoull|strtoumax|strtok|strtof|strtol|strtold|strtoll|strerror|strpbrk|strftime|strlen|strrchr|strxfrm|sprintf|setjmp|setvbuf|setlocale|setbuf|sqrt|sqrtf|sqrtl|swscanf|swprintf|srand|nearbyint|nearbyintf|nearbyintl|nexttoward|nexttowardf|nexttowardl|nextafter|nextafterf|nextafterl|nan|nanf|nanl|csin|csinh|csinhf|csinhl|csinf|csinl|csqrt|csqrtf|csqrtl|ccos|ccosh|ccoshf|ccosf|ccosl|cimag|cimagf|cimagl|ctime|ctan|ctanh|ctanhf|ctanhl|ctanf|ctanl|cos|cosh|coshf|coshl|cosf|cosl|conj|conjf|conjl|copysign|copysignf|copysignl|cpow|cpowf|cpowl|cproj|cprojf|cprojl|ceil|ceilf|ceill|cexp|cexpf|cexpl|clock|clog|clogf|clogl|clearerr|casin|casinh|casinhf|casinhl|casinf|casinl|cacos|cacosh|cacoshf|cacoshl|cacosf|cacosl|catan|catanh|catanhf|catanhl|catanf|catanl|calloc|carg|cargf|cargl|cabs|cabsf|cabsl|creal|crealf|creall|cbrt|cbrtf|cbrtl|time|toupper|tolower|tan|tanh|tanhf|tanhl|tanf|tanl|trunc|truncf|truncl|tgamma|tgammaf|tgammal|tmpnam|tmpfile|isspace|isnormal|isnan|iscntrl|isinf|isdigit|isunordered|isupper|ispunct|isprint|isfinite|iswspace|iswcntrl|iswctype|iswdigit|iswupper|iswpunct|iswprint|iswlower|iswalnum|iswalpha|iswgraph|iswxdigit|iswblank|islower|isless|islessequal|islessgreater|isalnum|isalpha|isgreater|isgreaterequal|isgraph|isxdigit|isblank|ilogb|ilogbf|ilogbl|imaxdiv|imaxabs|div|difftime|_Exit|ungetc|ungetwc|pow|powf|powl|puts|putc|putchar|putwc|putwchar|perror|printf|erf|erfc|erfcf|erfcl|erff|erfl|exit|exp|exp2|exp2f|exp2l|expf|expl|expm1|expm1f|expm1l|vsscanf|vsnprintf|vscanf|vsprintf|vswscanf|vswprintf|vprintf|vfscanf|vfprintf|vfwscanf|vfwprintf|vwscanf|vwprintf|va_start|va_copy|va_end|va_arg|qsort|fscanf|fsetpos|fseek|fclose|ftell|fopen|fdim|fdimf|fdiml|fpclassify|fputs|fputc|fputws|fputwc|fprintf|feholdexcept|fesetenv|fesetexceptflag|fesetround|feclearexcept|fetestexcept|feof|feupdateenv|feraiseexcept|ferror|fegetenv|fegetexceptflag|fegetround|fflush|fwscanf|fwide|fwprintf|fwrite|floor|floorf|floorl|fabs|fabsf|fabsl|fgets|fgetc|fgetpos|fgetws|fgetwc|freopen|free|fread|frexp|frexpf|frexpl|fmin|fminf|fminl|fmod|fmodf|fmodl|fma|fmaf|fmal|fmax|fmaxf|fmaxl|ldiv|ldexp|ldexpf|ldexpl|longjmp|localtime|localeconv|log|log1p|log1pf|log1pl|log10|log10f|log10l|log2|log2f|log2l|logf|logl|logb|logbf|logbl|labs|lldiv|llabs|llrint|llrintf|llrintl|llround|llroundf|llroundl|lrint|lrintf|lrintl|lround|lroundf|lroundl|lgamma|lgammaf|lgammal|wscanf|wcsstr|wcsspn|wcsncpy|wcsncat|wcsncmp|wcscspn|wcschr|wcscoll|wcscpy|wcscat|wcscmp|wcstoimax|wcstod|wcstoul|wcstoull|wcstoumax|wcstok|wcstof|wcstol|wcstold|wcstoll|wcstombs|wcspbrk|wcsftime|wcslen|wcsrchr|wcsrtombs|wcsxfrm|wctob|wctomb|wcrtomb|wprintf|wmemset|wmemchr|wmemcpy|wmemcmp|wmemmove|assert|asctime|asin|asinh|asinhf|asinhl|asinf|asinl|acos|acosh|acoshf|acoshl|acosf|acosl|atoi|atof|atol|atoll|atexit|atan|atanh|atanhf|atanhl|atan2|atan2f|atan2l|atanf|atanl|abs|abort|gets|getc|getchar|getenv|getwc|getwchar|gmtime|rint|rintf|rintl|round|roundf|roundl|rename|realloc|rewind|remove|remquo|remquof|remquol|remainder|remainderf|remainderl|rand|raise|bsearch|btowc|modf|modff|modfl|memset|memchr|memcpy|memcmp|memmove|mktime|malloc|mbsinit|mbstowcs|mbsrtowcs|mbtowc|mblen|mbrtowc|mbrlen";
|
||||||
|
var c_cppHighlightRules = function (extraKeywords) {
|
||||||
|
var keywordControls = ("break|case|continue|default|do|else|for|goto|if|_Pragma|" +
|
||||||
|
"return|switch|while|catch|operator|try|throw|using");
|
||||||
|
var storageType = ("asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" +
|
||||||
|
"_Imaginary|int|int8_t|int16_t|int32_t|int64_t|long|short|signed|size_t|struct|typedef|uint8_t|uint16_t|uint32_t|uint64_t|union|unsigned|void|" +
|
||||||
|
"class|wchar_t|template|char16_t|char32_t");
|
||||||
|
var storageModifiers = ("const|extern|register|restrict|static|volatile|inline|private|" +
|
||||||
|
"protected|public|friend|explicit|virtual|export|mutable|typename|" +
|
||||||
|
"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local");
|
||||||
|
var keywordOperators = ("and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|" +
|
||||||
|
"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace");
|
||||||
|
var builtinConstants = ("NULL|true|false|TRUE|FALSE|nullptr");
|
||||||
|
var keywordMapper = this.$keywords = this.createKeywordMapper(Object.assign({
|
||||||
|
"keyword.control": keywordControls,
|
||||||
|
"storage.type": storageType,
|
||||||
|
"storage.modifier": storageModifiers,
|
||||||
|
"keyword.operator": keywordOperators,
|
||||||
|
"variable.language": "this",
|
||||||
|
"constant.language": builtinConstants,
|
||||||
|
"support.function.C99.c": cFunctions
|
||||||
|
}, extraKeywords), "identifier");
|
||||||
|
var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
|
||||||
|
var escapeRe = /\\(?:['"?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}U[a-fA-F\d]{8}|.)/.source;
|
||||||
|
var formatRe = "%"
|
||||||
|
+ /(\d+\$)?/.source // field (argument #)
|
||||||
|
+ /[#0\- +']*/.source // flags
|
||||||
|
+ /[,;:_]?/.source // separator character (AltiVec)
|
||||||
|
+ /((-?\d+)|\*(-?\d+\$)?)?/.source // minimum field width
|
||||||
|
+ /(\.((-?\d+)|\*(-?\d+\$)?)?)?/.source // precision
|
||||||
|
+ /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier
|
||||||
|
+ /(\[[^"\]]+\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "//$",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "//",
|
||||||
|
next: "singleLineComment"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "string", // character
|
||||||
|
regex: "'(?:" + escapeRe + "|.)?'"
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: '"',
|
||||||
|
stateName: "qqstring",
|
||||||
|
next: [
|
||||||
|
{ token: "string", regex: /\\\s*$/, next: "qqstring" },
|
||||||
|
{ token: "constant.language.escape", regex: escapeRe },
|
||||||
|
{ token: "constant.language.escape", regex: formatRe },
|
||||||
|
{ token: "string.end", regex: '"|$', next: "start" },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: 'R"\\(',
|
||||||
|
stateName: "rawString",
|
||||||
|
next: [
|
||||||
|
{ token: "string.end", regex: '\\)"', next: "start" },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // pre-compiler directives
|
||||||
|
regex: "#\\s*(?:include|import|pragma|line|define|undef)\\b",
|
||||||
|
next: "directive"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // special case pre-compiler directive
|
||||||
|
regex: "#\\s*(?:endif|if|ifdef|else|elif|ifndef)\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /--|\+\+|<<=|>>=|>>>=|<>|&&|\|\||\?:|[*%\/+\-&\^|~!<>=]=?/
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\?|\\:|\\,|\\;|\\."
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"singleLineComment": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: /\\$/,
|
||||||
|
next: "singleLineComment"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: /$/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directive": [
|
||||||
|
{
|
||||||
|
token: "constant.other.multiline",
|
||||||
|
regex: /\\/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other.multiline",
|
||||||
|
regex: /.*\\/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other",
|
||||||
|
regex: "\\s*<.+?>",
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other", // single line
|
||||||
|
regex: '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]',
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other", // single line
|
||||||
|
regex: "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']",
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other",
|
||||||
|
regex: /[^\\\/]+/,
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(c_cppHighlightRules, TextHighlightRules);
|
||||||
|
exports.c_cppHighlightRules = c_cppHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = c_cppHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
var endState = tokenizedLine.state;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (state == "doc-start") {
|
||||||
|
if (endState == "start") {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
var match = line.match(/^\s*(\/?)\*/);
|
||||||
|
if (match) {
|
||||||
|
if (match[1]) {
|
||||||
|
indent += " ";
|
||||||
|
}
|
||||||
|
indent += "* ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/c_cpp";
|
||||||
|
this.snippetFileId = "ace/snippets/c_cpp";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/dart_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: 958518BC-799F-477A-99F9-5B28EBF230F6) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var DartHighlightRules = function () {
|
||||||
|
var constantLanguage = "true|false|null";
|
||||||
|
var variableLanguage = "this|super";
|
||||||
|
var keywordControl = "try|catch|finally|throw|rethrow|assert|break|case|continue|default|do|else|for|if|in|return|switch|while|new|deferred|async|await";
|
||||||
|
var keywordDeclaration = "abstract|class|extends|external|factory|implements|get|native|operator|set|typedef|with|enum";
|
||||||
|
var storageModifier = "static|final|const";
|
||||||
|
var storageType = "void|bool|num|int|double|dynamic|var|String";
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"constant.language.dart": constantLanguage,
|
||||||
|
"variable.language.dart": variableLanguage,
|
||||||
|
"keyword.control.dart": keywordControl,
|
||||||
|
"keyword.declaration.dart": keywordDeclaration,
|
||||||
|
"storage.modifier.dart": storageModifier,
|
||||||
|
"storage.type.primitive.dart": storageType
|
||||||
|
}, "identifier");
|
||||||
|
var stringfill = [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\./
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: /\$(?:\w+|{[^"'}]+})?/
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}];
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: /\/\/.*$/
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: /\/\*/,
|
||||||
|
next: "comment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: ["meta.preprocessor.script.dart"],
|
||||||
|
regex: "^(#!.*)$"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "keyword.other.import.dart",
|
||||||
|
regex: "(?:\\b)(?:library|import|export|part|of|show|hide)(?:\\b)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: ["keyword.other.import.dart", "text"],
|
||||||
|
regex: "(?:\\b)(prefix)(\\s*:)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "\\bas\\b",
|
||||||
|
token: "keyword.cast.dart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "\\?|:",
|
||||||
|
token: "keyword.control.ternary.dart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "(?:\\b)(is\\!?)(?:\\b)",
|
||||||
|
token: ["keyword.operator.dart"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "(<<|>>>?|~|\\^|\\||&)",
|
||||||
|
token: ["keyword.operator.bitwise.dart"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "((?:&|\\^|\\||<<|>>>?)=)",
|
||||||
|
token: ["keyword.operator.assignment.bitwise.dart"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "(===?|!==?|<=?|>=?)",
|
||||||
|
token: ["keyword.operator.comparison.dart"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "((?:[+*/%-]|\\~)=)",
|
||||||
|
token: ["keyword.operator.assignment.arithmetic.dart"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "=",
|
||||||
|
token: "keyword.operator.assignment.dart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: "'''",
|
||||||
|
next: "qdoc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"""',
|
||||||
|
next: "qqdoc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: "'",
|
||||||
|
next: "qstring"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"',
|
||||||
|
next: "qqstring"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "(\\-\\-|\\+\\+)",
|
||||||
|
token: ["keyword.operator.increment-decrement.dart"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "(\\-|\\+|\\*|\\/|\\~\\/|%)",
|
||||||
|
token: ["keyword.operator.arithmetic.dart"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regex: "(!|&&|\\|\\|)",
|
||||||
|
token: ["keyword.operator.logical.dart"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"qdoc": [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: "'''",
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
].concat(stringfill),
|
||||||
|
"qqdoc": [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"""',
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
].concat(stringfill),
|
||||||
|
"qstring": [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: "'|$",
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
].concat(stringfill),
|
||||||
|
"qqstring": [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"|$',
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
].concat(stringfill)
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
};
|
||||||
|
oop.inherits(DartHighlightRules, TextHighlightRules);
|
||||||
|
exports.DartHighlightRules = DartHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/dart",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/mode/dart_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var CMode = require("./c_cpp").Mode;
|
||||||
|
var DartHighlightRules = require("./dart_highlight_rules").DartHighlightRules;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
CMode.call(this);
|
||||||
|
this.HighlightRules = DartHighlightRules;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, CMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.$id = "ace/mode/dart";
|
||||||
|
this.snippetFileId = "ace/snippets/dart";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/dart"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,129 @@
|
||||||
|
define("ace/mode/diff_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 DiffHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
regex: "^(?:\\*{15}|={67}|-{3}|\\+{3})$",
|
||||||
|
token: "punctuation.definition.separator.diff",
|
||||||
|
"name": "keyword"
|
||||||
|
}, {
|
||||||
|
regex: "^(@@)(\\s*.+?\\s*)(@@)(.*)$",
|
||||||
|
token: [
|
||||||
|
"constant",
|
||||||
|
"constant.numeric",
|
||||||
|
"constant",
|
||||||
|
"comment.doc.tag"
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
regex: "^(\\d+)([,\\d]+)(a|d|c)(\\d+)([,\\d]+)(.*)$",
|
||||||
|
token: [
|
||||||
|
"constant.numeric",
|
||||||
|
"punctuation.definition.range.diff",
|
||||||
|
"constant.function",
|
||||||
|
"constant.numeric",
|
||||||
|
"punctuation.definition.range.diff",
|
||||||
|
"invalid"
|
||||||
|
],
|
||||||
|
"name": "meta."
|
||||||
|
}, {
|
||||||
|
regex: "^(\\-{3}|\\+{3}|\\*{3})( .+)$",
|
||||||
|
token: [
|
||||||
|
"constant.numeric",
|
||||||
|
"meta.tag"
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
regex: "^([!+>])(.*?)(\\s*)$",
|
||||||
|
token: [
|
||||||
|
"support.constant",
|
||||||
|
"text",
|
||||||
|
"invalid"
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
regex: "^([<\\-])(.*?)(\\s*)$",
|
||||||
|
token: [
|
||||||
|
"support.function",
|
||||||
|
"string",
|
||||||
|
"invalid"
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
regex: "^(diff)(\\s+--\\w+)?(.+?)( .+)?$",
|
||||||
|
token: ["variable", "variable", "keyword", "variable"]
|
||||||
|
}, {
|
||||||
|
regex: "^Index.+$",
|
||||||
|
token: "variable"
|
||||||
|
}, {
|
||||||
|
regex: "^\\s+$",
|
||||||
|
token: "text"
|
||||||
|
}, {
|
||||||
|
regex: "\\s*$",
|
||||||
|
token: "invalid"
|
||||||
|
}, {
|
||||||
|
defaultToken: "invisible",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DiffHighlightRules, TextHighlightRules);
|
||||||
|
exports.DiffHighlightRules = DiffHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/diff",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function (levels, flag) {
|
||||||
|
this.regExpList = levels;
|
||||||
|
this.flag = flag;
|
||||||
|
this.foldingStartMarker = RegExp("^(" + levels.join("|") + ")", this.flag);
|
||||||
|
};
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var start = { row: row, column: line.length };
|
||||||
|
var regList = this.regExpList;
|
||||||
|
for (var i = 1; i <= regList.length; i++) {
|
||||||
|
var re = RegExp("^(" + regList.slice(0, i).join("|") + ")", this.flag);
|
||||||
|
if (re.test(line))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (var l = session.getLength(); ++row < l;) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
if (re.test(line))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (row == start.row + 1)
|
||||||
|
return;
|
||||||
|
return new Range(start.row, start.column, row - 1, line.length);
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/diff",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/diff_highlight_rules","ace/mode/folding/diff"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var HighlightRules = require("./diff_highlight_rules").DiffHighlightRules;
|
||||||
|
var FoldMode = require("./folding/diff").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = HighlightRules;
|
||||||
|
this.foldingRules = new FoldMode(["diff", "@@|\\*{5}"], "i");
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/diff";
|
||||||
|
this.snippetFileId = "ace/snippets/diff";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/diff"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,427 @@
|
||||||
|
define("ace/mode/sh_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 reservedKeywords = exports.reservedKeywords = ('!|{|}|case|do|done|elif|else|' +
|
||||||
|
'esac|fi|for|if|in|then|until|while|' +
|
||||||
|
'&|;|export|local|read|typeset|unset|' +
|
||||||
|
'elif|select|set|function|declare|readonly');
|
||||||
|
var languageConstructs = exports.languageConstructs = ('[|]|alias|bg|bind|break|builtin|' +
|
||||||
|
'cd|command|compgen|complete|continue|' +
|
||||||
|
'dirs|disown|echo|enable|eval|exec|' +
|
||||||
|
'exit|fc|fg|getopts|hash|help|history|' +
|
||||||
|
'jobs|kill|let|logout|popd|printf|pushd|' +
|
||||||
|
'pwd|return|set|shift|shopt|source|' +
|
||||||
|
'suspend|test|times|trap|type|ulimit|' +
|
||||||
|
'umask|unalias|wait');
|
||||||
|
var ShHighlightRules = function () {
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"keyword": reservedKeywords,
|
||||||
|
"support.function.builtin": languageConstructs,
|
||||||
|
"invalid.deprecated": "debugger"
|
||||||
|
}, "identifier");
|
||||||
|
var integer = "(?:(?:[1-9]\\d*)|(?:0))";
|
||||||
|
var fraction = "(?:\\.\\d+)";
|
||||||
|
var intPart = "(?:\\d+)";
|
||||||
|
var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
|
||||||
|
var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + ")";
|
||||||
|
var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
|
||||||
|
var fileDescriptor = "(?:&" + intPart + ")";
|
||||||
|
var variableName = "[a-zA-Z_][a-zA-Z0-9_]*";
|
||||||
|
var variable = "(?:" + variableName + "(?==))";
|
||||||
|
var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))";
|
||||||
|
var func = "(?:" + variableName + "\\s*\\(\\))";
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
token: "constant",
|
||||||
|
regex: /\\./
|
||||||
|
}, {
|
||||||
|
token: ["text", "comment"],
|
||||||
|
regex: /(^|\s)(#.*)$/
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: '"',
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\(?:[$`"\\]|$)/
|
||||||
|
}, {
|
||||||
|
include: "variables"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /`/ // TODO highlight `
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: '"',
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "\\$'",
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\(?:[abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "'",
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
regex: "<<<",
|
||||||
|
token: "keyword.operator"
|
||||||
|
}, {
|
||||||
|
stateName: "heredoc",
|
||||||
|
regex: "(<<-?)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)",
|
||||||
|
onMatch: function (value, currentState, stack) {
|
||||||
|
var next = value[2] == '-' ? "indentedHeredoc" : "heredoc";
|
||||||
|
var tokens = value.split(this.splitRegex);
|
||||||
|
stack.push(next, tokens[4]);
|
||||||
|
return [
|
||||||
|
{ type: "constant", value: tokens[1] },
|
||||||
|
{ type: "text", value: tokens[2] },
|
||||||
|
{ type: "string", value: tokens[3] },
|
||||||
|
{ type: "support.class", value: tokens[4] },
|
||||||
|
{ type: "string", value: tokens[5] }
|
||||||
|
];
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
heredoc: [{
|
||||||
|
onMatch: function (value, currentState, stack) {
|
||||||
|
if (value === stack[1]) {
|
||||||
|
stack.shift();
|
||||||
|
stack.shift();
|
||||||
|
this.next = stack[0] || "start";
|
||||||
|
return "support.class";
|
||||||
|
}
|
||||||
|
this.next = "";
|
||||||
|
return "string";
|
||||||
|
},
|
||||||
|
regex: ".*$",
|
||||||
|
next: "start"
|
||||||
|
}],
|
||||||
|
indentedHeredoc: [{
|
||||||
|
token: "string",
|
||||||
|
regex: "^\t+"
|
||||||
|
}, {
|
||||||
|
onMatch: function (value, currentState, stack) {
|
||||||
|
if (value === stack[1]) {
|
||||||
|
stack.shift();
|
||||||
|
stack.shift();
|
||||||
|
this.next = stack[0] || "start";
|
||||||
|
return "support.class";
|
||||||
|
}
|
||||||
|
this.next = "";
|
||||||
|
return "string";
|
||||||
|
},
|
||||||
|
regex: ".*$",
|
||||||
|
next: "start"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
regex: "$",
|
||||||
|
token: "empty",
|
||||||
|
next: function (currentState, stack) {
|
||||||
|
if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc")
|
||||||
|
return stack[0];
|
||||||
|
return currentState;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "text", "text", "variable"],
|
||||||
|
regex: /(declare|local|readonly)(\s+)(?:(-[fixar]+)(\s+))?([a-zA-Z_][a-zA-Z0-9_]*\b)/
|
||||||
|
}, {
|
||||||
|
token: "variable.language",
|
||||||
|
regex: builtinVariable
|
||||||
|
}, {
|
||||||
|
token: "variable",
|
||||||
|
regex: variable
|
||||||
|
}, {
|
||||||
|
include: "variables"
|
||||||
|
}, {
|
||||||
|
token: "support.function",
|
||||||
|
regex: func
|
||||||
|
}, {
|
||||||
|
token: "support.function",
|
||||||
|
regex: fileDescriptor
|
||||||
|
}, {
|
||||||
|
token: "string", // ' string
|
||||||
|
start: "'", end: "'"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: floatNumber
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // integer
|
||||||
|
regex: integer + "\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_][a-zA-Z0-9_]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=|[%&|`]"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: ";"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[\\[\\(\\{]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\]]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\)\\}]",
|
||||||
|
next: "pop"
|
||||||
|
}],
|
||||||
|
variables: [{
|
||||||
|
token: "variable",
|
||||||
|
regex: /(\$)(\w+)/
|
||||||
|
}, {
|
||||||
|
token: ["variable", "paren.lparen"],
|
||||||
|
regex: /(\$)(\()/,
|
||||||
|
push: "start"
|
||||||
|
}, {
|
||||||
|
token: ["variable", "paren.lparen", "keyword.operator", "variable", "keyword.operator"],
|
||||||
|
regex: /(\$)(\{)([#!]?)(\w+|[*@#?\-$!0_])(:[?+\-=]?|##?|%%?|,,?\/|\^\^?)?/,
|
||||||
|
push: "start"
|
||||||
|
}, {
|
||||||
|
token: "variable",
|
||||||
|
regex: /\$[*@#?\-$!0_]/
|
||||||
|
}, {
|
||||||
|
token: ["variable", "paren.lparen"],
|
||||||
|
regex: /(\$)(\{)/,
|
||||||
|
push: "start"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(ShHighlightRules, TextHighlightRules);
|
||||||
|
exports.ShHighlightRules = ShHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sh_highlight_rules","ace/range","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules;
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = ShHighlightRules;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "#";
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[:]\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
var outdents = {
|
||||||
|
"pass": 1,
|
||||||
|
"return": 1,
|
||||||
|
"raise": 1,
|
||||||
|
"break": 1,
|
||||||
|
"continue": 1
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
if (input !== "\r\n" && input !== "\r" && input !== "\n")
|
||||||
|
return false;
|
||||||
|
var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
|
||||||
|
if (!tokens)
|
||||||
|
return false;
|
||||||
|
do {
|
||||||
|
var last = tokens.pop();
|
||||||
|
} while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/))));
|
||||||
|
if (!last)
|
||||||
|
return false;
|
||||||
|
return (last.type == "keyword" && outdents[last.value]);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
row += 1;
|
||||||
|
var indent = this.$getIndent(doc.getLine(row));
|
||||||
|
var tab = doc.getTabString();
|
||||||
|
if (indent.slice(-tab.length) == tab)
|
||||||
|
doc.remove(new Range(row, indent.length - tab.length, row, indent.length));
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/sh";
|
||||||
|
this.snippetFileId = "ace/snippets/sh";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/dockerfile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/sh_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules;
|
||||||
|
var DockerfileHighlightRules = function () {
|
||||||
|
ShHighlightRules.call(this);
|
||||||
|
var startRules = this.$rules.start;
|
||||||
|
for (var i = 0; i < startRules.length; i++) {
|
||||||
|
if (startRules[i].token == "variable.language") {
|
||||||
|
startRules.splice(i, 0, {
|
||||||
|
token: "constant.language",
|
||||||
|
regex: "(?:^(?:FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|COPY|LABEL)\\b)",
|
||||||
|
caseInsensitive: true
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
oop.inherits(DockerfileHighlightRules, ShHighlightRules);
|
||||||
|
exports.DockerfileHighlightRules = DockerfileHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/dockerfile",["require","exports","module","ace/lib/oop","ace/mode/sh","ace/mode/dockerfile_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var ShMode = require("./sh").Mode;
|
||||||
|
var DockerfileHighlightRules = require("./dockerfile_highlight_rules").DockerfileHighlightRules;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
ShMode.call(this);
|
||||||
|
this.HighlightRules = DockerfileHighlightRules;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, ShMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/dockerfile";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/dockerfile"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,348 @@
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/dot_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/doc_comment_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var lang = require("../lib/lang");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var DotHighlightRules = function () {
|
||||||
|
var keywords = lang.arrayToMap(("strict|node|edge|graph|digraph|subgraph").split("|"));
|
||||||
|
var attributes = lang.arrayToMap(("damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z").split("|"));
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: /\/\/.*$/
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: /#.*$/
|
||||||
|
}, {
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
merge: true,
|
||||||
|
regex: /\/\*/,
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "'(?=.)",
|
||||||
|
next: "qstring"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"(?=.)',
|
||||||
|
next: "qqstring"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: /[+\-]?\d+(?:(?:\.\d*)?(?:[eE][+\-]?\d+)?)?\b/
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /\+|=|\->/
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: /,|;/
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /[\[{]/
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /[\]}]/
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: /^#!.*$/
|
||||||
|
}, {
|
||||||
|
token: function (value) {
|
||||||
|
if (keywords.hasOwnProperty(value.toLowerCase())) {
|
||||||
|
return "keyword";
|
||||||
|
}
|
||||||
|
else if (attributes.hasOwnProperty(value.toLowerCase())) {
|
||||||
|
return "variable";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return "text";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
regex: "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"qqstring": [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '[^"\\\\]+',
|
||||||
|
merge: true
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "\\\\$",
|
||||||
|
next: "qqstring",
|
||||||
|
merge: true
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"|$',
|
||||||
|
next: "start",
|
||||||
|
merge: true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"qstring": [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: "[^'\\\\]+",
|
||||||
|
merge: true
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "\\\\$",
|
||||||
|
next: "qstring",
|
||||||
|
merge: true
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "'|$",
|
||||||
|
next: "start",
|
||||||
|
merge: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DotHighlightRules, TextHighlightRules);
|
||||||
|
exports.DotHighlightRules = DotHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/dot",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/matching_brace_outdent","ace/mode/dot_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var DotHighlightRules = require("./dot_highlight_rules").DotHighlightRules;
|
||||||
|
var DotFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = DotHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.foldingRules = new DotFoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = ["//", "#"];
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
var endState = tokenizedLine.state;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/dot";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/dot"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,557 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/java_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var JavaHighlightRules = function () {
|
||||||
|
var identifierRe = "[a-zA-Z_$][a-zA-Z0-9_$]*";
|
||||||
|
var keywords = ("abstract|continue|for|new|switch|" +
|
||||||
|
"assert|default|goto|package|synchronized|" +
|
||||||
|
"boolean|do|if|private|this|" +
|
||||||
|
"break|double|implements|protected|throw|" +
|
||||||
|
"byte|else|import|public|throws|" +
|
||||||
|
"case|enum|instanceof|return|transient|" +
|
||||||
|
"catch|extends|int|short|try|" +
|
||||||
|
"char|final|interface|static|void|" +
|
||||||
|
"class|finally|long|strictfp|volatile|" +
|
||||||
|
"const|float|native|super|while|" +
|
||||||
|
"var|exports|opens|requires|uses|yield|" +
|
||||||
|
"module|permits|(?:non\\-)?sealed|var|" +
|
||||||
|
"provides|to|when|" +
|
||||||
|
"open|record|transitive|with");
|
||||||
|
var buildinConstants = ("null|Infinity|NaN|undefined");
|
||||||
|
var langClasses = ("AbstractMethodError|AssertionError|ClassCircularityError|" +
|
||||||
|
"ClassFormatError|Deprecated|EnumConstantNotPresentException|" +
|
||||||
|
"ExceptionInInitializerError|IllegalAccessError|" +
|
||||||
|
"IllegalThreadStateException|InstantiationError|InternalError|" +
|
||||||
|
"NegativeArraySizeException|NoSuchFieldError|Override|Process|" +
|
||||||
|
"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|" +
|
||||||
|
"SuppressWarnings|TypeNotPresentException|UnknownError|" +
|
||||||
|
"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|" +
|
||||||
|
"InstantiationException|IndexOutOfBoundsException|" +
|
||||||
|
"ArrayIndexOutOfBoundsException|CloneNotSupportedException|" +
|
||||||
|
"NoSuchFieldException|IllegalArgumentException|NumberFormatException|" +
|
||||||
|
"SecurityException|Void|InheritableThreadLocal|IllegalStateException|" +
|
||||||
|
"InterruptedException|NoSuchMethodException|IllegalAccessException|" +
|
||||||
|
"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|" +
|
||||||
|
"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|" +
|
||||||
|
"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|" +
|
||||||
|
"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|" +
|
||||||
|
"Character|Boolean|StackTraceElement|Appendable|StringBuffer|" +
|
||||||
|
"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|" +
|
||||||
|
"StackOverflowError|OutOfMemoryError|VirtualMachineError|" +
|
||||||
|
"ArrayStoreException|ClassCastException|LinkageError|" +
|
||||||
|
"NoClassDefFoundError|ClassNotFoundException|RuntimeException|" +
|
||||||
|
"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|" +
|
||||||
|
"Cloneable|Class|CharSequence|Comparable|String|Object");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"variable.language": "this",
|
||||||
|
"constant.language": buildinConstants,
|
||||||
|
"support.function": langClasses
|
||||||
|
}, "identifier");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\/\\/.*$"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
},
|
||||||
|
{ include: "multiline-strings" },
|
||||||
|
{ include: "strings" },
|
||||||
|
{ include: "constants" },
|
||||||
|
{
|
||||||
|
regex: "(open(?:\\s+))?module(?=\\s*\\w)",
|
||||||
|
token: "keyword",
|
||||||
|
next: [{
|
||||||
|
regex: "{",
|
||||||
|
token: "paren.lparen",
|
||||||
|
next: [{
|
||||||
|
regex: "}",
|
||||||
|
token: "paren.rparen",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
regex: "\\b(requires|transitive|exports|opens|to|uses|provides|with)\\b",
|
||||||
|
token: "keyword"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}, {
|
||||||
|
token: "identifier",
|
||||||
|
regex: "\\w+"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "."
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}, {
|
||||||
|
regex: "", // exit if there is anything else
|
||||||
|
next: "start"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{ include: "statements" }
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"strings": [
|
||||||
|
{
|
||||||
|
token: ["punctuation", "string"],
|
||||||
|
regex: /(\.)(")/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "lparen",
|
||||||
|
regex: /\\\{/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "text",
|
||||||
|
regex: /$/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "rparen",
|
||||||
|
regex: /}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "strings"
|
||||||
|
}, {
|
||||||
|
include: "constants"
|
||||||
|
}, {
|
||||||
|
include: "statements"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: /"/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"multiline-strings": [
|
||||||
|
{
|
||||||
|
token: ["punctuation", "string"],
|
||||||
|
regex: /(\.)(""")/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"""',
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "lparen",
|
||||||
|
regex: /\\\{/,
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "text",
|
||||||
|
regex: /$/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "rparen",
|
||||||
|
regex: /}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "multiline-strings"
|
||||||
|
}, {
|
||||||
|
include: "strings"
|
||||||
|
}, {
|
||||||
|
include: "constants"
|
||||||
|
}, {
|
||||||
|
include: "statements"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\./
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"""',
|
||||||
|
push: [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"""',
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\./
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constants": [
|
||||||
|
{
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\b/
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: /[+-]?\d[\d_]*(?:(?:\.[\d_]*)?(?:[eE][+-]?[\d_]+)?)?[LlSsDdFfYy]?\b/
|
||||||
|
}, {
|
||||||
|
token: "constant.language.boolean",
|
||||||
|
regex: "(?:true|false)\\b"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"statements": [
|
||||||
|
{
|
||||||
|
token: ["keyword", "text", "identifier"],
|
||||||
|
regex: "(record)(\\s+)(" + identifierRe + ")\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "keyword",
|
||||||
|
regex: "(?:" + keywords + ")\\b"
|
||||||
|
}, {
|
||||||
|
token: "storage.type.annotation",
|
||||||
|
regex: "@" + identifierRe + "\\b"
|
||||||
|
}, {
|
||||||
|
token: "entity.name.function",
|
||||||
|
regex: identifierRe + "(?=\\()"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper, // TODO: Unicode escape sequences
|
||||||
|
regex: identifierRe + "\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "!|\\$|%|&|\\||\\^|\\*|\\/|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?|\\:|\\*=|\\/=|%=|\\+=|\\-=|&=|\\|=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
|
||||||
|
}, {
|
||||||
|
token: "lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(JavaHighlightRules, TextHighlightRules);
|
||||||
|
exports.JavaHighlightRules = JavaHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/drools_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/java_highlight_rules","ace/mode/doc_comment_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules;
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*";
|
||||||
|
var packageIdentifierRe = "[a-zA-Z\\$_\u00a1-\uffff][\\.a-zA-Z\\d\\$_\u00a1-\uffff]*";
|
||||||
|
var DroolsHighlightRules = function () {
|
||||||
|
var keywords = ("date|effective|expires|lock|on|active|no|loop|auto|focus" +
|
||||||
|
"|activation|group|agenda|ruleflow|duration|timer|calendars|refract|direct" +
|
||||||
|
"|dialect|salience|enabled|attributes|extends|template" +
|
||||||
|
"|function|contains|matches|eval|excludes|soundslike" +
|
||||||
|
"|memberof|not|in|or|and|exists|forall|over|from|entry|point|accumulate|acc|collect" +
|
||||||
|
"|action|reverse|result|end|init|instanceof|extends|super|boolean|char|byte|short" +
|
||||||
|
"|int|long|float|double|this|void|class|new|case|final|if|else|for|while|do" +
|
||||||
|
"|default|try|catch|finally|switch|synchronized|return|throw|break|continue|assert" +
|
||||||
|
"|modify|static|public|protected|private|abstract|native|transient|volatile" +
|
||||||
|
"|strictfp|throws|interface|enum|implements|type|window|trait|no-loop|str");
|
||||||
|
var langClasses = ("AbstractMethodError|AssertionError|ClassCircularityError|" +
|
||||||
|
"ClassFormatError|Deprecated|EnumConstantNotPresentException|" +
|
||||||
|
"ExceptionInInitializerError|IllegalAccessError|" +
|
||||||
|
"IllegalThreadStateException|InstantiationError|InternalError|" +
|
||||||
|
"NegativeArraySizeException|NoSuchFieldError|Override|Process|" +
|
||||||
|
"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|" +
|
||||||
|
"SuppressWarnings|TypeNotPresentException|UnknownError|" +
|
||||||
|
"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|" +
|
||||||
|
"InstantiationException|IndexOutOfBoundsException|" +
|
||||||
|
"ArrayIndexOutOfBoundsException|CloneNotSupportedException|" +
|
||||||
|
"NoSuchFieldException|IllegalArgumentException|NumberFormatException|" +
|
||||||
|
"SecurityException|Void|InheritableThreadLocal|IllegalStateException|" +
|
||||||
|
"InterruptedException|NoSuchMethodException|IllegalAccessException|" +
|
||||||
|
"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|" +
|
||||||
|
"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|" +
|
||||||
|
"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|" +
|
||||||
|
"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|" +
|
||||||
|
"Character|Boolean|StackTraceElement|Appendable|StringBuffer|" +
|
||||||
|
"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|" +
|
||||||
|
"StackOverflowError|OutOfMemoryError|VirtualMachineError|" +
|
||||||
|
"ArrayStoreException|ClassCastException|LinkageError|" +
|
||||||
|
"NoClassDefFoundError|ClassNotFoundException|RuntimeException|" +
|
||||||
|
"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|" +
|
||||||
|
"Cloneable|Class|CharSequence|Comparable|String|Object");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"variable.language": "this",
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": "null",
|
||||||
|
"support.class": langClasses,
|
||||||
|
"support.function": "retract|update|modify|insert"
|
||||||
|
}, "identifier");
|
||||||
|
var stringRules = function () {
|
||||||
|
return [{
|
||||||
|
token: "string", // single line
|
||||||
|
regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
var basicPreRules = function (blockCommentRules) {
|
||||||
|
return [{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\/\\/.*$"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: blockCommentRules
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.boolean",
|
||||||
|
regex: "(?:true|false)\\b"
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
var blockCommentRules = function (returnRule) {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
token: "comment.block", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: returnRule
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment.block"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
var basicPostRules = function () {
|
||||||
|
return [{
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
|
||||||
|
}, {
|
||||||
|
token: "lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
this.$rules = {
|
||||||
|
"start": [].concat(basicPreRules("block.comment"), [
|
||||||
|
{
|
||||||
|
token: "entity.name.type",
|
||||||
|
regex: "@[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "entity.name.type"],
|
||||||
|
regex: "(package)(\\s+)(" + packageIdentifierRe + ")"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "keyword", "text", "entity.name.type"],
|
||||||
|
regex: "(import)(\\s+)(function)(\\s+)(" + packageIdentifierRe + ")"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "entity.name.type"],
|
||||||
|
regex: "(import)(\\s+)(" + packageIdentifierRe + ")"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "entity.name.type", "text", "variable"],
|
||||||
|
regex: "(global)(\\s+)(" + packageIdentifierRe + ")(\\s+)(" + identifierRe + ")"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "keyword", "text", "entity.name.type"],
|
||||||
|
regex: "(declare)(\\s+)(trait)(\\s+)(" + identifierRe + ")"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "entity.name.type"],
|
||||||
|
regex: "(declare)(\\s+)(" + identifierRe + ")"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "entity.name.type"],
|
||||||
|
regex: "(extends)(\\s+)(" + packageIdentifierRe + ")"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text"],
|
||||||
|
regex: "(rule)(\\s+)",
|
||||||
|
next: "asset.name"
|
||||||
|
}
|
||||||
|
], stringRules(), [{
|
||||||
|
token: ["variable.other", "text", "text"],
|
||||||
|
regex: "(" + identifierRe + ")(\\s*)(:)"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text"],
|
||||||
|
regex: "(query)(\\s+)",
|
||||||
|
next: "asset.name"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text"],
|
||||||
|
regex: "(when)(\\s*)"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text"],
|
||||||
|
regex: "(then)(\\s*)",
|
||||||
|
next: "java-start"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /[\[({]/
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /[\])}]/
|
||||||
|
}], basicPostRules()),
|
||||||
|
"block.comment": blockCommentRules("start"),
|
||||||
|
"asset.name": [
|
||||||
|
{
|
||||||
|
token: "entity.name",
|
||||||
|
regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
|
||||||
|
}, {
|
||||||
|
token: "entity.name",
|
||||||
|
regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
|
||||||
|
}, {
|
||||||
|
token: "entity.name",
|
||||||
|
regex: identifierRe
|
||||||
|
}, {
|
||||||
|
regex: "",
|
||||||
|
token: "empty",
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
this.embedRules(JavaHighlightRules, "java-", [
|
||||||
|
{
|
||||||
|
token: "support.function",
|
||||||
|
regex: "\\b(insert|modify|retract|update)\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword",
|
||||||
|
regex: "\\bend\\b",
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
oop.inherits(DroolsHighlightRules, TextHighlightRules);
|
||||||
|
exports.DroolsHighlightRules = DroolsHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/drools",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var TokenIterator = require("../../token_iterator").TokenIterator;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.foldingStartMarker = /\b(rule|declare|query|when|then)\b/;
|
||||||
|
this.foldingStopMarker = /\bend\b/;
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var match = line.match(this.foldingStartMarker);
|
||||||
|
if (match) {
|
||||||
|
var i = match.index;
|
||||||
|
if (match[1]) {
|
||||||
|
var position = { row: row, column: line.length };
|
||||||
|
var iterator = new TokenIterator(session, position.row, position.column);
|
||||||
|
var seek = "end";
|
||||||
|
var token = iterator.getCurrentToken();
|
||||||
|
if (token.value == "when") {
|
||||||
|
seek = "then";
|
||||||
|
}
|
||||||
|
while (token) {
|
||||||
|
if (token.value == seek) {
|
||||||
|
return Range.fromPoints(position, {
|
||||||
|
row: iterator.getCurrentTokenRow(),
|
||||||
|
column: iterator.getCurrentTokenColumn()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
token = iterator.stepForward();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/drools",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/drools_highlight_rules","ace/mode/folding/drools"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var DroolsHighlightRules = require("./drools_highlight_rules").DroolsHighlightRules;
|
||||||
|
var DroolsFoldMode = require("./folding/drools").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = DroolsHighlightRules;
|
||||||
|
this.foldingRules = new DroolsFoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.$id = "ace/mode/drools";
|
||||||
|
this.snippetFileId = "ace/snippets/drools";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/drools"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/edifact_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var EdifactHighlightRules = function () {
|
||||||
|
var header = ("UNH");
|
||||||
|
var segment = ("ADR|AGR|AJT|ALC|ALI|APP|APR|ARD|ARR|ASI|ATT|AUT|" +
|
||||||
|
"BAS|BGM|BII|BUS|" +
|
||||||
|
"CAV|CCD|CCI|CDI|CDS|CDV|CED|CIN|CLA|CLI|CMP|CNI|CNT|COD|COM|COT|CPI|CPS|CPT|CST|CTA|CUX|" +
|
||||||
|
"DAM|DFN|DGS|DII|DIM|DLI|DLM|DMS|DOC|DRD|DSG|DSI|DTM|" +
|
||||||
|
"EDT|EFI|ELM|ELU|ELV|EMP|EQA|EQD|EQN|ERC|ERP|EVE|FCA|FII|FNS|FNT|FOR|FSQ|FTX|" +
|
||||||
|
"GDS|GEI|GID|GIN|GIR|GOR|GPO|GRU|HAN|HYN|ICD|IDE|IFD|IHC|IMD|IND|INP|INV|IRQ|" +
|
||||||
|
"LAN|LIN|LOC|MEA|MEM|MKS|MOA|MSG|MTD|NAD|NAT|" +
|
||||||
|
"PAC|PAI|PAS|PCC|PCD|PCI|PDI|PER|PGI|PIA|PNA|POC|PRC|PRI|PRV|PSD|PTY|PYT|" +
|
||||||
|
"QRS|QTY|QUA|QVR|" +
|
||||||
|
"RCS|REL|RFF|RJL|RNG|ROD|RSL|RTE|" +
|
||||||
|
"SAL|SCC|SCD|SEG|SEL|SEQ|SFI|SGP|SGU|SPR|SPS|STA|STC|STG|STS|" +
|
||||||
|
"TAX|TCC|TDT|TEM|TMD|TMP|TOD|TPL|TRU|TSR|" +
|
||||||
|
"UNB|UNZ|UNT|UGH|UGT|UNS|" +
|
||||||
|
"VLI");
|
||||||
|
var header = ("UNH");
|
||||||
|
var buildinConstants = ("null|Infinity|NaN|undefined");
|
||||||
|
var langClasses = ("");
|
||||||
|
var keywords = ("BY|SE|ON|INV|JP|UNOA");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"variable.language": "this",
|
||||||
|
"keyword": keywords,
|
||||||
|
"entity.name.segment": segment,
|
||||||
|
"entity.name.header": header,
|
||||||
|
"constant.language": buildinConstants,
|
||||||
|
"support.function": langClasses
|
||||||
|
}, "identifier");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\+.\\+"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.boolean",
|
||||||
|
regex: "(?:true|false)\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "\\+"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\:|'"
|
||||||
|
}, {
|
||||||
|
token: "identifier",
|
||||||
|
regex: "\\:D\\:"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
};
|
||||||
|
EdifactHighlightRules.metaData = { fileTypes: ['edi'],
|
||||||
|
keyEquivalent: '^~E',
|
||||||
|
name: 'Edifact',
|
||||||
|
scopeName: 'source.edifact' };
|
||||||
|
oop.inherits(EdifactHighlightRules, TextHighlightRules);
|
||||||
|
exports.EdifactHighlightRules = EdifactHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/edifact",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/edifact_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var EdifactHighlightRules = require("./edifact_highlight_rules").EdifactHighlightRules;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = EdifactHighlightRules;
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/edifact";
|
||||||
|
this.snippetFileId = "ace/snippets/edifact";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/edifact"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,120 @@
|
||||||
|
define("ace/mode/eiffel_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 EiffelHighlightRules = function () {
|
||||||
|
var keywords = "across|agent|alias|all|attached|as|assign|attribute|check|" +
|
||||||
|
"class|convert|create|debug|deferred|detachable|do|else|elseif|end|" +
|
||||||
|
"ensure|expanded|export|external|feature|from|frozen|if|inherit|" +
|
||||||
|
"inspect|invariant|like|local|loop|not|note|obsolete|old|once|" +
|
||||||
|
"Precursor|redefine|rename|require|rescue|retry|select|separate|" +
|
||||||
|
"some|then|undefine|until|variant|when";
|
||||||
|
var operatorKeywords = "and|implies|or|xor";
|
||||||
|
var languageConstants = "Void";
|
||||||
|
var booleanConstants = "True|False";
|
||||||
|
var languageVariables = "Current|Result";
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"constant.language": languageConstants,
|
||||||
|
"constant.language.boolean": booleanConstants,
|
||||||
|
"variable.language": languageVariables,
|
||||||
|
"keyword.operator": operatorKeywords,
|
||||||
|
"keyword": keywords
|
||||||
|
}, "identifier", true);
|
||||||
|
var simpleString = /(?:[^"%\b\f\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)+?/;
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
token: "string.quoted.other", // Aligned-verbatim-strings (verbatim option not supported)
|
||||||
|
regex: /"\[/,
|
||||||
|
next: "aligned_verbatim_string"
|
||||||
|
}, {
|
||||||
|
token: "string.quoted.other", // Non-aligned-verbatim-strings (verbatim option not supported)
|
||||||
|
regex: /"\{/,
|
||||||
|
next: "non-aligned_verbatim_string"
|
||||||
|
}, {
|
||||||
|
token: "string.quoted.double",
|
||||||
|
regex: /"(?:[^%\b\f\n\r\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)*?"/
|
||||||
|
}, {
|
||||||
|
token: "comment.line.double-dash",
|
||||||
|
regex: /--.*/
|
||||||
|
}, {
|
||||||
|
token: "constant.character",
|
||||||
|
regex: /'(?:[^%\b\f\n\r\t\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)'/
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hexa | octal | bin
|
||||||
|
regex: /\b0(?:[xX][\da-fA-F](?:_*[\da-fA-F])*|[cC][0-7](?:_*[0-7])*|[bB][01](?:_*[01])*)\b/
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: /(?:\d(?:_*\d)*)?\.(?:(?:\d(?:_*\d)*)?[eE][+-]?)?\d(?:_*\d)*|\d(?:_*\d)*\.?/
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /[\[({]|<<|\|\(/
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /[\])}]|>>|\|\)/
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator", // punctuation
|
||||||
|
regex: /:=|->|\.(?=\w)|[;,:?]/
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /\\\\|\|\.\.\||\.\.|\/[~\/]?|[><\/]=?|[-+*^=~]/
|
||||||
|
}, {
|
||||||
|
token: function (v) {
|
||||||
|
var result = keywordMapper(v);
|
||||||
|
if (result === "identifier" && v === v.toUpperCase()) {
|
||||||
|
result = "entity.name.type";
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
regex: /[a-zA-Z][a-zA-Z\d_]*\b/
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: /\s+/
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"aligned_verbatim_string": [{
|
||||||
|
token: "string",
|
||||||
|
regex: /]"/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: simpleString
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"non-aligned_verbatim_string": [{
|
||||||
|
token: "string.quoted.other",
|
||||||
|
regex: /}"/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "string.quoted.other",
|
||||||
|
regex: simpleString
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(EiffelHighlightRules, TextHighlightRules);
|
||||||
|
exports.EiffelHighlightRules = EiffelHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/eiffel",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/eiffel_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var EiffelHighlightRules = require("./eiffel_highlight_rules").EiffelHighlightRules;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = EiffelHighlightRules;
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "--";
|
||||||
|
this.$id = "ace/mode/eiffel";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/eiffel"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,443 @@
|
||||||
|
define("ace/mode/elixir_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from https://raw.githubusercontent.com/elixir-lang/elixir-tmbundle/master/Syntaxes/Elixir.tmLanguage (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var ElixirHighlightRules = function () {
|
||||||
|
this.$rules = { start: [{ token: ['meta.module.elixir',
|
||||||
|
'keyword.control.module.elixir',
|
||||||
|
'meta.module.elixir',
|
||||||
|
'entity.name.type.module.elixir'],
|
||||||
|
regex: '^(\\s*)(defmodule)(\\s+)((?:[A-Z]\\w*\\s*\\.\\s*)*[A-Z]\\w*)' },
|
||||||
|
{ token: 'comment.documentation.heredoc',
|
||||||
|
regex: '@(?:module|type)?doc (?:~[a-z])?"""',
|
||||||
|
push: [{ token: 'comment.documentation.heredoc',
|
||||||
|
regex: '\\s*"""',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'comment.documentation.heredoc' }],
|
||||||
|
comment: '@doc with heredocs is treated as documentation' },
|
||||||
|
{ token: 'comment.documentation.heredoc',
|
||||||
|
regex: '@(?:module|type)?doc ~[A-Z]"""',
|
||||||
|
push: [{ token: 'comment.documentation.heredoc',
|
||||||
|
regex: '\\s*"""',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'comment.documentation.heredoc' }],
|
||||||
|
comment: '@doc with heredocs is treated as documentation' },
|
||||||
|
{ token: 'comment.documentation.heredoc',
|
||||||
|
regex: '@(?:module|type)?doc (?:~[a-z])?\'\'\'',
|
||||||
|
push: [{ token: 'comment.documentation.heredoc',
|
||||||
|
regex: '\\s*\'\'\'',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'comment.documentation.heredoc' }],
|
||||||
|
comment: '@doc with heredocs is treated as documentation' },
|
||||||
|
{ token: 'comment.documentation.heredoc',
|
||||||
|
regex: '@(?:module|type)?doc ~[A-Z]\'\'\'',
|
||||||
|
push: [{ token: 'comment.documentation.heredoc',
|
||||||
|
regex: '\\s*\'\'\'',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'comment.documentation.heredoc' }],
|
||||||
|
comment: '@doc with heredocs is treated as documentation' },
|
||||||
|
{ token: 'comment.documentation.false',
|
||||||
|
regex: '@(?:module|type)?doc false',
|
||||||
|
comment: '@doc false is treated as documentation' },
|
||||||
|
{ token: 'comment.documentation.string',
|
||||||
|
regex: '@(?:module|type)?doc "',
|
||||||
|
push: [{ token: 'comment.documentation.string',
|
||||||
|
regex: '"',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'comment.documentation.string' }],
|
||||||
|
comment: '@doc with string is treated as documentation' },
|
||||||
|
{ token: 'keyword.control.elixir',
|
||||||
|
regex: '\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\b(?![?!])',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '(?<!\\.)\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\b(?![?!])' },
|
||||||
|
{ token: 'keyword.operator.elixir',
|
||||||
|
regex: '\\b(?:and|not|or|when|xor|in|inlist|inbits)\\b',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '(?<!\\.)\\b(and|not|or|when|xor|in|inlist|inbits)\\b',
|
||||||
|
comment: ' as above, just doesn\'t need a \'end\' and does a logic operation' },
|
||||||
|
{ token: 'constant.language.elixir',
|
||||||
|
regex: '\\b(?:nil|true|false)\\b(?![?!])' },
|
||||||
|
{ token: 'variable.language.elixir',
|
||||||
|
regex: '\\b__(?:CALLER|ENV|MODULE|DIR)__\\b(?![?!])' },
|
||||||
|
{ token: ['punctuation.definition.variable.elixir',
|
||||||
|
'variable.other.readwrite.module.elixir'],
|
||||||
|
regex: '(@)([a-zA-Z_]\\w*)' },
|
||||||
|
{ token: ['punctuation.definition.variable.elixir',
|
||||||
|
'variable.other.anonymous.elixir'],
|
||||||
|
regex: '(&)(\\d*)' },
|
||||||
|
{ token: 'variable.other.constant.elixir',
|
||||||
|
regex: '\\b[A-Z]\\w*\\b' },
|
||||||
|
{ token: 'constant.numeric.elixir',
|
||||||
|
regex: '\\b(?:0x[\\da-fA-F](?:_?[\\da-fA-F])*|\\d(?:_?\\d)*(?:\\.(?![^[:space:][:digit:]])(?:_?\\d)*)?(?:[eE][-+]?\\d(?:_?\\d)*)?|0b[01]+|0o[0-7]+)\\b',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '\\b(0x\\h(?>_?\\h)*|\\d(?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?|0b[01]+|0o[0-7]+)\\b' },
|
||||||
|
{ token: 'punctuation.definition.constant.elixir',
|
||||||
|
regex: ':\'',
|
||||||
|
push: [{ token: 'punctuation.definition.constant.elixir',
|
||||||
|
regex: '\'',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'constant.other.symbol.single-quoted.elixir' }] },
|
||||||
|
{ token: 'punctuation.definition.constant.elixir',
|
||||||
|
regex: ':"',
|
||||||
|
push: [{ token: 'punctuation.definition.constant.elixir',
|
||||||
|
regex: '"',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'constant.other.symbol.double-quoted.elixir' }] },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '(?:\'\'\')',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '(?>\'\'\')',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '^\\s*\'\'\'',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' }],
|
||||||
|
comment: 'Single-quoted heredocs' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '\'',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '\'',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'support.function.variable.quoted.single.elixir' }],
|
||||||
|
comment: 'single quoted string (allows for interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '(?:""")',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '(?>""")',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '^\\s*"""',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'string.quoted.double.heredoc.elixir' }],
|
||||||
|
comment: 'Double-quoted heredocs' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '"',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '"',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'string.quoted.double.elixir' }],
|
||||||
|
comment: 'double quoted string (allows for interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[a-z](?:""")',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '~[a-z](?>""")',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '^\\s*"""',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'string.quoted.double.heredoc.elixir' }],
|
||||||
|
comment: 'Double-quoted heredocs sigils' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[a-z]\\{',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '\\}[a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'string.interpolated.elixir' }],
|
||||||
|
comment: 'sigil (allow for interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[a-z]\\[',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '\\][a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'string.interpolated.elixir' }],
|
||||||
|
comment: 'sigil (allow for interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[a-z]\\<',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '\\>[a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'string.interpolated.elixir' }],
|
||||||
|
comment: 'sigil (allow for interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[a-z]\\(',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '\\)[a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'string.interpolated.elixir' }],
|
||||||
|
comment: 'sigil (allow for interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[a-z][^\\w]',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '[^\\w][a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'string.interpolated.elixir' }],
|
||||||
|
comment: 'sigil (allow for interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[A-Z](?:""")',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '~[A-Z](?>""")',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '^\\s*"""',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'string.quoted.other.literal.upper.elixir' }],
|
||||||
|
comment: 'Double-quoted heredocs sigils' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[A-Z]\\{',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '\\}[a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'string.quoted.other.literal.upper.elixir' }],
|
||||||
|
comment: 'sigil (without interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[A-Z]\\[',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '\\][a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'string.quoted.other.literal.upper.elixir' }],
|
||||||
|
comment: 'sigil (without interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[A-Z]\\<',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '\\>[a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'string.quoted.other.literal.upper.elixir' }],
|
||||||
|
comment: 'sigil (without interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[A-Z]\\(',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '\\)[a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'string.quoted.other.literal.upper.elixir' }],
|
||||||
|
comment: 'sigil (without interpolation)' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.elixir',
|
||||||
|
regex: '~[A-Z][^\\w]',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.elixir',
|
||||||
|
regex: '[^\\w][a-z]*',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'string.quoted.other.literal.upper.elixir' }],
|
||||||
|
comment: 'sigil (without interpolation)' },
|
||||||
|
{ token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'],
|
||||||
|
regex: '(:)([a-zA-Z_][\\w@]*(?:[?!]|=(?![>=]))?|\\<\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\-|\\|>|=>|~|~=|=|/|\\\\\\\\|\\*\\*?|\\.\\.?\\.?|>=?|<=?|&&?&?|\\+\\+?|\\-\\-?|\\|\\|?\\|?|\\!|@|\\%?\\{\\}|%|\\[\\]|\\^(?:\\^\\^)?)',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '(?<!:)(:)(?>[a-zA-Z_][\\w@]*(?>[?!]|=(?![>=]))?|\\<\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\-|\\|>|=>|~|~=|=|/|\\\\\\\\|\\*\\*?|\\.\\.?\\.?|>=?|<=?|&&?&?|\\+\\+?|\\-\\-?|\\|\\|?\\|?|\\!|@|\\%?\\{\\}|%|\\[\\]|\\^(\\^\\^)?)',
|
||||||
|
comment: 'symbols' },
|
||||||
|
{ token: 'punctuation.definition.constant.elixir',
|
||||||
|
regex: '(?:[a-zA-Z_][\\w@]*(?:[?!])?):(?!:)',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '(?>[a-zA-Z_][\\w@]*(?>[?!])?)(:)(?!:)',
|
||||||
|
comment: 'symbols' },
|
||||||
|
{ token: ['punctuation.definition.comment.elixir',
|
||||||
|
'comment.line.number-sign.elixir'],
|
||||||
|
regex: '(#)(.*)' },
|
||||||
|
{ token: 'constant.numeric.elixir',
|
||||||
|
regex: '\\?(?:\\\\(?:x[\\da-fA-F]{1,2}(?![\\da-fA-F])\\b|[^xMC])|[^\\s\\\\])',
|
||||||
|
TODO: 'FIXME: regexp doesn\'t have js equivalent',
|
||||||
|
originalRegex: '(?<!\\w)\\?(\\\\(x\\h{1,2}(?!\\h)\\b|[^xMC])|[^\\s\\\\])',
|
||||||
|
comment: '\n\t\t\tmatches questionmark-letters.\n\n\t\t\texamples (1st alternation = hex):\n\t\t\t?\\x1 ?\\x61\n\n\t\t\texamples (2rd alternation = escaped):\n\t\t\t?\\n ?\\b\n\n\t\t\texamples (3rd alternation = normal):\n\t\t\t?a ?A ?0 \n\t\t\t?* ?" ?( \n\t\t\t?. ?#\n\t\t\t\n\t\t\tthe negative lookbehind prevents against matching\n\t\t\tp(42.tainted?)\n\t\t\t' },
|
||||||
|
{ token: 'keyword.operator.assignment.augmented.elixir',
|
||||||
|
regex: '\\+=|\\-=|\\|\\|=|~=|&&=' },
|
||||||
|
{ token: 'keyword.operator.comparison.elixir',
|
||||||
|
regex: '===?|!==?|<=?|>=?' },
|
||||||
|
{ token: 'keyword.operator.bitwise.elixir',
|
||||||
|
regex: '\\|{3}|&{3}|\\^{3}|<{3}|>{3}|~{3}' },
|
||||||
|
{ token: 'keyword.operator.logical.elixir',
|
||||||
|
regex: '!+|\\bnot\\b|&&|\\band\\b|\\|\\||\\bor\\b|\\bxor\\b',
|
||||||
|
originalRegex: '(?<=[ \\t])!+|\\bnot\\b|&&|\\band\\b|\\|\\||\\bor\\b|\\bxor\\b' },
|
||||||
|
{ token: 'keyword.operator.arithmetic.elixir',
|
||||||
|
regex: '\\*|\\+|\\-|/' },
|
||||||
|
{ token: 'keyword.operator.other.elixir',
|
||||||
|
regex: '\\||\\+\\+|\\-\\-|\\*\\*|\\\\\\\\|\\<\\-|\\<\\>|\\<\\<|\\>\\>|\\:\\:|\\.\\.|\\|>|~|=>' },
|
||||||
|
{ token: 'keyword.operator.assignment.elixir', regex: '=' },
|
||||||
|
{ token: 'punctuation.separator.other.elixir', regex: ':' },
|
||||||
|
{ token: 'punctuation.separator.statement.elixir',
|
||||||
|
regex: '\\;' },
|
||||||
|
{ token: 'punctuation.separator.object.elixir', regex: ',' },
|
||||||
|
{ token: 'punctuation.separator.method.elixir', regex: '\\.' },
|
||||||
|
{ token: 'punctuation.section.scope.elixir', regex: '\\{|\\}' },
|
||||||
|
{ token: 'punctuation.section.array.elixir', regex: '\\[|\\]' },
|
||||||
|
{ token: 'punctuation.section.function.elixir',
|
||||||
|
regex: '\\(|\\)' }],
|
||||||
|
'#escaped_char': [{ token: 'constant.character.escape.elixir',
|
||||||
|
regex: '\\\\(?:x[\\da-fA-F]{1,2}|.)' }],
|
||||||
|
'#interpolated_elixir': [{ token: ['source.elixir.embedded.source',
|
||||||
|
'source.elixir.embedded.source.empty'],
|
||||||
|
regex: '(#\\{)(\\})' },
|
||||||
|
{ todo: { token: 'punctuation.section.embedded.elixir',
|
||||||
|
regex: '#\\{',
|
||||||
|
push: [{ token: 'punctuation.section.embedded.elixir',
|
||||||
|
regex: '\\}',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#nest_curly_and_self' },
|
||||||
|
{ include: '$self' },
|
||||||
|
{ defaultToken: 'source.elixir.embedded.source' }] } }],
|
||||||
|
'#nest_curly_and_self': [{ token: 'punctuation.section.scope.elixir',
|
||||||
|
regex: '\\{',
|
||||||
|
push: [{ token: 'punctuation.section.scope.elixir',
|
||||||
|
regex: '\\}',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#nest_curly_and_self' }] },
|
||||||
|
{ include: '$self' }],
|
||||||
|
'#regex_sub': [{ include: '#interpolated_elixir' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ token: ['punctuation.definition.arbitrary-repitition.elixir',
|
||||||
|
'string.regexp.arbitrary-repitition.elixir',
|
||||||
|
'string.regexp.arbitrary-repitition.elixir',
|
||||||
|
'punctuation.definition.arbitrary-repitition.elixir'],
|
||||||
|
regex: '(\\{)(\\d+)((?:,\\d+)?)(\\})' },
|
||||||
|
{ token: 'punctuation.definition.character-class.elixir',
|
||||||
|
regex: '\\[(?:\\^?\\])?',
|
||||||
|
push: [{ token: 'punctuation.definition.character-class.elixir',
|
||||||
|
regex: '\\]',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#escaped_char' },
|
||||||
|
{ defaultToken: 'string.regexp.character-class.elixir' }] },
|
||||||
|
{ token: 'punctuation.definition.group.elixir',
|
||||||
|
regex: '\\(',
|
||||||
|
push: [{ token: 'punctuation.definition.group.elixir',
|
||||||
|
regex: '\\)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#regex_sub' },
|
||||||
|
{ defaultToken: 'string.regexp.group.elixir' }] },
|
||||||
|
{ token: ['punctuation.definition.comment.elixir',
|
||||||
|
'comment.line.number-sign.elixir'],
|
||||||
|
regex: '(?:^|\\s)(#)(\\s[[a-zA-Z0-9,. \\t?!-][^\\x00-\\x7F]]*$)',
|
||||||
|
originalRegex: '(?<=^|\\s)(#)\\s[[a-zA-Z0-9,. \\t?!-][^\\x{00}-\\x{7F}]]*$',
|
||||||
|
comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' }] };
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
ElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.',
|
||||||
|
fileTypes: ['ex', 'exs'],
|
||||||
|
firstLineMatch: '^#!/.*\\belixir',
|
||||||
|
foldingStartMarker: '(after|else|catch|rescue|\\-\\>|\\{|\\[|do)\\s*$',
|
||||||
|
foldingStopMarker: '^\\s*((\\}|\\]|after|else|catch|rescue)\\s*$|end\\b)',
|
||||||
|
keyEquivalent: '^~E',
|
||||||
|
name: 'Elixir',
|
||||||
|
scopeName: 'source.elixir' };
|
||||||
|
oop.inherits(ElixirHighlightRules, TextHighlightRules);
|
||||||
|
exports.ElixirHighlightRules = ElixirHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.commentBlock = function (session, row) {
|
||||||
|
var re = /\S/;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startLevel = line.search(re);
|
||||||
|
if (startLevel == -1 || line[startLevel] != "#")
|
||||||
|
return;
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
var level = line.search(re);
|
||||||
|
if (level == -1)
|
||||||
|
continue;
|
||||||
|
if (line[level] != "#")
|
||||||
|
break;
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var range = this.indentationBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
range = this.commentBlock(session, row);
|
||||||
|
if (range)
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var indent = line.search(/\S/);
|
||||||
|
var next = session.getLine(row + 1);
|
||||||
|
var prev = session.getLine(row - 1);
|
||||||
|
var prevIndent = prev.search(/\S/);
|
||||||
|
var nextIndent = next.search(/\S/);
|
||||||
|
if (indent == -1) {
|
||||||
|
session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? "start" : "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (prevIndent == -1) {
|
||||||
|
if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
|
||||||
|
if (session.getLine(row - 2).search(/\S/) == -1) {
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
session.foldWidgets[row + 1] = "";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prevIndent != -1 && prevIndent < indent)
|
||||||
|
session.foldWidgets[row - 1] = "start";
|
||||||
|
else
|
||||||
|
session.foldWidgets[row - 1] = "";
|
||||||
|
if (indent < nextIndent)
|
||||||
|
return "start";
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/elixir",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/elixir_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var ElixirHighlightRules = require("./elixir_highlight_rules").ElixirHighlightRules;
|
||||||
|
var FoldMode = require("./folding/coffee").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = ElixirHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "#";
|
||||||
|
this.$id = "ace/mode/elixir";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/elixir"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,274 @@
|
||||||
|
define("ace/mode/elm_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){// TODO check with https://github.com/deadfoxygrandpa/Elm.tmLanguage
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var ElmHighlightRules = function () {
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"keyword": "as|case|class|data|default|deriving|do|else|export|foreign|" +
|
||||||
|
"hiding|jsevent|if|import|in|infix|infixl|infixr|instance|let|" +
|
||||||
|
"module|newtype|of|open|then|type|where|_|port|\u03BB"
|
||||||
|
}, "identifier");
|
||||||
|
var escapeRe = /\\(\d+|['"\\&trnbvf])/;
|
||||||
|
var smallRe = /[a-z_]/.source;
|
||||||
|
var largeRe = /[A-Z]/.source;
|
||||||
|
var idRe = /[a-z_A-Z0-9']/.source;
|
||||||
|
this.$rules = {
|
||||||
|
start: [{
|
||||||
|
token: "string.start",
|
||||||
|
regex: '"',
|
||||||
|
next: "string"
|
||||||
|
}, {
|
||||||
|
token: "string.character",
|
||||||
|
regex: "'(?:" + escapeRe.source + "|.)'?"
|
||||||
|
}, {
|
||||||
|
regex: /0(?:[xX][0-9A-Fa-f]+|[oO][0-7]+)|\d+(\.\d+)?([eE][-+]?\d*)?/,
|
||||||
|
token: "constant.numeric"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "--.*"
|
||||||
|
}, {
|
||||||
|
token: "keyword",
|
||||||
|
regex: /\.\.|\||:|=|\\|"|->|<-|\u2192/
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /[-!#$%&*+.\/<=>?@\\^|~:\u03BB\u2192]+/
|
||||||
|
}, {
|
||||||
|
token: "operator.punctuation",
|
||||||
|
regex: /[,;`]/
|
||||||
|
}, {
|
||||||
|
regex: largeRe + idRe + "+\\.?",
|
||||||
|
token: function (value) {
|
||||||
|
if (value[value.length - 1] == ".")
|
||||||
|
return "entity.name.function";
|
||||||
|
return "constant.language";
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
regex: "^" + smallRe + idRe + "+",
|
||||||
|
token: function (value) {
|
||||||
|
return "constant.language";
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[\\w\\xff-\\u218e\\u2455-\\uffff]+\\b"
|
||||||
|
}, {
|
||||||
|
regex: "{-#?",
|
||||||
|
token: "comment.start",
|
||||||
|
onMatch: function (value, currentState, stack) {
|
||||||
|
this.next = value.length == 2 ? "blockComment" : "docComment";
|
||||||
|
return this.token;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
token: "variable.language",
|
||||||
|
regex: /\[markdown\|/,
|
||||||
|
next: "markdown"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /[\[({]/
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /[\])}]/
|
||||||
|
}],
|
||||||
|
markdown: [{
|
||||||
|
regex: /\|\]/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}],
|
||||||
|
blockComment: [{
|
||||||
|
regex: "{-",
|
||||||
|
token: "comment.start",
|
||||||
|
push: "blockComment"
|
||||||
|
}, {
|
||||||
|
regex: "-}",
|
||||||
|
token: "comment.end",
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}],
|
||||||
|
docComment: [{
|
||||||
|
regex: "{-",
|
||||||
|
token: "comment.start",
|
||||||
|
push: "docComment"
|
||||||
|
}, {
|
||||||
|
regex: "-}",
|
||||||
|
token: "comment.end",
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "doc.comment"
|
||||||
|
}],
|
||||||
|
string: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: escapeRe
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: /\\(\s|$)/,
|
||||||
|
next: "stringGap"
|
||||||
|
}, {
|
||||||
|
token: "string.end",
|
||||||
|
regex: '"',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}],
|
||||||
|
stringGap: [{
|
||||||
|
token: "text",
|
||||||
|
regex: /\\/,
|
||||||
|
next: "string"
|
||||||
|
}, {
|
||||||
|
token: "error",
|
||||||
|
regex: "",
|
||||||
|
next: "start"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(ElmHighlightRules, TextHighlightRules);
|
||||||
|
exports.ElmHighlightRules = ElmHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/elm",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/elm_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var HighlightRules = require("./elm_highlight_rules").ElmHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = HighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "--";
|
||||||
|
this.blockComment = { start: "{-", end: "-}", nestable: true };
|
||||||
|
this.$id = "ace/mode/elm";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/elm"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,836 @@
|
||||||
|
define("ace/mode/erlang_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from tm bundles\erlang.tmbundle\Syntaxes\Erlang.plist (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var ErlangHighlightRules = function () {
|
||||||
|
this.$rules = { start: [{ include: '#module-directive' },
|
||||||
|
{ include: '#import-export-directive' },
|
||||||
|
{ include: '#behaviour-directive' },
|
||||||
|
{ include: '#record-directive' },
|
||||||
|
{ include: '#define-directive' },
|
||||||
|
{ include: '#macro-directive' },
|
||||||
|
{ include: '#directive' },
|
||||||
|
{ include: '#function' },
|
||||||
|
{ include: '#everything-else' }],
|
||||||
|
'#atom': [{ token: 'punctuation.definition.symbol.begin.erlang',
|
||||||
|
regex: '\'',
|
||||||
|
push: [{ token: 'punctuation.definition.symbol.end.erlang',
|
||||||
|
regex: '\'',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: ['punctuation.definition.escape.erlang',
|
||||||
|
'constant.other.symbol.escape.erlang',
|
||||||
|
'punctuation.definition.escape.erlang',
|
||||||
|
'constant.other.symbol.escape.erlang',
|
||||||
|
'constant.other.symbol.escape.erlang'],
|
||||||
|
regex: '(\\\\)(?:([bdefnrstv\\\\\'"])|(\\^)([@-_])|([0-7]{1,3}))' },
|
||||||
|
{ token: 'invalid.illegal.atom.erlang', regex: '\\\\\\^?.?' },
|
||||||
|
{ defaultToken: 'constant.other.symbol.quoted.single.erlang' }] },
|
||||||
|
{ token: 'constant.other.symbol.unquoted.erlang',
|
||||||
|
regex: '[a-z][a-zA-Z\\d@_]*' }],
|
||||||
|
'#behaviour-directive': [{ token: ['meta.directive.behaviour.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.behaviour.erlang',
|
||||||
|
'keyword.control.directive.behaviour.erlang',
|
||||||
|
'meta.directive.behaviour.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang',
|
||||||
|
'meta.directive.behaviour.erlang',
|
||||||
|
'entity.name.type.class.behaviour.definition.erlang',
|
||||||
|
'meta.directive.behaviour.erlang',
|
||||||
|
'punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.behaviour.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(behaviour)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\))(\\s*)(\\.)' }],
|
||||||
|
'#binary': [{ token: 'punctuation.definition.binary.begin.erlang',
|
||||||
|
regex: '<<',
|
||||||
|
push: [{ token: 'punctuation.definition.binary.end.erlang',
|
||||||
|
regex: '>>',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: ['punctuation.separator.binary.erlang',
|
||||||
|
'punctuation.separator.value-size.erlang'],
|
||||||
|
regex: '(,)|(:)' },
|
||||||
|
{ include: '#internal-type-specifiers' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.structure.binary.erlang' }] }],
|
||||||
|
'#character': [{ token: ['punctuation.definition.character.erlang',
|
||||||
|
'punctuation.definition.escape.erlang',
|
||||||
|
'constant.character.escape.erlang',
|
||||||
|
'punctuation.definition.escape.erlang',
|
||||||
|
'constant.character.escape.erlang',
|
||||||
|
'constant.character.escape.erlang'],
|
||||||
|
regex: '(\\$)(\\\\)(?:([bdefnrstv\\\\\'"])|(\\^)([@-_])|([0-7]{1,3}))' },
|
||||||
|
{ token: 'invalid.illegal.character.erlang',
|
||||||
|
regex: '\\$\\\\\\^?.?' },
|
||||||
|
{ token: ['punctuation.definition.character.erlang',
|
||||||
|
'constant.character.erlang'],
|
||||||
|
regex: '(\\$)(\\S)' },
|
||||||
|
{ token: 'invalid.illegal.character.erlang', regex: '\\$.?' }],
|
||||||
|
'#comment': [{ token: 'punctuation.definition.comment.erlang',
|
||||||
|
regex: '%.*$',
|
||||||
|
push_: [{ token: 'comment.line.percentage.erlang',
|
||||||
|
regex: '$',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'comment.line.percentage.erlang' }] }],
|
||||||
|
'#define-directive': [{ token: ['meta.directive.define.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.define.erlang',
|
||||||
|
'keyword.control.directive.define.erlang',
|
||||||
|
'meta.directive.define.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang',
|
||||||
|
'meta.directive.define.erlang',
|
||||||
|
'entity.name.function.macro.definition.erlang',
|
||||||
|
'meta.directive.define.erlang',
|
||||||
|
'punctuation.separator.parameters.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(define)(\\s*)(\\()(\\s*)([a-zA-Z\\d@_]+)(\\s*)(,)',
|
||||||
|
push: [{ token: ['punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.define.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '(\\))(\\s*)(\\.)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.directive.define.erlang' }] },
|
||||||
|
{ token: 'meta.directive.define.erlang',
|
||||||
|
regex: '(?=^\\s*-\\s*define\\s*\\(\\s*[a-zA-Z\\d@_]+\\s*\\()',
|
||||||
|
push: [{ token: ['punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.define.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '(\\))(\\s*)(\\.)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: ['text',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'text',
|
||||||
|
'keyword.control.directive.define.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.definition.parameters.begin.erlang',
|
||||||
|
'text',
|
||||||
|
'entity.name.function.macro.definition.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.definition.parameters.begin.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(define)(\\s*)(\\()(\\s*)([a-zA-Z\\d@_]+)(\\s*)(\\()',
|
||||||
|
push: [{ token: ['punctuation.definition.parameters.end.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.separator.parameters.erlang'],
|
||||||
|
regex: '(\\))(\\s*)(,)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'punctuation.separator.parameters.erlang', regex: ',' },
|
||||||
|
{ include: '#everything-else' }] },
|
||||||
|
{ token: 'punctuation.separator.define.erlang',
|
||||||
|
regex: '\\|\\||\\||:|;|,|\\.|->' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.directive.define.erlang' }] }],
|
||||||
|
'#directive': [{ token: ['meta.directive.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.erlang',
|
||||||
|
'keyword.control.directive.erlang',
|
||||||
|
'meta.directive.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\(?)',
|
||||||
|
push: [{ token: ['punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '(\\)?)(\\s*)(\\.)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.directive.erlang' }] },
|
||||||
|
{ token: ['meta.directive.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.erlang',
|
||||||
|
'keyword.control.directive.erlang',
|
||||||
|
'meta.directive.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\.)' }],
|
||||||
|
'#everything-else': [{ include: '#comment' },
|
||||||
|
{ include: '#record-usage' },
|
||||||
|
{ include: '#macro-usage' },
|
||||||
|
{ include: '#expression' },
|
||||||
|
{ include: '#keyword' },
|
||||||
|
{ include: '#textual-operator' },
|
||||||
|
{ include: '#function-call' },
|
||||||
|
{ include: '#tuple' },
|
||||||
|
{ include: '#list' },
|
||||||
|
{ include: '#binary' },
|
||||||
|
{ include: '#parenthesized-expression' },
|
||||||
|
{ include: '#character' },
|
||||||
|
{ include: '#number' },
|
||||||
|
{ include: '#atom' },
|
||||||
|
{ include: '#string' },
|
||||||
|
{ include: '#symbolic-operator' },
|
||||||
|
{ include: '#variable' }],
|
||||||
|
'#expression': [{ token: 'keyword.control.if.erlang',
|
||||||
|
regex: '\\bif\\b',
|
||||||
|
push: [{ token: 'keyword.control.end.erlang',
|
||||||
|
regex: '\\bend\\b',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-expression-punctuation' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.expression.if.erlang' }] },
|
||||||
|
{ token: 'keyword.control.case.erlang',
|
||||||
|
regex: '\\bcase\\b',
|
||||||
|
push: [{ token: 'keyword.control.end.erlang',
|
||||||
|
regex: '\\bend\\b',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-expression-punctuation' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.expression.case.erlang' }] },
|
||||||
|
{ token: 'keyword.control.receive.erlang',
|
||||||
|
regex: '\\breceive\\b',
|
||||||
|
push: [{ token: 'keyword.control.end.erlang',
|
||||||
|
regex: '\\bend\\b',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-expression-punctuation' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.expression.receive.erlang' }] },
|
||||||
|
{ token: ['keyword.control.fun.erlang',
|
||||||
|
'text',
|
||||||
|
'entity.name.type.class.module.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.separator.module-function.erlang',
|
||||||
|
'text',
|
||||||
|
'entity.name.function.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.separator.function-arity.erlang'],
|
||||||
|
regex: '\\b(fun)(\\s*)(?:([a-z][a-zA-Z\\d@_]*)(\\s*)(:)(\\s*))?([a-z][a-zA-Z\\d@_]*)(\\s*)(/)' },
|
||||||
|
{ token: 'keyword.control.fun.erlang',
|
||||||
|
regex: '\\bfun\\b',
|
||||||
|
push: [{ token: 'keyword.control.end.erlang',
|
||||||
|
regex: '\\bend\\b',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'text',
|
||||||
|
regex: '(?=\\()',
|
||||||
|
push: [{ token: 'punctuation.separator.clauses.erlang',
|
||||||
|
regex: ';|(?=\\bend\\b)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-function-parts' }] },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.expression.fun.erlang' }] },
|
||||||
|
{ token: 'keyword.control.try.erlang',
|
||||||
|
regex: '\\btry\\b',
|
||||||
|
push: [{ token: 'keyword.control.end.erlang',
|
||||||
|
regex: '\\bend\\b',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-expression-punctuation' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.expression.try.erlang' }] },
|
||||||
|
{ token: 'keyword.control.begin.erlang',
|
||||||
|
regex: '\\bbegin\\b',
|
||||||
|
push: [{ token: 'keyword.control.end.erlang',
|
||||||
|
regex: '\\bend\\b',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-expression-punctuation' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.expression.begin.erlang' }] },
|
||||||
|
{ token: 'keyword.control.query.erlang',
|
||||||
|
regex: '\\bquery\\b',
|
||||||
|
push: [{ token: 'keyword.control.end.erlang',
|
||||||
|
regex: '\\bend\\b',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.expression.query.erlang' }] }],
|
||||||
|
'#function': [{ token: ['meta.function.erlang',
|
||||||
|
'entity.name.function.definition.erlang',
|
||||||
|
'meta.function.erlang'],
|
||||||
|
regex: '^(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(?=\\()',
|
||||||
|
push: [{ token: 'punctuation.terminator.function.erlang',
|
||||||
|
regex: '\\.',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: ['text', 'entity.name.function.erlang', 'text'],
|
||||||
|
regex: '^(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(?=\\()' },
|
||||||
|
{ token: 'text',
|
||||||
|
regex: '(?=\\()',
|
||||||
|
push: [{ token: 'punctuation.separator.clauses.erlang',
|
||||||
|
regex: ';|(?=\\.)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#parenthesized-expression' },
|
||||||
|
{ include: '#internal-function-parts' }] },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.function.erlang' }] }],
|
||||||
|
'#function-call': [{ token: 'meta.function-call.erlang',
|
||||||
|
regex: '(?=(?:[a-z][a-zA-Z\\d@_]*|\'[^\']*\')\\s*(?:\\(|:\\s*(?:[a-z][a-zA-Z\\d@_]*|\'[^\']*\')\\s*\\())',
|
||||||
|
push: [{ token: 'punctuation.definition.parameters.end.erlang',
|
||||||
|
regex: '\\)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: ['entity.name.type.class.module.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.separator.module-function.erlang',
|
||||||
|
'text',
|
||||||
|
'entity.name.function.guard.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.definition.parameters.begin.erlang'],
|
||||||
|
regex: '(?:(erlang)(\\s*)(:)(\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\s*)(\\()',
|
||||||
|
push: [{ token: 'text', regex: '(?=\\))', next: 'pop' },
|
||||||
|
{ token: 'punctuation.separator.parameters.erlang', regex: ',' },
|
||||||
|
{ include: '#everything-else' }] },
|
||||||
|
{ token: ['entity.name.type.class.module.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.separator.module-function.erlang',
|
||||||
|
'text',
|
||||||
|
'entity.name.function.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.definition.parameters.begin.erlang'],
|
||||||
|
regex: '(?:([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(:)(\\s*))?([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(\\()',
|
||||||
|
push: [{ token: 'text', regex: '(?=\\))', next: 'pop' },
|
||||||
|
{ token: 'punctuation.separator.parameters.erlang', regex: ',' },
|
||||||
|
{ include: '#everything-else' }] },
|
||||||
|
{ defaultToken: 'meta.function-call.erlang' }] }],
|
||||||
|
'#import-export-directive': [{ token: ['meta.directive.import.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.import.erlang',
|
||||||
|
'keyword.control.directive.import.erlang',
|
||||||
|
'meta.directive.import.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang',
|
||||||
|
'meta.directive.import.erlang',
|
||||||
|
'entity.name.type.class.module.erlang',
|
||||||
|
'meta.directive.import.erlang',
|
||||||
|
'punctuation.separator.parameters.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(import)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(,)',
|
||||||
|
push: [{ token: ['punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.import.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '(\\))(\\s*)(\\.)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-function-list' },
|
||||||
|
{ defaultToken: 'meta.directive.import.erlang' }] },
|
||||||
|
{ token: ['meta.directive.export.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.export.erlang',
|
||||||
|
'keyword.control.directive.export.erlang',
|
||||||
|
'meta.directive.export.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(export)(\\s*)(\\()',
|
||||||
|
push: [{ token: ['punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.export.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '(\\))(\\s*)(\\.)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-function-list' },
|
||||||
|
{ defaultToken: 'meta.directive.export.erlang' }] }],
|
||||||
|
'#internal-expression-punctuation': [{ token: ['punctuation.separator.clause-head-body.erlang',
|
||||||
|
'punctuation.separator.clauses.erlang',
|
||||||
|
'punctuation.separator.expressions.erlang'],
|
||||||
|
regex: '(->)|(;)|(,)' }],
|
||||||
|
'#internal-function-list': [{ token: 'punctuation.definition.list.begin.erlang',
|
||||||
|
regex: '\\[',
|
||||||
|
push: [{ token: 'punctuation.definition.list.end.erlang',
|
||||||
|
regex: '\\]',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: ['entity.name.function.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.separator.function-arity.erlang'],
|
||||||
|
regex: '([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(/)',
|
||||||
|
push: [{ token: 'punctuation.separator.list.erlang',
|
||||||
|
regex: ',|(?=\\])',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#everything-else' }] },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.structure.list.function.erlang' }] }],
|
||||||
|
'#internal-function-parts': [{ token: 'text',
|
||||||
|
regex: '(?=\\()',
|
||||||
|
push: [{ token: 'punctuation.separator.clause-head-body.erlang',
|
||||||
|
regex: '->',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'punctuation.definition.parameters.begin.erlang',
|
||||||
|
regex: '\\(',
|
||||||
|
push: [{ token: 'punctuation.definition.parameters.end.erlang',
|
||||||
|
regex: '\\)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'punctuation.separator.parameters.erlang', regex: ',' },
|
||||||
|
{ include: '#everything-else' }] },
|
||||||
|
{ token: 'punctuation.separator.guards.erlang', regex: ',|;' },
|
||||||
|
{ include: '#everything-else' }] },
|
||||||
|
{ token: 'punctuation.separator.expressions.erlang',
|
||||||
|
regex: ',' },
|
||||||
|
{ include: '#everything-else' }],
|
||||||
|
'#internal-record-body': [{ token: 'punctuation.definition.class.record.begin.erlang',
|
||||||
|
regex: '\\{',
|
||||||
|
push: [{ token: 'meta.structure.record.erlang',
|
||||||
|
regex: '(?=\\})',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: ['variable.other.field.erlang',
|
||||||
|
'variable.language.omitted.field.erlang',
|
||||||
|
'text',
|
||||||
|
'keyword.operator.assignment.erlang'],
|
||||||
|
regex: '(?:([a-z][a-zA-Z\\d@_]*|\'[^\']*\')|(_))(\\s*)(=|::)',
|
||||||
|
push: [{ token: 'punctuation.separator.class.record.erlang',
|
||||||
|
regex: ',|(?=\\})',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#everything-else' }] },
|
||||||
|
{ token: ['variable.other.field.erlang',
|
||||||
|
'text',
|
||||||
|
'punctuation.separator.class.record.erlang'],
|
||||||
|
regex: '([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)((?:,)?)' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.structure.record.erlang' }] }],
|
||||||
|
'#internal-type-specifiers': [{ token: 'punctuation.separator.value-type.erlang',
|
||||||
|
regex: '/',
|
||||||
|
push: [{ token: 'text', regex: '(?=,|:|>>)', next: 'pop' },
|
||||||
|
{ token: ['storage.type.erlang',
|
||||||
|
'storage.modifier.signedness.erlang',
|
||||||
|
'storage.modifier.endianness.erlang',
|
||||||
|
'storage.modifier.unit.erlang',
|
||||||
|
'punctuation.separator.type-specifiers.erlang'],
|
||||||
|
regex: '(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)' }] }],
|
||||||
|
'#keyword': [{ token: 'keyword.control.erlang',
|
||||||
|
regex: '\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\b' }],
|
||||||
|
'#list': [{ token: 'punctuation.definition.list.begin.erlang',
|
||||||
|
regex: '\\[',
|
||||||
|
push: [{ token: 'punctuation.definition.list.end.erlang',
|
||||||
|
regex: '\\]',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'punctuation.separator.list.erlang',
|
||||||
|
regex: '\\||\\|\\||,' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.structure.list.erlang' }] }],
|
||||||
|
'#macro-directive': [{ token: ['meta.directive.ifdef.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.ifdef.erlang',
|
||||||
|
'keyword.control.directive.ifdef.erlang',
|
||||||
|
'meta.directive.ifdef.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang',
|
||||||
|
'meta.directive.ifdef.erlang',
|
||||||
|
'entity.name.function.macro.erlang',
|
||||||
|
'meta.directive.ifdef.erlang',
|
||||||
|
'punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.ifdef.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(ifdef)(\\s*)(\\()(\\s*)([a-zA-Z\\d@_]+)(\\s*)(\\))(\\s*)(\\.)' },
|
||||||
|
{ token: ['meta.directive.ifndef.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.ifndef.erlang',
|
||||||
|
'keyword.control.directive.ifndef.erlang',
|
||||||
|
'meta.directive.ifndef.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang',
|
||||||
|
'meta.directive.ifndef.erlang',
|
||||||
|
'entity.name.function.macro.erlang',
|
||||||
|
'meta.directive.ifndef.erlang',
|
||||||
|
'punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.ifndef.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(ifndef)(\\s*)(\\()(\\s*)([a-zA-Z\\d@_]+)(\\s*)(\\))(\\s*)(\\.)' },
|
||||||
|
{ token: ['meta.directive.undef.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.undef.erlang',
|
||||||
|
'keyword.control.directive.undef.erlang',
|
||||||
|
'meta.directive.undef.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang',
|
||||||
|
'meta.directive.undef.erlang',
|
||||||
|
'entity.name.function.macro.erlang',
|
||||||
|
'meta.directive.undef.erlang',
|
||||||
|
'punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.undef.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(undef)(\\s*)(\\()(\\s*)([a-zA-Z\\d@_]+)(\\s*)(\\))(\\s*)(\\.)' }],
|
||||||
|
'#macro-usage': [{ token: ['keyword.operator.macro.erlang',
|
||||||
|
'meta.macro-usage.erlang',
|
||||||
|
'entity.name.function.macro.erlang'],
|
||||||
|
regex: '(\\?\\??)(\\s*)([a-zA-Z\\d@_]+)' }],
|
||||||
|
'#module-directive': [{ token: ['meta.directive.module.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.module.erlang',
|
||||||
|
'keyword.control.directive.module.erlang',
|
||||||
|
'meta.directive.module.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang',
|
||||||
|
'meta.directive.module.erlang',
|
||||||
|
'entity.name.type.class.module.definition.erlang',
|
||||||
|
'meta.directive.module.erlang',
|
||||||
|
'punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.module.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(module)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\))(\\s*)(\\.)' }],
|
||||||
|
'#number': [{ token: 'text',
|
||||||
|
regex: '(?=\\d)',
|
||||||
|
push: [{ token: 'text', regex: '(?!\\d)', next: 'pop' },
|
||||||
|
{ token: ['constant.numeric.float.erlang',
|
||||||
|
'punctuation.separator.integer-float.erlang',
|
||||||
|
'constant.numeric.float.erlang',
|
||||||
|
'punctuation.separator.float-exponent.erlang'],
|
||||||
|
regex: '(\\d+)(\\.)(\\d+)((?:[eE][\\+\\-]?\\d+)?)' },
|
||||||
|
{ token: ['constant.numeric.integer.binary.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.binary.erlang'],
|
||||||
|
regex: '(2)(#)([0-1]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-3.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-3.erlang'],
|
||||||
|
regex: '(3)(#)([0-2]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-4.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-4.erlang'],
|
||||||
|
regex: '(4)(#)([0-3]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-5.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-5.erlang'],
|
||||||
|
regex: '(5)(#)([0-4]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-6.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-6.erlang'],
|
||||||
|
regex: '(6)(#)([0-5]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-7.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-7.erlang'],
|
||||||
|
regex: '(7)(#)([0-6]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.octal.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.octal.erlang'],
|
||||||
|
regex: '(8)(#)([0-7]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-9.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-9.erlang'],
|
||||||
|
regex: '(9)(#)([0-8]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.decimal.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.decimal.erlang'],
|
||||||
|
regex: '(10)(#)(\\d+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-11.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-11.erlang'],
|
||||||
|
regex: '(11)(#)([\\daA]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-12.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-12.erlang'],
|
||||||
|
regex: '(12)(#)([\\da-bA-B]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-13.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-13.erlang'],
|
||||||
|
regex: '(13)(#)([\\da-cA-C]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-14.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-14.erlang'],
|
||||||
|
regex: '(14)(#)([\\da-dA-D]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-15.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-15.erlang'],
|
||||||
|
regex: '(15)(#)([\\da-eA-E]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.hexadecimal.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.hexadecimal.erlang'],
|
||||||
|
regex: '(16)(#)([\\da-fA-F]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-17.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-17.erlang'],
|
||||||
|
regex: '(17)(#)([\\da-gA-G]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-18.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-18.erlang'],
|
||||||
|
regex: '(18)(#)([\\da-hA-H]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-19.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-19.erlang'],
|
||||||
|
regex: '(19)(#)([\\da-iA-I]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-20.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-20.erlang'],
|
||||||
|
regex: '(20)(#)([\\da-jA-J]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-21.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-21.erlang'],
|
||||||
|
regex: '(21)(#)([\\da-kA-K]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-22.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-22.erlang'],
|
||||||
|
regex: '(22)(#)([\\da-lA-L]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-23.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-23.erlang'],
|
||||||
|
regex: '(23)(#)([\\da-mA-M]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-24.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-24.erlang'],
|
||||||
|
regex: '(24)(#)([\\da-nA-N]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-25.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-25.erlang'],
|
||||||
|
regex: '(25)(#)([\\da-oA-O]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-26.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-26.erlang'],
|
||||||
|
regex: '(26)(#)([\\da-pA-P]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-27.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-27.erlang'],
|
||||||
|
regex: '(27)(#)([\\da-qA-Q]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-28.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-28.erlang'],
|
||||||
|
regex: '(28)(#)([\\da-rA-R]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-29.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-29.erlang'],
|
||||||
|
regex: '(29)(#)([\\da-sA-S]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-30.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-30.erlang'],
|
||||||
|
regex: '(30)(#)([\\da-tA-T]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-31.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-31.erlang'],
|
||||||
|
regex: '(31)(#)([\\da-uA-U]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-32.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-32.erlang'],
|
||||||
|
regex: '(32)(#)([\\da-vA-V]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-33.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-33.erlang'],
|
||||||
|
regex: '(33)(#)([\\da-wA-W]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-34.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-34.erlang'],
|
||||||
|
regex: '(34)(#)([\\da-xA-X]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-35.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-35.erlang'],
|
||||||
|
regex: '(35)(#)([\\da-yA-Y]+)' },
|
||||||
|
{ token: ['constant.numeric.integer.base-36.erlang',
|
||||||
|
'punctuation.separator.base-integer.erlang',
|
||||||
|
'constant.numeric.integer.base-36.erlang'],
|
||||||
|
regex: '(36)(#)([\\da-zA-Z]+)' },
|
||||||
|
{ token: 'invalid.illegal.integer.erlang',
|
||||||
|
regex: '\\d+#[\\da-zA-Z]+' },
|
||||||
|
{ token: 'constant.numeric.integer.decimal.erlang',
|
||||||
|
regex: '\\d+' }] }],
|
||||||
|
'#parenthesized-expression': [{ token: 'punctuation.section.expression.begin.erlang',
|
||||||
|
regex: '\\(',
|
||||||
|
push: [{ token: 'punctuation.section.expression.end.erlang',
|
||||||
|
regex: '\\)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.expression.parenthesized' }] }],
|
||||||
|
'#record-directive': [{ token: ['meta.directive.record.erlang',
|
||||||
|
'punctuation.section.directive.begin.erlang',
|
||||||
|
'meta.directive.record.erlang',
|
||||||
|
'keyword.control.directive.import.erlang',
|
||||||
|
'meta.directive.record.erlang',
|
||||||
|
'punctuation.definition.parameters.begin.erlang',
|
||||||
|
'meta.directive.record.erlang',
|
||||||
|
'entity.name.type.class.record.definition.erlang',
|
||||||
|
'meta.directive.record.erlang',
|
||||||
|
'punctuation.separator.parameters.erlang'],
|
||||||
|
regex: '^(\\s*)(-)(\\s*)(record)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(,)',
|
||||||
|
push: [{ token: ['punctuation.definition.class.record.end.erlang',
|
||||||
|
'meta.directive.record.erlang',
|
||||||
|
'punctuation.definition.parameters.end.erlang',
|
||||||
|
'meta.directive.record.erlang',
|
||||||
|
'punctuation.section.directive.end.erlang'],
|
||||||
|
regex: '(\\})(\\s*)(\\))(\\s*)(\\.)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-record-body' },
|
||||||
|
{ defaultToken: 'meta.directive.record.erlang' }] }],
|
||||||
|
'#record-usage': [{ token: ['keyword.operator.record.erlang',
|
||||||
|
'meta.record-usage.erlang',
|
||||||
|
'entity.name.type.class.record.erlang',
|
||||||
|
'meta.record-usage.erlang',
|
||||||
|
'punctuation.separator.record-field.erlang',
|
||||||
|
'meta.record-usage.erlang',
|
||||||
|
'variable.other.field.erlang'],
|
||||||
|
regex: '(#)(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(\\.)(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')' },
|
||||||
|
{ token: ['keyword.operator.record.erlang',
|
||||||
|
'meta.record-usage.erlang',
|
||||||
|
'entity.name.type.class.record.erlang'],
|
||||||
|
regex: '(#)(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')',
|
||||||
|
push: [{ token: 'punctuation.definition.class.record.end.erlang',
|
||||||
|
regex: '\\}',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#internal-record-body' },
|
||||||
|
{ defaultToken: 'meta.record-usage.erlang' }] }],
|
||||||
|
'#string': [{ token: 'punctuation.definition.string.begin.erlang',
|
||||||
|
regex: '"',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.erlang',
|
||||||
|
regex: '"',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: ['punctuation.definition.escape.erlang',
|
||||||
|
'constant.character.escape.erlang',
|
||||||
|
'punctuation.definition.escape.erlang',
|
||||||
|
'constant.character.escape.erlang',
|
||||||
|
'constant.character.escape.erlang'],
|
||||||
|
regex: '(\\\\)(?:([bdefnrstv\\\\\'"])|(\\^)([@-_])|([0-7]{1,3}))' },
|
||||||
|
{ token: 'invalid.illegal.string.erlang', regex: '\\\\\\^?.?' },
|
||||||
|
{ token: ['punctuation.definition.erlang',
|
||||||
|
'punctuation.separator.erlang',
|
||||||
|
'constant.other.erlang',
|
||||||
|
'punctuation.separator.erlang',
|
||||||
|
'punctuation.separator.erlang',
|
||||||
|
'constant.other.erlang',
|
||||||
|
'punctuation.separator.erlang',
|
||||||
|
'punctuation.separator.erlang',
|
||||||
|
'punctuation.separator.erlang',
|
||||||
|
'constant.other.erlang',
|
||||||
|
'constant.other.erlang'],
|
||||||
|
regex: '(~)(?:((?:\\-)?)(\\d+)|(\\*))?(?:(\\.)(?:(\\d+)|(\\*)))?(?:(\\.)(?:(\\*)|(.)))?([~cfegswpWPBX#bx\\+ni])' },
|
||||||
|
{ token: ['punctuation.definition.erlang',
|
||||||
|
'punctuation.separator.erlang',
|
||||||
|
'constant.other.erlang',
|
||||||
|
'constant.other.erlang'],
|
||||||
|
regex: '(~)((?:\\*)?)((?:\\d+)?)([~du\\-#fsacl])' },
|
||||||
|
{ token: 'invalid.illegal.string.erlang', regex: '~.?' },
|
||||||
|
{ defaultToken: 'string.quoted.double.erlang' }] }],
|
||||||
|
'#symbolic-operator': [{ token: 'keyword.operator.symbolic.erlang',
|
||||||
|
regex: '\\+\\+|\\+|--|-|\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::' }],
|
||||||
|
'#textual-operator': [{ token: 'keyword.operator.textual.erlang',
|
||||||
|
regex: '\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\b' }],
|
||||||
|
'#tuple': [{ token: 'punctuation.definition.tuple.begin.erlang',
|
||||||
|
regex: '\\{',
|
||||||
|
push: [{ token: 'punctuation.definition.tuple.end.erlang',
|
||||||
|
regex: '\\}',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'punctuation.separator.tuple.erlang', regex: ',' },
|
||||||
|
{ include: '#everything-else' },
|
||||||
|
{ defaultToken: 'meta.structure.tuple.erlang' }] }],
|
||||||
|
'#variable': [{ token: ['variable.other.erlang', 'variable.language.omitted.erlang'],
|
||||||
|
regex: '(_[a-zA-Z\\d@_]+|[A-Z][a-zA-Z\\d@_]*)|(_)' }] };
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
ErlangHighlightRules.metaData = { comment: 'The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace). Also, the function/module/record/macro names must be given unquoted. -- desp',
|
||||||
|
fileTypes: ['erl', 'hrl'],
|
||||||
|
keyEquivalent: '^~E',
|
||||||
|
name: 'Erlang',
|
||||||
|
scopeName: 'source.erlang' };
|
||||||
|
oop.inherits(ErlangHighlightRules, TextHighlightRules);
|
||||||
|
exports.ErlangHighlightRules = ErlangHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/erlang",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/erlang_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var ErlangHighlightRules = require("./erlang_highlight_rules").ErlangHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = ErlangHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "%";
|
||||||
|
this.blockComment = null;
|
||||||
|
this.$id = "ace/mode/erlang";
|
||||||
|
this.snippetFileId = "ace/snippets/erlang";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/erlang"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,164 @@
|
||||||
|
define("ace/mode/flix_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 FlixHighlightRules = function () {
|
||||||
|
var keywords = ("use|checked_cast|checked_ecast|unchecked_cast|masked_cast|as|discard|from|" +
|
||||||
|
"into|inject|project|solve|query|where|select|force|import|region|red|deref");
|
||||||
|
var controlKeywords = ("choose|debug|do|for|forA|forM|foreach|yield|if|else|case|" +
|
||||||
|
"match|typematch|try|catch|resume|spawn|par|branch|jumpto");
|
||||||
|
var operators = "not|and|or|fix";
|
||||||
|
var declarations = "eff|def|law|enum|case|type|alias|class|instance|mod|let";
|
||||||
|
var modifiers = "with|without|opaque|lazy|lawful|pub|override|sealed|static";
|
||||||
|
var primitives = "Unit|Bool|Char|Float32|Float64|Int8|Int16|Int32|Int64|BigInt|String";
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"keyword": keywords,
|
||||||
|
"keyword.control": controlKeywords,
|
||||||
|
"keyword.operator": operators,
|
||||||
|
"storage.type": declarations,
|
||||||
|
"storage.modifier": modifiers,
|
||||||
|
"support.type": primitives
|
||||||
|
}, "identifier");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.line",
|
||||||
|
regex: "\\/\\/.*$"
|
||||||
|
}, {
|
||||||
|
token: "comment.block",
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"',
|
||||||
|
next: "string"
|
||||||
|
}, {
|
||||||
|
token: "string.regexp",
|
||||||
|
regex: 'regex"',
|
||||||
|
next: "regex"
|
||||||
|
}, {
|
||||||
|
token: "constant.character",
|
||||||
|
regex: "'",
|
||||||
|
next: "char"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0x[a-fA-F0-9](_*[a-fA-F0-9])*(i8|i16|i32|i64|ii)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[0-9](_*[0-9])*\\.[0-9](_*[0-9])*(f32|f64)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // integer
|
||||||
|
regex: "[0-9](_*[0-9])*(i8|i16|i32|i64|ii)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.boolean",
|
||||||
|
regex: "(true|false)\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.language",
|
||||||
|
regex: "null\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "\\->|~>|<\\-|=>"
|
||||||
|
}, {
|
||||||
|
token: "storage.modifier",
|
||||||
|
regex: "@(Deprecated|Experimental|Internal|ParallelWhenPure|Parallel|LazyWhenPure|Lazy|Skip|Test)\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // hole
|
||||||
|
regex: "(\\?\\?\\?|\\?[a-zA-Z0-9]+)"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment.block",
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment.block"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"string": [
|
||||||
|
{
|
||||||
|
token: "constant.character.escape", // unicode
|
||||||
|
regex: "\\\\(u[0-9a-fA-F]{4})"
|
||||||
|
}, {
|
||||||
|
token: "constant.character.escape",
|
||||||
|
regex: '\\\\.'
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '[^"\\\\]+'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"regex": [
|
||||||
|
{
|
||||||
|
token: "constant.character.escape", // unicode
|
||||||
|
regex: "\\\\(u[0-9a-fA-F]{4})"
|
||||||
|
}, {
|
||||||
|
token: "constant.character.escape",
|
||||||
|
regex: '\\\\.'
|
||||||
|
}, {
|
||||||
|
token: "string.regexp",
|
||||||
|
regex: '"',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "string.regexp",
|
||||||
|
regex: '[^"\\\\]+'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"char": [
|
||||||
|
{
|
||||||
|
token: "constant.character.escape", // unicode
|
||||||
|
regex: "\\\\(u[0-9a-fA-F]{4})"
|
||||||
|
}, {
|
||||||
|
token: "constant.character.escape",
|
||||||
|
regex: '\\\\.'
|
||||||
|
}, {
|
||||||
|
token: "constant.character",
|
||||||
|
regex: "'",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "constant.character",
|
||||||
|
regex: "[^'\\\\]+"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(FlixHighlightRules, TextHighlightRules);
|
||||||
|
exports.FlixHighlightRules = FlixHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/flix",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/flix_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var FlixHighlightRules = require("./flix_highlight_rules").FlixHighlightRules;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = FlixHighlightRules;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/flix";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/flix"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,253 @@
|
||||||
|
define("ace/mode/forth_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from https://raw.github.com/vze26m98/Forth.tmbundle/master/Syntaxes/Forth.tmLanguage (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var ForthHighlightRules = function () {
|
||||||
|
this.$rules = { start: [{ include: '#forth' }],
|
||||||
|
'#comment': [{ token: 'comment.line.double-dash.forth',
|
||||||
|
regex: '(?:^|\\s)--\\s.*$',
|
||||||
|
comment: 'line comments for iForth' },
|
||||||
|
{ token: 'comment.line.backslash.forth',
|
||||||
|
regex: '(?:^|\\s)\\\\[\\s\\S]*$',
|
||||||
|
comment: 'ANSI line comment' },
|
||||||
|
{ token: 'comment.line.backslash-g.forth',
|
||||||
|
regex: '(?:^|\\s)\\\\[Gg] .*$',
|
||||||
|
comment: 'gForth line comment' },
|
||||||
|
{ token: 'comment.block.forth',
|
||||||
|
regex: '(?:^|\\s)\\(\\*(?=\\s|$)',
|
||||||
|
push: [{ token: 'comment.block.forth',
|
||||||
|
regex: '(?:^|\\s)\\*\\)(?=\\s|$)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'comment.block.forth' }],
|
||||||
|
comment: 'multiline comments for iForth' },
|
||||||
|
{ token: 'comment.block.documentation.forth',
|
||||||
|
regex: '\\bDOC\\b',
|
||||||
|
caseInsensitive: true,
|
||||||
|
push: [{ token: 'comment.block.documentation.forth',
|
||||||
|
regex: '\\bENDDOC\\b',
|
||||||
|
caseInsensitive: true,
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'comment.block.documentation.forth' }],
|
||||||
|
comment: 'documentation comments for iForth' },
|
||||||
|
{ token: 'comment.line.parentheses.forth',
|
||||||
|
regex: '(?:^|\\s)\\.?\\( [^)]*\\)',
|
||||||
|
comment: 'ANSI line comment' }],
|
||||||
|
'#constant': [{ token: 'constant.language.forth',
|
||||||
|
regex: '(?:^|\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\s|$)',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'constant.numeric.forth',
|
||||||
|
regex: '(?:^|\\s)[$#%]?[-+]?[0-9]+(?:\\.[0-9]*e-?[0-9]+|\\.?[0-9a-fA-F]*)(?=\\s|$)' },
|
||||||
|
{ token: 'constant.character.forth',
|
||||||
|
regex: '(?:^|\\s)(?:[&^]\\S|(?:"|\')\\S(?:"|\'))(?=\\s|$)' }],
|
||||||
|
'#forth': [{ include: '#constant' },
|
||||||
|
{ include: '#comment' },
|
||||||
|
{ include: '#string' },
|
||||||
|
{ include: '#word' },
|
||||||
|
{ include: '#variable' },
|
||||||
|
{ include: '#storage' },
|
||||||
|
{ include: '#word-def' }],
|
||||||
|
'#storage': [{ token: 'storage.type.forth',
|
||||||
|
regex: '(?:^|\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\s|$)',
|
||||||
|
caseInsensitive: true }],
|
||||||
|
'#string': [{ token: 'string.quoted.double.forth',
|
||||||
|
regex: '(ABORT" |BREAK" |\\." |C" |0"|S\\\\?" )([^"]+")',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'string.unquoted.forth',
|
||||||
|
regex: '(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\S+(?=\\s|$)',
|
||||||
|
caseInsensitive: true }],
|
||||||
|
'#variable': [{ token: 'variable.language.forth',
|
||||||
|
regex: '\\b(?:I|J)\\b',
|
||||||
|
caseInsensitive: true }],
|
||||||
|
'#word': [{ token: 'keyword.control.immediate.forth',
|
||||||
|
regex: '(?:^|\\s)\\[(?:\\?DO|\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\](?=\\s|$)',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.other.immediate.forth',
|
||||||
|
regex: '(?:^|\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT\'S|])(?=\\s|$)',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.control.compile-only.forth',
|
||||||
|
regex: '(?:^|\\s)(?:-DO|\\-LOOP|\\?DO|\\?LEAVE|\\+DO|\\+LOOP|ABORT\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\-DO|U\\+DO|UNTIL|WHILE)(?=\\s|$)',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.other.compile-only.forth',
|
||||||
|
regex: '(?:^|\\s)(?:\\?DUP-0=-IF|\\?DUP-IF|\\)|\\[|\\[\'\\]|\\[CHAR\\]|\\[COMPILE\\]|\\[IS\\]|\\[TO\\]|<COMPILATION|<INTERPRETATION|ASSERT\\(|ASSERT0\\(|ASSERT1\\(|ASSERT2\\(|ASSERT3\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\s|$)',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.other.non-immediate.forth',
|
||||||
|
regex: '(?:^|\\s)(?:\'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\s|$)',
|
||||||
|
caseInsensitive: true },
|
||||||
|
{ token: 'keyword.other.warning.forth',
|
||||||
|
regex: '(?:^|\\s)(?:~~|BREAK:|BREAK"|DBG)(?=\\s|$)',
|
||||||
|
caseInsensitive: true }],
|
||||||
|
'#word-def': [{ token: ['keyword.other.compile-only.forth',
|
||||||
|
'keyword.other.compile-only.forth',
|
||||||
|
'meta.block.forth',
|
||||||
|
'entity.name.function.forth'],
|
||||||
|
regex: '(:NONAME)|(^:|\\s:)(\\s)(\\S+)(?=\\s|$)',
|
||||||
|
caseInsensitive: true,
|
||||||
|
push: [{ token: 'keyword.other.compile-only.forth',
|
||||||
|
regex: ';(?:CODE)?',
|
||||||
|
caseInsensitive: true,
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#constant' },
|
||||||
|
{ include: '#comment' },
|
||||||
|
{ include: '#string' },
|
||||||
|
{ include: '#word' },
|
||||||
|
{ include: '#variable' },
|
||||||
|
{ include: '#storage' },
|
||||||
|
{ defaultToken: 'meta.block.forth' }] }] };
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
ForthHighlightRules.metaData = { fileTypes: ['frt', 'fs', 'ldr', 'fth', '4th'],
|
||||||
|
foldingStartMarker: '/\\*\\*|\\{\\s*$',
|
||||||
|
foldingStopMarker: '\\*\\*/|^\\s*\\}',
|
||||||
|
keyEquivalent: '^~F',
|
||||||
|
name: 'Forth',
|
||||||
|
scopeName: 'source.forth' };
|
||||||
|
oop.inherits(ForthHighlightRules, TextHighlightRules);
|
||||||
|
exports.ForthHighlightRules = ForthHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/forth",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/forth_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var ForthHighlightRules = require("./forth_highlight_rules").ForthHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = ForthHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "--";
|
||||||
|
this.blockComment = null;
|
||||||
|
this.$id = "ace/mode/forth";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/forth"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,361 @@
|
||||||
|
define("ace/mode/fortran_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* Derived from Python highlighing rules */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var FortranHighlightRules = function () {
|
||||||
|
var keywords = ("call|case|contains|continue|cycle|do|else|elseif|end|enddo|endif|function|" +
|
||||||
|
"if|implicit|in|include|inout|intent|module|none|only|out|print|program|return|" +
|
||||||
|
"select|status|stop|subroutine|" +
|
||||||
|
"return|then|use|while|write|" +
|
||||||
|
"CALL|CASE|CONTAINS|CONTINUE|CYCLE|DO|ELSE|ELSEIF|END|ENDDO|ENDIF|FUNCTION|" +
|
||||||
|
"IF|IMPLICIT|IN|INCLUDE|INOUT|INTENT|MODULE|NONE|ONLY|OUT|PRINT|PROGRAM|RETURN|" +
|
||||||
|
"SELECT|STATUS|STOP|SUBROUTINE|" +
|
||||||
|
"RETURN|THEN|USE|WHILE|WRITE");
|
||||||
|
var keywordOperators = ("and|or|not|eq|ne|gt|ge|lt|le|" +
|
||||||
|
"AND|OR|NOT|EQ|NE|GT|GE|LT|LE");
|
||||||
|
var builtinConstants = ("true|false|TRUE|FALSE");
|
||||||
|
var builtinFunctions = ("abs|achar|acos|acosh|adjustl|adjustr|aimag|aint|all|allocate|" +
|
||||||
|
"anint|any|asin|asinh|associated|atan|atan2|atanh|" +
|
||||||
|
"bessel_j0|bessel_j1|bessel_jn|bessel_y0|bessel_y1|bessel_yn|" +
|
||||||
|
"bge|bgt|bit_size|ble|blt|btest|ceiling|char|cmplx|conjg|cos|cosh|" +
|
||||||
|
"count|cpu_time|cshift|date_and_time|dble|deallocate|digits|dim|dot_product|dprod|" +
|
||||||
|
"dshiftl|dshiftr|dsqrt|eoshift|epsilon|erf|erfc|erfc_scaled|exp|float|floor|" +
|
||||||
|
"format|fraction|gamma|input|len|lge|lgt|lle|llt|log|log10|maskl|maskr|matmul|max|maxloc|maxval|" +
|
||||||
|
"merge|min|minloc|minval|mod|modulo|nint|not|norm2|null|nullify|pack|parity|popcnt|poppar|" +
|
||||||
|
"precision|present|product|radix|random_number|random_seed|range|repeat|reshape|round|" +
|
||||||
|
"rrspacing|same_type_as|scale|scan|selected_char_kind|selected_int_kind|selected_real_kind|" +
|
||||||
|
"set_exponent|shape|shifta|shiftl|shiftr|sign|sin|sinh|size|sngl|spacing|spread|" +
|
||||||
|
"sqrt|sum|system_clock|tan|tanh|tiny|trailz|transfer|transpose|trim|ubound|unpack|verify|" +
|
||||||
|
"ABS|ACHAR|ACOS|ACOSH|ADJUSTL|ADJUSTR|AIMAG|AINT|ALL|ALLOCATE|" +
|
||||||
|
"ANINT|ANY|ASIN|ASINH|ASSOCIATED|ATAN|ATAN2|ATANH|" +
|
||||||
|
"BESSEL_J0|BESSEL_J1|BESSEL_JN|BESSEL_Y0|BESSEL_Y1|BESSEL_YN|" +
|
||||||
|
"BGE|BGT|BIT_SIZE|BLE|BLT|BTEST|CEILING|CHAR|CMPLX|CONJG|COS|COSH|" +
|
||||||
|
"COUNT|CPU_TIME|CSHIFT|DATE_AND_TIME|DBLE|DEALLOCATE|DIGITS|DIM|DOT_PRODUCT|DPROD|" +
|
||||||
|
"DSHIFTL|DSHIFTR|DSQRT|EOSHIFT|EPSILON|ERF|ERFC|ERFC_SCALED|EXP|FLOAT|FLOOR|" +
|
||||||
|
"FORMAT|FRACTION|GAMMA|INPUT|LEN|LGE|LGT|LLE|LLT|LOG|LOG10|MASKL|MASKR|MATMUL|MAX|MAXLOC|MAXVAL|" +
|
||||||
|
"MERGE|MIN|MINLOC|MINVAL|MOD|MODULO|NINT|NOT|NORM2|NULL|NULLIFY|PACK|PARITY|POPCNT|POPPAR|" +
|
||||||
|
"PRECISION|PRESENT|PRODUCT|RADIX|RANDOM_NUMBER|RANDOM_SEED|RANGE|REPEAT|RESHAPE|ROUND|" +
|
||||||
|
"RRSPACING|SAME_TYPE_AS|SCALE|SCAN|SELECTED_CHAR_KIND|SELECTED_INT_KIND|SELECTED_REAL_KIND|" +
|
||||||
|
"SET_EXPONENT|SHAPE|SHIFTA|SHIFTL|SHIFTR|SIGN|SIN|SINH|SIZE|SNGL|SPACING|SPREAD|" +
|
||||||
|
"SQRT|SUM|SYSTEM_CLOCK|TAN|TANH|TINY|TRAILZ|TRANSFER|TRANSPOSE|TRIM|UBOUND|UNPACK|VERIFY");
|
||||||
|
var storageType = ("logical|character|integer|real|type|" +
|
||||||
|
"LOGICAL|CHARACTER|INTEGER|REAL|TYPE");
|
||||||
|
var storageModifiers = ("allocatable|dimension|intent|parameter|pointer|target|private|public|" +
|
||||||
|
"ALLOCATABLE|DIMENSION|INTENT|PARAMETER|POINTER|TARGET|PRIVATE|PUBLIC");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"invalid.deprecated": "debugger",
|
||||||
|
"support.function": builtinFunctions,
|
||||||
|
"constant.language": builtinConstants,
|
||||||
|
"keyword": keywords,
|
||||||
|
"keyword.operator": keywordOperators,
|
||||||
|
"storage.type": storageType,
|
||||||
|
"storage.modifier": storageModifiers
|
||||||
|
}, "identifier");
|
||||||
|
var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?";
|
||||||
|
var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
|
||||||
|
var octInteger = "(?:0[oO]?[0-7]+)";
|
||||||
|
var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
|
||||||
|
var binInteger = "(?:0[bB][01]+)";
|
||||||
|
var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
|
||||||
|
var exponent = "(?:[eE][+-]?\\d+)";
|
||||||
|
var fraction = "(?:\\.\\d+)";
|
||||||
|
var intPart = "(?:\\d+)";
|
||||||
|
var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
|
||||||
|
var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")";
|
||||||
|
var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
|
||||||
|
var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
token: "comment",
|
||||||
|
regex: "!.*$"
|
||||||
|
}, {
|
||||||
|
token: "string", // multi line """ string start
|
||||||
|
regex: strPre + '"{3}',
|
||||||
|
next: "qqstring3"
|
||||||
|
}, {
|
||||||
|
token: "string", // " string
|
||||||
|
regex: strPre + '"(?=.)',
|
||||||
|
next: "qqstring"
|
||||||
|
}, {
|
||||||
|
token: "string", // multi line ''' string start
|
||||||
|
regex: strPre + "'{3}",
|
||||||
|
next: "qstring3"
|
||||||
|
}, {
|
||||||
|
token: "string", // ' string
|
||||||
|
regex: strPre + "'(?=.)",
|
||||||
|
next: "qstring"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // imaginary
|
||||||
|
regex: "(?:" + floatNumber + "|\\d+)[jJ]\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: floatNumber
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // long integer
|
||||||
|
regex: integer + "[lL]\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // integer
|
||||||
|
regex: integer + "\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // pre-compiler directives
|
||||||
|
regex: "#\\s*(?:include|import|define|undef|INCLUDE|IMPORT|DEFINE|UNDEF)\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // special case pre-compiler directive
|
||||||
|
regex: "#\\s*(?:endif|ifdef|else|elseif|ifndef|ENDIF|IFDEF|ELSE|ELSEIF|IFNDEF)\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[\\[\\(\\{]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\]\\)\\}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}],
|
||||||
|
"qqstring3": [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: stringEscape
|
||||||
|
}, {
|
||||||
|
token: "string", // multi line """ string end
|
||||||
|
regex: '"{3}',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}],
|
||||||
|
"qstring3": [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: stringEscape
|
||||||
|
}, {
|
||||||
|
token: "string", // multi line """ string end
|
||||||
|
regex: '"{3}',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}],
|
||||||
|
"qqstring": [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: stringEscape
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "\\\\$",
|
||||||
|
next: "qqstring"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"|$',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}],
|
||||||
|
"qstring": [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: stringEscape
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "\\\\$",
|
||||||
|
next: "qstring"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "'|$",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(FortranHighlightRules, TextHighlightRules);
|
||||||
|
exports.FortranHighlightRules = FortranHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/fortran",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/fortran_highlight_rules","ace/mode/folding/cstyle","ace/range"], function(require, exports, module){/* Derived from Python rules */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var FortranHighlightRules = require("./fortran_highlight_rules").FortranHighlightRules;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = FortranHighlightRules;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "!";
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[:]\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
var outdents = {
|
||||||
|
"return": 1,
|
||||||
|
"break": 1,
|
||||||
|
"continue": 1,
|
||||||
|
"RETURN": 1,
|
||||||
|
"BREAK": 1,
|
||||||
|
"CONTINUE": 1
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
if (input !== "\r\n" && input !== "\r" && input !== "\n")
|
||||||
|
return false;
|
||||||
|
var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
|
||||||
|
if (!tokens)
|
||||||
|
return false;
|
||||||
|
do {
|
||||||
|
var last = tokens.pop();
|
||||||
|
} while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/))));
|
||||||
|
if (!last)
|
||||||
|
return false;
|
||||||
|
return (last.type == "keyword" && outdents[last.value]);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
row += 1;
|
||||||
|
var indent = this.$getIndent(doc.getLine(row));
|
||||||
|
var tab = doc.getTabString();
|
||||||
|
if (indent.slice(-tab.length) == tab)
|
||||||
|
doc.remove(new Range(row, indent.length - tab.length, row, indent.length));
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/fortran";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/fortran"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,277 @@
|
||||||
|
define("ace/mode/fsharp_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 FSharpHighlightRules = function () {
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"variable": "this",
|
||||||
|
"keyword": 'abstract|assert|base|begin|class|default|delegate|done|downcast|downto|elif\
|
||||||
|
|else|exception|extern|false|finally|function|global|inherit|inline|interface|internal|lazy|match\
|
||||||
|
|member|module|mutable|namespace|open|or|override|private|public|rec|return|return!|select|static\
|
||||||
|
|struct|then|to|true|try|typeof|upcast|use|use!|val|void|when|while|with|yield|yield!|__SOURCE_DIRECTORY__\
|
||||||
|
|as|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue\
|
||||||
|
|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall\
|
||||||
|
|trait|virtual|volatile|and|do|end|for|fun|if|in|let|let!|new|not|null|of|endif',
|
||||||
|
"constant": "true|false"
|
||||||
|
}, "identifier");
|
||||||
|
var floatNumber = "(?:(?:(?:(?:(?:(?:\\d+)?(?:\\.\\d+))|(?:(?:\\d+)\\.))|(?:\\d+))(?:[eE][+-]?\\d+))|(?:(?:(?:\\d+)?(?:\\.\\d+))|(?:(?:\\d+)\\.)))";
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "variable.classes",
|
||||||
|
regex: '\\[\\<[.]*\\>\\]'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: '//.*$'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "comment.start",
|
||||||
|
regex: /\(\*(?!\))/,
|
||||||
|
push: "blockComment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: "'.'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"""',
|
||||||
|
next: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\./,
|
||||||
|
next: "qqstring"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"""',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '"',
|
||||||
|
next: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\./,
|
||||||
|
next: "qqstring"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: ["verbatim.string", "string"],
|
||||||
|
regex: '(@?)(")',
|
||||||
|
stateName: "qqstring",
|
||||||
|
next: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: '""'
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.float",
|
||||||
|
regex: "(?:" + floatNumber + "|\\d+)[jJ]\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.float",
|
||||||
|
regex: floatNumber
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.integer",
|
||||||
|
regex: "(?:(?:(?:[1-9]\\d*)|(?:0))|(?:0[oO]?[0-7]+)|(?:0[xX][\\dA-Fa-f]+)|(?:0[bB][01]+))\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: ["keyword.type", "variable"],
|
||||||
|
regex: "(type\\s)([a-zA-Z0-9_$\-]*\\b)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "\\+\\.|\\-\\.|\\*\\.|\\/\\.|#|;;|\\+|\\-|\\*|\\*\\*\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|<-|=|\\(\\*\\)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
blockComment: [{
|
||||||
|
regex: /\(\*\)/,
|
||||||
|
token: "comment"
|
||||||
|
}, {
|
||||||
|
regex: /\(\*(?!\))/,
|
||||||
|
token: "comment.start",
|
||||||
|
push: "blockComment"
|
||||||
|
}, {
|
||||||
|
regex: /\*\)/,
|
||||||
|
token: "comment.end",
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(FSharpHighlightRules, TextHighlightRules);
|
||||||
|
exports.FSharpHighlightRules = FSharpHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/fsharp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/fsharp_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var FSharpHighlightRules = require("./fsharp_highlight_rules").FSharpHighlightRules;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
TextMode.call(this);
|
||||||
|
this.HighlightRules = FSharpHighlightRules;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "(*", end: "*)", nestable: true };
|
||||||
|
this.$id = "ace/mode/fsharp";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/fsharp"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,226 @@
|
||||||
|
define("ace/mode/fsl_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 FSLHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
start: [{
|
||||||
|
token: "punctuation.definition.comment.mn",
|
||||||
|
regex: /\/\*/,
|
||||||
|
push: [{
|
||||||
|
token: "punctuation.definition.comment.mn",
|
||||||
|
regex: /\*\//,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment.block.fsl"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "comment.line.fsl",
|
||||||
|
regex: /\/\//,
|
||||||
|
push: [{
|
||||||
|
token: "comment.line.fsl",
|
||||||
|
regex: /$/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment.line.fsl"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "entity.name.function",
|
||||||
|
regex: /\${/,
|
||||||
|
push: [{
|
||||||
|
token: "entity.name.function",
|
||||||
|
regex: /}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "keyword.other"
|
||||||
|
}],
|
||||||
|
comment: "js outcalls"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: /[0-9]*\.[0-9]*\.[0-9]*/,
|
||||||
|
comment: "semver"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.fslLanguage",
|
||||||
|
regex: "(?:"
|
||||||
|
+ "graph_layout|machine_name|machine_author|machine_license|machine_comment|machine_language"
|
||||||
|
+ "|machine_version|machine_reference|npm_name|graph_layout|on_init|on_halt|on_end|on_terminate|on_finalize|on_transition"
|
||||||
|
+ "|on_action|on_stochastic_action|on_legal|on_main|on_forced|on_validation|on_validation_failure|on_transition_refused|on_forced_transition_refused"
|
||||||
|
+ "|on_action_refused|on_enter|on_exit|start_states|end_states|terminal_states|final_states|fsl_version"
|
||||||
|
+ ")\\s*:"
|
||||||
|
}, {
|
||||||
|
token: "keyword.control.transition.fslArrow",
|
||||||
|
regex: /<->|<-|->|<=>|=>|<=|<~>|~>|<~|<-=>|<=->|<-~>|<~->|<=~>|<~=>/
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric.fslProbability",
|
||||||
|
regex: /[0-9]+%/,
|
||||||
|
comment: "edge probability annotation"
|
||||||
|
}, {
|
||||||
|
token: "constant.character.fslAction",
|
||||||
|
regex: /\'[^']*\'/,
|
||||||
|
comment: "action annotation"
|
||||||
|
}, {
|
||||||
|
token: "string.quoted.double.fslLabel.doublequoted",
|
||||||
|
regex: /\"[^"]*\"/,
|
||||||
|
comment: "fsl label annotation"
|
||||||
|
}, {
|
||||||
|
token: "entity.name.tag.fslLabel.atom",
|
||||||
|
regex: /[a-zA-Z0-9_.+&()#@!?,]/,
|
||||||
|
comment: "fsl label annotation"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
FSLHighlightRules.metaData = {
|
||||||
|
fileTypes: ["fsl", "fsl_state"],
|
||||||
|
name: "FSL",
|
||||||
|
scopeName: "source.fsl"
|
||||||
|
};
|
||||||
|
oop.inherits(FSLHighlightRules, TextHighlightRules);
|
||||||
|
exports.FSLHighlightRules = FSLHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/fsl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/fsl_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var FSLHighlightRules = require("./fsl_highlight_rules").FSLHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = FSLHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.$id = "ace/mode/fsl";
|
||||||
|
this.snippetFileId = "ace/snippets/fsl";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/fsl"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,74 @@
|
||||||
|
define("ace/mode/gcode_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 GcodeHighlightRules = function () {
|
||||||
|
var keywords = ("IF|DO|WHILE|ENDWHILE|CALL|ENDIF|SUB|ENDSUB|GOTO|REPEAT|ENDREPEAT|CALL");
|
||||||
|
var builtinConstants = ("PI");
|
||||||
|
var builtinFunctions = ("ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"support.function": builtinFunctions,
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": builtinConstants
|
||||||
|
}, "identifier", true);
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\(.*\\)"
|
||||||
|
}, {
|
||||||
|
token: "comment", // block number
|
||||||
|
regex: "([N])([0-9]+)"
|
||||||
|
}, {
|
||||||
|
token: "string", // " string
|
||||||
|
regex: "([G])([0-9]+\\.?[0-9]?)"
|
||||||
|
}, {
|
||||||
|
token: "string", // ' string
|
||||||
|
regex: "([M])([0-9]+\\.?[0-9]?)"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "([-+]?([0-9]*\\.?[0-9]+\\.?))|(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[A-Z]"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "EQ|LT|GT|NE|GE|LE|OR|XOR"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[\\[]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\]]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(GcodeHighlightRules, TextHighlightRules);
|
||||||
|
exports.GcodeHighlightRules = GcodeHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/gcode",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/gcode_highlight_rules","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var GcodeHighlightRules = require("./gcode_highlight_rules").GcodeHighlightRules;
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = GcodeHighlightRules;
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/gcode";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/gcode"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,154 @@
|
||||||
|
define("ace/mode/gherkin_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";
|
||||||
|
var GherkinHighlightRules = function () {
|
||||||
|
var languages = [{
|
||||||
|
name: "en",
|
||||||
|
labels: "Feature|Background|Scenario(?: Outline)?|Examples",
|
||||||
|
keywords: "Given|When|Then|And|But"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
var labels = languages.map(function (l) {
|
||||||
|
return l.labels;
|
||||||
|
}).join("|");
|
||||||
|
var keywords = languages.map(function (l) {
|
||||||
|
return l.keywords;
|
||||||
|
}).join("|");
|
||||||
|
this.$rules = {
|
||||||
|
start: [{
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: "(?:(?:[1-9]\\d*)|(?:0))"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "#.*$"
|
||||||
|
}, {
|
||||||
|
token: "keyword",
|
||||||
|
regex: "(?:" + labels + "):|(?:" + keywords + ")\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword",
|
||||||
|
regex: "\\*"
|
||||||
|
}, {
|
||||||
|
token: "string", // multi line """ string start
|
||||||
|
regex: '"{3}',
|
||||||
|
next: "qqstring3"
|
||||||
|
}, {
|
||||||
|
token: "string", // " string
|
||||||
|
regex: '"',
|
||||||
|
next: "qqstring"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "^\\s*(?=@[\\w])",
|
||||||
|
next: [{
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}, {
|
||||||
|
token: "variable.parameter",
|
||||||
|
regex: "@[\\w]+"
|
||||||
|
}, {
|
||||||
|
token: "empty",
|
||||||
|
regex: "",
|
||||||
|
next: "start"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "<[^>]+>"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\|(?=.)",
|
||||||
|
next: "table-item"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\|$",
|
||||||
|
next: "start"
|
||||||
|
}],
|
||||||
|
"qqstring3": [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: stringEscape
|
||||||
|
}, {
|
||||||
|
token: "string", // multi line """ string end
|
||||||
|
regex: '"{3}',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}],
|
||||||
|
"qqstring": [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: stringEscape
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: "\\\\$",
|
||||||
|
next: "qqstring"
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"|$',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}],
|
||||||
|
"table-item": [{
|
||||||
|
token: "comment",
|
||||||
|
regex: /$/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: /\|/
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: /\\./
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(GherkinHighlightRules, TextHighlightRules);
|
||||||
|
exports.GherkinHighlightRules = GherkinHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/gherkin",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/gherkin_highlight_rules"], function(require, exports, module){var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var GherkinHighlightRules = require("./gherkin_highlight_rules").GherkinHighlightRules;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = GherkinHighlightRules;
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "#";
|
||||||
|
this.$id = "ace/mode/gherkin";
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var space2 = " ";
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
if (line.match("[ ]*\\|")) {
|
||||||
|
indent += "| ";
|
||||||
|
}
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
if (line.match("Scenario:|Feature:|Scenario Outline:|Background:")) {
|
||||||
|
indent += space2;
|
||||||
|
}
|
||||||
|
else if (line.match("(Given|Then).+(:)$|Examples:")) {
|
||||||
|
indent += space2;
|
||||||
|
}
|
||||||
|
else if (line.match("\\*.+")) {
|
||||||
|
indent += "* ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/gherkin"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
define("ace/mode/gitignore_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 GitignoreHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: /^\s*#.*$/
|
||||||
|
}, {
|
||||||
|
token: "keyword", // negated patterns
|
||||||
|
regex: /^\s*!.*$/
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
GitignoreHighlightRules.metaData = {
|
||||||
|
fileTypes: ['gitignore'],
|
||||||
|
name: 'Gitignore'
|
||||||
|
};
|
||||||
|
oop.inherits(GitignoreHighlightRules, TextHighlightRules);
|
||||||
|
exports.GitignoreHighlightRules = GitignoreHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/gitignore",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/gitignore_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var GitignoreHighlightRules = require("./gitignore_highlight_rules").GitignoreHighlightRules;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = GitignoreHighlightRules;
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "#";
|
||||||
|
this.$id = "ace/mode/gitignore";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/gitignore"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,475 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var cFunctions = exports.cFunctions = "hypot|hypotf|hypotl|sscanf|system|snprintf|scanf|scalbn|scalbnf|scalbnl|scalbln|scalblnf|scalblnl|sin|sinh|sinhf|sinhl|sinf|sinl|signal|signbit|strstr|strspn|strncpy|strncat|strncmp|strcspn|strchr|strcoll|strcpy|strcat|strcmp|strtoimax|strtod|strtoul|strtoull|strtoumax|strtok|strtof|strtol|strtold|strtoll|strerror|strpbrk|strftime|strlen|strrchr|strxfrm|sprintf|setjmp|setvbuf|setlocale|setbuf|sqrt|sqrtf|sqrtl|swscanf|swprintf|srand|nearbyint|nearbyintf|nearbyintl|nexttoward|nexttowardf|nexttowardl|nextafter|nextafterf|nextafterl|nan|nanf|nanl|csin|csinh|csinhf|csinhl|csinf|csinl|csqrt|csqrtf|csqrtl|ccos|ccosh|ccoshf|ccosf|ccosl|cimag|cimagf|cimagl|ctime|ctan|ctanh|ctanhf|ctanhl|ctanf|ctanl|cos|cosh|coshf|coshl|cosf|cosl|conj|conjf|conjl|copysign|copysignf|copysignl|cpow|cpowf|cpowl|cproj|cprojf|cprojl|ceil|ceilf|ceill|cexp|cexpf|cexpl|clock|clog|clogf|clogl|clearerr|casin|casinh|casinhf|casinhl|casinf|casinl|cacos|cacosh|cacoshf|cacoshl|cacosf|cacosl|catan|catanh|catanhf|catanhl|catanf|catanl|calloc|carg|cargf|cargl|cabs|cabsf|cabsl|creal|crealf|creall|cbrt|cbrtf|cbrtl|time|toupper|tolower|tan|tanh|tanhf|tanhl|tanf|tanl|trunc|truncf|truncl|tgamma|tgammaf|tgammal|tmpnam|tmpfile|isspace|isnormal|isnan|iscntrl|isinf|isdigit|isunordered|isupper|ispunct|isprint|isfinite|iswspace|iswcntrl|iswctype|iswdigit|iswupper|iswpunct|iswprint|iswlower|iswalnum|iswalpha|iswgraph|iswxdigit|iswblank|islower|isless|islessequal|islessgreater|isalnum|isalpha|isgreater|isgreaterequal|isgraph|isxdigit|isblank|ilogb|ilogbf|ilogbl|imaxdiv|imaxabs|div|difftime|_Exit|ungetc|ungetwc|pow|powf|powl|puts|putc|putchar|putwc|putwchar|perror|printf|erf|erfc|erfcf|erfcl|erff|erfl|exit|exp|exp2|exp2f|exp2l|expf|expl|expm1|expm1f|expm1l|vsscanf|vsnprintf|vscanf|vsprintf|vswscanf|vswprintf|vprintf|vfscanf|vfprintf|vfwscanf|vfwprintf|vwscanf|vwprintf|va_start|va_copy|va_end|va_arg|qsort|fscanf|fsetpos|fseek|fclose|ftell|fopen|fdim|fdimf|fdiml|fpclassify|fputs|fputc|fputws|fputwc|fprintf|feholdexcept|fesetenv|fesetexceptflag|fesetround|feclearexcept|fetestexcept|feof|feupdateenv|feraiseexcept|ferror|fegetenv|fegetexceptflag|fegetround|fflush|fwscanf|fwide|fwprintf|fwrite|floor|floorf|floorl|fabs|fabsf|fabsl|fgets|fgetc|fgetpos|fgetws|fgetwc|freopen|free|fread|frexp|frexpf|frexpl|fmin|fminf|fminl|fmod|fmodf|fmodl|fma|fmaf|fmal|fmax|fmaxf|fmaxl|ldiv|ldexp|ldexpf|ldexpl|longjmp|localtime|localeconv|log|log1p|log1pf|log1pl|log10|log10f|log10l|log2|log2f|log2l|logf|logl|logb|logbf|logbl|labs|lldiv|llabs|llrint|llrintf|llrintl|llround|llroundf|llroundl|lrint|lrintf|lrintl|lround|lroundf|lroundl|lgamma|lgammaf|lgammal|wscanf|wcsstr|wcsspn|wcsncpy|wcsncat|wcsncmp|wcscspn|wcschr|wcscoll|wcscpy|wcscat|wcscmp|wcstoimax|wcstod|wcstoul|wcstoull|wcstoumax|wcstok|wcstof|wcstol|wcstold|wcstoll|wcstombs|wcspbrk|wcsftime|wcslen|wcsrchr|wcsrtombs|wcsxfrm|wctob|wctomb|wcrtomb|wprintf|wmemset|wmemchr|wmemcpy|wmemcmp|wmemmove|assert|asctime|asin|asinh|asinhf|asinhl|asinf|asinl|acos|acosh|acoshf|acoshl|acosf|acosl|atoi|atof|atol|atoll|atexit|atan|atanh|atanhf|atanhl|atan2|atan2f|atan2l|atanf|atanl|abs|abort|gets|getc|getchar|getenv|getwc|getwchar|gmtime|rint|rintf|rintl|round|roundf|roundl|rename|realloc|rewind|remove|remquo|remquof|remquol|remainder|remainderf|remainderl|rand|raise|bsearch|btowc|modf|modff|modfl|memset|memchr|memcpy|memcmp|memmove|mktime|malloc|mbsinit|mbstowcs|mbsrtowcs|mbtowc|mblen|mbrtowc|mbrlen";
|
||||||
|
var c_cppHighlightRules = function (extraKeywords) {
|
||||||
|
var keywordControls = ("break|case|continue|default|do|else|for|goto|if|_Pragma|" +
|
||||||
|
"return|switch|while|catch|operator|try|throw|using");
|
||||||
|
var storageType = ("asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" +
|
||||||
|
"_Imaginary|int|int8_t|int16_t|int32_t|int64_t|long|short|signed|size_t|struct|typedef|uint8_t|uint16_t|uint32_t|uint64_t|union|unsigned|void|" +
|
||||||
|
"class|wchar_t|template|char16_t|char32_t");
|
||||||
|
var storageModifiers = ("const|extern|register|restrict|static|volatile|inline|private|" +
|
||||||
|
"protected|public|friend|explicit|virtual|export|mutable|typename|" +
|
||||||
|
"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local");
|
||||||
|
var keywordOperators = ("and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|" +
|
||||||
|
"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace");
|
||||||
|
var builtinConstants = ("NULL|true|false|TRUE|FALSE|nullptr");
|
||||||
|
var keywordMapper = this.$keywords = this.createKeywordMapper(Object.assign({
|
||||||
|
"keyword.control": keywordControls,
|
||||||
|
"storage.type": storageType,
|
||||||
|
"storage.modifier": storageModifiers,
|
||||||
|
"keyword.operator": keywordOperators,
|
||||||
|
"variable.language": "this",
|
||||||
|
"constant.language": builtinConstants,
|
||||||
|
"support.function.C99.c": cFunctions
|
||||||
|
}, extraKeywords), "identifier");
|
||||||
|
var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
|
||||||
|
var escapeRe = /\\(?:['"?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}U[a-fA-F\d]{8}|.)/.source;
|
||||||
|
var formatRe = "%"
|
||||||
|
+ /(\d+\$)?/.source // field (argument #)
|
||||||
|
+ /[#0\- +']*/.source // flags
|
||||||
|
+ /[,;:_]?/.source // separator character (AltiVec)
|
||||||
|
+ /((-?\d+)|\*(-?\d+\$)?)?/.source // minimum field width
|
||||||
|
+ /(\.((-?\d+)|\*(-?\d+\$)?)?)?/.source // precision
|
||||||
|
+ /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier
|
||||||
|
+ /(\[[^"\]]+\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "//$",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: "//",
|
||||||
|
next: "singleLineComment"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "string", // character
|
||||||
|
regex: "'(?:" + escapeRe + "|.)?'"
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: '"',
|
||||||
|
stateName: "qqstring",
|
||||||
|
next: [
|
||||||
|
{ token: "string", regex: /\\\s*$/, next: "qqstring" },
|
||||||
|
{ token: "constant.language.escape", regex: escapeRe },
|
||||||
|
{ token: "constant.language.escape", regex: formatRe },
|
||||||
|
{ token: "string.end", regex: '"|$', next: "start" },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "string.start",
|
||||||
|
regex: 'R"\\(',
|
||||||
|
stateName: "rawString",
|
||||||
|
next: [
|
||||||
|
{ token: "string.end", regex: '\\)"', next: "start" },
|
||||||
|
{ defaultToken: "string" }
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // pre-compiler directives
|
||||||
|
regex: "#\\s*(?:include|import|pragma|line|define|undef)\\b",
|
||||||
|
next: "directive"
|
||||||
|
}, {
|
||||||
|
token: "keyword", // special case pre-compiler directive
|
||||||
|
regex: "#\\s*(?:endif|if|ifdef|else|elif|ifndef)\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: /--|\+\+|<<=|>>=|>>>=|<>|&&|\|\||\?:|[*%\/+\-&\^|~!<>=]=?/
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\?|\\:|\\,|\\;|\\."
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"singleLineComment": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: /\\$/,
|
||||||
|
next: "singleLineComment"
|
||||||
|
}, {
|
||||||
|
token: "comment",
|
||||||
|
regex: /$/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directive": [
|
||||||
|
{
|
||||||
|
token: "constant.other.multiline",
|
||||||
|
regex: /\\/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other.multiline",
|
||||||
|
regex: /.*\\/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other",
|
||||||
|
regex: "\\s*<.+?>",
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other", // single line
|
||||||
|
regex: '\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]',
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other", // single line
|
||||||
|
regex: "\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']",
|
||||||
|
next: "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: "constant.other",
|
||||||
|
regex: /[^\\\/]+/,
|
||||||
|
next: "start"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(c_cppHighlightRules, TextHighlightRules);
|
||||||
|
exports.c_cppHighlightRules = c_cppHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = c_cppHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
var endState = tokenizedLine.state;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (state == "doc-start") {
|
||||||
|
if (endState == "start") {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
var match = line.match(/^\s*(\/?)\*/);
|
||||||
|
if (match) {
|
||||||
|
if (match[1]) {
|
||||||
|
indent += " ";
|
||||||
|
}
|
||||||
|
indent += "* ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/c_cpp";
|
||||||
|
this.snippetFileId = "ace/snippets/c_cpp";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/glsl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/c_cpp_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules;
|
||||||
|
var glslHighlightRules = function () {
|
||||||
|
var keywords = ("attribute|const|uniform|varying|break|continue|do|for|while|" +
|
||||||
|
"if|else|in|out|inout|float|int|void|bool|true|false|" +
|
||||||
|
"lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|" +
|
||||||
|
"mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|" +
|
||||||
|
"samplerCube|struct");
|
||||||
|
var buildinConstants = ("radians|degrees|sin|cos|tan|asin|acos|atan|pow|" +
|
||||||
|
"exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|" +
|
||||||
|
"min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|" +
|
||||||
|
"normalize|faceforward|reflect|refract|matrixCompMult|lessThan|" +
|
||||||
|
"lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|" +
|
||||||
|
"not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|" +
|
||||||
|
"texture2DProjLod|textureCube|textureCubeLod|" +
|
||||||
|
"gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|" +
|
||||||
|
"gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|" +
|
||||||
|
"gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|" +
|
||||||
|
"gl_DepthRangeParameters|gl_DepthRange|" +
|
||||||
|
"gl_Position|gl_PointSize|" +
|
||||||
|
"gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"variable.language": "this",
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": buildinConstants
|
||||||
|
}, "identifier");
|
||||||
|
this.$rules = new c_cppHighlightRules().$rules;
|
||||||
|
this.$rules.start.forEach(function (rule) {
|
||||||
|
if (typeof rule.token == "function")
|
||||||
|
rule.token = keywordMapper;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
oop.inherits(glslHighlightRules, c_cppHighlightRules);
|
||||||
|
exports.glslHighlightRules = glslHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/glsl",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/mode/glsl_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var CMode = require("./c_cpp").Mode;
|
||||||
|
var glslHighlightRules = require("./glsl_highlight_rules").glslHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = glslHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, CMode);
|
||||||
|
(function () {
|
||||||
|
this.$id = "ace/mode/glsl";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/glsl"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,341 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/golang_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var GolangHighlightRules = function () {
|
||||||
|
var keywords = ("else|break|case|return|goto|if|const|select|" +
|
||||||
|
"continue|struct|default|switch|for|range|" +
|
||||||
|
"func|import|package|chan|defer|fallthrough|go|interface|map|range|" +
|
||||||
|
"select|type|var");
|
||||||
|
var builtinTypes = ("string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|" +
|
||||||
|
"float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error");
|
||||||
|
var builtinFunctions = ("new|close|cap|copy|panic|panicln|print|println|len|make|delete|real|recover|imag|append");
|
||||||
|
var builtinConstants = ("nil|true|false|iota");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": builtinConstants,
|
||||||
|
"support.function": builtinFunctions,
|
||||||
|
"support.type": builtinTypes
|
||||||
|
}, "");
|
||||||
|
var stringEscapeRe = "\\\\(?:[0-7]{3}|x\\h{2}|u{4}|U\\h{6}|[abfnrtv'\"\\\\])".replace(/\\h/g, "[a-fA-F\\d]");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\/\\/.*$"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment.start", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: /"(?:[^"\\]|\\.)*?"/
|
||||||
|
}, {
|
||||||
|
token: "string", // raw
|
||||||
|
regex: '`',
|
||||||
|
next: "bqstring"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // rune
|
||||||
|
regex: "'(?:[^\\'\uD800-\uDBFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|" + stringEscapeRe.replace('"', '') + ")'"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
}, {
|
||||||
|
token: ["keyword", "text", "entity.name.function"],
|
||||||
|
regex: "(func)(\\s+)([a-zA-Z_$][a-zA-Z0-9_$]*)\\b"
|
||||||
|
}, {
|
||||||
|
token: function (val) {
|
||||||
|
if (val[val.length - 1] == "(") {
|
||||||
|
return [{
|
||||||
|
type: keywordMapper(val.slice(0, -1)) || "support.function",
|
||||||
|
value: val.slice(0, -1)
|
||||||
|
}, {
|
||||||
|
type: "paren.lparen",
|
||||||
|
value: val.slice(-1)
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
return keywordMapper(val) || "identifier";
|
||||||
|
},
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b\\(?"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^="
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\?|\\:|\\,|\\;|\\."
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment.end",
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bqstring": [
|
||||||
|
{
|
||||||
|
token: "string",
|
||||||
|
regex: '`',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
};
|
||||||
|
oop.inherits(GolangHighlightRules, TextHighlightRules);
|
||||||
|
exports.GolangHighlightRules = GolangHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/golang",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/golang_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"], function(require, exports, module){var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var GolangHighlightRules = require("./golang_highlight_rules").GolangHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = GolangHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
var endState = tokenizedLine.state;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
}; //end getNextLineIndent
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/golang";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/golang"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,174 @@
|
||||||
|
define("ace/mode/graphqlschema_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 GraphQLSchemaHighlightRules = function () {
|
||||||
|
var keywords = ("type|interface|union|enum|schema|input|implements|extends|scalar");
|
||||||
|
var dataTypes = ("Int|Float|String|ID|Boolean");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"keyword": keywords,
|
||||||
|
"storage.type": dataTypes
|
||||||
|
}, "identifier");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [{
|
||||||
|
token: "comment",
|
||||||
|
regex: "#.*$"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /[\[({]/,
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /[\])}]/
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
oop.inherits(GraphQLSchemaHighlightRules, TextHighlightRules);
|
||||||
|
exports.GraphQLSchemaHighlightRules = GraphQLSchemaHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/graphqlschema",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/graphqlschema_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var GraphQLSchemaHighlightRules = require("./graphqlschema_highlight_rules").GraphQLSchemaHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = GraphQLSchemaHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "#";
|
||||||
|
this.$id = "ace/mode/graphqlschema";
|
||||||
|
this.snippetFileId = "ace/snippets/graphqlschema";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/graphqlschema"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,324 @@
|
||||||
|
define("ace/mode/haskell_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from tm bundles\haskell.tmbundle\Syntaxes\Haskell.plist (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var HaskellHighlightRules = function () {
|
||||||
|
this.$rules = { start: [{ token: ['punctuation.definition.entity.haskell',
|
||||||
|
'keyword.operator.function.infix.haskell',
|
||||||
|
'punctuation.definition.entity.haskell'],
|
||||||
|
regex: '(`)([a-zA-Z_\']*?)(`)',
|
||||||
|
comment: 'In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).' },
|
||||||
|
{ token: 'constant.language.unit.haskell', regex: '\\(\\)' },
|
||||||
|
{ token: 'constant.language.empty-list.haskell',
|
||||||
|
regex: '\\[\\]' },
|
||||||
|
{ token: 'keyword.other.haskell',
|
||||||
|
regex: '\\b(module|signature)\\b',
|
||||||
|
push: [{ token: 'keyword.other.haskell', regex: '\\bwhere\\b', next: 'pop' },
|
||||||
|
{ include: '#module_name' },
|
||||||
|
{ include: '#module_exports' },
|
||||||
|
{ token: 'invalid', regex: '[a-z]+' },
|
||||||
|
{ defaultToken: 'meta.declaration.module.haskell' }] },
|
||||||
|
{ token: 'keyword.other.haskell',
|
||||||
|
regex: '\\bclass\\b',
|
||||||
|
push: [{ token: 'keyword.other.haskell',
|
||||||
|
regex: '\\bwhere\\b',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'support.class.prelude.haskell',
|
||||||
|
regex: '\\b(?:Monad|Functor|Eq|Ord|Read|Show|Num|(?:Frac|Ra)tional|Enum|Bounded|Real(?:Frac|Float)?|Integral|Floating)\\b' },
|
||||||
|
{ token: 'entity.other.inherited-class.haskell',
|
||||||
|
regex: '[A-Z][A-Za-z_\']*' },
|
||||||
|
{ token: 'variable.other.generic-type.haskell',
|
||||||
|
regex: '\\b[a-z][a-zA-Z0-9_\']*\\b' },
|
||||||
|
{ defaultToken: 'meta.declaration.class.haskell' }] },
|
||||||
|
{ token: 'keyword.other.haskell',
|
||||||
|
regex: '\\binstance\\b',
|
||||||
|
push: [{ token: 'keyword.other.haskell',
|
||||||
|
regex: '\\bwhere\\b|$',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#type_signature' },
|
||||||
|
{ defaultToken: 'meta.declaration.instance.haskell' }] },
|
||||||
|
{ token: 'keyword.other.haskell',
|
||||||
|
regex: 'import',
|
||||||
|
push: [{ token: 'meta.import.haskell', regex: '$|;|^', next: 'pop' },
|
||||||
|
{ token: 'keyword.other.haskell', regex: 'qualified|as|hiding' },
|
||||||
|
{ include: '#module_name' },
|
||||||
|
{ include: '#module_exports' },
|
||||||
|
{ defaultToken: 'meta.import.haskell' }] },
|
||||||
|
{ token: ['keyword.other.haskell', 'meta.deriving.haskell'],
|
||||||
|
regex: '(deriving)(\\s*\\()',
|
||||||
|
push: [{ token: 'meta.deriving.haskell', regex: '\\)', next: 'pop' },
|
||||||
|
{ token: 'entity.other.inherited-class.haskell',
|
||||||
|
regex: '\\b[A-Z][a-zA-Z_\']*' },
|
||||||
|
{ defaultToken: 'meta.deriving.haskell' }] },
|
||||||
|
{ token: 'keyword.other.haskell',
|
||||||
|
regex: '\\b(?:deriving|where|data|type|case|of|let|in|newtype|default)\\b' },
|
||||||
|
{ token: 'keyword.operator.haskell', regex: '\\binfix[lr]?\\b' },
|
||||||
|
{ token: 'keyword.control.haskell',
|
||||||
|
regex: '\\b(?:do|if|then|else)\\b' },
|
||||||
|
{ token: 'constant.numeric.float.haskell',
|
||||||
|
regex: '\\b(?:[0-9]+\\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\b',
|
||||||
|
comment: 'Floats are always decimal' },
|
||||||
|
{ token: 'constant.numeric.haskell',
|
||||||
|
regex: '\\b(?:[0-9]+|0(?:[xX][0-9a-fA-F]+|[oO][0-7]+))\\b' },
|
||||||
|
{ token: ['meta.preprocessor.c',
|
||||||
|
'punctuation.definition.preprocessor.c',
|
||||||
|
'meta.preprocessor.c'],
|
||||||
|
regex: '^(\\s*)(#)(\\s*\\w+)',
|
||||||
|
comment: 'In addition to Haskell\'s "native" syntax, GHC permits the C preprocessor to be run on a source file.' },
|
||||||
|
{ include: '#pragma' },
|
||||||
|
{ token: 'punctuation.definition.string.begin.haskell',
|
||||||
|
regex: '"',
|
||||||
|
push: [{ token: 'punctuation.definition.string.end.haskell',
|
||||||
|
regex: '"',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'constant.character.escape.haskell',
|
||||||
|
regex: '\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\"\'\\&])' },
|
||||||
|
{ token: 'constant.character.escape.octal.haskell',
|
||||||
|
regex: '\\\\o[0-7]+|\\\\x[0-9A-Fa-f]+|\\\\[0-9]+' },
|
||||||
|
{ token: 'constant.character.escape.control.haskell',
|
||||||
|
regex: '\\^[A-Z@\\[\\]\\\\\\^_]' },
|
||||||
|
{ defaultToken: 'string.quoted.double.haskell' }] },
|
||||||
|
{ token: ['punctuation.definition.string.begin.haskell',
|
||||||
|
'string.quoted.single.haskell',
|
||||||
|
'constant.character.escape.haskell',
|
||||||
|
'constant.character.escape.octal.haskell',
|
||||||
|
'constant.character.escape.hexadecimal.haskell',
|
||||||
|
'constant.character.escape.control.haskell',
|
||||||
|
'punctuation.definition.string.end.haskell'],
|
||||||
|
regex: '(\')(?:([\\ -\\[\\]-~])|(\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\"\'\\&]))|(\\\\o[0-7]+)|(\\\\x[0-9A-Fa-f]+)|(\\^[A-Z@\\[\\]\\\\\\^_]))(\')' },
|
||||||
|
{ token: ['meta.function.type-declaration.haskell',
|
||||||
|
'entity.name.function.haskell',
|
||||||
|
'meta.function.type-declaration.haskell',
|
||||||
|
'keyword.other.double-colon.haskell'],
|
||||||
|
regex: '^(\\s*)([a-z_][a-zA-Z0-9_\']*|\\([|!%$+\\-.,=</>]+\\))(\\s*)(::)',
|
||||||
|
push: [{ token: 'meta.function.type-declaration.haskell',
|
||||||
|
regex: '$',
|
||||||
|
next: 'pop' },
|
||||||
|
{ include: '#type_signature' },
|
||||||
|
{ defaultToken: 'meta.function.type-declaration.haskell' }] },
|
||||||
|
{ token: 'support.constant.haskell',
|
||||||
|
regex: '\\b(?:Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\(\\)|\\[\\])\\b' },
|
||||||
|
{ token: 'constant.other.haskell', regex: '\\b[A-Z]\\w*\\b' },
|
||||||
|
{ include: '#comments' },
|
||||||
|
{ token: 'support.function.prelude.haskell',
|
||||||
|
regex: '\\b(?:abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\b' },
|
||||||
|
{ include: '#infix_op' },
|
||||||
|
{ token: 'keyword.operator.haskell',
|
||||||
|
regex: '[|!%$?~+:\\-.=</>\\\\]+',
|
||||||
|
comment: 'In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.' },
|
||||||
|
{ token: 'punctuation.separator.comma.haskell', regex: ',' }],
|
||||||
|
'#block_comment': [{ token: 'punctuation.definition.comment.haskell',
|
||||||
|
regex: '\\{-(?!#)',
|
||||||
|
push: [{ include: '#block_comment' },
|
||||||
|
{ token: 'punctuation.definition.comment.haskell',
|
||||||
|
regex: '-\\}',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'comment.block.haskell' }] }],
|
||||||
|
'#comments': [{ token: 'punctuation.definition.comment.haskell',
|
||||||
|
regex: '--.*',
|
||||||
|
push_: [{ token: 'comment.line.double-dash.haskell',
|
||||||
|
regex: '$',
|
||||||
|
next: 'pop' },
|
||||||
|
{ defaultToken: 'comment.line.double-dash.haskell' }] },
|
||||||
|
{ include: '#block_comment' }],
|
||||||
|
'#infix_op': [{ token: 'entity.name.function.infix.haskell',
|
||||||
|
regex: '\\([|!%$+:\\-.=</>]+\\)|\\(,+\\)' }],
|
||||||
|
'#module_exports': [{ token: 'meta.declaration.exports.haskell',
|
||||||
|
regex: '\\(',
|
||||||
|
push: [{ token: 'meta.declaration.exports.haskell.end',
|
||||||
|
regex: '\\)',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'entity.name.function.haskell',
|
||||||
|
regex: '\\b[a-z][a-zA-Z_\']*' },
|
||||||
|
{ token: 'storage.type.haskell', regex: '\\b[A-Z][A-Za-z_\']*' },
|
||||||
|
{ token: 'punctuation.separator.comma.haskell', regex: ',' },
|
||||||
|
{ include: '#infix_op' },
|
||||||
|
{ token: 'meta.other.unknown.haskell',
|
||||||
|
regex: '\\(.*?\\)',
|
||||||
|
comment: 'So named because I don\'t know what to call this.' },
|
||||||
|
{ defaultToken: 'meta.declaration.exports.haskell.end' }] }],
|
||||||
|
'#module_name': [{ token: 'support.other.module.haskell',
|
||||||
|
regex: '[A-Z][A-Za-z._\']*' }],
|
||||||
|
'#pragma': [{ token: 'meta.preprocessor.haskell',
|
||||||
|
regex: '\\{-#',
|
||||||
|
push: [{ token: 'meta.preprocessor.haskell',
|
||||||
|
regex: '#-\\}',
|
||||||
|
next: 'pop' },
|
||||||
|
{ token: 'keyword.other.preprocessor.haskell',
|
||||||
|
regex: '\\b(?:LANGUAGE|UNPACK|INLINE)\\b' },
|
||||||
|
{ defaultToken: 'meta.preprocessor.haskell' }] }],
|
||||||
|
'#type_signature': [{ token: ['meta.class-constraint.haskell',
|
||||||
|
'entity.other.inherited-class.haskell',
|
||||||
|
'meta.class-constraint.haskell',
|
||||||
|
'variable.other.generic-type.haskell',
|
||||||
|
'meta.class-constraint.haskell',
|
||||||
|
'keyword.other.big-arrow.haskell'],
|
||||||
|
regex: '(\\(\\s*)([A-Z][A-Za-z]*)(\\s+)([a-z][A-Za-z_\']*)(\\)\\s*)(=>)' },
|
||||||
|
{ include: '#pragma' },
|
||||||
|
{ token: 'keyword.other.arrow.haskell', regex: '->' },
|
||||||
|
{ token: 'keyword.other.big-arrow.haskell', regex: '=>' },
|
||||||
|
{ token: 'support.type.prelude.haskell',
|
||||||
|
regex: '\\b(?:Int(?:eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(?:Error)?)\\b' },
|
||||||
|
{ token: 'variable.other.generic-type.haskell',
|
||||||
|
regex: '\\b[a-z][a-zA-Z0-9_\']*\\b' },
|
||||||
|
{ token: 'storage.type.haskell',
|
||||||
|
regex: '\\b[A-Z][a-zA-Z0-9_\']*\\b' },
|
||||||
|
{ token: 'support.constant.unit.haskell', regex: '\\(\\)' },
|
||||||
|
{ include: '#comments' }] };
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
HaskellHighlightRules.metaData = { fileTypes: ['hs'],
|
||||||
|
keyEquivalent: '^~H',
|
||||||
|
name: 'Haskell',
|
||||||
|
scopeName: 'source.haskell' };
|
||||||
|
oop.inherits(HaskellHighlightRules, TextHighlightRules);
|
||||||
|
exports.HaskellHighlightRules = HaskellHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/haskell",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/haskell_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){/*
|
||||||
|
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var HaskellHighlightRules = require("./haskell_highlight_rules").HaskellHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = HaskellHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "--";
|
||||||
|
this.blockComment = null;
|
||||||
|
this.$id = "ace/mode/haskell";
|
||||||
|
this.snippetFileId = "ace/snippets/haskell";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/haskell"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
define("ace/mode/haskell_cabal_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/**
|
||||||
|
* Haskell Cabal files highlighter (https://www.haskell.org/cabal/users-guide/developing-packages.html)
|
||||||
|
**/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var CabalHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "^\\s*--.*$"
|
||||||
|
}, {
|
||||||
|
token: ["keyword"],
|
||||||
|
regex: /^(\s*\w.*?)(:(?:\s+|$))/
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: /[\d_]+(?:(?:[\.\d_]*)?)/
|
||||||
|
}, {
|
||||||
|
token: "constant.language.boolean",
|
||||||
|
regex: "(?:true|false|TRUE|FALSE|True|False|yes|no)\\b"
|
||||||
|
}, {
|
||||||
|
token: "markup.heading",
|
||||||
|
regex: /^(\w.*)$/
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(CabalHighlightRules, TextHighlightRules);
|
||||||
|
exports.CabalHighlightRules = CabalHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/haskell_cabal",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){/*
|
||||||
|
* Folding mode for Cabal files (Haskell): allow folding each seaction, including
|
||||||
|
* the initial general section.
|
||||||
|
*/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var FoldMode = exports.FoldMode = function () { };
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.isHeading = function (session, row) {
|
||||||
|
var heading = "markup.heading";
|
||||||
|
var token = session.getTokens(row)[0];
|
||||||
|
return row == 0 || (token && token.type.lastIndexOf(heading, 0) === 0);
|
||||||
|
};
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
if (this.isHeading(session, row)) {
|
||||||
|
return "start";
|
||||||
|
}
|
||||||
|
else if (foldStyle === "markbeginend" && !(/^\s*$/.test(session.getLine(row)))) {
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
while (++row < maxRow) {
|
||||||
|
if (!(/^\s*$/.test(session.getLine(row)))) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (row == maxRow || this.isHeading(session, row)) {
|
||||||
|
return "end";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
if (this.isHeading(session, row)) {
|
||||||
|
while (++row < maxRow) {
|
||||||
|
if (this.isHeading(session, row)) {
|
||||||
|
row--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
endRow = row;
|
||||||
|
if (endRow > startRow) {
|
||||||
|
while (endRow > startRow && /^\s*$/.test(session.getLine(endRow)))
|
||||||
|
endRow--;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (this.getFoldWidget(session, foldStyle, row) === "end") {
|
||||||
|
var endRow = row;
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
while (--row >= 0) {
|
||||||
|
if (this.isHeading(session, row)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startColumn = line.length;
|
||||||
|
return new Range(row, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/haskell_cabal",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/haskell_cabal_highlight_rules","ace/mode/folding/haskell_cabal"], function(require, exports, module){/**
|
||||||
|
* Haskell Cabal files mode (https://www.haskell.org/cabal/users-guide/developing-packages.html)
|
||||||
|
**/
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var CabalHighlightRules = require("./haskell_cabal_highlight_rules").CabalHighlightRules;
|
||||||
|
var FoldMode = require("./folding/haskell_cabal").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = CabalHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "--";
|
||||||
|
this.blockComment = null;
|
||||||
|
this.$id = "ace/mode/haskell_cabal";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/haskell_cabal"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,313 @@
|
||||||
|
define("ace/mode/doc_comment_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 DocCommentHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment.doc.tag",
|
||||||
|
regex: "@\\w+(?=\\s|$)"
|
||||||
|
}, DocCommentHighlightRules.getTagRule(), {
|
||||||
|
defaultToken: "comment.doc.body",
|
||||||
|
caseInsensitive: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(DocCommentHighlightRules, TextHighlightRules);
|
||||||
|
DocCommentHighlightRules.getTagRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc.tag.storage.type",
|
||||||
|
regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getStartRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // doc comment
|
||||||
|
regex: /\/\*\*(?!\/)/,
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
DocCommentHighlightRules.getEndRule = function (start) {
|
||||||
|
return {
|
||||||
|
token: "comment.doc", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: start
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.DocCommentHighlightRules = DocCommentHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/haxe_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var HaxeHighlightRules = function () {
|
||||||
|
var keywords = ("break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std");
|
||||||
|
var buildinConstants = ("null|true|false");
|
||||||
|
var keywordMapper = this.createKeywordMapper({
|
||||||
|
"variable.language": "this",
|
||||||
|
"keyword": keywords,
|
||||||
|
"constant.language": buildinConstants
|
||||||
|
}, "identifier");
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "comment",
|
||||||
|
regex: "\\/\\/.*$"
|
||||||
|
},
|
||||||
|
DocCommentHighlightRules.getStartRule("doc-start"),
|
||||||
|
{
|
||||||
|
token: "comment", // multi line comment
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "string.regexp",
|
||||||
|
regex: "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.boolean",
|
||||||
|
regex: "(?:true|false)\\b"
|
||||||
|
}, {
|
||||||
|
token: keywordMapper,
|
||||||
|
regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||||
|
}, {
|
||||||
|
token: "keyword.operator",
|
||||||
|
regex: "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: "\\?|\\:|\\,|\\;|\\."
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({<]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}>]"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment", // closing comment
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]);
|
||||||
|
};
|
||||||
|
oop.inherits(HaxeHighlightRules, TextHighlightRules);
|
||||||
|
exports.HaxeHighlightRules = HaxeHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/haxe",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/haxe_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var HaxeHighlightRules = require("./haxe_highlight_rules").HaxeHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = HaxeHighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
|
||||||
|
var tokens = tokenizedLine.tokens;
|
||||||
|
if (tokens.length && tokens[tokens.length - 1].type == "comment") {
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/haxe";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/haxe"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
|
@ -0,0 +1,318 @@
|
||||||
|
define("ace/mode/hjson_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from Hjson.tmLanguage (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var HjsonHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
start: [{
|
||||||
|
include: "#comments"
|
||||||
|
}, {
|
||||||
|
include: "#rootObject"
|
||||||
|
}, {
|
||||||
|
include: "#value"
|
||||||
|
}],
|
||||||
|
"#array": [{
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /\[/,
|
||||||
|
push: [{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /\]/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "#value"
|
||||||
|
}, {
|
||||||
|
include: "#comments"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: /,|$/
|
||||||
|
}, {
|
||||||
|
token: "invalid.illegal",
|
||||||
|
regex: /[^\s\]]/
|
||||||
|
}, {
|
||||||
|
defaultToken: "array"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"#comments": [{
|
||||||
|
token: [
|
||||||
|
"comment.punctuation",
|
||||||
|
"comment.line"
|
||||||
|
],
|
||||||
|
regex: /(#)(.*$)/
|
||||||
|
}, {
|
||||||
|
token: "comment.punctuation",
|
||||||
|
regex: /\/\*/,
|
||||||
|
push: [{
|
||||||
|
token: "comment.punctuation",
|
||||||
|
regex: /\*\//,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment.block"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: [
|
||||||
|
"comment.punctuation",
|
||||||
|
"comment.line"
|
||||||
|
],
|
||||||
|
regex: /(\/\/)(.*$)/
|
||||||
|
}],
|
||||||
|
"#constant": [{
|
||||||
|
token: "constant",
|
||||||
|
regex: /\b(?:true|false|null)\b/
|
||||||
|
}],
|
||||||
|
"#keyname": [{
|
||||||
|
token: "keyword",
|
||||||
|
regex: /(?:[^,\{\[\}\]\s]+|"(?:[^"\\]|\\.)*")\s*(?=:)/
|
||||||
|
}],
|
||||||
|
"#mstring": [{
|
||||||
|
token: "string",
|
||||||
|
regex: /'''/,
|
||||||
|
push: [{
|
||||||
|
token: "string",
|
||||||
|
regex: /'''/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"#number": [{
|
||||||
|
token: "constant.numeric",
|
||||||
|
regex: /-?(?:0|[1-9]\d*)(?:(?:\.\d+)?(?:[eE][+-]?\d+)?)?/,
|
||||||
|
comment: "handles integer and decimal numbers"
|
||||||
|
}],
|
||||||
|
"#object": [{
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: /\{/,
|
||||||
|
push: [{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /\}/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "#keyname"
|
||||||
|
}, {
|
||||||
|
include: "#value"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: /:/
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: /,/
|
||||||
|
}, {
|
||||||
|
defaultToken: "paren"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"#rootObject": [{
|
||||||
|
token: "paren",
|
||||||
|
regex: /(?=\s*(?:[^,\{\[\}\]\s]+|"(?:[^"\\]|\\.)*")\s*:)/,
|
||||||
|
push: [{
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: /---none---/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
include: "#keyname"
|
||||||
|
}, {
|
||||||
|
include: "#value"
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: /:/
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: /,/
|
||||||
|
}, {
|
||||||
|
defaultToken: "paren"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"#string": [{
|
||||||
|
token: "string",
|
||||||
|
regex: /"/,
|
||||||
|
push: [{
|
||||||
|
token: "string",
|
||||||
|
regex: /"/,
|
||||||
|
next: "pop"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/
|
||||||
|
}, {
|
||||||
|
token: "invalid.illegal",
|
||||||
|
regex: /\\./
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"#ustring": [{
|
||||||
|
token: "string",
|
||||||
|
regex: /\b[^:,0-9\-\{\[\}\]\s].*$/
|
||||||
|
}],
|
||||||
|
"#value": [{
|
||||||
|
include: "#constant"
|
||||||
|
}, {
|
||||||
|
include: "#number"
|
||||||
|
}, {
|
||||||
|
include: "#string"
|
||||||
|
}, {
|
||||||
|
include: "#array"
|
||||||
|
}, {
|
||||||
|
include: "#object"
|
||||||
|
}, {
|
||||||
|
include: "#comments"
|
||||||
|
}, {
|
||||||
|
include: "#mstring"
|
||||||
|
}, {
|
||||||
|
include: "#ustring"
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
HjsonHighlightRules.metaData = {
|
||||||
|
fileTypes: ["hjson"],
|
||||||
|
foldingStartMarker: "(?x: # turn on extended mode\n ^ # a line beginning with\n \\s* # some optional space\n [{\\[] # the start of an object or array\n (?! # but not followed by\n .* # whatever\n [}\\]] # and the close of an object or array\n ,? # an optional comma\n \\s* # some optional space\n $ # at the end of the line\n )\n | # ...or...\n [{\\[] # the start of an object or array\n \\s* # some optional space\n $ # at the end of the line\n )",
|
||||||
|
foldingStopMarker: "(?x: # turn on extended mode\n ^ # a line beginning with\n \\s* # some optional space\n [}\\]] # and the close of an object or array\n )",
|
||||||
|
keyEquivalent: "^~J",
|
||||||
|
name: "Hjson",
|
||||||
|
scopeName: "source.hjson"
|
||||||
|
};
|
||||||
|
oop.inherits(HjsonHighlightRules, TextHighlightRules);
|
||||||
|
exports.HjsonHighlightRules = HjsonHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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/hjson",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/hjson_highlight_rules","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var HjsonHighlightRules = require("./hjson_highlight_rules").HjsonHighlightRules;
|
||||||
|
var FoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = HjsonHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.$id = "ace/mode/hjson";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/hjson"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,138 @@
|
||||||
|
define("ace/mode/ini_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/* This file was autogenerated from tool\tm bundles\ini.tmbundle\Syntaxes\Ini.plist (uuid: ) */
|
||||||
|
"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var escapeRe = "\\\\(?:[\\\\0abtrn;#=:]|x[a-fA-F\\d]{4})";
|
||||||
|
var IniHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
start: [{
|
||||||
|
token: 'punctuation.definition.comment.ini',
|
||||||
|
regex: '#.*',
|
||||||
|
push_: [{
|
||||||
|
token: 'comment.line.number-sign.ini',
|
||||||
|
regex: '$|^',
|
||||||
|
next: 'pop'
|
||||||
|
}, {
|
||||||
|
defaultToken: 'comment.line.number-sign.ini'
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: 'punctuation.definition.comment.ini',
|
||||||
|
regex: ';.*',
|
||||||
|
push_: [{
|
||||||
|
token: 'comment.line.semicolon.ini',
|
||||||
|
regex: '$|^',
|
||||||
|
next: 'pop'
|
||||||
|
}, {
|
||||||
|
defaultToken: 'comment.line.semicolon.ini'
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: ['keyword.other.definition.ini', 'text', 'punctuation.separator.key-value.ini'],
|
||||||
|
regex: '\\b([a-zA-Z0-9_.-]+)\\b(\\s*)(=)'
|
||||||
|
}, {
|
||||||
|
token: ['punctuation.definition.entity.ini', 'constant.section.group-title.ini', 'punctuation.definition.entity.ini'],
|
||||||
|
regex: '^(\\[)(.*?)(\\])'
|
||||||
|
}, {
|
||||||
|
token: 'punctuation.definition.string.begin.ini',
|
||||||
|
regex: "'",
|
||||||
|
push: [{
|
||||||
|
token: 'punctuation.definition.string.end.ini',
|
||||||
|
regex: "'",
|
||||||
|
next: 'pop'
|
||||||
|
}, {
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: escapeRe
|
||||||
|
}, {
|
||||||
|
defaultToken: 'string.quoted.single.ini'
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
token: 'punctuation.definition.string.begin.ini',
|
||||||
|
regex: '"',
|
||||||
|
push: [{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: escapeRe
|
||||||
|
}, {
|
||||||
|
token: 'punctuation.definition.string.end.ini',
|
||||||
|
regex: '"',
|
||||||
|
next: 'pop'
|
||||||
|
}, {
|
||||||
|
defaultToken: 'string.quoted.double.ini'
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
this.normalizeRules();
|
||||||
|
};
|
||||||
|
IniHighlightRules.metaData = {
|
||||||
|
fileTypes: ['ini', 'conf'],
|
||||||
|
keyEquivalent: '^~I',
|
||||||
|
name: 'Ini',
|
||||||
|
scopeName: 'source.ini'
|
||||||
|
};
|
||||||
|
oop.inherits(IniHighlightRules, TextHighlightRules);
|
||||||
|
exports.IniHighlightRules = IniHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/folding/ini",["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 () {
|
||||||
|
};
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.foldingStartMarker = /^\s*\[([^\])]*)]\s*(?:$|[;#])/;
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||||
|
var re = this.foldingStartMarker;
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var m = line.match(re);
|
||||||
|
if (!m)
|
||||||
|
return;
|
||||||
|
var startName = m[1] + ".";
|
||||||
|
var startColumn = line.length;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var endRow = row;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
if (/^\s*$/.test(line))
|
||||||
|
continue;
|
||||||
|
m = line.match(re);
|
||||||
|
if (m && m[1].lastIndexOf(startName, 0) !== 0)
|
||||||
|
break;
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
if (endRow > startRow) {
|
||||||
|
var endColumn = session.getLine(endRow).length;
|
||||||
|
return new Range(startRow, startColumn, endRow, endColumn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
define("ace/mode/ini",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/ini_highlight_rules","ace/mode/folding/ini"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var IniHighlightRules = require("./ini_highlight_rules").IniHighlightRules;
|
||||||
|
var FoldMode = require("./folding/ini").FoldMode;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = IniHighlightRules;
|
||||||
|
this.foldingRules = new FoldMode();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = ";";
|
||||||
|
this.blockComment = null;
|
||||||
|
this.$id = "ace/mode/ini";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
window.require(["ace/mode/ini"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue