433
434
_toSingleEditOperation(operations: IValidatedEditOperation[]): IValidatedEditOperation {
436
>
const firstEditRange = operations[0].range;
437
>
const lastEditRange = operations[operations.length - 1].range;
438
>
const entireEditRange = new Range(firstEditRange.startLineNumber, firstEditRange.startColumn, lastEditRange.endLineNumber, lastEditRange.endColumn);
439
>
let lastEndLineNumber = firstEditRange.startLineNumber;
440
>
let lastEndColumn = firstEditRange.startColumn;
441
>
const result: string[] = [];
442
>
443
>
for (let i = 0, len = operations.length; i < len; i++) {
444
>
const operation = operations[i];
445
>
const range = operation.range;
446
>
447
>
forceMoveMarkers = forceMoveMarkers || operation.forceMoveMarkers;
448
>
449
>
// (1) -- Push old text
450
>
result.push(this.getValueInRange(new Range(lastEndLineNumber, lastEndColumn, range.startLineNumber, range.startColumn)));
451
>
452
>
// (2) -- Push new text
453
>
if (operation.text.length > 0) {
454
result.push(operation.text);
455
}
457
>
lastEndLineNumber = range.endLineNumber;
458
>
lastEndColumn = range.endColumn;
459
>
}
460
>
461
>
const text = result.join('');
462
>
const [eolCount, firstLineLength, lastLineLength] = countEOL(text);
463
>
464
>
return {
465
>
sortIndex: 0,
466
>
identifier: operations[0].identifier,
467
>
range: entireEditRange,
468
>
rangeOffset: this.getOffsetAt(entireEditRange.startLineNumber, entireEditRange.startColumn),
469
>
rangeLength: this.getValueLengthInRange(entireEditRange, EndOfLinePreference.TextDefined),
470
>
text: text,
471
>
eolCount: eolCount,
472
>
firstLineLength: firstLineLength,
473
>
lastLineLength: lastLineLength,
474
>
forceMoveMarkers: forceMoveMarkers,
475
>
isAutoWhitespaceEdit: false
476
>
};
477
>
}
478
479
private _doApplyEdits(operations: IValidatedEditOperation[]): IInternalModelContentChange[] {