(parser, selfClosing)
| 26700 | } |
| 26701 | |
| 26702 | function openTag (parser, selfClosing) { |
| 26703 | if (parser.opt.xmlns) { |
| 26704 | // emit namespace binding events |
| 26705 | var tag = parser.tag |
| 26706 | |
| 26707 | // add namespace info to tag |
| 26708 | var qn = qname(parser.tagName) |
| 26709 | tag.prefix = qn.prefix |
| 26710 | tag.local = qn.local |
| 26711 | tag.uri = tag.ns[qn.prefix] || '' |
| 26712 | |
| 26713 | if (tag.prefix && !tag.uri) { |
| 26714 | strictFail(parser, 'Unbound namespace prefix: ' + |
| 26715 | JSON.stringify(parser.tagName)) |
| 26716 | tag.uri = qn.prefix |
| 26717 | } |
| 26718 | |
| 26719 | var parent = parser.tags[parser.tags.length - 1] || parser |
| 26720 | if (tag.ns && parent.ns !== tag.ns) { |
| 26721 | Object.keys(tag.ns).forEach(function (p) { |
| 26722 | emitNode(parser, 'onopennamespace', { |
| 26723 | prefix: p, |
| 26724 | uri: tag.ns[p] |
| 26725 | }) |
| 26726 | }) |
| 26727 | } |
| 26728 | |
| 26729 | // handle deferred onattribute events |
| 26730 | // Note: do not apply default ns to attributes: |
| 26731 | // http://www.w3.org/TR/REC-xml-names/#defaulting |
| 26732 | for (var i = 0, l = parser.attribList.length; i < l; i++) { |
| 26733 | var nv = parser.attribList[i] |
| 26734 | var name = nv[0] |
| 26735 | var value = nv[1] |
| 26736 | var qualName = qname(name, true) |
| 26737 | var prefix = qualName.prefix |
| 26738 | var local = qualName.local |
| 26739 | var uri = prefix === '' ? '' : (tag.ns[prefix] || '') |
| 26740 | var a = { |
| 26741 | name: name, |
| 26742 | value: value, |
| 26743 | prefix: prefix, |
| 26744 | local: local, |
| 26745 | uri: uri |
| 26746 | } |
| 26747 | |
| 26748 | // if there's any attributes with an undefined namespace, |
| 26749 | // then fail on them now. |
| 26750 | if (prefix && prefix !== 'xmlns' && !uri) { |
| 26751 | strictFail(parser, 'Unbound namespace prefix: ' + |
| 26752 | JSON.stringify(prefix)) |
| 26753 | a.uri = prefix |
| 26754 | } |
| 26755 | parser.tag.attributes[name] = a |
| 26756 | emitNode(parser, 'onattribute', a) |
| 26757 | } |
| 26758 | parser.attribList.length = 0 |
| 26759 | } |
no test coverage detected