Skip to content

Commit 9eee217

Browse files
authored
Update dependencies to support PHP 8.4 (#13)
1 parent 68bffdf commit 9eee217

5 files changed

Lines changed: 145 additions & 71 deletions

File tree

composer.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
"name": "rareloop/primer-core",
33
"require": {
44
"php": ">=8.1",
5-
"symfony/finder": "^6.4.17",
6-
"twig/twig": "^3.20",
7-
"illuminate/collections": "^8.53.1||^9.52.16",
8-
"league/commonmark": "^1.6.7",
5+
"symfony/finder": "^6.4.24",
6+
"twig/twig": "^3.21.1",
7+
"illuminate/collections": "^10",
8+
"league/commonmark": "^2.7.1",
99
"spatie/yaml-front-matter": "^2.1"
1010
},
1111
"require-dev": {
12-
"phpunit/phpunit": "^9.6.22",
13-
"php-coveralls/php-coveralls": "^2.7",
12+
"phpunit/phpunit": "^9.6.23",
13+
"php-coveralls/php-coveralls": "^2.8",
1414
"mockery/mockery": "^1.6.12",
15-
"squizlabs/php_codesniffer": "^3.12.2",
15+
"squizlabs/php_codesniffer": "^3.13.2",
1616
"mikey179/vfsstream": "^1.6.12",
1717
"antecedent/patchwork": "^2.2.1"
1818
},
@@ -26,4 +26,4 @@
2626
"Rareloop\\Primer\\Test\\": "tests"
2727
}
2828
}
29-
}
29+
}

src/DocumentParsers/Markdown/PrimerExtension.php

Lines changed: 118 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,70 +2,140 @@
22

33
namespace Rareloop\Primer\DocumentParsers\Markdown;
44

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;
647
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;
1462

1563
/**
1664
* 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
1866
* rather than code blocked.
1967
*/
20-
class PrimerExtension implements ExtensionInterface
68+
class PrimerExtension implements ConfigurableExtensionInterface
2169
{
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
2393
{
2494
$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)
33112

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)
43123

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);
54132

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);
63133

64-
if ($environment->getConfig('use_asterisk', true)) {
134+
if ($environment->getConfiguration()->get('commonmark/use_asterisk')) {
65135
$environment->addDelimiterProcessor(new EmphasisDelimiterProcessor('*'));
66136
}
67137

68-
if ($environment->getConfig('use_underscore', true)) {
138+
if ($environment->getConfiguration()->get('commonmark/use_underscore')) {
69139
$environment->addDelimiterProcessor(new EmphasisDelimiterProcessor('_'));
70140
}
71141
}

src/DocumentParsers/MarkdownDocumentParser.php

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
namespace Rareloop\Primer\DocumentParsers;
44

55
use League\CommonMark\CommonMarkConverter;
6-
use League\CommonMark\Environment;
6+
use League\CommonMark\Environment\Environment;
7+
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
8+
use League\CommonMark\MarkdownConverter;
9+
use League\CommonMark\Util\HtmlFilter;
710
use Rareloop\Primer\DocumentParsers\Markdown\PrimerExtension;
811
use Rareloop\Primer\Contracts\DocumentParser;
912
use Rareloop\Primer\Document;
@@ -12,27 +15,28 @@ class MarkdownDocumentParser implements DocumentParser
1215
{
1316
public function parse(Document $document): Document
1417
{
15-
$converter = new CommonMarkConverter([], $this->createEnvironment());
16-
$document->setContent($converter->convertToHtml($document->content()));
18+
$converter = new MarkdownConverter($this->createEnvironment());
19+
20+
$document->setContent(
21+
$converter->convert($document->content())
22+
);
1723

1824
return $document;
1925
}
2026

2127
protected function createEnvironment(): Environment
2228
{
23-
$environment = new Environment();
24-
$environment->addExtension(new PrimerExtension());
25-
$environment->mergeConfig([
29+
$environment = new Environment([
2630
'renderer' => [
2731
'block_separator' => "\n",
2832
'inner_separator' => "\n",
2933
'soft_break' => "\n",
3034
],
31-
'safe' => false, // deprecated option
32-
'html_input' => Environment::HTML_INPUT_ALLOW,
35+
'html_input' => HtmlFilter::ALLOW,
3336
'allow_unsafe_links' => true,
34-
'max_nesting_level' => INF,
37+
'max_nesting_level' => PHP_INT_MAX,
3538
]);
39+
$environment->addExtension(new PrimerExtension());
3640

3741
return $environment;
3842
}

src/FileSystemDocumentProvider.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ class FileSystemDocumentProvider implements DocumentProvider
1414
protected $fileExtension;
1515
protected $documentParser;
1616

17-
public function __construct(array $paths, string $fileExtension, DocumentParser $parser = null)
17+
public function __construct(array $paths, string $fileExtension, ?DocumentParser $parser = null)
1818
{
1919
$this->paths = $paths;
2020
$this->fileExtension = $fileExtension;
2121
$this->documentParser = $parser;
2222
}
2323

24-
public function allDocumentIds() : array
24+
public function allDocumentIds(): array
2525
{
2626
if (empty($this->paths)) {
2727
return [];
@@ -43,7 +43,7 @@ public function allDocumentIds() : array
4343
})->values()->toArray();
4444
}
4545

46-
public function getDocument(string $id) : Document
46+
public function getDocument(string $id): Document
4747
{
4848
if (empty($this->paths)) {
4949
throw new DocumentNotFoundException;
@@ -67,15 +67,15 @@ public function getDocument(string $id) : Document
6767
return $this->documentParser ? $this->documentParser->parse($doc) : $doc;
6868
}
6969

70-
protected function getFolderPathFromId(string $id) : string
70+
protected function getFolderPathFromId(string $id): string
7171
{
7272
$parts = explode('/', $id);
7373
array_pop($parts);
7474

7575
return $this->convertIdToPathRegex(implode('/', $parts));
7676
}
7777

78-
protected function convertIdToPathRegex(string $id) : string
78+
protected function convertIdToPathRegex(string $id): string
7979
{
8080
$parts = array_map(function ($part) {
8181
return '([0-9]+\-)?' . str_replace('-', '\-', $part);

src/FileSystemPatternProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class FileSystemPatternProvider implements PatternProvider, TemplateProvider
1818

1919
protected $patternPaths = [];
2020

21-
public function __construct(array $paths, $fileExtension, DataParser $dataParser = null)
21+
public function __construct(array $paths, $fileExtension, ?DataParser $dataParser = null)
2222
{
2323
$this->paths = $paths;
2424
$this->fileExtension = $fileExtension;

0 commit comments

Comments
 (0)