lib/regexp_parser/expression/set.rb



module Regexp::Expression

  class CharacterSet < Regexp::Expression::Base
    attr_accessor :members

    def initialize(token)
      @members = []
      @negative = false
      super
    end

    def <<(member)
      if @members.last.is_a?(CharacterSubSet)
        @members.last << member
      else
        @members << member
      end
    end

    def include?(member)
      @members.each do |m|
        if m.is_a?(CharacterSubSet)
          return true if m.include?(member)
        else
          return true if member == m.to_s
        end
      end; false
    end

    def negate
      if @members.last.is_a?(CharacterSubSet)
        @members.last.negate
      else
        @negative = true
      end
    end

    def negative?
      @negative
    end
    alias :negated? :negative?

    def to_s
      s = @text
      s << '^' if negative?
      s << @members.join
      s << ']'
      s << @quantifier.to_s if quantified?
      s
    end

    def matches?(input)
      input =~ /#{to_s}/ ? true : false
    end
  end

  class CharacterSubSet < CharacterSet; end

end # module Regexp::Expression