Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
Markdown
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
2 / 2
3
100.00% covered (success)
100.00%
1 / 1
 render
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 getRenderer
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace Engelsystem\Helpers;
6
7use League\CommonMark\Environment\Environment;
8use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
9use League\CommonMark\Extension\DefaultAttributes\DefaultAttributesExtension;
10use League\CommonMark\Extension\GithubFlavoredMarkdownExtension;
11use League\CommonMark\Extension\Table\Table;
12use League\CommonMark\MarkdownConverter;
13use League\CommonMark\Util\HtmlFilter;
14
15class Markdown
16{
17    public function render(string $text, bool $allowHtml = false): string
18    {
19        $renderer = $this->getRenderer($allowHtml);
20        $content = $renderer->convert($text)
21            ->getContent();
22        return rtrim($content, PHP_EOL);
23    }
24
25    protected function getRenderer(bool $allowHtml): MarkdownConverter
26    {
27        $config = [
28            'html_input' => $allowHtml ? HtmlFilter::ALLOW : HtmlFilter::ESCAPE,
29            'allow_unsafe_links' => false,
30            'max_nesting_level' => 42,
31            'max_delimiters_per_line' => 42,
32            'default_attributes' => [
33                Table::class => [
34                    'class' => ['table', 'table-striped', 'table-sticky-header', 'data'],
35                ],
36            ],
37            'table' => [
38                'alignment_attributes' => [
39                    'left' => ['class' => 'text-start'],
40                    'center' => ['class' => 'text-center'],
41                    'right' => ['class' => 'text-end'],
42                ],
43            ],
44        ];
45
46        $environment = new Environment($config);
47        $environment->addExtension(new CommonMarkCoreExtension());
48        $environment->addExtension(new GithubFlavoredMarkdownExtension());
49        $environment->addExtension(new DefaultAttributesExtension());
50
51        return new MarkdownConverter($environment);
52    }
53}