Closed ghost closed 4 years ago
test.js:
var sax = require('../lib/sax') var tap = require('tap') function testPosition (chunks, expectedEvents) { var parser = sax.parser() expectedEvents.forEach(function (expectation) { parser['on' + expectation[0]] = function () { for (var prop in expectation[1]) { tap.equal(parser[prop], expectation[1][prop]) } } }) chunks.forEach(function (chunk) { parser.write(chunk) }) } testPosition(['<div>abcdefgh</div>'], [ [ 'opentagstart', { position: 5, startTagPosition: 1, startTagLine: 1, startTagColumn: 2 } ], [ 'opentag', { position: 5, startTagPosition: 1, startTagLine: 1, startTagColumn: 2 } ], [ 'text', { position: 19, startTagPosition: 14, startTagLine: 1, startTagColumn: 15 } ], [ 'closetag', { position: 19, startTagPosition: 14, startTagLine: 1, startTagColumn: 15 } ] ]) testPosition(['<div>abcde', 'fg\nh</div>'], [ ['opentagstart', { position: 5, startTagPosition: 1, startTagLine: 1, startTagColumn: 2 }], ['opentag', { position: 5, startTagPosition: 1, startTagLine: 1, startTagColumn: 2 }], ['text', { position: 20, startTagPosition: 15, startTagLine: 2, startTagColumn: 3 }], ['closetag', { position: 20, startTagPosition: 15, startTagLine: 2, startTagColumn: 3 }] ])
diff --git a/lib/sax.js b/lib/sax.js index 795d607..c47d68d 100644 --- a/lib/sax.js +++ b/lib/sax.js @@ -945,6 +945,8 @@ if (c === '<') { parser.state = S.OPEN_WAKA parser.startTagPosition = parser.position + parser.startTagLine = parser.line + 1 + parser.startTagColumn = parser.column + 1 } else if (!isWhitespace(c)) { // have to process this as a text node. // weird, but happens. @@ -1030,6 +1032,8 @@ if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) { parser.state = S.OPEN_WAKA parser.startTagPosition = parser.position + parser.startTagLine = parser.line + 1 + parser.startTagColumn = parser.column + 1 } else { if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) { strictFail(parser, 'Text data outside of root node.')
test.js: