Class: Sass::Util::MultibyteStringScanner

Inherits:
StringScanner
  • Object
show all
Defined in:
/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb,
/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb,
/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (MultibyteStringScanner) initialize(str)

Returns a new instance of MultibyteStringScanner



12
13
14
15
16
17
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 12

def initialize(str)
  super(StringScanner.new(str))
  @mb_pos = 0
  @mb_matched_size = nil
  @mb_last_pos = nil
end

Class Method Details

+ new(str)



39
40
41
42
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 39

def self.new(str)
  return StringScanner.new(str) if str.ascii_only?
  super
end

Instance Method Details

- byte_matched_size



45
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 45

alias_method :byte_matched_size, :matched_size

- byte_pos



44
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 44

alias_method :byte_pos, :pos

- check(pattern)



47
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 47

def check(pattern); _match super; end

- check_until(pattern)



48
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 48

def check_until(pattern); _matched super; end

- get_byte



62
63
64
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 62

def get_byte
  raise "MultibyteStringScanner doesn't support #get_byte."
end

- getbyte



66
67
68
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 66

def getbyte
  raise "MultibyteStringScanner doesn't support #getbyte."
end

- getch



49
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 49

def getch; _forward _match super; end

- (Boolean) is_a?(klass)

Returns:

  • (Boolean)


19
20
21
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 19

def is_a?(klass)
  __getobj__.is_a?(klass) || super
end

- (Boolean) match?(pattern)

Returns:

  • (Boolean)


50
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 50

def match?(pattern); _size check(pattern); end

- matched_size



51
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 51

def matched_size; @mb_matched_size; end

- peek(len) Also known as: peep



52
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 52

def peek(len); string[@mb_pos, len]; end

- pos Also known as: pointer



54
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 54

def pos; @mb_pos; end

- pos=(n)



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 70

def pos=(n)
  @mb_last_pos = nil

  # We set position kind of a lot during parsing, so we want it to be as
  # efficient as possible. This is complicated by the fact that UTF-8 is a
  # variable-length encoding, so it's difficult to find the byte length that
  # corresponds to a given character length.
  #
  # Our heuristic here is to try to count the fewest possible characters. So
  # if the new position is close to the current one, just count the
  # characters between the two; if the new position is closer to the
  # beginning of the string, just count the characters from there.
  if @mb_pos - n < @mb_pos / 2
    # New position is close to old position
    byte_delta = @mb_pos > n ? -string[n...@mb_pos].bytesize : string[@mb_pos...n].bytesize
    super(byte_pos + byte_delta)
  else
    # New position is close to BOS
    super(string[0...n].bytesize)
  end
  @mb_pos = n
end

- reset



93
94
95
96
97
98
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 93

def reset
  @mb_pos = 0
  @mb_matched_size = nil
  @mb_last_pos = nil
  super
end

- rest_size



56
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 56

def rest_size; rest.size; end

- scan(pattern)



57
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 57

def scan(pattern); _forward _match super; end

- scan_full(pattern, advance_pointer_p, return_string_p)



100
101
102
103
104
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 100

def scan_full(pattern, advance_pointer_p, return_string_p)
  res = _match super(pattern, advance_pointer_p, true)
  _forward res if advance_pointer_p
  return res if return_string_p
end

- scan_until(pattern)



58
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 58

def scan_until(pattern); _forward _matched super; end

- search_full(pattern, advance_pointer_p, return_string_p)



106
107
108
109
110
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 106

def search_full(pattern, advance_pointer_p, return_string_p)
  res = super(pattern, advance_pointer_p, true)
  _forward res if advance_pointer_p
  _matched((res if return_string_p))
end

- skip(pattern)



59
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 59

def skip(pattern); _size scan(pattern); end

- skip_until(pattern)



60
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 60

def skip_until(pattern); _matched _size scan_until(pattern); end

- string=(str)



112
113
114
115
116
117
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 112

def string=(str)
  @mb_pos = 0
  @mb_matched_size = nil
  @mb_last_pos = nil
  super
end

- terminate Also known as: clear



119
120
121
122
123
124
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 119

def terminate
  @mb_pos = string.size
  @mb_matched_size = nil
  @mb_last_pos = nil
  super
end

- unscan



127
128
129
130
131
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/util/multibyte_string_scanner.rb', line 127

def unscan
  super
  @mb_pos = @mb_last_pos
  @mb_last_pos = @mb_matched_size = nil
end