diff options
Diffstat (limited to 'Digitigrade/FormattingProvider/CommonMark.php')
| -rw-r--r-- | Digitigrade/FormattingProvider/CommonMark.php | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Digitigrade/FormattingProvider/CommonMark.php b/Digitigrade/FormattingProvider/CommonMark.php new file mode 100644 index 0000000..d90ca17 --- /dev/null +++ b/Digitigrade/FormattingProvider/CommonMark.php @@ -0,0 +1,49 @@ +<?php +namespace Digitigrade\FormattingProvider; + +use Digitigrade\FormattingProvider; +use Digitigrade\GlobalConfig; +use Digitigrade\Singleton; +use League\CommonMark\Environment\Environment; +use League\CommonMark\Extension\Autolink\AutolinkExtension; +use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension; +use League\CommonMark\Extension\ExternalLink\ExternalLinkExtension; +use League\CommonMark\Extension\Strikethrough\StrikethroughExtension; +use League\CommonMark\MarkdownConverter; + +class CommonMark extends Singleton implements FormattingProvider { + private MarkdownConverter $converter; + + protected function __construct() { + $env = new Environment([ + 'html_input' => 'escape', + 'renderer' => [ + 'soft_break' => '<br>' + ], + 'autolink' => [ + 'allowed_protocols' => SanitisedHtml::ALLOWED_URL_SCHEMES + ], + 'external_link' => [ + 'internal_hosts' => [GlobalConfig::getInstance()->getCanonicalHost()], + 'open_in_new_window' => true, + 'nofollow' => 'all', + 'noopener' => 'all', + 'noreferrer' => 'external' + ] + ]); + $env->addExtension(new CommonMarkCoreExtension); + $env->addExtension(new AutolinkExtension); + $env->addExtension(new ExternalLinkExtension); + $env->addExtension(new StrikethroughExtension); + $this->converter = new MarkdownConverter($env); + } + + public function renderToHtml(string $input): string { + return $this->converter->convert($input); + } + + public function renderToPlainText(string $input): string { + // TODO: somehow remove markup and leave the unformatted content behind + return htmlspecialchars($input); + } +}
\ No newline at end of file |
