Class | REXML::Validation::State |
In: |
lib/rexml/validation/relaxng.rb
|
Parent: | Object |
# File lib/rexml/validation/relaxng.rb, line 127 127: def initialize( context ) 128: @previous = [] 129: @events = [] 130: @current = 0 131: @count = context.count += 1 132: @references = context.references 133: @value = false 134: end
# File lib/rexml/validation/relaxng.rb, line 196 196: def <<( event ) 197: add_event_to_arry( @events, event ) 198: end
# File lib/rexml/validation/relaxng.rb, line 192 192: def expected 193: return [@events[@current]] 194: end
# File lib/rexml/validation/relaxng.rb, line 185 185: def inspect 186: "< #{to_s} #{@events.collect{|e| 187: pre = e == @events[@current] ? '#' : '' 188: pre + e.inspect unless self == e 189: }.join(', ')} >" 190: end
# File lib/rexml/validation/relaxng.rb, line 146 146: def next( event ) 147: #print "In next with #{event.inspect}. " 148: #puts "Next (#@current) is #{@events[@current]}" 149: #p @previous 150: return @previous.pop.next( event ) if @events[@current].nil? 151: expand_ref_in( @events, @current ) if @events[@current].class == Ref 152: if ( @events[@current].kind_of? State ) 153: @current += 1 154: @events[@current-1].previous = self 155: return @events[@current-1].next( event ) 156: end 157: #puts "Current isn't a state" 158: if ( @events[@current].matches?(event) ) 159: @current += 1 160: if @events[@current].nil? 161: #puts "#{inspect[0,5]} 1RETURNING #{@previous.inspect[0,5]}" 162: return @previous.pop 163: elsif @events[@current].kind_of? State 164: @current += 1 165: #puts "#{inspect[0,5]} 2RETURNING (#{@current-1}) #{@events[@current-1].inspect[0,5]}; on return, next is #{@events[@current]}" 166: @events[@current-1].previous = self 167: return @events[@current-1] 168: else 169: #puts "#{inspect[0,5]} RETURNING self w/ next(#@current) = #{@events[@current]}" 170: return self 171: end 172: else 173: return nil 174: end 175: end
# File lib/rexml/validation/relaxng.rb, line 142 142: def previous=( previous ) 143: @previous << previous 144: end
# File lib/rexml/validation/relaxng.rb, line 136 136: def reset 137: return if @current == 0 138: @current = 0 139: @events.each {|s| s.reset if s.kind_of? State } 140: end
# File lib/rexml/validation/relaxng.rb, line 177 177: def to_s 178: # Abbreviated: 179: self.class.name =~ /(?:::)(\w)\w+$/ 180: # Full: 181: #self.class.name =~ /(?:::)(\w+)$/ 182: "#$1.#@count" 183: end
# File lib/rexml/validation/relaxng.rb, line 210 210: def add_event_to_arry( arry, evt ) 211: evt = generate_event( evt ) 212: if evt.kind_of? String 213: arry[-1].event_arg = evt if arry[-1].kind_of? Event and @value 214: @value = false 215: else 216: arry << evt 217: end 218: end
# File lib/rexml/validation/relaxng.rb, line 202 202: def expand_ref_in( arry, ind ) 203: new_events = [] 204: @references[ arry[ind].to_s ].each{ |evt| 205: add_event_to_arry(new_events,evt) 206: } 207: arry[ind,1] = new_events 208: end
# File lib/rexml/validation/relaxng.rb, line 220 220: def generate_event( event ) 221: return event if event.kind_of? State or event.class == Ref 222: evt = nil 223: arg = nil 224: case event[0] 225: when :start_element 226: case event[1] 227: when "element" 228: evt = :start_element 229: arg = event[2]["name"] 230: when "attribute" 231: evt = :start_attribute 232: arg = event[2]["name"] 233: when "text" 234: evt = :text 235: when "value" 236: evt = :text 237: @value = true 238: end 239: when :text 240: return event[1] 241: when :end_document 242: return Event.new( event[0] ) 243: else # then :end_element 244: case event[1] 245: when "element" 246: evt = :end_element 247: when "attribute" 248: evt = :end_attribute 249: end 250: end 251: return Event.new( evt, arg ) 252: end