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>
1.5 KiB
1.5 KiB
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 brauchttesseract-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
.gitignoreausgeschlossen – keine Binärdateien committen. pdf2md.pypatcht drei Funktionen inpymupdf4llm.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, obtests/test_normalize.py::test_pymupdf4llm_patch_keeps_compound_hyphenundtests/test_verbatim.pynoch grün sind.- Zwischen dem Patch (
lines_to_md) undnormalize_markdownlaufen 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.