Skip to content

Commit

Permalink
Fix table/list parsing ambiguity (#767)
Browse files Browse the repository at this point in the history
  • Loading branch information
hukkinj1 committed Mar 27, 2021
1 parent 041b7c7 commit cd5296f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
17 changes: 14 additions & 3 deletions lib/rules_block/table.js
Expand Up @@ -52,7 +52,7 @@ function escapedSplit(str) {
module.exports = function table(state, startLine, endLine, silent) {
var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,
aligns, t, tableLines, tbodyLines, oldParentType, terminate,
terminatorRules;
terminatorRules, firstCh, secondCh;

// should have at least two lines
if (startLine + 2 > endLine) { return false; }
Expand All @@ -71,8 +71,19 @@ module.exports = function table(state, startLine, endLine, silent) {
pos = state.bMarks[nextLine] + state.tShift[nextLine];
if (pos >= state.eMarks[nextLine]) { return false; }

ch = state.src.charCodeAt(pos++);
if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */) { return false; }
firstCh = state.src.charCodeAt(pos++);
if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }

if (pos >= state.eMarks[nextLine]) { return false; }

secondCh = state.src.charCodeAt(pos++);
if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {
return false;
}

// if first character is '-', then second character must not be a space
// (due to parsing ambiguity with list)
if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }

while (pos < state.eMarks[nextLine]) {
ch = state.src.charCodeAt(pos);
Expand Down
13 changes: 13 additions & 0 deletions test/fixtures/markdown-it/tables.txt
Expand Up @@ -793,3 +793,16 @@ GFM 4.10 Tables (extension), Example 205
</thead>
</table>
.

A list takes precedence in case of ambiguity
.
a | b
- | -
1 | 2
.
<p>a | b</p>
<ul>
<li>| -
1 | 2</li>
</ul>
.

0 comments on commit cd5296f

Please sign in to comment.