(cm, from, to, lendiff)
| 2022 | // lines are divided into visual lines. regLineChange (below) |
| 2023 | // registers single-line changes. |
| 2024 | function regChange(cm, from, to, lendiff) { |
| 2025 | if (from == null) from = cm.doc.first; |
| 2026 | if (to == null) to = cm.doc.first + cm.doc.size; |
| 2027 | if (!lendiff) lendiff = 0; |
| 2028 | |
| 2029 | var display = cm.display; |
| 2030 | if (lendiff && to < display.viewTo && |
| 2031 | (display.updateLineNumbers == null || display.updateLineNumbers > from)) |
| 2032 | display.updateLineNumbers = from; |
| 2033 | |
| 2034 | cm.curOp.viewChanged = true; |
| 2035 | |
| 2036 | if (from >= display.viewTo) { // Change after |
| 2037 | if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) |
| 2038 | resetView(cm); |
| 2039 | } else if (to <= display.viewFrom) { // Change before |
| 2040 | if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { |
| 2041 | resetView(cm); |
| 2042 | } else { |
| 2043 | display.viewFrom += lendiff; |
| 2044 | display.viewTo += lendiff; |
| 2045 | } |
| 2046 | } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap |
| 2047 | resetView(cm); |
| 2048 | } else if (from <= display.viewFrom) { // Top overlap |
| 2049 | var cut = viewCuttingPoint(cm, to, to + lendiff, 1); |
| 2050 | if (cut) { |
| 2051 | display.view = display.view.slice(cut.index); |
| 2052 | display.viewFrom = cut.lineN; |
| 2053 | display.viewTo += lendiff; |
| 2054 | } else { |
| 2055 | resetView(cm); |
| 2056 | } |
| 2057 | } else if (to >= display.viewTo) { // Bottom overlap |
| 2058 | var cut = viewCuttingPoint(cm, from, from, -1); |
| 2059 | if (cut) { |
| 2060 | display.view = display.view.slice(0, cut.index); |
| 2061 | display.viewTo = cut.lineN; |
| 2062 | } else { |
| 2063 | resetView(cm); |
| 2064 | } |
| 2065 | } else { // Gap in the middle |
| 2066 | var cutTop = viewCuttingPoint(cm, from, from, -1); |
| 2067 | var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); |
| 2068 | if (cutTop && cutBot) { |
| 2069 | display.view = display.view.slice(0, cutTop.index) |
| 2070 | .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) |
| 2071 | .concat(display.view.slice(cutBot.index)); |
| 2072 | display.viewTo += lendiff; |
| 2073 | } else { |
| 2074 | resetView(cm); |
| 2075 | } |
| 2076 | } |
| 2077 | |
| 2078 | var ext = display.externalMeasured; |
| 2079 | if (ext) { |
| 2080 | if (to < ext.lineN) |
| 2081 | ext.lineN += lendiff; |
no test coverage detected