Romaji Kana Table to KotoeriRomaji.plist

タブ区切りのローマ字かな対応表をKotoeriRomaji.plistに変換する手順を考えてみた。

  • 一行読み込んでローマ字とかなの対に分解する。
  • 読み込んだローマ字は、アルファベット一文字を一つのノードとする多分木の木構造に構成する。
    • 木構造は、ノードを表す辞書のインデックスをポインタとして表現する。
    • 木構造は多分木なので、ノードは連続するインデックスを持つ複数のノードで表す。
    • 親ノードは、その子ノードの先頭のノードのインデックスをさす。
  • ルートノードは空文字として、入力の一文字目がルートノードの子ノードとなる。
  • 同様に二文字目は一文字目の子ノードとなる。
  • ローマ字に対応するかなは、そのローマ字を辿って到達する末端のノードから一文字ずつの子ノードを構成する。
  • アルファベットはノードのNodeValueに、かなはResultに保持する。
  • 例えば、kya きゃ、kyu きゅ、というローマ字かながあると、ルートノードの子ノードのk、kの子ノードのy、yの子ノードのaとuがある。
    • このときaのResultは'き'であって子ノードに'ゃ'を持つ。
    • 同様にuのResultは'き'で子ノードに'ゅ'を持つ。
  • また、各ノードはフラグNodeFlagsを持つ。
    • 兄弟ノードの末尾以外はビット値0x01が立つ。
    • 葉ノードのResultが’っ’の場合はビット値0x02が立つ。
    • 葉ノード以外でResultが設定されている場合はビット値0x04が立つ。