module RegexpExamples # A collection of related helper methods, utilised by the `Parser` class module ParseGroupHelper protected def parse_caret if @current_position == 0 PlaceHolderGroup.new # Ignore the "illegal" character else raise_anchors_exception! end end def parse_dollar if @current_position == (regexp_string.length - 1) PlaceHolderGroup.new # Ignore the "illegal" character else raise_anchors_exception! end end def parse_extended_whitespace if @extended skip_whitespace PlaceHolderGroup.new # Ignore the whitespace/comment else parse_single_char_group(next_char) end end def skip_whitespace whitespace_chars = rest_of_string.match(/#.*|\s+/)[0] @current_position += whitespace_chars.length - 1 end def parse_single_char_group(char) SingleCharGroup.new(char, @ignorecase) end def parse_char_group @current_position += 1 # Skip past opening "[" chargroup_parser = ChargroupParser.new(rest_of_string) chargroup_parser.parse @current_position += (chargroup_parser.length - 1) # Step back to closing "]" CharGroup.new(chargroup_parser.result, @ignorecase) end def parse_dot_group DotGroup.new(@multiline) end def parse_or_group(left_repeaters) @current_position += 1 right_repeaters = parse OrGroup.new(left_repeaters, right_repeaters) end end end