Files

71 lines
2.2 KiB
Python

#!/usr/bin/env python3
"""Compile all Bibel der Opfer HTML chapters into a single EPUB."""
import os, re
from ebooklib import epub
WORKSPACE = "/home/hermes/workspace"
chapters = [
("kapitel_01", "Die perfekte Opferkampagne"),
("kapitel_02", "Der Schalter, der nie auf Mitte steht"),
("kapitel_03", "Drei Kulturen, eine Verschiebung"),
("kapitel_04", "Competitive Victimhood"),
("kapitel_05", "DARVO"),
("kapitel_06", "Virtuous Victim Signaling"),
("kapitel_07", "Die Umkehrung"),
("kapitel_08", "Gegenmittel"),
]
book = epub.EpubBook()
book.set_identifier("bibel-der-opfer-001")
book.set_title("Die Bibel der Opfer")
book.set_language("de")
book.add_author("Daniel Krause")
# Extract common CSS from first chapter
first_path = os.path.join(WORKSPACE, "bibel_der_opfer_kapitel_01.html")
with open(first_path) as f:
first_raw = f.read()
css_match = re.search(r"<style>(.*?)</style>", first_raw, re.DOTALL)
css = css_match.group(1) if css_match else "body { font-family: serif; }"
# Add CSS as a stylesheet
style_item = epub.EpubItem(uid="style", file_name="style/default.css", media_type="text/css", content=css.encode("utf-8"))
book.add_item(style_item)
epub_chapters = []
for slug, title in chapters:
path = os.path.join(WORKSPACE, f"bibel_der_opfer_{slug}.html")
with open(path) as f:
raw = f.read()
body_match = re.search(r"<body>(.*?)</body>", raw, re.DOTALL)
body_html = body_match.group(1) if body_match else raw
ch = epub.EpubHtml(title=title, file_name=f"{slug}.xhtml", lang="de")
ch.content = f"""<!DOCTYPE html>
<html lang="de">
<head><link rel="stylesheet" type="text/css" href="style/default.css"/></head>
<body>{body_html}</body>
</html>"""
ch.add_item(style_item)
book.add_item(ch)
epub_chapters.append(ch)
# Build spine
book.spine = ["nav"] + epub_chapters
# Build TOC
book.toc = [epub.Link(f"{slug}.xhtml", title, slug) for slug, title in chapters]
# Navigation
book.add_item(epub.EpubNcx())
book.add_item(epub.EpubNav())
# Write
outpath = os.path.join(WORKSPACE, "bibel_der_opfer.epub")
epub.write_epub(outpath, book)
fsize = os.path.getsize(outpath)
print(f"EPUB: {outpath}")
print(f"Size: {fsize:,} bytes")
print("Done!")