initial commit
This commit is contained in:
@@ -0,0 +1,359 @@
|
||||
shadow$provide.module$node_modules$$xmldom$xmldom$lib$sax = function(global, require, module, exports) {
|
||||
function ParseError(message, locator) {
|
||||
this.message = message;
|
||||
this.locator = locator;
|
||||
Error.captureStackTrace && Error.captureStackTrace(this, ParseError);
|
||||
}
|
||||
function XMLReader() {
|
||||
}
|
||||
function parse(source, defaultNSMapCopy, entityMap, domBuilder, errorHandler) {
|
||||
function entityReplacer(a) {
|
||||
var k = a.slice(1, -1);
|
||||
if (Object.hasOwnProperty.call(entityMap, k)) {
|
||||
return entityMap[k];
|
||||
}
|
||||
if ("#" === k.charAt(0)) {
|
||||
return a = parseInt(k.substr(1).replace("x", "0x")), 65535 < a ? (a -= 65536, a = String.fromCharCode(55296 + (a >> 10), 56320 + (a & 1023))) : a = String.fromCharCode(a), a;
|
||||
}
|
||||
errorHandler.error("entity not found:" + a);
|
||||
return a;
|
||||
}
|
||||
function appendText(end) {
|
||||
if (end > start) {
|
||||
var xt = source.substring(start, end).replace(/&#?\w+;/g, entityReplacer);
|
||||
locator && position(start);
|
||||
domBuilder.characters(xt, 0, end - start);
|
||||
start = end;
|
||||
}
|
||||
}
|
||||
function position(p, m) {
|
||||
for (; p >= lineEnd && (m = linePattern.exec(source));) {
|
||||
lineStart = m.index, lineEnd = lineStart + m[0].length, locator.lineNumber++;
|
||||
}
|
||||
locator.columnNumber = p - lineStart + 1;
|
||||
}
|
||||
var lineStart = 0, lineEnd = 0, linePattern = /.*(?:\r\n?|\n)|.*$/g, locator = domBuilder.locator;
|
||||
defaultNSMapCopy = [{currentNSMap:defaultNSMapCopy}];
|
||||
for (var closeMap = {}, start = 0;;) {
|
||||
try {
|
||||
var tagStart = source.indexOf("\x3c", start);
|
||||
if (0 > tagStart) {
|
||||
if (!source.substr(start).match(/^\s*$/)) {
|
||||
var doc = domBuilder.doc, text = doc.createTextNode(source.substr(start));
|
||||
doc.appendChild(text);
|
||||
domBuilder.currentElement = text;
|
||||
}
|
||||
break;
|
||||
}
|
||||
tagStart > start && appendText(tagStart);
|
||||
switch(source.charAt(tagStart + 1)) {
|
||||
case "/":
|
||||
var end = source.indexOf("\x3e", tagStart + 3), tagName = source.substring(tagStart + 2, end).replace(/[ \t\n\r]+$/g, ""), config = defaultNSMapCopy.pop();
|
||||
0 > end ? (tagName = source.substring(tagStart + 2).replace(/[\s<].*/, ""), errorHandler.error("end tag name: " + tagName + " is not complete:" + config.tagName), end = tagStart + 1 + tagName.length) : tagName.match(/\s</) && (tagName = tagName.replace(/[\s<].*/, ""), errorHandler.error("end tag name: " + tagName + " maybe not complete"), end = tagStart + 1 + tagName.length);
|
||||
var localNSMap = config.localNSMap, endMatch = config.tagName == tagName;
|
||||
if (endMatch || config.tagName && config.tagName.toLowerCase() == tagName.toLowerCase()) {
|
||||
domBuilder.endElement(config.uri, config.localName, tagName);
|
||||
if (localNSMap) {
|
||||
for (var prefix in localNSMap) {
|
||||
Object.prototype.hasOwnProperty.call(localNSMap, prefix) && domBuilder.endPrefixMapping(prefix);
|
||||
}
|
||||
}
|
||||
endMatch || errorHandler.fatalError("end tag name: " + tagName + " is not match the current start tagName:" + config.tagName);
|
||||
} else {
|
||||
defaultNSMapCopy.push(config);
|
||||
}
|
||||
end++;
|
||||
break;
|
||||
case "?":
|
||||
locator && position(tagStart);
|
||||
end = parseInstruction(source, tagStart, domBuilder);
|
||||
break;
|
||||
case "!":
|
||||
locator && position(tagStart);
|
||||
end = parseDCC(source, tagStart, domBuilder, errorHandler);
|
||||
break;
|
||||
default:
|
||||
locator && position(tagStart);
|
||||
var el = new ElementAttributes(), currentNSMap = defaultNSMapCopy[defaultNSMapCopy.length - 1].currentNSMap;
|
||||
end = parseElementStartPart(source, tagStart, el, currentNSMap, entityReplacer, errorHandler);
|
||||
var len = el.length;
|
||||
!el.closed && fixSelfClosed(source, end, el.tagName, closeMap) && (el.closed = !0, entityMap.nbsp || errorHandler.warning("unclosed xml attribute"));
|
||||
if (locator && len) {
|
||||
for (var locator2 = copyLocator(locator, {}), i = 0; i < len; i++) {
|
||||
var a = el[i];
|
||||
position(a.offset);
|
||||
a.locator = copyLocator(locator, {});
|
||||
}
|
||||
domBuilder.locator = locator2;
|
||||
appendElement(el, domBuilder, currentNSMap) && defaultNSMapCopy.push(el);
|
||||
domBuilder.locator = locator;
|
||||
} else {
|
||||
appendElement(el, domBuilder, currentNSMap) && defaultNSMapCopy.push(el);
|
||||
}
|
||||
NAMESPACE.isHTML(el.uri) && !el.closed ? end = parseHtmlSpecialContent(source, end, el.tagName, entityReplacer, domBuilder) : end++;
|
||||
}
|
||||
} catch (e) {
|
||||
if (e instanceof ParseError) {
|
||||
throw e;
|
||||
}
|
||||
errorHandler.error("element parse error: " + e);
|
||||
end = -1;
|
||||
}
|
||||
end > start ? start = end : appendText(Math.max(tagStart, start) + 1);
|
||||
}
|
||||
}
|
||||
function copyLocator(f, t) {
|
||||
t.lineNumber = f.lineNumber;
|
||||
t.columnNumber = f.columnNumber;
|
||||
return t;
|
||||
}
|
||||
function parseElementStartPart(source, start, el, currentNSMap, entityReplacer, errorHandler) {
|
||||
function addAttribute(qname, value, startIndex) {
|
||||
el.attributeNames.hasOwnProperty(qname) && errorHandler.fatalError("Attribute " + qname + " redefined");
|
||||
el.addValue(qname, value.replace(/[\t\n\r]/g, " ").replace(/&#?\w+;/g, entityReplacer), startIndex);
|
||||
}
|
||||
for (var attrName, value, p = ++start, s = 0;;) {
|
||||
var c = source.charAt(p);
|
||||
switch(c) {
|
||||
case "\x3d":
|
||||
if (1 === s) {
|
||||
attrName = source.slice(start, p), s = 3;
|
||||
} else if (2 === s) {
|
||||
s = 3;
|
||||
} else {
|
||||
throw Error("attribute equal must after attrName");
|
||||
}
|
||||
break;
|
||||
case "'":
|
||||
case '"':
|
||||
if (3 === s || 1 === s) {
|
||||
if (1 === s && (errorHandler.warning('attribute value must after "\x3d"'), attrName = source.slice(start, p)), start = p + 1, p = source.indexOf(c, start), 0 < p) {
|
||||
value = source.slice(start, p), addAttribute(attrName, value, start - 1), s = 5;
|
||||
} else {
|
||||
throw Error("attribute value no end '" + c + "' match");
|
||||
}
|
||||
} else if (4 == s) {
|
||||
value = source.slice(start, p), addAttribute(attrName, value, start), errorHandler.warning('attribute "' + attrName + '" missed start quot(' + c + ")!!"), start = p + 1, s = 5;
|
||||
} else {
|
||||
throw Error('attribute value must after "\x3d"');
|
||||
}
|
||||
break;
|
||||
case "/":
|
||||
switch(s) {
|
||||
case 0:
|
||||
el.setTagName(source.slice(start, p));
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
s = 7, el.closed = !0;
|
||||
case 4:
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
el.closed = !0;
|
||||
break;
|
||||
default:
|
||||
throw Error("attribute invalid close char('/')");
|
||||
}break;
|
||||
case "":
|
||||
return errorHandler.error("unexpected end of input"), 0 == s && el.setTagName(source.slice(start, p)), p;
|
||||
case "\x3e":
|
||||
switch(s) {
|
||||
case 0:
|
||||
el.setTagName(source.slice(start, p));
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
break;
|
||||
case 4:
|
||||
case 1:
|
||||
value = source.slice(start, p), "/" === value.slice(-1) && (el.closed = !0, value = value.slice(0, -1));
|
||||
case 2:
|
||||
2 === s && (value = attrName);
|
||||
4 == s ? (errorHandler.warning('attribute "' + value + '" missed quot(")!'), addAttribute(attrName, value, start)) : (NAMESPACE.isHTML(currentNSMap[""]) && value.match(/^(?:disabled|checked|selected)$/i) || errorHandler.warning('attribute "' + value + '" missed value!! "' + value + '" instead!!'), addAttribute(value, value, start));
|
||||
break;
|
||||
case 3:
|
||||
throw Error("attribute value missed!!");
|
||||
}return p;
|
||||
case "":
|
||||
c = " ";
|
||||
default:
|
||||
if (" " >= c) {
|
||||
switch(s) {
|
||||
case 0:
|
||||
el.setTagName(source.slice(start, p));
|
||||
s = 6;
|
||||
break;
|
||||
case 1:
|
||||
attrName = source.slice(start, p);
|
||||
s = 2;
|
||||
break;
|
||||
case 4:
|
||||
value = source.slice(start, p), errorHandler.warning('attribute "' + value + '" missed quot(")!!'), addAttribute(attrName, value, start);
|
||||
case 5:
|
||||
s = 6;
|
||||
}
|
||||
} else {
|
||||
switch(s) {
|
||||
case 2:
|
||||
NAMESPACE.isHTML(currentNSMap[""]) && attrName.match(/^(?:disabled|checked|selected)$/i) || errorHandler.warning('attribute "' + attrName + '" missed value!! "' + attrName + '" instead2!!');
|
||||
addAttribute(attrName, attrName, start);
|
||||
start = p;
|
||||
s = 1;
|
||||
break;
|
||||
case 5:
|
||||
errorHandler.warning('attribute space is required"' + attrName + '"!!');
|
||||
case 6:
|
||||
s = 1;
|
||||
start = p;
|
||||
break;
|
||||
case 3:
|
||||
s = 4;
|
||||
start = p;
|
||||
break;
|
||||
case 7:
|
||||
throw Error("elements closed character '/' and '\x3e' must be connected to");
|
||||
}
|
||||
}
|
||||
}
|
||||
p++;
|
||||
}
|
||||
}
|
||||
function appendElement(el, domBuilder, currentNSMap) {
|
||||
for (var tagName = el.tagName, localNSMap = null, i = el.length; i--;) {
|
||||
var a = el[i], qName = a.qName, value = a.value, nsp = qName.indexOf(":");
|
||||
if (0 < nsp) {
|
||||
var prefix = a.prefix = qName.slice(0, nsp);
|
||||
nsp = qName.slice(nsp + 1);
|
||||
prefix = "xmlns" === prefix && nsp;
|
||||
} else {
|
||||
nsp = qName, prefix = "xmlns" === qName && "";
|
||||
}
|
||||
a.localName = nsp;
|
||||
!1 !== prefix && (null == localNSMap && (localNSMap = {}, _copy(currentNSMap, currentNSMap = {})), currentNSMap[prefix] = localNSMap[prefix] = value, a.uri = NAMESPACE.XMLNS, domBuilder.startPrefixMapping(prefix, value));
|
||||
}
|
||||
for (i = el.length; i--;) {
|
||||
if (a = el[i], prefix = a.prefix) {
|
||||
"xml" === prefix && (a.uri = NAMESPACE.XML), "xmlns" !== prefix && (a.uri = currentNSMap[prefix || ""]);
|
||||
}
|
||||
}
|
||||
nsp = tagName.indexOf(":");
|
||||
0 < nsp ? (prefix = el.prefix = tagName.slice(0, nsp), nsp = el.localName = tagName.slice(nsp + 1)) : (prefix = null, nsp = el.localName = tagName);
|
||||
i = el.uri = currentNSMap[prefix || ""];
|
||||
domBuilder.startElement(i, nsp, tagName, el);
|
||||
if (el.closed) {
|
||||
if (domBuilder.endElement(i, nsp, tagName), localNSMap) {
|
||||
for (prefix in localNSMap) {
|
||||
Object.prototype.hasOwnProperty.call(localNSMap, prefix) && domBuilder.endPrefixMapping(prefix);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return el.currentNSMap = currentNSMap, el.localNSMap = localNSMap, !0;
|
||||
}
|
||||
}
|
||||
function parseHtmlSpecialContent(source, elStartEnd, tagName, entityReplacer, domBuilder) {
|
||||
if (/^(?:script|textarea)$/i.test(tagName)) {
|
||||
var elEndStart = source.indexOf("\x3c/" + tagName + "\x3e", elStartEnd);
|
||||
source = source.substring(elStartEnd + 1, elEndStart);
|
||||
if (/[&<]/.test(source)) {
|
||||
if (/^script$/i.test(tagName)) {
|
||||
return domBuilder.characters(source, 0, source.length), elEndStart;
|
||||
}
|
||||
source = source.replace(/&#?\w+;/g, entityReplacer);
|
||||
domBuilder.characters(source, 0, source.length);
|
||||
return elEndStart;
|
||||
}
|
||||
}
|
||||
return elStartEnd + 1;
|
||||
}
|
||||
function fixSelfClosed(source, elStartEnd, tagName, closeMap) {
|
||||
var pos = closeMap[tagName];
|
||||
null == pos && (pos = source.lastIndexOf("\x3c/" + tagName + "\x3e"), pos < elStartEnd && (pos = source.lastIndexOf("\x3c/" + tagName)), closeMap[tagName] = pos);
|
||||
return pos < elStartEnd;
|
||||
}
|
||||
function _copy(source, target) {
|
||||
for (var n in source) {
|
||||
Object.prototype.hasOwnProperty.call(source, n) && (target[n] = source[n]);
|
||||
}
|
||||
}
|
||||
function parseDCC(source, start, domBuilder, errorHandler) {
|
||||
switch(source.charAt(start + 2)) {
|
||||
case "-":
|
||||
if ("-" === source.charAt(start + 3)) {
|
||||
var end = source.indexOf("--\x3e", start + 4);
|
||||
if (end > start) {
|
||||
return domBuilder.comment(source, start + 4, end - start - 4), end + 3;
|
||||
}
|
||||
errorHandler.error("Unclosed comment");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if ("CDATA[" == source.substr(start + 3, 6)) {
|
||||
return end = source.indexOf("]]\x3e", start + 9), domBuilder.startCDATA(), domBuilder.characters(source, start + 9, end - start - 9), domBuilder.endCDATA(), end + 3;
|
||||
}
|
||||
a: {
|
||||
errorHandler = [];
|
||||
end = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
|
||||
end.lastIndex = start;
|
||||
for (end.exec(source); start = end.exec(source);) {
|
||||
if (errorHandler.push(start), start[1]) {
|
||||
end = errorHandler;
|
||||
break a;
|
||||
}
|
||||
}
|
||||
end = void 0;
|
||||
}
|
||||
var len = end.length;
|
||||
if (1 < len && /!doctype/i.test(end[0][0])) {
|
||||
return source = end[1][0], errorHandler = start = !1, 3 < len && (/^public$/i.test(end[2][0]) ? (start = end[3][0], errorHandler = 4 < len && end[4][0]) : /^system$/i.test(end[2][0]) && (errorHandler = end[3][0])), end = end[len - 1], domBuilder.startDTD(source, start, errorHandler), domBuilder.endDTD(), end.index + end[0].length;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
function parseInstruction(source, start, domBuilder) {
|
||||
var end = source.indexOf("?\x3e", start);
|
||||
return end && (source = source.substring(start, end).match(/^<\?(\S*)\s*([\s\S]*?)$/)) ? (domBuilder.processingInstruction(source[1], source[2]), end + 2) : -1;
|
||||
}
|
||||
function ElementAttributes() {
|
||||
this.attributeNames = {};
|
||||
}
|
||||
var NAMESPACE = require("module$node_modules$$xmldom$xmldom$lib$conventions").NAMESPACE;
|
||||
global = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;
|
||||
require = new RegExp("[\\-\\.0-9" + global.source.slice(1, -1) + "\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
|
||||
var tagNamePattern = new RegExp("^" + global.source + require.source + "*(?::" + global.source + require.source + "*)?$");
|
||||
ParseError.prototype = Error();
|
||||
ParseError.prototype.name = ParseError.name;
|
||||
XMLReader.prototype = {parse:function(source, defaultNSMap, entityMap) {
|
||||
var domBuilder = this.domBuilder;
|
||||
domBuilder.startDocument();
|
||||
_copy(defaultNSMap, defaultNSMap = {});
|
||||
parse(source, defaultNSMap, entityMap, domBuilder, this.errorHandler);
|
||||
domBuilder.endDocument();
|
||||
}};
|
||||
ElementAttributes.prototype = {setTagName:function(tagName) {
|
||||
if (!tagNamePattern.test(tagName)) {
|
||||
throw Error("invalid tagName:" + tagName);
|
||||
}
|
||||
this.tagName = tagName;
|
||||
}, addValue:function(qName, value, offset) {
|
||||
if (!tagNamePattern.test(qName)) {
|
||||
throw Error("invalid attribute:" + qName);
|
||||
}
|
||||
this.attributeNames[qName] = this.length;
|
||||
this[this.length++] = {qName, value, offset};
|
||||
}, length:0, getLocalName:function(i) {
|
||||
return this[i].localName;
|
||||
}, getLocator:function(i) {
|
||||
return this[i].locator;
|
||||
}, getQName:function(i) {
|
||||
return this[i].qName;
|
||||
}, getURI:function(i) {
|
||||
return this[i].uri;
|
||||
}, getValue:function(i) {
|
||||
return this[i].value;
|
||||
}};
|
||||
exports.XMLReader = XMLReader;
|
||||
exports.ParseError = ParseError;
|
||||
};
|
||||
|
||||
//# sourceMappingURL=module$node_modules$$xmldom$xmldom$lib$sax.js.map
|
||||
Reference in New Issue
Block a user