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

Methods

expected   inspect   matches?   new   next   next_current   reset  

Public Class methods

[Source]

     # File lib/rexml/validation/relaxng.rb, line 449
449:       def initialize context
450:         super
451:         @choice = 0
452:       end

Public Instance methods

[Source]

     # File lib/rexml/validation/relaxng.rb, line 529
529:       def expected
530:         #puts "IN CHOICE EXPECTED"
531:         #puts "EVENTS = #{@events.inspect}"
532:         return [@events[@current]] if @events[@current]
533:         return @choices[@choice..-1].collect do |x| 
534:           if x[0].kind_of? State
535:             x[0].expected
536:           else
537:             x[0]
538:           end
539:         end.flatten
540:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 542
542:       def inspect
543:         "< #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' and ')} >"
544:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 524
524:       def matches?( event )
525:         return @events[@current].matches?( event ) if @events[@current]
526:         !@choices[@choice..-1].find{|evt| evt[0].matches?(event)}.nil?
527:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 488
488:       def next( event )
489:         # Find the next series
490:         next_current(event) unless @events[@current]
491:         return nil unless @events[@current]
492: 
493:         expand_ref_in( @events, @current ) if @events[@current].class == Ref 
494:        #puts "In next with #{event.inspect}."
495:        #puts "Next (#@current) is #{@events[@current]}"
496:         if ( @events[@current].kind_of? State )
497:           @current += 1
498:           @events[@current-1].previous = self
499:           return @events[@current-1].next( event )
500:         end
501:        #puts "Current isn't a state"
502:         return @previous.pop.next( event ) if @events[@current].nil?
503:         if ( @events[@current].matches?(event) )
504:           @current += 1
505:           if @events[@current].nil?
506:            #puts "#{inspect[0,5]} 1RETURNING self" unless @choices[@choice].nil?
507:             return self unless @choices[@choice].nil?
508:            #puts "#{inspect[0,5]} 1RETURNING #{@previous[-1].inspect[0,5]}"
509:             return @previous.pop
510:           elsif @events[@current].kind_of? State
511:             @current += 1
512:            #puts "#{inspect[0,5]} 2RETURNING (#{@current-1}) #{@events[@current-1].inspect[0,5]}; on return, next is #{@events[@current]}"
513:             @events[@current-1].previous = self
514:             return @events[@current-1]
515:           else
516:            #puts "#{inspect[0,5]} RETURNING self w/ next(#@current) = #{@events[@current]}"
517:             return self
518:           end
519:         else
520:           return nil
521:         end
522:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 458
458:       def next_current( event )
459:         # Expand references
460:         c = 0 ; max = @choices.size
461:         while c < max
462:           if @choices[c][0].class == Ref
463:             expand_ref_in( @choices[c], 0 )
464:             @choices += @choices[c]
465:             @choices.delete( @choices[c] )
466:             max -= 1
467:           else
468:             c += 1
469:           end
470:         end
471:         @events = @choices[@choice..-1].find { |evt| evt[0].matches? event }
472:         @current = 0
473:         if @events
474:           # reorder the choices
475:           old = @choices[@choice]
476:           idx = @choices.index( @events )
477:           @choices[@choice] = @events
478:           @choices[idx] = old
479:           @choice += 1
480:         end
481:         
482:        #puts "In next with #{event.inspect}."
483:        #puts "events is #{@events.inspect}"
484:         @events = [] unless @events
485:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 454
454:       def reset
455:         @choice = 0
456:       end

[Validate]