tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

textile-jを使ってWiki文法をXHTMLに変換する

textile-jというWikiパーサが簡単に使えそうだったので試してみた。

方言

textile-jでは以下の4つの形式から変換できるみたい。残念ながら僕らのはてな記法には対応していない。

準備

ここからjarファイルをダウンロードしてclasspathに通す。

サンプルコード

import java.io.StringWriter;

import net.java.textilej.parser.MarkupParser;
import net.java.textilej.parser.builder.HtmlDocumentBuilder;
import net.java.textilej.parser.markup.Dialect;
import net.java.textilej.parser.markup.confluence.ConfluenceDialect;
import net.java.textilej.parser.markup.mediawiki.MediaWikiDialect;
import net.java.textilej.parser.markup.textile.TextileDialect;
import net.java.textilej.parser.markup.trac.TracWikiDialect;

public class Main {
	public static void main(String[] args) throws Exception {
		String text = "*太字*";

		Class[] dialects = { TextileDialect.class, ConfluenceDialect.class, MediaWikiDialect.class, TracWikiDialect.class };
		for (Class clazz : dialects) {
			System.out.format("%s: %s\n", clazz.getSimpleName(), textToHtml(text, clazz, true));
			System.out.format("%s: %s\n", clazz.getSimpleName(), textToHtml(text, clazz, false));
		}
	}

	static String textToHtml(String textile, Class<? extends Dialect> clazz, boolean isDocument) throws Exception {
		StringWriter sw = new StringWriter();

		HtmlDocumentBuilder builder = new HtmlDocumentBuilder(sw);
		builder.setEmitAsDocument(isDocument);

		MarkupParser parser = new MarkupParser(clazz.newInstance());
		parser.setBuilder(builder);
		parser.parse(textile);

		return sw.toString();
	}
}

実行結果

TextileDialect: <?xml version='1.0' ?><html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><strong>太字</strong></p></body></html>
TextileDialect: <p><strong>太字</strong></p>
ConfluenceDialect: <?xml version='1.0' ?><html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><strong>太字</strong></p></body></html>
ConfluenceDialect: <p><strong>太字</strong></p>
MediaWikiDialect: <?xml version='1.0' ?><html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><ul><li>太字*</li></ul></body></html>
MediaWikiDialect: <ul><li>太字*</li></ul>
TracWikiDialect: <?xml version='1.0' ?><html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p>*太字*</p></body></html>
TracWikiDialect: <p>*太字*</p>

その他

他にも、同じjarにAnt TaskやEclipse Pluginも入っているらしいのでいろいろできるっぽい。