def parse(*args)
if block_given?
super do |nodetype, name, args, parser|
case nodetype
when START_ELEM
ns, args = getNSAttrs(args)
@ns.push(ns)
if @nssep
if @parserNS.respond_to?(:startNamespaceDecl)
ns.each do |prefix, uri|
yield(START_NAMESPACE_DECL, prefix, uri, parser)
end
end
prefix, uri, localpart = resolveElementQName(name)
name = uri + @nssep + name if uri
attrs = {}
args.each do |k, v|
prefix, uri, localpart = resolveAttributeQName(k)
k = uri + @nssep + k if uri
attrs[k] = v
end
args = attrs
end
yield(nodetype, name, args, parser)
when END_ELEM
if @nssep
prefix, uri, localpart = resolveElementQName(name)
name = uri + @nssep + name if uri
end
yield(nodetype, name, args, parser)
ns = @ns.pop
if @nssep and @parserNS.respond_to?(:endNamespaceDecl)
ns.to_a.reverse.each do |prefix, uri|
yield(END_NAMESPACE_DECL, prefix, nil, parser)
end
end
else
yield(nodetype, name, args, parser)
end
end
else
super
end
end