protected string OkonchanieSklonenia(string nac_ok,char firstIndex,RuPadezh padezh,RuRod rod,Odushevlennost odush,bool udarnoe,bool posl_is_ship,RuChislo chislo,bool odin_v_kruge,bool dva_v_kruge) { string ok = ""; switch(chislo) { case RuChislo.Edinstvennoe: switch(padezh) { case RuPadezh.Imenitelniy: ok = nac_ok; break; case RuPadezh.Roditelniy: switch(rod) { case RuRod.Muzhskoj: switch(firstIndex) { case '1': ok = "а"; break; case '2': ok = "я"; break; case '3': ok = "а"; break; case '4': ok = "а"; break; case '5': ok = "а"; break; case '6': ok = "и"; break; case '7': ok = "и"; break; case '8': ok = "и"; break; } break; case RuRod.Zhenskij: switch(firstIndex) { case '1': ok = "ы"; break; case '2': ok = "и"; break; case '3': ok = "и"; break; case '4': ok = "и"; break; case '5': ok = "ы"; break; case '6': ok = "и"; break; case '7': ok = "и"; break; case '8': ok = "и"; break; } break; case RuRod.Srednij: switch(firstIndex) { case '1': ok = "а"; break; case '2': ok = "я"; break; case '3': ok = "а"; break; case '4': ok = "а"; break; case '5': ok = "а"; break; case '6': ok = "я"; break; case '7': ok = "я"; break; case '8': ok = "и"; break; } break; } break; case RuPadezh.Vinitelniy: switch(rod) { case RuRod.Muzhskoj: if(odush == Odushevlennost.Odushevlennoe) { switch(firstIndex) { case '1': ok = "а"; break; case '2': ok = "я"; break; case '3': ok = "а"; break; case '4': ok = "а"; break; case '5': ok = "а"; break; case '6': ok = "и"; break; case '7': ok = "и"; break; case '8': ok = "ь"; break; } } else { ok = nac_ok; } break; case RuRod.Zhenskij: switch(firstIndex) { case '1': ok = "у"; break; case '2': ok = "ю"; break; case '3': ok = "у"; break; case '4': ok = "у"; break; case '5': ok = "у"; break; case '6': ok = "ю"; break; case '7': ok = "ю"; break; case '8': ok = "ь"; break; } break; case RuRod.Srednij: ok = nac_ok; if(firstIndex == '8') ok = "ь"; break; } break; case RuPadezh.Datelniy: switch(rod) { case RuRod.Muzhskoj: switch(firstIndex) { case '1': ok = "у"; break; case '2': ok = "ю"; break; case '3': ok = "у"; break; case '4': ok = "у"; break; case '5': ok = "у"; break; case '6': ok = "ю"; break; case '7': ok = "ю"; break; case '8': ok = "и"; break; } break; case RuRod.Zhenskij: switch(firstIndex) { case '1': ok = "е"; break; case '2': ok = "е"; break; case '3': ok = "е"; break; case '4': ok = "е"; break; case '5': ok = "е"; break; case '6': ok = "е"; break; case '7': ok = "е";// ? ударение (-и в безударном) if(!udarnoe) ok = "и"; break; case '8': ok = "и"; break; } break; case RuRod.Srednij: switch(firstIndex) { case '1': ok = "у"; break; case '2': ok = "ю"; break; case '3': ok = "у"; break; case '4': ok = "у"; break; case '5': ok = "у"; break; case '6': ok = "ю"; break; case '7': ok = "ю"; break; case '8': ok = "и"; break; } break; } break; case RuPadezh.Tvoritelniy: switch(rod) { case RuRod.Muzhskoj: switch(firstIndex) { case '1': ok = "ом"; break; case '2': ok = "ем"; break; case '3': ok = "ом"; break; case '4': ok = "ом"; if(!udarnoe) ok = "ем"; break; case '5': ok = "ом"; if(!udarnoe) ok = "ем"; break; case '6': ok = "ем"; break; case '7': ok = "ем"; break; case '8': ok = "ем"; break; } break; case RuRod.Zhenskij: switch(firstIndex) { case '1': ok = "ой"; break; case '2': ok = "ей"; break; case '3': ok = "ой"; // ? ударение break; case '4': ok = "ой"; // ? ударение break; case '5': ok = "ой"; // ? ударение break; case '6': ok = "ей"; break; case '7': ok = "ей"; break; case '8': ok = "ью"; break; } break; case RuRod.Srednij: switch(firstIndex) { case '1': ok = "ом"; break; case '2': ok = "ем"; break; case '3': ok = "ом";// ? ударение break; case '4': ok = "ом";// ? ударение break; case '5': ok = "ом";// ? ударение break; case '6': ok = "ем"; break; case '7': ok = "ем"; break; case '8': ok = "ем"; break; } break; } break; case RuPadezh.Predlozhniy: switch(rod) { case RuRod.Muzhskoj: switch(firstIndex) { case '1': ok = "е"; break; case '2': ok = "е"; break; case '3': ok = "е"; break; case '4': ok = "е"; break; case '5': ok = "е"; break; case '6': ok = "е"; break; case '7': ok = "е";// ? ударение в безуданом -и break; case '8': ok = "и"; break; } break; case RuRod.Zhenskij: switch(firstIndex) { case '1': ok = "е"; break; case '2': ok = "е"; break; case '3': ok = "е"; break; case '4': ok = "е"; break; case '5': ok = "е"; break; case '6': ok = "е"; break; case '7': ok = "е";// ? ударение в безударном -и if(!udarnoe) ok = "и"; break; case '8': ok = "и"; break; } break; case RuRod.Srednij: switch(firstIndex) { case '1': ok = "е"; break; case '2': ok = "е"; break; case '3': ok = "е"; break; case '4': ok = "е"; break; case '5': ok = "е"; break; case '6': ok = "е"; break; case '7': ok = "и";// ? ударение в безударном -и break; case '8': ok = "и"; break; } break; } break; } break; case RuChislo.Mnozhestvennoe: switch(padezh) { case RuPadezh.Imenitelniy: switch(rod) { case RuRod.Muzhskoj: switch(firstIndex) { case '1': ok = "ы"; if(odin_v_kruge) ok = "а"; break; case '2': ok = "и"; if(odin_v_kruge) ok = "я"; break; case '3': ok = "и"; break; case '4': ok = "и"; break; case '5': ok = "ы"; break; case '6': ok = "и"; break; case '7': ok = "и"; break; case '8': ok = "и"; break; } break; case RuRod.Zhenskij: switch(firstIndex) { case '1': ok = "ы"; if(odin_v_kruge) ok = "а"; break; case '2': ok = "и"; if(odin_v_kruge) ok = "я"; break; case '3': ok = "и"; break; case '4': ok = "и"; break; case '5': ok = "ы"; break; case '6': ok = "и"; break; case '7': ok = "и"; break; case '8': ok = "и"; break; } break; case RuRod.Srednij: switch(firstIndex) { case '1': ok = "а"; if(odin_v_kruge) ok = "ы"; break; case '2': ok = "я"; if(odin_v_kruge) ok = "и"; break; case '3': ok = "а"; if(odin_v_kruge) ok = "и"; break; case '4': ok = "а"; if(odin_v_kruge) ok = "и"; break; case '5': ok = "а"; if(odin_v_kruge) ok = "и"; break; case '6': ok = "я"; if(odin_v_kruge) ok = "и"; break; case '7': ok = "я"; if(odin_v_kruge) ok = "и"; break; case '8': ok = "я"; if(odin_v_kruge) ok = "и"; break; } break; } break; case RuPadezh.Roditelniy: switch(rod) { case RuRod.Muzhskoj: switch(firstIndex) { case '1': ok = "ов"; if(dva_v_kruge) ok = ""; break; case '2': ok = "ей"; if(dva_v_kruge) ok = "ь"; break; case '3': ok = "ов"; if(dva_v_kruge) ok = ""; break; case '4': ok = "ей"; if(dva_v_kruge) ok = ""; break; case '5': ok = "ов"; if(dva_v_kruge) ok = ""; break; case '6': ok = "ев"; if(dva_v_kruge) ok = "ь"; break; case '7': ok = "ев"; if(dva_v_kruge) ok = "ь"; break; case '8': ok = "ей"; break; } break; case RuRod.Zhenskij: switch(firstIndex) { case '1': ok = ""; if(dva_v_kruge) ok = "ей"; break; case '2': ok = "ей"; // ? ударение в безударном -ь if(dva_v_kruge) ok = "ей"; if(!udarnoe) ok = "ь"; break; case '3': ok = ""; if(dva_v_kruge) ok = "ей"; break; case '4': ok = "ей"; // ? ударение в безударном -ь if(dva_v_kruge) ok = "ей"; if(!udarnoe) ok = "ь"; break; case '5': ok = ""; if(dva_v_kruge) ok = "ей"; break; case '6': ok = "й"; if(dva_v_kruge) ok = "ей"; break; case '7': ok = "й"; if(dva_v_kruge) ok = "ей"; break; case '8': ok = "ей"; if(dva_v_kruge) ok = "ей"; break; } break; case RuRod.Srednij: switch(firstIndex) { case '1': ok = ""; if(dva_v_kruge) ok = "ов"; break; case '2': ok = "ей"; // ? ударение в безударном -ь if(dva_v_kruge) ok = "ев"; if(!udarnoe) ok = "ь"; break; case '3': ok = ""; if(dva_v_kruge) ok = "ов"; break; case '4': ok = "ей"; // ? ударение в безударном -ь if(dva_v_kruge) { ok = "ов"; // ? ударение if(!udarnoe) ok = "ев"; } if(!udarnoe) ok = "ь"; break; case '5': ok = ""; if(dva_v_kruge) { ok = "ов"; // ? ударение if(!udarnoe) ok = "ев"; } break; case '6': ok = "й"; if(dva_v_kruge) ok = "ев"; break; case '7': ok = "й"; if(dva_v_kruge) ok = "ев"; break; case '8': ok = "ей"; if(dva_v_kruge) ok = "ев"; break; } break; } break; case RuPadezh.Vinitelniy: if(odush == Odushevlennost.Odushevlennoe) { switch(rod) { case RuRod.Muzhskoj: switch(firstIndex) { case '1': ok = "ов"; if(dva_v_kruge) ok = ""; break; case '2': ok = "ей"; if(dva_v_kruge) ok = "ь"; break; case '3': ok = "ов"; if(dva_v_kruge) ok = ""; break; case '4': ok = "ей"; if(dva_v_kruge) ok = ""; break; case '5': ok = "ов"; if(dva_v_kruge) ok = ""; break; case '6': ok = "ев"; if(dva_v_kruge) ok = "ь"; break; case '7': ok = "ев"; if(dva_v_kruge) ok = "ь"; break; case '8': ok = "ей"; break; } break; case RuRod.Zhenskij: switch(firstIndex) { case '1': ok = ""; if(dva_v_kruge) ok = "ей"; break; case '2': ok = "ей"; // ? ударение в безударном -ь if(dva_v_kruge) ok = "ей"; if(!udarnoe) ok = "ь"; break; case '3': ok = ""; if(dva_v_kruge) ok = "ей"; break; case '4': ok = "ей"; // ? ударение в безударном -ь if(dva_v_kruge) ok = "ей"; if(!udarnoe) ok = "ь"; break; case '5': ok = ""; if(dva_v_kruge) ok = "ей"; break; case '6': ok = "й"; if(dva_v_kruge) ok = "ей"; break; case '7': ok = "й"; if(dva_v_kruge) ok = "ей"; break; case '8': ok = "ей"; if(dva_v_kruge) ok = "ей"; break; } break; case RuRod.Srednij: switch(firstIndex) { case '1': ok = ""; if(dva_v_kruge) ok = "ов"; break; case '2': ok = "ей"; // ? ударение в безударном -ь if(dva_v_kruge) ok = "ев"; if(!udarnoe) ok = "ь"; break; case '3': ok = ""; if(dva_v_kruge) ok = "ов"; break; case '4': ok = "ей"; // ? ударение в безударном -ь if(dva_v_kruge) { ok = "ов"; // ? ударение if(!udarnoe) ok = "ев"; } if(!udarnoe) ok = "ь"; break; case '5': ok = ""; if(dva_v_kruge) { ok = "ов"; // ? ударение if(!udarnoe) ok = "ев"; } break; case '6': ok = "й"; if(dva_v_kruge) ok = "ев"; break; case '7': ok = "й"; if(dva_v_kruge) ok = "ев"; break; case '8': ok = "ей"; if(dva_v_kruge) ok = "ев"; break; } break; } } else { switch(rod) { case RuRod.Muzhskoj: switch(firstIndex) { case '1': ok = "ы"; if(odin_v_kruge) ok = "а"; break; case '2': ok = "и"; if(odin_v_kruge) ok = "я"; break; case '3': ok = "и"; break; case '4': ok = "и"; break; case '5': ok = "ы"; break; case '6': ok = "и"; break; case '7': ok = "и"; break; case '8': ok = "и"; break; } break; case RuRod.Zhenskij: switch(firstIndex) { case '1': ok = "ы"; if(odin_v_kruge) ok = "а"; break; case '2': ok = "и"; if(odin_v_kruge) ok = "я"; break; case '3': ok = "и"; break; case '4': ok = "и"; break; case '5': ok = "ы"; break; case '6': ok = "и"; break; case '7': ok = "и"; break; case '8': ok = "и"; break; } break; case RuRod.Srednij: switch(firstIndex) { case '1': ok = "а"; if(odin_v_kruge) ok = "ы"; break; case '2': ok = "я"; if(odin_v_kruge) ok = "и"; break; case '3': ok = "а"; if(odin_v_kruge) ok = "и"; break; case '4': ok = "а"; if(odin_v_kruge) ok = "и"; break; case '5': ok = "а"; if(odin_v_kruge) ok = "и"; break; case '6': ok = "я"; if(odin_v_kruge) ok = "и"; break; case '7': ok = "я"; if(odin_v_kruge) ok = "и"; break; case '8': ok = "я"; if(odin_v_kruge) ok = "и"; break; } break; } } break; case RuPadezh.Datelniy: switch(firstIndex) { case '1': ok = "ам"; break; case '2': ok = "ям"; if(posl_is_ship) ok = "ам"; break; case '3': ok = "ам"; break; case '4': ok = "ам"; break; case '5': ok = "ам"; break; case '6': ok = "ям"; if(posl_is_ship) ok = "ам"; break; case '7': ok = "ям"; if(posl_is_ship) ok = "ам"; break; case '8': ok = "ям"; if(posl_is_ship) ok = "ам"; break; } break; case RuPadezh.Tvoritelniy: switch(firstIndex) { case '1': ok = "ами"; break; case '2': ok = "ями"; if(posl_is_ship) ok = "ами"; break; case '3': ok = "ами"; break; case '4': ok = "ами"; break; case '5': ok = "ами"; break; case '6': ok = "ями"; if(posl_is_ship) ok = "ами"; break; case '7': ok = "ями"; if(posl_is_ship) ok = "ами"; break; case '8': ok = "ями"; if(posl_is_ship) ok = "ами"; break; } break; case RuPadezh.Predlozhniy: switch(firstIndex) { case '1': ok = "ах"; break; case '2': ok = "ях"; if(posl_is_ship) ok = "ах"; break; case '3': ok = "ах"; break; case '4': ok = "ах"; break; case '5': ok = "ах"; break; case '6': ok = "ях"; if(posl_is_ship) ok = "ах"; break; case '7': ok = "ях"; if(posl_is_ship) ok = "ах"; break; case '8': ok = "ях"; if(posl_is_ship) ok = "ах"; break; } break; } break; } return ok; }
protected string BeglayaGlasnaya(string osnova,string ok,string ishodnaya,RuRod rod,char firstIndex,bool rod_padezh_mn_chisla, bool udarnoe) { string ruGlas = "ёуеаояиюэы"; string ship = "шжчщц"; string kgh = "кгх"; int mesto = osnova.Length-2; if(ishodnaya[ishodnaya.Length-1]=='й') mesto = osnova.Length-1; if(ruGlas.IndexOf(osnova[mesto])!=-1) { if(osnova+ok != ishodnaya && ok != "ью") { if(osnova[mesto] == 'о') osnova = osnova.Remove(mesto,1); else if(osnova[mesto] == 'е' || osnova[mesto] == 'ё') { if(ruGlas.IndexOf(osnova[mesto-1])!=-1) { osnova = osnova.Remove(mesto,1); osnova = osnova.Insert(mesto,"й"); } else if(rod == RuRod.Muzhskoj && firstIndex == '6') { osnova = osnova.Remove(mesto,1); osnova = osnova.Insert(mesto,"ь"); } else if(rod == RuRod.Muzhskoj && firstIndex == '3' && ruGlas.IndexOf(osnova[mesto-1])==-1 && ship.IndexOf(osnova[mesto-1])==-1 ) { osnova = osnova.Remove(mesto,1); osnova = osnova.Insert(mesto,"ь"); } else if(osnova[mesto-1] == 'л') { osnova = osnova.Remove(mesto,1); osnova = osnova.Insert(mesto,"ь"); } else osnova = osnova.Remove(mesto,1); } } } else { if(rod_padezh_mn_chisla) { if(rod != RuRod.Muzhskoj && firstIndex == '6') { osnova = osnova.Remove(osnova.Length-1,1); if(udarnoe) osnova = osnova.Insert(osnova.Length,"е"); else osnova = osnova.Insert(osnova.Length,"и"); } else if(rod != RuRod.Muzhskoj && (osnova[mesto] == 'ь' || osnova[mesto] == 'й')) { if(udarnoe && osnova[mesto+1] != 'ц') { osnova = osnova.Remove(mesto,1); osnova = osnova.Insert(mesto,"ё"); } else { osnova = osnova.Remove(mesto,1); osnova = osnova.Insert(mesto,"е"); } } else if(kgh.IndexOf(osnova[mesto]) != -1) { osnova = osnova.Insert(mesto+1,"о"); } else if(kgh.IndexOf(osnova[mesto+1]) != -1 && ship.IndexOf(osnova[mesto]) == -1) { osnova = osnova.Insert(mesto+1,"о"); } else if(udarnoe) { if(ship.IndexOf(osnova[mesto]) == -1) osnova = osnova.Insert(mesto+1,"ё"); else osnova = osnova.Insert(mesto+1,"о"); } else osnova = osnova.Insert(mesto+1,"е"); } } return osnova; }