textileも対応してmd2epubがちょっと便利になりました。

f:id:uraito:20120417145236p:plain

先日公開のmd2epubですが、何箇所かバグフィックスしました。テストとしてGithubのWikiがmarkdown形式でgitでまとめて取ってこれるし使いやすい感じなのでEPUBにしてみようかとデータを取得してコネコネしているうちに、textile形式にも対応してました。使いかたは変わりませんが、より実用的になったかな、と思います。

で、昨日さる方面から「もっとくやしく」との依頼があったので、以下もう少し使い方をくやしくお伝えいたします。(# ゚Д゚) ムッキー

しかし、私実はRubyのことよくわかってないので、間違ってたら教えてほしい感じです。( `Д´)フォオオオオオオオオオ!

 

 インストール

RubyとGitが動く環境はすいません前提にさせてもらいます。で、githubからファイルを一式取ってきて「bundle install」します。

> git clone git@github.com:shunito/md2epub.git
> cd md2epub
> bundle install

redcarpetRedClothが変換の主役な感じです。

 

 データの準備

それから、変換するWikiのデータをとってきます。今回は手軽で綺麗にいったTwitter-bootstrapのWikiのデータで試してみましょう。

> git clone git://github.com/twitter/bootstrap.wiki.git

md2epubディレクトリのなかにBootstrapのWikiのデータがダウンロードされました。
この中に、epub.yamlという設定ファイルを作成します。サンプルがmdfilesディレクトリにあるので、それをコピーして使いましょう。こんな感じです

# md2EPUB Setting
# EPUBファイル名
bookname: twitter-bootstrap_wiki.epub
# 書名
booktitle: twitter/bootstrap Wiki
# 著者
aut: Twitter, Inc.
# 出版者
publisher: Twitter, Inc.
#Language
lang: en
#出版日
# 無い場合は生成日になります
#pubdate:
# UUID用のURL
# 無い場合はランダムにUUIDを生成します
#uuid:
# Debug
# trueの場合生成した一時ファイルを残します
debug: true

 

 データの調整

これで実行準備は出来ました。しかし、結果から言うとこれだけだとXHTMLを生成した時にValidになりませんでした。以下の修正をします。

Changelog.mdファイル内の7行目あたり。

 <em>Scaffolding &middot; Twitter Bootstrap</em>.
⇒<em>Scaffolding &#183; Twitter Bootstrap</em>.

私も今日まで知りませんでしたがXHTMLでは「&middot;」ダメなんですね。。「&#183;」に置き換えましょう!!!(ノ#`Д´)ノ⌒┻━┻

XHTMLとしてValidでないとEPUBとした時にエラーとなってしまうので、その他データでもこういう調整がかなり必要な感じです。 ほとんど一回ではうまくいかないので、epub.yamlのDebugオプションをtrueにしておいて、生成されるHTMLをブラウザなどで確認しながら調整するのが吉です。

その他、EPUB内でのページの並びはファイル名でソートされますので適宜ファイル名の頭に数字をつけるなど調整してください。

 

 md2epub実行

> ruby md2epub.rb bootstrap.wiki

引数にディレクトリ名を渡して実行します。今回のデータでは外部の画像ファイルなどないのであっという間に終わるかと思いますが、はてな教科書などの場合は画像をダウンロードしてパッケージしますので少し時間がかかります。今のところ一枚ずつリニアに取ってきていますので、ここはパフォーマンスアップの余地ありですね。

エラーなく完了すると、指定したディレクトリ内に設定ファイルで指定したファイル名でEPUBが生成されていると思います。たぶん。

以上です。ヽ(`(`(`(`ヽ(`Д´)ノ ファ・フォァ・フワォオオオオオオオオオオオン!!

 

今後の課題

github-flavored-markdownには対応したい感じですが、Githubのtextileのなかにfenced_code_blocksがあったりする対応とかいろいろ不足な感じです。レンダラーの中に踏み込んでいくのはちょっとしんどいのでどうしたもんかなぁ。