|
2 | 2 |
|
3 | 3 | namespace Rareloop\Primer\DocumentParsers\Markdown; |
4 | 4 |
|
5 | | -use League\CommonMark\Block\Parser as BlockParser; |
| 5 | +use League\CommonMark\Extension\CommonMark\Node\Block\BlockQuote; |
| 6 | +use League\CommonMark\Extension\CommonMark\Node\Block\FencedCode; |
| 7 | +use League\CommonMark\Extension\CommonMark\Node\Block\Heading; |
| 8 | +use League\CommonMark\Extension\CommonMark\Node\Block\HtmlBlock; |
| 9 | +use League\CommonMark\Extension\CommonMark\Node\Block\IndentedCode; |
| 10 | +use League\CommonMark\Extension\CommonMark\Node\Block\ListBlock; |
| 11 | +use League\CommonMark\Extension\CommonMark\Node\Block\ListItem; |
| 12 | +use League\CommonMark\Extension\CommonMark\Node\Block\ThematicBreak; |
| 13 | +use League\CommonMark\Extension\CommonMark\Node\Inline\Code; |
| 14 | +use League\CommonMark\Extension\CommonMark\Node\Inline\Emphasis; |
| 15 | +use League\CommonMark\Extension\CommonMark\Node\Inline\HtmlInline; |
| 16 | +use League\CommonMark\Extension\CommonMark\Node\Inline\Image; |
| 17 | +use League\CommonMark\Extension\CommonMark\Node\Inline\Link; |
| 18 | +use League\CommonMark\Extension\CommonMark\Node\Inline\Strong; |
| 19 | +use League\CommonMark\Extension\CommonMark\Parser\Block\BlockQuoteStartParser; |
| 20 | +use League\CommonMark\Extension\CommonMark\Parser\Block\FencedCodeStartParser; |
| 21 | +use League\CommonMark\Extension\CommonMark\Parser\Block\HeadingStartParser; |
| 22 | +use League\CommonMark\Extension\CommonMark\Parser\Block\HtmlBlockStartParser; |
| 23 | +use League\CommonMark\Extension\CommonMark\Parser\Block\ListBlockStartParser; |
| 24 | +use League\CommonMark\Extension\CommonMark\Parser\Block\ThematicBreakStartParser; |
| 25 | +use League\CommonMark\Extension\CommonMark\Parser\Inline\AutolinkParser; |
| 26 | +use League\CommonMark\Extension\CommonMark\Parser\Inline\BacktickParser; |
| 27 | +use League\CommonMark\Extension\CommonMark\Parser\Inline\BangParser; |
| 28 | +use League\CommonMark\Extension\CommonMark\Parser\Inline\CloseBracketParser; |
| 29 | +use League\CommonMark\Extension\CommonMark\Parser\Inline\EntityParser; |
| 30 | +use League\CommonMark\Extension\CommonMark\Parser\Inline\EscapableParser; |
| 31 | +use League\CommonMark\Extension\CommonMark\Parser\Inline\HtmlInlineParser; |
| 32 | +use League\CommonMark\Extension\CommonMark\Parser\Inline\OpenBracketParser; |
| 33 | +use League\CommonMark\Extension\CommonMark\Renderer\Block\BlockQuoteRenderer; |
| 34 | +use League\CommonMark\Extension\CommonMark\Renderer\Block\FencedCodeRenderer; |
| 35 | +use League\CommonMark\Extension\CommonMark\Renderer\Block\HeadingRenderer; |
| 36 | +use League\CommonMark\Extension\CommonMark\Renderer\Block\HtmlBlockRenderer; |
| 37 | +use League\CommonMark\Extension\CommonMark\Renderer\Block\IndentedCodeRenderer; |
| 38 | +use League\CommonMark\Extension\CommonMark\Renderer\Block\ListBlockRenderer; |
| 39 | +use League\CommonMark\Extension\CommonMark\Renderer\Block\ListItemRenderer; |
| 40 | +use League\CommonMark\Extension\CommonMark\Renderer\Block\ThematicBreakRenderer; |
| 41 | +use League\CommonMark\Extension\CommonMark\Renderer\Inline\CodeRenderer; |
| 42 | +use League\CommonMark\Extension\CommonMark\Renderer\Inline\EmphasisRenderer; |
| 43 | +use League\CommonMark\Extension\CommonMark\Renderer\Inline\HtmlInlineRenderer; |
| 44 | +use League\CommonMark\Extension\CommonMark\Renderer\Inline\ImageRenderer; |
| 45 | +use League\CommonMark\Extension\CommonMark\Renderer\Inline\LinkRenderer; |
| 46 | +use League\CommonMark\Extension\CommonMark\Renderer\Inline\StrongRenderer; |
6 | 47 | use League\CommonMark\Extension\ExtensionInterface; |
7 | | -use League\CommonMark\Block\Element as BlockElement; |
8 | | -use League\CommonMark\Inline\Parser as InlineParser; |
9 | | -use League\CommonMark\Block\Renderer as BlockRenderer; |
10 | | -use League\CommonMark\Inline\Element as InlineElement; |
11 | | -use League\CommonMark\ConfigurableEnvironmentInterface; |
12 | | -use League\CommonMark\Inline\Renderer as InlineRenderer; |
13 | | -use League\CommonMark\Delimiter\Processor\EmphasisDelimiterProcessor; |
| 48 | +use League\CommonMark\Environment\EnvironmentBuilderInterface; |
| 49 | +use League\CommonMark\Extension\CommonMark\Delimiter\Processor\EmphasisDelimiterProcessor; |
| 50 | +use League\CommonMark\Extension\ConfigurableExtensionInterface; |
| 51 | +use League\CommonMark\Node\Block\Document; |
| 52 | +use League\CommonMark\Node\Block\Paragraph; |
| 53 | +use League\CommonMark\Node\Inline\Newline; |
| 54 | +use League\CommonMark\Node\Inline\Text; |
| 55 | +use League\CommonMark\Parser\Inline\NewlineParser; |
| 56 | +use League\CommonMark\Renderer\Block\DocumentRenderer; |
| 57 | +use League\CommonMark\Renderer\Block\ParagraphRenderer; |
| 58 | +use League\CommonMark\Renderer\Inline\NewlineRenderer; |
| 59 | +use League\CommonMark\Renderer\Inline\TextRenderer; |
| 60 | +use League\Config\ConfigurationBuilderInterface; |
| 61 | +use Nette\Schema\Expect; |
14 | 62 |
|
15 | 63 | /** |
16 | 64 | * Primer flavoured Markdown setup. It is the same as the CommonMarkCoreExtension but with the |
17 | | - * `IndentedCodeParser` removed to allow for embedded Twig code in Markdown to be interpretted |
| 65 | + * `IndentedCodeStartParser` removed to allow for embedded Twig code in Markdown to be interpretted |
18 | 66 | * rather than code blocked. |
19 | 67 | */ |
20 | | -class PrimerExtension implements ExtensionInterface |
| 68 | +class PrimerExtension implements ConfigurableExtensionInterface |
21 | 69 | { |
22 | | - public function register(ConfigurableEnvironmentInterface $environment) |
| 70 | + public function configureSchema(ConfigurationBuilderInterface $builder): void |
| 71 | + { |
| 72 | + $builder->addSchema( |
| 73 | + 'commonmark', |
| 74 | + Expect::structure( |
| 75 | + [ |
| 76 | + 'use_asterisk' => Expect::bool(true), |
| 77 | + 'use_underscore' => Expect::bool(true), |
| 78 | + 'enable_strong' => Expect::bool(true), |
| 79 | + 'enable_em' => Expect::bool(true), |
| 80 | + 'unordered_list_markers' => Expect::listOf('string') |
| 81 | + ->min(1) |
| 82 | + ->default([ |
| 83 | + '*', |
| 84 | + '+', |
| 85 | + '-' |
| 86 | + ])->mergeDefaults(false), |
| 87 | + ] |
| 88 | + ) |
| 89 | + ); |
| 90 | + } |
| 91 | + |
| 92 | + public function register(EnvironmentBuilderInterface $environment): void |
23 | 93 | { |
24 | 94 | $environment |
25 | | - ->addBlockParser(new BlockParser\BlockQuoteParser(), 70) |
26 | | - ->addBlockParser(new BlockParser\ATXHeadingParser(), 60) |
27 | | - ->addBlockParser(new BlockParser\FencedCodeParser(), 50) |
28 | | - ->addBlockParser(new BlockParser\HtmlBlockParser(), 40) |
29 | | - ->addBlockParser(new BlockParser\SetExtHeadingParser(), 30) |
30 | | - ->addBlockParser(new BlockParser\ThematicBreakParser(), 20) |
31 | | - ->addBlockParser(new BlockParser\ListParser(), 10) |
32 | | - ->addBlockParser(new BlockParser\LazyParagraphParser(), -200) |
| 95 | + ->addBlockStartParser(new BlockQuoteStartParser(), 70) |
| 96 | + ->addBlockStartParser(new HeadingStartParser(), 60) |
| 97 | + ->addBlockStartParser(new FencedCodeStartParser(), 50) |
| 98 | + ->addBlockStartParser(new HtmlBlockStartParser(), 40) |
| 99 | + ->addBlockStartParser(new ThematicBreakStartParser(), 20) |
| 100 | + ->addBlockStartParser(new ListBlockStartParser(), 10) |
| 101 | + // ->addBlockStartParser(new IndentedCodeStartParser(), -100) |
| 102 | + |
| 103 | + ->addInlineParser(new NewlineParser(), 200) |
| 104 | + ->addInlineParser(new BacktickParser(), 150) |
| 105 | + ->addInlineParser(new EscapableParser(), 80) |
| 106 | + ->addInlineParser(new EntityParser(), 70) |
| 107 | + ->addInlineParser(new AutolinkParser(), 50) |
| 108 | + ->addInlineParser(new HtmlInlineParser(), 40) |
| 109 | + ->addInlineParser(new CloseBracketParser(), 30) |
| 110 | + ->addInlineParser(new OpenBracketParser(), 20) |
| 111 | + ->addInlineParser(new BangParser(), 10) |
33 | 112 |
|
34 | | - ->addInlineParser(new InlineParser\NewlineParser(), 200) |
35 | | - ->addInlineParser(new InlineParser\BacktickParser(), 150) |
36 | | - ->addInlineParser(new InlineParser\EscapableParser(), 80) |
37 | | - ->addInlineParser(new InlineParser\EntityParser(), 70) |
38 | | - ->addInlineParser(new InlineParser\AutolinkParser(), 50) |
39 | | - ->addInlineParser(new InlineParser\HtmlInlineParser(), 40) |
40 | | - ->addInlineParser(new InlineParser\CloseBracketParser(), 30) |
41 | | - ->addInlineParser(new InlineParser\OpenBracketParser(), 20) |
42 | | - ->addInlineParser(new InlineParser\BangParser(), 10) |
| 113 | + ->addRenderer(BlockQuote::class, new BlockQuoteRenderer(), 0) |
| 114 | + ->addRenderer(Document::class, new DocumentRenderer(), 0) |
| 115 | + ->addRenderer(FencedCode::class, new FencedCodeRenderer(), 0) |
| 116 | + ->addRenderer(Heading::class, new HeadingRenderer(), 0) |
| 117 | + ->addRenderer(HtmlBlock::class, new HtmlBlockRenderer(), 0) |
| 118 | + ->addRenderer(IndentedCode::class, new IndentedCodeRenderer(), 0) |
| 119 | + ->addRenderer(ListBlock::class, new ListBlockRenderer(), 0) |
| 120 | + ->addRenderer(ListItem::class, new ListItemRenderer(), 0) |
| 121 | + ->addRenderer(Paragraph::class, new ParagraphRenderer(), 0) |
| 122 | + ->addRenderer(ThematicBreak::class, new ThematicBreakRenderer(), 0) |
43 | 123 |
|
44 | | - ->addBlockRenderer(BlockElement\BlockQuote::class, new BlockRenderer\BlockQuoteRenderer(), 0) |
45 | | - ->addBlockRenderer(BlockElement\Document::class, new BlockRenderer\DocumentRenderer(), 0) |
46 | | - ->addBlockRenderer(BlockElement\FencedCode::class, new BlockRenderer\FencedCodeRenderer(), 0) |
47 | | - ->addBlockRenderer(BlockElement\Heading::class, new BlockRenderer\HeadingRenderer(), 0) |
48 | | - ->addBlockRenderer(BlockElement\HtmlBlock::class, new BlockRenderer\HtmlBlockRenderer(), 0) |
49 | | - ->addBlockRenderer(BlockElement\IndentedCode::class, new BlockRenderer\IndentedCodeRenderer(), 0) |
50 | | - ->addBlockRenderer(BlockElement\ListBlock::class, new BlockRenderer\ListBlockRenderer(), 0) |
51 | | - ->addBlockRenderer(BlockElement\ListItem::class, new BlockRenderer\ListItemRenderer(), 0) |
52 | | - ->addBlockRenderer(BlockElement\Paragraph::class, new BlockRenderer\ParagraphRenderer(), 0) |
53 | | - ->addBlockRenderer(BlockElement\ThematicBreak::class, new BlockRenderer\ThematicBreakRenderer(), 0) |
| 124 | + ->addRenderer(Code::class, new CodeRenderer(), 0) |
| 125 | + ->addRenderer(Emphasis::class, new EmphasisRenderer(), 0) |
| 126 | + ->addRenderer(HtmlInline::class, new HtmlInlineRenderer(), 0) |
| 127 | + ->addRenderer(Image::class, new ImageRenderer(), 0) |
| 128 | + ->addRenderer(Link::class, new LinkRenderer(), 0) |
| 129 | + ->addRenderer(Newline::class, new NewlineRenderer(), 0) |
| 130 | + ->addRenderer(Strong::class, new StrongRenderer(), 0) |
| 131 | + ->addRenderer(Text::class, new TextRenderer(), 0); |
54 | 132 |
|
55 | | - ->addInlineRenderer(InlineElement\Code::class, new InlineRenderer\CodeRenderer(), 0) |
56 | | - ->addInlineRenderer(InlineElement\Emphasis::class, new InlineRenderer\EmphasisRenderer(), 0) |
57 | | - ->addInlineRenderer(InlineElement\HtmlInline::class, new InlineRenderer\HtmlInlineRenderer(), 0) |
58 | | - ->addInlineRenderer(InlineElement\Image::class, new InlineRenderer\ImageRenderer(), 0) |
59 | | - ->addInlineRenderer(InlineElement\Link::class, new InlineRenderer\LinkRenderer(), 0) |
60 | | - ->addInlineRenderer(InlineElement\Newline::class, new InlineRenderer\NewlineRenderer(), 0) |
61 | | - ->addInlineRenderer(InlineElement\Strong::class, new InlineRenderer\StrongRenderer(), 0) |
62 | | - ->addInlineRenderer(InlineElement\Text::class, new InlineRenderer\TextRenderer(), 0); |
63 | 133 |
|
64 | | - if ($environment->getConfig('use_asterisk', true)) { |
| 134 | + if ($environment->getConfiguration()->get('commonmark/use_asterisk')) { |
65 | 135 | $environment->addDelimiterProcessor(new EmphasisDelimiterProcessor('*')); |
66 | 136 | } |
67 | 137 |
|
68 | | - if ($environment->getConfig('use_underscore', true)) { |
| 138 | + if ($environment->getConfiguration()->get('commonmark/use_underscore')) { |
69 | 139 | $environment->addDelimiterProcessor(new EmphasisDelimiterProcessor('_')); |
70 | 140 | } |
71 | 141 | } |
|
0 commit comments