text: ace.define("ace/ext/beautify", ["require", "exports", "module", "ace/token_iterator"], function (e, t, n) {
      "use strict";
  
      function i(e, t) {
          return e.type.lastIndexOf(t + ".xml") > -1
      }
  
      var r = e("../token_iterator").TokenIterator;
      t.singletonTags = ["area", "base", "br", "col", "command", "embed", "hr", "html", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"], t.blockTags = ["article", "aside", "blockquote", "body", "div", "dl", "fieldset", "footer", "form", "head", "header", "html", "nav", "ol", "p", "script", "section", "style", "table", "tbody", "tfoot", "thead", "ul"], t.beautify = function (e) {
          var n = new r(e, 0, 0), s = n.getCurrentToken(), o = e.getTabString(), u = t.singletonTags, a = t.blockTags, f, l = !1, c = !1, h = !1,
              p = "", d = "", v = "", m = 0, g = 0, y = 0, b = 0, w = 0, E = 0, S = 0, x, T = 0, N = 0, C = [], k = !1, L, A = !1, O = !1, M = !1,
              _ = !1, D = {0: 0}, P = [], H = function () {
                  f && f.value && f.type !== "string.regexp" && (f.value = f.value.trim())
              }, B = function () {
                  p = p.replace(/ +$/, "")
              }, j = function () {
                  p = p.trimRight(), l = !1
              };
          while (s !== null) {
              T = n.getCurrentTokenRow(), C = n.$rowTokens, f = n.stepForward();
              if (typeof s != "undefined") {
                  d = s.value, w = 0, M = v === "style" || e.$modeId === "ace/mode/css", i(s, "tag-open") ? (O = !0, f && (_ = a.indexOf(f.value) !== -1), d === "</" && (_ && !l && N < 1 && N++, M && (N = 1), w = 1, _ = !1)) : i(s, "tag-close") ? O = !1 : i(s, "comment.start") ? _ = !0 : i(s, "comment.end") && (_ = !1), !O && !N && s.type === "paren.rparen" && s.value.substr(0, 1) === "}" && N++, T !== x && (N = T, x && (N -= x));
                  if (N) {
                      j();
                      for (; N > 0; N--) p += "\n";
                      l = !0, !i(s, "comment") && !s.type.match(/^(comment|string)$/) && (d = d.trimLeft())
                  }
                  if (d) {
                      s.type === "keyword" && d.match(/^(if|else|elseif|for|foreach|while|switch)$/) ? (P[m] = d, H(), h = !0, d.match(/^(else|elseif)$/) && p.match(/\}[\s]*$/) && (j(), c = !0)) : s.type === "paren.lparen" ? (H(), d.substr(-1) === "{" && (h = !0, A = !1, O || (N = 1)), d.substr(0, 1) === "{" && (c = !0, p.substr(-1) !== "[" && p.trimRight().substr(-1) === "[" ? (j(), c = !1) : p.trimRight().substr(-1) === ")" ? j() : B())) : s.type === "paren.rparen" ? (w = 1, d.substr(0, 1) === "}" && (P[m - 1] === "case" && w++, p.trimRight().substr(-1) === "{" ? j() : (c = !0, M && (N += 2))), d.substr(0, 1) === "]" && p.substr(-1) !== "}" && p.trimRight().substr(-1) === "}" && (c = !1, b++, j()), d.substr(0, 1) === ")" && p.substr(-1) !== "(" && p.trimRight().substr(-1) === "(" && (c = !1, b++, j()), B()) : s.type !== "keyword.operator" && s.type !== "keyword" || !d.match(/^(=|==|===|!=|!==|&&|\|\||and|or|xor|\+=|.=|>|>=|<|<=|=>)$/) ? s.type === "punctuation.operator" && d === ";" ? (j(), H(), h = !0, M && N++) : s.type === "punctuation.operator" && d.match(/^(:|,)$/) ? (j(), H(), d.match(/^(,)$/) && S > 0 && E === 0 ? N++ : (h = !0, l = !1)) : s.type === "support.php_tag" && d === "?>" && !l ? (j(), c = !0) : i(s, "attribute-name") && p.substr(-1).match(/^\s$/) ? c = !0 : i(s, "attribute-equals") ? (B(), H()) : i(s, "tag-close") && (B(), d === "/>" && (c = !0)) : (j(), H(), c = !0, h = !0);
                      if (l && (!s.type.match(/^(comment)$/) || !!d.substr(0, 1).match(/^[/#]$/)) && (!s.type.match(/^(string)$/) || !!d.substr(0, 1).match(/^['"]$/))) {
                          b = y;
                          if (m > g) {
                              b++;
                              for (L = m; L > g; L--) D[L] = b
                          } else m < g && (b = D[m]);
                          g = m, y = b, w && (b -= w), A && !E && (b++, A = !1);
                          for (L = 0; L < b; L++) p += o
                      }
                      s.type === "keyword" && d.match(/^(case|default)$/) && (P[m] = d, m++), s.type === "keyword" && d.match(/^(break)$/) && P[m - 1] && P[m - 1].match(/^(case|default)$/) && m--, s.type === "paren.lparen" && (E += (d.match(/\(/g) || []).length, S += (d.match(/\{/g) || []).length, m += d.length), s.type === "keyword" && d.match(/^(if|else|elseif|for|while)$/) ? (A = !0, E = 0) : !E && d.trim() && s.type !== "comment" && (A = !1);
                      if (s.type === "paren.rparen") {
                          E -= (d.match(/\)/g) || []).length, S -= (d.match(/\}/g) || []).length;
                          for (L = 0; L < d.length; L++) m--, d.substr(L, 1) === "}" && P[m] === "case" && m--
                      }
                      c && !l && (B(), p.substr(-1) !== "\n" && (p += " ")), p += d, h && (p += " "), l = !1, c = !1, h = !1;
                      if (i(s, "tag-close") && (_ || a.indexOf(v) !== -1) || i(s, "doctype") && d === ">") _ && f && f.value === "</" ? N = -1 : N = 1;
                      i(s, "tag-open") && d === "</" ? m-- : i(s, "tag-open") && d === "<" && u.indexOf(f.value) === -1 ? m++ : i(s, "tag-name") ? v = d : i(s, "tag-close") && d === "/>" && u.indexOf(v) === -1 && m--, x = T
                  }
              }
              s = f
          }
          p = p.trim(), e.doc.setValue(p)
      }, t.commands = [{
          name: "beautify", description: "Format selection (Beautify)", exec: function (e) {
              t.beautify(e.session)
          }, bindKey: "Ctrl-Shift-B"
      }]
  });
  (function () {
      ace.require(["ace/ext/beautify"], function (m) {
          if (typeof module == "object" && typeof exports == "object" && module) {
              module.exports = m;
          }
      });
  })();
              