38 lines
1006 B
PHP
38 lines
1006 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Service;
|
|
|
|
use League\CommonMark\MarkdownConverter;
|
|
use League\CommonMark\Environment\Environment;
|
|
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
|
|
use League\CommonMark\Extension\GithubFlavoredMarkdownExtension;
|
|
|
|
final class MarkdownRenderer
|
|
{
|
|
private MarkdownConverter $converter;
|
|
|
|
public function __construct()
|
|
{
|
|
$config = [
|
|
'html_input' => 'strip',
|
|
'allow_unsafe_links' => false,
|
|
];
|
|
|
|
$environment = new Environment($config);
|
|
|
|
// Core Markdown
|
|
$environment->addExtension(new CommonMarkCoreExtension());
|
|
|
|
// GitHub Flavored Markdown (Tables, Strikethrough, Autolinks, Task Lists)
|
|
$environment->addExtension(new GithubFlavoredMarkdownExtension());
|
|
|
|
$this->converter = new MarkdownConverter($environment);
|
|
}
|
|
|
|
public function render(string $markdown): string
|
|
{
|
|
return (string) $this->converter->convert($markdown);
|
|
}
|
|
} |