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」 がすべて重複した定義エラーになってしまい、 「ゃゃゃゃゃ」に変換されてしまった。 うーむ。