Class: Regexp::Expression::CharacterSet

Inherits:
Base
  • Object
show all
Defined in:
lib/regexp_parser/expression/classes/set.rb

Direct Known Subclasses

CharacterSubSet

Instance Attribute Summary collapse

Attributes inherited from Base

#level, #options, #quantifier, #text, #token, #ts, #type

Instance Method Summary collapse

Methods inherited from Base

#case_insensitive?, #coded_offset, #free_spacing?, #full_length, #greedy?, #multiline?, #offset, #possessive?, #quantified?, #quantify, #quantity, #reluctant?, #starts_at, #terminal?, #to_re

Constructor Details

#initialize(token) ⇒ CharacterSet

Returns a new instance of CharacterSet.



6
7
8
9
10
11
# File 'lib/regexp_parser/expression/classes/set.rb', line 6

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

Instance Attribute Details

#membersObject

Returns the value of attribute members.



4
5
6
# File 'lib/regexp_parser/expression/classes/set.rb', line 4

def members
  @members
end

Instance Method Details

#<<(member) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/regexp_parser/expression/classes/set.rb', line 20

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

#cloneObject

Override base method to clone set members as well.



14
15
16
17
18
# File 'lib/regexp_parser/expression/classes/set.rb', line 14

def clone
  copy = super
  copy.members = @members.map {|m| m.clone }
  copy
end

#closeObject



63
64
65
66
67
68
69
# File 'lib/regexp_parser/expression/classes/set.rb', line 63

def close
  if @members.last.is_a?(CharacterSubSet) and not @members.last.closed?
    @members.last.close
  else
    @closed = true
  end
end

#closed?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/regexp_parser/expression/classes/set.rb', line 71

def closed?
  @closed
end

#each(&block) ⇒ Object



38
39
40
# File 'lib/regexp_parser/expression/classes/set.rb', line 38

def each(&block)
  @members.each {|m| yield m}
end

#each_with_index(&block) ⇒ Object



42
43
44
# File 'lib/regexp_parser/expression/classes/set.rb', line 42

def each_with_index(&block)
  @members.each_with_index {|m, i| yield m, i}
end

#include?(member, directly = false) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
31
32
33
34
35
36
# File 'lib/regexp_parser/expression/classes/set.rb', line 28

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

#lengthObject



46
47
48
# File 'lib/regexp_parser/expression/classes/set.rb', line 46

def length
  @members.length
end

#matches?(input) ⇒ Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/regexp_parser/expression/classes/set.rb', line 92

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

#negateObject



50
51
52
53
54
55
56
# File 'lib/regexp_parser/expression/classes/set.rb', line 50

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

#negative?Boolean Also known as: negated?

Returns:

  • (Boolean)


58
59
60
# File 'lib/regexp_parser/expression/classes/set.rb', line 58

def negative?
  @negative
end

#to_s(format = :full) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/regexp_parser/expression/classes/set.rb', line 75

def to_s(format = :full)
  s = ''

  s << @text.dup
  s << '^' if negative?
  s << @members.join
  s << ']'

  case format
  when :base
  else
    s << @quantifier.to_s if quantified?
  end

  s
end