(doc, change, selAfter, spans)
| 2183 | } |
| 2184 | |
| 2185 | function makeChangeSingleDoc(doc, change, selAfter, spans) { |
| 2186 | if (doc.cm && !doc.cm.curOp) |
| 2187 | return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); |
| 2188 | |
| 2189 | if (change.to.line < doc.first) { |
| 2190 | shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); |
| 2191 | return; |
| 2192 | } |
| 2193 | if (change.from.line > doc.lastLine()) return; |
| 2194 | |
| 2195 | // Clip the change to the size of this doc |
| 2196 | if (change.from.line < doc.first) { |
| 2197 | var shift = change.text.length - 1 - (doc.first - change.from.line); |
| 2198 | shiftDoc(doc, shift); |
| 2199 | change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), |
| 2200 | text: [lst(change.text)], origin: change.origin}; |
| 2201 | } |
| 2202 | var last = doc.lastLine(); |
| 2203 | if (change.to.line > last) { |
| 2204 | change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), |
| 2205 | text: [change.text[0]], origin: change.origin}; |
| 2206 | } |
| 2207 | |
| 2208 | if (!selAfter) selAfter = computeSelAfterChange(doc, change, null); |
| 2209 | if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans, selAfter); |
| 2210 | else updateDoc(doc, change, spans, selAfter); |
| 2211 | } |
| 2212 | |
| 2213 | function makeChangeSingleDocInEditor(cm, change, spans, selAfter) { |
| 2214 | var doc = cm.doc, display = cm.display, from = change.from, to = change.to; |
no test coverage detected