aboutsummaryrefslogtreecommitdiff
path: root/node_modules/sax/lib/sax.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/sax/lib/sax.js')
-rw-r--r--node_modules/sax/lib/sax.js41
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,