オープン拡張辞書を Windows Runtime アプリで読み書きする(1)
オープン拡張辞書は、Microsoft IMEの追加辞書を作成、共有する機能です。簡単にインストールができるので、Webページや共有フォルダーに置いたり、メールに添付して配布したり、シーンに応じて多様な方法で共有と配布ができます。
Microsoft IME オープン拡張辞書について
Windows 8 以降だと OS 標準の IME で使えるのに、割りと流行ってない感じ。もっと使われないともったいなーと思ったので、こいつが編集できる Windows ストア アプリでも作ろうと思い立った。
オープン拡張辞書には二種類ある。
- .dctx: UTF-8 でエンコードされた XML ファイル
- .dctxc: .dctx を ZIP で圧縮したもの
あと署名を付けると収録できる単語数が増えるとか(署名されていない場合は1万語まで)いろいろあるのだけど、これはまぁ、今のところどうでもいい。今回はとりあえず .dctx が読めることを目標にする。ZIP うんぬんは、まぁ、.NET Framework 4.5 でごにょごにょすれば割と簡単にできるのだろう(慢心
とりあえずはクラス作りから。
public class OpenExtendedDictionary { public OpenExtendedDictionary() { DictionaryInfo = new OpenExtendedDictionaryInfo(); } public string DictionaryGuid { get; set; } public string DictionaryLanguage { get; set; } public string DictionaryVersion { get; set; } public bool CommentInsertion { get; set; } public OpenExtendedDictionaryInfo DictionaryInfo { get; set; } public ObservableCollection<OpenExtendedDictionaryEntry> DictionaryEntries { get; set; } } public class OpenExtendedDictionaryInfo { public string ShortName { get; set; } public string LongName { get; set; } public string Description { get; set; } public string Copyright { get; set; } public string Language { get; set; } } public class OpenExtendedDictionaryEntry { public string PartOfSpeech { get; set; } public string OutputString { get; set; } public string InputString { get; set; } public int Priority { get; set; } public bool ReverseConversion { get; set; } public bool CommonWord { get; set; } }
こんな感じだろうか。ほんとは INotifyPropertyChanged とかも実装すべきなんだろうけれど、今回はまだいいや。
あと、ここまで書いてから仕様を見直して知ったのだけど、DictionaryInfo は言語ごとに複数持てるので、リスト(言語で引けるようにディクショナリにしたほうがいいかな)じゃないとだめだ。めんどくさいので、あとで直すことにする。
次回
XML を読み書きする方法は3つほどある。
- XmlDocument を使う。あまり使ったことがないから知らん
- XDocument を使う。LINQ と相性がいい
- シリアライズする。どうやるのかわからんが、一番かっこよさそうな実装
気が向いたら続きを書く。