whiteleaf7 / narou

Narou.rb - 小説家になろうのダウンローダ&縦書き整形&管理アプリ。Kindle(などの電子書籍端末)でなろうを読む場合に超便利です!
Other
512 stars 55 forks source link

バージョン 1.1.1 以降のAozoraEpub3改造版に Narou.rb の CSS が適用されない #419

Open happynow opened 8 months ago

happynow commented 8 months ago

状況整理

AozoraEpub3(以下、Aozora)の改造版は、電書協の制作ガイドに準拠するため、 バージョン 1.1.1 からepubファイル^1とそのテンプレートのディレクトリ構成を変更した。

Narou.rb でこの新しい改造版を使うと CSS やフォントを Aozora 側にコピーする際、 コピー先のディレクトリがなくてエラーが発生。 その後、プログラムが改修されエラーは出なくなったものの、 コピー先のパスが正しくないため、新しい改造版では Narou.rb の CSS が反映されなかった。

AozoraEpub3 の仕様

カスタムテンプレートのパス

本家も改造版もカスタムテンプレートファイルは下記のようなパスに配置する必要がある(フォントファイルは除く)

オリジナルのテンプレートファイルのパスが 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 よりダウロード可能。

happynow commented 8 months ago

下記の案をもとに修正して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 は追記で更新している。

kokotaro commented 8 months ago

リクエスト内容だと初期状態で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

happynow commented 8 months ago

@kokotaro ご指摘ありがとうございます。恥ずかしいバグでした。 修正案は少し変更させて頂きました。 FileUtils.mkdir_p は対象ディレクトリが存在しても実行できるので、ディレクトリ存在チェックは取り除きました。 https://github.com/whiteleaf7/narou/pull/420/commits/de425147a0b12dcbfac538ca5a2e37cb711fff8e でコミットしました。

rogenobl commented 2 weeks ago

かなり間が空きましたが、happynowさんのも参考に変更範囲の小さな実装を作りました。 色々迷いましたが、昨日も掲示板で出てましたし、近々prしようと思います。ただ、後述の様にCSSが悩みどころで、どうしたものかと思ってます。

happynowさんの実装は、CSS書き換えのロジック変更がマイナーバージョンでの変更にしては大きかったかもしれません。 しかし、将来のメジャーバージョンアップの際には良いアイデアと思いますし、その時はAozoraEpub3等に関わる部分をaozoraepub3.rbに集約出来ると良いと思います。

以下、CSSについての検討事項

太字をゴシックにするかどうか

AozoraEpub3が電書協準拠になったものの、style/text.vm においてゴシック体、太字、斜体のクラス名が古いままです。 この影響でAozoraEpub3の太字をゴシックにするオプションが効いてない気がしますが、narou.rbでは、このオプションがない時代に太字がゴシックになるようにしていたのだろうと思います。 これをAozoraEpub3の方で対処するのか、narou.rbで強制的にゴシックにするか。

縦書き用設定

電書協版だとCSSファイルが縦書き横書き共用ですが、元が縦書き専用なので縦書き設定がありません。 これについて、とりあえず入れておくか、細かい調整も含め後で別途issueかprでやるべきか。

微調整

happynowさんのも意図が掴みかねて採用してない部分も多々あります。 narou.rbの書式に合わせたのか、AozoraEpub3のバグ対応なのか、リーダーの癖に合わせたのか、好みなのか。 やりだすとキリがなさそうなので、別途にしたい。

kokotaro commented 2 weeks ago

微調整箇所かな? 個人的に把握しているCSS周りの差異は以下 (3.8.2時代なので解消されてるのもあるかも

  1. 表紙のスタイルが反映されない
  2. 目次のスタイルが反映されない
  3. 前書き/後書きのスタイルが反映されない
  4. 濁点フォントの指定が反映されない

個人的には3->1->4->2の順で似た見た目になると読みやすいと感じています。

太字をゴシックにするかどうか 従来AozoraEpub3で変換していたのであれば、narou側で渡し方を修正するほうがいいのかなと思っていますが、正直問題箇所を把握できてないので的外れコメントかもです。

縦書き用設定 これ改造版を使用している上で上記に書いた未反映以外は特別気になっていないので、微調整と合わせてIssue切る感じですかね

rogenobl commented 2 weeks ago
1. 表紙のスタイルが反映されない
2. 目次のスタイルが反映されない

確認してみましたが、電書協対応で変更したスタイルに AozoraEpub3 が対応出来てないための様です。 出来れば AozoraEpub3 側で対処したいところです。

3. 前書き/後書きのスタイルが反映されない
4. 濁点フォントの指定が反映されない

これは治るはず。

happynow commented 2 weeks ago

@rogenobl いつも有難うございます。長く保守を続けるのは大変なことだと思います。 本件も対応ありがとうございました。 ただ申し訳ありませんが、いま私の手元に開発環境がなく修正箇所を確認できません。 本issue、クローズすべきタイミングで、その旨お伝えください。