etichete: cele trei care mint, si doua bug-uri de infrastructura
Cele trei, toate verificate pe ecran dupa reparatie: "minimul din care a pornit miscarea 99.80" intra sub o candela si se citea "99.8" (m2d_directie); "2 saptamani" era acoperita de caseta de citat si se citea "2 saptaman" (atmi_orizont); cele doua stopuri de la buy_doji_stop stateau la 12 px cu liniile incrucisate peste etichete, iar diagrama e tocmai despre diferenta dintre ele - acum fiecare sta la capatul propriei linii. Doua bug-uri gasite pe drum, mai grave decat ce reparam: 1. render_html trecea SVG-urile prin markdown. In mp2_pivoti_excel cele doua asteriscuri din formulele Excel (=2*E2-C2) deveneau un <em> pus peste </text>, iar parserul browserului arunca restul SVG-ului: jumatate de tabel lipsea din pagina, fara niciun semn in .md sau in audit. Acum SVG-urile sunt scoase din calea lui markdown si puse inapoi dupa, cu assert ca nu ramane niciun marcaj. 2. eticheta_libera nu citea <g transform>, deci la diagramele cu panouri compara coordonate din sisteme diferite si rata suprapuneri reale. Acum aplatizeaza translate/scale pe <g>-uri imbricate. Prima diagrama pe care a prins-o dupa reparatie e chiar una deja comisa, din capitolul 10. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
@@ -146,10 +146,32 @@ def link_md_to_html(md_path: Path, body: str) -> str:
|
||||
return re.sub(r'href="(?!https?:)([^":]+?)\.md(#[^"]*)?"', sub, body)
|
||||
|
||||
|
||||
def stash_svgs(text: str) -> tuple[str, list[str]]:
|
||||
"""Scoate <svg>...</svg> din calea lui markdown și lasă un marcaj în loc.
|
||||
|
||||
Fără asta, markdown vede caracterele lui înăuntrul desenului: în
|
||||
`mp2_pivoti_excel` cele două `*` din formulele Excel (`=2*E2-C2` …
|
||||
`=2*E3-B3`) deveneau un `<em>` pus peste `</text>`, iar parserul
|
||||
browserului arunca tot restul SVG-ului — jumătate de tabel lipsea din
|
||||
pagină, fără niciun semn în .md sau în audit (02.10.2026).
|
||||
"""
|
||||
pastrate: list[str] = []
|
||||
|
||||
def scoate(m: re.Match) -> str:
|
||||
pastrate.append(m.group(0))
|
||||
return f"<!--SVG{len(pastrate) - 1}-->"
|
||||
|
||||
return re.sub(r"<svg .*?</svg>", scoate, text, flags=re.S), pastrate
|
||||
|
||||
|
||||
def render_file(md_path: Path) -> tuple[Path, str]:
|
||||
text = md_path.read_text(encoding="utf-8")
|
||||
check_svgs(md_path, text)
|
||||
body = markdown.markdown(text, extensions=["extra", "toc"])
|
||||
fara_svg, svgs = stash_svgs(text)
|
||||
body = markdown.markdown(fara_svg, extensions=["extra", "toc"])
|
||||
body = re.sub(r"(?:<p>\s*)?<!--SVG(\d+)-->(?:\s*</p>)?",
|
||||
lambda m: svgs[int(m.group(1))], body)
|
||||
assert "<!--SVG" not in body, f"{md_path}: marcaj de SVG rămas în pagină"
|
||||
body = link_md_to_html(md_path, body)
|
||||
title = text.splitlines()[0].lstrip("# ").strip() if text else md_path.stem
|
||||
top, bottom = nav_html(md_path, title)
|
||||
|
||||
Reference in New Issue
Block a user