Class REXML::Validation::Choice
In: lib/rexml/validation/relaxng.rb
Parent: State

Methods

<<   add_event_to_arry   expected   inspect   matches?   new   next   reset  

Public Class methods

[Source]

     # File lib/rexml/validation/relaxng.rb, line 363
363:       def initialize context
364:         super
365:         @choices = []
366:       end

Public Instance methods

[Source]

     # File lib/rexml/validation/relaxng.rb, line 374
374:       def <<( event )
375:         add_event_to_arry( @choices, event )
376:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 411
411:       def expected
412:         #puts "IN CHOICE EXPECTED"
413:         #puts "EVENTS = #{@events.inspect}"
414:         return [@events[@current]] if @events.size > 0
415:         return @choices.collect do |x| 
416:           if x[0].kind_of? State
417:             x[0].expected
418:           else
419:             x[0]
420:           end
421:         end.flatten
422:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 424
424:       def inspect
425:         "< #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' or ')} >"
426:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 406
406:       def matches?( event )
407:         return @events[@current].matches?( event ) if @events.size > 0
408:         !@choices.find{|evt| evt[0].matches?(event)}.nil?
409:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 378
378:       def next( event )
379:         # Make the choice if we haven't
380:         if @events.size == 0
381:           c = 0 ; max = @choices.size
382:           while c < max
383:             if @choices[c][0].class == Ref
384:               expand_ref_in( @choices[c], 0 )
385:               @choices += @choices[c]
386:               @choices.delete( @choices[c] )
387:               max -= 1
388:             else
389:               c += 1
390:             end
391:           end
392:           @events = @choices.find { |evt| evt[0].matches? event }
393:           # Remove the references
394:           # Find the events
395:         end
396:         #puts "In next with #{event.inspect}."
397:         #puts "events is #{@events.inspect}"
398:         unless @events
399:           @events = []
400:           return nil
401:         end
402:         #puts "current = #@current"
403:         super
404:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 368
368:       def reset
369:         super
370:         @events = []
371:         @choices.each { |c| c.each { |s| s.reset if s.kind_of? State } }
372:       end

Protected Instance methods

[Source]

     # File lib/rexml/validation/relaxng.rb, line 429
429:       def add_event_to_arry( arry, evt ) 
430:         if evt.kind_of? State or evt.class == Ref
431:           arry << [evt]
432:         elsif evt[0] == :text 
433:          if arry[-1] and
434:             arry[-1][-1].kind_of?( Event ) and 
435:             arry[-1][-1].event_type == :text and @value
436: 
437:             arry[-1][-1].event_arg = evt[1]
438:             @value = false
439:           end
440:         else
441:           arry << [] if evt[0] == :start_element
442:           arry[-1] << generate_event( evt )
443:         end
444:       end

[Validate]