GitBucketではMarkdownの処理にpegdownを使っています。pegdownはJavaで使えるMarkdownプロセッサの中では最もまともなものだと思うのですが、GitHub Flavored Markdownとの互換性という面ではやや微妙なところがあります。
他の言語ではJavaScript用のmarked.js、Rubyのredcarpetなどがよさそうです。marked.jsをNashornで動かすという選択肢もなくはないのですが、ソースを見た感じそれほど巨大なものでもなさそうだったのでこれをJavaに移植してみました。*1
以下のような感じでとても簡単に使うことができます。引数にOptionsを渡すことでオプションを指定可能ですが、markded.jsがサポートしているすべてのオプションを実装しているわけではありません。
import io.github.gitbucket.markedj.Marked; String markdown = ... String html = Marked.marked(markdown);
これをGitBucketに組み込んでいこうと思うのですが、実際にはチケットやアカウントへのリンクといった記法を組み込む必要があるのでもう少し拡張しやすいインターフェースにする必要がありそうです。
しかし久しぶりにまともにJavaを書いたのですが、かなりつらさがありました。細かいところでいろいろストレスを感じる部分もあるのですが、単純なコード量だけで考えてもScala版と比べると3〜4倍くらいになってる気がします…。