今回は,日本語化したditaaの利用方法を説明する.
なおUbuntu 8.04 LTSとEmacs22上で, org-6.34c (2010年1月10日リリース)の利用を前提にしている.
リンク
Jditaaプログラム
ditaaを使ってみる に書いたように,各日本語文字の後ろに空白を付け加えれば良い.
そこで,以下のように日本語文字の後ろに空白を付け加える Jditaa.java プログラムを作成した.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.File; import java.io.IOException; import java.lang.Character.UnicodeBlock; import java.util.HashMap; import java.util.Map; import org.stathissideris.ascii2image.core.CommandLineConverter; public class Jditaa { static Map<UnicodeBlock,Integer> widthMap; static { widthMap = new HashMap<UnicodeBlock,Integer>(); widthMap.put(UnicodeBlock.ARROWS, 2); widthMap.put(UnicodeBlock.CJK_COMPATIBILITY, 2); widthMap.put(UnicodeBlock.CJK_COMPATIBILITY_FORMS, 2); widthMap.put(UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS, 2); widthMap.put(UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION, 2); widthMap.put(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS, 2); widthMap.put(UnicodeBlock.ENCLOSED_CJK_LETTERS_AND_MONTHS, 2); widthMap.put(UnicodeBlock.HIRAGANA, 2); widthMap.put(UnicodeBlock.KATAKANA, 2); } public static int charWidth(char ch) { UnicodeBlock block = UnicodeBlock.of(ch); Integer w = widthMap.get(block); if (w != null) { return w; } return 1; } public static void jditaa(File in, File out) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(in)); BufferedWriter writer = new BufferedWriter(new FileWriter(out)); while (true) { String line = reader.readLine(); if (line == null) break; StringBuilder s = new StringBuilder(); for (int i = 0; i < line.length(); i++) { char ch = line.charAt(i); s.append(ch); if (Character.isHighSurrogate(ch)) { i++; s.append(line.charAt(i)); } else { int w = charWidth(ch); for (int k = 1; k < w; k++) s.append(' '); } } s.append('\n'); writer.write(s.toString()); } writer.close(); reader.close(); } public static void main(String[] args) { if (args.length >= 2) { try { int i = args.length - 2; File ditaaFile = new File(args[i]); if (ditaaFile.exists()) { File tmpFile = File.createTempFile("temp", "ditaa"); tmpFile.deleteOnExit(); jditaa(ditaaFile, tmpFile); System.out.println(ditaaFile + " --> " + tmpFile); args[i] = tmpFile.getAbsolutePath(); } } catch (IOException e) { e.printStackTrace(); } } CommandLineConverter.main(args); } }
インストール
以下のようにして,jditaa.jar ファイルを作成する.なお ditaa.jar ファイルは, org-6.34c.zip を展開した時にできた org-6.34c/contrib/scripts/ ディレクトリ中にある.
$ cp ditaa.jar jditaa.jar $ javac -cp jditaa.jar Jditaa.java $ echo "Main-Class: Jditaa" >manifest $ jar umf manifest jditaa.jar Jditaa.class
また .emacs ファイル等で,jditaa.jarのパスを指定する.
(setq org-ditaa-jar-path "~/jditaa.jar")
コマンドラインからの利用方法
まず,入力ファイルを準備する.文字コードは,利用するJavaのデフォールトのエンコーディングを利用すること(Ubuntuの場合はUTF-8).
/-------------+-------------\ |cRED 赤色 |cBLU 青色 | +-------------+-------------+ |cGRE 緑色 |cPNK 桃色 | +-------------+-------------+ |cBLK 黒色 |cYEL 黄色 | \-------------+-------------/
Emacsで作成する場合は,Emacs picture-modeの拡張 を利用すると便利.
コマンドラインからは,以下のように利用する.引数の最後から二つ目が入力ファイル名になるようにすること.つまり,オプションを指定する場合は,入力ファイル名の前に指定すること.
$ java -jar jditaa.jar -s 2 input output.png
orgファイル中での利用
以下は,orgファイル中での利用例である.
#+TITLE: ditaaのテスト #+AUTHOR: 屯遁 #+EMAIL: #+LANGUAGE: ja #+OPTIONS: toc:nil num:nil author:nil creator:nil #+BEGIN_DITAA images/ditaa-test.png -s 2 /-------------+-------------\ |cRED 赤色 |cBLU 青色 | +-------------+-------------+ |cGRE 緑色 |cPNK 桃色 | +-------------+-------------+ |cBLK 黒色 |cYEL 黄色 | \-------------+-------------/ #+END_DITAA
「C-c C-c h」でHTMLにエクスポートすると,以下のようになる.
バグなど
- 特定のUnicodeブロックを,幅2の文字として処理している. Emacsやその他のエディタの処理とは異なるかもしれない.
- Javaのデフォールトのエンコーディング以外に対応していない. Reader, Writerのエンコーディングを指定する必要があるかもしれない.
- 引数の最後から二つ目が入力ファイル名と決めて,処理している.オプションを指定する場合は,入力ファイル名の前に指定すること.
「Emacs org-modeを使ってみる」の目次
- (1) インストール
- (2) 見出しと項目の編集
- (3) 表の編集
- (4) 表計算
- (5) TODOリスト
- (6) アジェンダ表示
- (7) ハイパーリンク
- (8) メモを取る
- (9) キーバインド1/3
- (10) キーバインド2/3
- (11) キーバインド3/3
- (12) GTDツールとして
- (13) HTMLにエクスポート
- (14) LaTeXにエクスポート
- (15) Beamerにエクスポート
- (16) エクスポート結果
- (17) orgの表を埋め込む
- (18) 計時
- (19) graphvizとditaaの図を埋め込む
- (20) gnuplotを呼び出す
- (21) LaTeX数式のインライン画像表示
- (22) RSSフィードを取り込む
- (23) エクスポート時に利用できるLaTeX記号
- (24) 繰り返し行動の記録
- (25) iCalendarにエクスポート
- (26) タグとプロパティ
- (27) ドローワとアーカイブ
- (28) バッファ内設定一覧
- (29) エクスポートオプション一覧
- (30) CSSクラス名一覧
- (31) Emacs Lispの実行
- (32) HTML表のスタイル設定
- (33) 脚注と参考文献の利用
- (34) 短縮形リンクの利用
- (35) org-babel-perlを使う1/4
- (36) org-babel-perlを使う2/4
- (37) org-babel-perlを使う3/4
- (38) org-babel-perlを使う4/4
- (39) speedbarを使う
- (40) org-babel-Rを使う1/2
- (41) org-babel-Rを使う2/2
- (42) 日本語化ditaaの利用
- (43) mhcをインポート
- (44) 再びHTMLにエクスポート
- (45) Firefoxからブックマーク