import { parseBBCodeTag } from 'pretty-text/engines/markdown-it/bbcode-block'; const rules = { 'b': {tag: 'span', 'class': 'bbcode-b'}, 'i': {tag: 'span', 'class': 'bbcode-i'}, 'u': {tag: 'span', 'class': 'bbcode-u'}, 's': {tag: 'span', 'class': 'bbcode-s'} }; function tokanizeBBCode(state, silent) { let pos = state.pos; // 91 = [ if (silent || state.src.charCodeAt(pos) !== 91) { return false; } const tagInfo = parseBBCodeTag(state.src, pos, state.posMax); if (!tagInfo) { return false; } const rule = rules[tagInfo.tag]; if (!rule) { return false; } tagInfo.rule = rule; let token = state.push('text', '' , 0); token.content = state.src.slice(pos, pos+tagInfo.length); state.delimiters.push({ bbInfo: tagInfo, marker: 'bb' + tagInfo.tag, open: !tagInfo.closing, close: !!tagInfo.closing, token: state.tokens.length - 1, level: state.level, end: -1, jump: 0 }); state.pos = pos + tagInfo.length; return true; } function processBBCode(state, silent) { let i, startDelim, endDelim, token, tagInfo, delimiters = state.delimiters, max = delimiters.length; if (silent) { return; } for (i=0; i { opts.features['bbcode-inline'] = true; }); helper.registerPlugin(md => { md.inline.ruler.push('bbcode-inline', tokanizeBBCode); md.inline.ruler2.before('text_collapse', 'bbcode-inline', processBBCode); }); }