lib/regexp_parser/ctype.rb



# defines character type constants (as arrays) and methods that test
# whether a given character belongs in one of them.
module CType
  Digit   = ('0'..'9').to_a.freeze
  Lower   = ('a'..'z').to_a.freeze
  Upper   = ('A'..'Z').to_a.freeze

  Alpha   = [Lower, Upper].flatten.freeze
  Alnum   = [Alpha, Digit].flatten.freeze
  Word    = [Alnum, '_'].flatten.freeze

  Blank   = [' ', "\t"].freeze
  Space   = [" ", "\t", "\r", "\n", "\v", "\f"].freeze

  Cntrl   = ( 0..31 ).map {|c| c.chr}.freeze
  Graph   = (33..126).map {|c| c.chr}.freeze
  Print   = (32..126).map {|c| c.chr}.freeze
  ASCII   = ( 0..127).map {|c| c.chr}.freeze

  Punct   = [
    ('!'..'/').to_a,
    (':'..'@').to_a,
    ('['..'`').to_a,
    ('{'..'~').to_a
  ].flatten.freeze

  XDigit  = [
    Digit,
    ('a'..'f').to_a,
    ('A'..'F').to_a
  ].flatten.freeze

  def self.alnum?(c);  Alnum.include?(c)  end 
  def self.alpha?(c);  Alpha.include?(c)  end 
  def self.blank?(c);  Blank.include?(c)  end 
  def self.cntrl?(c);  Cntrl.include?(c)  end 
  def self.digit?(c);  Digit.include?(c)  end 
  def self.graph?(c);  Graph.include?(c)  end 
  def self.lower?(c);  Lower.include?(c)  end 
  def self.print?(c);  Print.include?(c)  end 
  def self.punct?(c);  Punct.include?(c)  end 
  def self.space?(c);  Space.include?(c)  end 
  def self.upper?(c);  Upper.include?(c)  end 
  def self.xdigit?(c); XDigit.include?(c) end 

  def self.word?(c);   Word.include?(c)   end 
  def self.ascii?(c);  ASCII.include?(c)  end 
end