feat: aspektarian, deklinacja i antyscja trafiają do raportu i PDF-a
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 11m13s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m49s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 29s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 20s
build-render / build (push) Successful in 44s
build / build (push) Successful in 54s
Testy / Testy warstwy logicznej (silnik) (push) Successful in 11m19s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m59s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 34s
Testy / Kontrola składni wszystkich warstw (push) Successful in 25s
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 11m13s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m49s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 29s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 20s
build-render / build (push) Successful in 44s
build / build (push) Successful in 54s
Testy / Testy warstwy logicznej (silnik) (push) Successful in 11m19s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m59s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 34s
Testy / Kontrola składni wszystkich warstw (push) Successful in 25s
Zasada: co składamy, dodajemy i wyświetlamy, MA trafiać do finalnego raportu
(«Skompiluj») i do PDF-a — nie tylko na stronę /chart. Do tej pory do raportu i
druku szło samo koło; aspektarian (etap 5) i deklinacja/antyscja (etap 6) były
tylko w podglądzie horoskopu.
RAPORT «Skompiluj» (podgląd): handler /compile liczy teraz wszystkie cztery
rysunki, a szablon je pokazuje (koło, aspektarian, deklinacja, antyscja).
PDF (usługa render) — uogólnienie z jednego rysunku na LISTĘ:
- Kontrakt raportu: `figures = [{svg, caption}]` (uporządkowana). `wheel_svg`
zostaje dla zgodności wstecznej jako pojedynczy rysunek.
- `compile.py`: każdy SVG osobno przez rsvg-convert → PDF (fig0…figN); braki/
błędy pomijane (rysunek nie może wywalić raportu, tekst ważniejszy).
- `latex.py build()`: rysunki w sekcji 3 (po danych, przed natalną) w PODANEJ
kolejności, każdy z podpisem. Jedna reguła składania: keepaspectratio z limitem
szerokości i wysokości — kwadratowe (koło, aspektarian) ogranicza wysokość,
szerokie (deklinacja, antyscja) szerokość, bez zniekształceń.
- `compile_pdf` (prezentacja): renderuje komplet w motywie DRUKU i wysyła jako
`figures`.
Testy: render +5 (kolejność, podpisy, zgodność wsteczna, pomijanie pustych),
prezentacja +3 (raport pokazuje komplet, PDF składa komplet). Render 32,
prezentacja 173.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit was merged in pull request #41.
This commit is contained in:
@@ -171,12 +171,20 @@ PREAMBLE = r"""\documentclass[11pt,a4paper]{article}
|
||||
"""
|
||||
|
||||
|
||||
def build(report: dict, wheel_pdf: str | None = None) -> str:
|
||||
"""Składa źródło .tex. `wheel_pdf` to nazwa pliku z kosmogramem (już PDF)."""
|
||||
def build(report: dict, wheel_pdf: str | None = None,
|
||||
figures: list[dict] | None = None) -> str:
|
||||
"""Składa źródło .tex.
|
||||
|
||||
`figures` to UPORZĄDKOWANA lista rysunków kosmogramu (koło, aspektarian,
|
||||
deklinacja, antyscja…) — każdy `{"pdf": nazwa, "caption": podpis}`, już jako
|
||||
PDF. Zasada: co pokazujemy na stronie, ma trafić i tu (raport = to samo, co
|
||||
widać). `wheel_pdf` zostaje dla zgodności wstecznej — pojedynczy rysunek."""
|
||||
person = str(report.get("person") or "").strip()
|
||||
data = report.get("data") or {}
|
||||
natal = report.get("natal") or {}
|
||||
predictions = report.get("predictions") or []
|
||||
if figures is None:
|
||||
figures = [{"pdf": wheel_pdf, "caption": "Kosmogram"}] if wheel_pdf else []
|
||||
|
||||
parts = [PREAMBLE]
|
||||
|
||||
@@ -202,12 +210,22 @@ def build(report: dict, wheel_pdf: str | None = None) -> str:
|
||||
parts.append(r"\end{tabular}")
|
||||
parts.append(r"\vspace{1em}")
|
||||
|
||||
# ── 3. kosmogram ────────────────────────────────────────────────────
|
||||
if wheel_pdf:
|
||||
# ── 3. rysunki kosmogramu ───────────────────────────────────────────
|
||||
# Jedna reguła na wszystkie: keepaspectratio z limitem SZEROKOŚCI i WYSOKOŚCI.
|
||||
# Koło i aspektarian są kwadratowe (ogranicza je wysokość), deklinacja i
|
||||
# antyscja szerokie (ogranicza szerokość) — bez zniekształceń w obu razach.
|
||||
for fig in figures:
|
||||
pdf = fig.get("pdf")
|
||||
if not pdf:
|
||||
continue
|
||||
parts.append(r"\begin{center}")
|
||||
parts.append(r"\includegraphics[width=0.82\textwidth]{" + wheel_pdf + r"}")
|
||||
parts.append(r"\includegraphics[width=0.82\textwidth,height=0.46\textheight,"
|
||||
r"keepaspectratio]{" + pdf + r"}")
|
||||
cap = fig.get("caption")
|
||||
if cap:
|
||||
parts.append(r"\\[-0.3em]{\small\itshape " + esc(cap) + r"}")
|
||||
parts.append(r"\end{center}")
|
||||
parts.append(r"\vspace{0.5em}")
|
||||
parts.append(r"\vspace{0.4em}")
|
||||
|
||||
# ── 4. interpretacja natalna ────────────────────────────────────────
|
||||
if natal.get("text"):
|
||||
|
||||
Reference in New Issue
Block a user