the browser-facing portion of osu!
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\Osu\Renderers;
7
8use InvalidArgumentException;
9use League\CommonMark\Extension\Table\Table;
10use League\CommonMark\Extension\Table\TableRenderer as BaseTableRenderer;
11use League\CommonMark\Node\Node;
12use League\CommonMark\Renderer\ChildNodeRendererInterface;
13use League\CommonMark\Renderer\NodeRendererInterface;
14use League\CommonMark\Util\HtmlElement;
15
16class TableRenderer implements NodeRendererInterface
17{
18 private BaseTableRenderer $baseRenderer;
19
20 public function __construct()
21 {
22 $this->baseRenderer = new BaseTableRenderer();
23 }
24
25 public function render(Node $node, ChildNodeRendererInterface $childRenderer)
26 {
27 Table::assertInstanceOf($node);
28
29 $baseTable = $this->baseRenderer->render($node, $childRenderer);
30
31 if (!($baseTable instanceof HtmlElement)) {
32 throw new InvalidArgumentException('Invalid element type: '.get_class($baseTable));
33 }
34
35 $table = new HtmlElement('table', [], $baseTable->getContents());
36
37 return new HtmlElement('div', $baseTable->getAllAttributes(), $table);
38 }
39}