「っ」が「ltu」に変換される問題は、変換テーブルの並びを変更したら修正できた。なので、あとは「きゃ」を「kilya」でなく「kya」にするように変更するあたり。
この問題はソースコードに修正を行ったら解決。変更点は
for (size_t i = 0; i < pimpl->converted.size(); ++i) {
for (int j = 0; pimpl->convert_table[j] != 0x0; j += steps) {
size_t match =
pimpl->converted.compare(i, pimpl->ptnlen(j, pimpl->convert_table),
&pimpl->convert_table[j]);
if (match == 0) {
}
if (match == 0) {
pimpl->replace(i, j);
--i;
break;
}
}
}
において、置換する変換候補の文字列の長さを考慮したくらい。
主な変更部分を抜粋すると、だいたい以下の通り。
for (int j = pimpl->max_length;
pimpl->convert_table[j] != 0x0; j += steps) {
int ptn_length = pimpl->ptnlen(j, pimpl->convert_table);
int compare_first = i - (ptn_length -1);
if (compare_first < 0) {
continue;
}
size_t match =
pimpl->converted.compare(compare_first, ptn_length,
&pimpl->convert_table[j]);
...
変換文字列候補の生成については、こんな感じかな?
いい感じ〜♪
実際のゲーム中で使うのが楽しみだ。