From e826101a24de5be819ef1a61b99b899ad16e975b Mon Sep 17 00:00:00 2001 From: Konstantin Fickel Date: Sun, 22 Jun 2025 12:48:25 +0200 Subject: [PATCH] feat: add smart parse engine to streamer entry point Signed-off-by: Konstantin Fickel --- src/streamer/__init__.py | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/streamer/__init__.py b/src/streamer/__init__.py index e1edfad..4a599b9 100644 --- a/src/streamer/__init__.py +++ b/src/streamer/__init__.py @@ -1,15 +1,40 @@ import glob import os +from streamer.parse import Shard +from streamer.parse.parse import parse_markdown_file + cwd = os.getcwd() +def find_by_markers(shard: Shard, has: list[str], has_not: list[str]) -> list[Shard]: + found_shards = [] + + if any(tag in has for tag in shard.markers) and not any( + tag in has_not for tag in shard.markers + ): + found_shards.append(shard) + + for child in shard.children: + found_shards.extend(find_by_markers(child, has, has_not)) + + return found_shards + + def run() -> None: for file_name in glob.glob(f"{glob.escape(cwd)}/*.md"): with open(file_name, "r") as file: - file_content: str = file.read() + file_content = file.read() + sharded_document = parse_markdown_file(file_name, file_content) + if sharded_document.shard: + open_tasks = find_by_markers(sharded_document.shard, ["Task"], ["Done"]) - for line_number, line in enumerate(file_content.split("\n"), 1): - if "@Task" in line and "@Done" not in line: - print(line) - print(f" {file_name}:{line_number}") + for task_shard in open_tasks: + print( + "\n".join( + file_content.splitlines()[ + task_shard.start_line - 1 : task_shard.end_line + ] + ) + ) + print(f" {file_name}:{task_shard.start_line}")