Skip to content

Commit 8058b6b

Browse files
committed
feature #141 Support captions (file paths) for code blocks (javiereguiluz)
This PR was merged into the main branch. Discussion ---------- Support captions (file paths) for code blocks Commits ------- b9eec4a Support captions (file paths) for code blocks
2 parents 4b1e49a + b9eec4a commit 8058b6b

File tree

6 files changed

+81
-0
lines changed

6 files changed

+81
-0
lines changed

src/Directive/CodeBlockDirective.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public function process(Parser $parser, ?Node $node, string $variable, string $d
3737
// CodeNodeRenderer can then use it when rendering
3838
$node->setClasses(isset($options['class']) ? explode(' ', $options['class']) : []);
3939

40+
$node->setOptions(array_merge($node->getOptions(), ['caption' => $options['caption'] ?? null]));
41+
4042
if ('' !== $variable) {
4143
$environment = $parser->getEnvironment();
4244
$environment->setVariable($variable, $node);

src/Renderers/CodeNodeRenderer.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ public function render(): string
8181
$numOfLines = \count(preg_split('/\r\n|\r|\n/', $highlightedCode));
8282
$lineNumbers = implode("\n", range(1, $numOfLines));
8383

84+
// 'caption' is used by code blocks to define the path of the file they belong to
85+
// 'patch_file' is a special value used by "diff patches", which don't correspond to any file
86+
$codeCaption = $this->codeNode->getOptions()['caption'] ?? null;
87+
if ('patch_file' === $codeCaption) {
88+
$codeCaption = null;
89+
}
90+
8491
return $this->templateRenderer->render(
8592
'code.html.twig',
8693
[
@@ -92,6 +99,7 @@ public function render(): string
9299
// the length of the codeblock in a semantic way (to tweak styling)
93100
// e.g. LOC = 5, length = 'sm'; LOC = 18, length = 'md'
94101
'length' => [1 => 'sm', 2 => 'md', 3 => 'lg', 4 => 'xl'][strlen((string) $numOfLines)],
102+
'caption' => $codeCaption,
95103
]
96104
);
97105
}

src/Templates/default/html/code.html.twig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
<div translate="no" data-loc="{{ loc }}" class="notranslate codeblock codeblock-length-{{ length }} {{ languages|map(language => "codeblock-#{language}")|join(' ') }}{% if custom_css_classes %} {{ custom_css_classes }}{% endif %}">
2+
{% if caption %}
3+
<div class="codeblock-caption">{{ caption }}</div>
4+
{% endif %}
25
<div class="codeblock-scroll">
36
<pre class="codeblock-lines">{{ line_numbers }}</pre>
47
<pre class="codeblock-code"><code>{{ code|raw }}</code></pre>

tests/IntegrationTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ public function parserUnitBlockProvider()
232232
'blockName' => 'references/reference-and-code',
233233
];
234234

235+
yield 'code-block-caption' => [
236+
'blockName' => 'code-blocks/code-caption',
237+
];
238+
235239
yield 'code-block-php' => [
236240
'blockName' => 'code-blocks/php',
237241
];
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-php">
2+
<div class="codeblock-caption">config/routes.php</div>
3+
<div class="codeblock-scroll">
4+
<pre class="codeblock-lines">1</pre>
5+
<pre class="codeblock-code">
6+
<code>
7+
<span class="hljs-variable">
8+
<span class="hljs-variable-other-marker">$</span>
9+
foo</span>
10+
=
11+
<span class="hljs-string">'bar'</span>;</code>
12+
</pre>
13+
</div>
14+
</div>
15+
16+
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-php hide">
17+
<div class="codeblock-caption">config/routes.php</div>
18+
<div class="codeblock-scroll">
19+
<pre class="codeblock-lines">1</pre>
20+
<pre class="codeblock-code">
21+
<code>
22+
<span class="hljs-variable">
23+
<span class="hljs-variable-other-marker">$</span>
24+
foo</span>
25+
=
26+
<span class="hljs-string">'bar'</span>;</code>
27+
</pre>
28+
</div>
29+
</div>
30+
31+
<div translate="no" data-loc="3" class="notranslate codeblock codeblock-length-sm codeblock-diff">
32+
<div class="codeblock-scroll">
33+
<pre class="codeblock-lines">1
34+
2
35+
3</pre>
36+
<pre class="codeblock-code">
37+
<code>
38+
<span class="hljs-comment">--- a/src/Controller/DefaultController.php</span>
39+
<span class="hljs-comment">+++ b/src/Controller/DefaultController.php</span>
40+
<span class="hljs-meta">@@ -2,7 +2,9 @@</span>
41+
</code>
42+
</pre>
43+
</div>
44+
</div>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
.. code-block:: php
3+
:caption: config/routes.php
4+
5+
$foo = 'bar';
6+
7+
8+
.. code-block:: php
9+
:caption: config/routes.php
10+
:class: hide
11+
12+
$foo = 'bar';
13+
14+
.. code-block:: diff
15+
:caption: patch_file
16+
:emphasize-lines: 1,2
17+
18+
--- a/src/Controller/DefaultController.php
19+
+++ b/src/Controller/DefaultController.php
20+
@@ -2,7 +2,9 @@

0 commit comments

Comments
 (0)