#!/bin/bash set -u SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR" || exit 1 PDF_DEFAULT="$SCRIPT_DIR/BlackboxBook.pdf" PDF_EBOOK="$SCRIPT_DIR/BlackboxBook_ebook.pdf" PDF_PHONE="$SCRIPT_DIR/BlackboxBook_phone.pdf" EPUB="$SCRIPT_DIR/BlackboxBook.epub" MOBI="$SCRIPT_DIR/BlackboxBook.mobi" FB2="$SCRIPT_DIR/BlackboxBook.fb2" failures=0 report_step() { if [ $1 -eq 0 ]; then printf " ✓ %s\n" "$2" else printf " ✗ %s\n" "$2" failures=$((failures + 1)) fi } require_tool() { if ! command -v "$1" >/dev/null 2>&1; then printf "ERROR: %s was not found in PATH.\n" "$1" failures=$((failures + 1)) return 1 fi return 0 } printf "Building all formats...\n\n" printf "[1/6] PDF (A4, default)\n" require_tool python3 || true if command -v python3 >/dev/null 2>&1; then python3 "$SCRIPT_DIR/scripts/build_book_pdf.py" --source "$SCRIPT_DIR/book" --output "$PDF_DEFAULT" report_step $? "$PDF_DEFAULT" fi printf "\n[2/6] PDF (ebook, 6x8in)\n" python3 "$SCRIPT_DIR/scripts/build_book_pdf.py" \ --source "$SCRIPT_DIR/book" \ --output "$PDF_EBOOK" \ --layout-profile ebook \ --page-width 6in \ --page-height 8in \ --margin 0.35in \ --wrap-code-blocks \ --code-font-size footnotesize report_step $? "$PDF_EBOOK" printf "\n[3/6] PDF (phone, 4.1x9.1in)\n" python3 "$SCRIPT_DIR/scripts/build_book_pdf.py" \ --source "$SCRIPT_DIR/book" \ --output "$PDF_PHONE" \ --layout-profile phone \ --page-width 4.1in \ --page-height 9.1in \ --margin 0.22in \ --wrap-code-blocks \ --code-font-size footnotesize report_step $? "$PDF_PHONE" printf "\n[4/6] EPUB3\n" require_tool pandoc || true if command -v pandoc >/dev/null 2>&1; then pandoc "$SCRIPT_DIR"/book/*.md \ --resource-path="$SCRIPT_DIR/book" \ --standalone \ --toc --toc-depth=2 \ --metadata title="От чёрного ящика к инженерии" \ --metadata author="Руководство по механике LLM" \ --metadata lang=ru \ --metadata date="2026" \ --to epub3 \ -o "$EPUB" report_step $? "$EPUB" fi printf "\n[5/6] MOBI (из EPUB)\n" require_tool ebook-convert || true if command -v ebook-convert >/dev/null 2>&1; then ebook-convert "$EPUB" "$MOBI" >/dev/null 2>&1 report_step $? "$MOBI" fi printf "\n[6/6] FB2 (из EPUB)\n" if command -v ebook-convert >/dev/null 2>&1; then ebook-convert "$EPUB" "$FB2" >/dev/null 2>&1 report_step $? "$FB2" fi printf "\n---\n" if [ "$failures" -eq 0 ]; then printf "Все форматы собраны:\n" for f in "$PDF_DEFAULT" "$PDF_EBOOK" "$PDF_PHONE" "$EPUB" "$MOBI" "$FB2"; do if [ -f "$f" ]; then printf " %s (%s)\n" "$(basename "$f")" "$(du -h "$f" | cut -f1)" fi done else printf "Сборка завершилась с %s ошибкой(ами).\n" "$failures" fi if [ -t 0 ]; then printf "\nPress Enter to close..." read -r _ fi exit "$failures"