replaceCommand.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 { Selection } from '../core/selection.js';
  6. export class ReplaceCommand {
  7. constructor(range, text, insertsAutoWhitespace = false) {
  8. this._range = range;
  9. this._text = text;
  10. this.insertsAutoWhitespace = insertsAutoWhitespace;
  11. }
  12. getEditOperations(model, builder) {
  13. builder.addTrackedEditOperation(this._range, this._text);
  14. }
  15. computeCursorState(model, helper) {
  16. let inverseEditOperations = helper.getInverseEditOperations();
  17. let srcRange = inverseEditOperations[0].range;
  18. return Selection.fromPositions(srcRange.getEndPosition());
  19. }
  20. }
  21. export class ReplaceCommandThatSelectsText {
  22. constructor(range, text) {
  23. this._range = range;
  24. this._text = text;
  25. }
  26. getEditOperations(model, builder) {
  27. builder.addTrackedEditOperation(this._range, this._text);
  28. }
  29. computeCursorState(model, helper) {
  30. const inverseEditOperations = helper.getInverseEditOperations();
  31. const srcRange = inverseEditOperations[0].range;
  32. return Selection.fromRange(srcRange, 0 /* LTR */);
  33. }
  34. }
  35. export class ReplaceCommandWithoutChangingPosition {
  36. constructor(range, text, insertsAutoWhitespace = false) {
  37. this._range = range;
  38. this._text = text;
  39. this.insertsAutoWhitespace = insertsAutoWhitespace;
  40. }
  41. getEditOperations(model, builder) {
  42. builder.addTrackedEditOperation(this._range, this._text);
  43. }
  44. computeCursorState(model, helper) {
  45. let inverseEditOperations = helper.getInverseEditOperations();
  46. let srcRange = inverseEditOperations[0].range;
  47. return Selection.fromPositions(srcRange.getStartPosition());
  48. }
  49. }
  50. export class ReplaceCommandWithOffsetCursorState {
  51. constructor(range, text, lineNumberDeltaOffset, columnDeltaOffset, insertsAutoWhitespace = false) {
  52. this._range = range;
  53. this._text = text;
  54. this._columnDeltaOffset = columnDeltaOffset;
  55. this._lineNumberDeltaOffset = lineNumberDeltaOffset;
  56. this.insertsAutoWhitespace = insertsAutoWhitespace;
  57. }
  58. getEditOperations(model, builder) {
  59. builder.addTrackedEditOperation(this._range, this._text);
  60. }
  61. computeCursorState(model, helper) {
  62. let inverseEditOperations = helper.getInverseEditOperations();
  63. let srcRange = inverseEditOperations[0].range;
  64. return Selection.fromPositions(srcRange.getEndPosition().delta(this._lineNumberDeltaOffset, this._columnDeltaOffset));
  65. }
  66. }
  67. export class ReplaceCommandThatPreservesSelection {
  68. constructor(editRange, text, initialSelection, forceMoveMarkers = false) {
  69. this._range = editRange;
  70. this._text = text;
  71. this._initialSelection = initialSelection;
  72. this._forceMoveMarkers = forceMoveMarkers;
  73. this._selectionId = null;
  74. }
  75. getEditOperations(model, builder) {
  76. builder.addTrackedEditOperation(this._range, this._text, this._forceMoveMarkers);
  77. this._selectionId = builder.trackSelection(this._initialSelection);
  78. }
  79. computeCursorState(model, helper) {
  80. return helper.getTrackedSelection(this._selectionId);
  81. }
  82. }