whiteleaf7 / narou

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

章立てがある長い作品をslice_sizeで分割すると、2冊め以降のepub中のnav.xhtmlが不正になることがある #411

Closed gitster closed 6 months ago

gitster commented 1 year ago

[使用ソフトウェアヴァージョン] narou version 3.8.2 AozoraEpub3 1.1.1b13Q

[設定] device: epub default.enable_half_indent_bracket: false default.slice_size: 1200 default.author_comment_style: simple

[再現手順] $ narou download n0692es && narou convert n0692es 生成されたepubのうち、二冊目以降はepub validationを通りません。nav.xhtmlが不正と言われます。

[説明]

これはAozoraEpub3側の問題かも知れませんが、.narou/local_setting.yaml ファイル内にdefault.slice_sizeを設定して(例 "narou s default.slice_size=1200")出力が分割されるようにすると、章立てがある作品では、(運が良くない限り)2冊目以降のepubがvalidation errorになります。 一冊目がたとえば3章の20話目で終わり、二冊目が3章の21話目から始まる、なんていう場合に、nav.xhtmlの最初の方のエントリが不正になるようです。具体的には

普通なら nav.xhtml はこんな具合になるようです(1冊目は正しくこんな具合になります)。実際には<li>のそれぞれには各話へのリンクの<a>エレメントが入りますが、ここでは省略しています。


  <ol><li>作品のタイトル</li>
      <li>第1章の見出し
      <ol><li>1-1話</li>
          <li>1-2話</li>
          <li>1-3話</li>
          ...
      </ol></li>
      <li>第3章の見出し
      <ol><li>3-1話</li>
          ...
      </ol></li>
  </ol>

ところが、2冊めは、こんな風に始まります。


  (誤り)
  <ol>
  <ol><li>作品のタイトル</li>
      <li>3-21話</li>
      <li>3-22話</li>

外側の<ol>は第2巻全体をくるむもの、本来はその中のはじめの<li>エレメントが第3章(の残り) の見出しページを複製し、その中に内側の<ol>が来て、その章に属する各話が<li>エレメントで列挙されるはずですが、そこがうまく行っていかずに、<ol>の次に<li>でも</ol>でもないモノが来てsgmlバリデーションが通らない、ということになります。

最小限の修正は、作品タイトルの<li>エレメントを動かして


  <ol><li>作品のタイトル</li>
  <li><ol>
      <li>3-21話</li>
      <li>3-22話</li>

とすることですが、<li>第3章の見出し(つづき)というのを作品タイトルの後ろに入れて


  <ol><li>作品のタイトル</li>
      <li>第3章の見出し(つづき)
  <ol>
      <li>3-21話</li>
      <li>3-22話</li>

と始めるようにできれば、より良いかもしれません(第1巻と同じ構造になる)。 ただ、そうすると「見出し」ページを複製しないといけないので面倒は増えるかも知れませんが。

kokotaro commented 6 months ago

今更感はありますが、Ubunu環境で事象の再現確認できました。 ただ改造版AozoraEpub3使用であれば以下の環境では既に問題は発生しないように見えています。 narou version 3.8.2 AozoraEpub3 1.1.1b23Q (java --version -> openjdk 21.0.2 2024-01-16) ※Ubuntu環境ですが多分Windowsでも同じ想定

改善あればクローズでいいかと思いますがどうでしょう?

gitster commented 6 months ago

おなじ3.8.2で再現して、AozoraEpub3をアップデートしたら解決するのであれば、narouのissueとするの自体が間違いですから、クローズするのが妥当と思います。

再現試験ありがとうございました。