Skip to content

Commit

Permalink
Filename to <th> if linenos=table (fixes pygments#1757)
Browse files Browse the repository at this point in the history
* Emit `<th>` for `filename` if `linenos=table`.

* Added test cases for filename inclusion.
  • Loading branch information
Cartroo committed Mar 27, 2021
1 parent 20b2012 commit af2f07a
Show file tree
Hide file tree
Showing 131 changed files with 1,012 additions and 4 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,5 @@
/.coverage
/htmlcov
/.vscode
venv/
.venv/
17 changes: 14 additions & 3 deletions pygments/formatters/html.py
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,9 @@ class ``"special"`` (default: ``0``).
`filename`
A string used to generate a filename when rendering ``<pre>`` blocks,
for example if displaying source code.
for example if displaying source code. If `linenos` is set to
``'table'`` then the filename will be rendered in an initial row
containing a single `<th>` which spans both columns.
.. versionadded:: 2.1
Expand Down Expand Up @@ -693,11 +695,20 @@ def _wrap_tablelinenos(self, inner):

ls = '\n'.join(lines)

# If a filename was specified, we can't put it into the code table as it
# would misalign the line numbers. Hence we emit a separate row for it.
filename_tr = ""
if self.filename:
filename_tr = (
'<tr><th colspan="2" class="filename"><div class="highlight">'
'<span class="filename">' + self.filename + '</span></div>'
'</th></tr>')

# in case you wonder about the seemingly redundant <div> here: since the
# content in the other cell also is wrapped in a div, some browsers in
# some configurations seem to mess up the formatting...
yield 0, (
'<table class="%stable">' % self.cssclass +
'<table class="%stable">' % self.cssclass + filename_tr +
'<tr><td class="linenos"><div class="linenodiv"><pre>' +
ls + '</pre></div></td><td class="code">'
)
Expand Down Expand Up @@ -790,7 +801,7 @@ def _wrap_pre(self, inner):
style.append(self._pre_style)
style = '; '.join(style)

if self.filename:
if self.filename and self.linenos != 1:
yield 0, ('<span class="filename">' + self.filename + '</span>')

# the empty span here is to keep leading empty lines from being
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><a href="#-1"><span class="linenos">1</span></a><span class="c1"># a</span>
<a href="#-2"><span class="linenos">2</span></a><span class="c1"># b</span>
<a href="#-3"><span class="linenos">3</span></a><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><span class="linenos">1</span><span class="c1"># a</span>
<span class="linenos">2</span><span class="c1"># b</span>
<span class="linenos">3</span><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><a href="#-1"><span class="linenos">1</span></a><span class="c1"># a</span>
<a href="#-2"><span class="linenos">2</span></a><span class="c1"># b</span>
<a href="#-3"><span class="linenos special">3</span></a><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><span class="linenos">1</span><span class="c1"># a</span>
<span class="linenos">2</span><span class="c1"># b</span>
<span class="linenos special">3</span><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><a href="#-8"><span class="linenos"> 8</span></a><span class="c1"># a</span>
<a href="#-9"><span class="linenos"> 9</span></a><span class="c1"># b</span>
<a href="#-10"><span class="linenos">10</span></a><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><span class="linenos"> 8</span><span class="c1"># a</span>
<span class="linenos"> 9</span><span class="c1"># b</span>
<span class="linenos">10</span><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><a href="#-8"><span class="linenos"> 8</span></a><span class="c1"># a</span>
<a href="#-9"><span class="linenos special"> 9</span></a><span class="c1"># b</span>
<a href="#-10"><span class="linenos">10</span></a><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><span class="linenos"> 8</span><span class="c1"># a</span>
<span class="linenos special"> 9</span><span class="c1"># b</span>
<span class="linenos">10</span><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><a href="#-1"><span class="linenos"> </span></a><span class="c1"># a</span>
<a href="#-2"><span class="linenos">2</span></a><span class="c1"># b</span>
<a href="#-3"><span class="linenos"> </span></a><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><span class="linenos"> </span><span class="c1"># a</span>
<span class="linenos">2</span><span class="c1"># b</span>
<span class="linenos"> </span><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><a href="#-1"><span class="linenos"> </span></a><span class="c1"># a</span>
<a href="#-2"><span class="linenos">2</span></a><span class="c1"># b</span>
<a href="#-3"><span class="linenos special"> </span></a><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><span class="linenos"> </span><span class="c1"># a</span>
<span class="linenos">2</span><span class="c1"># b</span>
<span class="linenos special"> </span><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><a href="#-8"><span class="linenos"> 8</span></a><span class="c1"># a</span>
<a href="#-9"><span class="linenos"> </span></a><span class="c1"># b</span>
<a href="#-10"><span class="linenos">10</span></a><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><span class="linenos"> 8</span><span class="c1"># a</span>
<span class="linenos"> </span><span class="c1"># b</span>
<span class="linenos">10</span><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><a href="#-8"><span class="linenos"> 8</span></a><span class="c1"># a</span>
<a href="#-9"><span class="linenos special"> </span></a><span class="c1"># b</span>
<a href="#-10"><span class="linenos">10</span></a><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight"><span class="filename">testfilename</span>
<pre><span></span><span class="linenos"> 8</span><span class="c1"># a</span>
<span class="linenos special"> </span><span class="c1"># b</span>
<span class="linenos">10</span><span class="c1"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><a href="#-1"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></a><span style="color: #408080; font-style: italic"># a</span>
<a href="#-2"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></a><span style="color: #408080; font-style: italic"># b</span>
<a href="#-3"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">3</span></a><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span><span style="color: #408080; font-style: italic"># a</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span><span style="color: #408080; font-style: italic"># b</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">3</span><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><a href="#-1"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></a><span style="color: #408080; font-style: italic"># a</span>
<a href="#-2"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></a><span style="color: #408080; font-style: italic"># b</span>
<a href="#-3"><span style="color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px;">3</span></a><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span><span style="color: #408080; font-style: italic"># a</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span><span style="color: #408080; font-style: italic"># b</span>
<span style="color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px;">3</span><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><a href="#-8"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 8</span></a><span style="color: #408080; font-style: italic"># a</span>
<a href="#-9"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 9</span></a><span style="color: #408080; font-style: italic"># b</span>
<a href="#-10"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">10</span></a><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 8</span><span style="color: #408080; font-style: italic"># a</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 9</span><span style="color: #408080; font-style: italic"># b</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">10</span><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><a href="#-8"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 8</span></a><span style="color: #408080; font-style: italic"># a</span>
<a href="#-9"><span style="color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px;"> 9</span></a><span style="color: #408080; font-style: italic"># b</span>
<a href="#-10"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">10</span></a><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 8</span><span style="color: #408080; font-style: italic"># a</span>
<span style="color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px;"> 9</span><span style="color: #408080; font-style: italic"># b</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">10</span><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><a href="#-1"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> </span></a><span style="color: #408080; font-style: italic"># a</span>
<a href="#-2"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></a><span style="color: #408080; font-style: italic"># b</span>
<a href="#-3"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> </span></a><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> </span><span style="color: #408080; font-style: italic"># a</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span><span style="color: #408080; font-style: italic"># b</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> </span><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><a href="#-1"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> </span></a><span style="color: #408080; font-style: italic"># a</span>
<a href="#-2"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></a><span style="color: #408080; font-style: italic"># b</span>
<a href="#-3"><span style="color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px;"> </span></a><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> </span><span style="color: #408080; font-style: italic"># a</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span><span style="color: #408080; font-style: italic"># b</span>
<span style="color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px;"> </span><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><a href="#-8"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 8</span></a><span style="color: #408080; font-style: italic"># a</span>
<a href="#-9"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> </span></a><span style="color: #408080; font-style: italic"># b</span>
<a href="#-10"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">10</span></a><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 8</span><span style="color: #408080; font-style: italic"># a</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> </span><span style="color: #408080; font-style: italic"># b</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">10</span><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><a href="#-8"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 8</span></a><span style="color: #408080; font-style: italic"># a</span>
<a href="#-9"><span style="color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px;"> </span></a><span style="color: #408080; font-style: italic"># b</span>
<a href="#-10"><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">10</span></a><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="highlight" style="background: #f8f8f8"><span class="filename">testfilename</span>
<pre style="line-height: 125%;"><span></span><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;"> 8</span><span style="color: #408080; font-style: italic"># a</span>
<span style="color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px;"> </span><span style="color: #408080; font-style: italic"># b</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">10</span><span style="color: #408080; font-style: italic"># c</span>
</pre>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<table class="highlighttable">
<tr>
<th colspan="2" class="filename">
<div class="highlight">
<span class="filename">testfilename</span>
</div>
</th>
</tr><tr>
<td class="linenos">
<div class="linenodiv">
<pre><span class="normal"><a href="#-1">1</a></span>
<span class="normal"><a href="#-2">2</a></span>
<span class="normal"><a href="#-3">3</a></span></pre>
</div>
</td>
<td class="code">
<div class="highlight">
<pre><span></span><span class="c1"># a</span>
<span class="c1"># b</span>
<span class="c1"># c</span>
</pre>
</div>
</td>
</tr>
</table>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<table class="highlighttable">
<tr>
<th colspan="2" class="filename">
<div class="highlight">
<span class="filename">testfilename</span>
</div>
</th>
</tr><tr>
<td class="linenos">
<div class="linenodiv">
<pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre>
</div>
</td>
<td class="code">
<div class="highlight">
<pre><span></span><span class="c1"># a</span>
<span class="c1"># b</span>
<span class="c1"># c</span>
</pre>
</div>
</td>
</tr>
</table>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<table class="highlighttable">
<tr>
<th colspan="2" class="filename">
<div class="highlight">
<span class="filename">testfilename</span>
</div>
</th>
</tr><tr>
<td class="linenos">
<div class="linenodiv">
<pre><span class="normal"><a href="#-1">1</a></span>
<span class="normal"><a href="#-2">2</a></span>
<span class="special"><a href="#-3">3</a></span></pre>
</div>
</td>
<td class="code">
<div class="highlight">
<pre><span></span><span class="c1"># a</span>
<span class="c1"># b</span>
<span class="c1"># c</span>
</pre>
</div>
</td>
</tr>
</table>
Loading

0 comments on commit af2f07a

Please sign in to comment.