3f72491f45172b2f5dc5871e834a6ad5aeb9335f78877376e40fd5d03ed3d889e4981dbe5d127811031640b0ca63f689c3dbf0c7119da24747f3e3f943e3dd 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. import { Range } from '../core/range.js';
  6. import { Selection } from '../core/selection.js';
  7. export class SurroundSelectionCommand {
  8. constructor(range, charBeforeSelection, charAfterSelection) {
  9. this._range = range;
  10. this._charBeforeSelection = charBeforeSelection;
  11. this._charAfterSelection = charAfterSelection;
  12. }
  13. getEditOperations(model, builder) {
  14. builder.addTrackedEditOperation(new Range(this._range.startLineNumber, this._range.startColumn, this._range.startLineNumber, this._range.startColumn), this._charBeforeSelection);
  15. builder.addTrackedEditOperation(new Range(this._range.endLineNumber, this._range.endColumn, this._range.endLineNumber, this._range.endColumn), this._charAfterSelection);
  16. }
  17. computeCursorState(model, helper) {
  18. const inverseEditOperations = helper.getInverseEditOperations();
  19. const firstOperationRange = inverseEditOperations[0].range;
  20. const secondOperationRange = inverseEditOperations[1].range;
  21. return new Selection(firstOperationRange.endLineNumber, firstOperationRange.endColumn, secondOperationRange.endLineNumber, secondOperationRange.endColumn - this._charAfterSelection.length);
  22. }
  23. }
  24. /**
  25. * A surround selection command that runs after composition finished.
  26. */
  27. export class CompositionSurroundSelectionCommand {
  28. constructor(_position, _text, _charAfter) {
  29. this._position = _position;
  30. this._text = _text;
  31. this._charAfter = _charAfter;
  32. }
  33. getEditOperations(model, builder) {
  34. builder.addTrackedEditOperation(new Range(this._position.lineNumber, this._position.column, this._position.lineNumber, this._position.column), this._text + this._charAfter);
  35. }
  36. computeCursorState(model, helper) {
  37. const inverseEditOperations = helper.getInverseEditOperations();
  38. const opRange = inverseEditOperations[0].range;
  39. return new Selection(opRange.endLineNumber, opRange.startColumn, opRange.endLineNumber, opRange.endColumn - this._charAfter.length);
  40. }
  41. }