narou
narou copied to clipboard
バージョン 1.1.1 以降のAozoraEpub3改造版に Narou.rb の CSS が適用されない
状況整理
AozoraEpub3(以下、Aozora)の改造版は、電書協の制作ガイドに準拠するため、 バージョン 1.1.1 からepubファイル^1とそのテンプレートのディレクトリ構成を変更した。
Narou.rb でこの新しい改造版を使うと CSS やフォントを Aozora 側にコピーする際、 コピー先のディレクトリがなくてエラーが発生。 その後、プログラムが改修されエラーは出なくなったものの、 コピー先のパスが正しくないため、新しい改造版では Narou.rb の CSS が反映されなかった。
AozoraEpub3 の仕様
カスタムテンプレートのパス
本家も改造版もカスタムテンプレートファイルは下記のようなパスに配置する必要がある(フォントファイルは除く)
- ファイル名はオリジナルファイルと同じ名前
- 親フォルダのパスは、「オリジナルファイルの親フォルダのパス」+
"_custom"
例
オリジナルのテンプレートファイルのパスが
C:/AozoraEpub3-1.1.1b22Q/template/item/style/aozora.css
であれば、カスタムテンプレートのパスは
C:/AozoraEpub3-1.1.1b22Q/template/item/style_custom/aozora.css
になる
(参考)AozoraEpub3 でカスタムテンプレートを処理してる箇所 Epub3Writer.java#L402-L406
CSS のインポート構成について[^2]
・電書協フォーマットに対応した改造版には book-style.css
というメインのCSSがある。
・他の CSS はこの book-style.css
に @import
文で取り込まれる
・作品の本文HTMLは book-style.css
だけをリンクする
book-style.css …… 本文HTMLが取り込むCSS
│
├─ style-reset.css …… book-style.css にインポートされるCSS
├─ style-standard.css …… 〃
├─ style-advance.css …… 〃
├─ aozora.css ………〃
├─ font.css ………〃
└─ text.css ………〃
[^2]: 「電書協 EPUB 3 制作ガイド ver.1.1.3」76ページにも記載がある。 http://ebpaj.jp/counsel/guide よりダウロード可能。
下記の案をもとに修正してPRしてみました。#420
ひとつの対応案
下記のようにメインの book-style.css
の最後に Narou.rb のCSSファイルの内容を追記する。
こうすれば Narou.rb のスタイル定義が最後になり同じセレクタなら優先的に使われる。
book-style.css
@charset "UTF-8";
@import "style-reset.css";
@import "style-standard.css";
@import "style-advance.css";
@import "aozora.css";
@import "font.css";
@import "text.css";
‥ Aozora のスタイル定義 ‥
/*** [START] Narou.rb embedded custom style ***/
‥ Narou.rb のスタイル定義を追記 ‥
/*** [END] Narou.rb embedded custom style ***/
また追記方式なら、Aozoraが資材を改訂してもNarou.rbの資材をそのまま使える可能性が高くなる。
現行でも chuki_tag.txt
は追記で更新している。
リクエスト内容だと初期状態でstyle_customがないのでエラーが発生してました。 ディレクトリ作成でエラー解消されるので、style_customが無ければディレクトリ作成する処理追加で問題ないんじゃないかと
コードは適当なのですがディレクトリ判定して、無ければ作成してから渡すといいのかな?と def self.get_custom_file_path(file_path) puts "IN: self.get_custom_file_path" custom_file_path = File.join(File.dirname(file_path) + "_custom") unless File.directory?(custom_file_path) FileUtils.mkdir_p(custom_file_path) end File.join(File.dirname(file_path) + "_custom", File.basename(file_path)) end
@kokotaro ご指摘ありがとうございます。恥ずかしいバグでした。
修正案は少し変更させて頂きました。
FileUtils.mkdir_p
は対象ディレクトリが存在しても実行できるので、ディレクトリ存在チェックは取り除きました。
https://github.com/whiteleaf7/narou/pull/420/commits/de425147a0b12dcbfac538ca5a2e37cb711fff8e
でコミットしました。