Description
Problem
This was discovered in NixOS/nix#7770
We have a table with all operators, but ||
doesn't get rendered correctly:
I thought that maybe removing the \
from the markdown would solve this, but no. Comparing a few types of spans:
| code | bold | ital |
| ---- | ------ | ---- |
| `|` | __|__ | *|* |
| `\|` | __\|__ | *\|* |
The documentation claims that tables are implemented according to the GFM tables extension.
However, this is not the case. From the GFM spec, Example 200:
Include a pipe in a cell’s content by escaping it, including inside other inline spans:
| f\|oo | | ------ | | b `\|` az | | b **\|** im |
Steps
- Create a new mdbook
- Paste this code into
chapter_1.md
:| code | bold | ital | | ---- | ------ | ---- | | `|` | __|__ | *|* | | `\|` | __\|__ | *\|* |
- Serve or build the mdbook and observe that either way of putting a pipe symbol inside a code span inside a table doesn't work:
Possible Solution(s)
It seems mdbook treats the code span as a self-contained unit, so \|
does not have special meaning inside the table as it should.
While IMO it would be more intuitive to just have the non-escaped pipe symbol work inside code spans, adhering to the GFM spec would be best in terms of compatibility, so that's what I'd suggest.
Notes
In the end, this minimal markdown
| | |
| - | - |
| `\|` | |
should produce this HTML
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code class="hljs">|</code></td>
<td></td>
</tr>
</tbody>
</table>
While right now it produces this:
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code class="hljs">\|</code></td>
<td></td>
</tr>
</tbody>
</table>
Version
mdbook v0.4.25