KotoeriRomaji.plist 変換ツールをデバッグする

d:id:tsntsumi:20100405:DebugingKotoeriRomajiPlistConvertingTool の続き。

どうやら 「ち」 が食べられてしまうのは、 かなが複数続く時にそれを表すフラグ 0x04 ビットを、 親ノードに立てるのを忘れていたせいのようだった。

これを立てたら 「ちゃちゅちぇちょ」 はうまく変換されるようになった。

しかし今度は 「chi」 が 「ちち」 になってしまう。 これは 「cha」 → 「ちゃ」 と 「chi」 → 「ち」 という変換の子ノードの並びを

root -->+--+->+--+->+--+
        |c |  |h |  |a |
        |  |  |ち|  |ゃ|
        +--+  +--+  +--+
root -->+--+->+--+->+--+
        |c |  |h |  |i |
        |  |  |  |  |ち|
        +--+  +--+  +--+

としていた。 実際にはノードを木構造で管理しているため 「h」 のノードが共有されて、 「chi」→「ちち」 という変換になっていたのだった。

そこでローマ字の長さよりもかなの長さが2文字以上短かったら

root -->+--+->+--+->+--+
        |c |  |h |  |i |
        |  |  |ち|  |  |
        +--+  +--+  +--+

のように設定することにした。

これで 「chi」→「ち」 に変換するようになった。

しかし今度は 「xya」 「xyi」 「xyu」 「xye」 「xyo」 がすべて重複した定義エラーになってしまい、 「ゃゃゃゃゃ」に変換されてしまった。 うーむ。