電子書籍編集ツール API 説明書¶
電子書籍編集ツールは、HTML +リソースファイルのコレクションとして書籍を表す calibre.ebooks.oeb.polish.container.Container オブジェクトと、コンテナで操作を実行するために使用できるさまざまなツールで構成されています。すべてのツールは、さまざまな calibre.ebooks.oeb.polish.* モジュールのモジュールレベルの関数の形式になっています。
次のようにして、パスにある本のコンテナオブジェクトを取得します:
from calibre.ebooks.oeb.polish.container import get_container
container = get_container('Path to book file', tweak_mode=True)
電子書籍エディタのプラグインを作成している場合は、編集中の書籍の現在のコンテナを次のように取得します:
from calibre.gui2.tweak_book import current_container
container = current_container()
if container is None:
report_error # No book has been opened yet
Container オブジェクト¶
- class calibre.ebooks.oeb.polish.container.Container(rootpath: str | None = None, opfpath: str | None = None, log: Log | None = <calibre.utils.logging.Log object>, clone_data: CloneData | None = None)[ソース]¶
コンテナは開いている電子書籍を、OPF ファイルおよびファイルでいっぱいのフォルダとして表します。 2 つの重要な概念があります:
ルートフォルダ。これが電子書籍のベースです。すべての電子書籍ファイルは、このフォルダまたはそのサブフォルダ内にあります。
名前: ルートフォルダを基準にした書籍のファイルへのパスです。それらは常に POSIX 区切り文字を含み、引用符で囲まれていません。本のファイルの正規の識別子と考えることができます。コンテナオブジェクトのほとんどのメソッドは名前で機能します。名前は常にNFC Unicode の通常の形式です。
クローン: コンテナオブジェクトは、電子書籍エディタでチェックポイントを実装するために使用される効率的なディスク上のクローンをサポートします。これを機能させるために、ファイルシステム上のファイルには直接アクセスしないでください。代わりに、
raw_data()またはopen()を使用して、本の中のコンポーネントファイルの読み取り/書き込みを行ってください。
href と名前を変換するときに、このクラスが提供するメソッドを使用します。このときすべての href が引用符で囲まれていると想定します。
- abspath_to_name(fullpath: str, root: str | None = None) str[ソース]¶
絶対パスを
rootを基準とした正規名に変換します- パラメータ:
root -- ベースフォルダ。デフォルトでは、このコンテナオブジェクトのルートが使用されます。
- add_file(name: str, data: bytes | IO[bytes] = b'', media_type: str | None = None, spine_index: int | None = None, modify_name_if_needed: bool = False, process_manifest_item: Callable[[_Element], __annotationlib_name_1__] | None = None, suggested_id: str = '') str[ソース]¶
このコンテナにファイルを追加します。ファイルのエントリは、OPF マニフェストとスパインに自動的に作成されます (ファイルがテキストドキュメントの場合)
- add_name_to_manifest(name: str, process_manifest_item: Callable[[_Element], __annotationlib_name_1__] | None = None, suggested_id: str = '') str[ソース]¶
指定した名前のファイルのマニフェストにエントリを追加します。マニフェスト ID を返します。
- apply_unique_properties(name: str | None, *properties: str) tuple[list[str | None], list[str | None]][ソース]¶
指定したプロパティを設定するのは、名前で識別されるマニフェスト項目だけにしてください。名前として None を渡すと、すべての項目からプロパティを削除できます。
- book_type = 'oeb'¶
本のタイプ (EPUB ファイルの場合は epub、AZW3 ファイルの場合は azw3)
- commit(outpath: str | None = None, keep_parsed: bool = False) None[ソース]¶
汚くなった解析済みオブジェクトをすべてファイルシステムにコミットし、電子書籍ファイルをアウトパスに書き込みます。
- パラメータ:
output -- 保存した電子書籍ファイルを書き込むパス。 None であれば、元の本ファイルのパスが使用されます。
keep_parsed -- True のとき、コミットされた項目の解析された表現はキャッシュに保持されます。
- commit_item(name: str, keep_parsed: bool = False) None[ソース]¶
解析されたオブジェクトをディスクにコミットします (シリアル化され、基になるファイルに書き込まれます)。
keep_parsedが True なら、解析された表現はキャッシュに保持されます。parsed()も参照のこと。
- exists(name: str) bool[ソース]¶
正規名に対応するファイル/フォルダーが存在すれば True。ただしこの関数は、基盤となる OS ファイルシステムの制限、特に (非) 感度の問題があります。したがって、大文字と小文字を区別しないファイルシステムでは、名前と基になるファイルシステムファイルで大文字と小文字が異なっていても、これは True を返します。
has_name()も参照のこと。
- filesize(name: str) int[ソース]¶
指定された正規名で表されるファイルのサイズをバイト単位で返します。汚れた解析済みオブジェクトを自動的に処理します。
parsed()も参照のこと。
- generate_item(name: str, id_prefix: str | None = None, media_type: str | None = None, unique_href: bool = True) _Element[ソース]¶
指定された名前から派生した href を使用してマニフェストに項目を追加します。 href と id の一意性を自動的に保証します。生成された項目を返します。
- get_file_path_for_processing(name: str, allow_modification: bool = True) str[ソース]¶
open() に似ていますが、開いているファイルオブジェクトの代わりにファイルパスを返す点が異なります。
- property guide_type_map: dict[str, str | None]¶
ガイドタイプの正規名へのマッピング
- has_name(name: str | None) TypeGuard[str][ソース]¶
指定されたものと同じ正規名のファイルが存在する場合は True を返します。
exists()とは異なり、このメソッドでは常に大文字と小文字が区別されます。
- href_to_name(href: str | None, base: str | None = None) str | None[ソース]¶
(ベースに対して) href を名前に変換します。 base は name または None である必要があり、その場合には self.root が使用されます。
- insert_into_xml(parent: _Element, item: _Element, index: int | None = None) None[ソース]¶
item を親に挿入し (インデックスが None であれば追加し)、インデントを修正します。自己終了する item でのみ機能します。
- is_dir = False¶
このコンテナが解凍された本 (ディレクトリ) を表すかどうか
- iterlinks(name: str, get_line_numbers: Literal[True] = True) Iterator[tuple[str | None, int | None, int]][ソース]¶
- iterlinks(name: str, get_line_numbers: Literal[False]) Iterator[str | None]
- iterlinks(name: str, get_line_numbers: bool = True) Iterator[tuple[str | None, int | None, int]] | Iterator[str | None]
名前のすべてのリンクを繰り返します。get_line_numbers が True のとき、結果は (link, line_number, offset) の形式で得られます。line_number はリンクが発生するline_number、offset は行の先頭からの文字数です。ただし offset は、ゼロでない場合でも実際には複数の線を含む可能性があります。
- make_name_unique(name: str) str[ソース]¶
name には必ずこの本に存在していないものを指定してください。すでに存在する場合は、変更された存在しないバージョンを返します。
- property manifest_id_map: dict[str, str | None]¶
マニフェストIDの正規名へのマッピング
- manifest_items_of_type(predicate: __annotationlib_name_2__ | AbstractContainer[__annotationlib_name_1__] | Callable[[__annotationlib_name_3__], __annotationlib_name_4__]) Iterator[__annotationlib_name_5__][ソース]¶
メディアタイプが predicate とマッチするすべてのマニフェスト項目の名前。predicate は、セット、リスト、文字列、または単一の引数を取る関数であり、メディアタイプで呼び出されます。
- manifest_items_with_property(property_name: str) Iterator[__annotationlib_name_1__][ソース]¶
指定したプロパティを持つすべてのマニフェスト項目
- property manifest_type_map: dict[str, tuple[str | None, ...]]¶
マニフェストメディアタイプの、そのメディアタイプの正規名のリストへのマッピング
- property mi: Metadata¶
Metadata オブジェクトとしてこの本の書誌。ただしこのオブジェクトは、このプロパティが要求されるたびにオンザフライで構築されるため、慎重に使用してください。
- name_to_href(name: str, base: str | None = None) str[ソース]¶
名前をベースを基準にした href に変換します。これは、名前または None である必要があり、self.root がベースとして使用されます。
- property names_that_must_not_be_changed: set[str]¶
名前を変更してはならない名前のセット。電子書籍のファイル形式によって異なります。
- property names_that_must_not_be_removed: set[str]¶
コンテナから削除してはならない名前のセット。電子書籍のファイル形式によって異なります。
- property names_that_need_not_be_manifested: set[str]¶
マニフェストから欠落することが許可されている名前のセット。電子書籍のファイル形式によって異なります。
- open(name: str, mode: str = 'rb') IO[bytes][ソース]¶
直接読み取り/書き込み用に name で指定されたファイルを開きます。ただしファイルが汚いときには、ファイルがコミットされて解析キャッシュから削除されます。このファイルは、解析されたバージョンのファイルに再度アクセスする前に終了する必要があります。そうしないと、問題が発生します。
- property opf: _Element¶
解析された OPF ファイル
- opf_dir: str¶
OPF ファイルを含むフォルダへの絶対パス
- opf_get_or_create(name: str) _Element[ソース]¶
指定した name の最初の XML 要素を返すか、まだ存在しなければ opf:package 要素の下に作成して、それを返す便利なメソッド。
- opf_name: str¶
OPF ファイルの正規名
- property opf_version: str¶
OPF の <package> 要素に設定されているバージョン
- property opf_version_parsed: OPFVersion¶
OPF の <package> 要素に整数のタプルとして設定されたバージョン
- opf_xpath(expr: str) list[_Element][ソース]¶
OPF ファイルで XPath 式を評価するための便利なメソッドで、opf: および dc: 名前空間プレフィックスが事前定義されています。
- parsed(name: str) ParsedObject[ソース]¶
name で指定されたファイルの解析済み表現を返します。HTML および XML ファイルの場合、lxml ツリーが返されます。CSS ファイルの場合、css_parser スタイルシートが返されます。ただし解析されたオブジェクトは、性能上の理由からキャッシュされます。解析されたオブジェクトに変更を加える場合は、
dirty()を呼び出して、コンテナがキャッシュを更新することを認識できるようにする必要があります。replace()も参照のこと。
- raw_data(name: str, decode: Literal[False], normalize_to_nfc: bool = True) bytes[ソース]¶
- raw_data(name: str, decode: bool = True, normalize_to_nfc: bool = True) str | bytes
name で指定したファイルに対応する生データを返します
- パラメータ:
decode -- True かつ、ファイルにテキストベースの MIME タイプがあるときは、それをデコードして、raw バイトの代わりに Unicode オブジェクトを返します。
normalize_to_nfc -- True のとき、返される Unicode オブジェクトは、EPUB および AZW3 ファイル形式で必要とされる NFC 正規形に規格化されます。
- relpath(path: str, base: str | None = None) str[ソース]¶
絶対パス(OS区切り文字を含む)をベースパス(デフォルトはself.root)からの相対パスに変換します。相対パスは名前では ありません 。名前として使用する場合は、
abspath_to_name()を使用してください。
- remove_from_spine(spine_items: Iterable[__annotationlib_name_1__], remove_if_no_longer_in_spine: bool = True) None[ソース]¶
指定された項目 (正規名) をスパインから削除します。
remove_if_no_longer_in_spineが True のとき、スパインからだけでなく、本からも項目が削除されます。
- remove_item(name: str, remove_from_guide: bool = True) None[ソース]¶
このコンテナから name で識別される項目を削除します。これにより、OPF マニフェスト、ガイド、スパイン、および内部キャッシュ内の項目へのすべての参照が削除されます。
- rename(current_name: str, new_name: str) None[ソース]¶
ファイル名を current_name から new_name に変更します。ファイルが含まれているフォルダが変更された場合、ファイル内のすべてのリンクが自動的にリベースされます。ただし、このファイルを参照する可能性のある他のファイルでは、リンクは更新されません。性能上の理由から、このような更新は一括して実行する必要があります。
- replace(name: str, obj: ParsedObject) None[ソース]¶
name に対応する解析済みオブジェクトを obj に置き換えます。これは類似したオブジェクト、つまりHTML / XML ならば lxml ツリー、CSSファイルならば css_parser スタイルシートである必要があります
- replace_links(name: str, replace_func: LinkReplacerType) bool[ソース]¶
replace_func を使用して、name のすべてのリンクを置き換えます。replace_func は URL を受け入れ、置き換えられた URL を返す呼び出し可能である必要があります。また、実際の置換が行われた場合に True に設定される 'replaced' 属性が必要です。このような呼び出し可能オブジェクトは作成するには、
LinkReplacerおよびLinkRebaserclasses を使用すると便利です。HTMLファイルでは、aria-labelledbyなど、同じファイル内の要素をIDで参照する属性も置換されます。各IDは、file_typeが 'idref' に設定された「#id」という形式のURLとしてreplace_funcに渡され、replace_funcが同じ形式のURLを返した場合にのみ置換されます。
- set_spine(spine_items: Iterable[__annotationlib_name_1__]) None[ソース]¶
スパインを spine_items に設定します。ここで、spine_itemsは (name, linear) の形式のイテラブルです。名前の中にマニフェストに存在しないものがあれば、エラーが発生します。
- property spine_items: Iterator[__annotationlib_name_1__]¶
本のスパインのすべての項目のパスを生成するイテレータ。
spine_iterおよびspine_itemsも参照のこと。
- property spine_iter: Iterator[__annotationlib_name_1__]¶
本の背表紙のすべての項目に対してitem, name, is_linear をもたらすイテレータ。 item は lxml 要素、name は正規ファイル名、is_linear は項目が線形の場合は True です。
spine_namesおよびspine_itemsも参照のこと。
- property spine_names: Iterator[__annotationlib_name_1__]¶
本の背表紙のすべての item に name と is_linear を生成するイテレータ。
spine_iterおよびspine_itemsも参照のこと。
コンテナ内のコンポーネントファイルの管理¶
- calibre.ebooks.oeb.polish.replace.replace_links(container: Container, link_map: Mapping[__annotationlib_name_1__, __annotationlib_name_2__], frag_map: ~calibre.ebooks.oeb.polish.replace.FragMap = <function <lambda>>, replace_in_opf: bool = False) None[ソース]¶
コンテナ内のファイルへのリンクを置き換えます。コンテナ内のすべてのファイルを反復処理し、それらの中で指定されたリンクを変更します。
- パラメータ:
link_map -- 古い正規名から新しい正規名へのマッピング。例:
{'images/old.png': 'images/new.png'}frag_map -- 2 つの引数
(name, anchor)を取り、新しいアンカーを返す呼び出し可能オブジェクト。これは HTML ファイルのアンカーを変更する必要がある場合に役立ちます。デフォルトでは、何もしません。replace_in_opf -- False のとき、リンクは OPF ファイルで置き換えられません。
きれいな印刷と解析エラーの自動修正¶
- calibre.ebooks.oeb.polish.pretty.fix_html(container: Container, raw: str) bytes[ソース]¶
コンテナ内のすべての HTML ファイルの解析エラーを修正します。修正は、HTML5 解析アルゴリズムを使用して行われます。
- calibre.ebooks.oeb.polish.pretty.fix_all_html(container: Container) None[ソース]¶
raw で文字列として表される HTML の解析エラーを修正します。修正は、HTML5 解析アルゴリズムを使用して行われます。
- calibre.ebooks.oeb.polish.pretty.pretty_html(container: Container, name: str, raw: str) bytes[ソース]¶
raw に文字列として表された HTML をきれいに印刷します
- calibre.ebooks.oeb.polish.pretty.pretty_css(container: Container, name: str, raw: str) bytes[ソース]¶
raw に文字列として表された CSS をきれいに印刷します
本のジャケットの管理¶
ファイルの分割とマージ¶
- calibre.ebooks.oeb.polish.split.split(container: Container, name: str, loc_or_xpath: __annotationlib_name_2__ | Sequence[__annotationlib_name_1__], before: bool = True, totals: Sequence[__annotationlib_name_3__] | None = None) str[ソース]¶
名前で指定されたファイルを loc_or_xpath で指定された位置で分割します。分割すると、影響を受けるファイルへのすべてのリンクと参照が自動的に移行されます。
- パラメータ:
loc_or_xpath -- //h:div[@id="split_here"] などの XPath 式である必要があります。プレビューパネルで分割を実装するために内部的に使用される loc にすることもできます。
before -- True のとき、分割は識別された要素の前に発生し、そうでなければその後に発生します。
totals -- 内部で使用
- calibre.ebooks.oeb.polish.split.multisplit(container: Container, name: str, xpath: str, before: bool = True) list[str][ソース]¶
指定されたファイルを複数の場所 (指定された XPath 式に一致するすべてのタグ) で分割します。
split()も参照のこと。分割すると、影響を受けるファイルへのすべてのリンクと参照が自動的に移行されます。- パラメータ:
before -- True のとき、分割は識別された要素の前に発生し、そうでなければその後に発生します。
- calibre.ebooks.oeb.polish.split.merge(container: Container, category: str, names: Sequence[__annotationlib_name_1__], master: str) None[ソース]¶
指定したファイルをひとつのファイルにマージし、影響を受けるファイルへのすべてのリンクと参照を自動的に移行します。ファイルはすべて HTML または CSS ファイルである必要があります。
- パラメータ:
category -- HTML ファイルなら
'text'、CSS ファイルなら'styles'のいずれか。names -- マージするファイルのリスト
master -- マージされたファイルのどれが マスター ファイルか。つまり、マージ後に残るファイルです。
表紙の管理¶
- calibre.ebooks.oeb.polish.cover.set_cover(container: Container, cover_path: str, report: Reporter | None = None, options: CoverOptions | None = None) None[ソース]¶
本の表紙を cover_path が指す画像に設定します。
- パラメータ:
cover_path -- 画像ファイルへの絶対パスまたは本の画像の正規名。本で画像を使用する場合は、オプションも設定する必要があります。以下を参照してください。
report -- 単一の引数を取るオプションの呼び出し可能オブジェクト。実行中の操作に関する情報とともに呼び出されます。
options -- None、または表紙の設定方法を制御する辞書。辞書には次のエントリを含めることができます。keep_aspect: True または False (EPUBで表紙の縦横比を保持) no_svg: True または False (EPUB タイトルページで SVG 表紙ラッパーを使用) existing: True または False (
cover_pathは本の中の既存の画像を指す)
CSS の処理¶
- calibre.ebooks.oeb.polish.fonts.change_font(container: Container, old_name: str, new_name: str | None = None) bool[ソース]¶
フォントファミリを old_name から new_name に変更します。スタイルシート、スタイルタグ、およびスタイル属性のフォントファミリのすべての出現箇所を変更します。old_name が埋め込みフォントを参照している場合、それは削除されます。new_name を None に設定すると、フォントファミリを変更する代わりに削除できます。
- calibre.ebooks.oeb.polish.css.remove_unused_css(container: Container, report: Callable[[str], object] | None = None, remove_unused_classes: bool = False, merge_rules: bool = False, merge_rules_with_identical_properties: bool = False, remove_unreferenced_sheets: bool = False) bool[ソース]¶
使用されていない CSS 規則をすべて本から削除します。使用されていない CSS 規則とは、実際のコンテンツと一致しない規則です。
- パラメータ:
report -- 単一の引数を取るオプションの呼び出し可能オブジェクト。処理中のタスクに関する情報とともに呼び出されます。
remove_unused_classes -- True の場合、CSS 規則に一致しない HTML のクラス属性も削除されます。
merge_rules -- True のとき、同一のセレクタを持つ規則がマージされます。
merge_rules_with_identical_properties -- True のとき、同一のプロパティを持つ規則がマージされます。
remove_unreferenced_sheets -- True のとき、どのコンテンツからも参照されていないスタイルシートは削除されます
- calibre.ebooks.oeb.polish.css.filter_css(container: Container, properties: Iterable[__annotationlib_name_1__], names: Collection[__annotationlib_name_2__] = ()) bool[ソース]¶
本の中のすべての CSS 規則から指定された CSS プロパティを削除します。
- パラメータ:
properties -- 削除するプロパティのセット。例:
{'font-family', 'color'}.names -- プロパティを削除するファイル。デフォルトでは、本の中のすべての HTML ファイルと CSS ファイルになります。
目次の処理¶
書籍編集ツール¶
- class calibre.gui2.tweak_book.plugin.Tool[ソース]¶
ベースクラス:
objectEditBook プラグインの個々のツールの基本クラス。便利なメンバーには次のものがあります:
self.plugin: このツールが属するcalibre.customize.Pluginオブジェクトへの参照。self.
bossself.
gui
サブクラスでオーバーライドする必要があるメソッド:
- name: str | None = None¶
これを一意の名前に設定すると、キーとして使用されます
- allowed_in_toolbar = True¶
True のとき、ユーザはこのツールをプラグインツールバーに配置することを選択できます
True のとき、ユーザはこのツールをプラグインメニューに配置することを選択できます
- toolbar_button_popup_mode = 'delayed'¶
ツールバーボタンのメニュー (あれば) のポップアップモード。可能な値は、'delayed', 'instant', 'button' です。
- property boss¶
calibre.gui2.tweak_book.boss.Bossオブジェクト。ユーザインタフェースを制御するために使用されます。
- property gui¶
ユーザインタフェースのメインウィンドウ
- property current_container¶
編集中の本を表す現在の
calibre.ebooks.oeb.polish.container.Containerオブジェクトを返します。
- register_shortcut(qaction, unique_name, default_keys=(), short_text=None, description=None, **extra_data) None[ソース]¶
指定された
qactionをトリガーするキーボードショートカットを登録します。このキーボードショートカットは、自動的にエディタ設定のキーボードショートカットセクションでユーザがカスタマイズできるようになります。- パラメータ:
qaction -- QAction オブジェクト。ユーザが構成済みのキーの組み合わせを押すとトリガーされます。
unique_name -- このショートカット/アクションの一意の名前。内部で使用されます。このプラグインの他のアクションで共有しないでください。
default_keys -- デフォルトのキーボードショートカットのリスト。指定しない場合、デフォルトのショートカットは設定されません。ここで指定したショートカットが、組み込みのショートカットまたはユーザ設定/他のプラグインからのショートカットと競合する場合、それらは無視されます。その場合、ユーザは環境設定からショートカットを手動で設定する必要があります。例:
default_keys=('Ctrl+J', 'F9')short_text -- このアクションのオプションの短いな説明。指定しない場合、QAction からのテキストが使用されます。
description -- このアクションのオプションの長めの説明。このショートカットの設定エントリで使用されます。
- create_action(for_toolbar=True)[ソース]¶
for_toolbarに応じて、プラグインツールバーまたはプラグインメニューのいずれかに追加される QAction を作成します。例:def create_action(self, for_toolbar=True): ac = QAction(get_icons('myicon.png'), 'Do something') if for_toolbar: # We want the toolbar button to have a popup menu menu = QMenu() ac.setMenu(menu) menu.addAction('Do something else') subaction = menu.addAction('And another') # Register a keyboard shortcut for this toolbar action be # careful to do this for only one of the toolbar action or # the menu action, not both. self.register_shortcut(ac, 'some-unique-name', default_keys=('Ctrl+K',)) return ac
参考
メソッド
register_shortcut()。
エディタのユーザインタフェースを制御¶
電子書籍エディタのユーザインタフェースは、単一のグローバル Boss オブジェクトによって制御されます。これには、プラグインコードで一般的なタスクを実行するために使用できる多くの便利なメソッドがあります。
- class calibre.gui2.tweak_book.boss.Boss(parent, notify=None)[ソース]¶
-
- apply_container_update_to_gui(mark_as_modified=True) None[ソース]¶
現在の本コンテナの最新データを反映するように、ユーザインタフェースのすべてのコンポーネントを更新します。
- パラメータ:
mark_as_modified -- Trueのとき、本は変更済みとしてマークされるため、ユーザは終了時に本を保存するように求められます。
- commit_all_editors_to_container()[ソース]¶
ユーザがエディタで開いているファイルに加えた変更をコンテナにコミットします。現在のコンテナでアクションを実行する前に、このメソッドを呼び出す必要があります
- property currently_editing¶
現在編集中のファイルの名前を返します。編集中のファイルがない場合は None を返します。
- edit_file(name, syntax=None, use_template=None)[ソース]¶
name で指定したファイルをエディタで開きます
- パラメータ:
syntax -- ファイルのメディアタイプ、たとえば
'text/html'など。指定されていない場合は、ファイル拡張子から推測されます。use_template -- 開いたエディタを初期化するためのテンプレート
- open_book(path=None, edit_file=None, clear_notify_data=True, open_folder=False, search_text=None)[ソース]¶
編集用の
pathで電子書籍を開きます。電子書籍がサポートされている形式でない場合、または現在の書籍に未保存の変更がある場合は、エラーが表示されます。- パラメータ:
edit_file -- 編集を開始するために新しく開いた本の中のファイルの名前。名前のリストにすることもできます。
