96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
|
ace.define('ace/mode/latex', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/latex_highlight_rules', 'ace/range'], function(require, exports, module) {
|
||
|
|
||
|
|
||
|
var oop = require("../lib/oop");
|
||
|
var TextMode = require("./text").Mode;
|
||
|
var Tokenizer = require("../tokenizer").Tokenizer;
|
||
|
var LatexHighlightRules = require("./latex_highlight_rules").LatexHighlightRules;
|
||
|
var Range = require("../range").Range;
|
||
|
|
||
|
var Mode = function()
|
||
|
{
|
||
|
this.$tokenizer = new Tokenizer(new LatexHighlightRules().getRules());
|
||
|
};
|
||
|
oop.inherits(Mode, TextMode);
|
||
|
|
||
|
(function() {
|
||
|
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||
|
// This code is adapted from ruby.js
|
||
|
var outdent = true;
|
||
|
|
||
|
// LaTeX comments begin with % and go to the end of the line
|
||
|
var commentRegEx = /^(\s*)\%/;
|
||
|
|
||
|
for (var i = startRow; i <= endRow; i++) {
|
||
|
if (!commentRegEx.test(doc.getLine(i))) {
|
||
|
outdent = false;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (outdent) {
|
||
|
var deleteRange = new Range(0, 0, 0, 0);
|
||
|
for (var i = startRow; i <= endRow; i++) {
|
||
|
var line = doc.getLine(i);
|
||
|
var m = line.match(commentRegEx);
|
||
|
deleteRange.start.row = i;
|
||
|
deleteRange.end.row = i;
|
||
|
deleteRange.end.column = m[0].length;
|
||
|
doc.replace(deleteRange, m[1]);
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
doc.indentRows(startRow, endRow, "%");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// There is no universally accepted way of indenting a tex document
|
||
|
// so just maintain the indentation of the previous line
|
||
|
this.getNextLineIndent = function(state, line, tab) {
|
||
|
return this.$getIndent(line);
|
||
|
};
|
||
|
|
||
|
}).call(Mode.prototype);
|
||
|
|
||
|
exports.Mode = Mode;
|
||
|
|
||
|
});
|
||
|
ace.define('ace/mode/latex_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 LatexHighlightRules = function() {
|
||
|
this.$rules = {
|
||
|
"start" : [{
|
||
|
// A tex command e.g. \foo
|
||
|
token : "keyword",
|
||
|
regex : "\\\\(?:[^a-zA-Z]|[a-zA-Z]+)",
|
||
|
}, {
|
||
|
// Curly and square braces
|
||
|
token : "lparen",
|
||
|
regex : "[[({]"
|
||
|
}, {
|
||
|
// Curly and square braces
|
||
|
token : "rparen",
|
||
|
regex : "[\\])}]"
|
||
|
}, {
|
||
|
// Inline math between two $ symbols
|
||
|
token : "string",
|
||
|
regex : "\\$(?:(?:\\\\.)|(?:[^\\$\\\\]))*?\\$"
|
||
|
}, {
|
||
|
// A comment. Tex comments start with % and go to
|
||
|
// the end of the line
|
||
|
token : "comment",
|
||
|
regex : "%.*$"
|
||
|
}]
|
||
|
};
|
||
|
};
|
||
|
|
||
|
oop.inherits(LatexHighlightRules, TextHighlightRules);
|
||
|
|
||
|
exports.LatexHighlightRules = LatexHighlightRules;
|
||
|
|
||
|
});
|