Class: RegExpr::Block
Overview
Instance Attribute Summary collapse
Attributes inherited from Segment
#value
Instance Method Summary
collapse
Methods inherited from Segment
deepest, nooptimize, novalue, optimize
Constructor Details
#initialize(*val) ⇒ Block
Returns a new instance of Block.
71
72
73
74
75
|
# File 'lib/regexpr.rb', line 71
def initialize *val
val= val[ 0] if ::Array === val[ 0] and val.size == 1
super val
@hidden= true
end
|
Instance Attribute Details
#hidden ⇒ Object
Returns the value of attribute hidden.
53
54
55
|
# File 'lib/regexpr.rb', line 53
def hidden
@hidden
end
|
#name ⇒ Object
Returns the value of attribute name.
53
54
55
|
# File 'lib/regexpr.rb', line 53
def name
@name
end
|
Instance Method Details
#empty? ⇒ Boolean
58
|
# File 'lib/regexpr.rb', line 58
def empty?() @value.empty? end
|
#hidden? ⇒ Boolean
54
|
# File 'lib/regexpr.rb', line 54
def hidden?() @hidden end
|
#inspect ⇒ Object
61
62
63
|
# File 'lib/regexpr.rb', line 61
def inspect
"#<#{self.class.name}: (#{hidden? ? '?:' : ''} #{value.map(&:inspect).join ' '} )>"
end
|
#names ⇒ Object
65
66
67
68
69
|
# File 'lib/regexpr.rb', line 65
def names
names= @value.collect &:names
names.push( name) unless self.hidden?
names.flatten.compact
end
|
#optimize ⇒ Object
55
|
# File 'lib/regexpr.rb', line 55
def optimize() self.dup.optimize! end
|
#optimize! ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/regexpr.rb', line 77
def optimize!
list, chars= [[]], RegExpr::Chars.new( '')
@value.each do |v|
v= self.class.optimize v
if RegExpr::Or === v
list.push []
else list[ -1].push v
end
end
list.delete_if do |v|
if (1 == v.size and RegExpr::Chars === v[ 0]) or RegExpr::Char === v[ 0]
chars+= v[ 0]
else false
end
end
chars= chars.optimize
values= []
list.each do |v|
values.push RegExpr::Or.new
values+= if v.size == 1 and RegExpr::Block === v[ 0] and v[ 0].hidden
v[ 0].value
else
v.collect do |w|
if RegExpr::Block === w and w.hidden
u= false
w.value.each do |i|
break unless u||= RegExpr::Or === i
end
u ? w : w.value
else w
end
end.flatten.compact
end
end
values.push RegExpr::Or.new, chars if chars.size > 0
values.shift
@value= values
self
end
|
#pop ⇒ Object
57
|
# File 'lib/regexpr.rb', line 57
def pop() @value.pop end
|
#push(*v) ⇒ Object
56
|
# File 'lib/regexpr.rb', line 56
def push( *v) @value.push *v end
|
#size ⇒ Object
59
|
# File 'lib/regexpr.rb', line 59
def size() @value.size end
|
#to_r ⇒ Object
122
123
124
|
# File 'lib/regexpr.rb', line 122
def to_r()
(@hidden ? '(?:%s)' : '(%s)')% @value.collect( &:to_r).join( '')
end
|