Backport #5835 ยป backport_5835.patch
lib/rexml/parsers/baseparser.rb | ||
---|---|---|
def initialize( source )
|
||
self.stream = source
|
||
@listeners = []
|
||
end
|
||
def add_listener( listener )
|
||
if !defined?(@listeners) or !@listeners
|
||
@listeners = []
|
||
instance_eval <<-EOL
|
||
alias :_old_pull :pull
|
||
def pull
|
||
event = _old_pull
|
||
@listeners.each do |listener|
|
||
listener.receive event
|
||
end
|
||
event
|
||
end
|
||
EOL
|
||
end
|
||
@listeners << listener
|
||
end
|
||
... | ... | |
# Returns the next event. This is a +PullEvent+ object.
|
||
def pull
|
||
pull_event.tap do |event|
|
||
@listeners.each do |listener|
|
||
listener.receive event
|
||
end
|
||
end
|
||
end
|
||
def pull_event
|
||
if @closed
|
||
x, @closed = @closed, nil
|
||
return [ :end_element, x ]
|
||
... | ... | |
end
|
||
return [ :dummy ]
|
||
end
|
||
private :pull_event
|
||
def entity( reference, entities )
|
||
value = nil
|