first commit
This commit is contained in:
39
build/node_modules/parse5/lib/jsdom/jsdom_parser.js
generated
vendored
Normal file
39
build/node_modules/parse5/lib/jsdom/jsdom_parser.js
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
'use strict';
|
||||
|
||||
var Parser = require('../tree_construction/parser'),
|
||||
ParsingUnit = require('./parsing_unit');
|
||||
|
||||
//API
|
||||
exports.parseDocument = function (html, treeAdapter) {
|
||||
//NOTE: this should be reentrant, so we create new parser here
|
||||
var parser = new Parser(treeAdapter),
|
||||
parsingUnit = new ParsingUnit(parser);
|
||||
|
||||
//NOTE: override parser loop method
|
||||
parser._runParsingLoop = function () {
|
||||
parsingUnit.parsingLoopLock = true;
|
||||
|
||||
while (!parsingUnit.suspended && !this.stopped)
|
||||
this._iterateParsingLoop();
|
||||
|
||||
parsingUnit.parsingLoopLock = false;
|
||||
|
||||
if (this.stopped)
|
||||
parsingUnit.callback(this.document);
|
||||
};
|
||||
|
||||
//NOTE: wait while parserController will be adopted by calling code, then
|
||||
//start parsing
|
||||
process.nextTick(function () {
|
||||
parser.parse(html);
|
||||
});
|
||||
|
||||
return parsingUnit;
|
||||
};
|
||||
|
||||
exports.parseInnerHtml = function (innerHtml, contextElement, treeAdapter) {
|
||||
//NOTE: this should be reentrant, so we create new parser here
|
||||
var parser = new Parser(treeAdapter);
|
||||
|
||||
return parser.parseFragment(innerHtml, contextElement);
|
||||
};
|
||||
53
build/node_modules/parse5/lib/jsdom/parsing_unit.js
generated
vendored
Normal file
53
build/node_modules/parse5/lib/jsdom/parsing_unit.js
generated
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
'use strict';
|
||||
|
||||
var ParsingUnit = module.exports = function (parser) {
|
||||
this.parser = parser;
|
||||
this.suspended = false;
|
||||
this.parsingLoopLock = false;
|
||||
this.callback = null;
|
||||
};
|
||||
|
||||
ParsingUnit.prototype._stateGuard = function (suspend) {
|
||||
if (this.suspended && suspend)
|
||||
throw new Error('parse5: Parser was already suspended. Please, check your control flow logic.');
|
||||
|
||||
else if (!this.suspended && !suspend)
|
||||
throw new Error('parse5: Parser was already resumed. Please, check your control flow logic.');
|
||||
|
||||
return suspend;
|
||||
};
|
||||
|
||||
ParsingUnit.prototype.suspend = function () {
|
||||
this.suspended = this._stateGuard(true);
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
ParsingUnit.prototype.resume = function () {
|
||||
this.suspended = this._stateGuard(false);
|
||||
|
||||
//NOTE: don't enter parsing loop if it is locked. Without this lock _runParsingLoop() may be called
|
||||
//while parsing loop is still running. E.g. when suspend() and resume() called synchronously.
|
||||
if (!this.parsingLoopLock)
|
||||
this.parser._runParsingLoop();
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
ParsingUnit.prototype.documentWrite = function (html) {
|
||||
this.parser.tokenizer.preprocessor.write(html);
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
ParsingUnit.prototype.handleScripts = function (scriptHandler) {
|
||||
this.parser.scriptHandler = scriptHandler;
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
ParsingUnit.prototype.done = function (callback) {
|
||||
this.callback = callback;
|
||||
|
||||
return this;
|
||||
};
|
||||
Reference in New Issue
Block a user