import { parseBBCodeTag } from 'pretty-text/engines/markdown-it/bbcode-block'; function tokanizeBBCode(state, silent, ruler) { 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; } let rules = ruler.getRules(); let rule, i; for (i=0; i { opts.features['bbcode-inline'] = true; }); helper.registerPlugin(md => { const ruler = md.inline.bbcode_ruler; md.inline.ruler.push('bbcode-inline', (state,silent) => tokanizeBBCode(state,silent,ruler)); md.inline.ruler2.before('text_collapse', 'bbcode-inline', processBBCode); ruler.push('url', { tag: 'url', replace: function(state, tagInfo, content) { let token; token = state.push('link_open', 'a', 1); token.attrs = [['href', content], ['data-bbcode', 'true']]; token = state.push('text', '', 0); token.content = content; token = state.push('link_close', 'a', -1); return true; } }); ruler.push('email', { tag: 'email', replace: function(state, tagInfo, content) { let token; token = state.push('link_open', 'a', 1); token.attrs = [['href', 'mailto:' + content], ['data-bbcode', 'true']]; token = state.push('text', '', 0); token.content = content; token = state.push('link_close', 'a', -1); return true; } }); ruler.push('image', { tag: 'img', replace: function(state, tagInfo, content) { let token = state.push('image', 'img', 0); token.attrs = [['src', content],['alt','']]; token.children = []; return true; } }); ruler.push('bold', { tag: 'b', wrap: 'span.bbcode-b', }); ruler.push('italic', { tag: 'i', wrap: 'span.bbcode-i' }); ruler.push('underline', { tag: 'u', wrap: 'span.bbcode-u' }); ruler.push('strike', { tag: 's', wrap: 'span.bbcode-s' }); }); }