51 lines
1.5 KiB
JavaScript
51 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)
|
|
}
|
|
}
|
|
}
|