diff options
Diffstat (limited to 'node_modules/sax/lib/sax.js')
-rw-r--r-- | node_modules/sax/lib/sax.js | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/node_modules/sax/lib/sax.js b/node_modules/sax/lib/sax.js index f125c5fee..db0d4c316 100644 --- a/node_modules/sax/lib/sax.js +++ b/node_modules/sax/lib/sax.js @@ -267,8 +267,6 @@ // this really needs to be replaced with character classes. // XML allows all manner of ridiculous numbers and digits. - var number = '0124356789' - var letter = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' // (Letter | "_" | ":") var quote = '\'"' @@ -281,8 +279,6 @@ // turn all the string character sets into character class objects. whitespace = charClass(whitespace) - number = charClass(number) - letter = charClass(letter) // http://www.w3.org/TR/REC-xml/#NT-NameStartChar // This implementation works on strings, a single character at a time @@ -292,10 +288,10 @@ // is left as an exercise for the reader. var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ - var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/ + var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ - var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/ + var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ quote = charClass(quote) attribEnd = charClass(attribEnd) @@ -307,12 +303,16 @@ }, {}) } - function isRegExp (c) { - return Object.prototype.toString.call(c) === '[object RegExp]' + function isMatch (regex, c) { + return regex.test(c) } function is (charclass, c) { - return isRegExp(charclass) ? !!c.match(charclass) : charclass[c] + return charclass[c] + } + + function notMatch (regex, c) { + return !isMatch(regex, c) } function not (charclass, c) { @@ -998,9 +998,11 @@ while (true) { c = charAt(chunk, i++) parser.c = c + if (!c) { break } + if (parser.trackPosition) { parser.position++ if (c === '\n') { @@ -1010,6 +1012,7 @@ parser.column++ } } + switch (parser.state) { case S.BEGIN: parser.state = S.BEGIN_WHITESPACE @@ -1080,7 +1083,7 @@ parser.sgmlDecl = '' } else if (is(whitespace, c)) { // wait for it... - } else if (is(nameStart, c)) { + } else if (isMatch(nameStart, c)) { parser.state = S.OPEN_TAG parser.tagName = c } else if (c === '/') { @@ -1283,7 +1286,7 @@ continue case S.OPEN_TAG: - if (is(nameBody, c)) { + if (isMatch(nameBody, c)) { parser.tagName += c } else { newTag(parser) @@ -1318,7 +1321,7 @@ openTag(parser) } else if (c === '/') { parser.state = S.OPEN_TAG_SLASH - } else if (is(nameStart, c)) { + } else if (isMatch(nameStart, c)) { parser.attribName = c parser.attribValue = '' parser.state = S.ATTRIB_NAME @@ -1337,7 +1340,7 @@ openTag(parser) } else if (is(whitespace, c)) { parser.state = S.ATTRIB_NAME_SAW_WHITE - } else if (is(nameBody, c)) { + } else if (isMatch(nameBody, c)) { parser.attribName += c } else { strictFail(parser, 'Invalid attribute name') @@ -1360,7 +1363,7 @@ parser.attribName = '' if (c === '>') { openTag(parser) - } else if (is(nameStart, c)) { + } else if (isMatch(nameStart, c)) { parser.attribName = c parser.state = S.ATTRIB_NAME } else { @@ -1404,7 +1407,7 @@ openTag(parser) } else if (c === '/') { parser.state = S.OPEN_TAG_SLASH - } else if (is(nameStart, c)) { + } else if (isMatch(nameStart, c)) { strictFail(parser, 'No whitespace between attributes') parser.attribName = c parser.attribValue = '' @@ -1435,7 +1438,7 @@ if (!parser.tagName) { if (is(whitespace, c)) { continue - } else if (not(nameStart, c)) { + } else if (notMatch(nameStart, c)) { if (parser.script) { parser.script += '</' + c parser.state = S.SCRIPT @@ -1447,7 +1450,7 @@ } } else if (c === '>') { closeTag(parser) - } else if (is(nameBody, c)) { + } else if (isMatch(nameBody, c)) { parser.tagName += c } else if (parser.script) { parser.script += '</' + parser.tagName @@ -1498,7 +1501,7 @@ parser[buffer] += parseEntity(parser) parser.entity = '' parser.state = returnState - } else if (is(parser.entity.length ? entityBody : entityStart, c)) { + } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) { parser.entity += c } else { strictFail(parser, 'Invalid character in entity name') @@ -1521,6 +1524,7 @@ } /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */ + /* istanbul ignore next */ if (!String.fromCodePoint) { (function () { var stringFromCharCode = String.fromCharCode @@ -1562,6 +1566,7 @@ } return result } + /* istanbul ignore next */ if (Object.defineProperty) { Object.defineProperty(String, 'fromCodePoint', { value: fromCodePoint, |