From a9621704361f7f2acd590dbd5711c90da2ba32f1 Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Tue, 1 Oct 2024 11:28:44 +0200 Subject: [PATCH] [Obsidian mode]: Improve formatting of task lists --- favro_sync/favro_markdown.py | 19 ++++++++++++++++--- test/test_markdown_parsing.py | 3 +++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/favro_sync/favro_markdown.py b/favro_sync/favro_markdown.py index 42dd8ca..e91cc24 100644 --- a/favro_sync/favro_markdown.py +++ b/favro_sync/favro_markdown.py @@ -31,11 +31,19 @@ class CardFileFormatter: """Component for formatting and parsing card files.""" def __init__(self, obsidian_mode=True): + """Initialize card formatter. + + Arguments: + - `obsidian_mode`: Configure formatter to enable maximum compatibility + with [Obsidian](https://obsidian.md/). Enables internal links, and + exposes certain aliases. + """ self.obsidian_mode = obsidian_mode self.markdown = marko.Markdown() self.renderer = marko.md_renderer.MarkdownRenderer() def format_card_contents(self, card: CardContents) -> str: + """Formats card contents. Mostly the inverse of [`parse_card_contents`].""" # Choose frontmatter data frontmatter_data = {} if self.obsidian_mode: @@ -74,13 +82,18 @@ class CardFileFormatter: ls.append('\n\n') # Card contents - if card.description: - ls.append(card.description) + if description := card.description: + if self.obsidian_mode: + description = re.sub(r'\-\s*\[\s*\]', '- [ ]', description, + flags=re.MULTILINE) + ls.append(description) + del description fm = frontmatter.Post(''.join(ls), **frontmatter_data) + return frontmatter.dumps(fm) def parse_card_contents(self, contents: str) -> CardContents: - """Parses card contents. + """Parses card contents. Mostly the inverse of [`parse_card_contents`]. 1. Strips frontmatter and parses certain fields from the header. 2. Parses header diff --git a/test/test_markdown_parsing.py b/test/test_markdown_parsing.py index 5e52145..0c2d7cc 100644 --- a/test/test_markdown_parsing.py +++ b/test/test_markdown_parsing.py @@ -15,6 +15,9 @@ Test description 1. Derp 2. Derp 3. Derp + +- [ ] Task 1 +- [ ] Task 2 """.strip() EXAMPLE_TEXT_2 = """