This repository has been archived on 2023-08-08. You can view files and clone it, but cannot push or open issues or pull requests.
tomo-old/textmanip/textmanip.go

100 lines
2.2 KiB
Go

package textmanip
import "unicode"
func WordToLeft (text []rune, cursor int) (length int) {
if cursor < 1 { return }
if cursor > len(text) { cursor = len(text) }
index := cursor - 1
for index >= 0 && unicode.IsSpace(text[index]) {
length ++
index --
}
for index >= 0 && !unicode.IsSpace(text[index]) {
length ++
index --
}
return
}
func WordToRight (text []rune, cursor int) (length int) {
if cursor < 0 { return }
if cursor > len(text) { cursor = len(text) }
index := cursor
for index < len(text) && unicode.IsSpace(text[index]) {
length ++
index ++
}
for index < len(text) && !unicode.IsSpace(text[index]) {
length ++
index ++
}
return
}
func Backspace (text []rune, cursor int, word bool) (result []rune, moved int) {
if cursor < 1 { return text, cursor }
if cursor > len(text) { cursor = len(text) }
moved = 1
if word {
moved = WordToLeft(text, cursor)
}
result = append(result, text[:cursor - moved]...)
result = append(result, text[cursor:]...)
moved = cursor - moved
return
}
func Delete (text []rune, cursor int, word bool) (result []rune, moved int) {
if cursor < 0 { return text, cursor }
if cursor > len(text) { cursor = len(text) }
moved = 1
if word {
moved = WordToRight(text, cursor)
}
result = append(result, text[:cursor]...)
result = append(result, text[cursor + moved:]...)
moved = cursor
return
}
func Type (text []rune, cursor int, character rune) (result []rune, moved int) {
if cursor < 0 { cursor = 0 }
if cursor > len(text) { cursor = len(text) }
result = append(result, text[:cursor]...)
result = append(result, character)
if cursor < len(text) {
result = append(result, text[cursor:]...)
}
moved = cursor + 1
return
}
func MoveLeft (text []rune, cursor int, word bool) (moved int) {
if cursor < 1 { return cursor }
if cursor > len(text) { cursor = len(text) }
moved = 1
if word {
moved = WordToLeft(text, cursor)
}
moved = cursor - moved
return
}
func MoveRight (text []rune, cursor int, word bool) (moved int) {
if cursor < 0 { return cursor }
if cursor > len(text) { cursor = len(text) }
moved = 1
if word {
moved = WordToRight(text, cursor)
}
moved = cursor + moved
return
}