Skip to content

Commit 13c1809

Browse files
authored
Merge pull request #875 from patchlevel/format-docs
Add frontmatter support for docs formatting, format docs
2 parents 7ec8230 + dacc76d commit 13c1809

3 files changed

Lines changed: 31 additions & 5 deletions

File tree

bin/docs-extract-php-code

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
use League\CommonMark\Environment\Environment;
55
use League\CommonMark\Extension\CommonMark\Node\Block\FencedCode;
6+
use League\CommonMark\Extension\FrontMatter\Data\FrontMatterDataParserInterface;
7+
use League\CommonMark\Extension\FrontMatter\FrontMatterExtension;
68
use League\CommonMark\Node\Query;
79
use League\CommonMark\Parser\MarkdownParser;
810
use Wnx\CommonmarkMarkdownRenderer\MarkdownRendererExtension;
@@ -11,6 +13,15 @@ require __DIR__ . '/../vendor/autoload.php';
1113

1214
$environment = new Environment([]);
1315
$environment->addExtension(new MarkdownRendererExtension());
16+
$environment->addExtension(new FrontMatterExtension(
17+
// keep the raw YAML string so it round-trips byte-identically
18+
new class implements FrontMatterDataParserInterface {
19+
public function parse(string $frontMatter): string
20+
{
21+
return $frontMatter;
22+
}
23+
},
24+
));
1425

1526
$parser = new MarkdownParser($environment);
1627

bin/docs-inject-php-code

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
use League\CommonMark\Environment\Environment;
55
use League\CommonMark\Extension\CommonMark\Node\Block\FencedCode;
6+
use League\CommonMark\Extension\FrontMatter\Data\FrontMatterDataParserInterface;
7+
use League\CommonMark\Extension\FrontMatter\FrontMatterExtension;
8+
use League\CommonMark\Extension\FrontMatter\Output\RenderedContentWithFrontMatter;
69
use League\CommonMark\Node\Query;
710
use League\CommonMark\Parser\MarkdownParser;
811
use Wnx\CommonmarkMarkdownRenderer\MarkdownRendererExtension;
@@ -14,6 +17,15 @@ require __DIR__ . '/../vendor/autoload.php';
1417

1518
$environment = new Environment([]);
1619
$environment->addExtension(new MarkdownRendererExtension());
20+
$environment->addExtension(new FrontMatterExtension(
21+
// keep the raw YAML string so it round-trips byte-identically
22+
new class implements FrontMatterDataParserInterface {
23+
public function parse(string $frontMatter): string
24+
{
25+
return $frontMatter;
26+
}
27+
},
28+
));
1729

1830
$parser = new MarkdownParser($environment);
1931
$markdownRenderer = new MarkdownRenderer($environment);
@@ -62,7 +74,14 @@ foreach ($finder as $file) {
6274
$node->setLiteral(trim($code));
6375
}
6476

65-
file_put_contents($file->getPathname(), $markdownRenderer->renderDocument($document));
77+
$rendered = $markdownRenderer->renderDocument($document);
78+
$output = $rendered->getContent();
79+
80+
if ($rendered instanceof RenderedContentWithFrontMatter) {
81+
$output = $rendered->getFrontMatter() . "---\n" . $output;
82+
}
83+
84+
file_put_contents($file->getPathname(), $output);
6685
}
6786

6887
if (file_exists($targetDir)) {

docs/message.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ use Patchlevel\EventSourcing\Message\Message;
9797
/** @var Message $message */
9898
$message->header(ApplicationHeader::class);
9999
```
100-
101100
## Missing headers
102101

103102
When a message is deserialized, every header name is resolved to its registered header class.
@@ -117,7 +116,6 @@ $serializer = DefaultHeadersSerializer::createFromPaths(
117116
['legacyApplication', 'legacyTenant'],
118117
);
119118
```
120-
121119
You can access the collected headers via the `MissingHeaders` object:
122120

123121
```php
@@ -127,7 +125,6 @@ use Patchlevel\EventSourcing\Message\MissingHeaders;
127125
$missingHeaders = $message->header(MissingHeaders::class);
128126
$missingHeaders->headers; // ['legacyApplication' => [...], 'legacyTenant' => [...]]
129127
```
130-
131128
:::warning
132129
Only the header names you list are handled gracefully. If a message contains an unregistered header
133130
whose name is **not** in the list, deserialization still throws `HeaderNameNotRegistered`.
@@ -143,7 +140,6 @@ $serializer = DefaultHeadersSerializer::createFromPaths(
143140
['*'],
144141
);
145142
```
146-
147143
## Pipe
148144

149145
The `Pipe` is a construct that allows you to chain multiple translators.

0 commit comments

Comments
 (0)