diff --git a/package.json b/package.json index b7a73b2920..e3d6fd72f9 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "yargs": "^6.5.0" }, "dependencies": { - "superstring": "1.1.0", + "superstring": "1.2.1", "delegato": "^1.0.0", "diff": "^2.2.1", "emissary": "^1.0.0", diff --git a/src/helpers.coffee b/src/helpers.coffee index 4db84e2ccf..cd000f0ece 100644 --- a/src/helpers.coffee +++ b/src/helpers.coffee @@ -1,4 +1,5 @@ Point = require './point' +{traversal} = require './point-helpers' MULTI_LINE_REGEX_REGEX = /\\s|\\r|\\n|\r|\n|^\[\^|[^\\]\[\^/ @@ -28,8 +29,8 @@ module.exports = normalizePatchChanges: (changes) -> changes.map (change) -> { start: Point.fromObject(change.newStart) - oldExtent: Point.fromObject(change.oldExtent) - newExtent: Point.fromObject(change.newExtent) + oldExtent: traversal(change.oldEnd, change.oldStart) + newExtent: traversal(change.newEnd, change.newStart) newText: change.newText } diff --git a/src/marker-layer.coffee b/src/marker-layer.coffee index d044ead63b..b27d83802f 100644 --- a/src/marker-layer.coffee +++ b/src/marker-layer.coffee @@ -337,7 +337,7 @@ class MarkerLayer destroyMarker: (marker) -> if @markersById.hasOwnProperty(marker.id) delete @markersById[marker.id] - @index.delete(marker.id) + @index.remove(marker.id) @markersWithChangeListeners.delete(marker) @markersWithDestroyListeners.delete(marker) @displayMarkerLayers.forEach (displayMarkerLayer) -> displayMarkerLayer.destroyMarker(marker.id) @@ -363,7 +363,7 @@ class MarkerLayer {start, end} = Range.fromObject(range) start = @delegate.clipPosition(start) end = @delegate.clipPosition(end) - @index.delete(id) + @index.remove(id) @index.insert(id, start, end) setMarkerIsExclusive: (id, exclusive) -> diff --git a/src/text-buffer.coffee b/src/text-buffer.coffee index 733aa729a2..a792c66a66 100644 --- a/src/text-buffer.coffee +++ b/src/text-buffer.coffee @@ -13,6 +13,7 @@ MarkerLayer = require './marker-layer' MatchIterator = require './match-iterator' DisplayLayer = require './display-layer' {spliceArray, newlineRegex, normalizePatchChanges, regexIsSingleLine} = require './helpers' +{traversal} = require './point-helpers' class TransactionAbortedError extends Error constructor: -> super @@ -622,7 +623,14 @@ class TextBuffer oldRange = @clipRange(range) oldText = @getTextInRange(oldRange) - change = {newStart: oldRange.start, oldExtent: oldRange.getExtent(), oldText, newText, normalizeLineEndings} + change = { + oldStart: oldRange.start, + newStart: oldRange.start, + oldEnd: oldRange.end, + oldText, + newText, + normalizeLineEndings + } @applyChange(change, undo isnt 'skip') # Public: Insert text at the given position. @@ -651,9 +659,10 @@ class TextBuffer # Applies a change to the buffer based on its old range and new text. applyChange: (change, pushToHistory = false) -> - {newStart, oldExtent, oldText, newText, normalizeLineEndings} = change + {newStart, oldStart, oldEnd, oldText, newText, normalizeLineEndings} = change @cachedText = null + oldExtent = traversal(oldEnd, oldStart) start = Point.fromObject(newStart) oldRange = Range(start, start.traverse(oldExtent)) oldRange.freeze() @@ -693,6 +702,7 @@ class TextBuffer newRange.freeze() if pushToHistory + change.oldExtent ?= oldExtent change.newExtent ?= newExtent @history?.pushChange(change)