41 lines
1.0 KiB
JavaScript
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
|
|
}
|
|
},
|
|
},
|
|
]
|
|
})
|