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.
41 lines
840 B
41 lines
840 B
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 |
|
}
|
|
|