1
0
favro-sync/favro_sync/favro_markdown.py
Jon Michael Aanes cb9593b744
Some checks failed
Test Python / Test (push) Failing after 24s
Parse and map markdown
2024-09-27 16:13:03 +02:00

48 lines
1.1 KiB
Python

import dataclasses
import errno
import re
import stat
from collections.abc import Iterator
from logging import getLogger
import marko
import marko.md_renderer
from .favro_data_model import Card, SeqId
@dataclasses.dataclass(frozen=True)
class CardContents:
name: str
description: str
markdown = marko.Markdown()
renderer = marko.md_renderer.MarkdownRenderer()
def format_card_contents(card: CardContents) -> str:
ls = []
if card.name:
ls.append('# ')
ls.append(card.name)
ls.append('\n\n')
ls.append(card.description or '')
return ''.join(ls)
def parse_card_contents(contents: str) -> CardContents:
document = markdown.parse(contents.strip())
name = None
for elem in document.children:
if isinstance(elem, marko.block.Heading):
name = renderer.render_children(elem)
document.children.remove(elem)
break
return CardContents(
name,
renderer.render_children(document).strip(),
)
def format_card(card: Card) -> str:
return format_card_contents(CardContents(card.name, card.detailed_description))