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;

}); 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;

});