3 namespace BookStack\Entities\Tools\Markdown;
5 use BookStack\Facades\Theme;
6 use BookStack\Theming\ThemeEvents;
7 use League\CommonMark\Environment\Environment;
8 use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
9 use League\CommonMark\Extension\CommonMark\Node\Block\ListItem;
10 use League\CommonMark\Extension\Table\TableExtension;
11 use League\CommonMark\Extension\TaskList\TaskListExtension;
12 use League\CommonMark\MarkdownConverter;
16 protected string $markdown;
18 public function __construct(string $markdown)
20 $this->markdown = $markdown;
23 public function convert(): string
25 $environment = new Environment();
26 $environment->addExtension(new CommonMarkCoreExtension());
27 $environment->addExtension(new TableExtension());
28 $environment->addExtension(new TaskListExtension());
29 $environment->addExtension(new CustomStrikeThroughExtension());
30 $environment = Theme::dispatch(ThemeEvents::COMMONMARK_ENVIRONMENT_CONFIGURE, $environment) ?? $environment;
31 $converter = new MarkdownConverter($environment);
33 $environment->addRenderer(ListItem::class, new CustomListItemRenderer(), 10);
35 return $converter->convert($this->markdown)->getContent();