'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; | |
}; |