Alejandro Mery
10 years ago
2 changed files with 42 additions and 0 deletions
@ -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 |
||||
} |
Loading…
Reference in new issue