Class: REXML::Validation::Interleave
- Defined in:
- lib/rexml/validation/relaxng.rb
Instance Method Summary collapse
- #expected ⇒ Object
-
#initialize(context) ⇒ Interleave
constructor
A new instance of Interleave.
- #inspect ⇒ Object
- #matches?(event) ⇒ Boolean
- #next(event) ⇒ Object
- #next_current(event) ⇒ Object
- #reset ⇒ Object
Methods inherited from Choice
Methods inherited from State
Constructor Details
#initialize(context) ⇒ Interleave
Returns a new instance of Interleave.
440 441 442 443 |
# File 'lib/rexml/validation/relaxng.rb', line 440 def initialize context super @choice = 0 end |
Instance Method Details
#expected ⇒ Object
511 512 513 514 515 516 517 518 519 520 |
# 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 ⇒ Object
522 523 524 |
# 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
506 507 508 509 |
# 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) ⇒ Object
477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 |
# 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) ⇒ Object
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 |
# 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 ⇒ Object
445 446 447 |
# File 'lib/rexml/validation/relaxng.rb', line 445 def reset @choice = 0 end |