1
0

buffer.go 871 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package buffer
  2. import (
  3. "fmt"
  4. "strconv"
  5. "github.com/gboncoffee/gopiecetable"
  6. )
  7. type Buffer struct {
  8. Table *gopiecetable.PieceTable[rune]
  9. CM CursorManager
  10. }
  11. func (buf Buffer) Insert(content rune) {
  12. for i := range buf.CM.Cursors {
  13. cur := &buf.CM.Cursors[i]
  14. err := buf.Table.Insert(cur.Offset, content)
  15. if err != nil {
  16. fmt.Println("moose: error" + err.Error() + strconv.Itoa(cur.Offset))
  17. }
  18. cur.Offset++
  19. buf.CM.DeduplicateAndSort()
  20. }
  21. }
  22. func (buf *Buffer) Delete() {
  23. for i := range buf.CM.Cursors {
  24. cur := &buf.CM.Cursors[i]
  25. if cur.Offset > 0 {
  26. cur.Offset--
  27. }
  28. err := buf.Table.Delete(cur.Offset)
  29. if err != nil {
  30. }
  31. buf.CM.DeduplicateAndSort()
  32. }
  33. }
  34. func (buf *Buffer) Undo() {
  35. num, _ := buf.Table.Undo()
  36. for i := range buf.CM.Cursors {
  37. buf.CM.Cursors[i].Offset = num
  38. }
  39. buf.CM.DeduplicateAndSort()
  40. }