Bulletin Board Code (BBCode) is a library to transform a string from:
- BBCode to HTML
- HTML to BBCode
Table of Contents
npm install bulletin-board-code --save
- ✨ bidirectional transformation (HTML & BBCode)
- 📚 support nested BBCodes
- 🛠️ automatic repair mode
- 🧩 set/unset custom handlers for transformation
For an overview of all predefined BBCodes, take a look at the following file. To see them in action, the test directory can be inspected.
import { Parser } from 'bulletin-board-code';
// initialize the parser
const parser = new Parser();
console.log(parser.toHTML('[b]foo[/b]'));
// <strong>foo</strong>
import { Parser } from 'bulletin-board-code';
// initialize the parser
const parser = new Parser();
console.log(parser.toBBCode('<strong>foo</strong>'));
// [b]foo[/b]
A handler describes how parsed tokens should be transformed to HTML or BBCode. Furthermore, the handler specifies conditions, when to match with a token.
To set a (new) handler use the following approach:
import { Parser } from 'bulletin-board-code';
const parser = new Parser();
parser.setHandler('lazy', {
conditions: [{ attribute: { lazy: null } }],
bbcode: '[lazy]{0}[/lazy]',
html: '<span lazy="true">lazy: {0}</span>'
});
console.log(parser.toHTML('[lazy]foo[/lazy]'));
// <span lazy="true">lazy: foo</span>
console.log(parser.toBBCode('<span lazy="true">lazy: foo</span>'));
// [lazy]foo[/lazy]
To unset a handler use the following approach:
import { Parser, unsetHandler } from 'bulletin-board-code';
const parser = new Parser();
parser.unsetHandler('h1');
parser.unsetHandler(['h2', 'h3']);
console.log(parser.toHTML('[h1]foo[/h1]'));
// [h1]foo[/h1]
console.log(parser.toBBCode('<h1>foo</h1>'));
// <h1>foo</h1>
The following options can be passed to the parser as constructor argument.
declare type ParserOptions = {
/**
* Add a set of handlers to the already predefined ones.
*
* default: {}
*/
handlers: Record<string, Handler>,
/**
* If to add a new line before block level elements
*
* default: false
*/
breakBeforeBlock: boolean,
/**
* If to add a new line after the start of block level elements
*
* default: false
*/
breakStartBlock: boolean,
/**
* If to add a new line before the end of block level elements
*
* default: false
*/
breakEndBlock: boolean,
/**
* If to add a new line after block level elements.
*
* default: true
*/
breakAfterBlock: boolean,
/**
* If to remove empty tags.
*
* default: true
*/
removeEmptyTags: boolean,
/**
* If to fix invalid nesting, like block level elements inside inline elements.
*
* default: true
*/
fixInvalidNesting: boolean,
/**
* If to fix invalid children. i.e.
* A tag which is inside a parent that doesn’t allow that type of tag as a child.
*
* default: true
*/
fixInvalidChildren: boolean,
/**
* The default attribute quote type.
*
* default: QuoteType.auto
*/
quoteType: `${QuoteType}`,
/**
* Lazy transformation without handler.
* Otherwise, library will attempt to construct html or bbcode without handler.
*
* default: true
*/
lazyTransformation: boolean
};
Made with 💚
Published under MIT License.