| 23 | |
| 24 | |
| 25 | def render(content: str) -> RenderableType: |
| 26 | tokens = _MD.parse(content) |
| 27 | tree = SyntaxTreeNode(tokens) |
| 28 | |
| 29 | blocks: list[RenderableType] = [] |
| 30 | for child in tree.children: |
| 31 | rendered = _render_block(child) |
| 32 | if rendered is not None: |
| 33 | blocks.append(rendered) |
| 34 | |
| 35 | if not blocks: |
| 36 | return Text("") |
| 37 | parts: list[RenderableType] = [blocks[0]] |
| 38 | for block in blocks[1:]: |
| 39 | parts.append(Text("")) |
| 40 | parts.append(block) |
| 41 | return Group(*parts) |
| 42 | |
| 43 | |
| 44 | def _render_block(node: Any) -> RenderableType | None: |