(cm, from, to, lendiff)
| 2990 | // lines are divided into visual lines. regLineChange (below) |
| 2991 | // registers single-line changes. |
| 2992 | function regChange(cm, from, to, lendiff) { |
| 2993 | if (from == null) { from = cm.doc.first; } |
| 2994 | if (to == null) { to = cm.doc.first + cm.doc.size; } |
| 2995 | if (!lendiff) { lendiff = 0; } |
| 2996 | |
| 2997 | var display = cm.display; |
| 2998 | if (lendiff && to < display.viewTo && |
| 2999 | (display.updateLineNumbers == null || display.updateLineNumbers > from)) |
| 3000 | { display.updateLineNumbers = from; } |
| 3001 | |
| 3002 | cm.curOp.viewChanged = true; |
| 3003 | |
| 3004 | if (from >= display.viewTo) { // Change after |
| 3005 | if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) |
| 3006 | { resetView(cm); } |
| 3007 | } else if (to <= display.viewFrom) { // Change before |
| 3008 | if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { |
| 3009 | resetView(cm); |
| 3010 | } else { |
| 3011 | display.viewFrom += lendiff; |
| 3012 | display.viewTo += lendiff; |
| 3013 | } |
| 3014 | } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap |
| 3015 | resetView(cm); |
| 3016 | } else if (from <= display.viewFrom) { // Top overlap |
| 3017 | var cut = viewCuttingPoint(cm, to, to + lendiff, 1); |
| 3018 | if (cut) { |
| 3019 | display.view = display.view.slice(cut.index); |
| 3020 | display.viewFrom = cut.lineN; |
| 3021 | display.viewTo += lendiff; |
| 3022 | } else { |
| 3023 | resetView(cm); |
| 3024 | } |
| 3025 | } else if (to >= display.viewTo) { // Bottom overlap |
| 3026 | var cut$1 = viewCuttingPoint(cm, from, from, -1); |
| 3027 | if (cut$1) { |
| 3028 | display.view = display.view.slice(0, cut$1.index); |
| 3029 | display.viewTo = cut$1.lineN; |
| 3030 | } else { |
| 3031 | resetView(cm); |
| 3032 | } |
| 3033 | } else { // Gap in the middle |
| 3034 | var cutTop = viewCuttingPoint(cm, from, from, -1); |
| 3035 | var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); |
| 3036 | if (cutTop && cutBot) { |
| 3037 | display.view = display.view.slice(0, cutTop.index) |
| 3038 | .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) |
| 3039 | .concat(display.view.slice(cutBot.index)); |
| 3040 | display.viewTo += lendiff; |
| 3041 | } else { |
| 3042 | resetView(cm); |
| 3043 | } |
| 3044 | } |
| 3045 | |
| 3046 | var ext = display.externalMeasured; |
| 3047 | if (ext) { |
| 3048 | if (to < ext.lineN) |
| 3049 | { ext.lineN += lendiff; } |
no test coverage detected