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)