scanner.Terminal: A literal (utf8) string within a document
Signed-off-by: Alejandro Mery <amery@geeks.cl>
This commit is contained in:
@@ -0,0 +1 @@
|
||||
package scanner
|
||||
@@ -0,0 +1,41 @@
|
||||
package scanner
|
||||
|
||||
import (
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
// A literal element within a document
|
||||
type Terminal struct {
|
||||
val string
|
||||
bytes, runes uint
|
||||
line, col uint
|
||||
}
|
||||
|
||||
// Creates a new Terminal
|
||||
func NewTerminalFull(val string, bytes, runes, line, col uint) *Terminal {
|
||||
return &Terminal{
|
||||
val: val,
|
||||
bytes: bytes,
|
||||
runes: runes,
|
||||
line: line,
|
||||
col: col,
|
||||
}
|
||||
}
|
||||
|
||||
// Creates a new Terminal without knowing it's length
|
||||
func NewTerminal(val string, line, col uint) *Terminal {
|
||||
bytes := uint(len(val))
|
||||
runes := uint(utf8.RuneCountInString(val))
|
||||
|
||||
return NewTerminalFull(val, bytes, runes, line, col)
|
||||
}
|
||||
|
||||
// Position of the terminal in the document
|
||||
func (t *Terminal) Position() (uint, uint) {
|
||||
return t.line, t.col
|
||||
}
|
||||
|
||||
// Value and size of the Terminal
|
||||
func (t *Terminal) Value() (string, uint, uint) {
|
||||
return t.val, t.bytes, t.runes
|
||||
}
|
||||
Reference in New Issue
Block a user