source code: http://blog.dtpwiki.jp/dtp/2007/11/eps_b460.html