Parse BBCode into AST and convert into HTML
Version vom
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/549682/1661584/BBCode%20Parser.js
A BBCode parser without any built-in parsing rules, allowing users to implement their own rules.
const parser = new BBCodeParser();
A rule for [url=URL]CONTENT[/url] and [url]URL_AS_CONTENT[/url] can be registered like this:
parser.register({
'url': {
openTag(params, content) {
let url = params ?? content;
url = url.startsWith('http://') || url.startsWith('https://') ? url : 'http://' + url;
return `<a href="${ url }" target="_blank">`;
},
closeTag(params, content) {
return '</a>'
},
}
});
A rule for [b]CONTENT[/b] can be registered like this:
parser.register({
'b': {
openTag(params, content) {
return '<b>';
},
closeTag(params, content) {
return '</b>';
},
},
});
And yes, they can be registered with one call:
``` javascript
parser.register({
'url': {
openTag(params, content) {
let url = params ?? content;
url = url.startsWith('http://') || url.startsWith('https://') ? url : 'http://' + url;
return `<a href="${ url }" target="_blank">`;
},
closeTag(params, content) {
return '</a>'
},
},
'b': {
openTag(params, content) {
return '<b>';
},
closeTag(params, content) {
return '</b>';
},
},
});
const result = parser.parse('[b]Hello[/b], [url=https://example.com/]bbcode[/url]');
// You can access html or ast / nodes in result object, like
console.log(result.html);
Please refer to JSDoc in source code.