so/doc/py/wo_f.py

117 lines
4.3 KiB
Python
Raw Permalink Normal View History

2025-01-31 22:42:44 +01:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import json
2025-02-01 12:53:05 +01:00
def generuj_wiersze_ogolne(wezel, wiersze, poziom=1, intensywnosc=40):
2025-01-31 22:42:44 +01:00
"""
2025-02-01 12:53:05 +01:00
Funkcja do generowania wierszy dla wymagań ogólnych.
2025-01-31 22:42:44 +01:00
"""
nr = wezel.get("nr", "")
opis = wezel.get("opis", "")
2025-02-01 12:53:05 +01:00
punkty = wezel.get("atrybuty", {}).get("punkty", "")
2025-01-31 22:42:44 +01:00
# Wcięcie w LaTeX-u (np. 0.5 em na poziom) zależnie od poziomu
wciecie = r"\hspace{" + f"{0.5 * poziom}em" + "}" # 0.5em na poziom
2025-02-01 12:53:05 +01:00
# Kolorowanie dla wymagań ogólnych
kolor = f"\\cellcolor{{green!{intensywnosc}}}" # Kolor dla Wymagań Ogólnych
2025-01-31 22:42:44 +01:00
# Tworzymy wiersz:
# [wcięcie + nr] & [wcięcie + opis] & [wcięcie + punkty] \\
linia = f"{kolor}{wciecie}{nr} & {kolor}{wciecie}{opis} & {kolor}{wciecie}{punkty} \\\\"
wiersze.append(linia)
# Rekurencja dla dzieci
2025-02-01 12:53:05 +01:00
for dziecko in wezel.get("wymagania", []):
generuj_wiersze_ogolne(dziecko, wiersze, poziom + 1, intensywnosc - 20)
def generuj_wiersze_szczegolowe(wezel, wiersze, poziom=0):
"""
Funkcja do generowania wierszy dla wymagań szczegółowych.
"""
nr = wezel.get("nr", "")
opis = wezel.get("opis", "")
punkty = wezel.get("atrybuty", {}).get("punkty", "")
# Wcięcie w LaTeX-u (np. 0.5 em na poziom) zależnie od poziomu
wciecie = r"\hspace{" + f"{0.5 * poziom}em" + "}" # 0.5em na poziom
# Tworzymy wiersz:
# [wcięcie + nr] & [wcięcie + opis] & [wcięcie + punkty] \\
linia = f"{wciecie}{nr} & {wciecie}{opis} & {wciecie}{punkty} \\\\"
wiersze.append(linia)
# Rekurencja dla dzieci
for dziecko in wezel.get("uczen", []):
generuj_wiersze_szczegolowe(dziecko, wiersze, poziom + 1)
2025-01-31 22:42:44 +01:00
def main():
if len(sys.argv) < 3:
print("Użycie: skrypt.py plik_wejściowy.json plik_wyjściowy.tex")
sys.exit(1)
plik_json = sys.argv[1]
plik_tekstowy = sys.argv[2]
# 1. Wczytanie danych JSON z pliku
with open(plik_json, 'r', encoding='utf-8') as f:
dane = json.load(f)
# 2. Bufor na wszystkie wiersze LaTeX
wiersze = []
# --- Nagłówek dla LaTeX ---
wiersze.append(r"\documentclass{article}")
wiersze.append(r"\usepackage[utf8]{inputenc}") # Obsługa polskich znaków
wiersze.append(r"\usepackage[T1]{fontenc}") # Poprawne wyświetlanie polskich znaków
wiersze.append(r"\usepackage[polish]{babel}") # Polska lokalizacja
wiersze.append(r"\usepackage{longtable}")
wiersze.append(r"\usepackage{array}")
wiersze.append(r"\usepackage{geometry}")
wiersze.append(r"\usepackage[table]{xcolor}") # Dodanie pakietu xcolor do kolorowania komórek
wiersze.append(r"\geometry{a4paper, landscape, margin=1in}") # Format A4 poziomo
wiersze.append(r"\begin{document}")
# --- Tytuł i nagłówek tabeli ---
wiersze.append(r"\title{Lista wymagań}")
wiersze.append(r"\author{}")
wiersze.append(r"\date{}")
wiersze.append(r"\maketitle")
2025-02-01 12:53:05 +01:00
# Dostosowanie szerokości kolumn do 0.1, 0.74 i 0.1 textwidth
wiersze.append(r"\begin{longtable}{|p{0.1\textwidth}|p{0.74\textwidth}|p{0.1\textwidth}|}")
wiersze.append(r"\caption{Lista wymagań ogólnych}\\")
2025-01-31 22:42:44 +01:00
wiersze.append(r"\hline")
wiersze.append(r"\textbf{Nr} & \textbf{Opis} & \textbf{Punkty} \\")
wiersze.append(r"\hline")
# firsthead -> co ma się powtórzyć na kolejnej stronie tabeli
wiersze.append(r"\endfirsthead")
wiersze.append(r"\hline")
wiersze.append(r"\textbf{Nr} & \textbf{Opis} & \textbf{Punkty} \\")
wiersze.append(r"\hline")
wiersze.append(r"\endhead")
# 3. Generowanie wierszy tabeli na podstawie JSON-a
2025-02-01 12:53:05 +01:00
# Wymagania ogólne
wiersze.append(r"\hline")
wiersze.append(r"\cellcolor{green!60}\hspace{0.0em}- & \cellcolor{green!60}\hspace{0.0em}Wymagania ogólne & \cellcolor{green!60}\hspace{0.0em}- \\")
wiersze.append(r"\hline")
for element in dane.get("wymagania_ogolne", []):
generuj_wiersze_ogolne(element, wiersze)
2025-01-31 22:42:44 +01:00
wiersze.append(r"\hline") # Dodanie linii odcinającej po każdej sekcji
# 4. Zakończenie longtable
wiersze.append(r"\hline")
wiersze.append(r"\end{longtable}")
wiersze.append(r"\end{document}")
# 5. Zapis do pliku .tex (z polskimi znakami w UTF-8)
with open(plik_tekstowy, 'w', encoding='utf-8') as f:
f.write("\n".join(wiersze) + "\n")
if __name__ == "__main__":
2025-02-01 12:53:05 +01:00
main()