KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

kindle comic creator 目次の階層化

アメリカのアマゾンでは、漫画の目次を階層化しているのを見かけたので、それをプログラムでやって自動化する方法を考えている。

 目次を階層化したらどういうところがいいのか。

マンのページは200ページぐらいあるの本が多いけれど、それを全部目次にすると選択するのにも時間がかかってしまうので、目次を減らす動作を自動化するのを以前に作った。

kindle comic creatorの目次処理

ここに、toc.ncxをコピーして貼り付けるとpage-1のように初期から書き換えられていない部分を削除するツール

 

今度はそれを折りたたんでしまおうというのが階層化ということです。

折りたたむには、で書いたことを自動化してみようと思う。

99nyorituryo.hatenablog.com

 

折りたたんだ後に、page-1という番号もかっこ悪いので、「1ページ」だとか、「1頁」、「-1-」みたいに変えてみるのをやってみようと思う。

 

条件1

まず、<text>Page-0</text>でPage-半角数字ではないのを探す。 見つからなければやめる。かつその次に、<text>半角数字</text>を見つけた場合。 

 

条件2 

そのタグ内の</navPoint> を切り取り。

page-数字のブロックに</navPoint>を追加。

それを繰り返し、見つからなくなればやめる。

 

アルゴリズムをもう少し考える。

 

使うデータの例を考える

 

第一話

  2頁

   3頁 

  ・・・

第二話

  20頁

  ・・・

このページ部分を折りたたんで表示するようにしたい。toc.ncxの構造を考えると、</navPoint>のいちで階層化を変えることができるが。それをするのにはどうすればいいか。xml文書なんだからjavascriptでぱーすできるような気がしたが、htmlにして表示がしたいのではなくて、xmlを編集したいだけである。確認のためにDOMパースして表示するのもいいかもしれない。

  <navPoint playOrder="1" id="toc-1">
<navLabel>
<text>Page-0</text>
</navLabel>
<content src="html/Page-0.html"/>
</navPoint>
<navPoint playOrder="2" id="toc-2">
<navLabel>
<text>Page-1</text>
</navLabel>
<content src="html/Page-1.html"/>
</navPoint>
<navPoint playOrder="3" id="toc-3">
<navLabel>
<text>Page-2</text>
</navLabel>
<content src="html/Page-2.html"/>
</navPoint>
<navPoint playOrder="4" id="toc-4">
<navLabel>
<text>Page-3</text>
</navLabel>
<content src="html/Page-3.html"/>
</navPoint>
<navPoint playOrder="5" id="toc-5">
<navLabel>
<text>Page-4</text>
</navLabel>
<content src="html/Page-4.html"/>
</navPoint>

 

行数を読み取って、<text>page-数字</text>で書いてある行を調べる。

 

目次部分とその他を分離する。目次部分を行列ごとに配列に保存、page部分の配列番号を取得し、目次を解析する。

 

とりあえず製作途中を上げる。

kindle comic creatorの目次処理