-
Notifications
You must be signed in to change notification settings - Fork 159
/
MarkdownRenderer.php
63 lines (57 loc) · 1.84 KB
/
MarkdownRenderer.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?hh // strict
/*
* Copyright (c) 2004-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
namespace HHVM\UserDocumentation;
use namespace Facebook\Markdown;
final class MarkdownRenderer {
<<__Memoize>>
private function getParserContext(): Markdown\ParserContext {
$parser_ctx = (new Markdown\ParserContext())
->setBlockContext(
(new MarkdownExt\BlockContext())
->prependBlockTypes(
MarkdownExt\YamlFrontMatterBlock::class,
MarkdownExt\ExamplesIncludeBlock::class,
MarkdownExt\IncludeGeneratedMarkdownBlock::class,
),
)
->setSourceType(Markdown\SourceType::TRUSTED)
->enableHTML_UNSAFE();
$parser_ctx->getInlineContext()
->prependInlineTypes(MarkdownExt\AutoLinkifyInline::class);
return $parser_ctx;
}
<<__Memoize>>
private function getRenderContext(
): MarkdownExt\RenderContext {
$render_ctx = (new MarkdownExt\RenderContext())
->appendFilters(
new MarkdownExt\HeadingAnchorsFilter(),
new MarkdownExt\VersionedImagesFilter(),
new MarkdownExt\InternalMarkdownLinksFilter(),
new MarkdownExt\PrettyCodeBlocksFilter(),
);
return $render_ctx;
}
public function renderMarkdownToHTML(
string $file,
string $markdown,
): string {
$parser_ctx = $this->getParserContext()
->resetFileData()
->setFilePath($file);
$render_ctx = $this
->getRenderContext()
->resetFileData()
->setFilePath($file);
$doc = Markdown\parse($parser_ctx, $markdown);
return (new MarkdownExt\HTMLRenderer($render_ctx))->render($doc);
}
}