/* CodeMirror - Minified & Bundled Generated on 3/14/2016 with http://codemirror.net/doc/compress.html Version: HEAD CodeMirror Library: - codemirror.js Modes: - python.js Add-ons: - active-line.js - closebrackets.js - colorize.js Keymaps: - sublime.js */ ! function(a) { if ("object" == typeof exports && "object" == typeof module) module.exports = a(); else { if ("function" == typeof define && define.amd) return define([], a); (this || window) .CodeMirror = a() } }(function() { "use strict"; function x(a, b) { if (!(this instanceof x)) return new x(a, b); this.options = b = b ? mg(b) : {}, mg(Dd, b, !1), K(b); var c = b.value; "string" == typeof c && (c = new df(c, b.mode, null, b.lineSeparator)), this.doc = c; var d = new x.inputStyles[b.inputStyle](this), e = this.display = new y(a, c, d); e.wrapper.CodeMirror = this, G(this), E(this), b.lineWrapping && (this.display.wrapper.className += " CodeMirror-wrap"), b.autofocus && !p && e.input.focus(), O(this), this.state = { keyMaps: [], overlays: [], modeGen: 0, overwrite: !1, delayingBlurEvent: !1, focused: !1, suppressEdits: !1, pasteIncoming: !1, cutIncoming: !1, selectingText: !1, draggingText: !1, highlight: new bg, keySeq: null, specialChars: null }; var i = this; f && 11 > g && setTimeout(function() { i.display.input.reset(!0) }, 20), sc(this), Gg(), Yb(this), this.curOp.forceUpdate = !0, hf(this, c), b.autofocus && !p || i.hasFocus() ? setTimeout(ng(ad, this), 20) : bd(this); for (var j in Ed) Ed.hasOwnProperty(j) && Ed[j](this, b[j], Gd); T(this), b.finishInit && b.finishInit(this); for (var k = 0; k < Kd.length; ++k) Kd[k](this); $b(this), h && b.lineWrapping && "optimizelegibility" == getComputedStyle(e.lineDiv) .textRendering && (e.lineDiv.style.textRendering = "auto") } function y(a, b, d) { var e = this; this.input = d, e.scrollbarFiller = ug("div", null, "CodeMirror-scrollbar-filler"), e.scrollbarFiller.setAttribute("cm-not-content", "true"), e.gutterFiller = ug("div", null, "CodeMirror-gutter-filler"), e.gutterFiller.setAttribute("cm-not-content", "true"), e.lineDiv = ug("div", null, "CodeMirror-code"), e.selectionDiv = ug("div", null, null, "position: relative; z-index: 1"), e.cursorDiv = ug("div", null, "CodeMirror-cursors"), e.measure = ug("div", null, "CodeMirror-measure"), e.lineMeasure = ug("div", null, "CodeMirror-measure"), e.lineSpace = ug("div", [e.measure, e.lineMeasure, e.selectionDiv, e.cursorDiv, e.lineDiv], null, "position: relative; outline: none"), e.mover = ug("div", [ug("div", [e.lineSpace], "CodeMirror-lines")], null, "position: relative"), e.sizer = ug("div", [e.mover], "CodeMirror-sizer"), e.sizerWidth = null, e.heightForcer = ug("div", null, null, "position: absolute; height: " + Yf + "px; width: 1px;"), e.gutters = ug("div", null, "CodeMirror-gutters"), e.lineGutter = null, e.scroller = ug("div", [e.sizer, e.heightForcer, e.gutters], "CodeMirror-scroll"), e.scroller.setAttribute("tabIndex", "-1"), e.wrapper = ug("div", [e.scrollbarFiller, e.gutterFiller, e.scroller], "CodeMirror"), f && 8 > g && (e.gutters.style.zIndex = -1, e.scroller.style.paddingRight = 0), h || c && p || (e.scroller.draggable = !0), a && (a.appendChild ? a.appendChild(e.wrapper) : a(e.wrapper)), e.viewFrom = e.viewTo = b.first, e.reportedViewFrom = e.reportedViewTo = b.first, e.view = [], e.renderedView = null, e.externalMeasured = null, e.viewOffset = 0, e.lastWrapHeight = e.lastWrapWidth = 0, e.updateLineNumbers = null, e.nativeBarWidth = e.barHeight = e.barWidth = 0, e.scrollbarsClipped = !1, e.lineNumWidth = e.lineNumInnerWidth = e.lineNumChars = null, e.alignWidgets = !1, e.cachedCharWidth = e.cachedTextHeight = e.cachedPaddingH = null, e.maxLine = null, e.maxLineLength = 0, e.maxLineChanged = !1, e.wheelDX = e.wheelDY = e.wheelStartX = e.wheelStartY = null, e.shift = !1, e.selForContextMenu = null, e.activeTouch = null, d.init(e) } function z(a) { a.doc.mode = x.getMode(a.options, a.doc.modeOption), A(a) } function A(a) { a.doc.iter(function(a) { a.stateAfter && (a.stateAfter = null), a.styles && (a.styles = null) }), a.doc.frontier = a.doc.first, lb(a, 100), a.state.modeGen++, a.curOp && lc(a) } function B(a) { a.options.lineWrapping ? (Cg(a.display.wrapper, "CodeMirror-wrap"), a.display.sizer.style.minWidth = "", a.display.sizerWidth = null) : (Bg(a.display.wrapper, "CodeMirror-wrap"), J(a)), D(a), lc(a), Ib(a), setTimeout(function() { P(a) }, 100) } function C(a) { var b = Ub(a.display), c = a.options.lineWrapping, d = c && Math.max(5, a.display.scroller.clientWidth / Vb(a.display) - 3); return function(e) { if (ze(a.doc, e)) return 0; var f = 0; if (e.widgets) for (var g = 0; g < e.widgets.length; g++) e.widgets[g].height && (f += e.widgets[g].height); return c ? f + (Math.ceil(e.text.length / d) || 1) * b : f + b } } function D(a) { var b = a.doc, c = C(a); b.iter(function(a) { var b = c(a); b != a.height && mf(a, b) }) } function E(a) { a.display.wrapper.className = a.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + a.options.theme.replace(/(^|\s)\s*/g, " cm-s-"), Ib(a) } function F(a) { G(a), lc(a), setTimeout(function() { S(a) }, 20) } function G(a) { var b = a.display.gutters, c = a.options.gutters; wg(b); for (var d = 0; d < c.length; ++d) { var e = c[d], f = b.appendChild(ug("div", null, "CodeMirror-gutter " + e)); "CodeMirror-linenumbers" == e && (a.display.lineGutter = f, f.style.width = (a.display.lineNumWidth || 1) + "px") } b.style.display = d ? "" : "none", H(a) } function H(a) { var b = a.display.gutters.offsetWidth; a.display.sizer.style.marginLeft = b + "px" } function I(a) { if (0 == a.height) return 0; for (var c, b = a.text.length, d = a; c = se(d);) { var e = c.find(0, !0); d = e.from.line, b += e.from.ch - e.to.ch } for (d = a; c = te(d);) { var e = c.find(0, !0); b -= d.text.length - e.from.ch, d = e.to.line, b += d.text.length - e.to.ch } return b } function J(a) { var b = a.display, c = a.doc; b.maxLine = jf(c, c.first), b.maxLineLength = I(b.maxLine), b.maxLineChanged = !0, c.iter(function(a) { var c = I(a); c > b.maxLineLength && (b.maxLineLength = c, b.maxLine = a) }) } function K(a) { var b = ig(a.gutters, "CodeMirror-linenumbers"); - 1 == b && a.lineNumbers ? a.gutters = a.gutters.concat(["CodeMirror-linenumbers"]) : b > -1 && !a.lineNumbers && (a.gutters = a.gutters.slice(0), a.gutters.splice(b, 1)) } function L(a) { var b = a.display, c = b.gutters.offsetWidth, d = Math.round(a.doc.height + qb(a.display)); return { clientHeight: b.scroller.clientHeight, viewHeight: b.wrapper.clientHeight, scrollWidth: b.scroller.scrollWidth, clientWidth: b.scroller.clientWidth, viewWidth: b.wrapper.clientWidth, barLeft: a.options.fixedGutter ? c : 0, docHeight: d, scrollHeight: d + sb(a) + b.barHeight, nativeBarWidth: b.nativeBarWidth, gutterWidth: c } } function M(a, b, c) { this.cm = c; var d = this.vert = ug("div", [ug("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"), e = this.horiz = ug("div", [ug("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); a(d), a(e), Mf(d, "scroll", function() { d.clientHeight && b(d.scrollTop, "vertical") }), Mf(e, "scroll", function() { e.clientWidth && b(e.scrollLeft, "horizontal") }), this.checkedZeroWidth = !1, f && 8 > g && (this.horiz.style.minHeight = this.vert.style.minWidth = "18px") } function N() {} function O(a) { a.display.scrollbars && (a.display.scrollbars.clear(), a.display.scrollbars.addClass && Bg(a.display.wrapper, a.display.scrollbars.addClass)), a.display.scrollbars = new x.scrollbarModel[a.options.scrollbarStyle](function(b) { a.display.wrapper.insertBefore(b, a.display.scrollbarFiller), Mf(b, "mousedown", function() { a.state.focused && setTimeout(function() { a.display.input.focus() }, 0) }), b.setAttribute("cm-not-content", "true") }, function(b, c) { "horizontal" == c ? Lc(a, b) : Kc(a, b) }, a), a.display.scrollbars.addClass && Cg(a.display.wrapper, a.display.scrollbars.addClass) } function P(a, b) { b || (b = L(a)); var c = a.display.barWidth, d = a.display.barHeight; Q(a, b); for (var e = 0; 4 > e && c != a.display.barWidth || d != a.display.barHeight; e++) c != a.display.barWidth && a.options.lineWrapping && aa(a), Q(a, L(a)), c = a.display.barWidth, d = a.display.barHeight } function Q(a, b) { var c = a.display, d = c.scrollbars.update(b); c.sizer.style.paddingRight = (c.barWidth = d.right) + "px", c.sizer.style.paddingBottom = (c.barHeight = d.bottom) + "px", c.heightForcer.style.borderBottom = d.bottom + "px solid transparent", d.right && d.bottom ? (c.scrollbarFiller.style.display = "block", c.scrollbarFiller.style.height = d.bottom + "px", c.scrollbarFiller.style.width = d.right + "px") : c.scrollbarFiller.style.display = "", d.bottom && a.options.coverGutterNextToScrollbar && a.options.fixedGutter ? (c.gutterFiller.style.display = "block", c.gutterFiller.style.height = d.bottom + "px", c.gutterFiller.style.width = b.gutterWidth + "px") : c.gutterFiller.style.display = "" } function R(a, b, c) { var d = c && null != c.top ? Math.max(0, c.top) : a.scroller.scrollTop; d = Math.floor(d - pb(a)); var e = c && null != c.bottom ? c.bottom : d + a.wrapper.clientHeight, f = of (b, d), g = of (b, e); if (c && c.ensure) { var h = c.ensure.from.line, i = c.ensure.to.line; f > h ? (f = h, g = of (b, pf(jf(b, h)) + a.wrapper.clientHeight)) : Math.min(i, b.lastLine()) >= g && (f = of (b, pf(jf(b, i)) - a.wrapper.clientHeight), g = i) } return { from: f, to: Math.max(g, f + 1) } } function S(a) { var b = a.display, c = b.view; if (b.alignWidgets || b.gutters.firstChild && a.options.fixedGutter) { for (var d = V(b) - b.scroller.scrollLeft + a.doc.scrollLeft, e = b.gutters.offsetWidth, f = d + "px", g = 0; g < c.length; g++) if (!c[g].hidden) { a.options.fixedGutter && c[g].gutter && (c[g].gutter.style.left = f); var h = c[g].alignable; if (h) for (var i = 0; i < h.length; i++) h[i].style.left = f } a.options.fixedGutter && (b.gutters.style.left = d + e + "px") } } function T(a) { if (!a.options.lineNumbers) return !1; var b = a.doc, c = U(a.options, b.first + b.size - 1), d = a.display; if (c.length != d.lineNumChars) { var e = d.measure.appendChild(ug("div", [ug("div", c)], "CodeMirror-linenumber CodeMirror-gutter-elt")), f = e.firstChild.offsetWidth, g = e.offsetWidth - f; return d.lineGutter.style.width = "", d.lineNumInnerWidth = Math.max(f, d.lineGutter.offsetWidth - g) + 1, d.lineNumWidth = d.lineNumInnerWidth + g, d.lineNumChars = d.lineNumInnerWidth ? c.length : -1, d.lineGutter.style.width = d.lineNumWidth + "px", H(a), !0 } return !1 } function U(a, b) { return String(a.lineNumberFormatter(b + a.firstLineNumber)) } function V(a) { return a.scroller.getBoundingClientRect() .left - a.sizer.getBoundingClientRect() .left } function W(a, b, c) { var d = a.display; this.viewport = b, this.visible = R(d, a.doc, b), this.editorIsHidden = !d.wrapper.offsetWidth, this.wrapperHeight = d.wrapper.clientHeight, this.wrapperWidth = d.wrapper.clientWidth, this.oldDisplayWidth = tb(a), this.force = c, this.dims = ca(a), this.events = [] } function X(a) { var b = a.display; !b.scrollbarsClipped && b.scroller.offsetWidth && (b.nativeBarWidth = b.scroller.offsetWidth - b.scroller.clientWidth, b.heightForcer.style.height = sb(a) + "px", b.sizer.style.marginBottom = -b.nativeBarWidth + "px", b.sizer.style.borderRightWidth = sb(a) + "px", b.scrollbarsClipped = !0) } function Y(a, b) { var c = a.display, d = a.doc; if (b.editorIsHidden) return nc(a), !1; if (!b.force && b.visible.from >= c.viewFrom && b.visible.to <= c.viewTo && (null == c.updateLineNumbers || c.updateLineNumbers >= c.viewTo) && c.renderedView == c.view && 0 == rc(a)) return !1; T(a) && (nc(a), b.dims = ca(a)); var e = d.first + d.size, f = Math.max(b.visible.from - a.options.viewportMargin, d.first), g = Math.min(e, b.visible.to + a.options.viewportMargin); c.viewFrom < f && f - c.viewFrom < 20 && (f = Math.max(d.first, c.viewFrom)), c.viewTo > g && c.viewTo - g < 20 && (g = Math.min(e, c.viewTo)), w && (f = xe(a.doc, f), g = ye(a.doc, g)); var h = f != c.viewFrom || g != c.viewTo || c.lastWrapHeight != b.wrapperHeight || c.lastWrapWidth != b.wrapperWidth; qc(a, f, g), c.viewOffset = pf(jf(a.doc, c.viewFrom)), a.display.mover.style.top = c.viewOffset + "px"; var i = rc(a); if (!h && 0 == i && !b.force && c.renderedView == c.view && (null == c.updateLineNumbers || c.updateLineNumbers >= c.viewTo)) return !1; var j = zg(); return i > 4 && (c.lineDiv.style.display = "none"), da(a, c.updateLineNumbers, b.dims), i > 4 && (c.lineDiv.style.display = ""), c.renderedView = c.view, j && zg() != j && j.offsetHeight && j.focus(), wg(c.cursorDiv), wg(c.selectionDiv), c.gutters.style.height = c.sizer.style.minHeight = 0, h && (c.lastWrapHeight = b.wrapperHeight, c.lastWrapWidth = b.wrapperWidth, lb(a, 400)), c.updateLineNumbers = null, !0 } function Z(a, b) { for (var c = b.viewport, d = !0; (d && a.options.lineWrapping && b.oldDisplayWidth != tb(a) || (c && null != c.top && (c = { top: Math.min(a.doc.height + qb(a.display) - ub(a), c.top) }), b.visible = R(a.display, a.doc, c), !(b.visible.from >= a.display.viewFrom && b.visible.to <= a.display.viewTo))) && Y(a, b); d = !1) { aa(a); var e = L(a); gb(a), _(a, e), P(a, e) } b.signal(a, "update", a), (a.display.viewFrom != a.display.reportedViewFrom || a.display.viewTo != a.display.reportedViewTo) && (b.signal(a, "viewportChange", a, a.display.viewFrom, a.display.viewTo), a.display.reportedViewFrom = a.display.viewFrom, a.display.reportedViewTo = a.display.viewTo) } function $(a, b) { var c = new W(a, b); if (Y(a, c)) { aa(a), Z(a, c); var d = L(a); gb(a), _(a, d), P(a, d), c.finish() } } function _(a, b) { a.display.sizer.style.minHeight = b.docHeight + "px", a.display.heightForcer.style.top = b.docHeight + "px", a.display.gutters.style.height = Math.max(b.docHeight + a.display.barHeight + sb(a), b.clientHeight) + "px" } function aa(a) { for (var b = a.display, c = b.lineDiv.offsetTop, d = 0; d < b.view.length; d++) { var h, e = b.view[d]; if (!e.hidden) { if (f && 8 > g) { var i = e.node.offsetTop + e.node.offsetHeight; h = i - c, c = i } else { var j = e.node.getBoundingClientRect(); h = j.bottom - j.top } var k = e.line.height - h; if (2 > h && (h = Ub(b)), (k > .001 || -.001 > k) && (mf(e.line, h), ba(e.line), e.rest)) for (var l = 0; l < e.rest.length; l++) ba(e.rest[l]) } } } function ba(a) { if (a.widgets) for (var b = 0; b < a.widgets.length; ++b) a.widgets[b].height = a.widgets[b].node.parentNode.offsetHeight } function ca(a) { for (var b = a.display, c = {}, d = {}, e = b.gutters.clientLeft, f = b.gutters.firstChild, g = 0; f; f = f.nextSibling, ++g) c[a.options.gutters[g]] = f.offsetLeft + f.clientLeft + e, d[a.options.gutters[g]] = f.clientWidth; return { fixedPos: V(b), gutterTotalWidth: b.gutters.offsetWidth, gutterLeft: c, gutterWidth: d, wrapperWidth: b.wrapper.clientWidth } } function da(a, b, c) { function i(b) { var c = b.nextSibling; return h && q && a.display.currentWheelTarget == b ? b.style.display = "none" : b.parentNode.removeChild(b), c } for (var d = a.display, e = a.options.lineNumbers, f = d.lineDiv, g = f.firstChild, j = d.view, k = d.viewFrom, l = 0; l < j.length; l++) { var m = j[l]; if (m.hidden); else if (m.node && m.node.parentNode == f) { for (; g != m.node;) g = i(g); var o = e && null != b && k >= b && m.lineNumber; m.changes && (ig(m.changes, "gutter") > -1 && (o = !1), ea(a, m, k, c)), o && (wg(m.lineNumber), m.lineNumber.appendChild(document.createTextNode(U(a.options, k)))), g = m.node.nextSibling } else { var n = ma(a, m, k, c); f.insertBefore(n, g) } k += m.size } for (; g;) g = i(g) } function ea(a, b, c, d) { for (var e = 0; e < b.changes.length; e++) { var f = b.changes[e]; "text" == f ? ia(a, b) : "gutter" == f ? ka(a, b, c, d) : "class" == f ? ja(b) : "widget" == f && la(a, b, d) } b.changes = null } function fa(a) { return a.node == a.text && (a.node = ug("div", null, null, "position: relative"), a.text.parentNode && a.text.parentNode.replaceChild(a.node, a.text), a.node.appendChild(a.text), f && 8 > g && (a.node.style.zIndex = 2)), a.node } function ga(a) { var b = a.bgClass ? a.bgClass + " " + (a.line.bgClass || "") : a.line.bgClass; if (b && (b += " CodeMirror-linebackground"), a.background) b ? a.background.className = b : (a.background.parentNode.removeChild(a.background), a.background = null); else if (b) { var c = fa(a); a.background = c.insertBefore(ug("div", null, b), c.firstChild) } } function ha(a, b) { var c = a.display.externalMeasured; return c && c.line == b.line ? (a.display.externalMeasured = null, b.measure = c.measure, c.built) : Te(a, b) } function ia(a, b) { var c = b.text.className, d = ha(a, b); b.text == b.node && (b.node = d.pre), b.text.parentNode.replaceChild(d.pre, b.text), b.text = d.pre, d.bgClass != b.bgClass || d.textClass != b.textClass ? (b.bgClass = d.bgClass, b.textClass = d.textClass, ja(b)) : c && (b.text.className = c) } function ja(a) { ga(a), a.line.wrapClass ? fa(a) .className = a.line.wrapClass : a.node != a.text && (a.node.className = ""); var b = a.textClass ? a.textClass + " " + (a.line.textClass || "") : a.line.textClass; a.text.className = b || "" } function ka(a, b, c, d) { if (b.gutter && (b.node.removeChild(b.gutter), b.gutter = null), b.gutterBackground && (b.node.removeChild(b.gutterBackground), b.gutterBackground = null), b.line.gutterClass) { var e = fa(b); b.gutterBackground = ug("div", null, "CodeMirror-gutter-background " + b.line.gutterClass, "left: " + (a.options.fixedGutter ? d.fixedPos : -d.gutterTotalWidth) + "px; width: " + d.gutterTotalWidth + "px"), e.insertBefore(b.gutterBackground, b.text) } var f = b.line.gutterMarkers; if (a.options.lineNumbers || f) { var e = fa(b), g = b.gutter = ug("div", null, "CodeMirror-gutter-wrapper", "left: " + (a.options.fixedGutter ? d.fixedPos : -d.gutterTotalWidth) + "px"); if (a.display.input.setUneditable(g), e.insertBefore(g, b.text), b.line.gutterClass && (g.className += " " + b.line.gutterClass), !a.options.lineNumbers || f && f["CodeMirror-linenumbers"] || (b.lineNumber = g.appendChild(ug("div", U(a.options, c), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + d.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + a.display.lineNumInnerWidth + "px"))), f) for (var h = 0; h < a.options.gutters.length; ++h) { var i = a.options.gutters[h], j = f.hasOwnProperty(i) && f[i]; j && g.appendChild(ug("div", [j], "CodeMirror-gutter-elt", "left: " + d.gutterLeft[i] + "px; width: " + d.gutterWidth[i] + "px")) } } } function la(a, b, c) { b.alignable && (b.alignable = null); for (var e, d = b.node.firstChild; d; d = e) { var e = d.nextSibling; "CodeMirror-linewidget" == d.className && b.node.removeChild(d) } na(a, b, c) } function ma(a, b, c, d) { var e = ha(a, b); return b.text = b.node = e.pre, e.bgClass && (b.bgClass = e.bgClass), e.textClass && (b.textClass = e.textClass), ja(b), ka(a, b, c, d), na(a, b, d), b.node } function na(a, b, c) { if (oa(a, b.line, b, c, !0), b.rest) for (var d = 0; d < b.rest.length; d++) oa(a, b.rest[d], b, c, !1) } function oa(a, b, c, d, e) { if (b.widgets) for (var f = fa(c), g = 0, h = b.widgets; g < h.length; ++g) { var i = h[g], j = ug("div", [i.node], "CodeMirror-linewidget"); i.handleMouseEvents || j.setAttribute("cm-ignore-events", "true"), pa(i, j, c, d), a.display.input.setUneditable(j), e && i.above ? f.insertBefore(j, c.gutter || c.text) : f.appendChild(j), Sf(i, "redraw") } } function pa(a, b, c, d) { if (a.noHScroll) { (c.alignable || (c.alignable = [])) .push(b); var e = d.wrapperWidth; b.style.left = d.fixedPos + "px", a.coverGutter || (e -= d.gutterTotalWidth, b.style.paddingLeft = d.gutterTotalWidth + "px"), b.style.width = e + "px" } a.coverGutter && (b.style.zIndex = 5, b.style.position = "relative", a.noHScroll || (b.style.marginLeft = -d.gutterTotalWidth + "px")) } function sa(a) { return qa(a.line, a.ch) } function ta(a, b) { return ra(a, b) < 0 ? b : a } function ua(a, b) { return ra(a, b) < 0 ? a : b } function va(a) { a.state.focused || (a.display.input.focus(), ad(a)) } function xa(a, b, c, d, e) { var f = a.doc; a.display.shift = !1, d || (d = f.sel); var g = a.state.pasteIncoming || "paste" == e, h = f.splitLines(b), i = null; if (g && d.ranges.length > 1) if (wa && wa.join("\n") == b) { if (d.ranges.length % wa.length == 0) { i = []; for (var j = 0; j < wa.length; j++) i.push(f.splitLines(wa[j])) } } else h.length == d.ranges.length && (i = jg(h, function(a) { return [a] })); for (var j = d.ranges.length - 1; j >= 0; j--) { var k = d.ranges[j], l = k.from(), m = k.to(); k.empty() && (c && c > 0 ? l = qa(l.line, l.ch - c) : a.state.overwrite && !g && (m = qa(m.line, Math.min(jf(f, m.line) .text.length, m.ch + gg(h) .length)))); var n = a.curOp.updateInput, o = { from: l, to: m, text: i ? i[j % i.length] : h, origin: e || (g ? "paste" : a.state.cutIncoming ? "cut" : "+input") }; kd(a.doc, o), Sf(a, "inputRead", a, o) } b && !g && za(a, b), wd(a), a.curOp.updateInput = n, a.curOp.typing = !0, a.state.pasteIncoming = a.state.cutIncoming = !1 } function ya(a, b) { var c = a.clipboardData && a.clipboardData.getData("text/plain"); return c ? (a.preventDefault(), b.isReadOnly() || b.options.disableInput || fc(b, function() { xa(b, c, 0, null, "paste") }), !0) : void 0 } function za(a, b) { if (a.options.electricChars && a.options.smartIndent) for (var c = a.doc.sel, d = c.ranges.length - 1; d >= 0; d--) { var e = c.ranges[d]; if (!(e.head.ch > 100 || d && c.ranges[d - 1].head.line == e.head.line)) { var f = a.getModeAt(e.head), g = !1; if (f.electricChars) { for (var h = 0; h < f.electricChars.length; h++) if (b.indexOf(f.electricChars.charAt(h)) > -1) { g = yd(a, e.head.line, "smart"); break } } else f.electricInput && f.electricInput.test(jf(a.doc, e.head.line) .text.slice(0, e.head.ch)) && (g = yd(a, e.head.line, "smart")); g && Sf(a, "electricInput", a, e.head.line) } } } function Aa(a) { for (var b = [], c = [], d = 0; d < a.doc.sel.ranges.length; d++) { var e = a.doc.sel.ranges[d].head.line, f = { anchor: qa(e, 0), head: qa(e + 1, 0) }; c.push(f), b.push(a.getRange(f.anchor, f.head)) } return { text: b, ranges: c } } function Ba(a) { a.setAttribute("autocorrect", "off"), a.setAttribute("autocapitalize", "off"), a.setAttribute("spellcheck", "false") } function Ca(a) { this.cm = a, this.prevInput = "", this.pollingFast = !1, this.polling = new bg, this.inaccurateSelection = !1, this.hasSelection = !1, this.composing = null } function Da() { var a = ug("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"), b = ug("div", [a], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); return h ? a.style.width = "1000px" : a.setAttribute("wrap", "off"), o && (a.style.border = "1px solid black"), Ba(a), b } function Ea(a) { this.cm = a, this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null, this.polling = new bg, this.gracePeriod = !1 } function Fa(a, b) { var c = zb(a, b.line); if (!c || c.hidden) return null; var d = jf(a.doc, b.line), e = wb(c, d, b.line), f = qf(d), g = "left"; if (f) { var h = bh(f, b.ch); g = h % 2 ? "right" : "left" } var i = Db(e.map, b.ch, g); return i.offset = "right" == i.collapse ? i.end : i.start, i } function Ga(a, b) { return b && (a.bad = !0), a } function Ha(a, b, c) { var d; if (b == a.display.lineDiv) { if (d = a.display.lineDiv.childNodes[c], !d) return Ga(a.clipPos(qa(a.display.viewTo - 1)), !0); b = null, c = 0 } else for (d = b;; d = d.parentNode) { if (!d || d == a.display.lineDiv) return null; if (d.parentNode && d.parentNode == a.display.lineDiv) break } for (var e = 0; e < a.display.view.length; e++) { var f = a.display.view[e]; if (f.node == d) return Ia(f, b, c) } } function Ia(a, b, c) { function k(b, c, d) { for (var e = -1; e < (j ? j.length : 0); e++) for (var f = 0 > e ? i.map : j[e], g = 0; g < f.length; g += 3) { var h = f[g + 2]; if (h == b || h == c) { var k = nf(0 > e ? a.line : a.rest[e]), l = f[g] + d; return (0 > d || h != b) && (l = f[g + (d ? 1 : 0)]), qa(k, l) } } } var d = a.text.firstChild, e = !1; if (!b || !yg(d, b)) return Ga(qa(nf(a.line), 0), !0); if (b == d && (e = !0, b = d.childNodes[c], c = 0, !b)) { var f = a.rest ? gg(a.rest) : a.line; return Ga(qa(nf(f), f.text.length), e) } var g = 3 == b.nodeType ? b : null, h = b; for (g || 1 != b.childNodes.length || 3 != b.firstChild.nodeType || (g = b.firstChild, c && (c = g.nodeValue.length)); h.parentNode != d;) h = h.parentNode; var i = a.measure, j = i.maps, l = k(g, h, c); if (l) return Ga(l, e); for (var m = h.nextSibling, n = g ? g.nodeValue.length - c : 0; m; m = m.nextSibling) { if (l = k(m, m.firstChild, 0)) return Ga(qa(l.line, l.ch - n), e); n += m.textContent.length } for (var o = h.previousSibling, n = c; o; o = o.previousSibling) { if (l = k(o, o.firstChild, -1)) return Ga(qa(l.line, l.ch + n), e); n += m.textContent.length } } function Ja(a, b, c, d, e) { function i(a) { return function(b) { return b.id == a } } function j(b) { if (1 == b.nodeType) { var c = b.getAttribute("cm-text"); if (null != c) return "" == c && (c = b.textContent.replace(/\u200b/g, "")), void(f += c); var l, k = b.getAttribute("cm-marker"); if (k) { var m = a.findMarks(qa(d, 0), qa(e + 1, 0), i(+k)); return void(m.length && (l = m[0].find()) && (f += kf(a.doc, l.from, l.to) .join(h))) } if ("false" == b.getAttribute("contenteditable")) return; for (var n = 0; n < b.childNodes.length; n++) j(b.childNodes[n]); /^(pre|div|p)$/i.test(b.nodeName) && (g = !0) } else if (3 == b.nodeType) { var o = b.nodeValue; if (!o) return; g && (f += h, g = !1), f += o } } for (var f = "", g = !1, h = a.doc.lineSeparator(); j(b), b != c;) b = b.nextSibling; return f } function Ka(a, b) { this.ranges = a, this.primIndex = b } function La(a, b) { this.anchor = a, this.head = b } function Ma(a, b) { var c = a[b]; a.sort(function(a, b) { return ra(a.from(), b.from()) }), b = ig(a, c); for (var d = 1; d < a.length; d++) { var e = a[d], f = a[d - 1]; if (ra(f.to(), e.from()) >= 0) { var g = ua(f.from(), e.from()), h = ta(f.to(), e.to()), i = f.empty() ? e.from() == e.head : f.from() == f.head; b >= d && --b, a.splice(--d, 2, new La(i ? h : g, i ? g : h)) } } return new Ka(a, b) } function Na(a, b) { return new Ka([new La(a, b || a)], 0) } function Oa(a, b) { return Math.max(a.first, Math.min(b, a.first + a.size - 1)) } function Pa(a, b) { if (b.line < a.first) return qa(a.first, 0); var c = a.first + a.size - 1; return b.line > c ? qa(c, jf(a, c) .text.length) : Qa(b, jf(a, b.line) .text.length) } function Qa(a, b) { var c = a.ch; return null == c || c > b ? qa(a.line, b) : 0 > c ? qa(a.line, 0) : a } function Ra(a, b) { return b >= a.first && b < a.first + a.size } function Sa(a, b) { for (var c = [], d = 0; d < b.length; d++) c[d] = Pa(a, b[d]); return c } function Ta(a, b, c, d) { if (a.cm && a.cm.display.shift || a.extend) { var e = b.anchor; if (d) { var f = ra(c, e) < 0; f != ra(d, e) < 0 ? (e = c, c = d) : f != ra(c, d) < 0 && (c = d) } return new La(e, c) } return new La(d || c, c) } function Ua(a, b, c, d) { $a(a, new Ka([Ta(a, a.sel.primary(), b, c)], 0), d) } function Va(a, b, c) { for (var d = [], e = 0; e < a.sel.ranges.length; e++) d[e] = Ta(a, a.sel.ranges[e], b[e], null); var f = Ma(d, a.sel.primIndex); $a(a, f, c) } function Wa(a, b, c, d) { var e = a.sel.ranges.slice(0); e[b] = c, $a(a, Ma(e, a.sel.primIndex), d) } function Xa(a, b, c, d) { $a(a, Na(b, c), d) } function Ya(a, b, c) { var d = { ranges: b.ranges, update: function(b) { this.ranges = []; for (var c = 0; c < b.length; c++) this.ranges[c] = new La(Pa(a, b[c].anchor), Pa(a, b[c].head)) }, origin: c && c.origin }; return Qf(a, "beforeSelectionChange", a, d), a.cm && Qf(a.cm, "beforeSelectionChange", a.cm, d), d.ranges != b.ranges ? Ma(d.ranges, d.ranges.length - 1) : b } function Za(a, b, c) { var d = a.history.done, e = gg(d); e && e.ranges ? (d[d.length - 1] = b, _a(a, b, c)) : $a(a, b, c) } function $a(a, b, c) { _a(a, b, c), xf(a, a.sel, a.cm ? a.cm.curOp.id : NaN, c) } function _a(a, b, c) { (Wf(a, "beforeSelectionChange") || a.cm && Wf(a.cm, "beforeSelectionChange")) && (b = Ya(a, b, c)); var d = c && c.bias || (ra(b.primary() .head, a.sel.primary() .head) < 0 ? -1 : 1); ab(a, cb(a, b, d, !0)), c && c.scroll === !1 || !a.cm || wd(a.cm) } function ab(a, b) { b.equals(a.sel) || (a.sel = b, a.cm && (a.cm.curOp.updateInput = a.cm.curOp.selectionChanged = !0, Vf(a.cm)), Sf(a, "cursorActivity", a)) } function bb(a) { ab(a, cb(a, a.sel, null, !1), $f) } function cb(a, b, c, d) { for (var e, f = 0; f < b.ranges.length; f++) { var g = b.ranges[f], h = b.ranges.length == a.sel.ranges.length && a.sel.ranges[f], i = eb(a, g.anchor, h && h.anchor, c, d), j = eb(a, g.head, h && h.head, c, d); (e || i != g.anchor || j != g.head) && (e || (e = b.ranges.slice(0, f)), e[f] = new La(i, j)) } return e ? Ma(e, b.primIndex) : b } function db(a, b, c, d, e) { var f = jf(a, b.line); if (f.markedSpans) for (var g = 0; g < f.markedSpans.length; ++g) { var h = f.markedSpans[g], i = h.marker; if ((null == h.from || (i.inclusiveLeft ? h.from <= b.ch : h.from < b.ch)) && (null == h.to || (i.inclusiveRight ? h.to >= b.ch : h.to > b.ch))) { if (e && (Qf(i, "beforeCursorEnter"), i.explicitlyCleared)) { if (f.markedSpans) { --g; continue } break } if (!i.atomic) continue; if (c) { var k, j = i.find(0 > d ? 1 : -1); if ((0 > d ? i.inclusiveRight : i.inclusiveLeft) && (j = fb(a, j, -d, j && j.line == b.line ? f : null)), j && j.line == b.line && (k = ra(j, c)) && (0 > d ? 0 > k : k > 0)) return db(a, j, b, d, e) } var l = i.find(0 > d ? -1 : 1); return (0 > d ? i.inclusiveLeft : i.inclusiveRight) && (l = fb(a, l, d, l.line == b.line ? f : null)), l ? db(a, l, b, d, e) : null } } return b } function eb(a, b, c, d, e) { var f = d || 1, g = db(a, b, c, f, e) || !e && db(a, b, c, f, !0) || db(a, b, c, -f, e) || !e && db(a, b, c, -f, !0); return g ? g : (a.cantEdit = !0, qa(a.first, 0)) } function fb(a, b, c, d) { return 0 > c && 0 == b.ch ? b.line > a.first ? Pa(a, qa(b.line - 1)) : null : c > 0 && b.ch == (d || jf(a, b.line)) .text.length ? b.line < a.first + a.size - 1 ? qa(b.line + 1, 0) : null : new qa(b.line, b.ch + c) } function gb(a) { a.display.input.showSelection(a.display.input.prepareSelection()) } function hb(a, b) { for (var c = a.doc, d = {}, e = d.cursors = document.createDocumentFragment(), f = d.selection = document.createDocumentFragment(), g = 0; g < c.sel.ranges.length; g++) if (b !== !1 || g != c.sel.primIndex) { var h = c.sel.ranges[g]; if (!(h.from() .line >= a.display.viewTo || h.to() .line < a.display.viewFrom)) { var i = h.empty(); (i || a.options.showCursorWhenSelecting) && ib(a, h.head, e), i || jb(a, h, f) } } return d } function ib(a, b, c) { var d = Ob(a, b, "div", null, null, !a.options.singleCursorHeightPerLine), e = c.appendChild(ug("div", "\xa0", "CodeMirror-cursor")); if (e.style.left = d.left + "px", e.style.top = d.top + "px", e.style.height = Math.max(0, d.bottom - d.top) * a.options.cursorHeight + "px", d.other) { var f = c.appendChild(ug("div", "\xa0", "CodeMirror-cursor CodeMirror-secondarycursor")); f.style.display = "", f.style.left = d.other.left + "px", f.style.top = d.other.top + "px", f.style.height = .85 * (d.other.bottom - d.other.top) + "px" } } function jb(a, b, c) { function j(a, b, c, d) { 0 > b && (b = 0), b = Math.round(b), d = Math.round(d), f.appendChild(ug("div", null, "CodeMirror-selected", "position: absolute; left: " + a + "px; top: " + b + "px; width: " + (null == c ? i - a : c) + "px; height: " + (d - b) + "px")) } function k(b, c, d) { function m(c, d) { return Nb(a, qa(b, c), "div", f, d) } var k, l, f = jf(e, b), g = f.text.length; return Tg(qf(f), c || 0, null == d ? g : d, function(a, b, e) { var n, o, p, f = m(a, "left"); if (a == b) n = f, o = p = f.left; else { if (n = m(b - 1, "right"), "rtl" == e) { var q = f; f = n, n = q } o = f.left, p = n.right } null == c && 0 == a && (o = h), n.top - f.top > 3 && (j(o, f.top, null, f.bottom), o = h, f.bottom < n.top && j(o, f.bottom, null, n.top)), null == d && b == g && (p = i), (!k || f.top < k.top || f.top == k.top && f.left < k.left) && (k = f), (!l || n.bottom > l.bottom || n.bottom == l.bottom && n.right > l.right) && (l = n), h + 1 > o && (o = h), j(o, n.top, p - o, n.bottom) }), { start: k, end: l } } var d = a.display, e = a.doc, f = document.createDocumentFragment(), g = rb(a.display), h = g.left, i = Math.max(d.sizerWidth, tb(a) - d.sizer.offsetLeft) - g.right, l = b.from(), m = b.to(); if (l.line == m.line) k(l.line, l.ch, m.ch); else { var n = jf(e, l.line), o = jf(e, m.line), p = ve(n) == ve(o), q = k(l.line, l.ch, p ? n.text.length + 1 : null) .end, r = k(m.line, p ? 0 : null, m.ch) .start; p && (q.top < r.top - 2 ? (j(q.right, q.top, null, q.bottom), j(h, r.top, r.left, r.bottom)) : j(q.right, q.top, r.left - q.right, q.bottom)), q.bottom < r.top && j(h, q.bottom, null, r.top) } c.appendChild(f) } function kb(a) { if (a.state.focused) { var b = a.display; clearInterval(b.blinker); var c = !0; b.cursorDiv.style.visibility = "", a.options.cursorBlinkRate > 0 ? b.blinker = setInterval(function() { b.cursorDiv.style.visibility = (c = !c) ? "" : "hidden" }, a.options.cursorBlinkRate) : a.options.cursorBlinkRate < 0 && (b.cursorDiv.style.visibility = "hidden") } } function lb(a, b) { a.doc.mode.startState && a.doc.frontier < a.display.viewTo && a.state.highlight.set(b, ng(mb, a)) } function mb(a) { var b = a.doc; if (b.frontier < b.first && (b.frontier = b.first), !(b.frontier >= a.display.viewTo)) { var c = +new Date + a.options.workTime, d = Md(b.mode, ob(a, b.frontier)), e = []; b.iter(b.frontier, Math.min(b.first + b.size, a.display.viewTo + 500), function(f) { if (b.frontier >= a.display.viewFrom) { var g = f.styles, h = f.text.length > a.options.maxHighlightLength, i = Ne(a, f, h ? Md(b.mode, d) : d, !0); f.styles = i.styles; var j = f.styleClasses, k = i.classes; k ? f.styleClasses = k : j && (f.styleClasses = null); for (var l = !g || g.length != f.styles.length || j != k && (!j || !k || j.bgClass != k.bgClass || j.textClass != k.textClass), m = 0; !l && m < g.length; ++m) l = g[m] != f.styles[m]; l && e.push(b.frontier), f.stateAfter = h ? d : Md(b.mode, d) } else f.text.length <= a.options.maxHighlightLength && Pe(a, f.text, d), f.stateAfter = b.frontier % 5 == 0 ? Md(b.mode, d) : null; return ++b.frontier, +new Date > c ? (lb(a, a.options.workDelay), !0) : void 0 }), e.length && fc(a, function() { for (var b = 0; b < e.length; b++) mc(a, e[b], "text") }) } } function nb(a, b, c) { for (var d, e, f = a.doc, g = c ? -1 : b - (a.doc.mode.innerMode ? 1e3 : 100), h = b; h > g; --h) { if (h <= f.first) return f.first; var i = jf(f, h - 1); if (i.stateAfter && (!c || h <= f.frontier)) return h; var j = cg(i.text, null, a.options.tabSize); (null == e || d > j) && (e = h - 1, d = j) } return e } function ob(a, b, c) { var d = a.doc, e = a.display; if (!d.mode.startState) return !0; var f = nb(a, b, c), g = f > d.first && jf(d, f - 1) .stateAfter; return g = g ? Md(d.mode, g) : Nd(d.mode), d.iter(f, b, function(c) { Pe(a, c.text, g); var h = f == b - 1 || f % 5 == 0 || f >= e.viewFrom && f < e.viewTo; c.stateAfter = h ? Md(d.mode, g) : null, ++f }), c && (d.frontier = f), g } function pb(a) { return a.lineSpace.offsetTop } function qb(a) { return a.mover.offsetHeight - a.lineSpace.offsetHeight } function rb(a) { if (a.cachedPaddingH) return a.cachedPaddingH; var b = xg(a.measure, ug("pre", "x")), c = window.getComputedStyle ? window.getComputedStyle(b) : b.currentStyle, d = { left: parseInt(c.paddingLeft), right: parseInt(c.paddingRight) }; return isNaN(d.left) || isNaN(d.right) || (a.cachedPaddingH = d), d } function sb(a) { return Yf - a.display.nativeBarWidth } function tb(a) { return a.display.scroller.clientWidth - sb(a) - a.display.barWidth } function ub(a) { return a.display.scroller.clientHeight - sb(a) - a.display.barHeight } function vb(a, b, c) { var d = a.options.lineWrapping, e = d && tb(a); if (!b.measure.heights || d && b.measure.width != e) { var f = b.measure.heights = []; if (d) { b.measure.width = e; for (var g = b.text.firstChild.getClientRects(), h = 0; h < g.length - 1; h++) { var i = g[h], j = g[h + 1]; Math.abs(i.bottom - j.bottom) > 2 && f.push((i.bottom + j.top) / 2 - c.top) } } f.push(c.bottom - c.top) } } function wb(a, b, c) { if (a.line == b) return { map: a.measure.map, cache: a.measure.cache }; for (var d = 0; d < a.rest.length; d++) if (a.rest[d] == b) return { map: a.measure.maps[d], cache: a.measure.caches[d] }; for (var d = 0; d < a.rest.length; d++) if (nf(a.rest[d]) > c) return { map: a.measure.maps[d], cache: a.measure.caches[d], before: !0 } } function xb(a, b) { b = ve(b); var c = nf(b), d = a.display.externalMeasured = new jc(a.doc, b, c); d.lineN = c; var e = d.built = Te(a, d); return d.text = e.pre, xg(a.display.lineMeasure, e.pre), d } function yb(a, b, c, d) { return Bb(a, Ab(a, b), c, d) } function zb(a, b) { if (b >= a.display.viewFrom && b < a.display.viewTo) return a.display.view[oc(a, b)]; var c = a.display.externalMeasured; return c && b >= c.lineN && b < c.lineN + c.size ? c : void 0 } function Ab(a, b) { var c = nf(b), d = zb(a, c); d && !d.text ? d = null : d && d.changes && (ea(a, d, c, ca(a)), a.curOp.forceUpdate = !0), d || (d = xb(a, b)); var e = wb(d, b, c); return { line: b, view: d, rect: null, map: e.map, cache: e.cache, before: e.before, hasHeights: !1 } } function Bb(a, b, c, d, e) { b.before && (c = -1); var g, f = c + (d || ""); return b.cache.hasOwnProperty(f) ? g = b.cache[f] : (b.rect || (b.rect = b.view.text.getBoundingClientRect()), b.hasHeights || (vb(a, b.view, b.rect), b.hasHeights = !0), g = Eb(a, b, c, d), g.bogus || (b.cache[f] = g)), { left: g.left, right: g.right, top: e ? g.rtop : g.top, bottom: e ? g.rbottom : g.bottom } } function Db(a, b, c) { for (var d, e, f, g, h = 0; h < a.length; h += 3) { var i = a[h], j = a[h + 1]; if (i > b ? (e = 0, f = 1, g = "left") : j > b ? (e = b - i, f = e + 1) : (h == a.length - 3 || b == j && a[h + 3] > b) && (f = j - i, e = f - 1, b >= j && (g = "right")), null != e) { if (d = a[h + 2], i == j && c == (d.insertLeft ? "left" : "right") && (g = c), "left" == c && 0 == e) for (; h && a[h - 2] == a[h - 3] && a[h - 1].insertLeft;) d = a[(h -= 3) + 2], g = "left"; if ("right" == c && e == j - i) for (; h < a.length - 3 && a[h + 3] == a[h + 4] && !a[h + 5].insertLeft;) d = a[(h += 3) + 2], g = "right"; break } } return { node: d, start: e, end: f, collapse: g, coverStart: i, coverEnd: j } } function Eb(a, b, c, d) { var l, e = Db(b.map, c, d), h = e.node, i = e.start, j = e.end, k = e.collapse; if (3 == h.nodeType) { for (var m = 0; 4 > m; m++) { for (; i && tg(b.line.text.charAt(e.coverStart + i));) --i; for (; e.coverStart + j < e.coverEnd && tg(b.line.text.charAt(e.coverStart + j));) ++j; if (f && 9 > g && 0 == i && j == e.coverEnd - e.coverStart) l = h.parentNode.getBoundingClientRect(); else if (f && a.options.lineWrapping) { var n = vg(h, i, j) .getClientRects(); l = n.length ? n["right" == d ? n.length - 1 : 0] : Cb } else l = vg(h, i, j) .getBoundingClientRect() || Cb; if (l.left || l.right || 0 == i) break; j = i, i -= 1, k = "right" } f && 11 > g && (l = Fb(a.display.measure, l)) } else { i > 0 && (k = d = "right"); var n; l = a.options.lineWrapping && (n = h.getClientRects()) .length > 1 ? n["right" == d ? n.length - 1 : 0] : h.getBoundingClientRect() } if (f && 9 > g && !i && (!l || !l.left && !l.right)) { var o = h.parentNode.getClientRects()[0]; l = o ? { left: o.left, right: o.left + Vb(a.display), top: o.top, bottom: o.bottom } : Cb } for (var p = l.top - b.rect.top, q = l.bottom - b.rect.top, r = (p + q) / 2, s = b.view.measure.heights, m = 0; m < s.length - 1 && !(r < s[m]); m++); var t = m ? s[m - 1] : 0, u = s[m], v = { left: ("right" == k ? l.right : l.left) - b.rect.left, right: ("left" == k ? l.left : l.right) - b.rect.left, top: t, bottom: u }; return l.left || l.right || (v.bogus = !0), a.options.singleCursorHeightPerLine || (v.rtop = p, v.rbottom = q), v } function Fb(a, b) { if (!window.screen || null == screen.logicalXDPI || screen.logicalXDPI == screen.deviceXDPI || !Rg(a)) return b; var c = screen.logicalXDPI / screen.deviceXDPI, d = screen.logicalYDPI / screen.deviceYDPI; return { left: b.left * c, right: b.right * c, top: b.top * d, bottom: b.bottom * d } } function Gb(a) { if (a.measure && (a.measure.cache = {}, a.measure.heights = null, a.rest)) for (var b = 0; b < a.rest.length; b++) a.measure.caches[b] = {} } function Hb(a) { a.display.externalMeasure = null, wg(a.display.lineMeasure); for (var b = 0; b < a.display.view.length; b++) Gb(a.display.view[b]) } function Ib(a) { Hb(a), a.display.cachedCharWidth = a.display.cachedTextHeight = a.display.cachedPaddingH = null, a.options.lineWrapping || (a.display.maxLineChanged = !0), a.display.lineNumChars = null } function Jb() { return window.pageXOffset || (document.documentElement || document.body) .scrollLeft } function Kb() { return window.pageYOffset || (document.documentElement || document.body) .scrollTop } function Lb(a, b, c, d) { if (b.widgets) for (var e = 0; e < b.widgets.length; ++e) if (b.widgets[e].above) { var f = De(b.widgets[e]); c.top += f, c.bottom += f } if ("line" == d) return c; d || (d = "local"); var g = pf(b); if ("local" == d ? g += pb(a.display) : g -= a.display.viewOffset, "page" == d || "window" == d) { var h = a.display.lineSpace.getBoundingClientRect(); g += h.top + ("window" == d ? 0 : Kb()); var i = h.left + ("window" == d ? 0 : Jb()); c.left += i, c.right += i } return c.top += g, c.bottom += g, c } function Mb(a, b, c) { if ("div" == c) return b; var d = b.left, e = b.top; if ("page" == c) d -= Jb(), e -= Kb(); else if ("local" == c || !c) { var f = a.display.sizer.getBoundingClientRect(); d += f.left, e += f.top } var g = a.display.lineSpace.getBoundingClientRect(); return { left: d - g.left, top: e - g.top } } function Nb(a, b, c, d, e) { return d || (d = jf(a.doc, b.line)), Lb(a, d, yb(a, d, b.ch, e), c) } function Ob(a, b, c, d, e, f) { function g(b, g) { var h = Bb(a, e, b, g ? "right" : "left", f); return g ? h.left = h.right : h.right = h.left, Lb(a, d, h, c) } function h(a, b) { var c = i[b], d = c.level % 2; return a == Ug(c) && b && c.level < i[b - 1].level ? (c = i[--b], a = Vg(c) - (c.level % 2 ? 0 : 1), d = !0) : a == Vg(c) && b < i.length - 1 && c.level < i[b + 1].level && (c = i[++b], a = Ug(c) - c.level % 2, d = !1), d && a == c.to && a > c.from ? g(a - 1) : g(a, d) } d = d || jf(a.doc, b.line), e || (e = Ab(a, d)); var i = qf(d), j = b.ch; if (!i) return g(j); var k = bh(i, j), l = h(j, k); return null != ah && (l.other = h(j, ah)), l } function Pb(a, b) { var c = 0, b = Pa(a.doc, b); a.options.lineWrapping || (c = Vb(a.display) * b.ch); var d = jf(a.doc, b.line), e = pf(d) + pb(a.display); return { left: c, right: c, top: e, bottom: e + d.height } } function Qb(a, b, c, d) { var e = qa(a, b); return e.xRel = d, c && (e.outside = !0), e } function Rb(a, b, c) { var d = a.doc; if (c += a.display.viewOffset, 0 > c) return Qb(d.first, 0, !0, -1); var e = of (d, c), f = d.first + d.size - 1; if (e > f) return Qb(d.first + d.size - 1, jf(d, f) .text.length, !0, 1); 0 > b && (b = 0); for (var g = jf(d, e);;) { var h = Sb(a, g, e, b, c), i = te(g), j = i && i.find(0, !0); if (!i || !(h.ch > j.from.ch || h.ch == j.from.ch && h.xRel > 0)) return h; e = nf(g = j.to.line) } } function Sb(a, b, c, d, e) { function j(d) { var e = Ob(a, qa(c, d), "line", b, i); return g = !0, f > e.bottom ? e.left - h : f < e.top ? e.left + h : (g = !1, e.left) } var f = e - pf(b), g = !1, h = 2 * a.display.wrapper.clientWidth, i = Ab(a, b), k = qf(b), l = b.text.length, m = Wg(b), n = Xg(b), o = j(m), p = g, q = j(n), r = g; if (d > q) return Qb(c, n, r, 1); for (;;) { if (k ? n == m || n == dh(b, m, 1) : 1 >= n - m) { for (var s = o > d || q - d >= d - o ? m : n, t = d - (s == m ? o : q); tg(b.text.charAt(s));) ++s; var u = Qb(c, s, s == m ? p : r, -1 > t ? -1 : t > 1 ? 1 : 0); return u } var v = Math.ceil(l / 2), w = m + v; if (k) { w = m; for (var x = 0; v > x; ++x) w = dh(b, w, 1) } var y = j(w); y > d ? (n = w, q = y, (r = g) && (q += 1e3), l = v) : (m = w, o = y, p = g, l -= v) } } function Ub(a) { if (null != a.cachedTextHeight) return a.cachedTextHeight; if (null == Tb) { Tb = ug("pre"); for (var b = 0; 49 > b; ++b) Tb.appendChild(document.createTextNode("x")), Tb.appendChild(ug("br")); Tb.appendChild(document.createTextNode("x")) } xg(a.measure, Tb); var c = Tb.offsetHeight / 50; return c > 3 && (a.cachedTextHeight = c), wg(a.measure), c || 1 } function Vb(a) { if (null != a.cachedCharWidth) return a.cachedCharWidth; var b = ug("span", "xxxxxxxxxx"), c = ug("pre", [b]); xg(a.measure, c); var d = b.getBoundingClientRect(), e = (d.right - d.left) / 10; return e > 2 && (a.cachedCharWidth = e), e || 10 } function Yb(a) { a.curOp = { cm: a, viewChanged: !1, startHeight: a.doc.height, forceUpdate: !1, updateInput: null, typing: !1, changeObjs: null, cursorActivityHandlers: null, cursorActivityCalled: 0, selectionChanged: !1, updateMaxLine: !1, scrollLeft: null, scrollTop: null, scrollToPos: null, focus: !1, id: ++Xb }, Wb ? Wb.ops.push(a.curOp) : a.curOp.ownsGroup = Wb = { ops: [a.curOp], delayedCallbacks: [] } } function Zb(a) { var b = a.delayedCallbacks, c = 0; do { for (; c < b.length; c++) b[c].call(null); for (var d = 0; d < a.ops.length; d++) { var e = a.ops[d]; if (e.cursorActivityHandlers) for (; e.cursorActivityCalled < e.cursorActivityHandlers.length;) e.cursorActivityHandlers[e.cursorActivityCalled++].call(null, e.cm) } } while (c < b.length) } function $b(a) { var b = a.curOp, c = b.ownsGroup; if (c) try { Zb(c) } finally { Wb = null; for (var d = 0; d < c.ops.length; d++) c.ops[d].cm.curOp = null; _b(c) } } function _b(a) { for (var b = a.ops, c = 0; c < b.length; c++) ac(b[c]); for (var c = 0; c < b.length; c++) bc(b[c]); for (var c = 0; c < b.length; c++) cc(b[c]); for (var c = 0; c < b.length; c++) dc(b[c]); for (var c = 0; c < b.length; c++) ec(b[c]) } function ac(a) { var b = a.cm, c = b.display; X(b), a.updateMaxLine && J(b), a.mustUpdate = a.viewChanged || a.forceUpdate || null != a.scrollTop || a.scrollToPos && (a.scrollToPos.from.line < c.viewFrom || a.scrollToPos.to.line >= c.viewTo) || c.maxLineChanged && b.options.lineWrapping, a.update = a.mustUpdate && new W(b, a.mustUpdate && { top: a.scrollTop, ensure: a.scrollToPos }, a.forceUpdate) } function bc(a) { a.updatedDisplay = a.mustUpdate && Y(a.cm, a.update) } function cc(a) { var b = a.cm, c = b.display; a.updatedDisplay && aa(b), a.barMeasure = L(b), c.maxLineChanged && !b.options.lineWrapping && (a.adjustWidthTo = yb(b, c.maxLine, c.maxLine.text.length) .left + 3, b.display.sizerWidth = a.adjustWidthTo, a.barMeasure.scrollWidth = Math.max(c.scroller.clientWidth, c.sizer.offsetLeft + a.adjustWidthTo + sb(b) + b.display.barWidth), a.maxScrollLeft = Math.max(0, c.sizer.offsetLeft + a.adjustWidthTo - tb(b))), (a.updatedDisplay || a.selectionChanged) && (a.preparedSelection = c.input.prepareSelection()) } function dc(a) { var b = a.cm; null != a.adjustWidthTo && (b.display.sizer.style.minWidth = a.adjustWidthTo + "px", a.maxScrollLeft < b.doc.scrollLeft && Lc(b, Math.min(b.display.scroller.scrollLeft, a.maxScrollLeft), !0), b.display.maxLineChanged = !1), a.preparedSelection && b.display.input.showSelection(a.preparedSelection), a.updatedDisplay && _(b, a.barMeasure), (a.updatedDisplay || a.startHeight != b.doc.height) && P(b, a.barMeasure), a.selectionChanged && kb(b), b.state.focused && a.updateInput && b.display.input.reset(a.typing), !a.focus || a.focus != zg() || document.hasFocus && !document.hasFocus() || va(a.cm) } function ec(a) { var b = a.cm, c = b.display, d = b.doc; if (a.updatedDisplay && Z(b, a.update), null == c.wheelStartX || null == a.scrollTop && null == a.scrollLeft && !a.scrollToPos || (c.wheelStartX = c.wheelStartY = null), null == a.scrollTop || c.scroller.scrollTop == a.scrollTop && !a.forceScroll || (d.scrollTop = Math.max(0, Math.min(c.scroller.scrollHeight - c.scroller.clientHeight, a.scrollTop)), c.scrollbars.setScrollTop(d.scrollTop), c.scroller.scrollTop = d.scrollTop), null == a.scrollLeft || c.scroller.scrollLeft == a.scrollLeft && !a.forceScroll || (d.scrollLeft = Math.max(0, Math.min(c.scroller.scrollWidth - c.scroller.clientWidth, a.scrollLeft)), c.scrollbars.setScrollLeft(d.scrollLeft), c.scroller.scrollLeft = d.scrollLeft, S(b)), a.scrollToPos) { var e = sd(b, Pa(d, a.scrollToPos.from), Pa(d, a.scrollToPos.to), a.scrollToPos.margin); a.scrollToPos.isCursor && b.state.focused && rd(b, e) } var f = a.maybeHiddenMarkers, g = a.maybeUnhiddenMarkers; if (f) for (var h = 0; h < f.length; ++h) f[h].lines.length || Qf(f[h], "hide"); if (g) for (var h = 0; h < g.length; ++h) g[h].lines.length && Qf(g[h], "unhide"); c.wrapper.offsetHeight && (d.scrollTop = b.display.scroller.scrollTop), a.changeObjs && Qf(b, "changes", b, a.changeObjs), a.update && a.update.finish() } function fc(a, b) { if (a.curOp) return b(); Yb(a); try { return b() } finally { $b(a) } } function gc(a, b) { return function() { if (a.curOp) return b.apply(a, arguments); Yb(a); try { return b.apply(a, arguments) } finally { $b(a) } } } function hc(a) { return function() { if (this.curOp) return a.apply(this, arguments); Yb(this); try { return a.apply(this, arguments) } finally { $b(this) } } } function ic(a) { return function() { var b = this.cm; if (!b || b.curOp) return a.apply(this, arguments); Yb(b); try { return a.apply(this, arguments) } finally { $b(b) } } } function jc(a, b, c) { this.line = b, this.rest = we(b), this.size = this.rest ? nf(gg(this.rest)) - c + 1 : 1, this.node = this.text = null, this.hidden = ze(a, b) } function kc(a, b, c) { for (var e, d = [], f = b; c > f; f = e) { var g = new jc(a.doc, jf(a.doc, f), f); e = f + g.size, d.push(g) } return d } function lc(a, b, c, d) { null == b && (b = a.doc.first), null == c && (c = a.doc.first + a.doc.size), d || (d = 0); var e = a.display; if (d && c < e.viewTo && (null == e.updateLineNumbers || e.updateLineNumbers > b) && (e.updateLineNumbers = b), a.curOp.viewChanged = !0, b >= e.viewTo) w && xe(a.doc, b) < e.viewTo && nc(a); else if (c <= e.viewFrom) w && ye(a.doc, c + d) > e.viewFrom ? nc(a) : (e.viewFrom += d, e.viewTo += d); else if (b <= e.viewFrom && c >= e.viewTo) nc(a); else if (b <= e.viewFrom) { var f = pc(a, c, c + d, 1); f ? (e.view = e.view.slice(f.index), e.viewFrom = f.lineN, e.viewTo += d) : nc(a) } else if (c >= e.viewTo) { var f = pc(a, b, b, -1); f ? (e.view = e.view.slice(0, f.index), e.viewTo = f.lineN) : nc(a) } else { var g = pc(a, b, b, -1), h = pc(a, c, c + d, 1); g && h ? (e.view = e.view.slice(0, g.index) .concat(kc(a, g.lineN, h.lineN)) .concat(e.view.slice(h.index)), e.viewTo += d) : nc(a) } var i = e.externalMeasured; i && (c < i.lineN ? i.lineN += d : b < i.lineN + i.size && (e.externalMeasured = null)) } function mc(a, b, c) { a.curOp.viewChanged = !0; var d = a.display, e = a.display.externalMeasured; if (e && b >= e.lineN && b < e.lineN + e.size && (d.externalMeasured = null), !(b < d.viewFrom || b >= d.viewTo)) { var f = d.view[oc(a, b)]; if (null != f.node) { var g = f.changes || (f.changes = []); - 1 == ig(g, c) && g.push(c) } } } function nc(a) { a.display.viewFrom = a.display.viewTo = a.doc.first, a.display.view = [], a.display.viewOffset = 0 } function oc(a, b) { if (b >= a.display.viewTo) return null; if (b -= a.display.viewFrom, 0 > b) return null; for (var c = a.display.view, d = 0; d < c.length; d++) if (b -= c[d].size, 0 > b) return d } function pc(a, b, c, d) { var f, e = oc(a, b), g = a.display.view; if (!w || c == a.doc.first + a.doc.size) return { index: e, lineN: c }; for (var h = 0, i = a.display.viewFrom; e > h; h++) i += g[h].size; if (i != b) { if (d > 0) { if (e == g.length - 1) return null; f = i + g[e].size - b, e++ } else f = i - b; b += f, c += f } for (; xe(a.doc, c) != c;) { if (e == (0 > d ? 0 : g.length - 1)) return null; c += d * g[e - (0 > d ? 1 : 0)].size, e += d } return { index: e, lineN: c } } function qc(a, b, c) { var d = a.display, e = d.view; 0 == e.length || b >= d.viewTo || c <= d.viewFrom ? (d.view = kc(a, b, c), d.viewFrom = b) : (d.viewFrom > b ? d.view = kc(a, b, d.viewFrom) .concat(d.view) : d.viewFrom < b && (d.view = d.view.slice(oc(a, b))), d.viewFrom = b, d.viewTo < c ? d.view = d.view.concat(kc(a, d.viewTo, c)) : d.viewTo > c && (d.view = d.view.slice(0, oc(a, c)))), d.viewTo = c } function rc(a) { for (var b = a.display.view, c = 0, d = 0; d < b.length; d++) { var e = b[d]; e.hidden || e.node && !e.changes || ++c } return c } function sc(a) { function e() { b.activeTouch && (c = setTimeout(function() { b.activeTouch = null }, 1e3), d = b.activeTouch, d.end = +new Date) } function h(a) { if (1 != a.touches.length) return !1; var b = a.touches[0]; return b.radiusX <= 1 && b.radiusY <= 1 } function i(a, b) { if (null == b.left) return !0; var c = b.left - a.left, d = b.top - a.top; return c * c + d * d > 400 } var b = a.display; Mf(b.scroller, "mousedown", gc(a, xc)), f && 11 > g ? Mf(b.scroller, "dblclick", gc(a, function(b) { if (!Uf(a, b)) { var c = wc(a, b); if (c && !Ec(a, b) && !vc(a.display, b)) { Gf(b); var d = a.findWordAt(c); Ua(a.doc, d.anchor, d.head) } } })) : Mf(b.scroller, "dblclick", function(b) { Uf(a, b) || Gf(b) }), u || Mf(b.scroller, "contextmenu", function(b) { cd(a, b) }); var c, d = { end: 0 }; Mf(b.scroller, "touchstart", function(e) { if (!Uf(a, e) && !h(e)) { clearTimeout(c); var f = +new Date; b.activeTouch = { start: f, moved: !1, prev: f - d.end <= 300 ? d : null }, 1 == e.touches.length && (b.activeTouch.left = e.touches[0].pageX, b.activeTouch.top = e.touches[0].pageY) } }), Mf(b.scroller, "touchmove", function() { b.activeTouch && (b.activeTouch.moved = !0) }), Mf(b.scroller, "touchend", function(c) { var d = b.activeTouch; if (d && !vc(b, c) && null != d.left && !d.moved && new Date - d.start < 300) { var g, f = a.coordsChar(b.activeTouch, "page"); g = !d.prev || i(d, d.prev) ? new La(f, f) : !d.prev.prev || i(d, d.prev.prev) ? a.findWordAt(f) : new La(qa(f.line, 0), Pa(a.doc, qa(f.line + 1, 0))), a.setSelection(g.anchor, g.head), a.focus(), Gf(c) } e() }), Mf(b.scroller, "touchcancel", e), Mf(b.scroller, "scroll", function() { b.scroller.clientHeight && (Kc(a, b.scroller.scrollTop), Lc(a, b.scroller.scrollLeft, !0), Qf(a, "scroll", a)) }), Mf(b.scroller, "mousewheel", function(b) { Pc(a, b) }), Mf(b.scroller, "DOMMouseScroll", function(b) { Pc(a, b) }), Mf(b.wrapper, "scroll", function() { b.wrapper.scrollTop = b.wrapper.scrollLeft = 0 }), b.dragFunctions = { enter: function(b) { Uf(a, b) || Jf(b) }, over: function(b) { Uf(a, b) || (Ic(a, b), Jf(b)) }, start: function(b) { Hc(a, b) }, drop: gc(a, Gc), leave: function() { Jc(a) } }; var j = b.input.getField(); Mf(j, "keyup", function(b) { Zc.call(a, b) }), Mf(j, "keydown", gc(a, Xc)), Mf(j, "keypress", gc(a, $c)), Mf(j, "focus", ng(ad, a)), Mf(j, "blur", ng(bd, a)) } function tc(a, b, c) { var d = c && c != x.Init; if (!b != !d) { var e = a.display.dragFunctions, f = b ? Mf : Pf; f(a.display.scroller, "dragstart", e.start), f(a.display.scroller, "dragenter", e.enter), f(a.display.scroller, "dragover", e.over), f(a.display.scroller, "dragleave", e.leave), f(a.display.scroller, "drop", e.drop) } } function uc(a) { var b = a.display; (b.lastWrapHeight != b.wrapper.clientHeight || b.lastWrapWidth != b.wrapper.clientWidth) && (b.cachedCharWidth = b.cachedTextHeight = b.cachedPaddingH = null, b.scrollbarsClipped = !1, a.setSize()) } function vc(a, b) { for (var c = Kf(b); c != a.wrapper; c = c.parentNode) if (!c || 1 == c.nodeType && "true" == c.getAttribute("cm-ignore-events") || c.parentNode == a.sizer && c != a.mover) return !0 } function wc(a, b, c, d) { var e = a.display; if (!c && "true" == Kf(b) .getAttribute("cm-not-content")) return null; var f, g, h = e.lineSpace.getBoundingClientRect(); try { f = b.clientX - h.left, g = b.clientY - h.top } catch (b) { return null } var j, i = Rb(a, f, g); if (d && 1 == i.xRel && (j = jf(a.doc, i.line) .text) .length == i.ch) { var k = cg(j, j.length, a.options.tabSize) - j.length; i = qa(i.line, Math.max(0, Math.round((f - rb(a.display) .left) / Vb(a.display)) - k)) } return i } function xc(a) { var b = this, c = b.display; if (!(Uf(b, a) || c.activeTouch && c.input.supportsTouch())) { if (c.shift = a.shiftKey, vc(c, a)) return void(h || (c.scroller.draggable = !1, setTimeout(function() { c.scroller.draggable = !0 }, 100))); if (!Ec(b, a)) { var d = wc(b, a); switch (window.focus(), Lf(a)) { case 1: b.state.selectingText ? b.state.selectingText(a) : d ? Ac(b, a, d) : Kf(a) == c.scroller && Gf(a); break; case 2: h && (b.state.lastMiddleDown = +new Date), d && Ua(b.doc, d), setTimeout(function() { c.input.focus() }, 20), Gf(a); break; case 3: u ? cd(b, a) : _c(b) } } } } function Ac(a, b, c) { f ? setTimeout(ng(va, a), 0) : a.curOp.focus = zg(); var e, d = +new Date; zc && zc.time > d - 400 && 0 == ra(zc.pos, c) ? e = "triple" : yc && yc.time > d - 400 && 0 == ra(yc.pos, c) ? (e = "double", zc = { time: d, pos: c }) : (e = "single", yc = { time: d, pos: c }); var i, g = a.doc.sel, h = q ? b.metaKey : b.ctrlKey; a.options.dragDrop && Ig && !a.isReadOnly() && "single" == e && (i = g.contains(c)) > -1 && (ra((i = g.ranges[i]) .from(), c) < 0 || c.xRel > 0) && (ra(i.to(), c) > 0 || c.xRel < 0) ? Bc(a, b, c, h) : Cc(a, b, c, e, h) } function Bc(a, b, c, d) { var e = a.display, i = +new Date, j = gc(a, function(k) { h && (e.scroller.draggable = !1), a.state.draggingText = !1, Pf(document, "mouseup", j), Pf(e.scroller, "drop", j), Math.abs(b.clientX - k.clientX) + Math.abs(b.clientY - k.clientY) < 10 && (Gf(k), !d && +new Date - 200 < i && Ua(a.doc, c), h || f && 9 == g ? setTimeout(function() { document.body.focus(), e.input.focus() }, 20) : e.input.focus()) }); h && (e.scroller.draggable = !0), a.state.draggingText = j, e.scroller.dragDrop && e.scroller.dragDrop(), Mf(document, "mouseup", j), Mf(e.scroller, "drop", j) } function Cc(a, b, c, d, e) { function o(b) { if (0 != ra(n, b)) if (n = b, "rect" == d) { for (var e = [], f = a.options.tabSize, k = cg(jf(g, c.line) .text, c.ch, f), l = cg(jf(g, b.line) .text, b.ch, f), m = Math.min(k, l), o = Math.max(k, l), p = Math.min(c.line, b.line), q = Math.min(a.lastLine(), Math.max(c.line, b.line)); q >= p; p++) { var r = jf(g, p) .text, s = dg(r, m, f); m == o ? e.push(new La(qa(p, s), qa(p, s))) : r.length > s && e.push(new La(qa(p, s), qa(p, dg(r, o, f)))) } e.length || e.push(new La(c, c)), $a(g, Ma(j.ranges.slice(0, i) .concat(e), i), { origin: "*mouse", scroll: !1 }), a.scrollIntoView(b) } else { var t = h, u = t.anchor, v = b; if ("single" != d) { if ("double" == d) var w = a.findWordAt(b); else var w = new La(qa(b.line, 0), Pa(g, qa(b.line + 1, 0))); ra(w.anchor, u) > 0 ? (v = w.head, u = ua(t.from(), w.anchor)) : (v = w.anchor, u = ta(t.to(), w.head)) } var e = j.ranges.slice(0); e[i] = new La(Pa(g, u), v), $a(g, Ma(e, i), _f) } } function r(b) { var c = ++q, e = wc(a, b, !0, "rect" == d); if (e) if (0 != ra(e, n)) { a.curOp.focus = zg(), o(e); var h = R(f, g); (e.line >= h.to || e.line < h.from) && setTimeout(gc(a, function() { q == c && r(b) }), 150) } else { var i = b.clientY < p.top ? -20 : b.clientY > p.bottom ? 20 : 0; i && setTimeout(gc(a, function() { q == c && (f.scroller.scrollTop += i, r(b)) }), 50) } } function s(b) { a.state.selectingText = !1, q = 1 / 0, Gf(b), f.input.focus(), Pf(document, "mousemove", t), Pf(document, "mouseup", u), g.history.lastSelOrigin = null } var f = a.display, g = a.doc; Gf(b); var h, i, j = g.sel, k = j.ranges; if (e && !b.shiftKey ? (i = g.sel.contains(c), h = i > -1 ? k[i] : new La(c, c)) : (h = g.sel.primary(), i = g.sel.primIndex), b.altKey) d = "rect", e || (h = new La(c, c)), c = wc(a, b, !0, !0), i = -1; else if ("double" == d) { var l = a.findWordAt(c); h = a.display.shift || g.extend ? Ta(g, h, l.anchor, l.head) : l } else if ("triple" == d) { var m = new La(qa(c.line, 0), Pa(g, qa(c.line + 1, 0))); h = a.display.shift || g.extend ? Ta(g, h, m.anchor, m.head) : m } else h = Ta(g, h, c); e ? -1 == i ? (i = k.length, $a(g, Ma(k.concat([h]), i), { scroll: !1, origin: "*mouse" })) : k.length > 1 && k[i].empty() && "single" == d && !b.shiftKey ? ($a(g, Ma(k.slice(0, i) .concat(k.slice(i + 1)), 0), { scroll: !1, origin: "*mouse" }), j = g.sel) : Wa(g, i, h, _f) : (i = 0, $a(g, new Ka([h], 0), _f), j = g.sel); var n = c, p = f.wrapper.getBoundingClientRect(), q = 0, t = gc(a, function(a) { Lf(a) ? r(a) : s(a) }), u = gc(a, s); a.state.selectingText = u, Mf(document, "mousemove", t), Mf(document, "mouseup", u) } function Dc(a, b, c, d) { try { var e = b.clientX, f = b.clientY } catch (b) { return !1 } if (e >= Math.floor(a.display.gutters.getBoundingClientRect() .right)) return !1; d && Gf(b); var g = a.display, h = g.lineDiv.getBoundingClientRect(); if (f > h.bottom || !Wf(a, c)) return If(b); f -= h.top - g.viewOffset; for (var i = 0; i < a.options.gutters.length; ++i) { var j = g.gutters.childNodes[i]; if (j && j.getBoundingClientRect() .right >= e) { var k = of (a.doc, f), l = a.options.gutters[i]; return Qf(a, c, a, k, l, b), If(b) } } } function Ec(a, b) { return Dc(a, b, "gutterClick", !0) } function Gc(a) { var b = this; if (Jc(b), !Uf(b, a) && !vc(b.display, a)) { Gf(a), f && (Fc = +new Date); var c = wc(b, a, !0), d = a.dataTransfer.files; if (c && !b.isReadOnly()) if (d && d.length && window.FileReader && window.File) for (var e = d.length, g = Array(e), h = 0, i = function(a, d) { if (!b.options.allowDropFileTypes || -1 != ig(b.options.allowDropFileTypes, a.type)) { var f = new FileReader; f.onload = gc(b, function() { var a = f.result; if (/[\x00-\x08\x0e-\x1f]{2}/.test(a) && (a = ""), g[d] = a, ++h == e) { c = Pa(b.doc, c); var i = { from: c, to: c, text: b.doc.splitLines(g.join(b.doc.lineSeparator())), origin: "paste" }; kd(b.doc, i), Za(b.doc, Na(c, ed(i))) } }), f.readAsText(a) } }, j = 0; e > j; ++j) i(d[j], j); else { if (b.state.draggingText && b.doc.sel.contains(c) > -1) return b.state.draggingText(a), void setTimeout(function() { b.display.input.focus() }, 20); try { var g = a.dataTransfer.getData("Text"); if (g) { if (b.state.draggingText && !(q ? a.altKey : a.ctrlKey)) var k = b.listSelections(); if (_a(b.doc, Na(c, c)), k) for (var j = 0; j < k.length; ++j) qd(b.doc, "", k[j].anchor, k[j].head, "drag"); b.replaceSelection(g, "around", "paste"), b.display.input.focus() } } catch (a) {} } } } function Hc(a, b) { if (f && (!a.state.draggingText || +new Date - Fc < 100)) return void Jf(b); if (!Uf(a, b) && !vc(a.display, b) && (b.dataTransfer.setData("Text", a.getSelection()), b.dataTransfer.setDragImage && !l)) { var c = ug("img", null, null, "position: fixed; left: 0; top: 0;"); c.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==", k && (c.width = c.height = 1, a.display.wrapper.appendChild(c), c._top = c.offsetTop), b.dataTransfer.setDragImage(c, 0, 0), k && c.parentNode.removeChild(c) } } function Ic(a, b) { var c = wc(a, b); if (c) { var d = document.createDocumentFragment(); ib(a, c, d), a.display.dragCursor || (a.display.dragCursor = ug("div", null, "CodeMirror-cursors CodeMirror-dragcursors"), a.display.lineSpace.insertBefore(a.display.dragCursor, a.display.cursorDiv)), xg(a.display.dragCursor, d) } } function Jc(a) { a.display.dragCursor && (a.display.lineSpace.removeChild(a.display.dragCursor), a.display.dragCursor = null) } function Kc(a, b) { Math.abs(a.doc.scrollTop - b) < 2 || (a.doc.scrollTop = b, c || $(a, { top: b }), a.display.scroller.scrollTop != b && (a.display.scroller.scrollTop = b), a.display.scrollbars.setScrollTop(b), c && $(a), lb(a, 100)) } function Lc(a, b, c) { (c ? b == a.doc.scrollLeft : Math.abs(a.doc.scrollLeft - b) < 2) || (b = Math.min(b, a.display.scroller.scrollWidth - a.display.scroller.clientWidth), a.doc.scrollLeft = b, S(a), a.display.scroller.scrollLeft != b && (a.display.scroller.scrollLeft = b), a.display.scrollbars.setScrollLeft(b)) } function Pc(a, b) { var d = Oc(b), e = d.x, f = d.y, g = a.display, i = g.scroller, j = i.scrollWidth > i.clientWidth, l = i.scrollHeight > i.clientHeight; if (e && j || f && l) { if (f && q && h) a: for (var m = b.target, n = g.view; m != i; m = m.parentNode) for (var o = 0; o < n.length; o++) if (n[o].node == m) { a.display.currentWheelTarget = m; break a } if (e && !c && !k && null != Nc) return f && l && Kc(a, Math.max(0, Math.min(i.scrollTop + f * Nc, i.scrollHeight - i.clientHeight))), Lc(a, Math.max(0, Math.min(i.scrollLeft + e * Nc, i.scrollWidth - i.clientWidth))), (!f || f && l) && Gf(b), void(g.wheelStartX = null); if (f && null != Nc) { var p = f * Nc, r = a.doc.scrollTop, s = r + g.wrapper.clientHeight; 0 > p ? r = Math.max(0, r + p - 50) : s = Math.min(a.doc.height, s + p + 50), $(a, { top: r, bottom: s }) } 20 > Mc && (null == g.wheelStartX ? (g.wheelStartX = i.scrollLeft, g.wheelStartY = i.scrollTop, g.wheelDX = e, g.wheelDY = f, setTimeout(function() { if (null != g.wheelStartX) { var a = i.scrollLeft - g.wheelStartX, b = i.scrollTop - g.wheelStartY, c = b && g.wheelDY && b / g.wheelDY || a && g.wheelDX && a / g.wheelDX; g.wheelStartX = g.wheelStartY = null, c && (Nc = (Nc * Mc + c) / (Mc + 1), ++Mc) } }, 200)) : (g.wheelDX += e, g.wheelDY += f)) } } function Qc(a, b, c) { if ("string" == typeof b && (b = Od[b], !b)) return !1; a.display.input.ensurePolled(); var d = a.display.shift, e = !1; try { a.isReadOnly() && (a.state.suppressEdits = !0), c && (a.display.shift = !1), e = b(a) != Zf } finally { a.display.shift = d, a.state.suppressEdits = !1 } return e } function Rc(a, b, c) { for (var d = 0; d < a.state.keyMaps.length; d++) { var e = Rd(b, a.state.keyMaps[d], c, a); if (e) return e } return a.options.extraKeys && Rd(b, a.options.extraKeys, c, a) || Rd(b, a.options.keyMap, c, a) } function Tc(a, b, c, d) { var e = a.state.keySeq; if (e) { if (Sd(b)) return "handled"; Sc.set(50, function() { a.state.keySeq == e && (a.state.keySeq = null, a.display.input.reset()) }), b = e + " " + b } var f = Rc(a, b, d); return "multi" == f && (a.state.keySeq = b), "handled" == f && Sf(a, "keyHandled", a, b, c), ("handled" == f || "multi" == f) && (Gf(c), kb(a)), e && !f && /\'$/.test(b) ? (Gf(c), !0) : !!f } function Uc(a, b) { var c = Td(b, !0); return c ? b.shiftKey && !a.state.keySeq ? Tc(a, "Shift-" + c, b, function(b) { return Qc(a, b, !0) }) || Tc(a, c, b, function(b) { return ("string" == typeof b ? /^go[A-Z]/.test(b) : b.motion) ? Qc(a, b) : void 0 }) : Tc(a, c, b, function(b) { return Qc(a, b) }) : !1 } function Vc(a, b, c) { return Tc(a, "'" + c + "'", b, function(b) { return Qc(a, b, !0) }) } function Xc(a) { var b = this; if (b.curOp.focus = zg(), !Uf(b, a)) { f && 11 > g && 27 == a.keyCode && (a.returnValue = !1); var c = a.keyCode; b.display.shift = 16 == c || a.shiftKey; var d = Uc(b, a); k && (Wc = d ? c : null, !d && 88 == c && !Pg && (q ? a.metaKey : a.ctrlKey) && b.replaceSelection("", null, "cut")), 18 != c || /\bCodeMirror-crosshair\b/.test(b.display.lineDiv.className) || Yc(b) } } function Yc(a) { function c(a) { 18 != a.keyCode && a.altKey || (Bg(b, "CodeMirror-crosshair"), Pf(document, "keyup", c), Pf(document, "mouseover", c)) } var b = a.display.lineDiv; Cg(b, "CodeMirror-crosshair"), Mf(document, "keyup", c), Mf(document, "mouseover", c) } function Zc(a) { 16 == a.keyCode && (this.doc.sel.shift = !1), Uf(this, a) } function $c(a) { var b = this; if (!(vc(b.display, a) || Uf(b, a) || a.ctrlKey && !a.altKey || q && a.metaKey)) { var c = a.keyCode, d = a.charCode; if (k && c == Wc) return Wc = null, void Gf(a); if (!k || a.which && !(a.which < 10) || !Uc(b, a)) { var e = String.fromCharCode(null == d ? c : d); Vc(b, a, e) || b.display.input.onKeyPress(a) } } } function _c(a) { a.state.delayingBlurEvent = !0, setTimeout(function() { a.state.delayingBlurEvent && (a.state.delayingBlurEvent = !1, bd(a)) }, 100) } function ad(a) { a.state.delayingBlurEvent && (a.state.delayingBlurEvent = !1), "nocursor" != a.options.readOnly && (a.state.focused || (Qf(a, "focus", a), a.state.focused = !0, Cg(a.display.wrapper, "CodeMirror-focused"), a.curOp || a.display.selForContextMenu == a.doc.sel || (a.display.input.reset(), h && setTimeout(function() { a.display.input.reset(!0) }, 20)), a.display.input.receivedFocus()), kb(a)) } function bd(a) { a.state.delayingBlurEvent || (a.state.focused && (Qf(a, "blur", a), a.state.focused = !1, Bg(a.display.wrapper, "CodeMirror-focused")), clearInterval(a.display.blinker), setTimeout(function() { a.state.focused || (a.display.shift = !1) }, 150)) } function cd(a, b) { vc(a.display, b) || dd(a, b) || Uf(a, b, "contextmenu") || a.display.input.onContextMenu(b) } function dd(a, b) { return Wf(a, "gutterContextMenu") ? Dc(a, b, "gutterContextMenu", !1) : !1 } function fd(a, b) { if (ra(a, b.from) < 0) return a; if (ra(a, b.to) <= 0) return ed(b); var c = a.line + b.text.length - (b.to.line - b.from.line) - 1, d = a.ch; return a.line == b.to.line && (d += ed(b) .ch - b.to.ch), qa(c, d) } function gd(a, b) { for (var c = [], d = 0; d < a.sel.ranges.length; d++) { var e = a.sel.ranges[d]; c.push(new La(fd(e.anchor, b), fd(e.head, b))) } return Ma(c, a.sel.primIndex) } function hd(a, b, c) { return a.line == b.line ? qa(c.line, a.ch - b.ch + c.ch) : qa(c.line + (a.line - b.line), a.ch) } function id(a, b, c) { for (var d = [], e = qa(a.first, 0), f = e, g = 0; g < b.length; g++) { var h = b[g], i = hd(h.from, e, f), j = hd(ed(h), e, f); if (e = h.to, f = j, "around" == c) { var k = a.sel.ranges[g], l = ra(k.head, k.anchor) < 0; d[g] = new La(l ? j : i, l ? i : j) } else d[g] = new La(i, i) } return new Ka(d, a.sel.primIndex) } function jd(a, b, c) { var d = { canceled: !1, from: b.from, to: b.to, text: b.text, origin: b.origin, cancel: function() { this.canceled = !0 } }; return c && (d.update = function(b, c, d, e) { b && (this.from = Pa(a, b)), c && (this.to = Pa(a, c)), d && (this.text = d), void 0 !== e && (this.origin = e) }), Qf(a, "beforeChange", a, d), a.cm && Qf(a.cm, "beforeChange", a.cm, d), d.canceled ? null : { from: d.from, to: d.to, text: d.text, origin: d.origin } } function kd(a, b, c) { if (a.cm) { if (!a.cm.curOp) return gc(a.cm, kd)(a, b, c); if (a.cm.state.suppressEdits) return } if (!(Wf(a, "beforeChange") || a.cm && Wf(a.cm, "beforeChange")) || (b = jd(a, b, !0))) { var d = v && !c && le(a, b.from, b.to); if (d) for (var e = d.length - 1; e >= 0; --e) ld(a, { from: d[e].from, to: d[e].to, text: e ? [""] : b.text }); else ld(a, b) } } function ld(a, b) { if (1 != b.text.length || "" != b.text[0] || 0 != ra(b.from, b.to)) { var c = gd(a, b); vf(a, b, c, a.cm ? a.cm.curOp.id : NaN), od(a, b, c, ie(a, b)); var d = []; gf(a, function(a, c) { c || -1 != ig(d, a.history) || (Ff(a.history, b), d.push(a.history)), od(a, b, null, ie(a, b)) }) } } function md(a, b, c) { if (!a.cm || !a.cm.state.suppressEdits) { for (var e, d = a.history, f = a.sel, g = "undo" == b ? d.done : d.undone, h = "undo" == b ? d.undone : d.done, i = 0; i < g.length && (e = g[i], c ? !e.ranges || e.equals(a.sel) : e.ranges); i++); if (i != g.length) { for (d.lastOrigin = d.lastSelOrigin = null; e = g.pop(), e.ranges;) { if (yf(e, h), c && !e.equals(a.sel)) return void $a(a, e, { clearRedo: !1 }); f = e } var j = []; yf(f, h), h.push({ changes: j, generation: d.generation }), d.generation = e.generation || ++d.maxGeneration; for (var k = Wf(a, "beforeChange") || a.cm && Wf(a.cm, "beforeChange"), i = e.changes.length - 1; i >= 0; --i) { var l = e.changes[i]; if (l.origin = b, k && !jd(a, l, !1)) return void(g.length = 0); j.push(sf(a, l)); var m = i ? gd(a, l) : gg(g); od(a, l, m, ke(a, l)), !i && a.cm && a.cm.scrollIntoView({ from: l.from, to: ed(l) }); var n = []; gf(a, function(a, b) { b || -1 != ig(n, a.history) || (Ff(a.history, l), n.push(a.history)), od(a, l, null, ke(a, l)) }) } } } } function nd(a, b) { if (0 != b && (a.first += b, a.sel = new Ka(jg(a.sel.ranges, function(a) { return new La(qa(a.anchor.line + b, a.anchor.ch), qa(a.head.line + b, a.head.ch)) }), a.sel.primIndex), a.cm)) { lc(a.cm, a.first, a.first - b, b); for (var c = a.cm.display, d = c.viewFrom; d < c.viewTo; d++) mc(a.cm, d, "gutter") } } function od(a, b, c, d) { if (a.cm && !a.cm.curOp) return gc(a.cm, od)(a, b, c, d); if (b.to.line < a.first) return void nd(a, b.text.length - 1 - (b.to.line - b.from.line)); if (!(b.from.line > a.lastLine())) { if (b.from.line < a.first) { var e = b.text.length - 1 - (a.first - b.from.line); nd(a, e), b = { from: qa(a.first, 0), to: qa(b.to.line + e, b.to.ch), text: [gg(b.text)], origin: b.origin } } var f = a.lastLine(); b.to.line > f && (b = { from: b.from, to: qa(f, jf(a, f) .text.length), text: [b.text[0]], origin: b.origin }), b.removed = kf(a, b.from, b.to), c || (c = gd(a, b)), a.cm ? pd(a.cm, b, d) : _e(a, b, d), _a(a, c, $f) } } function pd(a, b, c) { var d = a.doc, e = a.display, f = b.from, g = b.to, h = !1, i = f.line; a.options.lineWrapping || (i = nf(ve(jf(d, f.line))), d.iter(i, g.line + 1, function(a) { return a == e.maxLine ? (h = !0, !0) : void 0 })), d.sel.contains(b.from, b.to) > -1 && Vf(a), _e(d, b, c, C(a)), a.options.lineWrapping || (d.iter(i, f.line + b.text.length, function(a) { var b = I(a); b > e.maxLineLength && (e.maxLine = a, e.maxLineLength = b, e.maxLineChanged = !0, h = !1) }), h && (a.curOp.updateMaxLine = !0)), d.frontier = Math.min(d.frontier, f.line), lb(a, 400); var j = b.text.length - (g.line - f.line) - 1; b.full ? lc(a) : f.line != g.line || 1 != b.text.length || $e(a.doc, b) ? lc(a, f.line, g.line + 1, j) : mc(a, f.line, "text"); var k = Wf(a, "changes"), l = Wf(a, "change"); if (l || k) { var m = { from: f, to: g, text: b.text, removed: b.removed, origin: b.origin }; l && Sf(a, "change", a, m), k && (a.curOp.changeObjs || (a.curOp.changeObjs = [])) .push(m) } a.display.selForContextMenu = null } function qd(a, b, c, d, e) { if (d || (d = c), ra(d, c) < 0) { var f = d; d = c, c = f } "string" == typeof b && (b = a.splitLines(b)), kd(a, { from: c, to: d, text: b, origin: e }) } function rd(a, b) { if (!Uf(a, "scrollCursorIntoView")) { var c = a.display, d = c.sizer.getBoundingClientRect(), e = null; if (b.top + d.top < 0 ? e = !0 : b.bottom + d.top > (window.innerHeight || document.documentElement.clientHeight) && (e = !1), null != e && !n) { var f = ug("div", "\u200b", null, "position: absolute; top: " + (b.top - c.viewOffset - pb(a.display)) + "px; height: " + (b.bottom - b.top + sb(a) + c.barHeight) + "px; left: " + b.left + "px; width: 2px;"); a.display.lineSpace.appendChild(f), f.scrollIntoView(e), a.display.lineSpace.removeChild(f) } } } function sd(a, b, c, d) { null == d && (d = 0); for (var e = 0; 5 > e; e++) { var f = !1, g = Ob(a, b), h = c && c != b ? Ob(a, c) : g, i = ud(a, Math.min(g.left, h.left), Math.min(g.top, h.top) - d, Math.max(g.left, h.left), Math.max(g.bottom, h.bottom) + d), j = a.doc.scrollTop, k = a.doc.scrollLeft; if (null != i.scrollTop && (Kc(a, i.scrollTop), Math.abs(a.doc.scrollTop - j) > 1 && (f = !0)), null != i.scrollLeft && (Lc(a, i.scrollLeft), Math.abs(a.doc.scrollLeft - k) > 1 && (f = !0)), !f) break } return g } function td(a, b, c, d, e) { var f = ud(a, b, c, d, e); null != f.scrollTop && Kc(a, f.scrollTop), null != f.scrollLeft && Lc(a, f.scrollLeft) } function ud(a, b, c, d, e) { var f = a.display, g = Ub(a.display); 0 > c && (c = 0); var h = a.curOp && null != a.curOp.scrollTop ? a.curOp.scrollTop : f.scroller.scrollTop, i = ub(a), j = {}; e - c > i && (e = c + i); var k = a.doc.height + qb(f), l = g > c, m = e > k - g; if (h > c) j.scrollTop = l ? 0 : c; else if (e > h + i) { var n = Math.min(c, (m ? k : e) - i); n != h && (j.scrollTop = n) } var o = a.curOp && null != a.curOp.scrollLeft ? a.curOp.scrollLeft : f.scroller.scrollLeft, p = tb(a) - (a.options.fixedGutter ? f.gutters.offsetWidth : 0), q = d - b > p; return q && (d = b + p), 10 > b ? j.scrollLeft = 0 : o > b ? j.scrollLeft = Math.max(0, b - (q ? 0 : 10)) : d > p + o - 3 && (j.scrollLeft = d + (q ? 0 : 10) - p), j } function vd(a, b, c) { (null != b || null != c) && xd(a), null != b && (a.curOp.scrollLeft = (null == a.curOp.scrollLeft ? a.doc.scrollLeft : a.curOp.scrollLeft) + b), null != c && (a.curOp.scrollTop = (null == a.curOp.scrollTop ? a.doc.scrollTop : a.curOp.scrollTop) + c) } function wd(a) { xd(a); var b = a.getCursor(), c = b, d = b; a.options.lineWrapping || (c = b.ch ? qa(b.line, b.ch - 1) : b, d = qa(b.line, b.ch + 1)), a.curOp.scrollToPos = { from: c, to: d, margin: a.options.cursorScrollMargin, isCursor: !0 } } function xd(a) { var b = a.curOp.scrollToPos; if (b) { a.curOp.scrollToPos = null; var c = Pb(a, b.from), d = Pb(a, b.to), e = ud(a, Math.min(c.left, d.left), Math.min(c.top, d.top) - b.margin, Math.max(c.right, d.right), Math.max(c.bottom, d.bottom) + b.margin); a.scrollTo(e.scrollLeft, e.scrollTop) } } function yd(a, b, c, d) { var f, e = a.doc; null == c && (c = "add"), "smart" == c && (e.mode.indent ? f = ob(a, b) : c = "prev"); var g = a.options.tabSize, h = jf(e, b), i = cg(h.text, null, g); h.stateAfter && (h.stateAfter = null); var k, j = h.text.match(/^\s*/)[0]; if (d || /\S/.test(h.text)) { if ("smart" == c && (k = e.mode.indent(f, h.text.slice(j.length), h.text), k == Zf || k > 150)) { if (!d) return; c = "prev" } } else k = 0, c = "not"; "prev" == c ? k = b > e.first ? cg(jf(e, b - 1) .text, null, g) : 0 : "add" == c ? k = i + a.options.indentUnit : "subtract" == c ? k = i - a.options.indentUnit : "number" == typeof c && (k = i + c), k = Math.max(0, k); var l = "", m = 0; if (a.options.indentWithTabs) for (var n = Math.floor(k / g); n; --n) m += g, l += " "; if (k > m && (l += fg(k - m)), l != j) return qd(e, l, qa(b, 0), qa(b, j.length), "+input"), h.stateAfter = null, !0; for (var n = 0; n < e.sel.ranges.length; n++) { var o = e.sel.ranges[n]; if (o.head.line == b && o.head.ch < j.length) { var m = qa(b, j.length); Wa(e, n, new La(m, m)); break } } } function zd(a, b, c, d) { var e = b, f = b; return "number" == typeof b ? f = jf(a, Oa(a, b)) : e = nf(b), null == e ? null : (d(f, e) && a.cm && mc(a.cm, e, c), f) } function Ad(a, b) { for (var c = a.doc.sel.ranges, d = [], e = 0; e < c.length; e++) { for (var f = b(c[e]); d.length && ra(f.from, gg(d) .to) <= 0;) { var g = d.pop(); if (ra(g.from, f.from) < 0) { f.from = g.from; break } } d.push(f) } fc(a, function() { for (var b = d.length - 1; b >= 0; b--) qd(a.doc, "", d[b].from, d[b].to, "+delete"); wd(a) }) } function Bd(a, b, c, d, e) { function j() { var b = f + c; return b < a.first || b >= a.first + a.size ? !1 : (f = b, i = jf(a, b)) } function k(a) { var b = (e ? dh : eh)(i, g, c, !0); if (null == b) { if (a || !j()) return !1; g = e ? (0 > c ? Xg : Wg)(i) : 0 > c ? i.text.length : 0 } else g = b; return !0 } var f = b.line, g = b.ch, h = c, i = jf(a, f); if ("char" == d) k(); else if ("column" == d) k(!0); else if ("word" == d || "group" == d) for (var l = null, m = "group" == d, n = a.cm && a.cm.getHelper(b, "wordChars"), o = !0; !(0 > c) || k(!o); o = !1) { var p = i.text.charAt(g) || "\n", q = qg(p, n) ? "w" : m && "\n" == p ? "n" : !m || /\s/.test(p) ? null : "p"; if (!m || o || q || (q = "s"), l && l != q) { 0 > c && (c = 1, k()); break } if (q && (l = q), c > 0 && !k(!o)) break } var r = eb(a, qa(f, g), b, h, !0); return ra(b, r) || (r.hitSide = !0), r } function Cd(a, b, c, d) { var g, e = a.doc, f = b.left; if ("page" == d) { var h = Math.min(a.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); g = b.top + c * (h - (0 > c ? 1.5 : .5) * Ub(a.display)) } else "line" == d && (g = c > 0 ? b.bottom + 3 : b.top - 3); for (;;) { var i = Rb(a, f, g); if (!i.outside) break; if (0 > c ? 0 >= g : g >= e.height) { i.hitSide = !0; break } g += 5 * c } return i } function Fd(a, b, c, d) { x.defaults[a] = b, c && (Ed[a] = d ? function(a, b, d) { d != Gd && c(a, b, d) } : c) } function Qd(a) { for (var c, d, e, f, b = a.split(/-(?!$)/), a = b[b.length - 1], g = 0; g < b.length - 1; g++) { var h = b[g]; if (/^(cmd|meta|m)$/i.test(h)) f = !0; else if (/^a(lt)?$/i.test(h)) c = !0; else if (/^(c|ctrl|control)$/i.test(h)) d = !0; else { if (!/^s(hift)$/i.test(h)) throw new Error("Unrecognized modifier name: " + h); e = !0 } } return c && (a = "Alt-" + a), d && (a = "Ctrl-" + a), f && (a = "Cmd-" + a), e && (a = "Shift-" + a), a } function Ud(a) { return "string" == typeof a ? Pd[a] : a } function Yd(a, b, c, d, e) { if (d && d.shared) return $d(a, b, c, d, e); if (a.cm && !a.cm.curOp) return gc(a.cm, Yd)(a, b, c, d, e); var f = new Xd(a, e), g = ra(b, c); if (d && mg(d, f, !1), g > 0 || 0 == g && f.clearWhenEmpty !== !1) return f; if (f.replacedWith && (f.collapsed = !0, f.widgetNode = ug("span", [f.replacedWith], "CodeMirror-widget"), d.handleMouseEvents || f.widgetNode.setAttribute("cm-ignore-events", "true"), d.insertLeft && (f.widgetNode.insertLeft = !0)), f.collapsed) { if (ue(a, b.line, b, c, f) || b.line != c.line && ue(a, c.line, b, c, f)) throw new Error("Inserting collapsed marker partially overlapping an existing one"); w = !0 } f.addToHistory && vf(a, { from: b, to: c, origin: "markText" }, a.sel, NaN); var j, h = b.line, i = a.cm; if (a.iter(h, c.line + 1, function(a) { i && f.collapsed && !i.options.lineWrapping && ve(a) == i.display.maxLine && (j = !0), f.collapsed && h != b.line && mf(a, 0), fe(a, new ce(f, h == b.line ? b.ch : null, h == c.line ? c.ch : null)), ++h }), f.collapsed && a.iter(b.line, c.line + 1, function(b) { ze(a, b) && mf(b, 0) }), f.clearOnEnter && Mf(f, "beforeCursorEnter", function() { f.clear() }), f.readOnly && (v = !0, (a.history.done.length || a.history.undone.length) && a.clearHistory()), f.collapsed && (f.id = ++Wd, f.atomic = !0), i) { if (j && (i.curOp.updateMaxLine = !0), f.collapsed) lc(i, b.line, c.line + 1); else if (f.className || f.title || f.startStyle || f.endStyle || f.css) for (var k = b.line; k <= c.line; k++) mc(i, k, "text"); f.atomic && bb(i.doc), Sf(i, "markerAdded", i, f) } return f } function $d(a, b, c, d, e) { d = mg(d), d.shared = !1; var f = [Yd(a, b, c, d, e)], g = f[0], h = d.widgetNode; return gf(a, function(a) { h && (d.widgetNode = h.cloneNode(!0)), f.push(Yd(a, Pa(a, b), Pa(a, c), d, e)); for (var i = 0; i < a.linked.length; ++i) if (a.linked[i].isParent) return; g = gg(f) }), new Zd(f, g) } function _d(a) { return a.findMarks(qa(a.first, 0), a.clipPos(qa(a.lastLine())), function(a) { return a.parent }) } function ae(a, b) { for (var c = 0; c < b.length; c++) { var d = b[c], e = d.find(), f = a.clipPos(e.from), g = a.clipPos(e.to); if (ra(f, g)) { var h = Yd(a, f, g, d.primary, d.primary.type); d.markers.push(h), h.parent = d } } } function be(a) { for (var b = 0; b < a.length; b++) { var c = a[b], d = [c.primary.doc]; gf(c.primary.doc, function(a) { d.push(a) }); for (var e = 0; e < c.markers.length; e++) { var f = c.markers[e]; - 1 == ig(d, f.doc) && (f.parent = null, c.markers.splice(e--, 1)) } } } function ce(a, b, c) { this.marker = a, this.from = b, this.to = c } function de(a, b) { if (a) for (var c = 0; c < a.length; ++c) { var d = a[c]; if (d.marker == b) return d } } function ee(a, b) { for (var c, d = 0; d < a.length; ++d) a[d] != b && (c || (c = [])) .push(a[d]); return c } function fe(a, b) { a.markedSpans = a.markedSpans ? a.markedSpans.concat([b]) : [b], b.marker.attachLine(a) } function ge(a, b, c) { if (a) for (var e, d = 0; d < a.length; ++d) { var f = a[d], g = f.marker, h = null == f.from || (g.inclusiveLeft ? f.from <= b : f.from < b); if (h || f.from == b && "bookmark" == g.type && (!c || !f.marker.insertLeft)) { var i = null == f.to || (g.inclusiveRight ? f.to >= b : f.to > b); (e || (e = [])) .push(new ce(g, f.from, i ? null : f.to)) } } return e } function he(a, b, c) { if (a) for (var e, d = 0; d < a.length; ++d) { var f = a[d], g = f.marker, h = null == f.to || (g.inclusiveRight ? f.to >= b : f.to > b); if (h || f.from == b && "bookmark" == g.type && (!c || f.marker.insertLeft)) { var i = null == f.from || (g.inclusiveLeft ? f.from <= b : f.from < b); (e || (e = [])) .push(new ce(g, i ? null : f.from - b, null == f.to ? null : f.to - b)) } } return e } function ie(a, b) { if (b.full) return null; var c = Ra(a, b.from.line) && jf(a, b.from.line) .markedSpans, d = Ra(a, b.to.line) && jf(a, b.to.line) .markedSpans; if (!c && !d) return null; var e = b.from.ch, f = b.to.ch, g = 0 == ra(b.from, b.to), h = ge(c, e, g), i = he(d, f, g), j = 1 == b.text.length, k = gg(b.text) .length + (j ? e : 0); if (h) for (var l = 0; l < h.length; ++l) { var m = h[l]; if (null == m.to) { var n = de(i, m.marker); n ? j && (m.to = null == n.to ? null : n.to + k) : m.to = e } } if (i) for (var l = 0; l < i.length; ++l) { var m = i[l]; if (null != m.to && (m.to += k), null == m.from) { var n = de(h, m.marker); n || (m.from = k, j && (h || (h = [])) .push(m)) } else m.from += k, j && (h || (h = [])) .push(m) } h && (h = je(h)), i && i != h && (i = je(i)); var o = [h]; if (!j) { var q, p = b.text.length - 2; if (p > 0 && h) for (var l = 0; l < h.length; ++l) null == h[l].to && (q || (q = [])) .push(new ce(h[l].marker, null, null)); for (var l = 0; p > l; ++l) o.push(q); o.push(i) } return o } function je(a) { for (var b = 0; b < a.length; ++b) { var c = a[b]; null != c.from && c.from == c.to && c.marker.clearWhenEmpty !== !1 && a.splice(b--, 1) } return a.length ? a : null } function ke(a, b) { var c = Bf(a, b), d = ie(a, b); if (!c) return d; if (!d) return c; for (var e = 0; e < c.length; ++e) { var f = c[e], g = d[e]; if (f && g) a: for (var h = 0; h < g.length; ++h) { for (var i = g[h], j = 0; j < f.length; ++j) if (f[j].marker == i.marker) continue a; f.push(i) } else g && (c[e] = g) } return c } function le(a, b, c) { var d = null; if (a.iter(b.line, c.line + 1, function(a) { if (a.markedSpans) for (var b = 0; b < a.markedSpans.length; ++b) { var c = a.markedSpans[b].marker; !c.readOnly || d && -1 != ig(d, c) || (d || (d = [])) .push(c) } }), !d) return null; for (var e = [{ from: b, to: c }], f = 0; f < d.length; ++f) for (var g = d[f], h = g.find(0), i = 0; i < e.length; ++i) { var j = e[i]; if (!(ra(j.to, h.from) < 0 || ra(j.from, h.to) > 0)) { var k = [i, 1], l = ra(j.from, h.from), m = ra(j.to, h.to); (0 > l || !g.inclusiveLeft && !l) && k.push({ from: j.from, to: h.from }), (m > 0 || !g.inclusiveRight && !m) && k.push({ from: h.to, to: j.to }), e.splice.apply(e, k), i += k.length - 1 } } return e } function me(a) { var b = a.markedSpans; if (b) { for (var c = 0; c < b.length; ++c) b[c].marker.detachLine(a); a.markedSpans = null } } function ne(a, b) { if (b) { for (var c = 0; c < b.length; ++c) b[c].marker.attachLine(a); a.markedSpans = b } } function oe(a) { return a.inclusiveLeft ? -1 : 0 } function pe(a) { return a.inclusiveRight ? 1 : 0 } function qe(a, b) { var c = a.lines.length - b.lines.length; if (0 != c) return c; var d = a.find(), e = b.find(), f = ra(d.from, e.from) || oe(a) - oe(b); if (f) return -f; var g = ra(d.to, e.to) || pe(a) - pe(b); return g ? g : b.id - a.id } function re(a, b) { var d, c = w && a.markedSpans; if (c) for (var e, f = 0; f < c.length; ++f) e = c[f], e.marker.collapsed && null == (b ? e.from : e.to) && (!d || qe(d, e.marker) < 0) && (d = e.marker); return d } function se(a) { return re(a, !0) } function te(a) { return re(a, !1) } function ue(a, b, c, d, e) { var f = jf(a, b), g = w && f.markedSpans; if (g) for (var h = 0; h < g.length; ++h) { var i = g[h]; if (i.marker.collapsed) { var j = i.marker.find(0), k = ra(j.from, c) || oe(i.marker) - oe(e), l = ra(j.to, d) || pe(i.marker) - pe(e); if (!(k >= 0 && 0 >= l || 0 >= k && l >= 0) && (0 >= k && (ra(j.to, c) > 0 || i.marker.inclusiveRight && e.inclusiveLeft) || k >= 0 && (ra(j.from, d) < 0 || i.marker.inclusiveLeft && e.inclusiveRight))) return !0 } } } function ve(a) { for (var b; b = se(a);) a = b.find(-1, !0) .line; return a } function we(a) { for (var b, c; b = te(a);) a = b.find(1, !0) .line, (c || (c = [])) .push(a); return c } function xe(a, b) { var c = jf(a, b), d = ve(c); return c == d ? b : nf(d) } function ye(a, b) { if (b > a.lastLine()) return b; var d, c = jf(a, b); if (!ze(a, c)) return b; for (; d = te(c);) c = d.find(1, !0) .line; return nf(c) + 1 } function ze(a, b) { var c = w && b.markedSpans; if (c) for (var d, e = 0; e < c.length; ++e) if (d = c[e], d.marker.collapsed) { if (null == d.from) return !0; if (!d.marker.widgetNode && 0 == d.from && d.marker.inclusiveLeft && Ae(a, b, d)) return !0 } } function Ae(a, b, c) { if (null == c.to) { var d = c.marker.find(1, !0); return Ae(a, d.line, de(d.line.markedSpans, c.marker)) } if (c.marker.inclusiveRight && c.to == b.text.length) return !0; for (var e, f = 0; f < b.markedSpans.length; ++f) if (e = b.markedSpans[f], e.marker.collapsed && !e.marker.widgetNode && e.from == c.to && (null == e.to || e.to != c.from) && (e.marker.inclusiveLeft || c.marker.inclusiveRight) && Ae(a, b, e)) return !0 } function Ce(a, b, c) { pf(b) < (a.curOp && a.curOp.scrollTop || a.doc.scrollTop) && vd(a, null, c) } function De(a) { if (null != a.height) return a.height; var b = a.doc.cm; if (!b) return 0; if (!yg(document.body, a.node)) { var c = "position: relative;"; a.coverGutter && (c += "margin-left: -" + b.display.gutters.offsetWidth + "px;"), a.noHScroll && (c += "width: " + b.display.wrapper.clientWidth + "px;"), xg(b.display.measure, ug("div", [a.node], null, c)) } return a.height = a.node.parentNode.offsetHeight } function Ee(a, b, c, d) { var e = new Be(a, c, d), f = a.cm; return f && e.noHScroll && (f.display.alignWidgets = !0), zd(a, b, "widget", function(b) { var c = b.widgets || (b.widgets = []); if (null == e.insertAt ? c.push(e) : c.splice(Math.min(c.length - 1, Math.max(0, e.insertAt)), 0, e), e.line = b, f && !ze(a, b)) { var d = pf(b) < a.scrollTop; mf(b, b.height + De(e)), d && vd(f, null, e.height), f.curOp.forceUpdate = !0 } return !0 }), e } function Ge(a, b, c, d) { a.text = b, a.stateAfter && (a.stateAfter = null), a.styles && (a.styles = null), null != a.order && (a.order = null), me(a), ne(a, c); var e = d ? d(a) : 1; e != a.height && mf(a, e) } function He(a) { a.parent = null, me(a) } function Ie(a, b) { if (a) for (;;) { var c = a.match(/(?:^|\s+)line-(background-)?(\S+)/); if (!c) break; a = a.slice(0, c.index) + a.slice(c.index + c[0].length); var d = c[1] ? "bgClass" : "textClass"; null == b[d] ? b[d] = c[2] : new RegExp("(?:^|s)" + c[2] + "(?:$|s)") .test(b[d]) || (b[d] += " " + c[2]) } return a } function Je(a, b) { if (a.blankLine) return a.blankLine(b); if (a.innerMode) { var c = x.innerMode(a, b); return c.mode.blankLine ? c.mode.blankLine(c.state) : void 0 } } function Ke(a, b, c, d) { for (var e = 0; 10 > e; e++) { d && (d[0] = x.innerMode(a, c) .mode); var f = a.token(b, c); if (b.pos > b.start) return f } throw new Error("Mode " + a.name + " failed to advance stream.") } function Le(a, b, c, d) { function e(a) { return { start: k.start, end: k.pos, string: k.current(), type: h || null, state: a ? Md(f.mode, j) : j } } var h, f = a.doc, g = f.mode; b = Pa(f, b); var l, i = jf(f, b.line), j = ob(a, b.line, c), k = new Vd(i.text, a.options.tabSize); for (d && (l = []); (d || k.pos < b.ch) && !k.eol();) k.start = k.pos, h = Ke(g, k, j), d && l.push(e(!0)); return d ? l : e() } function Me(a, b, c, d, e, f, g) { var h = c.flattenSpans; null == h && (h = a.options.flattenSpans); var l, i = 0, j = null, k = new Vd(b, a.options.tabSize), m = a.options.addModeClass && [null]; for ("" == b && Ie(Je(c, d), f); !k.eol();) { if (k.pos > a.options.maxHighlightLength ? (h = !1, g && Pe(a, b, d, k.pos), k.pos = b.length, l = null) : l = Ie(Ke(c, k, d, m), f), m) { var n = m[0].name; n && (l = "m-" + (l ? n + " " + l : n)) } if (!h || j != l) { for (; i < k.start;) i = Math.min(k.start, i + 5e4), e(i, j); j = l } k.start = k.pos } for (; i < k.pos;) { var o = Math.min(k.pos, i + 5e4); e(o, j), i = o } } function Ne(a, b, c, d) { var e = [a.state.modeGen], f = {}; Me(a, b.text, a.doc.mode, c, function(a, b) { e.push(a, b) }, f, d); for (var g = 0; g < a.state.overlays.length; ++g) { var h = a.state.overlays[g], i = 1, j = 0; Me(a, b.text, h.mode, !0, function(a, b) { for (var c = i; a > j;) { var d = e[i]; d > a && e.splice(i, 1, a, e[i + 1], d), i += 2, j = Math.min(a, d) } if (b) if (h.opaque) e.splice(c, i - c, a, "cm-overlay " + b), i = c + 2; else for (; i > c; c += 2) { var f = e[c + 1]; e[c + 1] = (f ? f + " " : "") + "cm-overlay " + b } }, f) } return { styles: e, classes: f.bgClass || f.textClass ? f : null } } function Oe(a, b, c) { if (!b.styles || b.styles[0] != a.state.modeGen) { var d = ob(a, nf(b)), e = Ne(a, b, b.text.length > a.options.maxHighlightLength ? Md(a.doc.mode, d) : d); b.stateAfter = d, b.styles = e.styles, e.classes ? b.styleClasses = e.classes : b.styleClasses && (b.styleClasses = null), c === a.doc.frontier && a.doc.frontier++ } return b.styles } function Pe(a, b, c, d) { var e = a.doc.mode, f = new Vd(b, a.options.tabSize); for (f.start = f.pos = d || 0, "" == b && Je(e, c); !f.eol();) Ke(e, f, c), f.start = f.pos } function Se(a, b) { if (!a || /^\s*$/.test(a)) return null; var c = b.addModeClass ? Re : Qe; return c[a] || (c[a] = a.replace(/\S+/g, "cm-$&")) } function Te(a, b) { var c = ug("span", null, null, h ? "padding-right: .1px" : null), d = { pre: ug("pre", [c], "CodeMirror-line"), content: c, col: 0, pos: 0, cm: a, splitSpaces: (f || h) && a.getOption("lineWrapping") }; b.measure = {}; for (var e = 0; e <= (b.rest ? b.rest.length : 0); e++) { var i, g = e ? b.rest[e - 1] : b.line; d.pos = 0, d.addToken = Ve, Mg(a.display.measure) && (i = qf(g)) && (d.addToken = Xe(d.addToken, i)), d.map = []; var j = b != a.display.externalMeasured && nf(g); Ze(g, d, Oe(a, g, j)), g.styleClasses && (g.styleClasses.bgClass && (d.bgClass = Dg(g.styleClasses.bgClass, d.bgClass || "")), g.styleClasses.textClass && (d.textClass = Dg(g.styleClasses.textClass, d.textClass || ""))), 0 == d.map.length && d.map.push(0, 0, d.content.appendChild(Kg(a.display.measure))), 0 == e ? (b.measure.map = d.map, b.measure.cache = {}) : ((b.measure.maps || (b.measure.maps = [])) .push(d.map), (b.measure.caches || (b.measure.caches = [])) .push({})) } return h && /\bcm-tab\b/.test(d.content.lastChild.className) && (d.content.className = "cm-tab-wrap-hack"), Qf(a, "renderLine", a, b.line, d.pre), d.pre.className && (d.textClass = Dg(d.pre.className, d.textClass || "")), d } function Ue(a) { var b = ug("span", "\u2022", "cm-invalidchar"); return b.title = "\\u" + a.charCodeAt(0) .toString(16), b.setAttribute("aria-label", b.title), b } function Ve(a, b, c, d, e, h, i) { if (b) { var j = a.splitSpaces ? b.replace(/ {3,}/g, We) : b, k = a.cm.state.specialChars, l = !1; if (k.test(b)) for (var m = document.createDocumentFragment(), n = 0;;) { k.lastIndex = n; var o = k.exec(b), p = o ? o.index - n : b.length - n; if (p) { var q = document.createTextNode(j.slice(n, n + p)); f && 9 > g ? m.appendChild(ug("span", [q])) : m.appendChild(q), a.map.push(a.pos, a.pos + p, q), a.col += p, a.pos += p } if (!o) break; if (n += p + 1, " " == o[0]) { var r = a.cm.options.tabSize, s = r - a.col % r, q = m.appendChild(ug("span", fg(s), "cm-tab")); q.setAttribute("role", "presentation"), q.setAttribute("cm-text", " "), a.col += s } else if ("\r" == o[0] || "\n" == o[0]) { var q = m.appendChild(ug("span", "\r" == o[0] ? "\u240d" : "\u2424", "cm-invalidchar")); q.setAttribute("cm-text", o[0]), a.col += 1 } else { var q = a.cm.options.specialCharPlaceholder(o[0]); q.setAttribute("cm-text", o[0]), f && 9 > g ? m.appendChild(ug("span", [q])) : m.appendChild(q), a.col += 1 } a.map.push(a.pos, a.pos + 1, q), a.pos++ } else { a.col += b.length; var m = document.createTextNode(j); a.map.push(a.pos, a.pos + b.length, m), f && 9 > g && (l = !0), a.pos += b.length } if (c || d || e || l || i) { var t = c || ""; d && (t += d), e && (t += e); var u = ug("span", [m], t, i); return h && (u.title = h), a.content.appendChild(u) } a.content.appendChild(m) } } function We(a) { for (var b = " ", c = 0; c < a.length - 2; ++c) b += c % 2 ? " " : "\xa0"; return b += " " } function Xe(a, b) { return function(c, d, e, f, g, h, i) { e = e ? e + " cm-force-border" : "cm-force-border"; for (var j = c.pos, k = j + d.length;;) { for (var l = 0; l < b.length; l++) { var m = b[l]; if (m.to > j && m.from <= j) break } if (m.to >= k) return a(c, d, e, f, g, h, i); a(c, d.slice(0, m.to - j), e, f, null, h, i), f = null, d = d.slice(m.to - j), j = m.to } } } function Ye(a, b, c, d) { var e = !d && c.widgetNode; e && a.map.push(a.pos, a.pos + b, e), !d && a.cm.display.input.needsContentAttribute && (e || (e = a.content.appendChild(document.createElement("span"))), e.setAttribute("cm-marker", c.id)), e && (a.cm.display.input.setUneditable(e), a.content.appendChild(e)), a.pos += b } function Ze(a, b, c) { var d = a.markedSpans, e = a.text, f = 0; if (d) for (var k, l, n, o, p, q, r, h = e.length, i = 0, g = 1, j = "", m = 0;;) { if (m == i) { n = o = p = q = l = "", r = null, m = 1 / 0; for (var t, s = [], u = 0; u < d.length; ++u) { var v = d[u], w = v.marker; "bookmark" == w.type && v.from == i && w.widgetNode ? s.push(w) : v.from <= i && (null == v.to || v.to > i || w.collapsed && v.to == i && v.from == i) ? (null != v.to && v.to != i && m > v.to && (m = v.to, o = ""), w.className && (n += " " + w.className), w.css && (l = (l ? l + ";" : "") + w.css), w.startStyle && v.from == i && (p += " " + w.startStyle), w.endStyle && v.to == m && (t || (t = [])) .push(w.endStyle, v.to), w.title && !q && (q = w.title), w.collapsed && (!r || qe(r.marker, w) < 0) && (r = v)) : v.from > i && m > v.from && (m = v.from) } if (t) for (var u = 0; u < t.length; u += 2) t[u + 1] == m && (o += " " + t[u]); if (!r || r.from == i) for (var u = 0; u < s.length; ++u) Ye(b, 0, s[u]); if (r && (r.from || 0) == i) { if (Ye(b, (null == r.to ? h + 1 : r.to) - i, r.marker, null == r.from), null == r.to) return; r.to == i && (r = !1) } } if (i >= h) break; for (var x = Math.min(h, m);;) { if (j) { var y = i + j.length; if (!r) { var z = y > x ? j.slice(0, x - i) : j; b.addToken(b, z, k ? k + n : n, p, i + z.length == m ? o : "", q, l) } if (y >= x) { j = j.slice(x - i), i = x; break } i = y, p = "" } j = e.slice(f, f = c[g++]), k = Se(c[g++], b.cm.options) } } else for (var g = 1; g < c.length; g += 2) b.addToken(b, e.slice(f, f = c[g]), Se(c[g + 1], b.cm.options)) } function $e(a, b) { return 0 == b.from.ch && 0 == b.to.ch && "" == gg(b.text) && (!a.cm || a.cm.options.wholeLineUpdateBefore) } function _e(a, b, c, d) { function e(a) { return c ? c[a] : null } function f(a, c, e) { Ge(a, c, e, d), Sf(a, "change", a, b) } function g(a, b) { for (var c = a, f = []; b > c; ++c) f.push(new Fe(j[c], e(c), d)); return f } var h = b.from, i = b.to, j = b.text, k = jf(a, h.line), l = jf(a, i.line), m = gg(j), n = e(j.length - 1), o = i.line - h.line; if (b.full) a.insert(0, g(0, j.length)), a.remove(j.length, a.size - j.length); else if ($e(a, b)) { var p = g(0, j.length - 1); f(l, l.text, n), o && a.remove(h.line, o), p.length && a.insert(h.line, p) } else if (k == l) if (1 == j.length) f(k, k.text.slice(0, h.ch) + m + k.text.slice(i.ch), n); else { var p = g(1, j.length - 1); p.push(new Fe(m + k.text.slice(i.ch), n, d)), f(k, k.text.slice(0, h.ch) + j[0], e(0)), a.insert(h.line + 1, p) } else if (1 == j.length) f(k, k.text.slice(0, h.ch) + j[0] + l.text.slice(i.ch), e(0)), a.remove(h.line + 1, o); else { f(k, k.text.slice(0, h.ch) + j[0], e(0)), f(l, m + l.text.slice(i.ch), n); var p = g(1, j.length - 1); o > 1 && a.remove(h.line + 1, o - 1), a.insert(h.line + 1, p) } Sf(a, "change", a, b) } function af(a) { this.lines = a, this.parent = null; for (var b = 0, c = 0; b < a.length; ++b) a[b].parent = this, c += a[b].height; this.height = c } function bf(a) { this.children = a; for (var b = 0, c = 0, d = 0; d < a.length; ++d) { var e = a[d]; b += e.chunkSize(), c += e.height, e.parent = this } this.size = b, this.height = c, this.parent = null } function gf(a, b, c) { function d(a, e, f) { if (a.linked) for (var g = 0; g < a.linked.length; ++g) { var h = a.linked[g]; if (h.doc != e) { var i = f && h.sharedHist; (!c || i) && (b(h.doc, i), d(h.doc, a, i)) } } } d(a, null, !0) } function hf(a, b) { if (b.cm) throw new Error("This document is already in use."); a.doc = b, b.cm = a, D(a), z(a), a.options.lineWrapping || J(a), a.options.mode = b.modeOption, lc(a) } function jf(a, b) { if (b -= a.first, 0 > b || b >= a.size) throw new Error("There is no line " + (b + a.first) + " in the document."); for (var c = a; !c.lines;) for (var d = 0;; ++d) { var e = c.children[d], f = e.chunkSize(); if (f > b) { c = e; break } b -= f } return c.lines[b] } function kf(a, b, c) { var d = [], e = b.line; return a.iter(b.line, c.line + 1, function(a) { var f = a.text; e == c.line && (f = f.slice(0, c.ch)), e == b.line && (f = f.slice(b.ch)), d.push(f), ++e }), d } function lf(a, b, c) { var d = []; return a.iter(b, c, function(a) { d.push(a.text) }), d } function mf(a, b) { var c = b - a.height; if (c) for (var d = a; d; d = d.parent) d.height += c } function nf(a) { if (null == a.parent) return null; for (var b = a.parent, c = ig(b.lines, a), d = b.parent; d; b = d, d = d.parent) for (var e = 0; d.children[e] != b; ++e) c += d.children[e].chunkSize(); return c + b.first } function of (a, b) { var c = a.first; a: do { for (var d = 0; d < a.children.length; ++d) { var e = a.children[d], f = e.height; if (f > b) { a = e; continue a } b -= f, c += e.chunkSize() } return c } while (!a.lines); for (var d = 0; d < a.lines.length; ++d) { var g = a.lines[d], h = g.height; if (h > b) break; b -= h } return c + d } function pf(a) { a = ve(a); for (var b = 0, c = a.parent, d = 0; d < c.lines.length; ++d) { var e = c.lines[d]; if (e == a) break; b += e.height } for (var f = c.parent; f; c = f, f = c.parent) for (var d = 0; d < f.children.length; ++d) { var g = f.children[d]; if (g == c) break; b += g.height } return b } function qf(a) { var b = a.order; return null == b && (b = a.order = fh(a.text)), b } function rf(a) { this.done = [], this.undone = [], this.undoDepth = 1 / 0, this.lastModTime = this.lastSelTime = 0, this.lastOp = this.lastSelOp = null, this.lastOrigin = this.lastSelOrigin = null, this.generation = this.maxGeneration = a || 1 } function sf(a, b) { var c = { from: sa(b.from), to: ed(b), text: kf(a, b.from, b.to) }; return zf(a, c, b.from.line, b.to.line + 1), gf(a, function(a) { zf(a, c, b.from.line, b.to.line + 1) }, !0), c } function tf(a) { for (; a.length;) { var b = gg(a); if (!b.ranges) break; a.pop() } } function uf(a, b) { return b ? (tf(a.done), gg(a.done)) : a.done.length && !gg(a.done) .ranges ? gg(a.done) : a.done.length > 1 && !a.done[a.done.length - 2].ranges ? (a.done.pop(), gg(a.done)) : void 0 } function vf(a, b, c, d) { var e = a.history; e.undone.length = 0; var g, f = +new Date; if ((e.lastOp == d || e.lastOrigin == b.origin && b.origin && ("+" == b.origin.charAt(0) && a.cm && e.lastModTime > f - a.cm.options.historyEventDelay || "*" == b.origin.charAt(0))) && (g = uf(e, e.lastOp == d))) { var h = gg(g.changes); 0 == ra(b.from, b.to) && 0 == ra(b.from, h.to) ? h.to = ed(b) : g.changes.push(sf(a, b)) } else { var i = gg(e.done); for (i && i.ranges || yf(a.sel, e.done), g = { changes: [sf(a, b)], generation: e.generation }, e.done.push(g); e.done.length > e.undoDepth;) e.done.shift(), e.done[0].ranges || e.done.shift() } e.done.push(c), e.generation = ++e.maxGeneration, e.lastModTime = e.lastSelTime = f, e.lastOp = e.lastSelOp = d, e.lastOrigin = e.lastSelOrigin = b.origin, h || Qf(a, "historyAdded") } function wf(a, b, c, d) { var e = b.charAt(0); return "*" == e || "+" == e && c.ranges.length == d.ranges.length && c.somethingSelected() == d.somethingSelected() && new Date - a.history.lastSelTime <= (a.cm ? a.cm.options.historyEventDelay : 500) } function xf(a, b, c, d) { var e = a.history, f = d && d.origin; c == e.lastSelOp || f && e.lastSelOrigin == f && (e.lastModTime == e.lastSelTime && e.lastOrigin == f || wf(a, f, gg(e.done), b)) ? e.done[e.done.length - 1] = b : yf(b, e.done), e.lastSelTime = +new Date, e.lastSelOrigin = f, e.lastSelOp = c, d && d.clearRedo !== !1 && tf(e.undone) } function yf(a, b) { var c = gg(b); c && c.ranges && c.equals(a) || b.push(a) } function zf(a, b, c, d) { var e = b["spans_" + a.id], f = 0; a.iter(Math.max(a.first, c), Math.min(a.first + a.size, d), function(c) { c.markedSpans && ((e || (e = b["spans_" + a.id] = {}))[f] = c.markedSpans), ++f }) } function Af(a) { if (!a) return null; for (var c, b = 0; b < a.length; ++b) a[b].marker.explicitlyCleared ? c || (c = a.slice(0, b)) : c && c.push(a[b]); return c ? c.length ? c : null : a } function Bf(a, b) { var c = b["spans_" + a.id]; if (!c) return null; for (var d = 0, e = []; d < b.text.length; ++d) e.push(Af(c[d])); return e } function Cf(a, b, c) { for (var d = 0, e = []; d < a.length; ++d) { var f = a[d]; if (f.ranges) e.push(c ? Ka.prototype.deepCopy.call(f) : f); else { var g = f.changes, h = []; e.push({ changes: h }); for (var i = 0; i < g.length; ++i) { var k, j = g[i]; if (h.push({ from: j.from, to: j.to, text: j.text }), b) for (var l in j)(k = l.match(/^spans_(\d+)$/)) && ig(b, Number(k[1])) > -1 && (gg(h)[l] = j[l], delete j[l]) } } } return e } function Df(a, b, c, d) { c < a.line ? a.line += d : b < a.line && (a.line = b, a.ch = 0) } function Ef(a, b, c, d) { for (var e = 0; e < a.length; ++e) { var f = a[e], g = !0; if (f.ranges) { f.copied || (f = a[e] = f.deepCopy(), f.copied = !0); for (var h = 0; h < f.ranges.length; h++) Df(f.ranges[h].anchor, b, c, d), Df(f.ranges[h].head, b, c, d) } else { for (var h = 0; h < f.changes.length; ++h) { var i = f.changes[h]; if (c < i.from.line) i.from = qa(i.from.line + d, i.from.ch), i.to = qa(i.to.line + d, i.to.ch); else if (b <= i.to.line) { g = !1; break } } g || (a.splice(0, e + 1), e = 0) } } } function Ff(a, b) { var c = b.from.line, d = b.to.line, e = b.text.length - (d - c) - 1; Ef(a.done, c, d, e), Ef(a.undone, c, d, e) } function If(a) { return null != a.defaultPrevented ? a.defaultPrevented : 0 == a.returnValue } function Kf(a) { return a.target || a.srcElement } function Lf(a) { var b = a.which; return null == b && (1 & a.button ? b = 1 : 2 & a.button ? b = 3 : 4 & a.button && (b = 2)), q && a.ctrlKey && 1 == b && (b = 3), b } function Of(a, b, c) { var d = a._handlers && a._handlers[b]; return c ? d && d.length > 0 ? d.slice() : Nf : d || Nf } function Sf(a, b) { function f(a) { return function() { a.apply(null, d) } } var c = Of(a, b, !1); if (c.length) { var e, d = Array.prototype.slice.call(arguments, 2); Wb ? e = Wb.delayedCallbacks : Rf ? e = Rf : (e = Rf = [], setTimeout(Tf, 0)); for (var g = 0; g < c.length; ++g) e.push(f(c[g])) } } function Tf() { var a = Rf; Rf = null; for (var b = 0; b < a.length; ++b) a[b]() } function Uf(a, b, c) { return "string" == typeof b && (b = { type: b, preventDefault: function() { this.defaultPrevented = !0 } }), Qf(a, c || b.type, a, b), If(b) || b.codemirrorIgnore } function Vf(a) { var b = a._handlers && a._handlers.cursorActivity; if (b) for (var c = a.curOp.cursorActivityHandlers || (a.curOp.cursorActivityHandlers = []), d = 0; d < b.length; ++d) - 1 == ig(c, b[d]) && c.push(b[d]) } function Wf(a, b) { return Of(a, b) .length > 0 } function Xf(a) { a.prototype.on = function(a, b) { Mf(this, a, b) }, a.prototype.off = function(a, b) { Pf(this, a, b) } } function bg() { this.id = null } function fg(a) { for (; eg.length <= a;) eg.push(gg(eg) + " "); return eg[a] } function gg(a) { return a[a.length - 1] } function ig(a, b) { for (var c = 0; c < a.length; ++c) if (a[c] == b) return c; return -1 } function jg(a, b) { for (var c = [], d = 0; d < a.length; d++) c[d] = b(a[d], d); return c } function kg() {} function lg(a, b) { var c; return Object.create ? c = Object.create(a) : (kg.prototype = a, c = new kg), b && mg(b, c), c } function mg(a, b, c) { b || (b = {}); for (var d in a) !a.hasOwnProperty(d) || c === !1 && b.hasOwnProperty(d) || (b[d] = a[d]); return b } function ng(a) { var b = Array.prototype.slice.call(arguments, 1); return function() { return a.apply(null, b) } } function qg(a, b) { return b ? b.source.indexOf("\\w") > -1 && pg(a) ? !0 : b.test(a) : pg(a) } function rg(a) { for (var b in a) if (a.hasOwnProperty(b) && a[b]) return !1; return !0 } function tg(a) { return a.charCodeAt(0) >= 768 && sg.test(a) } function ug(a, b, c, d) { var e = document.createElement(a); if (c && (e.className = c), d && (e.style.cssText = d), "string" == typeof b) e.appendChild(document.createTextNode(b)); else if (b) for (var f = 0; f < b.length; ++f) e.appendChild(b[f]); return e } function wg(a) { for (var b = a.childNodes.length; b > 0; --b) a.removeChild(a.firstChild); return a } function xg(a, b) { return wg(a) .appendChild(b) } function zg() { for (var a = document.activeElement; a && a.root && a.root.activeElement;) a = a.root.activeElement; return a } function Ag(a) { return new RegExp("(^|\\s)" + a + "(?:$|\\s)\\s*") } function Dg(a, b) { for (var c = a.split(" "), d = 0; d < c.length; d++) c[d] && !Ag(c[d]) .test(b) && (b += " " + c[d]); return b } function Eg(a) { if (document.body.getElementsByClassName) for (var b = document.body.getElementsByClassName("CodeMirror"), c = 0; c < b.length; c++) { var d = b[c].CodeMirror; d && a(d) } } function Gg() { Fg || (Hg(), Fg = !0) } function Hg() { var a; Mf(window, "resize", function() { null == a && (a = setTimeout(function() { a = null, Eg(uc) }, 100)) }), Mf(window, "blur", function() { Eg(bd) }) } function Kg(a) { if (null == Jg) { var b = ug("span", "\u200b"); xg(a, ug("span", [b, document.createTextNode("x")])), 0 != a.firstChild.offsetHeight && (Jg = b.offsetWidth <= 1 && b.offsetHeight > 2 && !(f && 8 > g)) } var c = Jg ? ug("span", "\u200b") : ug("span", "\xa0", null, "display: inline-block; width: 1px; margin-right: -1px"); return c.setAttribute("cm-text", ""), c } function Mg(a) { if (null != Lg) return Lg; var b = xg(a, document.createTextNode("A\u062eA")), c = vg(b, 0, 1) .getBoundingClientRect(); if (!c || c.left == c.right) return !1; var d = vg(b, 1, 2) .getBoundingClientRect(); return Lg = d.right - c.right < 3 } function Rg(a) { if (null != Qg) return Qg; var b = xg(a, ug("span", "x")), c = b.getBoundingClientRect(), d = vg(b, 0, 1) .getBoundingClientRect(); return Qg = Math.abs(c.left - d.left) > 1 } function Tg(a, b, c, d) { if (!a) return d(b, c, "ltr"); for (var e = !1, f = 0; f < a.length; ++f) { var g = a[f]; (g.from < c && g.to > b || b == c && g.to == b) && (d(Math.max(g.from, b), Math.min(g.to, c), 1 == g.level ? "rtl" : "ltr"), e = !0) } e || d(b, c, "ltr") } function Ug(a) { return a.level % 2 ? a.to : a.from } function Vg(a) { return a.level % 2 ? a.from : a.to } function Wg(a) { var b = qf(a); return b ? Ug(b[0]) : 0 } function Xg(a) { var b = qf(a); return b ? Vg(gg(b)) : a.text.length } function Yg(a, b) { var c = jf(a.doc, b), d = ve(c); d != c && (b = nf(d)); var e = qf(d), f = e ? e[0].level % 2 ? Xg(d) : Wg(d) : 0; return qa(b, f) } function Zg(a, b) { for (var c, d = jf(a.doc, b); c = te(d);) d = c.find(1, !0) .line, b = null; var e = qf(d), f = e ? e[0].level % 2 ? Wg(d) : Xg(d) : d.text.length; return qa(null == b ? nf(d) : b, f) } function $g(a, b) { var c = Yg(a, b.line), d = jf(a.doc, c.line), e = qf(d); if (!e || 0 == e[0].level) { var f = Math.max(0, d.text.search(/\S/)), g = b.line == c.line && b.ch <= f && b.ch; return qa(c.line, g ? 0 : f) } return c } function _g(a, b, c) { var d = a[0].level; return b == d ? !0 : c == d ? !1 : c > b } function bh(a, b) { ah = null; for (var d, c = 0; c < a.length; ++c) { var e = a[c]; if (e.from < b && e.to > b) return c; if (e.from == b || e.to == b) { if (null != d) return _g(a, e.level, a[d].level) ? (e.from != e.to && (ah = d), c) : (e.from != e.to && (ah = c), d); d = c } } return d } function ch(a, b, c, d) { if (!d) return b + c; do b += c; while (b > 0 && tg(a.text.charAt(b))); return b } function dh(a, b, c, d) { var e = qf(a); if (!e) return eh(a, b, c, d); for (var f = bh(e, b), g = e[f], h = ch(a, b, g.level % 2 ? -c : c, d);;) { if (h > g.from && h < g.to) return h; if (h == g.from || h == g.to) return bh(e, h) == f ? h : (g = e[f += c], c > 0 == g.level % 2 ? g.to : g.from); if (g = e[f += c], !g) return null; h = c > 0 == g.level % 2 ? ch(a, g.to, -1, d) : ch(a, g.from, 1, d) } } function eh(a, b, c, d) { var e = b + c; if (d) for (; e > 0 && tg(a.text.charAt(e));) e += c; return 0 > e || e > a.text.length ? null : e } var a = navigator.userAgent, b = navigator.platform, c = /gecko\/\d/i.test(a), d = /MSIE \d/.test(a), e = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(a), f = d || e, g = f && (d ? document.documentMode || 6 : e[1]), h = /WebKit\//.test(a), i = h && /Qt\/\d+\.\d+/.test(a), j = /Chrome\//.test(a), k = /Opera\//.test(a), l = /Apple Computer/.test(navigator.vendor), m = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(a), n = /PhantomJS/.test(a), o = /AppleWebKit/.test(a) && /Mobile\/\w+/.test(a), p = o || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(a), q = o || /Mac/.test(b), r = /win/i.test(b), s = k && a.match(/Version\/(\d*\.\d*)/); s && (s = Number(s[1])), s && s >= 15 && (k = !1, h = !0); var t = q && (i || k && (null == s || 12.11 > s)), u = c || f && g >= 9, v = !1, w = !1; M.prototype = mg({ update: function(a) { var b = a.scrollWidth > a.clientWidth + 1, c = a.scrollHeight > a.clientHeight + 1, d = a.nativeBarWidth; if (c) { this.vert.style.display = "block", this.vert.style.bottom = b ? d + "px" : "0"; var e = a.viewHeight - (b ? d : 0); this.vert.firstChild.style.height = Math.max(0, a.scrollHeight - a.clientHeight + e) + "px" } else this.vert.style.display = "", this.vert.firstChild.style.height = "0"; if (b) { this.horiz.style.display = "block", this.horiz.style.right = c ? d + "px" : "0", this.horiz.style.left = a.barLeft + "px"; var f = a.viewWidth - a.barLeft - (c ? d : 0); this.horiz.firstChild.style.width = a.scrollWidth - a.clientWidth + f + "px" } else this.horiz.style.display = "", this.horiz.firstChild.style.width = "0"; return !this.checkedZeroWidth && a.clientHeight > 0 && (0 == d && this.zeroWidthHack(), this.checkedZeroWidth = !0), { right: c ? d : 0, bottom: b ? d : 0 } }, setScrollLeft: function(a) { this.horiz.scrollLeft != a && (this.horiz.scrollLeft = a), this.disableHoriz && this.enableZeroWidthBar(this.horiz, this.disableHoriz) }, setScrollTop: function(a) { this.vert.scrollTop != a && (this.vert.scrollTop = a), this.disableVert && this.enableZeroWidthBar(this.vert, this.disableVert) }, zeroWidthHack: function() { var a = q && !m ? "12px" : "18px"; this.horiz.style.height = this.vert.style.width = a, this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none", this.disableHoriz = new bg, this.disableVert = new bg }, enableZeroWidthBar: function(a, b) { function c() { var d = a.getBoundingClientRect(), e = document.elementFromPoint(d.left + 1, d.bottom - 1); e != a ? a.style.pointerEvents = "none" : b.set(1e3, c) } a.style.pointerEvents = "auto", b.set(1e3, c) }, clear: function() { var a = this.horiz.parentNode; a.removeChild(this.horiz), a.removeChild(this.vert) } }, M.prototype), N.prototype = mg({ update: function() { return { bottom: 0, right: 0 } }, setScrollLeft: function() {}, setScrollTop: function() {}, clear: function() {} }, N.prototype), x.scrollbarModel = { "native": M, "null": N }, W.prototype.signal = function(a, b) { Wf(a, b) && this.events.push(arguments) }, W.prototype.finish = function() { for (var a = 0; a < this.events.length; a++) Qf.apply(null, this.events[a]); }; var qa = x.Pos = function(a, b) { return this instanceof qa ? (this.line = a, void(this.ch = b)) : new qa(a, b) }, ra = x.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch }, wa = null; Ca.prototype = mg({ init: function(a) { function h(a) { if (!Uf(c, a)) { if (c.somethingSelected()) wa = c.getSelections(), b.inaccurateSelection && (b.prevInput = "", b.inaccurateSelection = !1, e.value = wa.join("\n"), hg(e)); else { if (!c.options.lineWiseCopyCut) return; var d = Aa(c); wa = d.text, "cut" == a.type ? c.setSelections(d.ranges, null, $f) : (b.prevInput = "", e.value = d.text.join("\n"), hg(e)) } "cut" == a.type && (c.state.cutIncoming = !0) } } var b = this, c = this.cm, d = this.wrapper = Da(), e = this.textarea = d.firstChild; a.wrapper.insertBefore(d, a.wrapper.firstChild), o && (e.style.width = "0px"), Mf(e, "input", function() { f && g >= 9 && b.hasSelection && (b.hasSelection = null), b.poll() }), Mf(e, "paste", function(a) { Uf(c, a) || ya(a, c) || (c.state.pasteIncoming = !0, b.fastPoll()) }), Mf(e, "cut", h), Mf(e, "copy", h), Mf(a.scroller, "paste", function(d) { vc(a, d) || Uf(c, d) || (c.state.pasteIncoming = !0, b.focus()) }), Mf(a.lineSpace, "selectstart", function(b) { vc(a, b) || Gf(b) }), Mf(e, "compositionstart", function() { var a = c.getCursor("from"); b.composing && b.composing.range.clear(), b.composing = { start: a, range: c.markText(a, c.getCursor("to"), { className: "CodeMirror-composing" }) } }), Mf(e, "compositionend", function() { b.composing && (b.poll(), b.composing.range.clear(), b.composing = null) }) }, prepareSelection: function() { var a = this.cm, b = a.display, c = a.doc, d = hb(a); if (a.options.moveInputWithCursor) { var e = Ob(a, c.sel.primary() .head, "div"), f = b.wrapper.getBoundingClientRect(), g = b.lineDiv.getBoundingClientRect(); d.teTop = Math.max(0, Math.min(b.wrapper.clientHeight - 10, e.top + g.top - f.top)), d.teLeft = Math.max(0, Math.min(b.wrapper.clientWidth - 10, e.left + g.left - f.left)) } return d }, showSelection: function(a) { var b = this.cm, c = b.display; xg(c.cursorDiv, a.cursors), xg(c.selectionDiv, a.selection), null != a.teTop && (this.wrapper.style.top = a.teTop + "px", this.wrapper.style.left = a.teLeft + "px") }, reset: function(a) { if (!this.contextMenuPending) { var b, c, d = this.cm, e = d.doc; if (d.somethingSelected()) { this.prevInput = ""; var h = e.sel.primary(); b = Pg && (h.to() .line - h.from() .line > 100 || (c = d.getSelection()) .length > 1e3); var i = b ? "-" : c || d.getSelection(); this.textarea.value = i, d.state.focused && hg(this.textarea), f && g >= 9 && (this.hasSelection = i) } else a || (this.prevInput = this.textarea.value = "", f && g >= 9 && (this.hasSelection = null)); this.inaccurateSelection = b } }, getField: function() { return this.textarea }, supportsTouch: function() { return !1 }, focus: function() { if ("nocursor" != this.cm.options.readOnly && (!p || zg() != this.textarea)) try { this.textarea.focus() } catch (a) {} }, blur: function() { this.textarea.blur() }, resetPosition: function() { this.wrapper.style.top = this.wrapper.style.left = 0 }, receivedFocus: function() { this.slowPoll() }, slowPoll: function() { var a = this; a.pollingFast || a.polling.set(this.cm.options.pollInterval, function() { a.poll(), a.cm.state.focused && a.slowPoll() }) }, fastPoll: function() { function c() { var d = b.poll(); d || a ? (b.pollingFast = !1, b.slowPoll()) : (a = !0, b.polling.set(60, c)) } var a = !1, b = this; b.pollingFast = !0, b.polling.set(20, c) }, poll: function() { var a = this.cm, b = this.textarea, c = this.prevInput; if (this.contextMenuPending || !a.state.focused || Og(b) && !c && !this.composing || a.isReadOnly() || a.options.disableInput || a.state.keySeq) return !1; var d = b.value; if (d == c && !a.somethingSelected()) return !1; if (f && g >= 9 && this.hasSelection === d || q && /[\uf700-\uf7ff]/.test(d)) return a.display.input.reset(), !1; if (a.doc.sel == a.display.selForContextMenu) { var e = d.charCodeAt(0); if (8203 != e || c || (c = "\u200b"), 8666 == e) return this.reset(), this.cm.execCommand("undo") } for (var h = 0, i = Math.min(c.length, d.length); i > h && c.charCodeAt(h) == d.charCodeAt(h);) ++h; var j = this; return fc(a, function() { xa(a, d.slice(h), c.length - h, null, j.composing ? "*compose" : null), d.length > 1e3 || d.indexOf("\n") > -1 ? b.value = j.prevInput = "" : j.prevInput = d, j.composing && (j.composing.range.clear(), j.composing.range = a.markText(j.composing.start, a.getCursor("to"), { className: "CodeMirror-composing" })) }), !0 }, ensurePolled: function() { this.pollingFast && this.poll() && (this.pollingFast = !1) }, onKeyPress: function() { f && g >= 9 && (this.hasSelection = null), this.fastPoll() }, onContextMenu: function(a) { function q() { if (null != e.selectionStart) { var a = c.somethingSelected(), f = "\u200b" + (a ? e.value : ""); e.value = "\u21da", e.value = f, b.prevInput = a ? "" : "\u200b", e.selectionStart = 1, e.selectionEnd = f.length, d.selForContextMenu = c.doc.sel } } function r() { if (b.contextMenuPending = !1, b.wrapper.style.cssText = n, e.style.cssText = m, f && 9 > g && d.scrollbars.setScrollTop(d.scroller.scrollTop = j), null != e.selectionStart) { (!f || f && 9 > g) && q(); var a = 0, h = function() { d.selForContextMenu == c.doc.sel && 0 == e.selectionStart && e.selectionEnd > 0 && "\u200b" == b.prevInput ? gc(c, Od.selectAll)(c) : a++ < 10 ? d.detectingSelectAll = setTimeout(h, 500) : d.input.reset() }; d.detectingSelectAll = setTimeout(h, 200) } } var b = this, c = b.cm, d = c.display, e = b.textarea, i = wc(c, a), j = d.scroller.scrollTop; if (i && !k) { var l = c.options.resetSelectionOnContextMenu; l && -1 == c.doc.sel.contains(i) && gc(c, $a)(c.doc, Na(i), $f); var m = e.style.cssText, n = b.wrapper.style.cssText; b.wrapper.style.cssText = "position: absolute"; var o = b.wrapper.getBoundingClientRect(); if (e.style.cssText = "position: absolute; width: 30px; height: 30px; top: " + (a.clientY - o.top - 5) + "px; left: " + (a.clientX - o.left - 5) + "px; z-index: 1000; background: " + (f ? "rgba(255, 255, 255, .05)" : "transparent") + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);", h) var p = window.scrollY; if (d.input.focus(), h && window.scrollTo(null, p), d.input.reset(), c.somethingSelected() || (e.value = b.prevInput = " "), b.contextMenuPending = !0, d.selForContextMenu = c.doc.sel, clearTimeout(d.detectingSelectAll), f && g >= 9 && q(), u) { Jf(a); var s = function() { Pf(window, "mouseup", s), setTimeout(r, 20) }; Mf(window, "mouseup", s) } else setTimeout(r, 50) } }, readOnlyChanged: function(a) { a || this.reset() }, setUneditable: kg, needsContentAttribute: !1 }, Ca.prototype), Ea.prototype = mg({ init: function(a) { function e(a) { if (!Uf(c, a)) { if (c.somethingSelected()) wa = c.getSelections(), "cut" == a.type && c.replaceSelection("", null, "cut"); else { if (!c.options.lineWiseCopyCut) return; var b = Aa(c); wa = b.text, "cut" == a.type && c.operation(function() { c.setSelections(b.ranges, 0, $f), c.replaceSelection("", null, "cut") }) } if (a.clipboardData && !o) a.preventDefault(), a.clipboardData.clearData(), a.clipboardData.setData("text/plain", wa.join("\n")); else { var d = Da(), e = d.firstChild; c.display.lineSpace.insertBefore(d, c.display.lineSpace.firstChild), e.value = wa.join("\n"); var f = document.activeElement; hg(e), setTimeout(function() { c.display.lineSpace.removeChild(d), f.focus() }, 50) } } } var b = this, c = b.cm, d = b.div = a.lineDiv; Ba(d), Mf(d, "paste", function(a) { Uf(c, a) || ya(a, c) }), Mf(d, "compositionstart", function(a) { var d = a.data; if (b.composing = { sel: c.doc.sel, data: d, startData: d }, d) { var e = c.doc.sel.primary(), f = c.getLine(e.head.line), g = f.indexOf(d, Math.max(0, e.head.ch - d.length)); g > -1 && g <= e.head.ch && (b.composing.sel = Na(qa(e.head.line, g), qa(e.head.line, g + d.length))) } }), Mf(d, "compositionupdate", function(a) { b.composing.data = a.data }), Mf(d, "compositionend", function(a) { var c = b.composing; c && (a.data == c.startData || /\u200b/.test(a.data) || (c.data = a.data), setTimeout(function() { c.handled || b.applyComposition(c), b.composing == c && (b.composing = null) }, 50)) }), Mf(d, "touchstart", function() { b.forceCompositionEnd() }), Mf(d, "input", function() { b.composing || (c.isReadOnly() || !b.pollContent()) && fc(b.cm, function() { lc(c) }) }), Mf(d, "copy", e), Mf(d, "cut", e) }, prepareSelection: function() { var a = hb(this.cm, !1); return a.focus = this.cm.state.focused, a }, showSelection: function(a) { a && this.cm.display.view.length && (a.focus && this.showPrimarySelection(), this.showMultipleSelections(a)) }, showPrimarySelection: function() { var a = window.getSelection(), b = this.cm.doc.sel.primary(), d = Ha(this.cm, a.anchorNode, a.anchorOffset), e = Ha(this.cm, a.focusNode, a.focusOffset); if (!d || d.bad || !e || e.bad || 0 != ra(ua(d, e), b.from()) || 0 != ra(ta(d, e), b.to())) { var f = Fa(this.cm, b.from()), g = Fa(this.cm, b.to()); if (f || g) { var h = this.cm.display.view, i = a.rangeCount && a.getRangeAt(0); if (f) { if (!g) { var j = h[h.length - 1].measure, k = j.maps ? j.maps[j.maps.length - 1] : j.map; g = { node: k[k.length - 1], offset: k[k.length - 2] - k[k.length - 3] } } } else f = { node: h[0].measure.map[2], offset: 0 }; try { var l = vg(f.node, f.offset, g.offset, g.node) } catch (m) {} l && (!c && this.cm.state.focused ? (a.collapse(f.node, f.offset), l.collapsed || a.addRange(l)) : (a.removeAllRanges(), a.addRange(l)), i && null == a.anchorNode ? a.addRange(i) : c && this.startGracePeriod()), this.rememberSelection() } } }, startGracePeriod: function() { var a = this; clearTimeout(this.gracePeriod), this.gracePeriod = setTimeout(function() { a.gracePeriod = !1, a.selectionChanged() && a.cm.operation(function() { a.cm.curOp.selectionChanged = !0 }) }, 20) }, showMultipleSelections: function(a) { xg(this.cm.display.cursorDiv, a.cursors), xg(this.cm.display.selectionDiv, a.selection) }, rememberSelection: function() { var a = window.getSelection(); this.lastAnchorNode = a.anchorNode, this.lastAnchorOffset = a.anchorOffset, this.lastFocusNode = a.focusNode, this.lastFocusOffset = a.focusOffset }, selectionInEditor: function() { var a = window.getSelection(); if (!a.rangeCount) return !1; var b = a.getRangeAt(0) .commonAncestorContainer; return yg(this.div, b) }, focus: function() { "nocursor" != this.cm.options.readOnly && this.div.focus() }, blur: function() { this.div.blur() }, getField: function() { return this.div }, supportsTouch: function() { return !0 }, receivedFocus: function() { function b() { a.cm.state.focused && (a.pollSelection(), a.polling.set(a.cm.options.pollInterval, b)) } var a = this; this.selectionInEditor() ? this.pollSelection() : fc(this.cm, function() { a.cm.curOp.selectionChanged = !0 }), this.polling.set(this.cm.options.pollInterval, b) }, selectionChanged: function() { var a = window.getSelection(); return a.anchorNode != this.lastAnchorNode || a.anchorOffset != this.lastAnchorOffset || a.focusNode != this.lastFocusNode || a.focusOffset != this.lastFocusOffset }, pollSelection: function() { if (!this.composing && !this.gracePeriod && this.selectionChanged()) { var a = window.getSelection(), b = this.cm; this.rememberSelection(); var c = Ha(b, a.anchorNode, a.anchorOffset), d = Ha(b, a.focusNode, a.focusOffset); c && d && fc(b, function() { $a(b.doc, Na(c, d), $f), (c.bad || d.bad) && (b.curOp.selectionChanged = !0) }) } }, pollContent: function() { var a = this.cm, b = a.display, c = a.doc.sel.primary(), d = c.from(), e = c.to(); if (d.line < b.viewFrom || e.line > b.viewTo - 1) return !1; var f; if (d.line == b.viewFrom || 0 == (f = oc(a, d.line))) var g = nf(b.view[0].line), h = b.view[0].node; else var g = nf(b.view[f].line), h = b.view[f - 1].node.nextSibling; var i = oc(a, e.line); if (i == b.view.length - 1) var j = b.viewTo - 1, k = b.lineDiv.lastChild; else var j = nf(b.view[i + 1].line) - 1, k = b.view[i + 1].node.previousSibling; for (var l = a.doc.splitLines(Ja(a, h, k, g, j)), m = kf(a.doc, qa(g, 0), qa(j, jf(a.doc, j) .text.length)); l.length > 1 && m.length > 1;) if (gg(l) == gg(m)) l.pop(), m.pop(), j--; else { if (l[0] != m[0]) break; l.shift(), m.shift(), g++ } for (var n = 0, o = 0, p = l[0], q = m[0], r = Math.min(p.length, q.length); r > n && p.charCodeAt(n) == q.charCodeAt(n);) ++n; for (var s = gg(l), t = gg(m), u = Math.min(s.length - (1 == l.length ? n : 0), t.length - (1 == m.length ? n : 0)); u > o && s.charCodeAt(s.length - o - 1) == t.charCodeAt(t.length - o - 1);) ++o; l[l.length - 1] = s.slice(0, s.length - o), l[0] = l[0].slice(n); var v = qa(g, n), w = qa(j, m.length ? gg(m) .length - o : 0); return l.length > 1 || l[0] || ra(v, w) ? (qd(a.doc, l, v, w, "+input"), !0) : void 0 }, ensurePolled: function() { this.forceCompositionEnd() }, reset: function() { this.forceCompositionEnd() }, forceCompositionEnd: function() { this.composing && !this.composing.handled && (this.applyComposition(this.composing), this.composing.handled = !0, this.div.blur(), this.div.focus()) }, applyComposition: function(a) { this.cm.isReadOnly() ? gc(this.cm, lc)(this.cm) : a.data && a.data != a.startData && gc(this.cm, xa)(this.cm, a.data, 0, a.sel) }, setUneditable: function(a) { a.contentEditable = "false" }, onKeyPress: function(a) { a.preventDefault(), this.cm.isReadOnly() || gc(this.cm, xa)(this.cm, String.fromCharCode(null == a.charCode ? a.keyCode : a.charCode), 0) }, readOnlyChanged: function(a) { this.div.contentEditable = String("nocursor" != a) }, onContextMenu: kg, resetPosition: kg, needsContentAttribute: !0 }, Ea.prototype), x.inputStyles = { textarea: Ca, contenteditable: Ea }, Ka.prototype = { primary: function() { return this.ranges[this.primIndex] }, equals: function(a) { if (a == this) return !0; if (a.primIndex != this.primIndex || a.ranges.length != this.ranges.length) return !1; for (var b = 0; b < this.ranges.length; b++) { var c = this.ranges[b], d = a.ranges[b]; if (0 != ra(c.anchor, d.anchor) || 0 != ra(c.head, d.head)) return !1 } return !0 }, deepCopy: function() { for (var a = [], b = 0; b < this.ranges.length; b++) a[b] = new La(sa(this.ranges[b].anchor), sa(this.ranges[b].head)); return new Ka(a, this.primIndex) }, somethingSelected: function() { for (var a = 0; a < this.ranges.length; a++) if (!this.ranges[a].empty()) return !0; return !1 }, contains: function(a, b) { b || (b = a); for (var c = 0; c < this.ranges.length; c++) { var d = this.ranges[c]; if (ra(b, d.from()) >= 0 && ra(a, d.to()) <= 0) return c } return -1 } }, La.prototype = { from: function() { return ua(this.anchor, this.head) }, to: function() { return ta(this.anchor, this.head) }, empty: function() { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch } }; var Tb, yc, zc, Cb = { left: 0, right: 0, top: 0, bottom: 0 }, Wb = null, Xb = 0, Fc = 0, Mc = 0, Nc = null; f ? Nc = -.53 : c ? Nc = 15 : j ? Nc = -.7 : l && (Nc = -1 / 3); var Oc = function(a) { var b = a.wheelDeltaX, c = a.wheelDeltaY; return null == b && a.detail && a.axis == a.HORIZONTAL_AXIS && (b = a.detail), null == c && a.detail && a.axis == a.VERTICAL_AXIS ? c = a.detail : null == c && (c = a.wheelDelta), { x: b, y: c } }; x.wheelEventPixels = function(a) { var b = Oc(a); return b.x *= Nc, b.y *= Nc, b }; var Sc = new bg, Wc = null, ed = x.changeEnd = function(a) { return a.text ? qa(a.from.line + a.text.length - 1, gg(a.text) .length + (1 == a.text.length ? a.from.ch : 0)) : a.to }; x.prototype = { constructor: x, focus: function() { window.focus(), this.display.input.focus() }, setOption: function(a, b) { var c = this.options, d = c[a]; (c[a] != b || "mode" == a) && (c[a] = b, Ed.hasOwnProperty(a) && gc(this, Ed[a])(this, b, d)) }, getOption: function(a) { return this.options[a] }, getDoc: function() { return this.doc }, addKeyMap: function(a, b) { this.state.keyMaps[b ? "push" : "unshift"](Ud(a)) }, removeKeyMap: function(a) { for (var b = this.state.keyMaps, c = 0; c < b.length; ++c) if (b[c] == a || b[c].name == a) return b.splice(c, 1), !0 }, addOverlay: hc(function(a, b) { var c = a.token ? a : x.getMode(this.options, a); if (c.startState) throw new Error("Overlays may not be stateful."); this.state.overlays.push({ mode: c, modeSpec: a, opaque: b && b.opaque }), this.state.modeGen++, lc(this) }), removeOverlay: hc(function(a) { for (var b = this.state.overlays, c = 0; c < b.length; ++c) { var d = b[c].modeSpec; if (d == a || "string" == typeof a && d.name == a) return b.splice(c, 1), this.state.modeGen++, void lc(this) } }), indentLine: hc(function(a, b, c) { "string" != typeof b && "number" != typeof b && (b = null == b ? this.options.smartIndent ? "smart" : "prev" : b ? "add" : "subtract"), Ra(this.doc, a) && yd(this, a, b, c) }), indentSelection: hc(function(a) { for (var b = this.doc.sel.ranges, c = -1, d = 0; d < b.length; d++) { var e = b[d]; if (e.empty()) e.head.line > c && (yd(this, e.head.line, a, !0), c = e.head.line, d == this.doc.sel.primIndex && wd(this)); else { var f = e.from(), g = e.to(), h = Math.max(c, f.line); c = Math.min(this.lastLine(), g.line - (g.ch ? 0 : 1)) + 1; for (var i = h; c > i; ++i) yd(this, i, a); var j = this.doc.sel.ranges; 0 == f.ch && b.length == j.length && j[d].from() .ch > 0 && Wa(this.doc, d, new La(f, j[d].to()), $f) } } }), getTokenAt: function(a, b) { return Le(this, a, b) }, getLineTokens: function(a, b) { return Le(this, qa(a), b, !0) }, getTokenTypeAt: function(a) { a = Pa(this.doc, a); var f, b = Oe(this, jf(this.doc, a.line)), c = 0, d = (b.length - 1) / 2, e = a.ch; if (0 == e) f = b[2]; else for (;;) { var g = c + d >> 1; if ((g ? b[2 * g - 1] : 0) >= e) d = g; else { if (!(b[2 * g + 1] < e)) { f = b[2 * g + 2]; break } c = g + 1 } } var h = f ? f.indexOf("cm-overlay ") : -1; return 0 > h ? f : 0 == h ? null : f.slice(0, h - 1) }, getModeAt: function(a) { var b = this.doc.mode; return b.innerMode ? x.innerMode(b, this.getTokenAt(a) .state) .mode : b }, getHelper: function(a, b) { return this.getHelpers(a, b)[0] }, getHelpers: function(a, b) { var c = []; if (!Ld.hasOwnProperty(b)) return c; var d = Ld[b], e = this.getModeAt(a); if ("string" == typeof e[b]) d[e[b]] && c.push(d[e[b]]); else if (e[b]) for (var f = 0; f < e[b].length; f++) { var g = d[e[b][f]]; g && c.push(g) } else e.helperType && d[e.helperType] ? c.push(d[e.helperType]) : d[e.name] && c.push(d[e.name]); for (var f = 0; f < d._global.length; f++) { var h = d._global[f]; h.pred(e, this) && -1 == ig(c, h.val) && c.push(h.val) } return c }, getStateAfter: function(a, b) { var c = this.doc; return a = Oa(c, null == a ? c.first + c.size - 1 : a), ob(this, a + 1, b) }, cursorCoords: function(a, b) { var c, d = this.doc.sel.primary(); return c = null == a ? d.head : "object" == typeof a ? Pa(this.doc, a) : a ? d.from() : d.to(), Ob(this, c, b || "page") }, charCoords: function(a, b) { return Nb(this, Pa(this.doc, a), b || "page") }, coordsChar: function(a, b) { return a = Mb(this, a, b || "page"), Rb(this, a.left, a.top) }, lineAtHeight: function(a, b) { return a = Mb(this, { top: a, left: 0 }, b || "page") .top, of (this.doc, a + this.display.viewOffset) }, heightAtLine: function(a, b) { var d, c = !1; if ("number" == typeof a) { var e = this.doc.first + this.doc.size - 1; a < this.doc.first ? a = this.doc.first : a > e && (a = e, c = !0), d = jf(this.doc, a) } else d = a; return Lb(this, d, { top: 0, left: 0 }, b || "page") .top + (c ? this.doc.height - pf(d) : 0) }, defaultTextHeight: function() { return Ub(this.display) }, defaultCharWidth: function() { return Vb(this.display) }, setGutterMarker: hc(function(a, b, c) { return zd(this.doc, a, "gutter", function(a) { var d = a.gutterMarkers || (a.gutterMarkers = {}); return d[b] = c, !c && rg(d) && (a.gutterMarkers = null), !0 }) }), clearGutter: hc(function(a) { var b = this, c = b.doc, d = c.first; c.iter(function(c) { c.gutterMarkers && c.gutterMarkers[a] && (c.gutterMarkers[a] = null, mc(b, d, "gutter"), rg(c.gutterMarkers) && (c.gutterMarkers = null)), ++d }) }), lineInfo: function(a) { if ("number" == typeof a) { if (!Ra(this.doc, a)) return null; var b = a; if (a = jf(this.doc, a), !a) return null } else { var b = nf(a); if (null == b) return null } return { line: b, handle: a, text: a.text, gutterMarkers: a.gutterMarkers, textClass: a.textClass, bgClass: a.bgClass, wrapClass: a.wrapClass, widgets: a.widgets } }, getViewport: function() { return { from: this.display.viewFrom, to: this.display.viewTo } }, addWidget: function(a, b, c, d, e) { var f = this.display; a = Ob(this, Pa(this.doc, a)); var g = a.bottom, h = a.left; if (b.style.position = "absolute", b.setAttribute("cm-ignore-events", "true"), this.display.input.setUneditable(b), f.sizer.appendChild(b), "over" == d) g = a.top; else if ("above" == d || "near" == d) { var i = Math.max(f.wrapper.clientHeight, this.doc.height), j = Math.max(f.sizer.clientWidth, f.lineSpace.clientWidth); ("above" == d || a.bottom + b.offsetHeight > i) && a.top > b.offsetHeight ? g = a.top - b.offsetHeight : a.bottom + b.offsetHeight <= i && (g = a.bottom), h + b.offsetWidth > j && (h = j - b.offsetWidth) } b.style.top = g + "px", b.style.left = b.style.right = "", "right" == e ? (h = f.sizer.clientWidth - b.offsetWidth, b.style.right = "0px") : ("left" == e ? h = 0 : "middle" == e && (h = (f.sizer.clientWidth - b.offsetWidth) / 2), b.style.left = h + "px"), c && td(this, h, g, h + b.offsetWidth, g + b.offsetHeight) }, triggerOnKeyDown: hc(Xc), triggerOnKeyPress: hc($c), triggerOnKeyUp: Zc, execCommand: function(a) { return Od.hasOwnProperty(a) ? Od[a].call(null, this) : void 0 }, triggerElectric: hc(function(a) { za(this, a) }), findPosH: function(a, b, c, d) { var e = 1; 0 > b && (e = -1, b = -b); for (var f = 0, g = Pa(this.doc, a); b > f && (g = Bd(this.doc, g, e, c, d), !g.hitSide); ++f); return g }, moveH: hc(function(a, b) { var c = this; c.extendSelectionsBy(function(d) { return c.display.shift || c.doc.extend || d.empty() ? Bd(c.doc, d.head, a, b, c.options.rtlMoveVisually) : 0 > a ? d.from() : d.to() }, ag) }), deleteH: hc(function(a, b) { var c = this.doc.sel, d = this.doc; c.somethingSelected() ? d.replaceSelection("", null, "+delete") : Ad(this, function(c) { var e = Bd(d, c.head, a, b, !1); return 0 > a ? { from: e, to: c.head } : { from: c.head, to: e } }) }), findPosV: function(a, b, c, d) { var e = 1, f = d; 0 > b && (e = -1, b = -b); for (var g = 0, h = Pa(this.doc, a); b > g; ++g) { var i = Ob(this, h, "div"); if (null == f ? f = i.left : i.left = f, h = Cd(this, i, e, c), h.hitSide) break } return h }, moveV: hc(function(a, b) { var c = this, d = this.doc, e = [], f = !c.display.shift && !d.extend && d.sel.somethingSelected(); if (d.extendSelectionsBy(function(g) { if (f) return 0 > a ? g.from() : g.to(); var h = Ob(c, g.head, "div"); null != g.goalColumn && (h.left = g.goalColumn), e.push(h.left); var i = Cd(c, h, a, b); return "page" == b && g == d.sel.primary() && vd(c, null, Nb(c, i, "div") .top - h.top), i }, ag), e.length) for (var g = 0; g < d.sel.ranges.length; g++) d.sel.ranges[g].goalColumn = e[g] }), findWordAt: function(a) { var b = this.doc, c = jf(b, a.line) .text, d = a.ch, e = a.ch; if (c) { var f = this.getHelper(a, "wordChars"); (a.xRel < 0 || e == c.length) && d ? --d : ++e; for (var g = c.charAt(d), h = qg(g, f) ? function(a) { return qg(a, f) } : /\s/.test(g) ? function(a) { return /\s/.test(a) } : function(a) { return !/\s/.test(a) && !qg(a) }; d > 0 && h(c.charAt(d - 1));) --d; for (; e < c.length && h(c.charAt(e));) ++e } return new La(qa(a.line, d), qa(a.line, e)) }, toggleOverwrite: function(a) { (null == a || a != this.state.overwrite) && ((this.state.overwrite = !this.state.overwrite) ? Cg(this.display.cursorDiv, "CodeMirror-overwrite") : Bg(this.display.cursorDiv, "CodeMirror-overwrite"), Qf(this, "overwriteToggle", this, this.state.overwrite)) }, hasFocus: function() { return this.display.input.getField() == zg() }, isReadOnly: function() { return !(!this.options.readOnly && !this.doc.cantEdit) }, scrollTo: hc(function(a, b) { (null != a || null != b) && xd(this), null != a && (this.curOp.scrollLeft = a), null != b && (this.curOp.scrollTop = b) }), getScrollInfo: function() { var a = this.display.scroller; return { left: a.scrollLeft, top: a.scrollTop, height: a.scrollHeight - sb(this) - this.display.barHeight, width: a.scrollWidth - sb(this) - this.display.barWidth, clientHeight: ub(this), clientWidth: tb(this) } }, scrollIntoView: hc(function(a, b) { if (null == a ? (a = { from: this.doc.sel.primary() .head, to: null }, null == b && (b = this.options.cursorScrollMargin)) : "number" == typeof a ? a = { from: qa(a, 0), to: null } : null == a.from && (a = { from: a, to: null }), a.to || (a.to = a.from), a.margin = b || 0, null != a.from.line) xd(this), this.curOp.scrollToPos = a; else { var c = ud(this, Math.min(a.from.left, a.to.left), Math.min(a.from.top, a.to.top) - a.margin, Math.max(a.from.right, a.to.right), Math.max(a.from.bottom, a.to.bottom) + a.margin); this.scrollTo(c.scrollLeft, c.scrollTop) } }), setSize: hc(function(a, b) { function d(a) { return "number" == typeof a || /^\d+$/.test(String(a)) ? a + "px" : a } var c = this; null != a && (c.display.wrapper.style.width = d(a)), null != b && (c.display.wrapper.style.height = d(b)), c.options.lineWrapping && Hb(this); var e = c.display.viewFrom; c.doc.iter(e, c.display.viewTo, function(a) { if (a.widgets) for (var b = 0; b < a.widgets.length; b++) if (a.widgets[b].noHScroll) { mc(c, e, "widget"); break }++ e }), c.curOp.forceUpdate = !0, Qf(c, "refresh", this) }), operation: function(a) { return fc(this, a) }, refresh: hc(function() { var a = this.display.cachedTextHeight; lc(this), this.curOp.forceUpdate = !0, Ib(this), this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop), H(this), (null == a || Math.abs(a - Ub(this.display)) > .5) && D(this), Qf(this, "refresh", this) }), swapDoc: hc(function(a) { var b = this.doc; return b.cm = null, hf(this, a), Ib(this), this.display.input.reset(), this.scrollTo(a.scrollLeft, a.scrollTop), this.curOp.forceScroll = !0, Sf(this, "swapDoc", this, b), b }), getInputField: function() { return this.display.input.getField() }, getWrapperElement: function() { return this.display.wrapper }, getScrollerElement: function() { return this.display.scroller }, getGutterElement: function() { return this.display.gutters } }, Xf(x); var Dd = x.defaults = {}, Ed = x.optionHandlers = {}, Gd = x.Init = { toString: function() { return "CodeMirror.Init" } }; Fd("value", "", function(a, b) { a.setValue(b) }, !0), Fd("mode", null, function(a, b) { a.doc.modeOption = b, z(a) }, !0), Fd("indentUnit", 2, z, !0), Fd("indentWithTabs", !1), Fd("smartIndent", !0), Fd("tabSize", 4, function(a) { A(a), Ib(a), lc(a) }, !0), Fd("lineSeparator", null, function(a, b) { if (a.doc.lineSep = b, b) { var c = [], d = a.doc.first; a.doc.iter(function(a) { for (var e = 0;;) { var f = a.text.indexOf(b, e); if (-1 == f) break; e = f + b.length, c.push(qa(d, f)) } d++ }); for (var e = c.length - 1; e >= 0; e--) qd(a.doc, b, c[e], qa(c[e].line, c[e].ch + b.length)) } }), Fd("specialChars", /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(a, b, c) { a.state.specialChars = new RegExp(b.source + (b.test(" ") ? "" : "| "), "g"), c != x.Init && a.refresh() }), Fd("specialCharPlaceholder", Ue, function(a) { a.refresh() }, !0), Fd("electricChars", !0), Fd("inputStyle", p ? "contenteditable" : "textarea", function() { throw new Error("inputStyle can not (yet) be changed in a running editor") }, !0), Fd("rtlMoveVisually", !r), Fd("wholeLineUpdateBefore", !0), Fd("theme", "default", function(a) { E(a), F(a) }, !0), Fd("keyMap", "default", function(a, b, c) { var d = Ud(b), e = c != x.Init && Ud(c); e && e.detach && e.detach(a, d), d.attach && d.attach(a, e || null) }), Fd("extraKeys", null), Fd("lineWrapping", !1, B, !0), Fd("gutters", [], function(a) { K(a.options), F(a) }, !0), Fd("fixedGutter", !0, function(a, b) { a.display.gutters.style.left = b ? V(a.display) + "px" : "0", a.refresh() }, !0), Fd("coverGutterNextToScrollbar", !1, function(a) { P(a) }, !0), Fd("scrollbarStyle", "native", function(a) { O(a), P(a), a.display.scrollbars.setScrollTop(a.doc.scrollTop), a.display.scrollbars.setScrollLeft(a.doc.scrollLeft) }, !0), Fd("lineNumbers", !1, function(a) { K(a.options), F(a) }, !0), Fd("firstLineNumber", 1, F, !0), Fd("lineNumberFormatter", function(a) { return a }, F, !0), Fd("showCursorWhenSelecting", !1, gb, !0), Fd("resetSelectionOnContextMenu", !0), Fd("lineWiseCopyCut", !0), Fd("readOnly", !1, function(a, b) { "nocursor" == b ? (bd(a), a.display.input.blur(), a.display.disabled = !0) : a.display.disabled = !1, a.display.input.readOnlyChanged(b) }), Fd("disableInput", !1, function(a, b) { b || a.display.input.reset() }, !0), Fd("dragDrop", !0, tc), Fd("allowDropFileTypes", null), Fd("cursorBlinkRate", 530), Fd("cursorScrollMargin", 0), Fd("cursorHeight", 1, gb, !0), Fd("singleCursorHeightPerLine", !0, gb, !0), Fd("workTime", 100), Fd("workDelay", 100), Fd("flattenSpans", !0, A, !0), Fd("addModeClass", !1, A, !0), Fd("pollInterval", 100), Fd("undoDepth", 200, function(a, b) { a.doc.history.undoDepth = b }), Fd("historyEventDelay", 1250), Fd("viewportMargin", 10, function(a) { a.refresh() }, !0), Fd("maxHighlightLength", 1e4, A, !0), Fd("moveInputWithCursor", !0, function(a, b) { b || a.display.input.resetPosition() }), Fd("tabindex", null, function(a, b) { a.display.input.getField() .tabIndex = b || "" }), Fd("autofocus", null); var Hd = x.modes = {}, Id = x.mimeModes = {}; x.defineMode = function(a, b) { x.defaults.mode || "null" == a || (x.defaults.mode = a), arguments.length > 2 && (b.dependencies = Array.prototype.slice.call(arguments, 2)), Hd[a] = b }, x.defineMIME = function(a, b) { Id[a] = b }, x.resolveMode = function(a) { if ("string" == typeof a && Id.hasOwnProperty(a)) a = Id[a]; else if (a && "string" == typeof a.name && Id.hasOwnProperty(a.name)) { var b = Id[a.name]; "string" == typeof b && (b = { name: b }), a = lg(b, a), a.name = b.name } else if ("string" == typeof a && /^[\w\-]+\/[\w\-]+\+xml$/.test(a)) return x.resolveMode("application/xml"); return "string" == typeof a ? { name: a } : a || { name: "null" } }, x.getMode = function(a, b) { var b = x.resolveMode(b), c = Hd[b.name]; if (!c) return x.getMode(a, "text/plain"); var d = c(a, b); if (Jd.hasOwnProperty(b.name)) { var e = Jd[b.name]; for (var f in e) e.hasOwnProperty(f) && (d.hasOwnProperty(f) && (d["_" + f] = d[f]), d[f] = e[f]) } if (d.name = b.name, b.helperType && (d.helperType = b.helperType), b.modeProps) for (var f in b.modeProps) d[f] = b.modeProps[f]; return d }, x.defineMode("null", function() { return { token: function(a) { a.skipToEnd() } } }), x.defineMIME("text/plain", "null"); var Jd = x.modeExtensions = {}; x.extendMode = function(a, b) { var c = Jd.hasOwnProperty(a) ? Jd[a] : Jd[a] = {}; mg(b, c) }, x.defineExtension = function(a, b) { x.prototype[a] = b }, x.defineDocExtension = function(a, b) { df.prototype[a] = b }, x.defineOption = Fd; var Kd = []; x.defineInitHook = function(a) { Kd.push(a) }; var Ld = x.helpers = {}; x.registerHelper = function(a, b, c) { Ld.hasOwnProperty(a) || (Ld[a] = x[a] = { _global: [] }), Ld[a][b] = c }, x.registerGlobalHelper = function(a, b, c, d) { x.registerHelper(a, b, d), Ld[a]._global.push({ pred: c, val: d }) }; var Md = x.copyState = function(a, b) { if (b === !0) return b; if (a.copyState) return a.copyState(b); var c = {}; for (var d in b) { var e = b[d]; e instanceof Array && (e = e.concat([])), c[d] = e } return c }, Nd = x.startState = function(a, b, c) { return a.startState ? a.startState(b, c) : !0 }; x.innerMode = function(a, b) { for (; a.innerMode;) { var c = a.innerMode(b); if (!c || c.mode == a) break; b = c.state, a = c.mode } return c || { mode: a, state: b } }; var Od = x.commands = { selectAll: function(a) { a.setSelection(qa(a.firstLine(), 0), qa(a.lastLine()), $f) }, singleSelection: function(a) { a.setSelection(a.getCursor("anchor"), a.getCursor("head"), $f) }, killLine: function(a) { Ad(a, function(b) { if (b.empty()) { var c = jf(a.doc, b.head.line) .text.length; return b.head.ch == c && b.head.line < a.lastLine() ? { from: b.head, to: qa(b.head.line + 1, 0) } : { from: b.head, to: qa(b.head.line, c) } } return { from: b.from(), to: b.to() } }) }, deleteLine: function(a) { Ad(a, function(b) { return { from: qa(b.from() .line, 0), to: Pa(a.doc, qa(b.to() .line + 1, 0)) } }) }, delLineLeft: function(a) { Ad(a, function(a) { return { from: qa(a.from() .line, 0), to: a.from() } }) }, delWrappedLineLeft: function(a) { Ad(a, function(b) { var c = a.charCoords(b.head, "div") .top + 5, d = a.coordsChar({ left: 0, top: c }, "div"); return { from: d, to: b.from() } }) }, delWrappedLineRight: function(a) { Ad(a, function(b) { var c = a.charCoords(b.head, "div") .top + 5, d = a.coordsChar({ left: a.display.lineDiv.offsetWidth + 100, top: c }, "div"); return { from: b.from(), to: d } }) }, undo: function(a) { a.undo() }, redo: function(a) { a.redo() }, undoSelection: function(a) { a.undoSelection() }, redoSelection: function(a) { a.redoSelection() }, goDocStart: function(a) { a.extendSelection(qa(a.firstLine(), 0)) }, goDocEnd: function(a) { a.extendSelection(qa(a.lastLine())) }, goLineStart: function(a) { a.extendSelectionsBy(function(b) { return Yg(a, b.head.line) }, { origin: "+move", bias: 1 }) }, goLineStartSmart: function(a) { a.extendSelectionsBy(function(b) { return $g(a, b.head) }, { origin: "+move", bias: 1 }) }, goLineEnd: function(a) { a.extendSelectionsBy(function(b) { return Zg(a, b.head.line) }, { origin: "+move", bias: -1 }) }, goLineRight: function(a) { a.extendSelectionsBy(function(b) { var c = a.charCoords(b.head, "div") .top + 5; return a.coordsChar({ left: a.display.lineDiv.offsetWidth + 100, top: c }, "div") }, ag) }, goLineLeft: function(a) { a.extendSelectionsBy(function(b) { var c = a.charCoords(b.head, "div") .top + 5; return a.coordsChar({ left: 0, top: c }, "div") }, ag) }, goLineLeftSmart: function(a) { a.extendSelectionsBy(function(b) { var c = a.charCoords(b.head, "div") .top + 5, d = a.coordsChar({ left: 0, top: c }, "div"); return d.ch < a.getLine(d.line) .search(/\S/) ? $g(a, b.head) : d }, ag) }, goLineUp: function(a) { a.moveV(-1, "line") }, goLineDown: function(a) { a.moveV(1, "line") }, goPageUp: function(a) { a.moveV(-1, "page") }, goPageDown: function(a) { a.moveV(1, "page") }, goCharLeft: function(a) { a.moveH(-1, "char") }, goCharRight: function(a) { a.moveH(1, "char") }, goColumnLeft: function(a) { a.moveH(-1, "column") }, goColumnRight: function(a) { a.moveH(1, "column") }, goWordLeft: function(a) { a.moveH(-1, "word") }, goGroupRight: function(a) { a.moveH(1, "group") }, goGroupLeft: function(a) { a.moveH(-1, "group") }, goWordRight: function(a) { a.moveH(1, "word") }, delCharBefore: function(a) { a.deleteH(-1, "char") }, delCharAfter: function(a) { a.deleteH(1, "char") }, delWordBefore: function(a) { a.deleteH(-1, "word") }, delWordAfter: function(a) { a.deleteH(1, "word") }, delGroupBefore: function(a) { a.deleteH(-1, "group") }, delGroupAfter: function(a) { a.deleteH(1, "group") }, indentAuto: function(a) { a.indentSelection("smart") }, indentMore: function(a) { a.indentSelection("add") }, indentLess: function(a) { a.indentSelection("subtract") }, insertTab: function(a) { a.replaceSelection(" ") }, insertSoftTab: function(a) { for (var b = [], c = a.listSelections(), d = a.options.tabSize, e = 0; e < c.length; e++) { var f = c[e].from(), g = cg(a.getLine(f.line), f.ch, d); b.push(new Array(d - g % d + 1) .join(" ")) } a.replaceSelections(b) }, defaultTab: function(a) { a.somethingSelected() ? a.indentSelection("add") : a.execCommand("insertTab") }, transposeChars: function(a) { fc(a, function() { for (var b = a.listSelections(), c = [], d = 0; d < b.length; d++) { var e = b[d].head, f = jf(a.doc, e.line) .text; if (f) if (e.ch == f.length && (e = new qa(e.line, e.ch - 1)), e.ch > 0) e = new qa(e.line, e.ch + 1), a.replaceRange(f.charAt(e.ch - 1) + f.charAt(e.ch - 2), qa(e.line, e.ch - 2), e, "+transpose"); else if (e.line > a.doc.first) { var g = jf(a.doc, e.line - 1) .text; g && a.replaceRange(f.charAt(0) + a.doc.lineSeparator() + g.charAt(g.length - 1), qa(e.line - 1, g.length - 1), qa(e.line, 1), "+transpose") } c.push(new La(e, e)) } a.setSelections(c) }) }, newlineAndIndent: function(a) { fc(a, function() { for (var b = a.listSelections() .length, c = 0; b > c; c++) { var d = a.listSelections()[c]; a.replaceRange(a.doc.lineSeparator(), d.anchor, d.head, "+input"), a.indentLine(d.from() .line + 1, null, !0) } wd(a) }) }, toggleOverwrite: function(a) { a.toggleOverwrite() } }, Pd = x.keyMap = {}; Pd.basic = { Left: "goCharLeft", Right: "goCharRight", Up: "goLineUp", Down: "goLineDown", End: "goLineEnd", Home: "goLineStartSmart", PageUp: "goPageUp", PageDown: "goPageDown", Delete: "delCharAfter", Backspace: "delCharBefore", "Shift-Backspace": "delCharBefore", Tab: "defaultTab", "Shift-Tab": "indentAuto", Enter: "newlineAndIndent", Insert: "toggleOverwrite", Esc: "singleSelection" }, Pd.pcDefault = { "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", fallthrough: "basic" }, Pd.emacsy = { "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" }, Pd.macDefault = { "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", fallthrough: ["basic", "emacsy"] }, Pd["default"] = q ? Pd.macDefault : Pd.pcDefault, x.normalizeKeyMap = function(a) { var b = {}; for (var c in a) if (a.hasOwnProperty(c)) { var d = a[c]; if (/^(name|fallthrough|(de|at)tach)$/.test(c)) continue; if ("..." == d) { delete a[c]; continue } for (var e = jg(c.split(" "), Qd), f = 0; f < e.length; f++) { var g, h; f == e.length - 1 ? (h = e.join(" "), g = d) : (h = e.slice(0, f + 1) .join(" "), g = "..."); var i = b[h]; if (i) { if (i != g) throw new Error("Inconsistent bindings for " + h) } else b[h] = g } delete a[c] } for (var j in b) a[j] = b[j]; return a }; var Rd = x.lookupKey = function(a, b, c, d) { b = Ud(b); var e = b.call ? b.call(a, d) : b[a]; if (e === !1) return "nothing"; if ("..." === e) return "multi"; if (null != e && c(e)) return "handled"; if (b.fallthrough) { if ("[object Array]" != Object.prototype.toString.call(b.fallthrough)) return Rd(a, b.fallthrough, c, d); for (var f = 0; f < b.fallthrough.length; f++) { var g = Rd(a, b.fallthrough[f], c, d); if (g) return g } } }, Sd = x.isModifierKey = function(a) { var b = "string" == typeof a ? a : Sg[a.keyCode]; return "Ctrl" == b || "Alt" == b || "Shift" == b || "Mod" == b }, Td = x.keyName = function(a, b) { if (k && 34 == a.keyCode && a["char"]) return !1; var c = Sg[a.keyCode], d = c; return null == d || a.altGraphKey ? !1 : (a.altKey && "Alt" != c && (d = "Alt-" + d), (t ? a.metaKey : a.ctrlKey) && "Ctrl" != c && (d = "Ctrl-" + d), (t ? a.ctrlKey : a.metaKey) && "Cmd" != c && (d = "Cmd-" + d), !b && a.shiftKey && "Shift" != c && (d = "Shift-" + d), d) }; x.fromTextArea = function(a, b) { function d() { a.value = i.getValue() } if (b = b ? mg(b) : {}, b.value = a.value, !b.tabindex && a.tabIndex && (b.tabindex = a.tabIndex), !b.placeholder && a.placeholder && (b.placeholder = a.placeholder), null == b.autofocus) { var c = zg(); b.autofocus = c == a || null != a.getAttribute("autofocus") && c == document.body } if (a.form && (Mf(a.form, "submit", d), !b.leaveSubmitMethodAlone)) { var e = a.form, f = e.submit; try { var g = e.submit = function() { d(), e.submit = f, e.submit(), e.submit = g } } catch (h) {} } b.finishInit = function(b) { b.save = d, b.getTextArea = function() { return a }, b.toTextArea = function() { b.toTextArea = isNaN, d(), a.parentNode.removeChild(b.getWrapperElement()), a.style.display = "", a.form && (Pf(a.form, "submit", d), "function" == typeof a.form.submit && (a.form.submit = f)) } }, a.style.display = "none"; var i = x(function(b) { a.parentNode.insertBefore(b, a.nextSibling) }, b); return i }; var Vd = x.StringStream = function(a, b) { this.pos = this.start = 0, this.string = a, this.tabSize = b || 8, this.lastColumnPos = this.lastColumnValue = 0, this.lineStart = 0 }; Vd.prototype = { eol: function() { return this.pos >= this.string.length }, sol: function() { return this.pos == this.lineStart }, peek: function() { return this.string.charAt(this.pos) || void 0 }, next: function() { return this.pos < this.string.length ? this.string.charAt(this.pos++) : void 0 }, eat: function(a) { var b = this.string.charAt(this.pos); if ("string" == typeof a) var c = b == a; else var c = b && (a.test ? a.test(b) : a(b)); return c ? (++this.pos, b) : void 0 }, eatWhile: function(a) { for (var b = this.pos; this.eat(a);); return this.pos > b }, eatSpace: function() { for (var a = this.pos; /[\s\u00a0]/.test(this.string.charAt(this.pos));) ++this.pos; return this.pos > a }, skipToEnd: function() { this.pos = this.string.length }, skipTo: function(a) { var b = this.string.indexOf(a, this.pos); return b > -1 ? (this.pos = b, !0) : void 0 }, backUp: function(a) { this.pos -= a }, column: function() { return this.lastColumnPos < this.start && (this.lastColumnValue = cg(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue), this.lastColumnPos = this.start), this.lastColumnValue - (this.lineStart ? cg(this.string, this.lineStart, this.tabSize) : 0) }, indentation: function() { return cg(this.string, null, this.tabSize) - (this.lineStart ? cg(this.string, this.lineStart, this.tabSize) : 0) }, match: function(a, b, c) { if ("string" != typeof a) { var f = this.string.slice(this.pos) .match(a); return f && f.index > 0 ? null : (f && b !== !1 && (this.pos += f[0].length), f) } var d = function(a) { return c ? a.toLowerCase() : a }, e = this.string.substr(this.pos, a.length); return d(e) == d(a) ? (b !== !1 && (this.pos += a.length), !0) : void 0 }, current: function() { return this.string.slice(this.start, this.pos) }, hideFirstChars: function(a, b) { this.lineStart += a; try { return b() } finally { this.lineStart -= a } } }; var Wd = 0, Xd = x.TextMarker = function(a, b) { this.lines = [], this.type = b, this.doc = a, this.id = ++Wd }; Xf(Xd), Xd.prototype.clear = function() { if (!this.explicitlyCleared) { var a = this.doc.cm, b = a && !a.curOp; if (b && Yb(a), Wf(this, "clear")) { var c = this.find(); c && Sf(this, "clear", c.from, c.to) } for (var d = null, e = null, f = 0; f < this.lines.length; ++f) { var g = this.lines[f], h = de(g.markedSpans, this); a && !this.collapsed ? mc(a, nf(g), "text") : a && (null != h.to && (e = nf(g)), null != h.from && (d = nf(g))), g.markedSpans = ee(g.markedSpans, h), null == h.from && this.collapsed && !ze(this.doc, g) && a && mf(g, Ub(a.display)) } if (a && this.collapsed && !a.options.lineWrapping) for (var f = 0; f < this.lines.length; ++f) { var i = ve(this.lines[f]), j = I(i); j > a.display.maxLineLength && (a.display.maxLine = i, a.display.maxLineLength = j, a.display.maxLineChanged = !0) } null != d && a && this.collapsed && lc(a, d, e + 1), this.lines.length = 0, this.explicitlyCleared = !0, this.atomic && this.doc.cantEdit && (this.doc.cantEdit = !1, a && bb(a.doc)), a && Sf(a, "markerCleared", a, this), b && $b(a), this.parent && this.parent.clear() } }, Xd.prototype.find = function(a, b) { null == a && "bookmark" == this.type && (a = 1); for (var c, d, e = 0; e < this.lines.length; ++e) { var f = this.lines[e], g = de(f.markedSpans, this); if (null != g.from && (c = qa(b ? f : nf(f), g.from), -1 == a)) return c; if (null != g.to && (d = qa(b ? f : nf(f), g.to), 1 == a)) return d } return c && { from: c, to: d } }, Xd.prototype.changed = function() { var a = this.find(-1, !0), b = this, c = this.doc.cm; a && c && fc(c, function() { var d = a.line, e = nf(a.line), f = zb(c, e); if (f && (Gb(f), c.curOp.selectionChanged = c.curOp.forceUpdate = !0), c.curOp.updateMaxLine = !0, !ze(b.doc, d) && null != b.height) { var g = b.height; b.height = null; var h = De(b) - g; h && mf(d, d.height + h) } }) }, Xd.prototype.attachLine = function(a) { if (!this.lines.length && this.doc.cm) { var b = this.doc.cm.curOp; b.maybeHiddenMarkers && -1 != ig(b.maybeHiddenMarkers, this) || (b.maybeUnhiddenMarkers || (b.maybeUnhiddenMarkers = [])) .push(this) } this.lines.push(a) }, Xd.prototype.detachLine = function(a) { if (this.lines.splice(ig(this.lines, a), 1), !this.lines.length && this.doc.cm) { var b = this.doc.cm.curOp; (b.maybeHiddenMarkers || (b.maybeHiddenMarkers = [])) .push(this) } }; var Wd = 0, Zd = x.SharedTextMarker = function(a, b) { this.markers = a, this.primary = b; for (var c = 0; c < a.length; ++c) a[c].parent = this }; Xf(Zd), Zd.prototype.clear = function() { if (!this.explicitlyCleared) { this.explicitlyCleared = !0; for (var a = 0; a < this.markers.length; ++a) this.markers[a].clear(); Sf(this, "clear") } }, Zd.prototype.find = function(a, b) { return this.primary.find(a, b) }; var Be = x.LineWidget = function(a, b, c) { if (c) for (var d in c) c.hasOwnProperty(d) && (this[d] = c[d]); this.doc = a, this.node = b }; Xf(Be), Be.prototype.clear = function() { var a = this.doc.cm, b = this.line.widgets, c = this.line, d = nf(c); if (null != d && b) { for (var e = 0; e < b.length; ++e) b[e] == this && b.splice(e--, 1); b.length || (c.widgets = null); var f = De(this); mf(c, Math.max(0, c.height - f)), a && fc(a, function() { Ce(a, c, -f), mc(a, d, "widget") }) } }, Be.prototype.changed = function() { var a = this.height, b = this.doc.cm, c = this.line; this.height = null; var d = De(this) - a; d && (mf(c, c.height + d), b && fc(b, function() { b.curOp.forceUpdate = !0, Ce(b, c, d) })) }; var Fe = x.Line = function(a, b, c) { this.text = a, ne(this, b), this.height = c ? c(this) : 1 }; Xf(Fe), Fe.prototype.lineNo = function() { return nf(this) }; var Qe = {}, Re = {}; af.prototype = { chunkSize: function() { return this.lines.length }, removeInner: function(a, b) { for (var c = a, d = a + b; d > c; ++c) { var e = this.lines[c]; this.height -= e.height, He(e), Sf(e, "delete") } this.lines.splice(a, b) }, collapse: function(a) { a.push.apply(a, this.lines) }, insertInner: function(a, b, c) { this.height += c, this.lines = this.lines.slice(0, a) .concat(b) .concat(this.lines.slice(a)); for (var d = 0; d < b.length; ++d) b[d].parent = this }, iterN: function(a, b, c) { for (var d = a + b; d > a; ++a) if (c(this.lines[a])) return !0 } }, bf.prototype = { chunkSize: function() { return this.size }, removeInner: function(a, b) { this.size -= b; for (var c = 0; c < this.children.length; ++c) { var d = this.children[c], e = d.chunkSize(); if (e > a) { var f = Math.min(b, e - a), g = d.height; if (d.removeInner(a, f), this.height -= g - d.height, e == f && (this.children.splice(c--, 1), d.parent = null), 0 == (b -= f)) break; a = 0 } else a -= e } if (this.size - b < 25 && (this.children.length > 1 || !(this.children[0] instanceof af))) { var h = []; this.collapse(h), this.children = [new af(h)], this.children[0].parent = this } }, collapse: function(a) { for (var b = 0; b < this.children.length; ++b) this.children[b].collapse(a) }, insertInner: function(a, b, c) { this.size += b.length, this.height += c; for (var d = 0; d < this.children.length; ++d) { var e = this.children[d], f = e.chunkSize(); if (f >= a) { if (e.insertInner(a, b, c), e.lines && e.lines.length > 50) { for (; e.lines.length > 50;) { var g = e.lines.splice(e.lines.length - 25, 25), h = new af(g); e.height -= h.height, this.children.splice(d + 1, 0, h), h.parent = this } this.maybeSpill() } break } a -= f } }, maybeSpill: function() { if (!(this.children.length <= 10)) { var a = this; do { var b = a.children.splice(a.children.length - 5, 5), c = new bf(b); if (a.parent) { a.size -= c.size, a.height -= c.height; var e = ig(a.parent.children, a); a.parent.children.splice(e + 1, 0, c) } else { var d = new bf(a.children); d.parent = a, a.children = [d, c], a = d } c.parent = a.parent } while (a.children.length > 10); a.parent.maybeSpill() } }, iterN: function(a, b, c) { for (var d = 0; d < this.children.length; ++d) { var e = this.children[d], f = e.chunkSize(); if (f > a) { var g = Math.min(b, f - a); if (e.iterN(a, g, c)) return !0; if (0 == (b -= g)) break; a = 0 } else a -= f } } }; var cf = 0, df = x.Doc = function(a, b, c, d) { if (!(this instanceof df)) return new df(a, b, c, d); null == c && (c = 0), bf.call(this, [new af([new Fe("", null)])]), this.first = c, this.scrollTop = this.scrollLeft = 0, this.cantEdit = !1, this.cleanGeneration = 1, this.frontier = c; var e = qa(c, 0); this.sel = Na(e), this.history = new rf(null), this.id = ++cf, this.modeOption = b, this.lineSep = d, this.extend = !1, "string" == typeof a && (a = this.splitLines(a)), _e(this, { from: e, to: e, text: a }), $a(this, Na(e), $f) }; df.prototype = lg(bf.prototype, { constructor: df, iter: function(a, b, c) { c ? this.iterN(a - this.first, b - a, c) : this.iterN(this.first, this.first + this.size, a) }, insert: function(a, b) { for (var c = 0, d = 0; d < b.length; ++d) c += b[d].height; this.insertInner(a - this.first, b, c) }, remove: function(a, b) { this.removeInner(a - this.first, b) }, getValue: function(a) { var b = lf(this, this.first, this.first + this.size); return a === !1 ? b : b.join(a || this.lineSeparator()) }, setValue: ic(function(a) { var b = qa(this.first, 0), c = this.first + this.size - 1; kd(this, { from: b, to: qa(c, jf(this, c) .text.length), text: this.splitLines(a), origin: "setValue", full: !0 }, !0), $a(this, Na(b)) }), replaceRange: function(a, b, c, d) { b = Pa(this, b), c = c ? Pa(this, c) : b, qd(this, a, b, c, d) }, getRange: function(a, b, c) { var d = kf(this, Pa(this, a), Pa(this, b)); return c === !1 ? d : d.join(c || this.lineSeparator()) }, getLine: function(a) { var b = this.getLineHandle(a); return b && b.text }, getLineHandle: function(a) { return Ra(this, a) ? jf(this, a) : void 0 }, getLineNumber: function(a) { return nf(a) }, getLineHandleVisualStart: function(a) { return "number" == typeof a && (a = jf(this, a)), ve(a) }, lineCount: function() { return this.size }, firstLine: function() { return this.first }, lastLine: function() { return this.first + this.size - 1 }, clipPos: function(a) { return Pa(this, a) }, getCursor: function(a) { var c, b = this.sel.primary(); return c = null == a || "head" == a ? b.head : "anchor" == a ? b.anchor : "end" == a || "to" == a || a === !1 ? b.to() : b.from() }, listSelections: function() { return this.sel.ranges }, somethingSelected: function() { return this.sel.somethingSelected() }, setCursor: ic(function(a, b, c) { Xa(this, Pa(this, "number" == typeof a ? qa(a, b || 0) : a), null, c) }), setSelection: ic(function(a, b, c) { Xa(this, Pa(this, a), Pa(this, b || a), c) }), extendSelection: ic(function(a, b, c) { Ua(this, Pa(this, a), b && Pa(this, b), c) }), extendSelections: ic(function(a, b) { Va(this, Sa(this, a), b) }), extendSelectionsBy: ic(function(a, b) { var c = jg(this.sel.ranges, a); Va(this, Sa(this, c), b) }), setSelections: ic(function(a, b, c) { if (a.length) { for (var d = 0, e = []; d < a.length; d++) e[d] = new La(Pa(this, a[d].anchor), Pa(this, a[d].head)); null == b && (b = Math.min(a.length - 1, this.sel.primIndex)), $a(this, Ma(e, b), c) } }), addSelection: ic(function(a, b, c) { var d = this.sel.ranges.slice(0); d.push(new La(Pa(this, a), Pa(this, b || a))), $a(this, Ma(d, d.length - 1), c) }), getSelection: function(a) { for (var c, b = this.sel.ranges, d = 0; d < b.length; d++) { var e = kf(this, b[d].from(), b[d].to()); c = c ? c.concat(e) : e } return a === !1 ? c : c.join(a || this.lineSeparator()) }, getSelections: function(a) { for (var b = [], c = this.sel.ranges, d = 0; d < c.length; d++) { var e = kf(this, c[d].from(), c[d].to()); a !== !1 && (e = e.join(a || this.lineSeparator())), b[d] = e } return b }, replaceSelection: function(a, b, c) { for (var d = [], e = 0; e < this.sel.ranges.length; e++) d[e] = a; this.replaceSelections(d, b, c || "+input") }, replaceSelections: ic(function(a, b, c) { for (var d = [], e = this.sel, f = 0; f < e.ranges.length; f++) { var g = e.ranges[f]; d[f] = { from: g.from(), to: g.to(), text: this.splitLines(a[f]), origin: c } } for (var h = b && "end" != b && id(this, d, b), f = d.length - 1; f >= 0; f--) kd(this, d[f]); h ? Za(this, h) : this.cm && wd(this.cm) }), undo: ic(function() { md(this, "undo") }), redo: ic(function() { md(this, "redo") }), undoSelection: ic(function() { md(this, "undo", !0) }), redoSelection: ic(function() { md(this, "redo", !0) }), setExtending: function(a) { this.extend = a }, getExtending: function() { return this.extend }, historySize: function() { for (var a = this.history, b = 0, c = 0, d = 0; d < a.done.length; d++) a.done[d].ranges || ++b; for (var d = 0; d < a.undone.length; d++) a.undone[d].ranges || ++c; return { undo: b, redo: c } }, clearHistory: function() { this.history = new rf(this.history.maxGeneration) }, markClean: function() { this.cleanGeneration = this.changeGeneration(!0) }, changeGeneration: function(a) { return a && (this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null), this.history.generation }, isClean: function(a) { return this.history.generation == (a || this.cleanGeneration) }, getHistory: function() { return { done: Cf(this.history.done), undone: Cf(this.history.undone) } }, setHistory: function(a) { var b = this.history = new rf(this.history.maxGeneration); b.done = Cf(a.done.slice(0), null, !0), b.undone = Cf(a.undone.slice(0), null, !0) }, addLineClass: ic(function(a, b, c) { return zd(this, a, "gutter" == b ? "gutter" : "class", function(a) { var d = "text" == b ? "textClass" : "background" == b ? "bgClass" : "gutter" == b ? "gutterClass" : "wrapClass"; if (a[d]) { if (Ag(c) .test(a[d])) return !1; a[d] += " " + c } else a[d] = c; return !0 }) }), removeLineClass: ic(function(a, b, c) { return zd(this, a, "gutter" == b ? "gutter" : "class", function(a) { var d = "text" == b ? "textClass" : "background" == b ? "bgClass" : "gutter" == b ? "gutterClass" : "wrapClass", e = a[d]; if (!e) return !1; if (null == c) a[d] = null; else { var f = e.match(Ag(c)); if (!f) return !1; var g = f.index + f[0].length; a[d] = e.slice(0, f.index) + (f.index && g != e.length ? " " : "") + e.slice(g) || null } return !0 }) }), addLineWidget: ic(function(a, b, c) { return Ee(this, a, b, c) }), removeLineWidget: function(a) { a.clear() }, markText: function(a, b, c) { return Yd(this, Pa(this, a), Pa(this, b), c, c && c.type || "range") }, setBookmark: function(a, b) { var c = { replacedWith: b && (null == b.nodeType ? b.widget : b), insertLeft: b && b.insertLeft, clearWhenEmpty: !1, shared: b && b.shared, handleMouseEvents: b && b.handleMouseEvents }; return a = Pa(this, a), Yd(this, a, a, c, "bookmark") }, findMarksAt: function(a) { a = Pa(this, a); var b = [], c = jf(this, a.line) .markedSpans; if (c) for (var d = 0; d < c.length; ++d) { var e = c[d]; (null == e.from || e.from <= a.ch) && (null == e.to || e.to >= a.ch) && b.push(e.marker.parent || e.marker) } return b }, findMarks: function(a, b, c) { a = Pa(this, a), b = Pa(this, b); var d = [], e = a.line; return this.iter(a.line, b.line + 1, function(f) { var g = f.markedSpans; if (g) for (var h = 0; h < g.length; h++) { var i = g[h]; null != i.to && e == a.line && a.ch > i.to || null == i.from && e != a.line || null != i.from && e == b.line && i.from > b.ch || c && !c(i.marker) || d.push(i.marker.parent || i.marker) }++e }), d }, getAllMarks: function() { var a = []; return this.iter(function(b) { var c = b.markedSpans; if (c) for (var d = 0; d < c.length; ++d) null != c[d].from && a.push(c[d].marker) }), a }, posFromIndex: function(a) { var b, c = this.first; return this.iter(function(d) { var e = d.text.length + 1; return e > a ? (b = a, !0) : (a -= e, void++c) }), Pa(this, qa(c, b)) }, indexFromPos: function(a) { a = Pa(this, a); var b = a.ch; return a.line < this.first || a.ch < 0 ? 0 : (this.iter(this.first, a.line, function(a) { b += a.text.length + 1 }), b) }, copy: function(a) { var b = new df(lf(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep); return b.scrollTop = this.scrollTop, b.scrollLeft = this.scrollLeft, b.sel = this.sel, b.extend = !1, a && (b.history.undoDepth = this.history.undoDepth, b.setHistory(this.getHistory())), b }, linkedDoc: function(a) { a || (a = {}); var b = this.first, c = this.first + this.size; null != a.from && a.from > b && (b = a.from), null != a.to && a.to < c && (c = a.to); var d = new df(lf(this, b, c), a.mode || this.modeOption, b, this.lineSep); return a.sharedHist && (d.history = this.history), (this.linked || (this.linked = [])) .push({ doc: d, sharedHist: a.sharedHist }), d.linked = [{ doc: this, isParent: !0, sharedHist: a.sharedHist }], ae(d, _d(this)), d }, unlinkDoc: function(a) { if (a instanceof x && (a = a.doc), this.linked) for (var b = 0; b < this.linked.length; ++b) { var c = this.linked[b]; if (c.doc == a) { this.linked.splice(b, 1), a.unlinkDoc(this), be(_d(this)); break } } if (a.history == this.history) { var d = [a.id]; gf(a, function(a) { d.push(a.id) }, !0), a.history = new rf(null), a.history.done = Cf(this.history.done, d), a.history.undone = Cf(this.history.undone, d) } }, iterLinkedDocs: function(a) { gf(this, a) }, getMode: function() { return this.mode }, getEditor: function() { return this.cm }, splitLines: function(a) { return this.lineSep ? a.split(this.lineSep) : Ng(a) }, lineSeparator: function() { return this.lineSep || "\n" } }), df.prototype.eachLine = df.prototype.iter; var ef = "iter insert remove copy getEditor constructor".split(" "); for (var ff in df.prototype) df.prototype.hasOwnProperty(ff) && ig(ef, ff) < 0 && (x.prototype[ff] = function(a) { return function() { return a.apply(this.doc, arguments) } }(df.prototype[ff])); Xf(df); var Gf = x.e_preventDefault = function(a) { a.preventDefault ? a.preventDefault() : a.returnValue = !1 }, Hf = x.e_stopPropagation = function(a) { a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0 }, Jf = x.e_stop = function(a) { Gf(a), Hf(a) }, Mf = x.on = function(a, b, c) { if (a.addEventListener) a.addEventListener(b, c, !1); else if (a.attachEvent) a.attachEvent("on" + b, c); else { var d = a._handlers || (a._handlers = {}), e = d[b] || (d[b] = []); e.push(c) } }, Nf = [], Pf = x.off = function(a, b, c) { if (a.removeEventListener) a.removeEventListener(b, c, !1); else if (a.detachEvent) a.detachEvent("on" + b, c); else for (var d = Of(a, b, !1), e = 0; e < d.length; ++e) if (d[e] == c) { d.splice(e, 1); break } }, Qf = x.signal = function(a, b) { var c = Of(a, b, !0); if (c.length) for (var d = Array.prototype.slice.call(arguments, 2), e = 0; e < c.length; ++e) c[e].apply(null, d) }, Rf = null, Yf = 30, Zf = x.Pass = { toString: function() { return "CodeMirror.Pass" } }, $f = { scroll: !1 }, _f = { origin: "*mouse" }, ag = { origin: "+move" }; bg.prototype.set = function(a, b) { clearTimeout(this.id), this.id = setTimeout(b, a) }; var cg = x.countColumn = function(a, b, c, d, e) { null == b && (b = a.search(/[^\s\u00a0]/), -1 == b && (b = a.length)); for (var f = d || 0, g = e || 0;;) { var h = a.indexOf(" ", f); if (0 > h || h >= b) return g + (b - f); g += h - f, g += c - g % c, f = h + 1 } }, dg = x.findColumn = function(a, b, c) { for (var d = 0, e = 0;;) { var f = a.indexOf(" ", d); - 1 == f && (f = a.length); var g = f - d; if (f == a.length || e + g >= b) return d + Math.min(g, b - e); if (e += f - d, e += c - e % c, d = f + 1, e >= b) return d } }, eg = [""], hg = function(a) { a.select() }; o ? hg = function(a) { a.selectionStart = 0, a.selectionEnd = a.value.length } : f && (hg = function(a) { try { a.select() } catch (b) {} }); var vg, og = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/, pg = x.isWordChar = function(a) { return /\w/.test(a) || a > "\x80" && (a.toUpperCase() != a.toLowerCase() || og.test(a)) }, sg = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; vg = document.createRange ? function(a, b, c, d) { var e = document.createRange(); return e.setEnd(d || a, c), e.setStart(a, b), e } : function(a, b, c) { var d = document.body.createTextRange(); try { d.moveToElementText(a.parentNode) } catch (e) { return d } return d.collapse(!0), d.moveEnd("character", c), d.moveStart("character", b), d }; var yg = x.contains = function(a, b) { if (3 == b.nodeType && (b = b.parentNode), a.contains) return a.contains(b); do if (11 == b.nodeType && (b = b.host), b == a) return !0; while (b = b.parentNode) }; f && 11 > g && (zg = function() { try { return document.activeElement } catch (a) { return document.body } }); var Jg, Lg, Bg = x.rmClass = function(a, b) { var c = a.className, d = Ag(b) .exec(c); if (d) { var e = c.slice(d.index + d[0].length); a.className = c.slice(0, d.index) + (e ? d[1] + e : "") } }, Cg = x.addClass = function(a, b) { var c = a.className; Ag(b) .test(c) || (a.className += (c ? " " : "") + b) }, Fg = !1, Ig = function() { if (f && 9 > g) return !1; var a = ug("div"); return "draggable" in a || "dragDrop" in a }(), Ng = x.splitLines = 3 != "\n\nb".split(/\n/) .length ? function(a) { for (var b = 0, c = [], d = a.length; d >= b;) { var e = a.indexOf("\n", b); - 1 == e && (e = a.length); var f = a.slice(b, "\r" == a.charAt(e - 1) ? e - 1 : e), g = f.indexOf("\r"); - 1 != g ? (c.push(f.slice(0, g)), b += g + 1) : (c.push(f), b = e + 1) } return c } : function(a) { return a.split(/\r\n?|\n/) }, Og = window.getSelection ? function(a) { try { return a.selectionStart != a.selectionEnd } catch (b) { return !1 } } : function(a) { try { var b = a.ownerDocument.selection.createRange() } catch (c) {} return b && b.parentElement() == a ? 0 != b.compareEndPoints("StartToEnd", b) : !1 }, Pg = function() { var a = ug("div"); return "oncopy" in a ? !0 : (a.setAttribute("oncopy", "return;"), "function" == typeof a.oncopy) }(), Qg = null, Sg = x.keyNames = { 3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" }; ! function() { for (var a = 0; 10 > a; a++) Sg[a + 48] = Sg[a + 96] = String(a); for (var a = 65; 90 >= a; a++) Sg[a] = String.fromCharCode(a); for (var a = 1; 12 >= a; a++) Sg[a + 111] = Sg[a + 63235] = "F" + a }(); var ah, fh = function() { function c(c) { return 247 >= c ? a.charAt(c) : c >= 1424 && 1524 >= c ? "R" : c >= 1536 && 1773 >= c ? b.charAt(c - 1536) : c >= 1774 && 2220 >= c ? "r" : c >= 8192 && 8203 >= c ? "w" : 8204 == c ? "b" : "L" } function j(a, b, c) { this.level = a, this.from = b, this.to = c } var a = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN", b = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm", d = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/, e = /[stwN]/, f = /[LRr]/, g = /[Lb1n]/, h = /[1n]/, i = "L"; return function(a) { if (!d.test(a)) return !1; for (var m, b = a.length, k = [], l = 0; b > l; ++l) k.push(m = c(a.charCodeAt(l))); for (var l = 0, n = i; b > l; ++l) { var m = k[l]; "m" == m ? k[l] = n : n = m } for (var l = 0, o = i; b > l; ++l) { var m = k[l]; "1" == m && "r" == o ? k[l] = "n" : f.test(m) && (o = m, "r" == m && (k[l] = "R")) } for (var l = 1, n = k[0]; b - 1 > l; ++l) { var m = k[l]; "+" == m && "1" == n && "1" == k[l + 1] ? k[l] = "1" : "," != m || n != k[l + 1] || "1" != n && "n" != n || (k[l] = n), n = m } for (var l = 0; b > l; ++l) { var m = k[l]; if ("," == m) k[l] = "N"; else if ("%" == m) { for (var p = l + 1; b > p && "%" == k[p]; ++p); for (var q = l && "!" == k[l - 1] || b > p && "1" == k[p] ? "1" : "N", r = l; p > r; ++r) k[r] = q; l = p - 1 } } for (var l = 0, o = i; b > l; ++l) { var m = k[l]; "L" == o && "1" == m ? k[l] = "L" : f.test(m) && (o = m) } for (var l = 0; b > l; ++l) if (e.test(k[l])) { for (var p = l + 1; b > p && e.test(k[p]); ++p); for (var s = "L" == (l ? k[l - 1] : i), t = "L" == (b > p ? k[p] : i), q = s || t ? "L" : "R", r = l; p > r; ++r) k[r] = q; l = p - 1 } for (var v, u = [], l = 0; b > l;) if (g.test(k[l])) { var w = l; for (++l; b > l && g.test(k[l]); ++l); u.push(new j(0, w, l)) } else { var x = l, y = u.length; for (++l; b > l && "L" != k[l]; ++l); for (var r = x; l > r;) if (h.test(k[r])) { r > x && u.splice(y, 0, new j(1, x, r)); var z = r; for (++r; l > r && h.test(k[r]); ++r); u.splice(y, 0, new j(2, z, r)), x = r } else ++r; l > x && u.splice(y, 0, new j(1, x, l)) } return 1 == u[0].level && (v = a.match(/^\s+/)) && (u[0].from = v[0].length, u.unshift(new j(0, 0, v[0].length))), 1 == gg(u) .level && (v = a.match(/\s+$/)) && (gg(u) .to -= v[0].length, u.push(new j(0, b - v[0].length, b))), 2 == u[0].level && u.unshift(new j(1, u[0].to, u[0].to)), u[0].level != gg(u) .level && u.push(new j(u[0].level, b, b)), u } }(); return x.version = "5.12.1", x }), function(a) { "object" == typeof exports && "object" == typeof module ? a(require("../../lib/codemirror")) : "function" == typeof define && define.amd ? define(["../../lib/codemirror"], a) : a(CodeMirror) }(function(a) { "use strict"; function b(a) { return new RegExp("^((" + a.join(")|(") + "))\\b") } function h(a) { return a.scopes[a.scopes.length - 1] } var c = b(["and", "or", "not", "is"]), d = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in"], e = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr", "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max", "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", "sorted", "staticmethod", "str", "sum", "super", "tuple", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"], f = { builtins: ["apply", "basestring", "buffer", "cmp", "coerce", "execfile", "file", "intern", "long", "raw_input", "reduce", "reload", "unichr", "unicode", "xrange", "False", "True", "None"], keywords: ["exec", "print"] }, g = { builtins: ["ascii", "bytes", "exec", "print"], keywords: ["nonlocal", "False", "True", "None", "async", "await"] }; a.registerHelper("hintWords", "python", d.concat(e)), a.defineMode("python", function(i, j) { function x(a, b) { if (a.sol() && (b.indent = a.indentation()), a.sol() && "py" == h(b) .type) { var c = h(b) .offset; if (a.eatSpace()) { var d = a.indentation(); return d > c ? A(b) : c > d && C(a, b) && (b.errorToken = !0), null } var e = y(a, b); return c > 0 && C(a, b) && (e += " " + k), e } return y(a, b) } function y(a, b) { if (a.eatSpace()) return null; var d = a.peek(); if ("#" == d) return a.skipToEnd(), "comment"; if (a.match(/^[0-9\.]/, !1)) { var e = !1; if (a.match(/^\d*\.\d+(e[\+\-]?\d+)?/i) && (e = !0), a.match(/^\d+\.\d*/) && (e = !0), a.match(/^\.\d+/) && (e = !0), e) return a.eat(/J/i), "number"; var f = !1; if (a.match(/^0x[0-9a-f]+/i) && (f = !0), a.match(/^0b[01]+/i) && (f = !0), a.match(/^0o[0-7]+/i) && (f = !0), a.match(/^[1-9]\d*(e[\+\-]?\d+)?/) && (a.eat(/J/i), f = !0), a.match(/^0(?![\dx])/i) && (f = !0), f) return a.eat(/L/i), "number" } return a.match(u) ? (b.tokenize = z(a.current()), b.tokenize(a, b)) : a.match(o) || a.match(n) ? "punctuation" : a.match(m) || a.match(p) ? "operator" : a.match(l) ? "punctuation" : "." == b.lastToken && a.match(q) ? "property" : a.match(v) || a.match(c) ? "keyword" : a.match(w) ? "builtin" : a.match(/^(self|cls)\b/) ? "variable-2" : a.match(q) ? "def" == b.lastToken || "class" == b.lastToken ? "def" : "variable" : (a.next(), k) } function z(a) { function d(d, e) { for (; !d.eol();) if (d.eatWhile(/[^'"\\]/), d.eat("\\")) { if (d.next(), b && d.eol()) return c } else { if (d.match(a)) return e.tokenize = x, c; d.eat(/['"]/) } if (b) { if (j.singleLineStringErrors) return k; e.tokenize = x } return c } for (; "rub".indexOf(a.charAt(0) .toLowerCase()) >= 0;) a = a.substr(1); var b = 1 == a.length, c = "string"; return d.isString = !0, d } function A(a) { for (; "py" != h(a) .type;) a.scopes.pop(); a.scopes.push({ offset: h(a) .offset + i.indentUnit, type: "py", align: null }) } function B(a, b, c) { var d = a.match(/^([\s\[\{\(]|#.*)*$/, !1) ? null : a.column() + 1; b.scopes.push({ offset: b.indent + r, type: c, align: d }) } function C(a, b) { for (var c = a.indentation(); h(b) .offset > c;) { if ("py" != h(b) .type) return !0; b.scopes.pop() } return h(b) .offset != c } function D(a, b) { var c = b.tokenize(a, b), d = a.current(); if ("@" == d) return j.version && 3 == parseInt(j.version, 10) ? a.match(q, !1) ? "meta" : "operator" : a.match(q, !1) ? "meta" : k; "variable" != c && "builtin" != c || "meta" != b.lastToken || (c = "meta"), ("pass" == d || "return" == d) && (b.dedent += 1), "lambda" == d && (b.lambda = !0), ":" != d || b.lambda || "py" != h(b) .type || A(b); var e = 1 == d.length ? "[({".indexOf(d) : -1; if (-1 != e && B(a, b, "])}".slice(e, e + 1)), e = "])}".indexOf(d), -1 != e) { if (h(b) .type != d) return k; b.indent = b.scopes.pop() .offset - r } return b.dedent > 0 && a.eol() && "py" == h(b) .type && (b.scopes.length > 1 && b.scopes.pop(), b.dedent -= 1), c } var k = "error", l = j.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.]/, m = j.doubleOperators || /^([!<>]==|<>|<<|>>|\/\/|\*\*)/, n = j.doubleDelimiters || /^(\+=|\-=|\*=|%=|\/=|&=|\|=|\^=)/, o = j.tripleDelimiters || /^(\/\/=|>>=|<<=|\*\*=)/; if (j.version && 3 == parseInt(j.version, 10)) var p = j.singleOperators || /^[\+\-\*\/%&|\^~<>!@]/, q = j.identifiers || /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/; else var p = j.singleOperators || /^[\+\-\*\/%&|\^~<>!]/, q = j.identifiers || /^[_A-Za-z][_A-Za-z0-9]*/; var r = j.hangingIndent || i.indentUnit, s = d, t = e; if (void 0 != j.extra_keywords && (s = s.concat(j.extra_keywords)), void 0 != j.extra_builtins && (t = t.concat(j.extra_builtins)), j.version && 3 == parseInt(j.version, 10)) { s = s.concat(g.keywords), t = t.concat(g.builtins); var u = new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))", "i") } else { s = s.concat(f.keywords), t = t.concat(f.builtins); var u = new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); } var v = b(s), w = b(t), E = { startState: function(a) { return { tokenize: x, scopes: [{ offset: a || 0, type: "py", align: null }], indent: a || 0, lastToken: null, lambda: !1, dedent: 0 } }, token: function(a, b) { var c = b.errorToken; c && (b.errorToken = !1); var d = D(a, b); return d && "comment" != d && (b.lastToken = "keyword" == d || "punctuation" == d ? a.current() : d), "punctuation" == d && (d = null), a.eol() && b.lambda && (b.lambda = !1), c ? d + " " + k : d }, indent: function(b, c) { if (b.tokenize != x) return b.tokenize.isString ? a.Pass : 0; var d = h(b), e = d.type == c.charAt(0); return null != d.align ? d.align - (e ? 1 : 0) : d.offset - (e ? r : 0) }, electricInput: /^\s*[\}\]\)]$/, closeBrackets: { triples: "'\"" }, lineComment: "#", fold: "indent" }; return E }), a.defineMIME("text/x-python", "python"); var i = function(a) { return a.split(" ") }; a.defineMIME("text/x-cython", { name: "python", extra_keywords: i("by cdef cimport cpdef ctypedef enum exceptextern gil include nogil property publicreadonly struct union DEF IF ELIF ELSE") }) }), function(a) { "object" == typeof exports && "object" == typeof module ? a(require("../../lib/codemirror")) : "function" == typeof define && define.amd ? define(["../../lib/codemirror"], a) : a(CodeMirror) }(function(a) { "use strict"; function e(a) { for (var e = 0; e < a.state.activeLines.length; e++) a.removeLineClass(a.state.activeLines[e], "wrap", b), a.removeLineClass(a.state.activeLines[e], "background", c), a.removeLineClass(a.state.activeLines[e], "gutter", d) } function f(a, b) { if (a.length != b.length) return !1; for (var c = 0; c < a.length; c++) if (a[c] != b[c]) return !1; return !0 } function g(a, g) { for (var h = [], i = 0; i < g.length; i++) { var j = g[i]; if (j.empty()) { var k = a.getLineHandleVisualStart(j.head.line); h[h.length - 1] != k && h.push(k) } } f(a.state.activeLines, h) || a.operation(function() { e(a); for (var f = 0; f < h.length; f++) a.addLineClass(h[f], "wrap", b), a.addLineClass(h[f], "background", c), a.addLineClass(h[f], "gutter", d); a.state.activeLines = h }) } function h(a, b) { g(a, b.ranges) } var b = "CodeMirror-activeline", c = "CodeMirror-activeline-background", d = "CodeMirror-activeline-gutter"; a.defineOption("styleActiveLine", !1, function(b, c, d) { var f = d && d != a.Init; c && !f ? (b.state.activeLines = [], g(b, b.listSelections()), b.on("beforeSelectionChange", h)) : !c && f && (b.off("beforeSelectionChange", h), e(b), delete b.state.activeLines) }) }), function(a) { "object" == typeof exports && "object" == typeof module ? a(require("../../lib/codemirror")) : "function" == typeof define && define.amd ? define(["../../lib/codemirror"], a) : a(CodeMirror) }(function(a) { function d(a, c) { return "pairs" == c && "string" == typeof a ? a : "object" == typeof a && null != a[c] ? a[c] : b[c] } function h(a) { return function(b) { return m(b, a) } } function i(a) { var b = a.state.closeBrackets; if (!b) return null; var c = a.getModeAt(a.getCursor()); return c.closeBrackets || b } function j(b) { var e = i(b); if (!e || b.getOption("disableInput")) return a.Pass; for (var f = d(e, "pairs"), g = b.listSelections(), h = 0; h < g.length; h++) { if (!g[h].empty()) return a.Pass; var j = o(b, g[h].head); if (!j || f.indexOf(j) % 2 != 0) return a.Pass } for (var h = g.length - 1; h >= 0; h--) { var k = g[h].head; b.replaceRange("", c(k.line, k.ch - 1), c(k.line, k.ch + 1), "+delete") } } function k(b) { var c = i(b), e = c && d(c, "explode"); if (!e || b.getOption("disableInput")) return a.Pass; for (var f = b.listSelections(), g = 0; g < f.length; g++) { if (!f[g].empty()) return a.Pass; var h = o(b, f[g].head); if (!h || e.indexOf(h) % 2 != 0) return a.Pass } b.operation(function() { b.replaceSelection("\n\n", null), b.execCommand("goCharLeft"), f = b.listSelections(); for (var a = 0; a < f.length; a++) { var c = f[a].head.line; b.indentLine(c, null, !0), b.indentLine(c + 1, null, !0) } }) } function l(b) { var d = a.cmpPos(b.anchor, b.head) > 0; return { anchor: new c(b.anchor.line, b.anchor.ch + (d ? -1 : 1)), head: new c(b.head.line, b.head.ch + (d ? 1 : -1)) } } function m(b, e) { var f = i(b); if (!f || b.getOption("disableInput")) return a.Pass; var g = d(f, "pairs"), h = g.indexOf(e); if (-1 == h) return a.Pass; for (var q, r, j = d(f, "triples"), k = g.charAt(h + 1) == e, m = b.listSelections(), o = h % 2 == 0, s = 0; s < m.length; s++) { var v, t = m[s], u = t.head, r = b.getRange(u, c(u.line, u.ch + 1)); if (o && !t.empty()) v = "surround"; else if (!k && o || r != e) if (k && u.ch > 1 && j.indexOf(e) >= 0 && b.getRange(c(u.line, u.ch - 2), u) == e + e && (u.ch <= 2 || b.getRange(c(u.line, u.ch - 3), c(u.line, u.ch - 2)) != e)) v = "addFour"; else if (k) { if (a.isWordChar(r) || !p(b, u, e)) return a.Pass; v = "both" } else { if (!o || b.getLine(u.line) .length != u.ch && !n(r, g) && !/\s/.test(r)) return a.Pass; v = "both" } else v = j.indexOf(e) >= 0 && b.getRange(u, c(u.line, u.ch + 3)) == e + e + e ? "skipThree" : "skip"; if (q) { if (q != v) return a.Pass } else q = v } var w = h % 2 ? g.charAt(h - 1) : e, x = h % 2 ? e : g.charAt(h + 1); b.operation(function() { if ("skip" == q) b.execCommand("goCharRight"); else if ("skipThree" == q) for (var a = 0; 3 > a; a++) b.execCommand("goCharRight"); else if ("surround" == q) { for (var c = b.getSelections(), a = 0; a < c.length; a++) c[a] = w + c[a] + x; b.replaceSelections(c, "around"), c = b.listSelections() .slice(); for (var a = 0; a < c.length; a++) c[a] = l(c[a]); b.setSelections(c) } else "both" == q ? (b.replaceSelection(w + x, null), b.triggerElectric(w + x), b.execCommand("goCharLeft")) : "addFour" == q && (b.replaceSelection(w + w + w + w, "before"), b.execCommand("goCharRight")) }) } function n(a, b) { var c = b.lastIndexOf(a); return c > -1 && c % 2 == 1 } function o(a, b) { var d = a.getRange(c(b.line, b.ch - 1), c(b.line, b.ch + 1)); return 2 == d.length ? d : null } function p(b, c, d) { var e = b.getLine(c.line), f = b.getTokenAt(c); if (/\bstring2?\b/.test(f.type)) return !1; var g = new a.StringStream(e.slice(0, c.ch) + d + e.slice(c.ch), 4); for (g.pos = g.start = f.start;;) { var h = b.getMode() .token(g, f.state); if (g.pos >= c.ch + 1) return /\bstring2?\b/.test(h); g.start = g.pos } } var b = { pairs: "()[]{}''\"\"", triples: "", explode: "[]{}" }, c = a.Pos; a.defineOption("autoCloseBrackets", !1, function(b, c, d) { d && d != a.Init && (b.removeKeyMap(f), b.state.closeBrackets = null), c && (b.state.closeBrackets = c, b.addKeyMap(f)) }); for (var e = b.pairs + "`", f = { Backspace: j, Enter: k }, g = 0; g < e.length; g++) f["'" + e.charAt(g) + "'"] = h(e.charAt(g)) }), function(a) { "object" == typeof exports && "object" == typeof module ? a(require("../../lib/codemirror"), require("./runmode")) : "function" == typeof define && define.amd ? define(["../../lib/codemirror", "./runmode"], a) : a(CodeMirror) }(function(a) { "use strict"; function c(a, d) { if (3 == a.nodeType) return d.push(a.nodeValue); for (var e = a.firstChild; e; e = e.nextSibling) c(e, d), b.test(a.nodeType) && d.push("\n") } var b = /^(p|li|div|h\\d|pre|blockquote|td)$/; a.colorize = function(b, d) { b || (b = document.body.getElementsByTagName("pre")); for (var e = 0; e < b.length; ++e) { var f = b[e], g = f.getAttribute("data-lang") || d; if (g) { var h = []; c(f, h), f.innerHTML = "", a.runMode(h.join(""), g, f), f.className += " cm-s-default" } } } }), function(a) { "object" == typeof exports && "object" == typeof module ? a(require("../lib/codemirror"), require("../addon/search/searchcursor"), require("../addon/edit/matchbrackets")) : "function" == typeof define && define.amd ? define(["../lib/codemirror", "../addon/search/searchcursor", "../addon/edit/matchbrackets"], a) : a(CodeMirror) }(function(a) { "use strict"; function g(b, c, e) { if (0 > e && 0 == c.ch) return b.clipPos(d(c.line - 1)); var f = b.getLine(c.line); if (e > 0 && c.ch >= f.length) return b.clipPos(d(c.line + 1, 0)); for (var h, g = "start", i = c.ch, j = 0 > e ? 0 : f.length, k = 0; i != j; i += e, k++) { var l = f.charAt(0 > e ? i - 1 : i), m = "_" != l && a.isWordChar(l) ? "w" : "o"; if ("w" == m && l.toUpperCase() == l && (m = "W"), "start" == g) "o" != m && (g = "in", h = m); else if ("in" == g && h != m) { if ("w" == h && "W" == m && 0 > e && i--, "W" == h && "w" == m && e > 0) { h = "w"; continue } break } } return d(c.line, i) } function h(a, b) { a.extendSelectionsBy(function(c) { return a.display.shift || a.doc.extend || c.empty() ? g(a.doc, c.head, b) : 0 > b ? c.from() : c.to() }) } function j(b, c) { return b.isReadOnly() ? a.Pass : void b.operation(function() { for (var a = b.listSelections() .length, e = [], f = -1, g = 0; a > g; g++) { var h = b.listSelections()[g].head; if (!(h.line <= f)) { var i = d(h.line + (c ? 0 : 1), 0); b.replaceRange("\n", i, null, "+insertLine"), b.indentLine(i.line, null, !0), e.push({ head: i, anchor: i }), f = h.line + 1 } } b.setSelections(e) }) } function k(b, c) { for (var e = c.ch, f = e, g = b.getLine(c.line); e && a.isWordChar(g.charAt(e - 1));) --e; for (; f < g.length && a.isWordChar(g.charAt(f));) ++f; return { from: d(c.line, e), to: d(c.line, f), word: g.slice(e, f) } } function m(a) { var b = a.getCursor(), c = a.scanForBracket(b, -1); if (c) for (;;) { var e = a.scanForBracket(b, 1); if (!e) return; if (e.ch == l.charAt(l.indexOf(c.ch) + 1)) return a.setSelection(d(c.pos.line, c.pos.ch + 1), e.pos, !1), !0; b = d(e.pos.line, e.pos.ch + 1) } } function o(b, c) { if (b.isReadOnly()) return a.Pass; for (var g, e = b.listSelections(), f = [], h = 0; h < e.length; h++) { var i = e[h]; if (!i.empty()) { for (var j = i.from() .line, k = i.to() .line; h < e.length - 1 && e[h + 1].from() .line == k;) k = i[++h].to() .line; f.push(j, k) } } f.length ? g = !0 : f.push(b.firstLine(), b.lastLine()), b.operation(function() { for (var a = [], e = 0; e < f.length; e += 2) { var h = f[e], i = f[e + 1], j = d(h, 0), k = d(i), l = b.getRange(j, k, !1); c ? l.sort() : l.sort(function(a, b) { var c = a.toUpperCase(), d = b.toUpperCase(); return c != d && (a = c, b = d), b > a ? -1 : a == b ? 0 : 1 }), b.replaceRange(l, j, k), g && a.push({ anchor: j, head: k }) } g && b.setSelections(a, 0) }) } function q(b, c) { b.operation(function() { for (var d = b.listSelections(), e = [], f = [], g = 0; g < d.length; g++) { var h = d[g]; h.empty() ? (e.push(g), f.push("")) : f.push(c(b.getRange(h.from(), h.to()))) } b.replaceSelections(f, "around", "case"); for (var i, g = e.length - 1; g >= 0; g--) { var h = d[e[g]]; if (!(i && a.cmpPos(h.head, i) > 0)) { var j = k(b, h.head); i = j.from, b.replaceRange(c(j.word), j.from, j.to) } } }) } function r(b) { var c = b.getCursor("from"), d = b.getCursor("to"); if (0 == a.cmpPos(c, d)) { var e = k(b, c); if (!e.word) return; c = e.from, d = e.to } return { from: c, to: d, query: b.getRange(c, d), word: e } } function s(a, b) { var c = r(a); if (c) { var e = c.query, f = a.getSearchCursor(e, b ? c.to : c.from); (b ? f.findNext() : f.findPrevious()) ? a.setSelection(f.from(), f.to()): (f = a.getSearchCursor(e, b ? d(a.firstLine(), 0) : a.clipPos(d(a.lastLine()))), (b ? f.findNext() : f.findPrevious()) ? a.setSelection(f.from(), f.to()) : c.word && a.setSelection(c.from, c.to)) } } var b = a.keyMap.sublime = { fallthrough: "default" }, c = a.commands, d = a.Pos, e = a.keyMap["default"] == a.keyMap.macDefault, f = e ? "Cmd-" : "Ctrl-"; c[b["Alt-Left"] = "goSubwordLeft"] = function(a) { h(a, -1) }, c[b["Alt-Right"] = "goSubwordRight"] = function(a) { h(a, 1) }; var i = e ? "Ctrl-Alt-" : "Ctrl-"; c[b[i + "Up"] = "scrollLineUp"] = function(a) { var b = a.getScrollInfo(); if (!a.somethingSelected()) { var c = a.lineAtHeight(b.top + b.clientHeight, "local"); a.getCursor() .line >= c && a.execCommand("goLineUp") } a.scrollTo(null, b.top - a.defaultTextHeight()) }, c[b[i + "Down"] = "scrollLineDown"] = function(a) { var b = a.getScrollInfo(); if (!a.somethingSelected()) { var c = a.lineAtHeight(b.top, "local") + 1; a.getCursor() .line <= c && a.execCommand("goLineDown") } a.scrollTo(null, b.top + a.defaultTextHeight()) }, c[b["Shift-" + f + "L"] = "splitSelectionByLine"] = function(a) { for (var b = a.listSelections(), c = [], e = 0; e < b.length; e++) for (var f = b[e].from(), g = b[e].to(), h = f.line; h <= g.line; ++h) g.line > f.line && h == g.line && 0 == g.ch || c.push({ anchor: h == f.line ? f : d(h, 0), head: h == g.line ? g : d(h) }); a.setSelections(c, 0) }, b["Shift-Tab"] = "indentLess", c[b.Esc = "singleSelectionTop"] = function(a) { var b = a.listSelections()[0]; a.setSelection(b.anchor, b.head, { scroll: !1 }) }, c[b[f + "L"] = "selectLine"] = function(a) { for (var b = a.listSelections(), c = [], e = 0; e < b.length; e++) { var f = b[e]; c.push({ anchor: d(f.from() .line, 0), head: d(f.to() .line + 1, 0) }) } a.setSelections(c) }, b["Shift-Ctrl-K"] = "deleteLine", c[b[f + "Enter"] = "insertLineAfter"] = function(a) { return j(a, !1) }, c[b["Shift-" + f + "Enter"] = "insertLineBefore"] = function(a) { return j(a, !0) }, c[b[f + "D"] = "selectNextOccurrence"] = function(b) { var c = b.getCursor("from"), e = b.getCursor("to"), f = b.state.sublimeFindFullWord == b.doc.sel; if (0 == a.cmpPos(c, e)) { var g = k(b, c); if (!g.word) return; b.setSelection(g.from, g.to), f = !0 } else { var h = b.getRange(c, e), i = f ? new RegExp("\\b" + h + "\\b") : h, j = b.getSearchCursor(i, e); j.findNext() ? b.addSelection(j.from(), j.to()) : (j = b.getSearchCursor(i, d(b.firstLine(), 0)), j.findNext() && b.addSelection(j.from(), j.to())) } f && (b.state.sublimeFindFullWord = b.doc.sel) }; var l = "(){}[]"; c[b["Shift-" + f + "Space"] = "selectScope"] = function(a) { m(a) || a.execCommand("selectAll") }, c[b["Shift-" + f + "M"] = "selectBetweenBrackets"] = function(b) { return m(b) ? void 0 : a.Pass }, c[b[f + "M"] = "goToBracket"] = function(b) { b.extendSelectionsBy(function(c) { var e = b.scanForBracket(c.head, 1); if (e && 0 != a.cmpPos(e.pos, c.head)) return e.pos; var f = b.scanForBracket(c.head, -1); return f && d(f.pos.line, f.pos.ch + 1) || c.head }) }; var n = e ? "Cmd-Ctrl-" : "Shift-Ctrl-"; c[b[n + "Up"] = "swapLineUp"] = function(b) { if (b.isReadOnly()) return a.Pass; for (var c = b.listSelections(), e = [], f = b.firstLine() - 1, g = [], h = 0; h < c.length; h++) { var i = c[h], j = i.from() .line - 1, k = i.to() .line; g.push({ anchor: d(i.anchor.line - 1, i.anchor.ch), head: d(i.head.line - 1, i.head.ch) }), 0 != i.to() .ch || i.empty() || --k, j > f ? e.push(j, k) : e.length && (e[e.length - 1] = k), f = k } b.operation(function() { for (var a = 0; a < e.length; a += 2) { var c = e[a], f = e[a + 1], h = b.getLine(c); b.replaceRange("", d(c, 0), d(c + 1, 0), "+swapLine"), f > b.lastLine() ? b.replaceRange("\n" + h, d(b.lastLine()), null, "+swapLine") : b.replaceRange(h + "\n", d(f, 0), null, "+swapLine") } b.setSelections(g), b.scrollIntoView() }) }, c[b[n + "Down"] = "swapLineDown"] = function(b) { if (b.isReadOnly()) return a.Pass; for (var c = b.listSelections(), e = [], f = b.lastLine() + 1, g = c.length - 1; g >= 0; g--) { var h = c[g], i = h.to() .line + 1, j = h.from() .line; 0 != h.to() .ch || h.empty() || i--, f > i ? e.push(i, j) : e.length && (e[e.length - 1] = j), f = j } b.operation(function() { for (var a = e.length - 2; a >= 0; a -= 2) { var c = e[a], f = e[a + 1], g = b.getLine(c); c == b.lastLine() ? b.replaceRange("", d(c - 1), d(c), "+swapLine") : b.replaceRange("", d(c, 0), d(c + 1, 0), "+swapLine"), b.replaceRange(g + "\n", d(f, 0), null, "+swapLine") } b.scrollIntoView() }) }, c[b[f + "/"] = "toggleCommentIndented"] = function(a) { a.toggleComment({ indent: !0 }) }, c[b[f + "J"] = "joinLines"] = function(a) { for (var b = a.listSelections(), c = [], e = 0; e < b.length; e++) { for (var f = b[e], g = f.from(), h = g.line, i = f.to() .line; e < b.length - 1 && b[e + 1].from() .line == i;) i = b[++e].to() .line; c.push({ start: h, end: i, anchor: !f.empty() && g }) } a.operation(function() { for (var b = 0, e = [], f = 0; f < c.length; f++) { for (var i, g = c[f], h = g.anchor && d(g.anchor.line - b, g.anchor.ch), j = g.start; j <= g.end; j++) { var k = j - b; j == g.end && (i = d(k, a.getLine(k) .length + 1)), k < a.lastLine() && (a.replaceRange(" ", d(k), d(k + 1, /^\s*/.exec(a.getLine(k + 1))[0].length)), ++b) } e.push({ anchor: h || i, head: i }) } a.setSelections(e, 0) }) }, c[b["Shift-" + f + "D"] = "duplicateLine"] = function(a) { a.operation(function() { for (var b = a.listSelections() .length, c = 0; b > c; c++) { var e = a.listSelections()[c]; e.empty() ? a.replaceRange(a.getLine(e.head.line) + "\n", d(e.head.line, 0)) : a.replaceRange(a.getRange(e.from(), e.to()), e.from()) } a.scrollIntoView() }) }, b[f + "T"] = "transposeChars", c[b.F9 = "sortLines"] = function(a) { o(a, !0) }, c[b[f + "F9"] = "sortLinesInsensitive"] = function(a) { o(a, !1) }, c[b.F2 = "nextBookmark"] = function(a) { var b = a.state.sublimeBookmarks; if (b) for (; b.length;) { var c = b.shift(), d = c.find(); if (d) return b.push(c), a.setSelection(d.from, d.to) } }, c[b["Shift-F2"] = "prevBookmark"] = function(a) { var b = a.state.sublimeBookmarks; if (b) for (; b.length;) { b.unshift(b.pop()); var c = b[b.length - 1].find(); if (c) return a.setSelection(c.from, c.to); b.pop() } }, c[b[f + "F2"] = "toggleBookmark"] = function(a) { for (var b = a.listSelections(), c = a.state.sublimeBookmarks || (a.state.sublimeBookmarks = []), d = 0; d < b.length; d++) { for (var e = b[d].from(), f = b[d].to(), g = a.findMarks(e, f), h = 0; h < g.length; h++) if (g[h].sublimeBookmark) { g[h].clear(); for (var i = 0; i < c.length; i++) c[i] == g[h] && c.splice(i--, 1); break } h == g.length && c.push(a.markText(e, f, { sublimeBookmark: !0, clearWhenEmpty: !1 })) } }, c[b["Shift-" + f + "F2"] = "clearBookmarks"] = function(a) { var b = a.state.sublimeBookmarks; if (b) for (var c = 0; c < b.length; c++) b[c].clear(); b.length = 0 }, c[b["Alt-F2"] = "selectBookmarks"] = function(a) { var b = a.state.sublimeBookmarks, c = []; if (b) for (var d = 0; d < b.length; d++) { var e = b[d].find(); e ? c.push({ anchor: e.from, head: e.to }) : b.splice(d--, 0) } c.length && a.setSelections(c, 0) }, b["Alt-Q"] = "wrapLines"; var p = f + "K "; b[p + f + "Backspace"] = "delLineLeft", c[b.Backspace = "smartBackspace"] = function(b) { if (b.somethingSelected()) return a.Pass; var c = b.getCursor(), e = b.getRange({ line: c.line, ch: 0 }, c), f = a.countColumn(e, null, b.getOption("tabSize")), g = b.getOption("indentUnit"); if (e && !/\S/.test(e) && f % g == 0) { var h = new d(c.line, a.findColumn(e, f - g, g)); return h.ch == c.ch ? a.Pass : b.replaceRange("", h, c, "+delete") } return a.Pass }, c[b[p + f + "K"] = "delLineRight"] = function(a) { a.operation(function() { for (var b = a.listSelections(), c = b.length - 1; c >= 0; c--) a.replaceRange("", b[c].anchor, d(b[c].to() .line), "+delete"); a.scrollIntoView() }) }, c[b[p + f + "U"] = "upcaseAtCursor"] = function(a) { q(a, function(a) { return a.toUpperCase() }) }, c[b[p + f + "L"] = "downcaseAtCursor"] = function(a) { q(a, function(a) { return a.toLowerCase() }) }, c[b[p + f + "Space"] = "setSublimeMark"] = function(a) { a.state.sublimeMark && a.state.sublimeMark.clear(), a.state.sublimeMark = a.setBookmark(a.getCursor()) }, c[b[p + f + "A"] = "selectToSublimeMark"] = function(a) { var b = a.state.sublimeMark && a.state.sublimeMark.find(); b && a.setSelection(a.getCursor(), b) }, c[b[p + f + "W"] = "deleteToSublimeMark"] = function(b) { var c = b.state.sublimeMark && b.state.sublimeMark.find(); if (c) { var d = b.getCursor(), e = c; if (a.cmpPos(d, e) > 0) { var f = e; e = d, d = f } b.state.sublimeKilled = b.getRange(d, e), b.replaceRange("", d, e) } }, c[b[p + f + "X"] = "swapWithSublimeMark"] = function(a) { var b = a.state.sublimeMark && a.state.sublimeMark.find(); b && (a.state.sublimeMark.clear(), a.state.sublimeMark = a.setBookmark(a.getCursor()), a.setCursor(b)) }, c[b[p + f + "Y"] = "sublimeYank"] = function(a) { null != a.state.sublimeKilled && a.replaceSelection(a.state.sublimeKilled, null, "paste") }, b[p + f + "G"] = "clearBookmarks", c[b[p + f + "C"] = "showInCenter"] = function(a) { var b = a.cursorCoords(null, "local"); a.scrollTo(null, (b.top + b.bottom) / 2 - a.getScrollInfo() .clientHeight / 2) }, c[b["Shift-Alt-Up"] = "selectLinesUpward"] = function(a) { a.operation(function() { for (var b = a.listSelections(), c = 0; c < b.length; c++) { var e = b[c]; e.head.line > a.firstLine() && a.addSelection(d(e.head.line - 1, e.head.ch)) } }) }, c[b["Shift-Alt-Down"] = "selectLinesDownward"] = function(a) { a.operation(function() { for (var b = a.listSelections(), c = 0; c < b.length; c++) { var e = b[c]; e.head.line < a.lastLine() && a.addSelection(d(e.head.line + 1, e.head.ch)) } }) }, c[b[f + "F3"] = "findUnder"] = function(a) { s(a, !0) }, c[b["Shift-" + f + "F3"] = "findUnderPrevious"] = function(a) { s(a, !1) }, c[b["Alt-F3"] = "findAllUnder"] = function(a) { var b = r(a); if (b) { for (var c = a.getSearchCursor(b.query), d = [], e = -1; c.findNext();) d.push({ anchor: c.from(), head: c.to() }), c.from() .line <= b.from.line && c.from() .ch <= b.from.ch && e++; a.setSelections(d, e) } }, b["Shift-" + f + "["] = "fold", b["Shift-" + f + "]"] = "unfold", b[p + f + "0"] = b[p + f + "j"] = "unfoldAll", b[f + "I"] = "findIncremental", b["Shift-" + f + "I"] = "findIncrementalReverse", b[f + "H"] = "replace", b.F3 = "findNext", b["Shift-F3"] = "findPrev", a.normalizeKeyMap(b) });