Class: REXML::Validation::Interleave
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
|
|
Instance Chain:
|
|
Inherits: |
REXML::Validation::Choice
|
Defined in: | lib/rexml/validation/relaxng.rb |
Class Method Summary
Instance Attribute Summary
State
- Inherited
Instance Method Summary
Constructor Details
.new(context) ⇒ Interleave
# File 'lib/rexml/validation/relaxng.rb', line 440
def initialize context super @choice = 0 end
Instance Method Details
#expected
[ GitHub ]# File 'lib/rexml/validation/relaxng.rb', line 511
def expected 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
[ GitHub ]# File 'lib/rexml/validation/relaxng.rb', line 522
def inspect "< #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' and ')} >" end
#matches?(event) ⇒ Boolean
# File 'lib/rexml/validation/relaxng.rb', line 506
def matches?( event ) return @events[@current].matches?( event ) if @events[@current] !@choices[@choice..-1].find{|evt| evt[0].matches?(event)}.nil? end
#next(event)
[ GitHub ]# File 'lib/rexml/validation/relaxng.rb', line 477
def next( event ) # Find the next series next_current(event) unless @events[@current] return nil unless @events[@current] ( @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 return @previous.pop.next( event ) if @events[@current].nil? if ( @events[@current].matches?(event) ) @current += 1 if @events[@current].nil? return self unless @choices[@choice].nil? return @previous.pop elsif @events[@current].kind_of? State @current += 1 @events[@current-1].previous = self return @events[@current-1] else return self end else return nil end end
#next_current(event)
[ GitHub ]# File 'lib/rexml/validation/relaxng.rb', line 449
def next_current( event ) # Expand references c = 0 ; max = @choices.size while c < max if @choices[c][0].class == Ref ( @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 @events = [] unless @events end
#reset
[ GitHub ]# File 'lib/rexml/validation/relaxng.rb', line 445
def reset @choice = 0 end