scanning/byte_positions/cursor_parens.rb

tests/_examples/scanning/byte_positions/cursor_parens.rb in the metorex repository.

require "strscan"

# The cursor a scanner reports counts bytes, so a character made of several
# bytes moves it by that many.
scanner = StringScanner.new("abcädeföghi")
wanted = /ö/
scanner.scan_until(wanted)
p(scanner.pos)
p(scanner.pointer)
p(scanner.charpos)

scanner.pos = 3
p(scanner.pos)
p(scanner.rest)

# A byte read leaves the character it read as the match.
plain = StringScanner.new("This is a test")
p(plain.get_byte)
p(plain[0])
p(plain.matched?)

# `bytes` with a block hands over each byte and answers the string.
counted = []
p("東京".bytes { |byte| counted << byte })
p(counted)

Output:

10
10
8
3
"ädeföghi"
"T"
"T"
true
"東京"
[230, 157, 177, 228, 186, 172]