#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys import json def generuj_wiersze_ogolne(wezel, wiersze, poziom=1, intensywnosc=40): """ Funkcja do generowania wierszy dla wymagań ogólnych. """ 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 # Kolorowanie dla wymagań ogólnych kolor = f"\\cellcolor{{green!{intensywnosc}}}" # Kolor dla Wymagań Ogólnych # 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 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) 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") # 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}\\") 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 # 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) 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__": main()