プレーンテキストはあくまで足がかりでした。Aoedeの目的は、自分が実際に持っている本を読むこと。そしてそれはEPUBとPDFです。だから、いまはその両方を取り込めます。アプリの残りの部分から見れば、ほかには何も変わりません。本はどんなファイルで届こうと、相変わらず章と段落と文です。
この「同じであること」が設計上いちばん大事なところです。EPUBとPDFはまるで違う形式で、とくにPDFは厄介です。テキストはページごとに出てきて、単語は行末で割れ、ヘッダーやフッターや裸のページ番号が本文に紛れ込み、段落はハードラップされた断片として届きます。インポーターはそれを全部きれいにし、つながるべきものをつなぎ直し、目次があれば章立てに使います。テキストレイヤーを持たないスキャンPDFは、ゴミとして読み上げる代わりに検出して丁重に断ります。(そうしたPDFにVisionフレームワークでOCRをかけるのは、後回しのリストに入れてあります。)
その見返りとして、インポートの下流にあるもの、つまり音声、ハイライト、再開位置は、本がどこから来たかを一切知らなくて済みます。形式を増やすのは新しいインポーターを足すだけで、ほかには何もありません。読書位置とキャッシュしたタイミングはテキストのハッシュに紐づけてあるので、内容が変わらないかぎり有効なままです。