Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

⚡️Blazing fast js bbcode parser, that transforms and parses bbcode to AST and transform it to HTML, React, Vue with plugin support in pure javascript, no dependencies

License

NotificationsYou must be signed in to change notification settings

JiLiZART/BBob

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BBob a BBCode processor

BBob is a tool to parse and transform [BBCode](https://en.wikipedia.org/wiki/BBCode)written in pure javascript, no dependencies

TestsBenchmarkCoverage StatusCodeFactorKnown Vulnerabilities

Packages

PackageStatusSizeDescription
@bbob/react@bbob/react-status@bbob/react-sizeReact renderer
@bbob/preset-react@bbob/preset-react-status@bbob/preset-react-sizeReact default tags preset
@bbob/vue3@bbob/vue3-status@bbob/vue3-sizeVue 3 renderer
@bbob/vue2@bbob/vue2-status@bbob/vue2-sizeVue 2 renderer
@bbob/preset-vue@bbob/preset-vue-status@bbob/preset-vue-sizeVue default tags preset
@bbob/html@bbob/html-status@bbob/html-sizeHTML renderer
@bbob/preset-html5@bbob/preset-html5-status@bbob/preset-html5-sizeHTML5 default tags preset
@bbob/core@bbob/core-status@bbob/core-sizeCore package

DEMO Playground

Table of contents

Basic usage

npm i @bbob/html @bbob/preset-html5
importbbobHTMLfrom'@bbob/html'importpresetHTML5from'@bbob/preset-html5'constprocessed=bbobHTML(`[i]Text[/i]`,presetHTML5())console.log(processed);// <span>Text</span>

React usage

npm i @bbob/react @bbob/preset-react
importReactfrom'react'importBBCodefrom'@bbob/react';importpresetReactfrom'@bbob/preset-react';constplugins=[presetReact()];exportdefault()=>(<BBCodeplugins={plugins}>    [table]      [tr]          [td]table 1[/td]          [td]table 2[/td]      [/tr]      [tr]          [td]table 3[/td]          [td]table 4[/td]      [/tr]    [/table]</BBCode>)
import{render}from'@bbob/react'exportdefault()=>render(`[table]  [tr]      [td]table 1[/td]      [td]table 2[/td]  [/tr]  [tr]      [td]table 3[/td]      [td]table 4[/td]  [/tr][/table]`)

Vue 2 usage

npm i @bbob/vue2 @bbob/preset-vue
importVuefrom'vue'importVueBbobfrom'@bbob/vue2';Vue.use(VueBbob);
<template><divclass="html"><h2>Generated HTML here</h2><bbob-bbcodecontainer="div":plugins="plugins">{{ bbcode }}</bbob-bbcode></div></template><script>importVuefrom'vue'importpresetfrom'@bbob/preset-vue'exportdefaultVue.extend({name:'App',data(){return{bbcode:'Text [b]bolded[/b] and [i]Some Name[/i]',plugins:[preset()],}}})</script>

More examples available inexamples folder

Parse options

onlyAllowTags

Parse only allowed tags

importbbobHTMLfrom'@bbob/html'importpresetHTML5from'@bbob/preset-html5'constprocessed=bbobHTML(`[i][b]Text[/b][/i]`,presetHTML5(),{onlyAllowTags:['i']})console.log(processed);// <span>[b]Text[/b]</span>

contextFreeTags

Enable context free mode that ignores parsing all tags inside given tags

importbbobHTMLfrom'@bbob/html'importpresetHTML5from'@bbob/preset-html5'constprocessed=bbobHTML(`[b]Text[/b][code][b]Text[/b][/code]`,presetHTML5(),{contextFreeTags:['code']})console.log(processed);// <span>Text</span><pre>[b]Text[/b]</pre>

enableEscapeTags

Enable escape support for tags

importbbobHTMLfrom'@bbob/html'importpresetHTML5from'@bbob/preset-html5'constprocessed=bbobHTML(`[b]Text[/b]'\\[b\\]Text\\[/b\\]'`,presetHTML5(),{enableEscapeTags:true})console.log(processed);// <span>Text</span>[b]Text[/b]

caseFreeTags

Allows to parse case insensitive tags like[h1]some[/H1] -><h1>some</h1>

importbbobHTMLfrom'@bbob/html'importpresetHTML5from'@bbob/preset-html5'constprocessed=bbobHTML(`[h1]some[/H1]`,presetHTML5(),{caseFreeTags:true})console.log(processed);// <h1>some</h1>
importbbobHTMLfrom'@bbob/html'importpresetHTML5from'@bbob/preset-html5'constprocessed=bbobHTML(`[b]Text[/b]'\\[b\\]Text\\[/b\\]'`,presetHTML5(),{enableEscapeTags:true})console.log(processed);// <span>Text</span>[b]Text[/b]

Presets

Its a way to transform parsed BBCode AST tree to another tree by rules in preset

Create your own preset

import{createPreset}from'@bbob/preset'exportdefaultcreatePreset({quote:(node)=>({tag:'blockquote',attrs:node.attrs,content:[{tag:'p',attrs:{},content:node.content,}],}),})

HTML Preset

Also you can use predefined preset for HTML

importhtml5Presetfrom'@bbob/preset-html5/es'import{render}from'@bbob/html/es'importbbobfrom'@bbob/core'console.log(bbob(html5Preset()).process(`[quote]Text[/quote]`,{ render}).html)// <blockquote><p>Text</p></blockquote>

React Preset

Also you can use predefined preset for React

importreactPresetfrom"@bbob/preset-react";importreactRenderfrom"@bbob/react/es/render";constpreset=reactPreset.extend((tags,options)=>({  ...tags,quote:node=>({tag:"blockquote",content:node.content})}));constresult=reactRender(`[quote]Text[/quote]`,reactPreset());/*It produces a VDOM Nodes equal toReact.createElement('blockquote', 'Text')*/document.getElementById("root").innerHTML=JSON.stringify(result,4);

Edit lp7q9yj0lq

React usage

Component

Or you can use React Component

importReactfrom'react'import{render}from'react-dom'importBBCodefrom'@bbob/react/es/Component'importreactPresetfrom'@bbob/preset-react/es'constMyComponent=()=>(<BBCodeplugins={[reactPreset()]}options={{onlyAllowTags:['i']}}>    [quote]Text[/quote]</BBCode>)render(<MyComponent/>)// <div><blockquote><p>Text</p></blockquote></div>

Edit 306pzr9k5p

Render prop

Or pass result as render prop

importReactfrom"react";import{render}from'react-dom'importreactRenderfrom'@bbob/react/es/render'importreactPresetfrom'@bbob/preset-react/es'consttoReact=input=>reactRender(input,reactPreset())consttext=toReact('[b]Super [i]easy[/i][/b] [u]to[/u] render')constApp=({ renderProp})=>(<span>{text}</span>)render(<App/>)// <span><span>Super <span>easy</span></span> <span>to</span> render</span>

Edit x7w52lqmzz

PostHTML usage

Create Plugin

For example lets parse all strings that similar to links like "https://some-site.com"

import{createRoot}from"react-dom/client";importBBCodefrom"@bbob/react/es/Component";importTagNodefrom"@bbob/plugin-helper/es/TagNode";import{isStringNode}from"@bbob/plugin-helper/es";constURL_RE=newRegExp(`([--:\\w?@%&+~#=]+\\/*\\.[a-z]{2,4}\\/{0,2})((?:[?&](?:\\w+)=(?:\\w+))+|[^^).|,][--:\\w?@%&+~#=()_]+)?`,"g");constisValidUrl=(url)=>URL_RE.test(url);constlinkParsePlugin=(tree)=>{returntree.walk((node)=>{if(isStringNode(node)&&isValidUrl(node)){returnTagNode.create("a",{href:node},`Url to:${node}`);}returnnode;});};constrootElement=document.getElementById("root");constroot=createRoot(rootElement);root.render(<BBCodeplugins={[linkParsePlugin]}>    https://github.com/JiLiZART/BBob Other text without link</BBCode>);

Edit x7w52lqmzz

Benchmarks

To test on your machine run

npm run buildnode benchmark

Tested on Node v20.11.1

PackageOps/sec
regex/parser6 ops/sec
ya-bbcode11 ops/sec
xbbcode/parser102 ops/sec
@bbob/parser174 ops/sec

Checkout Benckmark job results

Donations

You can support this projecti with donation in:

Bitcoin:bc1qx34sx3zmfd5e2km607p8s8t30d4rt33d2l9pwt

USDT(TRC20):TT94uVjJho8n47xbdfNYz6vdebgmKFpxAT

Also thanks to support

Jetbrains IDEA

Developed with <3 using JetBrains

About

⚡️Blazing fast js bbcode parser, that transforms and parses bbcode to AST and transform it to HTML, React, Vue with plugin support in pure javascript, no dependencies

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp