21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/regexp-examples/chargroup_parser.rb', line 21
def parse
@charset = []
@negative = false
parse_first_chars
until next_char == "]" do
case next_char
when "["
@current_position += 1
sub_group_parser = self.class.new(rest_of_string, is_sub_group: true)
@charset.concat sub_group_parser.result
@current_position += sub_group_parser.length
when "-"
if regexp_string[@current_position + 1] == "]"
@charset << "-"
@current_position += 1
else
@current_position += 1
@charset.concat (@charset.last .. parse_checking_backlash.first).to_a
@current_position += 1
end
when "&"
if regexp_string[@current_position + 1] == "&"
@current_position += 2
sub_group_parser = self.class.new(rest_of_string, is_sub_group: @is_sub_group)
@charset &= sub_group_parser.result
@current_position += (sub_group_parser.length - 1)
else
@charset << "&"
@current_position += 1
end
else
@charset.concat parse_checking_backlash
@current_position += 1
end
end
@charset.uniq!
@current_position += 1
end
|