Files
herolib/aiprompts/v_core/string/textscanner.md
2025-09-02 07:28:13 +02:00

5.1 KiB

module textscanner

Contents

new

fn new(input string) TextScanner

new returns a stack allocated instance of TextScanner.

[Return to contents]

TextScanner

struct TextScanner {
pub:
	input string
	ilen  int
pub mut:
	pos int // current position; pos is *always* kept in [0,ilen]
}

TextScanner simplifies writing small scanners/parsers. It helps by providing safe methods to scan texts character by character, peek for the next characters, go back, etc.

[Return to contents]

free

fn (mut ss TextScanner) free()

free frees all allocated resources.

[Return to contents]

remaining

fn (ss &TextScanner) remaining() int

remaining returns how many characters remain from current position.

[Return to contents]

next

fn (mut ss TextScanner) next() int

next returns the next character code from the input text. next returns -1 if it can't reach the next character. next advances the scanner position.

[Return to contents]

skip

fn (mut ss TextScanner) skip()

skip skips one character ahead; skip() is slightly faster than .next(). skip() does not return a result.

[Return to contents]

skip_n

fn (mut ss TextScanner) skip_n(n int)

skip_n skips ahead n characters, stopping at the end of the input.

[Return to contents]

peek

fn (ss &TextScanner) peek() int

peek returns the next character code from the input text. peek returns -1 if it can't peek the next character. unlike next(), peek() does not change the state of the scanner.

[Return to contents]

peek_u8

fn (ss &TextScanner) peek_u8() u8

peek_u8 returns the next character code from the input text, as a byte/u8. unlike next(), peek_u8() does not change the state of the scanner.

Note: peek_u8 returns 0, if it can't peek the next character.

Note: use peek(), instead of peek_u8(), if your input itself can legitimately contain bytes with value 0.

[Return to contents]

peek_n

fn (ss &TextScanner) peek_n(n int) int

peek_n returns the character code from the input text at position + n. peek_n returns -1 if it can't peek n characters ahead. ts.peek_n(0) == ts.current() . ts.peek_n(1) == ts.peek() .

[Return to contents]

peek_n_u8

fn (ss &TextScanner) peek_n_u8(n int) u8

peek_n_u8 returns the character code from the input text, at position + n, as a byte/u8.

Note: peek_n_u8 returns 0, if it can't peek the next character.

Note: use peek_n(), instead of peek_n_u8(), if your input itself can legitimately contain bytes with value 0.

[Return to contents]

back

fn (mut ss TextScanner) back()

back goes back one character from the current scanner position.

[Return to contents]

back_n

fn (mut ss TextScanner) back_n(n int)

back_n goes back n characters from the current scanner position.

[Return to contents]

peek_back

fn (ss &TextScanner) peek_back() int

peek_back returns the previous character code from the input text. peek_back returns -1 if it can't peek the previous character. unlike back(), peek_back() does not change the state of the scanner.

[Return to contents]

peek_back_n

fn (ss &TextScanner) peek_back_n(n int) int

peek_back_n returns the character code from the input text at position - n. peek_back_n returns -1 if it can't peek n characters back. ts.peek_back_n(0) == ts.current() ts.peek_back_n(1) == ts.peek_back()

[Return to contents]

current

fn (mut ss TextScanner) current() int

current returns the current character code from the input text. current returns -1 at the start of the input text.

Note: after c := ts.next(), ts.current() will also return c.

[Return to contents]

reset

fn (mut ss TextScanner) reset()

reset resets the internal state of the scanner. After calling .reset(), .next() will start reading again from the start of the input text.

[Return to contents]

goto_end

fn (mut ss TextScanner) goto_end()

goto_end has the same effect as for ts.next() != -1 {}. i.e. after calling .goto_end(), the scanner will be at the end of the input text. Further .next() calls will return -1, unless you go back.

[Return to contents]

skip_whitespace

fn (mut ss TextScanner) skip_whitespace()

skip_whitespace advances the scanner pass any space characters in the input.

[Return to contents]

Powered by vdoc. Generated on: 2 Sep 2025 07:20:02