2015年1月15日木曜日

Redmine 2.5 の markdown のテーブル内のセルに改行を入れる

どっちみち標準ではテーブルの中で改行が使えないのだが、
textileを使っている場合、昔から知られている対応がある。

単純に <br> タグが使えればいいのだが、
標準では有効なタグ以外はしまっちゃおうね〜、となっている。
で、その「有効なタグ」に <br> タグを追加する方法がこちら。

http://redmine.jp/faq/wiki/use-html-tag-in-wiki/

しかし、Redmine2.5から使用可能となったmarkdown(experimental)では、
この方法が使えない。
対応しても無視される。
どうやら、このファイルはtextileの場合のみ有効なようなのである。

experimentalだからって甘えてんじゃねえ!と憤ってみてもしょうが無いので、
どうにかする方法を考えてみるとする。

実はこのmarkdownのモジュール、
Redcarpetからの継承クラスとしてオリジナルレンダラを実装している。
それが以下のソースファイルである。

lib/redmine/wiki_formatting/markdown/formatter.rb

オリジナルレンダラの実装方法は、以下の記事に解説してある。

k0kubun's blog : Railsでカスタムmarkdownを実装する
http://k0kubun.hatenablog.com/entry/2013/09/19/223400

要は、オリジナルレンダラとして定義されている HTML クラスに、
ここに書いてある postprocess というメソッドを追加して、自力で対応すればいい。

しかし、HTMLタグ自体はここで処理されるまでにしまっちゃわれているので、
"[]"を使ってオリジナルタグ "[br]" を実装する方法で行ってみる。

と言うわけで、 HTML クラスに以下のメソッドを追加し、Redmineを再起動する。

def postprocess(full_document)
  full_document.gsub(/\[br\]/, '<br>')
end
単純に [br] って書かれてたら <br> に置換してるだけ。

あとは適当なところで [br] タグを試して見て下さい。改行されています。