(doc, change, selAfter, spans)
| 174 | // More lower-level change function, handling only a single document |
| 175 | // (not linked ones). |
| 176 | function makeChangeSingleDoc(doc, change, selAfter, spans) { |
| 177 | if (doc.cm && !doc.cm.curOp) |
| 178 | return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) |
| 179 | |
| 180 | if (change.to.line < doc.first) { |
| 181 | shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)) |
| 182 | return |
| 183 | } |
| 184 | if (change.from.line > doc.lastLine()) return |
| 185 | |
| 186 | // Clip the change to the size of this doc |
| 187 | if (change.from.line < doc.first) { |
| 188 | let shift = change.text.length - 1 - (doc.first - change.from.line) |
| 189 | shiftDoc(doc, shift) |
| 190 | change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), |
| 191 | text: [lst(change.text)], origin: change.origin} |
| 192 | } |
| 193 | let last = doc.lastLine() |
| 194 | if (change.to.line > last) { |
| 195 | change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), |
| 196 | text: [change.text[0]], origin: change.origin} |
| 197 | } |
| 198 | |
| 199 | change.removed = getBetween(doc, change.from, change.to) |
| 200 | |
| 201 | if (!selAfter) selAfter = computeSelAfterChange(doc, change) |
| 202 | if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans) |
| 203 | else updateDoc(doc, change, spans) |
| 204 | setSelectionNoUndo(doc, selAfter, sel_dontScroll) |
| 205 | |
| 206 | if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) |
| 207 | doc.cantEdit = false |
| 208 | } |
| 209 | |
| 210 | // Handle the interaction of a change to a document with the editor |
| 211 | // that this document is part of. |
no test coverage detected