first commit
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
ace.define("ace/mode/basic_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 BasicHighlightRules = function () {
|
||||
var keywordMapper = this.createKeywordMapper({
|
||||
"keyword.control": "FOR|TO|NEXT|GOSUB|RETURN|IF|THEN|ELSE|GOTO|ON|WHILE|WEND|TRON|TROFF",
|
||||
"entity.name": "Auto|Call|Chain|Clear|Close|Common|Cont|Data|MERGE|ALL|Delete|DIM|EDIT|END|ERASE|ERROR|FIELD|"
|
||||
+ "GET|INPUT|KILL|LET|LIST|LLIST|LOAD|LSET|RSET|MERGE|NEW|NULL|OPEN|OUT|POKE|PRINT|PUT|RANDOMIZE|READ|"
|
||||
+ "RENUM|RESTORE|RESUME|RUN|SAVE|STOP|SWAP|WAIT|WIDTH",
|
||||
"keyword.operator": "Mod|And|Not|Or|Xor|Eqv|Imp",
|
||||
"support.function": "ABS|ASC|ATN|CDBL|CINT|COS|CSNG|CVI|CVS|CVD|EOF|EXP|FIX|FRE|INP|INSTR|INT|LEN|LOC|LOG|LPOS|"
|
||||
+ "PEEK|POS|RND|SGN|SIN|SPC|SQR|TAB|TAN|USR|VAL|VARPTR"
|
||||
}, "identifier", true);
|
||||
this.$rules = {
|
||||
"start": [
|
||||
{
|
||||
token: "string",
|
||||
regex: /"(?:\\.|[^"\\])*"/
|
||||
},
|
||||
{
|
||||
token: "support.function",
|
||||
regex: /(HEX|CHR|INPUT|LEFT|MID|MKI|MKS|MKD|OCT|RIGHT|SPACE|STR|STRING)\$/
|
||||
}, {
|
||||
token: "entity.name",
|
||||
regex: /(?:DEF\s(?:SEG|USR|FN[a-zA-Z]+)|LINE\sINPUT|L?PRINT#?(?:\sUSING)?|MID\$|ON\sERROR\sGOTO|OPTION\sBASE|WRITE#?|DATE\$|INKEY\$|TIME\$)/
|
||||
}, {
|
||||
token: "variable",
|
||||
regex: /[a-zA-Z][a-zA-Z0-9_]{0,38}[$%!#]?(?=\s*=)/
|
||||
}, {
|
||||
token: "keyword.operator",
|
||||
regex: /\\|=|\^|\*|\/|\+|\-|<|>|-/
|
||||
}, {
|
||||
token: "paren.lparen",
|
||||
regex: /[([]/
|
||||
}, {
|
||||
token: "paren.rparen",
|
||||
regex: /[\)\]]/
|
||||
}, {
|
||||
token: "constant.numeric",
|
||||
regex: /[+-]?\d+(\.\d+)?([ED][+-]?\d+)?(?:[!#])?/
|
||||
}, {
|
||||
token: "constant.numeric", //hexal, octal
|
||||
regex: /&[HO]?[0-9A-F]+/
|
||||
}, {
|
||||
token: "comment",
|
||||
regex: /REM\s+.*$/
|
||||
}, {
|
||||
regex: "\\w+",
|
||||
token: keywordMapper
|
||||
}, {
|
||||
token: "punctiation",
|
||||
regex: /[,;]/
|
||||
}
|
||||
]
|
||||
};
|
||||
this.normalizeRules();
|
||||
};
|
||||
oop.inherits(BasicHighlightRules, TextHighlightRules);
|
||||
exports.BasicHighlightRules = BasicHighlightRules;
|
||||
|
||||
});
|
||||
|
||||
ace.define("ace/mode/folding/basic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"], function(require, exports, module){"use strict";
|
||||
var oop = require("../../lib/oop");
|
||||
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||
var Range = require("../../range").Range;
|
||||
var TokenIterator = require("../../token_iterator").TokenIterator;
|
||||
var FoldMode = exports.FoldMode = function () { };
|
||||
oop.inherits(FoldMode, BaseFoldMode);
|
||||
(function () {
|
||||
this.indentKeywords = {
|
||||
"tron": 1,
|
||||
"while": 1,
|
||||
"for": 1,
|
||||
"troff": -1,
|
||||
"wend": -1,
|
||||
"next": -1
|
||||
};
|
||||
this.foldingStartMarker = /(?:\s|^)(tron|while|for)\b/i;
|
||||
this.foldingStopMarker = /(?:\b)(troff|next|wend)\b/i;
|
||||
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||
var line = session.getLine(row);
|
||||
var isStart = this.foldingStartMarker.test(line);
|
||||
var isEnd = this.foldingStopMarker.test(line);
|
||||
if (isStart || isEnd) {
|
||||
var match = (isEnd) ? this.foldingStopMarker.exec(line) : this.foldingStartMarker.exec(line);
|
||||
var keyword = match && match[1].toLowerCase();
|
||||
if (keyword) {
|
||||
var type = session.getTokenAt(row, match.index + 2).type;
|
||||
if (type === "keyword.control")
|
||||
return this.basicBlock(session, row, match.index + 2);
|
||||
}
|
||||
}
|
||||
};
|
||||
this.getFoldWidget = function (session, foldStyle, row) {
|
||||
var line = session.getLine(row);
|
||||
var isStart = this.foldingStartMarker.test(line);
|
||||
var isEnd = this.foldingStopMarker.test(line);
|
||||
if (isStart && !isEnd) {
|
||||
var match = this.foldingStartMarker.exec(line);
|
||||
var keyword = match && match[1].toLowerCase();
|
||||
if (keyword) {
|
||||
var type = session.getTokenAt(row, match.index + 2).type;
|
||||
if (type == "keyword.control") {
|
||||
return "start";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (foldStyle != "markbeginend" || !isEnd || isStart && isEnd)
|
||||
return "";
|
||||
var match = line.match(this.foldingStopMarker);
|
||||
var keyword = match && match[1].toLowerCase();
|
||||
if (this.indentKeywords[keyword]) {
|
||||
if (session.getTokenAt(row, match.index + 2).type === "keyword.control")
|
||||
return "end";
|
||||
}
|
||||
return "";
|
||||
};
|
||||
this.basicBlock = function (session, row, column, tokenRange) {
|
||||
var stream = new TokenIterator(session, row, column);
|
||||
var token = stream.getCurrentToken();
|
||||
if (!token || token.type != "keyword.control")
|
||||
return;
|
||||
var val = token.value.toLowerCase();
|
||||
var stack = [val];
|
||||
var dir = this.indentKeywords[val];
|
||||
if (!dir)
|
||||
return;
|
||||
var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;
|
||||
var startRow = row;
|
||||
stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;
|
||||
while (token = stream.step()) {
|
||||
val = token.value.toLowerCase();
|
||||
if (token.type !== "keyword.control" || !this.indentKeywords[val])
|
||||
continue;
|
||||
var level = dir * this.indentKeywords[val];
|
||||
if (level > 0) {
|
||||
stack.unshift(val);
|
||||
}
|
||||
else if (level <= 0) {
|
||||
stack.shift();
|
||||
}
|
||||
if (stack.length === 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!token)
|
||||
return null;
|
||||
if (tokenRange)
|
||||
return stream.getCurrentTokenRange();
|
||||
var row = stream.getCurrentTokenRow();
|
||||
if (dir === -1)
|
||||
return new Range(row, session.getLine(row).length, startRow, startColumn);
|
||||
else
|
||||
return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());
|
||||
};
|
||||
}).call(FoldMode.prototype);
|
||||
|
||||
});
|
||||
|
||||
ace.define("ace/mode/basic",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/basic_highlight_rules","ace/mode/folding/basic"], function(require, exports, module){"use strict";
|
||||
var oop = require("../lib/oop");
|
||||
var TextMode = require("./text").Mode;
|
||||
var BasicHighlightRules = require("./basic_highlight_rules").BasicHighlightRules;
|
||||
var FoldMode = require("./folding/basic").FoldMode;
|
||||
var Mode = function () {
|
||||
this.HighlightRules = BasicHighlightRules;
|
||||
this.foldingRules = new FoldMode();
|
||||
this.$behaviour = this.$defaultBehaviour;
|
||||
this.indentKeywords = this.foldingRules.indentKeywords;
|
||||
};
|
||||
oop.inherits(Mode, TextMode);
|
||||
(function () {
|
||||
this.lineCommentStart = ["REM"];
|
||||
this.getMatching = function (session, row, column, tokenRange) {
|
||||
if (row == undefined) {
|
||||
var pos = session.selection.lead;
|
||||
column = pos.column;
|
||||
row = pos.row;
|
||||
}
|
||||
if (tokenRange == undefined)
|
||||
tokenRange = true;
|
||||
var startToken = session.getTokenAt(row, column);
|
||||
if (startToken) {
|
||||
var val = startToken.value.toLowerCase();
|
||||
if (val in this.indentKeywords)
|
||||
return this.foldingRules.basicBlock(session, row, column, tokenRange);
|
||||
}
|
||||
};
|
||||
this.$id = "ace/mode/basic";
|
||||
}).call(Mode.prototype);
|
||||
exports.Mode = Mode;
|
||||
|
||||
}); (function() {
|
||||
ace.require(["ace/mode/basic"], function(m) {
|
||||
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||
module.exports = m;
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user