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:
Claude Agent
2026-10-02 05:59:11 +00:00
parent 1b57878118
commit 29dc93dfad
15 changed files with 469 additions and 289 deletions

View File

@@ -77,6 +77,8 @@ class Mark:
color: str = "#1a5fb4"
where: str = "above" # "above" | "below" — față de candelă
dy: float = 0.0 # ajustare fină, dacă se suprapune cu altceva
dx: float = 0.0 # idem, pe orizontală: la serii dese, singurul
# loc liber e lateral, nu mai sus (02.10.2026)
@dataclass
@@ -361,7 +363,7 @@ class Chart:
# etichete ancorate pe candele anume
for mk in self.marks:
cd = self.candles[mk.i]
cx = self._cx(mk.i)
cx = self._cx(mk.i) + mk.dx
if mk.where == "above":
y = self._y(cd.h) - 10 + mk.dy
else: