- string::size_type from = pos, count = 1;
- if (pos > 1 && (rom[pos - 2] == 'h' || rom[pos - 2] == 'j')) {
- --from;
- count = (pos + 1 < rom.size() && rom[pos + 1] == 'y') ? 3 : 2;
+ string::size_type count = 1;
+
+ if (pos > 2) {
+ string const pred = rom.substr(pos - 3, 3);
+ if(pred == "chi" ||
+ pred == "shi" ||
+ pred == "dzi"
+ ) {
+ count = (pos + 1 < rom.size() && rom[pos + 1] == 'y') ? 3 : 2;
+ rom.erase(pos - 1, count);
+ continue;
+ }
+ }
+ if (pos > 1) {
+
+ string const pred = rom.substr(pos - 2, 2);
+ if(pred == "ki" ||
+ pred == "ni" ||
+ pred == "mi" ||
+ pred == "ri" ||
+ pred == "gi" ||
+ pred == "ji" ||
+ pred == "bi" ||
+ pred == "pi"
+ )
+ {
+ count = (pos + 1 < rom.size() && rom[pos + 1] == 'y') ? 3 : 2;
+ rom.erase(pos - 1, count);
+ continue;
+ }
+
+ if(pred == "fu" ||
+ pred == "de" ||
+ pred == "te" ||
+ pred == "vu")
+ {
+ count = (pos + 1 < rom.size() && rom[pos + 1] == 'y') ? 3 : 2;
+ rom.erase(pos - 1, count);
+ continue;
+ }