class REXML::Validation::Choice

Public Class Methods

new(context) click to toggle source
Calls superclass method REXML::Validation::State.new
# File lib/rexml/validation/relaxng.rb, line 363
def initialize context
 super
 @choices = []
end

Public Instance Methods

<<( event ) click to toggle source
# File lib/rexml/validation/relaxng.rb, line 374
def <<( event )
 add_event_to_arry( @choices, event )
end
expected() click to toggle source
# File lib/rexml/validation/relaxng.rb, line 411
def expected
 #puts "IN CHOICE EXPECTED"
 #puts "EVENTS = #{@events.inspect}"
 return [@events[@current]] if @events.size > 0
 return @choices.collect do |x|
 if x[0].kind_of? State
 x[0].expected
 else
 x[0]
 end
 end.flatten
end
inspect() click to toggle source
# File lib/rexml/validation/relaxng.rb, line 424
def inspect
 "< #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' or ')} >"
end
matches?( event ) click to toggle source
# File lib/rexml/validation/relaxng.rb, line 406
def matches?( event )
 return @events[@current].matches?( event ) if @events.size > 0
 !@choices.find{|evt| evt[0].matches?(event)}.nil?
end
next( event ) click to toggle source
Calls superclass method REXML::Validation::State#next
# File lib/rexml/validation/relaxng.rb, line 378
def next( event )
 # Make the choice if we haven't
 if @events.size == 0
 c = 0 ; max = @choices.size
 while c < max
 if @choices[c][0].class == Ref
 expand_ref_in( @choices[c], 0 )
 @choices += @choices[c]
 @choices.delete( @choices[c] )
 max -= 1
 else
 c += 1
 end
 end
 @events = @choices.find { |evt| evt[0].matches? event }
 # Remove the references
 # Find the events
 end
 #puts "In next with #{event.inspect}."
 #puts "events is #{@events.inspect}"
 unless @events
 @events = []
 return nil
 end
 #puts "current = #@current"
 super
end
reset() click to toggle source
Calls superclass method REXML::Validation::State#reset
# File lib/rexml/validation/relaxng.rb, line 368
def reset
 super
 @events = []
 @choices.each { |c| c.each { |s| s.reset if s.kind_of? State } }
end

Protected Instance Methods

add_event_to_arry( arry, evt ) click to toggle source
# File lib/rexml/validation/relaxng.rb, line 429
def add_event_to_arry( arry, evt )
 if evt.kind_of? State or evt.class == Ref
 arry << [evt]
 elsif evt[0] == :text
 if arry[-1] and
 arry[-1][-1].kind_of?( Event ) and
 arry[-1][-1].event_type == :text and @value
 arry[-1][-1].event_arg = evt[1]
 @value = false
 end
 else
 arry << [] if evt[0] == :start_element
 arry[-1] << generate_event( evt )
 end
end