Class REXML::Validation::State
In: lib/rexml/validation/relaxng.rb
Parent: Object

Methods

Public Class methods

[Source]

     # 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

Public Instance methods

[Source]

     # File lib/rexml/validation/relaxng.rb, line 196
196:       def <<( event )
197:         add_event_to_arry( @events, event )
198:       end

[Source]

     # File lib/rexml/validation/relaxng.rb, line 192
192:       def expected
193:         return [@events[@current]]
194:       end

[Source]

     # 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

[Source]

     # 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

[Source]

     # File lib/rexml/validation/relaxng.rb, line 142
142:       def previous=( previous ) 
143:         @previous << previous
144:       end

[Source]

     # 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

[Source]

     # 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

Protected Instance methods

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Validate]