"""Convert MediaWiki `action=parse` HTML into clean markdown with frontmatter.""" from __future__ import annotations import re from bs4 import BeautifulSoup from markdownify import markdownify as _markdownify # Chrome / navigation / reference elements we don't want in the corpus. _REMOVE_SELECTORS = ( "style", "script", "link", ".mw-editsection", ".mw-jump-link", ".noprint", ".navbox", ".toc", "#toc", ".mw-empty-elt", ".reference", ".mw-references-wrap", ".reflist", ".ambox", ".metadata", ".pagetabber-absolute", ".pi-image", ) _BLANK_LINES = re.compile(r"\n{3,}") def _infobox_rows(element, group: str, tab: str, rows: list[tuple[str, str, str, str]]) -> None: """Collect (group, tab, label, value) from a portable-infobox subtree, in order. Fandom stat blocks are an