52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
|
/**
|
||
|
* @typedef {import('micromark-util-types').Create} Create
|
||
|
* @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension
|
||
|
* @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct
|
||
|
* @typedef {import('micromark-util-types').ParseContext} ParseContext
|
||
|
* @typedef {import('micromark-util-types').ParseOptions} ParseOptions
|
||
|
*/
|
||
|
|
||
|
import {combineExtensions} from 'micromark-util-combine-extensions'
|
||
|
import {content} from './initialize/content.js'
|
||
|
import {document} from './initialize/document.js'
|
||
|
import {flow} from './initialize/flow.js'
|
||
|
import {string, text} from './initialize/text.js'
|
||
|
import {createTokenizer} from './create-tokenizer.js'
|
||
|
import * as defaultConstructs from './constructs.js'
|
||
|
|
||
|
/**
|
||
|
* @param {ParseOptions | null | undefined} [options]
|
||
|
* @returns {ParseContext}
|
||
|
*/
|
||
|
export function parse(options) {
|
||
|
const settings = options || {}
|
||
|
const constructs = /** @type {FullNormalizedExtension} */ (
|
||
|
combineExtensions([defaultConstructs, ...(settings.extensions || [])])
|
||
|
)
|
||
|
|
||
|
/** @type {ParseContext} */
|
||
|
const parser = {
|
||
|
defined: [],
|
||
|
lazy: {},
|
||
|
constructs,
|
||
|
content: create(content),
|
||
|
document: create(document),
|
||
|
flow: create(flow),
|
||
|
string: create(string),
|
||
|
text: create(text)
|
||
|
}
|
||
|
|
||
|
return parser
|
||
|
|
||
|
/**
|
||
|
* @param {InitialConstruct} initial
|
||
|
*/
|
||
|
function create(initial) {
|
||
|
return creator
|
||
|
/** @type {Create} */
|
||
|
function creator(from) {
|
||
|
return createTokenizer(parser, initial, from)
|
||
|
}
|
||
|
}
|
||
|
}
|