54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
'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;
|
|
};
|