""" Front matter parsing functionality for MarkiTect. This module provides YAML front matter parsing for markdown files, separating metadata from content. """ import re import yaml from typing import Dict, Tuple, Any class FrontMatterParser: """Parser for YAML front matter in markdown files.""" def __init__(self): """Initialize the front matter parser.""" pass def parse(self, content: str) -> Tuple[Dict[str, Any], str]: """ Parse front matter from markdown content. Args: content: Raw markdown content that may include YAML front matter Returns: Tuple of (front_matter_dict, markdown_content) - front_matter_dict: Parsed YAML as dictionary, empty dict if none - markdown_content: Markdown content with front matter removed """ if not content.strip(): return {}, content # Check if content starts with front matter delimiter if not content.strip().startswith('---'): return {}, content # Pattern to match YAML front matter # Must start with --- at beginning of string, end with --- on its own line pattern = r'^---\s*\n(.*?)\n---\s*\n(.*)$' match = re.match(pattern, content, re.DOTALL) if not match: # No valid front matter found return {}, content yaml_content = match.group(1) markdown_content = match.group(2) # Parse YAML content try: front_matter = yaml.safe_load(yaml_content) if front_matter is None: front_matter = {} except yaml.YAMLError: # Invalid YAML - return empty dict and preserve content front_matter = {} return front_matter, markdown_content