def writer(token: BlockToken, indicator: dict) -> None: nonlocal current if current is head and is_yaml(token): current = meta elif current is meta: current = void if is_keyword(token, "description"): current = description current(token, indicator)
def writer(token: BlockToken, data: dict) -> None: if is_keyword(token, keyword): return if keyword not in data.keys(): data[keyword] = "" if is_yaml(token): meta(token, data[keyword]) else: data[keyword] += token_to_string(token)
def writer(token: BlockToken, orientation: dict) -> None: nonlocal current if current is head and is_yaml(token): current = meta elif current is meta: current = void if is_heading(token, 2): if is_keyword(token, "description"): current = description if is_keyword(token, "niveaux"): current = niveaux current(token, orientation)
def build_thematiques(markdown: Document) -> Dict[str, str]: """Convert thématiques markdown document to a dictionary.""" writer = void data = {} for token in markdown.children: if is_yaml(token): writer = thematiques else: writer = void writer(token, data) return data["yaml"]["thematiques"]
def parse_definitions(doc: Document) -> list[dict]: """Extract definitions from markdown AST""" definitions = [] writer = void for token in doc.children: if is_heading(token, 2): definitions.append({ "comments": [], "yaml": {}, }) writer = comment elif is_yaml(token): writer = save_yaml_data definition = definitions[-1] if definitions else None if definition: writer(token, definition) return definitions
def meta(token: BlockToken, data: dict) -> None: """save ```yaml block""" if is_yaml(token): parsed = yaml.safe_load(token.children[0].content) data.update(parsed)