From b8228018dec88ba79ca80a4702ff08b2fe2b0e6c Mon Sep 17 00:00:00 2001 From: Thibaud Gambier Date: Sun, 18 Jan 2026 14:36:25 +0100 Subject: [PATCH] Fix GFM table indentation in list --- marko/ext/gfm/renderer.py | 6 +++--- marko/md_renderer.py | 3 +-- tests/test_ext.py | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/marko/ext/gfm/renderer.py b/marko/ext/gfm/renderer.py index 8c2c38e..d05143c 100644 --- a/marko/ext/gfm/renderer.py +++ b/marko/ext/gfm/renderer.py @@ -71,10 +71,10 @@ def render_table(self, element): def render_table(self, element): lines = [] head, *body = element.children - lines.append(self.render(head)) - lines.append(f"| {' | '.join(element.delimiters)} |\n") + lines.append(self._prefix + self.render(head)) + lines.append(self._prefix + f"| {' | '.join(element.delimiters)} |\n") for row in body: - lines.append(self.render(row)) + lines.append(self._prefix + self.render(row)) return "".join(lines) @render_dispatch(HTMLRenderer) diff --git a/marko/md_renderer.py b/marko/md_renderer.py index 69919d7..8074f58 100644 --- a/marko/md_renderer.py +++ b/marko/md_renderer.py @@ -117,9 +117,8 @@ def render_setext_heading(self, element: block.SetextHeading) -> str: return self.render_heading(cast("block.Heading", element)) def render_blank_line(self, element: block.BlankLine) -> str: - result = self._prefix + "\n" self._prefix = self._second_prefix - return result + return "\n" def render_link_ref_def(self, element: block.LinkRefDef) -> str: link_text = element.dest diff --git a/tests/test_ext.py b/tests/test_ext.py index 0b3f04e..0ecfc6a 100644 --- a/tests/test_ext.py +++ b/tests/test_ext.py @@ -137,3 +137,17 @@ def test_alert_disallow_content_on_header_line(self): html = self.md_html(text) # Should be treated as a normal blockquote. assert "
\n

[!NOTE] This is not allowed." in html + + +class TestGFMTableLlistElement: + def setup_method(self): + from marko import Markdown + from marko.ext.gfm import GFM + from marko.md_renderer import MarkdownRenderer + + self.md_md = Markdown(renderer=MarkdownRenderer, extensions=[GFM]) + + def test_render_table_in_list_indented(self): + text = "- Item.\n\n |foo|bar|\n |---|---|\n |foo|bar|" + md = self.md_md(text) + assert md == "- Item.\n\n | foo | bar |\n | --- | --- |\n | foo | bar |\n"