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) { "use strict"; 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) { "use strict"; 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; });