mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
var sax = require('raptor-xml/sax');
|
|
var createError = require('raptor-util').createError;
|
|
|
|
function ParseTreeBuilderXml(taglibs) {
|
|
ParseTreeBuilderXml.$super.apply(this, arguments);
|
|
this.parser = null;
|
|
}
|
|
|
|
ParseTreeBuilderXml.prototype = {
|
|
getPos: function() {
|
|
return this.parser.getPos();
|
|
},
|
|
|
|
doParse: function (src, filePath) {
|
|
|
|
var parser = this.parser = sax.createParser({
|
|
trim: false,
|
|
normalize: false,
|
|
dom: src.documentElement != null
|
|
});
|
|
|
|
var _this = this;
|
|
|
|
parser.on({
|
|
error: function (e) {
|
|
throw createError(e);
|
|
},
|
|
characters: function (t) {
|
|
_this.handleCharacters(t);
|
|
},
|
|
cdata: function (t) {
|
|
_this.handleCharacters(t);
|
|
},
|
|
startElement: function (elNode) {
|
|
var el = {
|
|
namespace: elNode.getNamespaceURI(),
|
|
prefix: elNode.getPrefix(),
|
|
localName: elNode.getLocalName()
|
|
};
|
|
|
|
var attributes = elNode.getAttributes().map(function (attr) {
|
|
return {
|
|
namespace: attr.getNamespaceURI(),
|
|
localName: attr.getLocalName(),
|
|
prefix: attr.getPrefix(),
|
|
value: attr.getValue()
|
|
};
|
|
});
|
|
|
|
_this.handleStartElement(el, attributes);
|
|
},
|
|
endElement: function () {
|
|
_this.handleEndElement();
|
|
}
|
|
}, this);
|
|
|
|
parser.parse(src, filePath);
|
|
}
|
|
};
|
|
|
|
require('raptor-util').inherit(ParseTreeBuilderXml, require('./ParseTreeBuilder'));
|
|
|
|
module.exports = ParseTreeBuilderXml; |