Revert "Use byte slice for insert"

This reverts commit 0c844c2f5b.
This commit is contained in:
Zachary Yedidia
2019-01-16 22:32:33 -05:00
parent 069f7d20bc
commit 9336e09532
8 changed files with 29 additions and 25 deletions

View File

@@ -240,7 +240,7 @@ func (b *Buffer) SetName(s string) {
b.name = s
}
func (b *Buffer) Insert(start Loc, text []byte) {
func (b *Buffer) Insert(start Loc, text string) {
b.EventHandler.cursors = b.cursors
b.EventHandler.active = b.curCursor
b.EventHandler.Insert(start, text)
@@ -419,11 +419,11 @@ func (b *Buffer) ClearMatches() {
// IndentString returns this buffer's indent method (a tabstop or n spaces
// depending on the settings)
func (b *Buffer) IndentString(tabsize int) []byte {
func (b *Buffer) IndentString(tabsize int) string {
if b.Settings["tabstospaces"].(bool) {
return bytes.Repeat([]byte{' '}, tabsize)
return Spaces(tabsize)
}
return []byte{'\t'}
return "\t"
}
// SetCursors resets this buffer's cursors to a new list
@@ -529,18 +529,19 @@ func (b *Buffer) MoveLinesUp(start int, end int) {
if start < 1 || start >= end || end > len(b.lines) {
return
}
l := string(b.LineBytes(start - 1))
if end == len(b.lines) {
b.Insert(
Loc{
utf8.RuneCount(b.lines[end-1].data),
end - 1,
},
append([]byte{'\n'}, b.LineBytes(start-1)...),
"\n"+l,
)
} else {
b.Insert(
Loc{0, end},
append(b.LineBytes(start-1), '\n'),
l+"\n",
)
}
b.Remove(
@@ -554,9 +555,10 @@ func (b *Buffer) MoveLinesDown(start int, end int) {
if start < 0 || start >= end || end >= len(b.lines)-1 {
return
}
l := string(b.LineBytes(end))
b.Insert(
Loc{0, start},
append(b.LineBytes(end), '\n'),
l+"\n",
)
end++
b.Remove(

View File

@@ -88,16 +88,16 @@ func NewEventHandler(buf *SharedBuffer, cursors []*Cursor) *EventHandler {
// the buffer equal to that string
// This means that we can transform the buffer into any string and still preserve undo/redo
// through insert and delete events
func (eh *EventHandler) ApplyDiff(str string) {
func (eh *EventHandler) ApplyDiff(new string) {
differ := dmp.New()
diff := differ.DiffMain(string(eh.buf.Bytes()), str, false)
diff := differ.DiffMain(string(eh.buf.Bytes()), new, false)
loc := eh.buf.Start()
for _, d := range diff {
if d.Type == dmp.DiffDelete {
eh.Remove(loc, loc.MoveLA(utf8.RuneCountInString(d.Text), eh.buf.LineArray))
} else {
if d.Type == dmp.DiffInsert {
eh.Insert(loc, []byte(d.Text))
eh.Insert(loc, d.Text)
}
loc = loc.MoveLA(utf8.RuneCountInString(d.Text), eh.buf.LineArray)
}
@@ -105,7 +105,8 @@ func (eh *EventHandler) ApplyDiff(str string) {
}
// Insert creates an insert text event and executes it
func (eh *EventHandler) Insert(start Loc, text []byte) {
func (eh *EventHandler) Insert(start Loc, textStr string) {
text := []byte(textStr)
e := &TextEvent{
C: *eh.cursors[eh.active],
EventType: TextEventInsert,
@@ -174,7 +175,7 @@ func (eh *EventHandler) MultipleReplace(deltas []Delta) {
}
// Replace deletes from start to end and replaces it with the given string
func (eh *EventHandler) Replace(start, end Loc, replace []byte) {
func (eh *EventHandler) Replace(start, end Loc, replace string) {
eh.Remove(start, end)
eh.Insert(start, replace)
}

View File

@@ -67,7 +67,7 @@ func (b *Buffer) SaveAs(filename string) error {
if b.Settings["eofnewline"].(bool) {
end := b.End()
if b.RuneAt(Loc{end.X - 1, end.Y}) != '\n' {
b.Insert(end, []byte{'\n'})
b.Insert(end, "\n")
}
}