(cm, from, to, lendiff)
| 3260 | // lines are divided into visual lines. regLineChange (below) |
| 3261 | // registers single-line changes. |
| 3262 | function regChange(cm, from, to, lendiff) { |
| 3263 | if (from == null) from = cm.doc.first; |
| 3264 | if (to == null) to = cm.doc.first + cm.doc.size; |
| 3265 | if (!lendiff) lendiff = 0; |
| 3266 | |
| 3267 | var display = cm.display; |
| 3268 | if (lendiff && to < display.viewTo && |
| 3269 | (display.updateLineNumbers == null || display.updateLineNumbers > from)) |
| 3270 | display.updateLineNumbers = from; |
| 3271 | |
| 3272 | cm.curOp.viewChanged = true; |
| 3273 | |
| 3274 | if (from >= display.viewTo) { // Change after |
| 3275 | if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) |
| 3276 | resetView(cm); |
| 3277 | } else if (to <= display.viewFrom) { // Change before |
| 3278 | if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { |
| 3279 | resetView(cm); |
| 3280 | } else { |
| 3281 | display.viewFrom += lendiff; |
| 3282 | display.viewTo += lendiff; |
| 3283 | } |
| 3284 | } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap |
| 3285 | resetView(cm); |
| 3286 | } else if (from <= display.viewFrom) { // Top overlap |
| 3287 | var cut = viewCuttingPoint(cm, to, to + lendiff, 1); |
| 3288 | if (cut) { |
| 3289 | display.view = display.view.slice(cut.index); |
| 3290 | display.viewFrom = cut.lineN; |
| 3291 | display.viewTo += lendiff; |
| 3292 | } else { |
| 3293 | resetView(cm); |
| 3294 | } |
| 3295 | } else if (to >= display.viewTo) { // Bottom overlap |
| 3296 | var cut = viewCuttingPoint(cm, from, from, -1); |
| 3297 | if (cut) { |
| 3298 | display.view = display.view.slice(0, cut.index); |
| 3299 | display.viewTo = cut.lineN; |
| 3300 | } else { |
| 3301 | resetView(cm); |
| 3302 | } |
| 3303 | } else { // Gap in the middle |
| 3304 | var cutTop = viewCuttingPoint(cm, from, from, -1); |
| 3305 | var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); |
| 3306 | if (cutTop && cutBot) { |
| 3307 | display.view = display.view.slice(0, cutTop.index) |
| 3308 | .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) |
| 3309 | .concat(display.view.slice(cutBot.index)); |
| 3310 | display.viewTo += lendiff; |
| 3311 | } else { |
| 3312 | resetView(cm); |
| 3313 | } |
| 3314 | } |
| 3315 | |
| 3316 | var ext = display.externalMeasured; |
| 3317 | if (ext) { |
| 3318 | if (to < ext.lineN) |
| 3319 | ext.lineN += lendiff; |
no test coverage detected