github.com/grzegorz-zur/bm@v0.0.0-20240312214136-6fc133e3e2c0/at.go (about) 1 package main 2 3 import ( 4 "unicode" 5 ) 6 7 // AtFileStart checks if cursor is at file start. 8 func (file *File) AtFileStart() bool { 9 return file.location == 0 10 } 11 12 // AtFileEnd checks if cursor is at file end. 13 func (file *File) AtFileEnd() bool { 14 return file.location == len(file.content) 15 } 16 17 // AtLineStart checks if cursor is at line start. 18 func (file *File) AtLineStart() bool { 19 if file.AtFileStart() { 20 return true 21 } 22 last, _ := file.last() 23 return last == EOL 24 } 25 26 // AtLineEnd checks if cursor is at line end. 27 func (file *File) AtLineEnd() bool { 28 if file.AtFileEnd() { 29 return true 30 } 31 current, _ := file.current() 32 return current == EOL 33 } 34 35 // AtWord checks if cursor is at word. 36 func (file *File) AtWord() bool { 37 if file.AtFileStart() || file.AtFileEnd() { 38 return true 39 } 40 last, _ := file.last() 41 current, _ := file.current() 42 return !(unicode.IsLetter(last) || unicode.IsDigit(last)) && 43 (unicode.IsLetter(current) || unicode.IsDigit(current)) 44 } 45 46 // AtParagraph checks if cursor is at paragraph. 47 func (file *File) AtParagraph() bool { 48 if file.AtFileStart() || file.AtFileEnd() { 49 return true 50 } 51 last, size := file.last() 52 location := file.location - size 53 if location == 0 && last == EOL { 54 return true 55 } 56 previous, _ := file.previous(location) 57 return previous == EOL && last == EOL 58 }