|
- <?php
-
- namespace App\Helper;
-
- // formatting
- use App\BbCode\Tag\Unknown;
- use App\BbCode\Tag\Text;
- use App\BbCode\Tag\Bold;
- use App\BbCode\Tag\Italic;
- use App\BbCode\Tag\Underline;
- use App\BbCode\Tag\Strikethrough;
- use App\BbCode\Tag\Spoiler;
- use App\BbCode\Tag\HeadingOne;
- use App\BbCode\Tag\HeadingTwo;
- use App\BbCode\Tag\Link;
- use App\BbCode\Tag\Code;
- // quotes
- use App\BbCode\Tag\Quote;
- use App\BbCode\Tag\Blockquote;
- // embeds
- use App\BbCode\Tag\Image;
- use App\BbCode\Tag\Twitter;
- use App\BbCode\Tag\Youtube;
- use App\BbCode\Tag\Video;
-
- use Knockout\BbCode\BbCode as Parser;
- use Knockout\BbCode\Tokenizer\Tokenizer;
-
- class BBCode {
-
- private $tokens;
-
- public function __construct($content)
- {
- $this->tokens = (new Tokenizer())->tokenize($content);
- }
-
- public function render()
- {
- $parser = new Parser();
-
- $unknown = new Unknown();
- $parser->addTag($unknown);
-
- $text = new Text();
- $parser->addTag($text);
-
- $bold = new Bold();
- $parser->addTag($bold);
-
- $italic = new Italic();
- $parser->addTag($italic);
-
- $underline = new Underline();
- $parser->addTag($underline);
-
- $strikethrough = new Strikethrough();
- $parser->addTag($strikethrough);
-
- $image = new Image();
- $parser->addTag($image);
-
- $link = new Link();
- $parser->addTag($link);
-
- $code = new Code();
- $parser->addTag($code);
-
- $quote = new Quote();
- $parser->addTag($quote);
-
- $blockquote = new Blockquote();
- $parser->addTag($blockquote);
-
- $twitter = new Twitter();
- $parser->addTag($twitter);
-
- $youtube = new Youtube();
- $parser->addTag($youtube);
-
- $video = new Video();
- $parser->addTag($video);
-
- $tags = [
- $unknown,
- $text,
- $bold,
- $italic,
- $underline,
- $strikethrough,
- $image,
- $link,
- $code,
- $quote,
- $blockquote,
- $twitter,
- $youtube,
- $video
- ];
-
- $anyChild = [
- $bold,
- $quote,
- $blockquote,
- $text,
- $unknown
- ];
-
- foreach ($anyChild as $parent) {
- foreach ($tags as $tag) {
- $parser->addAllowedChildTag($parent, $tag);
- }
- }
-
- return $parser->format($this->tokens);
- }
-
- }
|