romaji["`"] = "`";
romaji["|"] = "|";
romaji["~"] = "~";
- romaji["ー"] = "-";
+ romaji["ー"] = "";
romaji["。"] = ".";
romaji["、"] = ",";
romaji["〜"] = "~";
romaji["−"] = "-";
romaji["―"] = "-";
romaji[" "] = " ";
+
+ romaji["ー"] = "\3";
}
void remove_quote_1(
if (trans == romaji.end()) {
rom += ch;
if (ch.size() > 1)
- cout << "Don't know how to translate '" << ch << "' in '" << kana << "' to romaji." << endl;
+ cout << "Don't know how to translate '" << ch << "' in '" << kana << "' to romaji.\n";
}
else
rom += trans->second;
string const pred = rom.substr(pos - 3, 3);
if(pred == "chi" ||
pred == "shi" ||
- pred == "dzi"
+ pred == "dzi" ||
+ pred == "tsu" ||
+ pred == "shi"
) {
remove_quote_1(pos, rom);
pos -= 2;
? 3
: 2);
pos -= 2;
+ continue;
}
else if(
pred == "fu" ||
{
remove_quote_1(pos, rom);
pos -= 2;
+ continue;
+ }
+ else if(
+ pred == "su" ||
+ pred == "zu" ||
+ pred == "te" ||
+ pred == "de" ||
+ pred == "ku" ||
+ pred == "gu" ||
+ pred == "mu"
+ )
+ {
+ rom[pos - 1] = 'w';
+ rom.erase(pos, 1);
+ --pos;
+ continue;
+ }
+ else if(
+ pred == "to" ||
+ pred == "do"
+ )
+ {
+ rom[pos - 1] = 'h';
+ rom.erase(pos, 1);
+ --pos;
+ continue;
}
}
+
+ if (pos > 0) {
+ char const pred = rom[pos - 1];
+
+ switch(pred)
+ {
+ case 'a':
+ case 'i':
+ case 'u':
+ case 'e':
+ case 'o':
+ rom.erase(pos, 1);
+ --pos;
+ break;
+ default:
+ cout << "Encountered a special character in " << kana << " but don't know what to do with it.\n";
+ }
+ }
else
{
- rom.erase(pos);
+ rom.erase(pos, 1);
--pos;
}
}
else if (rom[pos] == '\2')
{
- if(pos + 1 < rom.size())
+ // two tsu may follow each other, so just remove them
+ if(pos + 1 < rom.size() && rom[pos + 1] != '\2')
rom[pos] = rom[pos + 1];
else
{
- rom.erase(pos);
+ rom.erase(pos, 1);
--pos;
}
}
+ else if (rom[pos] == '\3')
+ {
+ if(pos == 0)
+ {
+ if(rom.size() == 1)
+ rom = "chouon";
+ else
+ {
+ cout << "ー is the first letter of " << kana << ". Don't know how to translate this.\n";
+ rom.erase(pos, 1);
+ --pos;
+ }
+ }
+ else
+ rom[pos] = rom[pos-1];
+ }
+
+ for (string::size_type pos = 0; pos < rom.size(); ++pos)
+ switch(rom[pos])
+ {
+ case '\1':
+ case '\2':
+ case '\3':
+ cout << "Failed to translate " << kana << '\n';
+ return;
+ }
}