In Files

  • rexml/validation/relaxng.rb

REXML::Validation::Interleave

Public Class Methods

new(context) click to toggle source
 
               # File rexml/validation/relaxng.rb, line 449
def initialize context
  super
  @choice = 0
end
            

Public Instance Methods

expected() click to toggle 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() click to toggle 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 ) click to toggle 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 ) click to toggle 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 ) click to toggle 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() click to toggle source
 
               # File rexml/validation/relaxng.rb, line 454
def reset
  @choice = 0
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus