Extended maintenance of Ruby versions 1.8.7 and 1.9.2 will end on July 31, 2014. Read more

In Files

  • rexml/validation/relaxng.rb

REXML::Validation::State

Public Class Methods

new( context ) click to toggle source
 
               # File rexml/validation/relaxng.rb, line 127
def initialize( context )
  @previous = []
  @events = []
  @current = 0
  @count = context.count += 1
  @references = context.references
  @value = false
end
            

Public Instance Methods

<<( event ) click to toggle source
 
               # File rexml/validation/relaxng.rb, line 196
def <<( event )
  add_event_to_arry( @events, event )
end
            
expected() click to toggle source
 
               # File rexml/validation/relaxng.rb, line 192
def expected
  return [@events[@current]]
end
            
inspect() click to toggle source
 
               # File rexml/validation/relaxng.rb, line 185
def inspect
  "< #{to_s} #{@events.collect{|e| 
    pre = e == @events[@current] ? '#' : ''
    pre + e.inspect unless self == e
  }.join(', ')} >"
end
            
next( event ) click to toggle source
 
               # File rexml/validation/relaxng.rb, line 146
def next( event )
  #print "In next with #{event.inspect}.  "
  #puts "Next (#@current) is #{@events[@current]}"
  #p @previous
  return @previous.pop.next( event ) if @events[@current].nil?
  expand_ref_in( @events, @current ) if @events[@current].class == Ref
  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"
  if ( @events[@current].matches?(event) )
    @current += 1
    if @events[@current].nil?
      #puts "#{inspect[0,5]} 1RETURNING #{@previous.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
            
previous=( previous ) click to toggle source
 
               # File rexml/validation/relaxng.rb, line 142
def previous=( previous ) 
  @previous << previous
end
            
reset() click to toggle source
 
               # File rexml/validation/relaxng.rb, line 136
def reset
  return if @current == 0
  @current = 0
  @events.each {|s| s.reset if s.kind_of? State }
end
            
to_s() click to toggle source
 
               # File rexml/validation/relaxng.rb, line 177
def to_s
  # Abbreviated:
  self.class.name =~ /(?:::)(\w)\w+$/
  # Full:
  #self.class.name =~ /(?:::)(\w+)$/
  "#$1.#@count"
end
            

Protected Instance Methods

add_event_to_arry( arry, evt ) click to toggle source
 
               # File rexml/validation/relaxng.rb, line 210
def add_event_to_arry( arry, evt ) 
  evt = generate_event( evt )
  if evt.kind_of? String 
    arry[-1].event_arg = evt if arry[-1].kind_of? Event and @value
    @value = false
  else
    arry << evt
  end
end
            
expand_ref_in( arry, ind ) click to toggle source
 
               # File rexml/validation/relaxng.rb, line 202
def expand_ref_in( arry, ind )
  new_events = []
  @references[ arry[ind].to_s ].each{ |evt| 
    add_event_to_arry(new_events,evt)
  }
  arry[ind,1] = new_events
end
            
generate_event( event ) click to toggle source
 
               # File rexml/validation/relaxng.rb, line 220
def generate_event( event )
  return event if event.kind_of? State or event.class == Ref
  evt = nil
  arg = nil
  case event[0]
  when :start_element
    case event[1]
    when "element"
      evt = :start_element
      arg = event[2]["name"]
    when "attribute"
      evt = :start_attribute
      arg = event[2]["name"]
    when "text"
      evt = :text
    when "value"
      evt = :text
      @value = true
    end
  when :text
    return event[1]
  when :end_document
    return Event.new( event[0] )
  else # then :end_element
    case event[1]
    when "element"
      evt = :end_element
    when "attribute"
      evt = :end_attribute
    end
  end
  return Event.new( evt, arg )
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