RailsでMarkdownを使ってみる
このブログは2006年の年末に開発し始めてから、ずっとはてな記法のような独自記法を採用してきました。でもいい加減独自記法もないよね、ということでMarkdownを使えるようにしてみました。
まず既存の記事の独自記法をMarkdownに変換しなければなりません。直接変換するのは厳しいので、いったんHTMLに変換してからMarkdownに変換することにします。
HTMLからMarkdownに変換するには、reverse_markdownというgemを使います。ちょこちょこと以下のような点で問題があったので、いろいろとパッチをあてました。
- preタグの中の複数のスペースをひとつのスペースに変換しちゃう
- この変換処理自体を行わないようにした
- brタグの前にスペースを入れてしまう
- スペースを入れないようにした
- preタグの中の
<
の記号をタグの始まりだと勘違いしちゃう - htmlの時点で、preタグの中身にCGI.escapeHTMLをかける
変換スクリプトはここにあります。
MarkdownをHTMLに変換するライブラリはいくつかありますが、今回はredcarpetを使うことにしました。Githubでも使われているようです。
シンプルにHTML変換するコードは以下になります。コードのsyntaxに色をつけるために、Pygmentsを使用しています。
https://github.com/tsukasaoishi/kaeruspoon/blob/e15911a49c3e486616ed9987684b9eaef0a6ff3c/lib/text_decorator.rb
始める前はすごく大変かと思っていたのですが、以外と簡単にMarkdownに変更することができました。