gilo/editor/row.go
Timothy Warren 513d328226
All checks were successful
timw4mail/gilo/pipeline/head This commit looks good
Handle rendering tabs
2021-03-31 14:56:46 -04:00

53 lines
827 B
Go

package editor
import "strings"
type row struct {
chars []rune
render []rune
}
func newRow(s string) *row {
var chars []rune
var render []rune
for _, ch := range s {
chars = append(chars, ch)
render = append(render, ch)
}
return &row {chars, render}
}
func (r *row) size() int {
return len(r.chars)
}
func (r *row) rSize() int {
return len(r.render)
}
func (r *row) update() {
r.render = r.render[:0]
replacement := strings.Repeat(" ", KiloTabStop)
str := strings.ReplaceAll(string(r.chars), "\t", replacement)
for _, ch := range str {
r.render = append(r.render, ch)
}
}
func (r *row) cursorXToRenderX (cursorX int) int {
renderX := 0
i := 0
for ; i < cursorX; i++ {
if r.chars[i] == '\t' {
renderX += (KiloTabStop - 1) - (renderX % KiloTabStop)
}
renderX += 1
}
return renderX
}