オープン拡張辞書を Windows Runtime アプリで読み書きする(1)

執筆日時:

オープン拡張辞書は、Microsoft IMEの追加辞書を作成、共有する機能です。簡単にインストールができるので、Webページや共有フォルダーに置いたり、メールに添付して配布したり、シーンに応じて多様な方法で共有と配布ができます。

Microsoft IME オープン拡張辞書について

Windows 8 以降だと OS 標準の IME で使えるのに、割りと流行ってない感じ。もっと使われないともったいなーと思ったので、こいつが編集できる Windows ストア アプリでも作ろうと思い立った。

オープン拡張辞書には二種類ある。

あと署名を付けると収録できる単語数が増えるとか(署名されていない場合は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つほどある。

  1. XmlDocument を使う。あまり使ったことがないから知らん
  2. XDocument を使う。LINQ と相性がいい
  3. シリアライズする。どうやるのかわからんが、一番かっこよさそうな実装

気が向いたら続きを書く。