概要
FreeMindで作成したマップを保存すると、Unicodeが16進数化された形式になります。
これをUTF-8で保存できるようにしてみました。
(UTF-8で保存されたファイルは、なぜかそのままFreeMindで読み込めています。ので、今回は保存する処理だけUTF-8化します。)
UTF-8で保存するメリットは次のように考えています。
- Spotlightの検索対象になる
- grepできるようになる
今回試した環境
- OS: macOS High Sierra
- バージョン: 1.0.1
- JDK: 1.8.0_201
手順
ソースをダウンロード
まず次の URL からソースファイルをダウンロードします。
https://sourceforge.net/projects/freemind/files/freemind/1.0.1/
次のファイルをダウンロードします。ダウンロードしたら解凍します。
freemind-src-1.0.1.tar.gz
修正するのは次の 2つのファイルです。
- freemind/freemind/main/XMLElement.java
- freemind/freemind/modes/mindmapmode/MindMapMapModel.java
ダウンロードしたソースを修正
修正内容は、それぞれ次の通りです。
freemind/freemind/main/XMLElement.java
まず編集するのは次の16進数化している処理です。
(変更前)
2456: default:
2457: int unicode = (int) ch;
2458: if ((unicode < 32) || (unicode > 126)) {
2459: writer.write('&');
2460: writer.write('#');
2461: writer.write('x');
2462: writer.write(Integer.toString(unicode, 16));
2463: writer.write(';');
2464: } else {
2465: writer.write(ch);
2466: }
これを次のようにコメントアウトします。
(変更後)
2456: default:
2457: int unicode = (int) ch;
2458: //if ((unicode < 32) || (unicode > 126)) {
2459: // writer.write('&');
2460: // writer.write('#');
2461: // writer.write('x');
2462: // writer.write(Integer.toString(unicode, 16));
2463: // writer.write(';');
2464: //} else {
2465: writer.write(ch);
2466: //}
freemind/freemind/modes/mindmapmode/MindMapMapModel.java
次にファイル出力しているところを編集します。
(変更前)
285: BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(
286: new FileOutputStream(file)));
これを次のように UTF-8 の指定を追加します。
(変更後)
285: BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(
286: new FileOutputStream(file), "UTF-8"));
コンパイル
クラスパスに FreeMindアプリの JARファイルを指定して、編集したソースをコンパイルします。
cd ~/Downloads/freemind-src-1.0.1.tar.gz/freemind
javac -cp /Applications/FreeMind.app/Contents/Java/freemind.jar freemind/freemind/main/XMLElement.java freemind/freemind/modes/mindmapmode/MindMapMapModel.java
JARファイルを更新
オリジナルのJARファイルを更新する前に、拡張子.orgでバックアップしておきます。
cp -p /Applications/FreeMind.app/Contents/Java/freemind.jar{,.org}
コンパイルしたクラスファイルをJARファイルに更新します。
jar uf /Application/xxx/freemind.jar freemind/freemind/main/XMLElement.class freemind/freemind/modes/mindmapmode/MindMapMapModel.class
確認
それでは FreeMind で作成したファイルが UTF-8 で保存されるようになったか確認します。
事前に FreeMind で保存したファイルは、次のようになっていました。
(変更前)
<map version="1.0.1">
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
<node CREATED="1562581830801" ID="ID_1221806494" MODIFIED="1562581837270" TEXT="ほげ">
<node CREATED="1562581837272" ID="ID_187674930" MODIFIED="1562581839399" POSITION="right" TEXT="ふが"/>
</node>
</map>
このファイルを FreeMind で開いて、保存し直すと次のようになりました。
(変更後)
<map version="1.0.1">
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
<node CREATED="1562581830801" ID="ID_1221806494" MODIFIED="1562581837270" TEXT="ほげ">
<node CREATED="1562581837272" ID="ID_187674930" MODIFIED="1562581839399" POSITION="right" TEXT="ふが"/>
</node>
</map>