Open Source
Von Lukas ·
Zwei Teile von Kernsetzer sind Open Source: das Dokumentmodell und der Import, der Word- und Markdown-Manuskripte in dieses Modell liest. Beide sind Rust-Crates auf crates.io, unter der MIT- oder der Apache-2.0-Lizenz, wie es dir lieber ist.
Diese Seite ist für Programmiererinnen und Programmierer. Wenn du Bücher schreibst, brauchst du nichts davon: In der App ist alles schon drin. Die Dokumentation der Crates ist auf Englisch.
kernsetzer-model
Das Buch als Daten. Ein Buch hat seine Angaben (Titel, Autorin oder Autor, Sprache, ISBN) und seine Abschnitte in Lesereihenfolge: Titelei, Kapitel, Anhang. Abschnitte enthalten Blöcke wie Absätze, Zitate, Verse, Szenenwechsel, Tabellen und Bilder, und Blöcke enthalten Text mit seinen Hervorhebungen. Das Modell sagt, was ein Manuskript enthält, nie, wie es gesetzt wird.
Die Crate liest und schreibt außerdem die Projektdatei .kernsetzer, ein Zip-Archiv mit dem Buch als JSON und seinen Bildern, und sie enthält die typografischen Regeln für deutschen und englischen Text: die richtigen Anführungszeichen, Striche und geschützten Leerzeichen. Angewandt werden sie erst beim Setzen, der gespeicherte Text bleibt so, wie er getippt wurde.
kernsetzer-model auf crates.io · Quellcode auf GitHub · Dokumentation auf docs.rs
kernsetzer-import
Liest ein .docx- oder Markdown-Manuskript in dieses Modell. Aus einer Word-Datei übernimmt er die Formatvorlagen, Listen, Hervorhebungen und Bilder und erkennt Kapitel, Titelei, Szenenwechsel und die Angaben zum Buch. Er kennt Kapitelüberschriften auf Deutsch und Englisch („Kapitel drei“, „Chapter 3“, „IV.“) und unterscheidet die beiden Sprachen am Text, wenn eine Datei sie nicht nennt oder die falsche nennt. Eine seltsame Datei ergibt Hinweise, keinen Fehler; ein Fehler ist nur eine Datei, die gar kein Manuskript ist.
Außerdem macht er eine verwürfelte Kopie eines Manuskripts: jeder Buchstabe ersetzt, die Struktur erhalten. Wer ein Importproblem hat, kann statt des Buchs die Kopie schicken, und die meisten Importprobleme zeigen sich auch darin.
kernsetzer-import auf crates.io · Quellcode auf GitHub · Dokumentation auf docs.rs
So nutzt du sie
So fügst du beide einem Projekt hinzu:
cargo add kernsetzer-model
cargo add kernsetzer-import
Im Code heißen die Bibliotheken setzer_model und setzer_import, nach dem Arbeitsnamen von Kernsetzer. Ein Aufruf liest eine Datei:
use setzer_import::read_manuscript;
use std::path::Path;
let path = Path::new("roman.docx");
let imported = read_manuscript(path)?;
Das Ergebnis enthält das Buch, seine Bilder und was auffiel, als book, assets und warnings. Die Crates brauchen Rust 1.92 oder neuer. Ihre Tests verwenden nur gemeinfreie Texte, etwa von Jane Austen und Franz Kafka.
Warum diese beiden
Jedes Buchsatz-Programm muss zuerst Manuskripte lesen. Worum es bei Kernsetzer geht, kommt danach: das Buch auf die Seite zu setzen. Deshalb ist das Lesen offen, für jedes Projekt, ob kommerziell oder nicht, während der Satz, die Designs, der EPUB-Export und die App geschlossen bleiben. Die App baut selbst auf den veröffentlichten Crates auf; was auf crates.io liegt, ist also der Code, mit dem Kernsetzer läuft.
Issues und Pull Requests
Issues sind auf GitHub willkommen: ein Fehler, eine Word-Datei, die falsch ankommt, eine Frage. Pull Requests nehme ich noch nicht an. Der Name „Kernsetzer“ ist eine Marke und nicht mit dem Code lizenziert; ein Projekt, das auf den Crates aufbaut, braucht also einen eigenen Namen.