1<?php
2
3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0.
4// See the LICENCE file in the repository root for full licence text.
5
6namespace App\Libraries\Markdown\Indexing;
7
8use App\Libraries\Markdown\CustomContainerInline\Element as CustomContainerInline;
9use App\Libraries\Markdown\Osu\Extension as OsuExtension;
10use App\Libraries\Markdown\StyleBlock\Element as StyleBlock;
11use League\CommonMark\Environment\EnvironmentBuilderInterface;
12use League\CommonMark\Extension\Attributes\AttributesExtension;
13use League\CommonMark\Extension\CommonMark\Node\Block as ExtensionBlock;
14use League\CommonMark\Extension\CommonMark\Node\Inline as ExtensionInline;
15use League\CommonMark\Extension\Footnote;
16use League\CommonMark\Extension\Strikethrough\Strikethrough;
17use League\CommonMark\Extension\Table as TableExtension;
18use League\CommonMark\Node\Block;
19use League\CommonMark\Node\Inline;
20
21class Extension extends OsuExtension
22{
23 public function register(EnvironmentBuilderInterface $environment): void
24 {
25 if ($environment->getConfiguration()->exists('osu_extension/attributes_allowed')) {
26 $environment->addExtension(new AttributesExtension());
27 }
28
29 foreach ($this->renderers() as $class => $renderer) {
30 $environment->addRenderer($class, $renderer, 10);
31 }
32 }
33
34 private function renderers()
35 {
36 return [
37 Block\Document::class => new Renderers\BlockRenderer(),
38 Block\Paragraph::class => new Renderers\BlockRenderer(),
39 CustomContainerInline::class => new Renderers\InlineRenderer(),
40 ExtensionBlock\BlockQuote::class => new Renderers\BlockRenderer(),
41 ExtensionBlock\FencedCode::class => new Renderers\NoopRenderer(),
42 ExtensionBlock\Heading::class => new Renderers\BlockRenderer(),
43 ExtensionBlock\HtmlBlock::class => new Renderers\NoopRenderer(),
44 ExtensionBlock\IndentedCode::class => new Renderers\BlockRenderer(),
45 ExtensionBlock\ListBlock::class => new Renderers\ListBlockRenderer(),
46 ExtensionBlock\ListItem::class => new Renderers\ListItemRenderer(),
47 ExtensionBlock\ThematicBreak::class => new Renderers\BlockRenderer(),
48 ExtensionInline\Code::class => new Renderers\InlineRenderer(),
49 ExtensionInline\Emphasis::class => new Renderers\InlineRenderer(),
50 ExtensionInline\HtmlInline::class => new Renderers\NoopRenderer(),
51 ExtensionInline\Image::class => new Renderers\NoopRenderer(),
52 ExtensionInline\Link::class => new Renderers\InlineRenderer(),
53 ExtensionInline\Strong::class => new Renderers\InlineRenderer(),
54 Footnote\Node\Footnote::class => new Renderers\NoopRenderer(),
55 Footnote\Node\FootnoteBackref::class => new Renderers\NoopRenderer(),
56 Footnote\Node\FootnoteContainer::class => new Renderers\NoopRenderer(),
57 Footnote\Node\FootnoteRef::class => new Renderers\NoopRenderer(),
58 Inline\Newline::class => new Renderers\NewlineRenderer(),
59 Inline\Text::class => new Renderers\InlineRenderer(),
60 Strikethrough::class => new Renderers\InlineRenderer(),
61 StyleBlock::class => new Renderers\BlockRenderer(),
62 TableExtension\Table::class => new Renderers\TableRenderer(),
63 TableExtension\TableCaption::class => new Renderers\NoopRenderer(),
64 TableExtension\TableSection::class => new Renderers\TableRenderer(),
65 TableExtension\TableRow::class => new Renderers\TableRenderer(),
66 TableExtension\TableCell::class => new Renderers\TableRenderer(),
67 ];
68 }
69}