pdf2md/CLAUDE.md
Dieter Schlüter d322ee3523 Zeilengetreue Übernahme von Code, Registern, Versen und Adressen
Ein Zeilenumbruch gilt als weich (vom Satzprogramm), wenn das erste Wort
der nächsten Zeile nicht mehr gepasst hätte (Toleranz 5 % der Spalte);
sonst als hart, und die Zeile bleibt samt Einrückung erhalten.

- lines_to_md (Patch von text_to_md): harte/weiche Umbrüche aus der
  Geometrie; Blöcke mit überwiegend harten Umbrüchen zeilengetreu als
  Codeblock (auch Proportionalschrift, Einrückung rekonstruiert) oder als
  Zeilen mit "\" und geschützten Leerzeichen
- Blockgrenzen: freie Zeichen der letzten Zeile werden mitgegeben,
  normalize_markdown prüft damit das erste Wort des nächsten Blocks
- normalize_markdown: harte Umbrüche, Absatzenden ohne Satzzeichen,
  Codeblöcke über Seitengrenzen zusammenführen, wörtliches ``` maskieren
- EPUB-CSS: lange Codezeilen umbrechen (white-space: pre-wrap)
- Tests (tests/test_verbatim.py), README, Bedienungsanleitung, CLAUDE.md,
  TODO.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 16:39:06 +02:00

1.5 KiB
Raw Blame History

CLAUDE.md

PDF → Markdown → EPUB für den PocketBook-Reader (digitale und gescannte PDFs). Aktuelles Programm: pdf2md.py (Einzeldatei; Name bleibt fest, keine Versionsnummer im Dateinamen). Frühere Stände (v1–v4) nur noch in der Git-Historie.

Befehle

  • Tests: python3 -m pytest (Fixtures werden synthetisch erzeugt; OCR braucht tesseract-ocr-deu)
  • Lint: python3 -m ruff check pdf2md.py tests/
  • Echttest: python3 pdf2md.py --epub Operation_Ljutsch_Band_1_-_Reinhard_Otto_Kranz.pdf <scratch>/band1.md

Konventionen

  • Hilfetexte, Meldungen, Kommentare und Docstrings auf Deutsch (wie v4); Bezeichner Englisch.
  • Echttests nie nach Fertig/ schreiben (dort liegen die Ergebnisse des Nutzers).
  • PDFs/EPUBs/Bilder sind per .gitignore ausgeschlossen – keine Binärdateien committen.
  • pdf2md.py patcht drei Funktionen in pymupdf4llm.helpers.document_layout (get_styled_text, text_to_md, create_list_item_levels – letztere nur, um pro Seite die Zeilengeometrie zu merken). Nach einem pymupdf4llm-Update prüfen, ob tests/test_normalize.py::test_pymupdf4llm_patch_keeps_compound_hyphen und tests/test_verbatim.py noch grün sind.
  • Zwischen dem Patch (lines_to_md) und normalize_markdown laufen interne Markierungen aus dem Private-Use-Bereich (HARD_BREAK, BLOCK_END, PARAGRAPH_END, STANZA_BREAK, U+E002–U+E005); sie dürfen nie in der Ausgabe landen.
  • Regressionsprüfung bei Änderungen am Umbruch: Band 1/2 vorher/nachher diffen; Fließtext darf sich nur an echten Absatz- oder Zeilenwechseln der PDF ändern.