42 lines
1.1 KiB
PHP
42 lines
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services\Academy;
|
|
|
|
use League\CommonMark\Environment\Environment;
|
|
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
|
|
use League\CommonMark\Extension\GithubFlavoredMarkdownExtension;
|
|
use League\CommonMark\MarkdownConverter;
|
|
|
|
final class AcademyLessonMarkdownRenderer
|
|
{
|
|
private ?MarkdownConverter $converter = null;
|
|
|
|
public function render(?string $markdown): string
|
|
{
|
|
$trimmed = trim((string) $markdown);
|
|
|
|
if ($trimmed === '') {
|
|
return '';
|
|
}
|
|
|
|
return trim((string) $this->converter()->convert($trimmed)->getContent());
|
|
}
|
|
|
|
private function converter(): MarkdownConverter
|
|
{
|
|
if ($this->converter instanceof MarkdownConverter) {
|
|
return $this->converter;
|
|
}
|
|
|
|
$environment = new Environment([
|
|
'html_input' => 'strip',
|
|
'allow_unsafe_links' => false,
|
|
]);
|
|
$environment->addExtension(new CommonMarkCoreExtension());
|
|
$environment->addExtension(new GithubFlavoredMarkdownExtension());
|
|
|
|
return $this->converter = new MarkdownConverter($environment);
|
|
}
|
|
} |