marked-mfm/src/index.js

41 lines
1.0 KiB
JavaScript

export default (options = {}) => ({
extensions: [
{
name: 'mfm',
level: 'inline',
start(src) { return src.match(/\$\[/)?.index },
tokenizer (src, tokens) {
const rule = /^\$\[([\w\d]+) (.+)\]$/
const match = rule.exec(src)
if (match) {
const token = {
type: 'mfm',
raw: match[0],
markup: match[1],
text: match[2],
tokens: []
}
this.lexer.inline(token.text, token.tokens)
return token
}
},
renderer (token) {
const el = tokenClass => `<span style="display: inline-block" class="${tokenClass}">${this.parser.parseInline(token.tokens)}</span>`
switch (token.markup) {
case 'x2':
return el('x2')
break
case 'twitch':
return el('twitch')
break
case 'sparkle':
return el('sparkle')
break
default:
return token.raw
}
},
},
]
})