BBob is a tool to parse and transform BBCode written in pure javascript, no dependencies
npm i @bbob/core @bbob/html @bbob/preset-html5
import bbob from '@bbob/core'
import { render } from '@bbob/html'
import presetHTML5 from '@bbob/preset-html5'
const processed = bbob(presetHTML5()).process(`[i]Text[/i]`, { render })
console.log(processed.html); // <span style="font-style: italic;">Text</span>
Its a way to transform parsed BBCode AST tree to another tree by rules in preset
import { createPreset } from '@bbob/preset'
import { render } from '@bbob/html'
import bbob from '@bbob/core'
const preset = createPreset({
quote: node => ({
tag: 'blockquote',
attrs: {},
content: [{
tag: 'p',
attrs: {},
content: node.content,
}],
}),
})
console.log(bbob(preset()).process(`[quote]Text[/quote]`, { render }).html) // <blockquote><p>Text</p></blockquote>
Also you can use predefined preset for HTML
import html5Preset from '@bbob/preset-html5'
import { render } from '@bbob/html'
import bbob from '@bbob/core'
console.log(bbob(html5Preset()).process(`[quote]Text[/quote]`, { render }).html) // <blockquote><p>Text</p></blockquote>
Also you can use predefined preset for React
import reactPreset from '@bbob/preset-react'
import { render } from '@bbob/react'
import bbob from '@bbob/core'
console.log(bbob(reactPreset()).process(`[quote]Text[/quote]`, { render }).html)
/* It produces a VDOM Nodes equal to
React.createElement('blockquote', React.createElement('p', 'Text'))
*/
Or you can use React Component
import React from 'react'
import { render } from 'react-dom'
import BBCode from '@bbob/react'
import reactPreset from '@bbob/preset-react'
const MyComponent = () => (
<BBCode plugins={[reactPreset()]}>
[quote]Text[/quote]
</BBCode>
)
render(<MyComponent />) // <div><blockquote><p>Text</p></blockquote></div>