2010年7月 7日

gepub 0.1.1 をリリースしました。

[ gepub 電子書籍 ]

必要十分を目指すrubyで書いたepubライブラリ・gepubのversion 0.1.1をリリースしました。はじめてminor versionが1になったよ。gem install gepub で降ってくるはず。

ソースはこちら。http://github.com/skoji/gepub

主な変更点。

  1. インタフェースをいちから書き直して、itemを生成してbookに追加するというモデルにしました。だいぶシンプルになってる、といいなあ。
  2. 圧縮前epubのディレクトリを作成せずに、直接epubを生成するようにしました
  3. ソースとなるデータをファイルではなくIOオブジェクトで渡すようにしました

IOオブジェクトで渡すようになったのは地味な変更だけど、地味に使いやすいんじゃないかと思っております。


これまでのGEPUB::GeneratorではなくGEPUB::Bookをつかってください。

GEPUB::Generatorは0.2.0のタイミングで削除する予定です。使い方はgithubに置いてあるexample.rbをご参照ください。例は少しずつ充実させます。

この後は、

  • メタデータをもうちょっとちゃんと書き込めるようにする
  • インタフェースがまだおかしい気がするのでみなおす
  • XMLライブラリをNokogiriにする

などなどを考えていますが、予定は気まぐれに変わります。こうなるといいなー、なんていうのがあればお知らせください。ないだろうけど。

電子書籍部でつかっているテキストto EPUBのコードも遠からず公開する予定です。

2010年5月 4日

EPUB生成ライブラリを作ってみた

[ gepub 電子書籍 ]

(2010/5/5 : githubにあげました)

EPUB生成のライブラリをrubyで作ってみました。ブツはこちら。http://github.com/skoji/gepub

  • コンテンツ指定のファイルは/content.opfに固定
  • identifierのschemeはURLに固定
  • identifierの名前はBookIDに固定

などなどいろいろ決め打ちにしています。

利用例はこんなです。

require 'rubygems'
require 'gepub'
require 'fileutils'


epubdir = "testepub" # epubのコンテンツを置くディレクトリ
title = "samplepub"  # epubのファイル名


FileUtils.rm_rf(epubdir)
FileUtils.mkdir(epubdir)

# epub メタデータ作成
epub = GEPUB::Generator.new(title)
epub.author="the author"
epub.publisher="the publisher"
epub.date = "2010-05-03"
epub.identifier = "http://www.skoji.jp/testepub/2010-05-03" # identifierはURLのみ

# サンプルのコンテンツ生成。通常は、別途作成しているはず。
[ 'coverpage', 'chapter1', 'chapter2' ].each {
  |name|
  File.open(epubdir + "/#{name}.html", 'w') {
    |file|
    file << <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
  <head>
    <title>sample #{name} </title>
  </head>
  <body>
  <h1>#{name}</h1>
<p>here comes the contents for #{name}</p>
  </body>
</html>
EOF
  }
}

# "coverpage"は表紙を想定。従って目次のデータには入れない。
# spineに入れた順にリーダでは表示される。
epub.addManifest('cover', "coverpage.html", 'application/xhtml+xml')
epub.spine.push('cover')


epub.addManifest('chap1', "chapter1.html", 'application/xhtml+xml')
epub.spine.push('chap1')
epub.addNav('chap1', 'Chapter 1', "chapter1.html")

epub.addManifest('chap2', "chapter2.html", 'application/xhtml+xml')
epub.spine.push('chap2')
epub.addNav('chap1', 'Chapter 2', "chapter2.html")

# この他にcssとかイメージがあれば、それもManifestへ追加する。
# cssやイメージはspineやaddNavへの追加は不要。

# container.xml/contents.opf/toc.ncxなどのファイルを生成
epub.create(epubdir)

# 生成したディレクトリから、epubファイル作成
epub.create_epub(epubdir, ".")

サンプル書いて気付きましたが、EPUB::Creatorというクラスの役割がぶれてるなあ。