1511
1512
if (contentChanges.length !== 0) {
1513
>
// We do a first pass to update decorations
textModel.ts
1514
>
// because we want to read decorations in the second pass
1515
>
// where we will emit content change events
1516
>
// and we want to read the final decorations
1517
>
for (let i = 0, len = contentChanges.length; i < len; i++) {
1518
>
const change = contentChanges[i];
1519
>
this._decorationsTree.acceptReplace(change.rangeOffset, change.rangeLength, change.text.length, change.forceMoveMarkers);
1520
>
}
1521
>
1522
>
const rawContentChanges: ModelRawChange[] = [];
1523
>
1524
>
this._increaseVersionId();
1525
>
1526
>
let lineCount = oldLineCount;
1527
>
for (let i = 0, len = contentChanges.length; i < len; i++) {
1528
>
const change = contentChanges[i];
1529
>
const [eolCount] = countEOL(change.text);
1530
>
this._onDidChangeDecorations.fire();
1531
>
1532
>
const startLineNumber = change.range.startLineNumber;
1533
>
const endLineNumber = change.range.endLineNumber;
1534
>
1535
>
const deletingLinesCnt = endLineNumber - startLineNumber;
1536
>
const insertingLinesCnt = eolCount;
1537
>
const editingLinesCnt = Math.min(deletingLinesCnt, insertingLinesCnt);
1538
>
1539
>
const changeLineCountDelta = (insertingLinesCnt - deletingLinesCnt);
1540
>
1541
>
const currentEditStartLineNumber = newLineCount - lineCount - changeLineCountDelta + startLineNumber;
1542
>
1543
>
for (let j = editingLinesCnt; j >= 0; j--) {
1544
>
const editLineNumber = startLineNumber + j;
1545
>
const currentEditLineNumber = currentEditStartLineNumber + j;
1546
>
1547
>
rawContentChanges.push(
1548
>
new ModelRawLineChanged(
1549
>
editLineNumber,
1550
>
currentEditLineNumber
1551
>
));
1552
>
}
1553
>
1554
>
if (editingLinesCnt < deletingLinesCnt) {
1555
// Must delete some lines
1556
const spliceStartLineNumber = startLineNumber + editingLinesCnt;