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 }