def _end_element(name)
name = normalize_name(name)
start_tag = stack[-2]
close_tag = stack[-1]
return unless start_tag && close_tag
object = start_tag.object
element = close_tag.object
config = close_tag.config
value = close_tag.buffer
return unless config.name == name
unless parsed_config?(object, config)
if (element_value_config = element_values_for(config))
element_value_config.each { |evc| element.send(evc.setter, value) }
end
if config.respond_to?(:accessor)
subconfig = sax_config_for(element)
if econf = subconfig.element_config_for_tag(name, [])
element.send(econf.setter, value) unless econf.value_configured?
end
object.send(config.accessor) << element
else
value = data_class_value(config.data_class, value) || element
object.send(config.setter, value) if value != NO_BUFFER
mark_as_parsed(object, config)
end
if (sax_config = sax_config_for(element))
sax_config.ancestors.each do |ancestor|
element.send(ancestor.setter, object)
end
end
end
stack.pop
end