Files
SkinbaseNova/app/Services/Academy/AcademyLessonMarkdownRenderer.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);
}
}