詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

はてな記法 ⇔ Markdownコンバータ(pandoc のはてな記法対応)

最近の若者ははてな記法を書けないらしい……などと言っているだけではアレなのでコンバータを書いてみた。リストを書こうとして見出し(*)になっちゃうんですよね。あるある。

タイトルにあるとおり、pandoc という有名なマークアップコンバータにはてな記法を実装してみた形です。

github.com

フォークした1ブランチとしてソースコードがあるのみで、バイナリの配布とかはしてない。Haskell 製なので Stack をインストール(Homebrew なら haskell-stack)しておいて、make したらビルドできると思います。

pandoc の reader(マークアップの読み取り)および writer(マークアップの書き出し)として hatena を追加しているので、

pandoc -f hatena -t markdown_github < file.hatena

のように引数に指定して記法を変換できます。Markdown と書いたけど、pandoc がすごいので HTML や他のフォーマットにも変換可能。

parsec の思い出

pandoc の記法リーダの実装は parsec というライブラリに依っている。自分は Pugs という Haskell で書かれた Perl6 実装が話題になったころに Haskell でナイーブな JavaScript のインタプリタを書いてみたときに使って、そのとき以来触った覚えはなかったのだけど、意外とハマることも少なくすんなり実装できた。パフォーマンスはともかく。

調べてみたら Pugs は 10 年も前の話で、その頃の知識が今もまだ使えていることになんだか不思議な感じがある。

ミニマルはてな記法

先日のそうだGo、京都。でも話があったらしいが、はてな記法は実装の数だけ存在していて、単純なマークアップの範疇を越える仕事もしているので(:title による自動ページタイトル取得など)簡単に統一することはできないのだけど、そうは言っても実装する人たちの中で共通している認識はあるはずだと思っている。それをミニマルはてな記法と勝手に呼んで、それを実装してみた。公式なものではありません。

できれば仕様を書きたかったのだけど、大変なので、さしあたり以下のサンプルを用意した。これを意図通りに読み書きできるようなものとして実装した。pandoc を使って Markdown に変換したものもあわせて Gist に載せているので、どんなふうに解釈されるかわかりやすいと思う。