Files
wehub-resource-sync a8262fc01e
docs / build (push) Has been cancelled
docs / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:22 +08:00

41 lines
1.5 KiB
Python

"""
Render a ``docs/*.md`` theory page inside Streamlit.
Streamlit's ``st.markdown`` can't load local-disk images and won't render the ``<details>``
mermaid blocks, so we: (1) show the stage diagram with ``st.image`` (absolute path), and
(2) strip the markdown image line + the ``<details>…</details>`` mermaid block before
rendering the prose. The ``docs/*.md`` files stay the single source of truth (the MkDocs
site publishes the same files).
"""
from __future__ import annotations
import os
import re
from ui.stages import ABS_DOC
def _clean_markdown(text: str) -> str:
# drop the embedded PNG line (we render it via st.image instead)
text = re.sub(r"^!\[[^\]]*\]\([^)]*\)\s*$", "", text, flags=re.MULTILINE)
# drop the <details>…</details> live-mermaid block
text = re.sub(r"<details>.*?</details>", "", text, flags=re.DOTALL)
# drop the leading H1 (the page already has a header)
text = re.sub(r"^#\s+.*$", "", text, count=1, flags=re.MULTILINE)
return text.strip()
def render_doc(st, doc_md: str, diagram_png: str | None = None) -> None:
"""Render the diagram (if any) + the prose of a docs markdown file."""
if diagram_png:
abs_png = ABS_DOC(diagram_png)
if os.path.exists(abs_png):
st.image(abs_png, use_container_width=True)
abs_md = ABS_DOC(doc_md)
if os.path.exists(abs_md):
with open(abs_md) as f:
st.markdown(_clean_markdown(f.read()))
else:
st.info(f"Theory doc not found: {doc_md}")