目次への第一歩

 またしてもkindleネタです。インプレスからON Deckという電子雑誌が創刊されたので、kindleで読む為&目次生成をXMLでやるためにちょっと触ってみました。ChainLPで一発変換が理想だったのですが・・・・・なんかだめです。とりあえず。

  1. ダウンロードした.EUBファイルをZIPファイルとして解凍
  2. 解凍したら、ディレクトリのOEBPSから.opfファイルを発見
  3. 偉大な先例に従ってPowerShellスクリプトを作成(toc.html生成と書き換えたcontent.opf)
  4. Kindlegenの実行

 とりあえず、末尾に目次を追加できて、Goto目次で目次に飛べるようになりました。kindleだと目次用のHTMLが必要なんですよね。xsltとやらで自動生成できないもんですかねぇ。あと、段落の字下げがねぇ・・・・kindlegenの設定でなんとかなるのでしょうか?

 なんとなくあっているから動いているんだよね目次生成スクリプト。さて、朝刊プロジェクトの改良にとりかかりましょうか・・・・

s1s2

s3

Param([String]$opffile=’content.opf’)
function nav_point([System.Xml.XmlElement]$e){
   
    $label = $e.navLabel.text
      $src = $e.content.src

      “<li><a href=`”” +  $src + “`”>” + $label + “</a></li>”
      “<ul>”
    foreach ( $c in $e.navPoint){
        #解せぬ、なぜnull比較がいるんだ・・・・
        if ($c -eq $null) {break}
        nav_point($c)
    }
    “</ul>”
}

#スクリプトのpathを取得
$scriptpath = $MyInvocation.MyCommand.Path
#ディレクトリ分離
$scriptdir =  Split-Path $scriptpath -Parent

####toc.htmlの作成
$toc = Join-Path $scriptdir “toc.ncx”
[System.Xml.XmlDocument] $doc =  New-Object System.Xml.XmlDocument
$doc.Load($toc)
“<html><body><h1>目次</h1><ul>” | Out-File (Join-Path $scriptdir “toc.html”) -encoding UTF8
foreach ( $child in ($doc.DocumentElement.navMap.navPoint)){
    nav_point($child) | Out-File (Join-Path $scriptdir “toc.html”) -encoding UTF8 -append
}

“</ul></body></html>” | Out-File (Join-Path $scriptdir “toc.html”) -encoding UTF8 -append

###content.opfファイルの書き換え
#mainfest
$opf = Join-path $scriptdir $opffile
$doc.Load($opf)

#manifest
$ele = $doc.CreateElement(“item”)
$ele.SetAttribute(“id”,”toc”)
$ele.SetAttribute(“href”,”toc.html”)
$ele.SetAttribute(“media-type”,”application/xhtml+xml”)
$doc.DocumentElement.manifest.AppendChild($ele)

#guide
$ele = $doc.CreateElement(“reference”)
$ele.SetAttribute(“href”,”toc.html”)
$ele.SetAttribute(“type”,”toc”)
$ele.SetAttribute(“Title”,”目次”)
$doc.DocumentElement.guide.AppendChild($ele)

#copy
Copy-Item $opf ($opf + “.bak”)

$doc.Save($opf)

#MOBI変換実行!
$kindlegen =  join-path  $scriptdir “kindlegen.exe”
& $kindlegen “-unicode” + $opf

広告
カテゴリー: コンピューターとインターネット, kindle タグ: , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中