marked.jsをJavaに移植してみた

GitBucketではMarkdownの処理にpegdownを使っています。pegdownはJavaで使えるMarkdownプロセッサの中では最もまともなものだと思うのですが、GitHub Flavored Markdownとの互換性という面ではやや微妙なところがあります。

他の言語ではJavaScript用のmarked.jsRubyredcarpetなどがよさそうです。marked.jsをNashornで動かすという選択肢もなくはないのですが、ソースを見た感じそれほど巨大なものでもなさそうだったのでこれをJavaに移植してみました。*1

github.com

以下のような感じでとても簡単に使うことができます。引数にOptionsを渡すことでオプションを指定可能ですが、markded.jsがサポートしているすべてのオプションを実装しているわけではありません。

import io.github.gitbucket.markedj.Marked;

String markdown = ...
String html = Marked.marked(markdown);

これをGitBucketに組み込んでいこうと思うのですが、実際にはチケットやアカウントへのリンクといった記法を組み込む必要があるのでもう少し拡張しやすいインターフェースにする必要がありそうです。

しかし久しぶりにまともにJavaを書いたのですが、かなりつらさがありました。細かいところでいろいろストレスを感じる部分もあるのですが、単純なコード量だけで考えてもScala版と比べると3〜4倍くらいになってる気がします…。

*1:一度Scalaに移植したのですが、今後のmarked.jsのバージョンアップへの追従を考えると元のコードの構造を残しておきたかったのでハイパー手続き型なコードになっていたのと、Javaで作った方が用途が広がっていいかなと思いJavaに移植し直しましたorz