text: ace.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"
              }, { //diff.range.unified
                  regex: "^(@@)(\\s*.+?\\s*)(@@)(.*)$",
                  token: [
                      "constant",
                      "constant.numeric",
                      "constant",
                      "comment.doc.tag"
                  ]
              }, { //diff.range.normal
                  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"
                  ]
              }, { // added
                  regex: "^([!+>])(.*?)(\\s*)$",
                  token: [
                      "support.constant",
                      "text",
                      "invalid"
                  ]
              }, { // removed
                  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;
  });
  
  ace.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);
  
  });
  
  ace.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";
  }).call(Mode.prototype);
  
  exports.Mode = Mode;
  
  });                (function() {
                      ace.require(["ace/mode/diff"], function(m) {
                          if (typeof module == "object" && typeof exports == "object" && module) {
                              module.exports = m;
                          }
                      });
                  })();
              