module Regexp::Expression
  class CharacterSet < Regexp::Expression::Subexpression
    attr_accessor :closed, :negative

    alias :negative? :negative
    alias :negated?  :negative
    alias :closed?   :closed

    def initialize(token, options = {})
      self.negative = false
      self.closed   = false
      super
    end

    def negate
      self.negative = true
    end

    def close
      self.closed = true
    end

    def to_s(format = :full)
      "#{text}#{'^' if negated?}#{expressions.join}]#{quantifier_affix(format)}"
    end
  end
end # module Regexp::Expression