asciigoat's core library https://asciigoat.org/core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1011 B

package scanner
import (
"unicode/utf8"
)
// A Terminal represents literal element within a document
type Terminal struct {
val string
bytes, runes uint
line, col uint
}
// NewTerminalFull returns a new Terminal instance
func NewTerminalFull(val string, bytes, runes, line, col uint) *Terminal {
return &Terminal{
val: val,
bytes: bytes,
runes: runes,
line: line,
col: col,
}
}
// NewTerminal creates a Terminal instance 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 retuns the position (line and column)
// of the Terminal in the source document
func (t *Terminal) Position() (uint, uint) {
return t.line, t.col
}
// Value returns the string corresponding to
// this Terminal and it's size in bytes and runes
func (t *Terminal) Value() (string, uint, uint) {
return t.val, t.bytes, t.runes
}