Skip to content

Commit 24237ea

Browse files
committed
[FEATURE] Support emphasize-lines in code-block directive
1 parent 6665ac4 commit 24237ea

File tree

5 files changed

+57
-1
lines changed

5 files changed

+57
-1
lines changed

packages/guides-restructured-text/src/RestructuredText/Directives/CodeBlockDirective.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public function process(
5858

5959
$this->setStartingLineNumberBasedOnOptions($directive->getOptions(), $node);
6060
$this->setCaptionBasedOnOptions($directive->getOptions(), $node);
61+
$this->setEmphasizeLinesBasedOnOptions($directive->getOptions(), $node);
6162
$this->codeNodeOptionMapper->apply($node, $directive->getOptions());
6263

6364
if ($directive->getVariable() !== '') {
@@ -101,4 +102,15 @@ private function setCaptionBasedOnOptions(array $options, CodeNode $node): void
101102

102103
$node->setCaption($caption);
103104
}
105+
106+
/** @param DirectiveOption[] $options */
107+
private function setEmphasizeLinesBasedOnOptions(array $options, CodeNode $node): void
108+
{
109+
$emphasizeLines = null;
110+
if (isset($options['emphasize-lines'])) {
111+
$emphasizeLines = (string) $options['emphasize-lines']->getValue();
112+
}
113+
114+
$node->setEmphasizeLines($emphasizeLines);
115+
}
104116
}

packages/guides/resources/template/html/body/code.html.twig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@
77
<span class="caption-text">{{ node.caption }}</span>
88
</div>
99
{%- endif -%}
10-
<pre{% if node.classes %} class="{{ node.classesString }}"{% endif %}><code class="language-{{ node.language }}{{ node.startingLineNumber ? ' line-numbers' }}" {%- if node.startingLineNumber %} data-start="{{ node.startingLineNumber }}"{% endif %}>{{ node.value }}</code></pre>
10+
<pre{% if node.classes %} class="{{ node.classesString }}"{% endif %}><code class="language-{{ node.language }}{{ node.startingLineNumber ? ' line-numbers' }}"
11+
{%- if node.startingLineNumber %} data-start="{{ node.startingLineNumber }}"{% endif -%}
12+
{%- if node.emphasizeLines %} data-emphasize-lines="{{ node.emphasizeLines }}"{% endif -%}>{{ node.value }}</code></pre>
1113
{%- endif -%}

packages/guides/src/Nodes/CodeNode.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ class CodeNode extends TextNode
2222

2323
private string|null $caption = null;
2424

25+
private string|null $emphasizeLines = null;
26+
2527
/** @param string[] $lines */
2628
public function __construct(array $lines, protected string|null $language = null)
2729
{
@@ -57,4 +59,14 @@ public function setCaption(string|null $caption): void
5759
{
5860
$this->caption = $caption;
5961
}
62+
63+
public function getEmphasizeLines(): string|null
64+
{
65+
return $this->emphasizeLines;
66+
}
67+
68+
public function setEmphasizeLines(string|null $emphasizeLines): void
69+
{
70+
$this->emphasizeLines = $emphasizeLines;
71+
}
6072
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title>Title</title>
5+
6+
</head>
7+
<body>
8+
<div class="section" id="title">
9+
<h1>Title</h1>
10+
11+
<pre><code class="language-python" data-emphasize-lines="3,5">def some_function():
12+
interesting = False
13+
print(&#039;This line is highlighted.&#039;)
14+
print(&#039;This one is not...&#039;)
15+
print(&#039;...but this one is.&#039;)</code></pre>
16+
</div>
17+
18+
</body>
19+
</html>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Title
2+
=====
3+
4+
.. code-block:: python
5+
:emphasize-lines: 3,5
6+
7+
def some_function():
8+
interesting = False
9+
print('This line is highlighted.')
10+
print('This one is not...')
11+
print('...but this one is.')

0 commit comments

Comments
 (0)