aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/FormattingProvider/CommonMark.php
diff options
context:
space:
mode:
authorwinter2025-02-14 17:56:45 +0000
committerwinter2025-02-14 17:56:58 +0000
commit45ac20c7a4d632bbb23aaba50c2d79ac5ebac465 (patch)
treeeb72692648bdf6c6e78d0334d96342dc79ce728d /Digitigrade/FormattingProvider/CommonMark.php
parent42e38069e28f84af921b4ea877dc84b4de02c3fe (diff)
implement formatted note contents (html and commonmark)
Diffstat (limited to 'Digitigrade/FormattingProvider/CommonMark.php')
-rw-r--r--Digitigrade/FormattingProvider/CommonMark.php49
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