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