takedown
Version:
Customizable markdown parser
43 lines (31 loc) • 1.11 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var iterate = require('./iterate.js');
var streamer = require('./streamer.js');
function parser ({ document, agentPool, madoe })
{
let inlineParser = ({ name, nestable }) =>
{
if (nestable?.length )
{
let entity = { name, type: 'inline', nestable };
return source => parse(source, entity).model.chunks
}
};
let context = { document, inlineParser, madoe };
let agenter = context =>
{
let agent = (...args) => agentPool.get().initialize({ ...context, agent }, ...args);
agent.repool = agentPool.renew;
return agent;
};
let parse = (source, entity) =>
{
let [ stream, streamFn ] = streamer.default(source, madoe[madoe(entity).type]);
let get = agenter({ ...context, current: {}, stream, streamFn });
// use `stream` (iterable) to parse `source` into `root` entity
return iterate.default(get(entity), stream);
};
return parse;
}
exports.default = parser;
;