Class: REXML::Validation::Interleave

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

### Methods

expected inspect matches? new next next_current reset

### Public Class methods

new(context)

[Source]

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

### Public Instance methods

expected()

[Source]

    # File rexml/validation/relaxng.rb, line 529
          def expected
            #puts "IN CHOICE EXPECTED"
            #puts "EVENTS = #{@events.inspect}"
            return [@events[@current]] if @events[@current]
            return @choices[@choice..-1].collect do |x|
              if x[0].kind_of? State
                x[0].expected
              else
                x[0]
              end
            end.flatten
          end

inspect()

[Source]

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

matches?( event )

[Source]

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

next( event )

[Source]

    # File rexml/validation/relaxng.rb, line 488
          def next( event )
            # Find the next series
            next_current(event) unless @events[@current]
            return nil unless @events[@current]

            expand_ref_in( @events, @current ) if @events[@current].class == Ref
           #puts "In next with #{event.inspect}."
           #puts "Next (#@current) is #{@events[@current]}"
            if ( @events[@current].kind_of? State )
              @current += 1
              @events[@current-1].previous = self
              return @events[@current-1].next( event )
            end
           #puts "Current isn't a state"
            return @previous.pop.next( event ) if @events[@current].nil?
            if ( @events[@current].matches?(event) )
              @current += 1
              if @events[@current].nil?
               #puts "#{inspect[0,5]} 1RETURNING self" unless @choices[@choice].nil?
                return self unless @choices[@choice].nil?
               #puts "#{inspect[0,5]} 1RETURNING #{@previous[-1].inspect[0,5]}"
                return @previous.pop
              elsif @events[@current].kind_of? State
                @current += 1
               #puts "#{inspect[0,5]} 2RETURNING (#{@current-1}) #{@events[@current-1].inspect[0,5]}; on return, next is #{@events[@current]}"
                @events[@current-1].previous = self
                return @events[@current-1]
              else
               #puts "#{inspect[0,5]} RETURNING self w/ next(#@current) = #{@events[@current]}"
                return self
              end
            else
              return nil
            end
          end

next_current( event )

[Source]

    # File rexml/validation/relaxng.rb, line 458
          def next_current( event )
            # Expand references
            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[@choice..-1].find { |evt| evt[0].matches? event }
            @current = 0
            if @events
              # reorder the choices
              old = @choices[@choice]
              idx = @choices.index( @events )
              @choices[@choice] = @events
              @choices[idx] = old
              @choice += 1
            end

           #puts "In next with #{event.inspect}."
           #puts "events is #{@events.inspect}"
            @events = [] unless @events
          end

reset()

[Source]

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

[Validate]