@readme/markdown
Version:
ReadMe's React-based Markdown parser
48 lines (40 loc) • 987 B
JavaScript
const rgx = /^\[([\w ]*)\]\((\S*) ["'](@\w*)"\)/;
function tokenizer(eat, value) {
if (!rgx.test(value)) return true;
// eslint-disable-next-line prefer-const
let [match, title, url, provider] = rgx.exec(value);
return eat(match)({
type: 'embed',
title,
url,
provider,
data: {
title,
url,
provider,
hProperties: { title, url, provider },
hName: 'rdme-embed',
},
children: [
{
type: 'link',
url,
title: provider,
children: [{ type: 'text', value: title }],
},
],
});
}
function parser() {
const { Parser } = this;
const tokenizers = Parser.prototype.blockTokenizers;
const methods = Parser.prototype.blockMethods;
tokenizers.embed = tokenizer;
methods.splice(methods.indexOf('newline'), 0, 'embed');
}
module.exports = parser;
module.exports.sanitize = sanitizeSchema => {
const tags = sanitizeSchema.tagNames;
tags.push('embed');
return parser;
};