lib/regexp-examples/groups.rb in regexp-examples-0.5.4 vs lib/regexp-examples/groups.rb in regexp-examples-0.6.0

- old
+ new

@@ -61,83 +61,27 @@ class CharGroup prepend GroupWithIgnoreCase def initialize(chars, ignorecase) @chars = chars @ignorecase = ignorecase - if chars[0] == "^" - @negative = true - @chars = @chars[1..-1] - else - @negative = false - end - - init_backslash_chars - init_ranges end - def init_ranges - # save first and last "-" if present - - first = nil - last = nil - first = @chars.shift if @chars.first == "-" - last = @chars.pop if @chars.last == "-" - # Replace all instances of e.g. ["a", "-", "z"] with ["a", "b", ..., "z"] - while i = @chars.index("-") - # Prevent infinite loops from expanding [",", "-", "."] to itself - # (Since ",".ord = 44, "-".ord = 45, ".".ord = 46) - if (@chars[i-1] == ',' && @chars[i+1] == '.') - first = '-' - @chars.delete_at(i) - else - @chars[i-1..i+1] = (@chars[i-1]..@chars[i+1]).to_a - end - end - # restore them back - @chars.unshift(first) if first - @chars.push(last) if last - end - - def init_backslash_chars - @chars.each_with_index do |char, i| - if char == "\\" - if BackslashCharMap.keys.include?(@chars[i+1]) - @chars[i..i+1] = move_backslash_to_front( BackslashCharMap[@chars[i+1]] ) - elsif @chars[i+1] == 'b' - @chars[i..i+1] = "\b" - elsif @chars[i+1] == "\\" - @chars.delete_at(i+1) - else - @chars.delete_at(i) - end - end - end - end - def result - (@negative ? (CharSets::Any - @chars) : @chars).map do |result| + @chars.map do |result| GroupResult.new(result) end end - private - def move_backslash_to_front(chars) - if index = chars.index { |char| char == '\\' } - chars.unshift chars.delete_at(index) - end - chars - end end class DotGroup attr_reader :multiline def initialize(multiline) @multiline = multiline end def result - chars = CharSets::Any - chars = (["\n"] | chars) if multiline + chars = multiline ? CharSets::Any : CharSets::AnyNoNewLine chars.map do |result| GroupResult.new(result) end end end