アメリカのアマゾンでは、漫画の目次を階層化しているのを見かけたので、それをプログラムでやって自動化する方法を考えている。
目次を階層化したらどういうところがいいのか。
マンのページは200ページぐらいあるの本が多いけれど、それを全部目次にすると選択するのにも時間がかかってしまうので、目次を減らす動作を自動化するのを以前に作った。
ここに、toc.ncxをコピーして貼り付けるとpage-1のように初期から書き換えられていない部分を削除するツール。
今度はそれを折りたたんでしまおうというのが階層化ということです。
折りたたむには、で書いたことを自動化してみようと思う。
折りたたんだ後に、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部分の配列番号を取得し、目次を解析する。
とりあえず製作途中を上げる。