Skip to content

Commit de0162a

Browse files
mikethemandi
andauthored
feat: preserve language attribute for code blocks (#247)
* test: add failing test for language attribute Signed-off-by: Mike Fiedler <[email protected]> * feat: preserve lang attribute in markdown In order to allow the `lang` attribute on `pre` code blocks, add it to the post-syntax highlighting step, and then allow through the sanitizer. Signed-off-by: Mike Fiedler <[email protected]> * test: update tests to include preserved `lang` Signed-off-by: Mike Fiedler <[email protected]> Co-authored-by: Dustin Ingram <[email protected]>
1 parent e52f968 commit de0162a

File tree

8 files changed

+16
-9
lines changed

8 files changed

+16
-9
lines changed

readme_renderer/clean.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
"h6": ["align"],
5656
"code": ["class"],
5757
"p": ["align", "class"],
58+
"pre": ["lang"],
5859
"ol": ["start"],
5960
"input": ["type", "checked", "disabled"],
6061
}

readme_renderer/markdown.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def replacer(match: Match[Any]) -> str:
116116

117117
highlighted = pygments.highlight(code, lexer, formatter)
118118

119-
return f'<pre>{highlighted}</pre>'
119+
return f'<pre lang="{lang}">{highlighted}</pre>'
120120

121121
result = code_expr.sub(replacer, html)
122122

tests/fixtures/test_CommonMark_008.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<p>Here is some Python code for a <code>Dog</code>:</p>
2-
<pre><span class="k">class</span> <span class="nc">Dog</span><span class="p">(</span><span class="n">Animal</span><span class="p">):</span>
2+
<pre lang="python3"><span class="k">class</span> <span class="nc">Dog</span><span class="p">(</span><span class="n">Animal</span><span class="p">):</span>
33
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
44
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
55

@@ -9,7 +9,7 @@
99
<span class="n">dog</span> <span class="o">=</span> <span class="n">Dog</span><span class="p">(</span><span class="s1">&#39;Fido&#39;</span><span class="p">)</span>
1010
</pre>
1111
<p>and then here is some bash:</p>
12-
<pre><span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">&quot;</span> <span class="o">=</span> <span class="s2">&quot;--help&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
12+
<pre lang="bash"><span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">&quot;</span> <span class="o">=</span> <span class="s2">&quot;--help&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
1313
<span class="nb">echo</span> <span class="s2">&quot;OK&quot;</span>
1414
<span class="k">fi</span>
1515
</pre>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<p>This is normal text.</p>
22
<pre><code>This is code text.
33
</code></pre>
4-
<pre><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span>
4+
<pre lang="python3"><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span>
55
<span class="sd">&quot;&quot;&quot;This is a docstring.&quot;&quot;&quot;</span>
66
<span class="k">pass</span>
77
</pre>
8-
<pre><span class="kd">func</span><span class="w"> </span><span class="nx">ThisIsGo</span><span class="p">(){</span><span class="w"></span>
8+
<pre lang="go"><span class="kd">func</span><span class="w"> </span><span class="nx">ThisIsGo</span><span class="p">(){</span><span class="w"></span>
99
<span class="w"> </span><span class="k">return</span><span class="w"></span>
1010
<span class="p">}</span><span class="w"></span>
1111
</pre>
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<p>This is normal text.</p>
22
<pre><code>This is code text.
33
</code></pre>
4-
<pre><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span>
4+
<pre lang="python3"><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span>
55
<span class="k">pass</span>
66
</pre>
7-
<pre><span class="kd">func</span><span class="w"> </span><span class="nx">ThisIsGo</span><span class="p">(){</span><span class="w"></span>
7+
<pre lang="go"><span class="kd">func</span><span class="w"> </span><span class="nx">ThisIsGo</span><span class="p">(){</span><span class="w"></span>
88
<span class="w"> </span><span class="k">return</span><span class="w"></span>
99
<span class="p">}</span><span class="w"></span>
1010
</pre>
11+
<pre lang="abc">An unknown code fence block
12+
</pre>

tests/fixtures/test_GFM_highlight.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,7 @@ func ThisIsGo(){
1414
return
1515
}
1616
```
17+
18+
```abc
19+
An unknown code fence block
20+
```

tests/fixtures/test_GFM_highlight_default_py.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<pre><span class="k">async</span> <span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span>
1+
<pre lang="python3"><span class="k">async</span> <span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span>
22
<span class="k">pass</span>
33

44
<span class="nb">print</span><span class="p">(</span><span class="k">await</span> <span class="n">this_is_python</span><span class="p">())</span>

tests/fixtures/test_GFM_malicious_pre.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<p>This is normal text.</p>
2-
<pre><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span>
2+
<pre lang="python3"><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span>
33
<span class="sd">&quot;&quot;&quot;This is a docstring.&quot;&quot;&quot;</span>
44
<span class="k">pass</span>
55
<span class="o">&lt;</span><span class="n">script</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;text/javascript&quot;</span><span class="o">&gt;</span><span class="n">alert</span><span class="p">(</span><span class="s1">&#39;I am evil.&#39;</span><span class="p">);</span><span class="o">&lt;/</span><span class="n">script</span><span class="o">&gt;</span>

0 commit comments

Comments
 (0)