35 lines
940 B
JavaScript
35 lines
940 B
JavaScript
import unified from 'unified';
|
|
import remarkToMarkdown from 'remark-parse';
|
|
import { Mark } from 'prosemirror-model';
|
|
import markdownToProseMirror from './markdownToProseMirror';
|
|
|
|
const state = { activeMarks: Mark.none, textsArray: [] };
|
|
|
|
/**
|
|
* Uses unified to parse markdown and apply plugins.
|
|
* @param {string} src raw markdown
|
|
* @returns {Node} a ProseMirror Node
|
|
*/
|
|
function parser(src) {
|
|
const result = unified()
|
|
.use(remarkToMarkdown, { fences: true, footnotes: true, pedantic: true })
|
|
.parse(src);
|
|
|
|
return unified()
|
|
.use(markdownToProseMirror, { state })
|
|
.runSync(result);
|
|
}
|
|
|
|
/**
|
|
* Gets the parser and makes schema and plugins available at top scope.
|
|
* @param {Schema} schema - a ProseMirror schema
|
|
* @param {Map} plugins - Immutable Map of registered plugins
|
|
*/
|
|
function parserGetter(schema, plugins) {
|
|
state.schema = schema;
|
|
state.plugins = plugins;
|
|
return parser;
|
|
}
|
|
|
|
export default parserGetter;
|