39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
|
'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);
|
||
|
};
|