| ace.define( |
| 'ace/ext/whitespace', |
| ['require', 'exports', 'module', 'ace/lib/lang'], |
| function (e, t, n) { |
| 'use strict' |
| var r = e('../lib/lang') |
| ;(t.$detectIndentation = function (e, t) { |
| function c(e) { |
| var t = 0 |
| for (var r = e; r < n.length; r += e) t += n[r] || 0 |
| return t |
| } |
| var n = [], |
| r = [], |
| i = 0, |
| s = 0, |
| o = Math.min(e.length, 1e3) |
| for (var u = 0; u < o; u++) { |
| var a = e[u] |
| if (!/^\s*[^*+\-\s]/.test(a)) continue |
| if (a[0] == ' ') i++, (s = -Number.MAX_VALUE) |
| else { |
| var f = a.match(/^ */)[0].length |
| if (f && a[f] != ' ') { |
| var l = f - s |
| l > 0 && !(s % l) && !(f % l) && (r[l] = (r[l] || 0) + 1), (n[f] = (n[f] || 0) + 1) |
| } |
| s = f |
| } |
| while (u < o && a[a.length - 1] == '\\') a = e[u++] |
| } |
| var h = r.reduce(function (e, t) { |
| return e + t |
| }, 0), |
| p = { score: 0, length: 0 }, |
| d = 0 |
| for (var u = 1; u < 12; u++) { |
| var v = c(u) |
| u == 1 ? ((d = v), (v = n[1] ? 0.9 : 0.8), n.length || (v = 0)) : (v /= d), |
| r[u] && (v += r[u] / h), |
| v > p.score && (p = { score: v, length: u }) |
| } |
| if (p.score && p.score > 1.4) var m = p.length |
| if (i > d + 1) { |
| if (m == 1 || d < i / 4 || p.score < 1.8) m = undefined |
| return { ch: ' ', length: m } |
| } |
| if (d > i + 1) return { ch: ' ', length: m } |
| }), |
| (t.detectIndentation = function (e) { |
| var n = e.getLines(0, 1e3), |
| r = t.$detectIndentation(n) || {} |
| return r.ch && e.setUseSoftTabs(r.ch == ' '), r.length && e.setTabSize(r.length), r |
| }), |
| (t.trimTrailingSpace = function (e, t) { |
| var n = e.getDocument(), |
| r = n.getAllLines(), |
| i = t && t.trimEmpty ? -1 : 0, |
| s = [], |
| o = -1 |
| t && |
| t.keepCursorPosition && |
| (e.selection.rangeCount |
| ? e.selection.rangeList.ranges.forEach(function (e, t, n) { |
| var r = n[t + 1] |
| if (r && r.cursor.row == e.cursor.row) return |
| s.push(e.cursor) |
| }) |
| : s.push(e.selection.getCursor()), |
| (o = 0)) |
| var u = s[o] && s[o].row |
| for (var a = 0, f = r.length; a < f; a++) { |
| var l = r[a], |
| c = l.search(/\s+$/) |
| a == u && |
| (c < s[o].column && c > i && (c = s[o].column), o++, (u = s[o] ? s[o].row : -1)), |
| c > i && n.removeInLine(a, c, l.length) |
| } |
| }), |
| (t.convertIndentation = function (e, t, n) { |
| var i = e.getTabString()[0], |
| s = e.getTabSize() |
| n || (n = s), t || (t = i) |
| var o = t == ' ' ? t : r.stringRepeat(t, n), |
| u = e.doc, |
| a = u.getAllLines(), |
| f = {}, |
| l = {} |
| for (var c = 0, h = a.length; c < h; c++) { |
| var p = a[c], |
| d = p.match(/^\s*/)[0] |
| if (d) { |
| var v = e.$getStringScreenWidth(d)[0], |
| m = Math.floor(v / s), |
| g = v % s, |
| y = f[m] || (f[m] = r.stringRepeat(o, m)) |
| ;(y += l[g] || (l[g] = r.stringRepeat(' ', g))), |
| y != d && (u.removeInLine(c, 0, d.length), u.insertInLine({ row: c, column: 0 }, y)) |
| } |
| } |
| e.setTabSize(n), e.setUseSoftTabs(t == ' ') |
| }), |
| (t.$parseStringArg = function (e) { |
| var t = {} |
| ;/t/.test(e) ? (t.ch = ' ') : /s/.test(e) && (t.ch = ' ') |
| var n = e.match(/\d+/) |
| return n && (t.length = parseInt(n[0], 10)), t |
| }), |
| (t.$parseArg = function (e) { |
| return e |
| ? typeof e == 'string' |
| ? t.$parseStringArg(e) |
| : typeof e.text == 'string' |
| ? t.$parseStringArg(e.text) |
| : e |
| : {} |
| }), |
| (t.commands = [ |
| { |
| name: 'detectIndentation', |
| description: 'Detect indentation from content', |
| exec: function (e) { |
| t.detectIndentation(e.session) |
| }, |
| }, |
| { |
| name: 'trimTrailingSpace', |
| description: 'Trim trailing whitespace', |
| exec: function (e, n) { |
| t.trimTrailingSpace(e.session, n) |
| }, |
| }, |
| { |
| name: 'convertIndentation', |
| description: 'Convert indentation to ...', |
| exec: function (e, n) { |
| var r = t.$parseArg(n) |
| t.convertIndentation(e.session, r.ch, r.length) |
| }, |
| }, |
| { |
| name: 'setIndentation', |
| description: 'Set indentation', |
| exec: function (e, n) { |
| var r = t.$parseArg(n) |
| r.length && e.session.setTabSize(r.length), |
| r.ch && e.session.setUseSoftTabs(r.ch == ' ') |
| }, |
| }, |
| ]) |
| } |
| ) |
| ;(function () { |
| ace.require(['ace/ext/whitespace'], function (m) { |
| if (typeof module == 'object' && typeof exports == 'object' && module) { |
| module.exports = m |
| } |
| }) |
| })() |
|
|