File: char_string_scanner.rb

package info (click to toggle)
ruby-bootstrap-sass 3.4.1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 1,368 kB
  • sloc: javascript: 3,526; ruby: 1,211; sh: 57; makefile: 9
file content (38 lines) | stat: -rw-r--r-- 761 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# regular string scanner works with bytes
# this one works with chars and provides #scan_next
class Converter
  class CharStringScanner
    extend Forwardable

    def initialize(*args)
      @s = StringScanner.new(*args)
    end

    def_delegators :@s, :scan_until, :skip_until, :string

    # advance scanner to pos after the next match of pattern and return the match
    def scan_next(pattern)
      return unless @s.scan_until(pattern)
      @s.matched
    end

    def pos
      byte_to_str_pos @s.pos
    end

    def pos=(i)
      @s.pos = str_to_byte_pos i
      i
    end

    private

    def byte_to_str_pos(pos)
      @s.string.byteslice(0, pos).length
    end

    def str_to_byte_pos(pos)
      @s.string.slice(0, pos).bytesize
    end
  end
end