|
2 | 2 |
|
3 | 3 | namespace Winter\Docs\Classes; |
4 | 4 |
|
| 5 | +use League\CommonMark\Environment\Environment; |
| 6 | +use League\CommonMark\Extension\Autolink\AutolinkExtension; |
| 7 | +use League\CommonMark\Extension\DisallowedRawHtml\DisallowedRawHtmlExtension; |
| 8 | +use League\CommonMark\Parser\MarkdownParser; |
| 9 | +use League\CommonMark\Renderer\HtmlRenderer; |
5 | 10 | use phpDocumentor\Reflection\DocBlock\Tags\Author; |
6 | 11 | use phpDocumentor\Reflection\DocBlock\Tags\Generic; |
7 | 12 | use phpDocumentor\Reflection\DocBlock\Tags\InvalidTag; |
|
22 | 27 | use PhpParser\NodeFinder; |
23 | 28 | use PhpParser\ParserFactory; |
24 | 29 | use Symfony\Component\Finder\Glob; |
| 30 | +use Winter\Storm\Parse\Markdown\CommonMarkCoreExtension; |
| 31 | +use Winter\Storm\Parse\Markdown\StrikethroughExtension; |
25 | 32 | use Winter\Storm\Support\Arr; |
26 | | -use Winter\Storm\Support\Facades\Markdown; |
| 33 | + |
27 | 34 | /** |
28 | 35 | * PHP API Parser. |
29 | 36 | * |
@@ -66,6 +73,15 @@ class PHPApiParser |
66 | 73 | /** Factory instance for generating DocBlock reflections */ |
67 | 74 | protected DocBlockFactory $docBlockFactory; |
68 | 75 |
|
| 76 | + /** Markdown parsing environment */ |
| 77 | + protected Environment $markdownEnvironment; |
| 78 | + |
| 79 | + /** Markdown parser */ |
| 80 | + protected MarkdownParser $markdownParser; |
| 81 | + |
| 82 | + /** Markdown renderer */ |
| 83 | + protected HtmlRenderer $markdownRenderer; |
| 84 | + |
69 | 85 | /** |
70 | 86 | * Constructor. |
71 | 87 | */ |
@@ -2124,11 +2140,28 @@ protected function sortDefinitions(array &$class) |
2124 | 2140 | */ |
2125 | 2141 | protected function renderMarkdown(string $markdown): string |
2126 | 2142 | { |
| 2143 | + if (!isset($this->markdownEnvironment)) { |
| 2144 | + $this->createMarkdownEnvironment(); |
| 2145 | + } |
| 2146 | + |
2127 | 2147 | try { |
2128 | | - $content = Markdown::parse($markdown); |
2129 | | - return trim($content); |
| 2148 | + $ast = $this->markdownParser->parse($markdown); |
| 2149 | + return trim($this->markdownRenderer->renderDocument($ast)); |
2130 | 2150 | } catch (\Throwable $e) { |
2131 | 2151 | return ''; |
2132 | 2152 | } |
2133 | 2153 | } |
| 2154 | + |
| 2155 | + protected function createMarkdownEnvironment() |
| 2156 | + { |
| 2157 | + $markdown = new Environment(); |
| 2158 | + $markdown->addExtension(new CommonMarkCoreExtension); |
| 2159 | + $markdown->addExtension(new StrikethroughExtension); |
| 2160 | + $markdown->addExtension(new AutolinkExtension); |
| 2161 | + $markdown->addExtension(new DisallowedRawHtmlExtension); |
| 2162 | + |
| 2163 | + $this->markdownEnvironment = $markdown; |
| 2164 | + $this->markdownParser = new MarkdownParser($this->markdownEnvironment); |
| 2165 | + $this->markdownRenderer = new HtmlRenderer($this->markdownEnvironment); |
| 2166 | + } |
2134 | 2167 | } |
0 commit comments