31 lines
559 B
Go
31 lines
559 B
Go
package core
|
|
|
|
import "strings"
|
|
|
|
type TextChange struct {
|
|
TextRange
|
|
NewText string
|
|
}
|
|
|
|
func (t TextChange) ApplyTo(text string) string {
|
|
return text[:t.Pos()] + t.NewText + text[t.End():]
|
|
}
|
|
|
|
func ApplyBulkEdits(text string, edits []TextChange) string {
|
|
b := strings.Builder{}
|
|
b.Grow(len(text))
|
|
lastEnd := 0
|
|
for _, e := range edits {
|
|
start := e.TextRange.Pos()
|
|
if start != lastEnd {
|
|
b.WriteString(text[lastEnd:e.TextRange.Pos()])
|
|
}
|
|
b.WriteString(e.NewText)
|
|
|
|
lastEnd = e.TextRange.End()
|
|
}
|
|
b.WriteString(text[lastEnd:])
|
|
|
|
return b.String()
|
|
}
|