From be534f3512873c79f34d904c54c440ce89529f87 Mon Sep 17 00:00:00 2001 From: a2nr Date: Mon, 11 May 2026 11:35:28 +0700 Subject: [PATCH] fix: robust lesson parsing for flexible home.md formats --- generate_tokens.py | 10 ++++++---- services/lesson_service.py | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/generate_tokens.py b/generate_tokens.py index 5728ff5..661a167 100644 --- a/generate_tokens.py +++ b/generate_tokens.py @@ -27,15 +27,17 @@ def get_lesson_names(): with open(home_file_path, 'r', encoding='utf-8') as f: content = f.read() - parts = content.split('---Available_Lessons---') + # Use robust regex to split Available_Lessons + parts = re.split(r'-{3,}Available_Lessons-{3,}', content) if len(parts) > 1: lesson_list_content = parts[1] + # Allow optional leading slash in /lesson/ prefix lesson_links = re.findall( - r'\[([^\]]+)\]\(lesson/([^\)]+)\)', lesson_list_content + r'\[([^\]]+)\]\((?:/?lesson/)?([^\)]+)\)', lesson_list_content ) if lesson_links: - for _link_text, filename in lesson_links: - lesson_names.append(filename.replace('.md', '')) + for _link_text, slug in lesson_links: + lesson_names.append(slug.replace('.md', '')) return lesson_names # Fallback: alphabetical order diff --git a/services/lesson_service.py b/services/lesson_service.py index bc26d06..9302e26 100644 --- a/services/lesson_service.py +++ b/services/lesson_service.py @@ -29,7 +29,8 @@ def _parse_lesson_links(home_content): return [] lesson_list_content = parts[-1] - links = re.findall(r'\[([^\]]+)\]\((?:/lesson/)?([^\)]+)\)', lesson_list_content) + # Allow optional leading slash in /lesson/ prefix + links = re.findall(r'\[([^\]]+)\]\((?:/?lesson/)?([^\)]+)\)', lesson_list_content) processed_links = [] for title, slug in links: @@ -582,6 +583,7 @@ def render_home_content(): if not home_content: return "" - parts = home_content.split('---Available_Lessons---') + # Use robust regex to split Available_Lessons + parts = re.split(r'-{3,}Available_Lessons-{3,}', home_content) main_content = parts[0] if parts else home_content return md.markdown(main_content, extensions=['fenced_code', 'tables', 'mdx_math'])