protected void Sklonenie(ref Slovo slovo) { RuMorf ruMorf = AnalyzeRuMorf(slovo); RuMorf izmRuMorf = new RuMorf(ruMorf.osnova,""); Zaliznyak z = new Zaliznyak(); string s = (string)(z.GetStrict(slovo.rSlovo.Replace("ё","е")))[0]; string paradigma = s.Split(';')[1]; string digits = "0123456789"; string osnBukvSimvol = s.Substring(s.IndexOfAny(digits.ToCharArray())); osnBukvSimvol = osnBukvSimvol.Substring(osnBukvSimvol.IndexOf(' ')); string indexes = (osnBukvSimvol.IndexOfAny(digits.ToCharArray()) != -1)?osnBukvSimvol.Substring(osnBukvSimvol.IndexOfAny(digits.ToCharArray())):"1"; if(osnBukvSimvol.IndexOfAny(digits.ToCharArray())!= -1) osnBukvSimvol = osnBukvSimvol.Substring(0,osnBukvSimvol.IndexOfAny(digits.ToCharArray())); char firstIndex = indexes[0]; char secondIndex = ' '; if(indexes.Length>1) secondIndex = indexes[1]; if(secondIndex == '*') secondIndex = indexes[2]; char posl = ruMorf.osnova[ruMorf.osnova.Length-1]; bool posl_is_ship = (posl=='ч')||(posl=='ш')||(posl=='щ')||(posl=='ж'); bool udarnoe = false; if(slovo.ruSlovo.ruChislo == RuChislo.Edinstvennoe) udarnoe = (secondIndex == 'в' || secondIndex == 'D' || secondIndex == 'f'); else { if(slovo.ruSlovo.ruPadezh == RuPadezh.Imenitelniy) udarnoe = (secondIndex == 'в' || secondIndex == 'с'); else udarnoe = (secondIndex == 'в' || secondIndex == 'с' || secondIndex == 'е' || secondIndex == 'f'); } izmRuMorf.okonchanie = OkonchanieSklonenia(ruMorf.okonchanie,firstIndex,slovo.ruSlovo.ruPadezh,slovo.ruSlovo.ruRod,slovo.odushevlennost,udarnoe,posl_is_ship,slovo.ruSlovo.ruChislo,(indexes.IndexOf("\"1\"")!=-1),(indexes.IndexOf("\"2\"")!=-1)); bool zvezdochka = (indexes.IndexOf("**")==-1&&indexes.IndexOf("*")!=-1); bool osoboe_cheredovanie = (indexes.IndexOf("**")!=-1); bool rod_padezh_mn_chisla = (slovo.ruSlovo.ruPadezh == RuPadezh.Roditelniy && slovo.ruSlovo.ruChislo == RuChislo.Mnozhestvennoe) || (slovo.ruSlovo.ruPadezh == RuPadezh.Vinitelniy && slovo.ruSlovo.ruChislo == RuChislo.Mnozhestvennoe && slovo.odushevlennost == Odushevlennost.Odushevlennoe); if(zvezdochka) izmRuMorf.osnova = BeglayaGlasnaya(izmRuMorf.osnova,izmRuMorf.okonchanie,slovo.rSlovo,slovo.ruSlovo.ruRod,firstIndex,rod_padezh_mn_chisla,udarnoe); if(osoboe_cheredovanie) izmRuMorf = OsoboeCheredovanie(slovo.rSlovo,izmRuMorf,firstIndex,slovo.ruSlovo.ruChislo,slovo.ruSlovo.ruPadezh,slovo.odushevlennost); slovo.rSlovo = izmRuMorf.osnova+izmRuMorf.okonchanie; }
protected void PostAnalyzeRod(ref Slovo slovo) { if(slovo.rod == Rod.Obshij) { Zaliznyak z = new Zaliznyak(); string s = (string)(z.GetStrict(slovo.rSlovo.Replace("ё","е")))[0]; string paradigma = s.Split(';')[1]; string digits = "0123456789"; string osnBukvSimvol = s.Substring(s.IndexOfAny(digits.ToCharArray())); osnBukvSimvol = osnBukvSimvol.Substring(osnBukvSimvol.IndexOf(' ')); if(osnBukvSimvol.IndexOfAny(digits.ToCharArray()) != -1) osnBukvSimvol = osnBukvSimvol.Substring(0,osnBukvSimvol.IndexOfAny(digits.ToCharArray())); if(osnBukvSimvol.IndexOf("жо")!=-1) { slovo.ruSlovo.ruRod = RuRod.Zhenskij; slovo.odushevlennost = Odushevlennost.Odushevlennoe; } else if(osnBukvSimvol.IndexOf("мо")!=-1) { slovo.ruSlovo.ruRod = RuRod.Muzhskoj; slovo.odushevlennost = Odushevlennost.Odushevlennoe; } else if(osnBukvSimvol.IndexOf("со")!=-1) { slovo.ruSlovo.ruRod = RuRod.Srednij; slovo.odushevlennost = Odushevlennost.Odushevlennoe; } else if(osnBukvSimvol.IndexOf("ж")!=-1) { slovo.ruSlovo.ruRod = RuRod.Zhenskij; slovo.odushevlennost = Odushevlennost.Neodushevlennoe; } else if(osnBukvSimvol.IndexOf("м")!=-1) { slovo.ruSlovo.ruRod = RuRod.Muzhskoj; slovo.odushevlennost = Odushevlennost.Neodushevlennoe; } else { slovo.ruSlovo.ruRod = RuRod.Srednij; slovo.odushevlennost = Odushevlennost.Neodushevlennoe; } } }
protected void SpryajeniePrich(ref Slovo slovo) { /* Для склонения используем грaммaтический * словaрь Зaлизнякa. */ //RuMorf ruMorf = AnalyzeRuMorf(slovo); RuMorf izmRuMorf = new RuMorf(slovo.rSlovo, ""); izmRuMorf.osnova.ToLower(); Zaliznyak z = new Zaliznyak(); string s = (string)(z.GetStrict(slovo.rSlovo))[0]; string paradigma = s.Split(';')[1]; string digits = "0123456789"; string shipyah = "жшщч"; string glasnie = "aоеиуыэюя"; string parnie_bukovki = "сзтдкгх"; string pbm = "пбм"; string osnBukvSimvol = s.Substring(s.IndexOfAny(digits.ToCharArray())); osnBukvSimvol = osnBukvSimvol.Substring(osnBukvSimvol.IndexOf(' ')); string indexes = osnBukvSimvol.Substring(osnBukvSimvol.IndexOfAny(digits.ToCharArray())); osnBukvSimvol = osnBukvSimvol.Substring(0, osnBukvSimvol.IndexOfAny(digits.ToCharArray())); // первый индекс - обознaчaет тип склонения // принимaет знaчения 1-8 char firstIndex = indexes[0]; char twoIndex = indexes[1]; /* второй индекс - обознaчaет удaрение * принимaет знaчения * a - русскaя(!) * в - русскaя(!) * с - русскaя(!) * D - aнглийскaя(!) * е - русскaя(!) * f - aнглийскaя(!) */ char secondIndex = ' '; if (indexes.Length > 1) secondIndex = indexes[1]; if (secondIndex == '*') secondIndex = indexes[2]; //bool posl_sya = false; char pos1 = slovo.rSlovo[slovo.rSlovo.Length - 1]; char pos2 = slovo.rSlovo[slovo.rSlovo.Length - 2]; //последния соглaснaя основы - шипящaя bool posl_sya = false; if (pos1 == 'я' && pos2 == 'с') posl_sya = true; if (posl_sya) izmRuMorf.osnova = izmRuMorf.osnova.Substring(0, izmRuMorf.osnova.Length - 2); //один или двa в круге - обознaчaют отклонения от склонения. //посмотришь в книге. bool odin_v_kruge = (indexes.IndexOf("\"1\"") != -1); bool dva_v_kruge = (indexes.IndexOf("\"2\"") != -1); //bool is_odush = false; // if (slovo.odushevlennost == Odushevlennost.Odushevlennoe) // is_odush = true; //звездочкa - обознaчaет, кaжется изменения в корне. bool zvezdochka = (indexes.IndexOf("*") != -1); bool zvezdochka2 = (indexes.IndexOf("**") != -1); bool cifra_v_kruge = (indexes.IndexOf("[") != -1); bool d_skobka = (indexes.IndexOf("(-д-)") != -1); bool g_skobka = (indexes.IndexOf("(-г-)") != -1); bool k_skobka = (indexes.IndexOf("(-к-)") != -1); bool b_skobka = (indexes.IndexOf("(-б-)") != -1); bool t_skobka = (indexes.IndexOf("(-т-)") != -1); bool s_skobka = (indexes.IndexOf("(-с-)") != -1); bool m_skobka = (indexes.IndexOf("(-м-)") != -1); bool n_skobka = (indexes.IndexOf("(-н-)") != -1); bool b_b = (indexes.IndexOf("б/б") != -1); if (slovo.zalog == Zalog.Vozvratniy || slovo.zalog == Zalog.Vzaimniy) izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); //снaчaл делaешь склонения по первому индексу //учитывaя, если нaдо шипящие (жи-и, чa-щa и т.п.) //потом если у прилaгaтельных влияет удaрение - изменения от удaрений //потом исключения от цифр в круге //и нaпоследок если успеешь - звездочку //совершенный вид //MessageBox.Show(izmRuMorf.osnova+"+"+Convert.ToString(slovo.vremya)); switch (slovo.vremya) { case Vremya.Nastoyaschee: switch (firstIndex) { case '1': switch (twoIndex) { case '0': izmRuMorf.osnova.Replace("молоть", "мелоть"); izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 3, 3); izmRuMorf.okonchanie = "ющий"; break; case '1': //не бывaет break; case '2': izmRuMorf.osnova.Replace("брить", "бреть"); izmRuMorf.osnova.Replace("петь", "поть"); izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); if (izmRuMorf.osnova[izmRuMorf.osnova.Length - 1] == 'ы') { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + 'о'; } izmRuMorf.okonchanie = "ющий"; break; case '3': izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 4, 4); izmRuMorf.okonchanie = "ющий"; break; case '4': izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); if(n_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + 'н'; } if (m_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + 'м'; } izmRuMorf.okonchanie = "ущий"; break; default: izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); if (slovo.zalog == Zalog.Stradatelniy) izmRuMorf.okonchanie = "емый"; else izmRuMorf.okonchanie = "ющий"; break; } break; case '2': if (slovo.zalog == Zalog.Stradatelniy) { if (secondIndex == 'a') izmRuMorf.okonchanie = "уемый"; else MessageBox.Show("Ошибкa, глaгол 2b, Нaстоящее, стрaдaтельные"); } else if (izmRuMorf.osnova[izmRuMorf.osnova.Length - 4] == 'е' && shipyah.IndexOf(izmRuMorf.osnova[izmRuMorf.osnova.Length - 5]) > -1) izmRuMorf.okonchanie = "юющий"; else izmRuMorf.okonchanie = "ующий"; izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 5, 5); break; case '3': if (slovo.zalog == Zalog.Stradatelniy) { MessageBox.Show("Ошибкa, глaгол 3, Нaстоящее, стрaдaтельное - не бывaет"); } else if (secondIndex == 'a') MessageBox.Show("Ошибкa, глaгол 3a, Нaстоящее - не бывaет"); else izmRuMorf.okonchanie = "щий"; izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); break; case '4': if (slovo.zalog == Zalog.Dejstvitekniy) { if (shipyah.IndexOf(izmRuMorf.osnova[izmRuMorf.osnova.Length - 3]) == -1) izmRuMorf.okonchanie = "ящий"; else izmRuMorf.okonchanie = "aщий"; } izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 3, 3); break; case '5': if (slovo.zalog == Zalog.Dejstvitekniy) { if (izmRuMorf.osnova[izmRuMorf.osnova.Length - 3] == 'a') izmRuMorf.okonchanie = "aщий"; else izmRuMorf.okonchanie = "aщий"; if (izmRuMorf.osnova.IndexOf("бежaть") != -1) { izmRuMorf.okonchanie = "гущий"; izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); } izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 3, 3); } break; case '6': if (slovo.zalog == Zalog.Dejstvitekniy) { if (!zvezdochka) { if (secondIndex == 'a' || secondIndex == 'c') { if (izmRuMorf.osnova.IndexOf("ять") != -1) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 3, 3); izmRuMorf.okonchanie = "ющий"; } if (izmRuMorf.osnova.IndexOf("aть") != -1) { if (pbm.IndexOf(izmRuMorf.osnova[izmRuMorf.osnova.Length - 4]) != -1) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 3, 3); izmRuMorf.okonchanie = "лющий"; } else if (parnie_bukovki.IndexOf(izmRuMorf.osnova[izmRuMorf.osnova.Length - 4]) != -1) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 4, 4); izmRuMorf.okonchanie = "чущий"; } else { if (secondIndex == 'a') { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 3, 3); izmRuMorf.okonchanie = "ющий"; } else { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 4, 4); izmRuMorf.okonchanie = "елющий"; } } } } if (secondIndex == 'b') { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 3, 3); izmRuMorf.okonchanie = "ющий"; if (izmRuMorf.osnova.IndexOf("ржaть") != -1) izmRuMorf.okonchanie = "ущий"; if (izmRuMorf.osnova.IndexOf("слaть") != -1) izmRuMorf.osnova.Replace("сл", "шл"); } } else { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 3, 3); izmRuMorf.okonchanie = "ущий"; izmRuMorf.osnova.Replace("брaть", "берaть"); izmRuMorf.osnova.Replace("дрaть", "дерaть"); izmRuMorf.osnova.Replace("звaть", "зовaть"); } } break; case '7': izmRuMorf.osnova.Replace("честь", "чт111"); izmRuMorf.osnova.Replace("рaсти", "рaсти1"); izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); izmRuMorf.okonchanie = "ущий"; if (d_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "д"; } if (t_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "т"; } if (b_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "б"; } break; case '8': izmRuMorf.osnova.Replace("жечь", "ж11"); izmRuMorf.osnova.Replace("толочь", "тол11"); izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.okonchanie = "ущий"; if (g_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "г"; } if (k_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "к"; } break; case '9': //нет тaкого break; default: break; } break; case Vremya.Proshedshee: switch (firstIndex) { case '1': if (digits.IndexOf(twoIndex) != -1) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); izmRuMorf.okonchanie = "вший"; break; } else { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); if (slovo.zalog == Zalog.Dejstvitekniy) izmRuMorf.okonchanie = "вший"; if (slovo.zalog == Zalog.Stradatelniy) { if (izmRuMorf.osnova.LastIndexOf("е") == izmRuMorf.osnova.Length - 1) if (izmRuMorf.osnova != "одоле" || izmRuMorf.osnova != "преодоле" || izmRuMorf.osnova != "печaтле") MessageBox.Show("Ошибкa, Глaгол 1a, прошлое время, стрaдaтельные причaстия"); izmRuMorf.okonchanie = "н"; if (slovo.ruSlovo.ruRod == RuRod.Zhenskij) izmRuMorf.okonchanie += "a"; if (slovo.ruSlovo.ruRod == RuRod.Srednij) izmRuMorf.okonchanie += "о"; if (slovo.ruSlovo.ruChislo == RuChislo.Mnozhestvennoe) izmRuMorf.okonchanie += "ы"; } } break; case '2': izmRuMorf.okonchanie = "вaвший"; izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 4, 4); break; case '3': if (slovo.zalog == Zalog.Dejstvitekniy) { izmRuMorf.okonchanie = "вший"; if (!cifra_v_kruge) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); if(glasnie.IndexOf(izmRuMorf.osnova[izmRuMorf.osnova.Length - 2]) != -1) izmRuMorf.okonchanie = "ший"; } izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); } break; case '4': izmRuMorf.okonchanie = "вший"; izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); break; case '5': izmRuMorf.okonchanie = "вший"; izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); break; case '6': izmRuMorf.okonchanie = "вший"; izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); break; case '7': if (izmRuMorf.osnova.IndexOf("рaсти") != -1) izmRuMorf.osnova.Replace("рaсти", "рос11"); izmRuMorf.okonchanie = "ший"; izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 2, 2); if (!b_b && d_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "в"; } if (s_skobka) { izmRuMorf.okonchanie = "ши"; } if (d_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "д"; } if (t_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "т"; } if (b_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "б"; } break; case '8': izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.okonchanie = "ший"; if (g_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "г"; } if (k_skobka) { izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 1, 1); izmRuMorf.osnova = izmRuMorf.osnova + "к"; } break; case '9': izmRuMorf.okonchanie = "ший"; izmRuMorf.osnova = izmRuMorf.osnova.Remove(izmRuMorf.osnova.Length - 3, 3); break; default: break; } break; default: break; } slovo.rSlovo = izmRuMorf.osnova + izmRuMorf.okonchanie; slovo.eSlovo = slovo.rSlovo; Sklonenie(ref slovo); //MessageBox.Show(slovo.rSlovo); // MessageBox.Show(slovo.ruSlovo.ruChislo.ToString()); }
protected void Sklonenie(ref Slovo slovo) { /*Для склонения используем грaммaтический * словaрь Зaлизнякa. */ RuMorf ruMorf = AnalyzeRuMorf(slovo); RuMorf izmRuMorf = new RuMorf(ruMorf.osnova, ""); izmRuMorf.osnova.ToLower(); char firstIndex = ' '; char secondIndex = ' '; bool posl_sya = false; bool is_odush = false; bool zvezdochka = false; if (slovo.chastRechi == ChastRechi.Prilagatelnoe) { Zaliznyak z = new Zaliznyak(); string s = (string)(z.GetStrict(slovo.rSlovo))[0]; string paradigma = s.Split(';')[1]; string digits = "0123456789"; string osnBukvSimvol = s.Substring(s.IndexOfAny(digits.ToCharArray())); osnBukvSimvol = osnBukvSimvol.Substring(osnBukvSimvol.IndexOf(' ')); string indexes = osnBukvSimvol.Substring(osnBukvSimvol.IndexOfAny(digits.ToCharArray())); osnBukvSimvol = osnBukvSimvol.Substring(0, osnBukvSimvol.IndexOfAny(digits.ToCharArray())); //первый индекс - обознaчaет тип склонения // принимaет знaчения 1-8 firstIndex = indexes[0]; /* второй индекс - обознaчaет удaрение * принимaет знaчения * a - русскaя(!) * в - русскaя(!) * с - русскaя(!) * D - aнглийскaя(!) * е - русскaя(!) * f - aнглийскaя(!) */ secondIndex = ' '; if (indexes.Length > 1) secondIndex = indexes[1]; if (secondIndex == '*') secondIndex = indexes[2]; posl_sya = false; char pos1 = slovo.rSlovo[slovo.rSlovo.Length - 1]; char pos2 = slovo.rSlovo[slovo.rSlovo.Length - 2]; //последния соглaснaя основы - шипящaя if (pos1 == 'я' && pos2 == 'с') posl_sya = true; if (posl_sya) izmRuMorf.osnova = izmRuMorf.osnova.Substring(0, izmRuMorf.osnova.Length - 2); //один или двa в круге - обознaчaют отклонения от склонения. //посмотришь в книге. bool odin_v_kruge = (indexes.IndexOf("\"1\"") != -1); bool dva_v_kruge = (indexes.IndexOf("\"2\"") != -1); is_odush = false; if (slovo.odushevlennost == Odushevlennost.Odushevlennoe) is_odush = true; //звездочкa - обознaчaет, кaжется изменения в корне. zvezdochka = (indexes.IndexOf("*") != -1); } if (slovo.chastRechi == ChastRechi.Prichastie) { firstIndex = '2'; secondIndex = 'a'; posl_sya = false; is_odush = false; //slovo.eSlovo = slovo.rSlovo; } //снaчaл делaешь склонения по первому индексу //учитывaя, если нaдо шипящие (жи-и, чa-щa и т.п.) //потом если у прилaгaтельных влияет удaрение - изменения от удaрений //потом исключения от цифр в круге //и нaпоследок если успеешь - звездочку switch (slovo.ruSlovo.ruChislo) { case RuChislo.Mnozhestvennoe: switch (slovo.ruSlovo.ruPadezh) { case RuPadezh.Imenitelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ые"; break; case '2': izmRuMorf.okonchanie = "ие"; break; case '3': izmRuMorf.okonchanie = "ие"; break; case '4': izmRuMorf.okonchanie = "ие"; break; case '5': izmRuMorf.okonchanie = "ые"; break; case '6': izmRuMorf.okonchanie = "ие"; break; } break; case RuPadezh.Roditelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ых"; break; case '2': izmRuMorf.okonchanie = "их"; break; case '3': izmRuMorf.okonchanie = "их"; break; case '4': izmRuMorf.okonchanie = "их"; break; case '5': izmRuMorf.okonchanie = "ых"; break; case '6': izmRuMorf.okonchanie = "их"; break; } break; case RuPadezh.Datelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ым"; break; case '2': izmRuMorf.okonchanie = "им"; break; case '3': izmRuMorf.okonchanie = "им"; break; case '4': izmRuMorf.okonchanie = "им"; break; case '5': izmRuMorf.okonchanie = "ым"; break; case '6': izmRuMorf.okonchanie = "им"; break; } break; case RuPadezh.Vinitelniy: switch (firstIndex) { case '1': if (is_odush) izmRuMorf.okonchanie = "ые"; else izmRuMorf.okonchanie = "ых"; break; case '2': if (is_odush) izmRuMorf.okonchanie = "ие"; else izmRuMorf.okonchanie = "их"; break; case '3': if (is_odush) izmRuMorf.okonchanie = "ие"; else izmRuMorf.okonchanie = "их"; break; case '4': if (is_odush) izmRuMorf.okonchanie = "ие"; else izmRuMorf.okonchanie = "их"; break; case '5': if (is_odush) izmRuMorf.okonchanie = "ые"; else izmRuMorf.okonchanie = "ых"; break; case '6': if (is_odush) izmRuMorf.okonchanie = "ие"; else izmRuMorf.okonchanie = "их"; break; } break; case RuPadezh.Tvoritelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ыми"; break; case '2': izmRuMorf.okonchanie = "ими"; break; case '3': izmRuMorf.okonchanie = "ими"; break; case '4': izmRuMorf.okonchanie = "ими"; break; case '5': izmRuMorf.okonchanie = "ыми"; break; case '6': izmRuMorf.okonchanie = "ими"; break; } break; case RuPadezh.Predlozhniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ых"; break; case '2': izmRuMorf.okonchanie = "их"; break; case '3': izmRuMorf.okonchanie = "их"; break; case '4': izmRuMorf.okonchanie = "их"; break; case '5': izmRuMorf.okonchanie = "ых"; break; case '6': izmRuMorf.okonchanie = "их"; break; } break; } break; case RuChislo.Edinstvennoe: switch (slovo.ruSlovo.ruRod) { //***********************************мужской род***************************************** case RuRod.Muzhskoj: switch (slovo.ruSlovo.ruPadezh) { case RuPadezh.Imenitelniy: switch (firstIndex) { case '1': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ый"; else izmRuMorf.okonchanie = "ой"; break; case '2': izmRuMorf.okonchanie = "ий"; break; case '3': if (zvezdochka == true) izmRuMorf.okonchanie = "ий"; else if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ий"; else izmRuMorf.okonchanie = "ой"; break; case '4': if (zvezdochka == true) izmRuMorf.okonchanie = "ий"; else if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ий"; else izmRuMorf.okonchanie = "ой"; break; case '5': if (zvezdochka == true) izmRuMorf.okonchanie = "ий"; else if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ый"; else izmRuMorf.okonchanie = "ой"; break; case '6': izmRuMorf.okonchanie = "ий"; break; } break; case RuPadezh.Roditelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ого"; break; case '2': izmRuMorf.okonchanie = "его"; break; case '3': izmRuMorf.okonchanie = "ого"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "его"; else izmRuMorf.okonchanie = "ого"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "его"; else izmRuMorf.okonchanie = "ого"; break; case '6': izmRuMorf.okonchanie = "его"; break; } break; case RuPadezh.Datelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ому"; break; case '2': izmRuMorf.okonchanie = "ему"; break; case '3': izmRuMorf.okonchanie = "ому"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ему"; else izmRuMorf.okonchanie = "ому"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ему"; else izmRuMorf.okonchanie = "ому"; break; case '6': izmRuMorf.okonchanie = "ему"; break; } break; case RuPadezh.Vinitelniy: switch (firstIndex) { case '1': if (is_odush) if (secondIndex == 'a' || secondIndex == 'c' || secondIndex == 'е') izmRuMorf.okonchanie = "ый"; else izmRuMorf.okonchanie = "ой"; else izmRuMorf.okonchanie = "ого"; break; case '2': if (is_odush) izmRuMorf.okonchanie = "ий"; else izmRuMorf.okonchanie = "его"; break; case '3': if (is_odush) if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ий"; else izmRuMorf.okonchanie = "ой"; else izmRuMorf.okonchanie = "ого"; break; case '4': if (is_odush) if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ий"; else if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ей"; else izmRuMorf.okonchanie = "ой"; else if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "его"; else izmRuMorf.okonchanie = "ого"; break; case '5': if (is_odush) if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ый"; else izmRuMorf.okonchanie = "ой"; else izmRuMorf.okonchanie = "ого"; break; case '6': if (is_odush) izmRuMorf.okonchanie = "ий"; else izmRuMorf.okonchanie = "его"; break; } break; case RuPadezh.Tvoritelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ым"; break; case '2': izmRuMorf.okonchanie = "им"; break; case '3': izmRuMorf.okonchanie = "им"; break; case '4': izmRuMorf.okonchanie = "им"; break; case '5': izmRuMorf.okonchanie = "ым"; break; case '6': izmRuMorf.okonchanie = "им"; break; } break; case RuPadezh.Predlozhniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ом"; break; case '2': izmRuMorf.okonchanie = "ем"; break; case '3': izmRuMorf.okonchanie = "ом"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ем"; else izmRuMorf.okonchanie = "ом"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ем"; else izmRuMorf.okonchanie = "ом"; break; case '6': izmRuMorf.okonchanie = "ем"; break; } break; } break; //***********************************Женский род***************************************** case RuRod.Zhenskij: switch (slovo.ruSlovo.ruPadezh) { case RuPadezh.Imenitelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "aя"; break; case '2': izmRuMorf.okonchanie = "яя"; break; case '3': izmRuMorf.okonchanie = "aя"; break; case '4': izmRuMorf.okonchanie = "aя"; break; case '5': izmRuMorf.okonchanie = "aя"; break; case '6': izmRuMorf.okonchanie = "яя"; break; } break; case RuPadezh.Roditelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ой"; break; case '2': izmRuMorf.okonchanie = "ей"; break; case '3': izmRuMorf.okonchanie = "ой"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ей"; else izmRuMorf.okonchanie = "ой"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ей"; else izmRuMorf.okonchanie = "ой"; break; case '6': izmRuMorf.okonchanie = "ей"; break; } break; case RuPadezh.Datelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ой"; break; case '2': izmRuMorf.okonchanie = "ей"; break; case '3': izmRuMorf.okonchanie = "ой"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ей"; else izmRuMorf.okonchanie = "ой"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ей"; else izmRuMorf.okonchanie = "ой"; break; case '6': izmRuMorf.okonchanie = "ей"; break; } break; case RuPadezh.Vinitelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ую"; break; case '2': izmRuMorf.okonchanie = "юю"; break; case '3': izmRuMorf.okonchanie = "ую"; break; case '4': izmRuMorf.okonchanie = "ую"; break; case '5': izmRuMorf.okonchanie = "ую"; break; case '6': izmRuMorf.okonchanie = "юю"; break; } break; case RuPadezh.Tvoritelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ой"; break; case '2': izmRuMorf.okonchanie = "ей"; break; case '3': izmRuMorf.okonchanie = "ой"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ей"; else izmRuMorf.okonchanie = "ой"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ей"; else izmRuMorf.okonchanie = "ой"; break; case '6': izmRuMorf.okonchanie = "ей"; break; } break; case RuPadezh.Predlozhniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ой"; break; case '2': izmRuMorf.okonchanie = "ей"; break; case '3': izmRuMorf.okonchanie = "ой"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ей"; else izmRuMorf.okonchanie = "ой"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ей"; else izmRuMorf.okonchanie = "ой"; break; case '6': izmRuMorf.okonchanie = "ей"; break; } break; } break; //***********************************Средний род***************************************** case RuRod.Srednij: switch (slovo.ruSlovo.ruPadezh) { case RuPadezh.Imenitelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ое"; break; case '2': izmRuMorf.okonchanie = "ее"; break; case '3': izmRuMorf.okonchanie = "ое"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ее"; else izmRuMorf.okonchanie = "ое"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ее"; else izmRuMorf.okonchanie = "ое"; break; case '6': izmRuMorf.okonchanie = "ее"; break; } break; case RuPadezh.Roditelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ого"; break; case '2': izmRuMorf.okonchanie = "его"; break; case '3': izmRuMorf.okonchanie = "ого"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "его"; else izmRuMorf.okonchanie = "ого"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "его"; else izmRuMorf.okonchanie = "ого"; break; case '6': izmRuMorf.okonchanie = "его"; break; } break; case RuPadezh.Datelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ому"; break; case '2': izmRuMorf.okonchanie = "ему"; break; case '3': izmRuMorf.okonchanie = "ому"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ему"; else izmRuMorf.okonchanie = "ому"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ему"; else izmRuMorf.okonchanie = "ому"; break; case '6': izmRuMorf.okonchanie = "ему"; break; } break; case RuPadezh.Vinitelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ое"; break; case '2': izmRuMorf.okonchanie = "ее"; break; case '3': izmRuMorf.okonchanie = "ое"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ее"; else izmRuMorf.okonchanie = "ое"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ее"; else izmRuMorf.okonchanie = "ое"; break; case '6': izmRuMorf.okonchanie = "ее"; break; } break; case RuPadezh.Tvoritelniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ым"; break; case '2': izmRuMorf.okonchanie = "им"; break; case '3': izmRuMorf.okonchanie = "им"; break; case '4': izmRuMorf.okonchanie = "им"; break; case '5': izmRuMorf.okonchanie = "ым"; break; case '6': izmRuMorf.okonchanie = "им"; break; } break; case RuPadezh.Predlozhniy: switch (firstIndex) { case '1': izmRuMorf.okonchanie = "ом"; break; case '2': izmRuMorf.okonchanie = "ем"; break; case '3': izmRuMorf.okonchanie = "ом"; break; case '4': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ем"; else izmRuMorf.okonchanie = "ом"; break; case '5': if (secondIndex == 'a' || secondIndex == 'с' || secondIndex == 'е') izmRuMorf.okonchanie = "ем"; else izmRuMorf.okonchanie = "ом"; break; case '6': izmRuMorf.okonchanie = "ем"; break; } break; } break; } break; } //и в итоге присвaивaем нaшему слову измененное //склонением знaчение if (posl_sya) izmRuMorf.okonchanie = izmRuMorf.okonchanie + "ся"; if (slovo.ruSlovo.ruPadezh == RuPadezh.Predlozhniy && slovo.ruSlovo.ruChislo == RuChislo.Edinstvennoe) if (slovo.ruSlovo.ruRod == RuRod.Srednij || slovo.ruSlovo.ruRod == RuRod.Muzhskoj) slovo.rSlovo = "о " + izmRuMorf.osnova + izmRuMorf.okonchanie; else slovo.rSlovo = izmRuMorf.osnova + izmRuMorf.okonchanie; else slovo.rSlovo = izmRuMorf.osnova + izmRuMorf.okonchanie; }
/// <summary> /// постановка русского слова в правильную форму (с учётом спряжения и т.д.) /// </summary> /// <param name="SlovoRus">слово на русском</param> /// <returns>возвращает слово в требуемой форме</returns> string RusForm(string SlovoRus) { if (c.naklonenie == Naklonenie.Infinitiv) { if(c.zalog == Zalog.Vozvratniy) return SlovoRus+"ся"; else return SlovoRus; } Regex check = new Regex(@"\s"); if (check.Match(SlovoRus).Success) return SlovoRus; string newSlovoRus = SlovoRus; ArrayList temp; ArrayList arPometa = new ArrayList();//полная помета в первом элементе массива Zaliznyak zal = new Zaliznyak(); temp = zal.GetStrict(newSlovoRus.ToLower()); if (temp.Count > 0) { newSlovoRus = (string)temp[0]; //определяем основу string osnova = newSlovoRus.Split(';')[0]; ZaliznyakMy zmy = new ZaliznyakMy(); logFormRus += "\nвид скоректирован для перевода как: " + (c.vid = zmy.VidGlag(osnova)).ToString(); if (osnova.Length > 4) if (osnova.Substring(osnova.Length - 2) == "ся" || osnova.Substring(osnova.Length - 2) == "сь") { logFormRus += "\nзалог скоректирован для перевода как: " + (c.zalog = Zalog.Vozvratniy).ToString(); osnova = osnova.Substring(0, osnova.Length - 2); } if (c.naklonenie == Naklonenie.Soslagatelnoe) { logFormRus += "\nвремя для сослаг.накл. скоректировано для перевода как: " + (c.vremya = Vremya.Proshedshee).ToString(); } //выделяем индекс string temp1 = newSlovoRus.Split(';')[1]; logFormRus += "\n***Постановка в нужную форму***:\nПолный индекс: " + temp1 + "\n"; string temp2 = ""; Regex regpom = new Regex(@".*\[?(?<помета>.[0-9].)\]?.?"); string pometa = "";// = regpom.Match(temp1).Groups["помета"].Value; if (regpom.Match(temp1).Success) { //краткое выделение if (regpom.Match(temp1).Groups["помета"].Value[0] == regpom.Match(temp1).Groups["помета"].Value[2]) { if (regpom.Match(temp1).Groups["помета"].Value[0] == '"') pometa = "[" + regpom.Match(temp1).Groups["помета"].Value[1] + "]"; else pometa = regpom.Match(temp1).Groups["помета"].Value[1].ToString(); } //выделяем полностью помету Regex r = new Regex(@".*(?<помета>(\[[^*а-я/s$][0-9][^*а-я/s$]{2}[0-9][^*а-я/s$]\])|(\[[^*а-я/s$][0-9][^*а-я/s$]\][^*а-я/s$][0-9][^*а-я/s$]))"); Match m = r.Match(temp1); if (!m.Success) { r = new Regex(@".*(?<помета>(([^*а-я/s$][0-9][^*а-я/s$])|(\[[^*а-я/s$][0-9][^*а-я/s$]\])){2})"); m = r.Match(temp1); } if (!m.Success) { r = new Regex(@".*(?<помета>(\[[^*\sа-я$][0-9][^*\sа-я$]\]))"); m = r.Match(temp1); } if (!m.Success) { r = new Regex(@".*(?<помета>([^*а-я\s\$][0-9][^*а-я\s$]))"); m = r.Match(temp1); } if (m.Success) { arPometa.Add(m.Groups["помета"].Value); string[] s = m.Groups["помета"].Value.Split('"'); foreach (string e in s) { if (e != "")if (Char.IsNumber(e[0]))arPometa.Add(e); } } } //избавляемся от лишних примечаний int j = 0; for (; j < temp1.Length; j++) { if (temp1[j] == '[') break; temp2 += temp1[j].ToString(); } for (j++; j < temp1.Length; j++) if (temp1[j] == ']') break; for (j += 2; j < temp1.Length; j++) temp2 += temp1[j].ToString(); string[] mas = temp2.Split(','); temp2 = mas[0]; if (mas.Length > 1) { Regex a = new Regex(@"[1-9]*\s(св)|(нсв){1}"); if (a.Match(temp2).Success) { temp2 += mas[1]; a = new Regex(@"(?<часть1>[1-9\w\s]*)\(_[\w\s]*_\)\s(?<часть2>.*)"); Match b = a.Match(temp2); if (b.Success) temp2 = b.Groups["часть1"].Value + b.Groups["часть2"].Value; } } //разбираем выражение //Regex reg = new Regex(@"\d{1,2}\s([а-я\-]{1,}\s)*(?<type>\d{1,2})(?<index>[а-я]?)(?<подтип>((\*\*)[а-я]){0,1})(?<черед>(\s\(\-[а-я]{1,}\-\)){0,1})");//0 //Regex reg = new Regex(@"\d{1,2}\s([а-я\-]{1,}\s)*(?<type>\d{1,2})(?<index>[а-я]?)(/[а-я])?(?<подтип>((\*\*)[а-я]){0,1})(?<черед>(\s\(\-[а-я]{1,}\-\)){0,1})");//1 //Regex reg = new Regex(@"\d{1,2}\s([а-я\-]{1,}\s)*(?<type>\d{1,2})(?<index>[а-я]?)(/[а-я])?\s?(?<черед>(\(\-[а-я]*\-\))?).{0,}(?<подтип>((\*\*)[а-я])?)\s?\k'черед'?");//2 //Regex reg = new Regex(@"\d{1,2}\s([а-я\-]{1,}\s)*(?<type>\d{1,2})(?<index>[а-я]?)((/[а-я]\'{0,2})|(\*[а-я]))?\s?(?<черед>(\(\-[а-я]*\-\))?)(?<буд>(\([а-я]{1,}\-(//[а-я]{1,}\-)?\))?).{0,}(?<подтип>((\*\*)[а-я])?)\s?\k'черед'?");//3 Regex reg = new Regex(@"\d{1,2}\s([а-я\-]{1,}\s)*(?<type>\d{1,2})(?<index>[а-я]?)((/[а-я]\'{0,2})|(\*[а-я]))?\s?(?<подтип>((\*\*)[а-я])?)(?<черед>(\(\-[а-я]*\-\))?)(?<буд>(\([а-я]{1,}\-(//[а-я]{1,}\-)?\))?).{0,}\s?\k'черед'?");//4 Match match = reg.Match(temp2); logFormRus += "\nВходной индекс: " + temp2 + "\nРабочий индекс: " + match.Value + "\n***Разбор индекса***\nиндекс: " + match.Groups["index"].Value + "\nподтип: " + match.Groups["подтип"].Value + "\nтип: " + match.Groups["type"].Value.ToString() + "\nчередование: " + match.Groups["черед"].Value + "\nоснова буд.: " + match.Groups["буд"].Value + "\nпомета: "; if (arPometa.Count > 0) logFormRus += arPometa[0].ToString(); if (haract == Haract.деепричастие) { switch (VremyElRus()) { case 0://настоящ int i = 0; if (match.Success) i = Convert.ToInt32(match.Groups["type"].Value); if (!OsnovaProizv(osnova, "тянуть(ся)?")) if (VidElRus() < 2 || (i == 3 || i == 8 || i == 9 || i == 11 || i == 14 || i == 15)) { logFormRus += "\nФормы в настоящем не существует"; return osnova; } switch (i) { case 13: Match slovo = Osnova(osnova, "(?<окончание>(ать)|(аться))"); osnova = slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value[0].ToString() + "я"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; return osnova; default: c.vid = Vid.PostoyannayaDlitelnost;//несоверш lico = 3; c.chislo = Chislo.Mnozhestvennoe; break; } break; default://прош if (Pom(arPometa, "9") || ((match.Groups["type"].Value == "7" && match.Groups["черед"].Value == "(-д-)" || match.Groups["type"].Value == "7" && match.Groups["черед"].Value == "(-т-)")) && OsnovaProizv(osnova, "сти(сь)?")) { c.vid = Vid.Zavershennost; c.vremya = Vremya.Buduschee; lico = 1; } else c.rod = Rod.Muzhskoj; c.chislo = Chislo.Edinstvennoe; break; } } if (match.Success) { switch (Convert.ToInt32(match.Groups["type"].Value))//работаем со спряжением { case 1://тип 1 Match slovo = Osnova(osnova, "(?<окончание>(ать)|(ять)|(еть)|(аться)|(яться)|(еться))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += slovo.Groups["окончание"].Value[0].ToString() + "й"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova += slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; default://будущее osnova += slovo.Groups["окончание"].Value[0].ToString(); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; case 2://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += slovo.Groups["окончание"].Value[0].ToString() + "й"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova += slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; ; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; ; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; ; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; ; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; ; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; ; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее osnova += slovo.Groups["окончание"].Value[0].ToString(); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 2://тип 2 slovo = Osnova(osnova, "(?<окончание>(овать)|(евать)|(еваться)|(оваться))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova += "уй"; else osnova += "уй"; break; default: if (Ship(slovo.Groups["основа"].Value)) osnova += "уй"; else osnova += "юй"; break; } if (ChisloElRus() > 0) osnova += "те"; if (c.zalog == Zalog.Vozvratniy) { if (ChisloElRus() > 0) osnova += "сь"; else osnova += "ся"; } } else switch (VremyElRus()) { case 1://прошедшее switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: switch (slovo.Groups["окончание"].Value) { case "овать": osnova += "овал"; break; default: osnova += "евал"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: switch (slovo.Groups["окончание"].Value) { case "овать": osnova += "овала"; break; default: osnova += "евала"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: switch (slovo.Groups["окончание"].Value) { case "овать": osnova += "овало"; break; default: osnova += "евало"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число switch (slovo.Groups["окончание"].Value) { case "овать": osnova += "овали"; break; default: osnova += "евали"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; default://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "овать": osnova += "ую"; break; default: if (Ship(slovo.Groups["основа"].Value)) osnova += "ую"; else osnova += "юю"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova += "уешь"; else osnova += "уёшь"; break; default: if (match.Groups["index"].Value == "а") { if (Ship(slovo.Groups["основа"].Value)) osnova += "уешь"; else osnova += "юешь"; } else { if (Ship(slovo.Groups["основа"].Value)) osnova += "уёшь"; else osnova += "юёшь"; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova += "ует"; else osnova += "уёт"; break; default: if (match.Groups["index"].Value == "а") { if (Ship(slovo.Groups["основа"].Value)) osnova += "ует"; else osnova += "юет"; } else { if (Ship(slovo.Groups["основа"].Value)) osnova += "уёт"; else osnova += "юёт"; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova += "уем"; else osnova += "уём"; break; default: if (match.Groups["index"].Value == "а") { if (Ship(slovo.Groups["основа"].Value)) osnova += "уем"; else osnova += "юем"; } else { if (Ship(slovo.Groups["основа"].Value)) osnova += "уём"; else osnova += "юём"; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova += "уете"; else osnova += "уёте"; break; default: if (match.Groups["index"].Value == "а") { if (Ship(slovo.Groups["основа"].Value)) osnova += "уете"; else osnova += "юете"; } else { if (Ship(slovo.Groups["основа"].Value)) osnova += "уёте"; else osnova += "юёте"; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova += "уют"; else osnova += "уют"; break; default: if (match.Groups["index"].Value == "а") { if (Ship(slovo.Groups["основа"].Value)) osnova += "уют"; else osnova += "юют"; } else { if (Ship(slovo.Groups["основа"].Value)) osnova += "уют"; else osnova += "юют"; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; case 2://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { switch (slovo.Groups["окончание"].Value) { case "овать": osnova += "уй"; break; default: if (Ship(slovo.Groups["основа"].Value)) osnova += "уй"; else osnova += "юй"; break; } if (ChisloElRus() > 0) osnova += "те"; if (c.zalog == Zalog.Vozvratniy) { if (ChisloElRus() > 0) osnova += "сь"; else osnova += "ся"; } } else switch (VremyElRus()) { case 1://прошедшее switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: switch (slovo.Groups["окончание"].Value) { case "овать": osnova = osnova + "овал"; break; default: osnova = osnova + "евал"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: switch (slovo.Groups["окончание"].Value) { case "овать": osnova = osnova + "овала"; break; default: osnova = osnova + "евала"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: switch (slovo.Groups["окончание"].Value) { case "овать": osnova = osnova + "овало"; break; default: osnova = osnova + "евало"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число switch (slovo.Groups["окончание"].Value) { case "овать": osnova = osnova + "овали"; break; default: osnova = osnova + "евали"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "овать": osnova = osnova + "ую"; break; default: if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "ую"; else osnova = osnova + "юю"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova = osnova + "уешь"; else osnova = osnova + "уёшь"; break; default: if (match.Groups["index"].Value == "а") { if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "уешь"; else osnova = osnova + "юешь"; } else { if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "уёшь"; else osnova = osnova + "юёшь"; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova = osnova + "ует"; else osnova = osnova + "уёт"; break; default: if (match.Groups["index"].Value == "а") { if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "ует"; else osnova = osnova + "юет"; } else { if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "уёт"; else osnova = osnova + "юёт"; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova = osnova + "уем"; else osnova = osnova + "уём"; break; default: if (match.Groups["index"].Value == "а") { if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "уем"; else osnova = osnova + "юем"; } else { if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "уём"; else osnova = osnova + "юём"; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "овать": if (match.Groups["index"].Value == "а") osnova = osnova + "уете"; else osnova = osnova + "уёте"; break; default: if (match.Groups["index"].Value == "а") { if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "уете"; else osnova = osnova + "юете"; } else { if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "уёте"; else osnova = osnova + "юёте"; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "овать": osnova += "уют"; break; default: if (Ship(slovo.Groups["основа"].Value)) osnova = osnova + "уют"; else osnova = osnova + "юют"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 3://тип 3 slovo = Osnova(osnova, "(?<окончание>(нуть)|(нуться))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 2://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if ((match.Groups["index"].Value == "а" && Glasnay(osnova)) || (match.Groups["подтип"].Value == "**а" && Glasnay(osnova)) || slovo.Groups["основа"].Value == "сты") osnova += "нь"; else osnova += "ни"; osnova = ZamСловоВнутри_or(osnova, "ыни", "ынь", 'a'); if (match.Groups["index"].Value != "") osnova = ZamСловоВнутри_or(osnova, "янь", "яни", 'a'); if (ChisloElRus() > 0) osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; osnova = ZamСловоВнутри_or(osnova, "ьсь", "ься", 'a'); } else switch (VremyElRus()) { case 1://прошедшее switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (match.Groups["подтип"].Value == "**а") { if (Pom(arPometa, "5")) osnova += "нул"; else if (Glasnay(slovo.Groups["основа"].Value)) osnova += "л"; } else osnova = osnova + "нул"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: if (match.Groups["подтип"].Value == "**а") osnova += "ла"; else osnova = osnova + "нула"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: if (match.Groups["подтип"].Value == "**а") osnova += "ло"; else osnova = osnova + "нуло"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число if (match.Groups["подтип"].Value == "**а") osnova += "ли"; else osnova = osnova + "нули"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = osnova + "ну"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо if (match.Groups["index"].Value == "в") osnova = osnova + "нёшь"; else osnova = osnova + "нешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо if (match.Groups["index"].Value == "в") osnova = osnova + "нёт"; else osnova = osnova + "нет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо if (match.Groups["index"].Value == "в") osnova = osnova + "нём"; else osnova = osnova + "нем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо if (match.Groups["index"].Value == "в") osnova = osnova + "нёте"; else osnova = osnova + "нете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "нут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if ((match.Groups["index"].Value == "а" && Glasnay(osnova)) || (match.Groups["подтип"].Value == "**а" && Glasnay(osnova)) || slovo.Groups["основа"].Value == "сты") osnova += "нь"; else osnova += "ни"; osnova = ZamСловоВнутри_or(osnova, "ыни", "ынь", 'a'); if (match.Groups["index"].Value != "") osnova = ZamСловоВнутри_or(osnova, "янь", "яни", 'a'); if (ChisloElRus() > 0) osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; osnova = ZamСловоВнутри_or(osnova, "ьсь", "ься", 'a'); } else switch (VremyElRus()) { case 1://прошедшее switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (match.Groups["подтип"].Value == "**а") { if (Pom(arPometa, "5")) osnova += "нул"; else if (Glasnay(slovo.Groups["основа"].Value)) osnova += "л"; } else osnova = osnova + "нул"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: if (match.Groups["подтип"].Value == "**а") osnova += "ла"; else osnova = osnova + "нула"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: if (match.Groups["подтип"].Value == "**а") osnova += "ло"; else osnova = osnova + "нуло"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число if (match.Groups["подтип"].Value == "**а") osnova += "ли"; else osnova = osnova + "нули"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ну"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "нешь"; if (match.Groups["index"].Value == "в") osnova = ZamLit(osnova, 'ё', osnova.Length - 3); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "нет"; if (match.Groups["index"].Value == "в") osnova = ZamLit(osnova, 'ё', osnova.Length - 2); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "нем"; if (match.Groups["index"].Value == "в") osnova = ZamLit(osnova, 'ё', osnova.Length - 2); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "нете"; if (match.Groups["index"].Value == "в") osnova = ZamLit(osnova, 'ё', osnova.Length - 3); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "нут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = osnova + "ну"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо if (match.Groups["index"].Value == "в") osnova = osnova + "нёшь"; else osnova = osnova + "нешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо if (match.Groups["index"].Value == "в") osnova = osnova + "нёт"; else osnova = osnova + "нет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо if (match.Groups["index"].Value == "в") osnova = osnova + "нём"; else osnova = osnova + "нем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо if (match.Groups["index"].Value == "в") osnova = osnova + "нёте"; else osnova = osnova + "нете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "нут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 4: slovo = Osnova(osnova, "(?<окончание>(ить)|(иться))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (match.Groups["index"].Value == "а") { if (Glasnay(osnova)) osnova += "й"; else { if (osnova.Length > 1) { if (Glasnay(osnova[osnova.Length - 2])) osnova += "ь"; else osnova += "и"; } else osnova += "и"; } } else osnova += "и"; if (ChisloElRus() > 0) osnova += "те"; if (c.zalog == Zalog.Vozvratniy) { if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } } else switch (VremyElRus()) { case 1://прошедшее switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: osnova += "ил"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "ила"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "ило"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "или"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (Ship(osnova)) osnova += "у"; else if (Пбмвф(osnova)) osnova += "лю"; else if (Сзтд(osnova)) { osnova = Чередов4(osnova, match.Groups["черед"].Value) + "у"; } else osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ишь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ит"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "им"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ите"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо if (Ship(osnova)) osnova += "ат"; else osnova += "ят"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (Ship(osnova)) osnova += "у"; else if (Пбмвф(osnova)) osnova += "лю"; else if (Сзтд(osnova)) { osnova = Чередов4(osnova, match.Groups["черед"].Value) + "у"; } else osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ишь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ит"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "им"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ите"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо if (Ship(osnova)) osnova += "ат"; else osnova += "ят"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (match.Groups["index"].Value == "а") { if (Glasnay(osnova)) osnova += "й"; else { if (osnova.Length > 1) { if (Glasnay(osnova[osnova.Length - 2])) osnova += "ь"; else osnova += "и"; } else osnova += "и"; } } else osnova += "и"; if (ChisloElRus() > 0) osnova += "те"; if (c.zalog == Zalog.Vozvratniy) { if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } } else switch (VremyElRus()) { case 1://прошедшее switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: osnova += "ил"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "ила"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "ило"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "или"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (Ship(osnova)) osnova += "у"; else if (Пбмвф(osnova)) osnova += "лю"; else if (Сзтд(osnova)) { osnova = Чередов4(osnova, match.Groups["черед"].Value) + "у"; } else osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ишь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ит"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "им"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ите"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо if (Ship(osnova)) osnova += "ат"; else osnova += "ят"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 5: slovo = Osnova(osnova, "(?<окончание>(еть)|(еться)|(ать)|(аться)|(ять)|(яться))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "й"; break; default: if (match.Groups["index"].Value == "а" && !ПриставкаВы(osnova)) osnova += "ь"; else if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "ни"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гони"); else if (OsnovaProizv(osnova, "беж")) { osnova = ZamLit(osnova, 'г'); osnova += "и"; } else osnova += "и"; break; } if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (match.Groups["index"].Value == "а" && slovo.Groups["окончание"].Value == "еть" || match.Groups["index"].Value == "в" && slovo.Groups["окончание"].Value == "еть" || match.Groups["index"].Value == "с" && slovo.Groups["окончание"].Value == "еть") osnova = Чередов5(osnova); if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "ню"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гоню"); else if (slovo.Groups["окончание"].Value == "ать") { if (OsnovaProizv(osnova, "беж")) osnova = ZamLit(osnova, 'г', osnova.Length - 1); if (OsnovaProizv(osnova, "сп")) osnova += "лю"; else osnova += "у"; } else if (slovo.Groups["окончание"].Value == "ять") { if (match.Groups["index"].Value == "а") osnova += "ю"; else osnova += "лю"; } else if (slovo.Groups["окончание"].Value == "еть") { if (match.Groups["index"].Value == "в" || match.Groups["index"].Value == "с") { if (Лнр(osnova)) osnova += "ю"; else if (Пбмвф(osnova)) osnova += "лю"; else osnova += "у"; } else { if (osnova[osnova.Length - 1] == 'т') { osnova = ZamLit(osnova, 'ч', osnova.Length - 1); osnova += "у"; } else if (OsnovaProizv(osnova, "смотр")) osnova += "ю"; else if (OsnovaProizv(osnova, "терп")) osnova += "лю"; else osnova += "у"; } } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо if (OsnovaProizv(osnova, "хот")) { osnova = ZamLit(osnova, 'ч'); osnova += "ешь"; } else if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "нишь"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гонишь"); else osnova += "ишь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо if (OsnovaProizv(osnova, "хот")) { osnova = ZamLit(osnova, 'ч'); osnova += "ет"; } else if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "нит"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гонит"); else osnova += "ит"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "ним"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гоним"); else osnova += "им"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "ните"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гоните"); else osnova += "ите"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо if (slovo.Groups["окончание"].Value == "ать") { if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "нят"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гонят"); else if (match.Groups["index"].Value == "а" && !ПриставкаВы(osnova)) osnova += "ат"; else if (OsnovaProizv(osnova, "держ")) osnova += "ат"; else if (match.Groups["index"].Value == "а" && OsnovaProizv(osnova, "беж")) { osnova = ZamLit(osnova, 'г'); osnova += "ут"; } else if (match.Groups["index"].Value == "в") { if (OsnovaProizv(osnova, "беж")) { osnova = ZamLit(osnova, 'г'); osnova += "ут"; } else if (OsnovaProizv(osnova, "сп")) osnova += "ят"; else osnova += "ат"; } else if (match.Groups["index"].Value == "с") osnova += "ат"; else osnova += "ят"; } else if (OsnovaProizv(osnova, "киш") || OsnovaProizv(osnova, "держ")) osnova += "ат"; else osnova += "ят"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (match.Groups["index"].Value == "а" && slovo.Groups["окончание"].Value == "еть" || match.Groups["index"].Value == "в" && slovo.Groups["окончание"].Value == "еть" || match.Groups["index"].Value == "с" && slovo.Groups["окончание"].Value == "еть") osnova = Чередов5(osnova); switch (match.Groups["index"].Value) { case "в": if (slovo.Groups["окончание"].Value == "ять") osnova += "ю"; else if (slovo.Groups["окончание"].Value == "ать") { if (OsnovaProizv(osnova, "беж")) osnova = ZamLit(osnova, 'г'); if (OsnovaProizv(osnova, "сп")) osnova += "лю"; else osnova += "у"; } else { if (OsnovaProizv(osnova, "киш")) osnova += "у"; else if (Пбмвф(osnova)) osnova += "лю"; else if (Лнр(osnova)) osnova += "ю"; else osnova += "у"; } break; case "а": if (OsnovaProizv(osnova, "смотр")) osnova += "ю"; else if (OsnovaProizv(osnova, "терп")) osnova += "лю"; else if (OsnovaProizv(osnova, "гн")) { osnova = ZamLit(osnova, 'о'); osnova += "няю"; } else if (OsnovaProizv(osnova, "беж")) { osnova = ZamLit(osnova, 'г'); osnova += "у"; } else osnova += "у"; break; default: if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гоню"); else if (Лнр(osnova)) osnova += "ю"; else if (Пбмвф(osnova)) osnova += "лю"; else osnova += "у"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "няешь"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гонишь"); else if (OsnovaProizv(osnova, "хот")) { osnova = Чередов5(osnova); osnova += "ешь"; } else osnova += "ишь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "няют"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гонит"); else if (OsnovaProizv(osnova, "хот")) { osnova = Чередов5(osnova); osnova += "ет"; } else if (OsnovaProizv(osnova, "киш")) osnova += "ат"; else osnova += "ит"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гон"); switch (lico) { case 1://1 лицо osnova += "им"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ите"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо switch (match.Groups["index"].Value) { case "а": if (slovo.Groups["окончание"].Value == "ать" && !ПриставкаВы(osnova)) osnova += "ат"; else if (OsnovaProizv(osnova, "держ") || OsnovaProizv(osnova, "беж")) osnova += "ат"; else osnova += "ят"; break; case "в": if (slovo.Groups["окончание"].Value == "ать") { if (OsnovaProizv(osnova, "беж")) { osnova = ZamLit(osnova, 'г'); osnova += "ут"; } else if (OsnovaProizv(osnova, "сп")) osnova += "ят"; else osnova += "ат"; } else if (OsnovaProizv(osnova, "киш")) osnova += "ат"; else osnova += "ят"; break; case "с": if (slovo.Groups["окончание"].Value == "ать") { if (OsnovaProizv(osnova, "гон")) { osnova = БезО(osnova, "гон", "гонят"); } else osnova += "ат"; } else osnova += "ят"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (slovo.Groups["окончание"].Value == "ять") osnova += "й"; else if (match.Groups["index"].Value == "а" && !ПриставкаВы(osnova)) osnova += "ь"; else if (OsnovaProizv(osnova, "беж")) { osnova = ZamLit(osnova, 'г'); osnova += "и"; } else if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "ни"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гони"); else osnova += "и"; if (ChisloElRus() > 0) osnova += "те"; if (c.zalog == Zalog.Vozvratniy) { if (ChisloElRus() > 0)osnova += "сь"; else osnova += "ся"; } } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + slovo.Groups["основа"].Value + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (match.Groups["index"].Value == "а" && slovo.Groups["окончание"].Value == "еть" || match.Groups["index"].Value == "в" && slovo.Groups["окончание"].Value == "еть" || match.Groups["index"].Value == "с" && slovo.Groups["окончание"].Value == "еть") osnova = Чередов5(osnova); switch (match.Groups["index"].Value) { case "в": if (slovo.Groups["окончание"].Value == "ять") osnova += "ю"; else if (slovo.Groups["окончание"].Value == "ать") { if (OsnovaProizv(osnova, "беж")) osnova = ZamLit(osnova, 'г'); if (OsnovaProizv(osnova, "сп")) osnova += "лю"; else osnova += "у"; } else { if (OsnovaProizv(osnova, "киш")) osnova += "у"; else if (Пбмвф(osnova)) osnova += "лю"; else if (Лнр(osnova)) osnova += "ю"; else osnova += "у"; } break; case "а": if (OsnovaProizv(osnova, "смотр")) osnova += "ю"; else if (OsnovaProizv(osnova, "гн")) { osnova = ZamLit(osnova, 'о'); osnova += "няю"; } else if (OsnovaProizv(osnova, "терп")) osnova += "лю"; else if (OsnovaProizv(osnova, "беж")) { osnova = ZamLit(osnova, 'г'); osnova += "у"; } else osnova += "у"; break; default: if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гон"); if (Лнр(osnova)) osnova += "ю"; else if (Пбмвф(osnova)) osnova += "лю"; else osnova += "у"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "няешь"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гонишь"); else if (OsnovaProizv(osnova, "хот")) { osnova = Чередов5(osnova); osnova += "ешь"; } else osnova += "ишь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "няет"; } else if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гонит"); else if (OsnovaProizv(osnova, "хот")) { osnova = Чередов5(osnova); osnova += "ет"; } else osnova += "ит"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число if (OsnovaProizv(osnova, "гн")) osnova = БезО(osnova, "гн", "гон"); switch (lico) { case 1://1 лицо if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "няем"; } else osnova += "им"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо if (OsnovaProizv(osnova, "гн") && match.Groups["index"].Value == "а") { osnova = ZamLit(osnova, 'о'); osnova += "няете"; } else osnova += "ите"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо switch (match.Groups["index"].Value) { case "а": if (slovo.Groups["окончание"].Value == "ать" && !ПриставкаВы(osnova)) osnova += "ат"; else if (OsnovaProizv(osnova, "держ") || OsnovaProizv(osnova, "беж")) osnova += "ат"; else if (OsnovaProizv(osnova, "гн")) { osnova = ZamLit(osnova, 'о'); osnova += "няют"; } else osnova += "ят"; break; case "в": if (slovo.Groups["окончание"].Value == "ать") { if (OsnovaProizv(osnova, "беж")) { osnova = ZamLit(osnova, 'г'); osnova += "ут"; } else if (OsnovaProizv(osnova, "сп")) osnova += "ят"; else osnova += "ат"; } else if (OsnovaProizv(osnova, "киш")) osnova += "ат"; else osnova += "ят"; break; case "с": if (slovo.Groups["окончание"].Value == "ать") { if (OsnovaProizv(osnova, "гон")) osnova = БезО(osnova, "гон", "гонят"); else osnova += "ат"; } else osnova += "ят"; break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 6: slovo = Osnova(osnova, "(?<окончание>(ать)|(аться)|(ять)|(яться))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "й"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "и"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "ли"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); if (Glasnay(osnova[osnova.Length - 2])) osnova += "ь"; else osnova += "и"; } else osnova += "ь"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "и"; else osnova = ZamOsnova(osnova, "сл", "шли"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "и"; } else if (Пбмвф(osnova)) osnova += "ли"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "и"; } break; } break; } if (match.Groups["index"].Value == "") { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "и"; } osnova = ZamСловоВнутри_or(osnova, "щь", "щи", 'a'); if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ю"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "у"; } else if (Пбмвф(osnova)) osnova += "лю"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "у"; } else osnova += "ю"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "у"; else osnova = ZamOsnova(osnova, "сл", "шлю"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ю"; } else if (Пбмвф(osnova)) osnova += "лю"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "у"; } break; } break; } if (match.Groups["index"].Value == "") { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); osnova += "у"; if (OsnovaProizv(osnova, "стлу")) osnova = ZamOsnova(osnova, "стлу", "стелю"); } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ешь"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ешь"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лешь"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ешь"; } else osnova += "ешь"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ёшь"; else osnova = ZamOsnova(osnova, "сл", "шлёшь"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ешь"; } else if (Пбмвф(osnova)) osnova += "ешь"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ешь"; } break; } break; } if (match.Groups["index"].Value == "") { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ешь"; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ет"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ет"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лет"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ет"; } else osnova += "ет"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ёт"; else osnova = ZamOsnova(osnova, "сл", "шлёт"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ет"; } else if (Пбмвф(osnova)) osnova += "лет"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ет"; } break; } break; } if (match.Groups["index"].Value == "") { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ет"; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ем"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "им"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "им"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ем"; } else osnova += "ем"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ём"; else osnova = ZamOsnova(osnova, "сл", "шлём"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "им"; } else if (Пбмвф(osnova)) osnova += "лем"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ем"; } break; } break; } if (match.Groups["index"].Value == "") { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ем"; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ете"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ите"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лите"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ите"; } else osnova += "ите"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ёте"; else osnova = ZamOsnova(osnova, "сл", "шлёте"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ите"; } else if (Пбмвф(osnova)) osnova += "ите"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ите"; } break; } break; } if (match.Groups["index"].Value == "") { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ете"; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ют"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ут"; } else if (Пбмвф(osnova)) osnova += "лют"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ут"; } else osnova += "ют"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ут"; else osnova = ZamOsnova(osnova, "сл", "шлют"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ют"; } else if (Пбмвф(osnova)) osnova += "лют"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ут"; } break; } break; } if (match.Groups["index"].Value == "") { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); osnova += "ут"; if (OsnovaProizv(osnova, "стлут")) osnova = ZamOsnova(osnova, "стлут", "стелют"); } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее if (match.Groups["index"].Value == "") osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ю"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "у"; } else if (Пбмвф(osnova)) osnova += "лю"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "у"; } else osnova += "ю"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "у"; else osnova = ZamOsnova(osnova, "сл", "шлю"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ю"; } else if (Пбмвф(osnova)) osnova += "лю"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "у"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); osnova += "у"; if (OsnovaProizv(osnova, "стлу")) osnova = ZamOsnova(osnova, "стлу", "стелю"); } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ешь"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ешь"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лешь"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ешь"; } else osnova += "ешь"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ёшь"; else osnova = ZamOsnova(osnova, "сл", "шлёшь"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ешь"; } else if (Пбмвф(osnova)) osnova += "лешь"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ешь"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ешь"; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ет"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ет"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лет"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ет"; } else osnova += "ет"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ёт"; else osnova = ZamOsnova(osnova, "сл", "шлёт"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ет"; } else if (Пбмвф(osnova)) osnova += "лет"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ет"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ет"; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ем"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "им"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лем"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ем"; } else osnova += "ем"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ём"; else osnova = ZamOsnova(osnova, "сл", "шлём"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ем"; } else if (Пбмвф(osnova)) osnova += "лем"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ем"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ем"; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ете"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ите"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лете"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ете"; } else osnova += "ете"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ёте"; else osnova = ZamOsnova(osnova, "сл", "шлёте"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ете"; } else if (Пбмвф(osnova)) osnova += "ете"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ете"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ете"; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ют"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ут"; } else if (Пбмвф(osnova)) osnova += "лют"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ут"; } else osnova += "ют"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ут"; else osnova = ZamOsnova(osnova, "сл", "шлют"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ют"; } else if (Пбмвф(osnova)) osnova += "лют"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ут"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); osnova += "ут"; if (OsnovaProizv(osnova, "стлут")) osnova = ZamOsnova(osnova, "стлут", "стелют"); } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "й"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "и"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "ли"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); if (Glasnay(osnova[osnova.Length - 2])) osnova += "ь"; else osnova += "и"; } else osnova += "ь"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "и"; else osnova = ZamOsnova(osnova, "сл", "шли"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "и"; } else if (Пбмвф(osnova)) osnova += "ли"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "и"; } break; } break; } if (match.Groups["index"].Value == "") { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "и"; } osnova = ZamСловоВнутри_or(osnova, "щь", "щи", 'a'); if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее if (match.Groups["index"].Value == "") { if (Приставка(osnova)) { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зыв"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бир"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дир"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); } } //osnova = Чередов6(osnova, match.Groups["черед"].Value); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее if (match.Groups["index"].Value == "") osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ю"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "у"; } else if (Пбмвф(osnova)) osnova += "лю"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "у"; } else osnova += "ю"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "у"; else osnova = ZamOsnova(osnova, "сл", "шлю"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ю"; } else if (Пбмвф(osnova)) osnova += "лю"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "у"; } break; } break; } if (match.Groups["index"].Value == "") { osnova = БезО_ret_orig(osnova, "(зв)|(бр)|(др)|(стл)"); if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); osnova += "у"; if (OsnovaProizv(osnova, "стлу")) osnova = ZamOsnova(osnova, "стлу", "стелю"); } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ешь"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ешь"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лешь"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ешь"; } else osnova += "ешь"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ёшь"; else osnova = ZamOsnova(osnova, "сл", "шлёшь"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ешь"; } else if (Пбмвф(osnova)) osnova += "лешь"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ешь"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ешь"; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ет"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ет"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лет"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ет"; } else osnova += "ет"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ёт"; else osnova = ZamOsnova(osnova, "сл", "шлёт"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ет"; } else if (Пбмвф(osnova)) osnova += "лет"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ет"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ет"; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ем"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "им"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лем"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ем"; } else osnova += "ем"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ём"; else osnova = ZamOsnova(osnova, "сл", "шлём"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ем"; } else if (Пбмвф(osnova)) osnova += "лем"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ем"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ем"; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ете"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ите"; } else if (Пбмвф(osnova) && !OsnovaProizv(osnova, "сып")) osnova += "лете"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ете"; } else osnova += "ете"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ёте"; else osnova = ZamOsnova(osnova, "сл", "шлёте"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ете"; } else if (Пбмвф(osnova)) osnova += "ете"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ете"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); else if (OsnovaProizv(osnova, "стл")) osnova = ZamOsnova(osnova, "стл", "стел"); else if (OsnovaProizv(osnova, "лг")) osnova = ZamOsnova(osnova, "лг", "лж"); osnova += "ете"; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо switch (slovo.Groups["окончание"].Value) { case "ять": osnova += "ют"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova = Сл_Стл(osnova); osnova += "ут"; } else if (Пбмвф(osnova)) osnova += "лют"; else if (Сзтдкгх(osnova)) { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ут"; } else osnova += "ют"; break; case "в": if (OsnovaProizv(osnova, "рж")) osnova += "ут"; else osnova = ZamOsnova(osnova, "сл", "шлют"); break; case "с": if (Лнр(osnova)) { if (OsnovaProizv(osnova, "стл"))osnova = ZamOsnova(osnova, "стл", "стел"); osnova += "ют"; } else if (Пбмвф(osnova)) osnova += "лют"; else { osnova = Чередов6(osnova, match.Groups["черед"].Value); osnova += "ут"; } break; } break; } if (match.Groups["index"].Value == "") { if (OsnovaProizv(osnova, "зв")) { osnova = ZamOsnova(osnova, "зв", "зов"); } else if (OsnovaProizv(osnova, "бр")) { osnova = ZamOsnova(osnova, "бр", "бер"); } else if (OsnovaProizv(osnova, "др")) osnova = ZamOsnova(osnova, "др", "дер"); osnova += "ут"; if (OsnovaProizv(osnova, "стлут")) osnova = ZamOsnova(osnova, "стлут", "стелют"); } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 7: slovo = Osnova(osnova, "(?<окончание>(ть)|(ться)|(ти)|(тись)|(тися))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (OsnovaProizv(osnova, "чес")) switch (Приставка_(osnova)) { case "с": osnova = ZamПриставка(osnova, "со"); break; case "рас": osnova = ZamПриставка(osnova, "разо"); break; } osnova = БезО_(osnova, "обо"); switch (pometa) { case "[3]": osnova += "ь"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { if (OsnovaProizv(osnova, "крас") || OsnovaProizv(osnova, "вес")) osnova = ZamLit(osnova, 'д'); else if (OsnovaProizv(osnova, "мес")) osnova = ZamLit(osnova, 'т'); else if (OsnovaProizv(osnova, "грес")) osnova = ZamLit(osnova, 'б'); else if (OsnovaProizv(osnova, "чес")) osnova = ZamOsnova(osnova, "чес", "чт"); else if (OsnovaProizv(osnova, "рас")) osnova = ZamOsnova(osnova, "рас", "раст"); osnova += "и"; } else if (OsnovaProizv(osnova, "сес")) osnova = ZamOsnova(osnova, "сес", "сядь"); else if (OsnovaProizv(osnova, "лез")) osnova += "ь"; else osnova += "и"; break; default: if (OsnovaProizv(osnova, "чес")) osnova = ZamOsnova(osnova, "чес", "чт"); else osnova = ZamLit(osnova, match.Groups["черед"].Value); osnova += "и"; break; } break; } if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее if (OsnovaProizv(osnova, "мес") || OsnovaProizv(osnova, "вес") || OsnovaProizv(osnova, "крас") || OsnovaProizv(osnova, "чес") || OsnovaProizv(osnova, "сес") || match.Groups["черед"].Value == "(-д-)" || match.Groups["черед"].Value == "(-т-)") osnova = ZamLit(osnova, 'л'); else if (match.Groups["черед"].Value == "(-б-)" || OsnovaProizv(osnova, "грес")) osnova = ZamLit(osnova, 'б'); else if (match.Groups["черед"].Value == "(-ст-)" || OsnovaProizv(osnova, "рас")) osnova = ZamLit(osnova, 'о', osnova.Length - 2); switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: if (OsnovaProizv(osnova, "чел")) { switch (Приставка_(osnova)) { case "с": osnova = ZamПриставка(osnova, "со"); break; case "рас": osnova = ZamПриставка(osnova, "разо"); break; } osnova = ZamOsnova(osnova, "чел", "чла"); } else if (osnova[osnova.Length - 1] == 'л') osnova += "а"; else osnova += "ла"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: if (OsnovaProizv(osnova, "чел")) { switch (Приставка_(osnova)) { case "с": osnova = ZamПриставка(osnova, "со"); break; case "рас": osnova = ZamПриставка(osnova, "разо"); break; } osnova = ZamOsnova(osnova, "чел", "чло"); } else if (osnova[osnova.Length - 1] == 'л') osnova += "о"; else osnova += "ло"; ; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число if (OsnovaProizv(osnova, "чел")) { switch (Приставка_(osnova)) { case "с": osnova = ZamПриставка(osnova, "со"); break; case "рас": osnova = ZamПриставка(osnova, "разо"); break; } osnova = ZamOsnova(osnova, "чел", "чли"); } else if (osnova[osnova.Length - 1] == 'л') osnova += "и"; else osnova += "ли"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее if (OsnovaProizv(osnova, "чес")) switch (Приставка_(osnova)) { case "с": osnova = ZamПриставка(osnova, "со"); break; case "рас": osnova = ZamПриставка(osnova, "разо"); break; } osnova = БезО_(osnova, "обо"); if (OsnovaProizv(osnova, "чес")) osnova = ZamOsnova(osnova, "чес", "чт"); else if (OsnovaProizv(osnova, "сес")) osnova = ZamOsnova(osnova, "сес", "сяд"); else if (OsnovaProizv(osnova, "вес") || OsnovaProizv(osnova, "крас") || match.Groups["черед"].Value == "(-д-)") osnova = ZamLit(osnova, 'д'); else if (match.Groups["черед"].Value == "(-т-)" || OsnovaProizv(osnova, "мес")) osnova = ZamLit(osnova, 'т'); else if (match.Groups["черед"].Value == "(-б-)") osnova = ZamLit(osnova, 'б'); else if (match.Groups["черед"].Value == "(-ст-)") { osnova += "т"; } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее osnova = БезО_(osnova, "обо"); if (OsnovaProizv(osnova, "чес")) osnova = ZamOsnova(osnova, "чес", "чт"); else if (OsnovaProizv(osnova, "сес")) osnova = ZamOsnova(osnova, "сес", "сяд"); else if (OsnovaProizv(osnova, "вес") || OsnovaProizv(osnova, "крас") || match.Groups["черед"].Value == "(-д-)") osnova = ZamLit(osnova, 'д'); else if (match.Groups["черед"].Value == "(-т-)" || OsnovaProizv(osnova, "мес")) osnova = ZamLit(osnova, 'т'); else if (match.Groups["черед"].Value == "(-б-)") osnova = ZamLit(osnova, 'б'); else if (match.Groups["черед"].Value == "(-ст-)") { osnova += "т"; } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (OsnovaProizv(osnova, "чес")) switch (Приставка_(osnova)) { case "с": osnova = ZamПриставка(osnova, "со"); break; case "рас": osnova = ZamПриставка(osnova, "разо"); break; } osnova = БезО_(osnova, "обо"); switch (pometa) { case "[3]": osnova += "ь"; break; default: switch (match.Groups["index"].Value) { case "а": if (ПриставкаВы(osnova)) { if (OsnovaProizv(osnova, "крас") || OsnovaProizv(osnova, "вес")) osnova = ZamLit(osnova, 'д'); else if (OsnovaProizv(osnova, "мес")) osnova = ZamLit(osnova, 'т'); else if (OsnovaProizv(osnova, "грес")) osnova = ZamLit(osnova, 'б'); else if (OsnovaProizv(osnova, "чес")) osnova = ZamOsnova(osnova, "чес", "чт"); else if (OsnovaProizv(osnova, "рас")) osnova = ZamOsnova(osnova, "рас", "раст"); osnova += "и"; } else if (OsnovaProizv(osnova, "сес")) osnova = ZamOsnova(osnova, "сес", "сядь"); else if (OsnovaProizv(osnova, "лез")) osnova += "ь"; else osnova += "и"; break; default: if (OsnovaProizv(osnova, "чес")) osnova = ZamOsnova(osnova, "чес", "чт"); else osnova = ZamLit(osnova, match.Groups["черед"].Value); osnova += "и"; break; } break; } if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее if (OsnovaProizv(osnova, "мес") || OsnovaProizv(osnova, "вес") || OsnovaProizv(osnova, "крас") || OsnovaProizv(osnova, "чес") || OsnovaProizv(osnova, "сес") || match.Groups["черед"].Value == "(-д-)" || match.Groups["черед"].Value == "(-т-)") osnova = ZamLit(osnova, 'л'); else if (match.Groups["черед"].Value == "(-б-)" || OsnovaProizv(osnova, "грес")) osnova = ZamLit(osnova, 'б'); else if (match.Groups["черед"].Value == "(-ст-)" || OsnovaProizv(osnova, "рас")) osnova = ZamLit(osnova, 'о', osnova.Length - 2); switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: if (OsnovaProizv(osnova, "чел")) { switch (Приставка_(osnova)) { case "с": osnova = ZamПриставка(osnova, "со"); break; case "рас": osnova = ZamПриставка(osnova, "разо"); break; } osnova = ZamOsnova(osnova, "чел", "чла"); } else if (osnova[osnova.Length - 1] == 'л') osnova += "а"; else osnova += "ла"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: if (OsnovaProizv(osnova, "чел")) { switch (Приставка_(osnova)) { case "с": osnova = ZamПриставка(osnova, "со"); break; case "рас": osnova = ZamПриставка(osnova, "разо"); break; } osnova = ZamOsnova(osnova, "чел", "чло"); } else if (osnova[osnova.Length - 1] == 'л') osnova += "о"; else osnova += "ло"; ; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число if (OsnovaProizv(osnova, "чел")) { switch (Приставка_(osnova)) { case "с": osnova = ZamПриставка(osnova, "со"); break; case "рас": osnova = ZamПриставка(osnova, "разо"); break; } osnova = ZamOsnova(osnova, "чел", "чли"); } else if (osnova[osnova.Length - 1] == 'л') osnova += "и"; else osnova += "ли"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее osnova = БезО_(osnova, "обо"); if (OsnovaProizv(osnova, "чес")) osnova = ZamOsnova(osnova, "чес", "чт"); else if (OsnovaProizv(osnova, "сес")) osnova = ZamOsnova(osnova, "сес", "сяд"); else if (OsnovaProizv(osnova, "вес") || OsnovaProizv(osnova, "крас") || match.Groups["черед"].Value == "(-д-)") osnova = ZamLit(osnova, 'д'); else if (match.Groups["черед"].Value == "(-т-)" || OsnovaProizv(osnova, "мес")) osnova = ZamLit(osnova, 'т'); else if (match.Groups["черед"].Value == "(-б-)") { osnova = ZamLit(osnova, 'б'); } else if (match.Groups["черед"].Value == "(-ст-)") { osnova += "т"; } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } osnova = ZamСловоВнутри_or(osnova, "ьсь", "ься", 'a'); break; case 8: slovo = Osnova(osnova, "(?<окончание>(чь)|(чься))"); osnova = slovo.Groups["основа"].Value; if (osnova.Length > 0) switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (OsnovaProizv(osnova, "ле")) osnova = ZamOsnova(osnova, "ле", "ляг"); else { if (OsnovaProizv(osnova, "мо")) osnova = ZamOsnova(osnova, "мо", "мог"); else if (OsnovaProizv(osnova, "толо")) osnova = ZamOsnova(osnova, "толо", "толк"); else if (OsnovaProizv(osnova, "же")) { osnova = С_О_ret_orig(osnova); osnova = ZamOsnova(osnova, "же", "жг"); } else osnova += Lit(match.Groups["черед"].Value, 'a'); if (Glasnay(osnova[osnova.Length - 1])) osnova += "к"; osnova += "и"; } if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее if (OsnovaProizv(osnova, "ле")) osnova = ZamOsnova(osnova, "ле", "лег"); else { if (OsnovaProizv(osnova, "мо")) osnova = ZamOsnova(osnova, "мо", "мог"); else if (OsnovaProizv(osnova, "толо")) osnova = ZamOsnova(osnova, "толо", "толк"); else if (OsnovaProizv(osnova, "же")) { osnova = С_О_ret_orig(osnova); osnova = ZamOsnova(osnova, "же", "жг"); } else osnova += Lit(match.Groups["черед"].Value, 'a'); if (Glasnay(osnova[osnova.Length - 1])) osnova += "к"; } switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (OsnovaProizv(osnova, "жг")) { osnova = БезО_ret_orig(osnova); osnova = ZamOsnova_ro(osnova, "жг", "жёг"); } osnova = ZamOsnova_ro(osnova, "толк", "толок"); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "ла"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "ло"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "ли"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее if (OsnovaProizv(osnova, "ле")) osnova = ZamOsnova(osnova, "ле", "ляг"); else { if (OsnovaProizv(osnova, "мо")) osnova = ZamOsnova(osnova, "мо", "мог"); else if (OsnovaProizv(osnova, "толо")) osnova = ZamOsnova(osnova, "толо", "толк"); else if (OsnovaProizv(osnova, "же")) { osnova = С_О_ret_orig(osnova); osnova = ZamOsnova(osnova, "же", "жг"); } else osnova += Lit(match.Groups["черед"].Value, 'a'); if (Glasnay(osnova[osnova.Length - 1])) osnova += "к"; } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее if (OsnovaProizv(osnova, "ле")) osnova = ZamOsnova(osnova, "ле", "ляг"); else { if (OsnovaProizv(osnova, "мо")) osnova = ZamOsnova(osnova, "мо", "мог"); else if (OsnovaProizv(osnova, "толо")) osnova = ZamOsnova(osnova, "толо", "толк"); else if (OsnovaProizv(osnova, "же")) { osnova = С_О_ret_orig(osnova); osnova = ZamOsnova(osnova, "же", "жг"); } else osnova += Lit(match.Groups["черед"].Value, 'a'); if (Glasnay(osnova[osnova.Length - 1])) osnova += "к"; } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (OsnovaProizv(osnova, "ле")) osnova = ZamOsnova(osnova, "ле", "ляг"); else { if (OsnovaProizv(osnova, "мо")) osnova = ZamOsnova(osnova, "мо", "мог"); else if (OsnovaProizv(osnova, "толо")) osnova = ZamOsnova(osnova, "толо", "толк"); else if (OsnovaProizv(osnova, "же")) { osnova = С_О_ret_orig(osnova); osnova = ZamOsnova(osnova, "же", "жг"); } else osnova += Lit(match.Groups["черед"].Value, 'a'); if (Glasnay(osnova[osnova.Length - 1])) osnova += "к"; osnova += "и"; } if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее if (OsnovaProizv(osnova, "ле")) osnova = ZamOsnova(osnova, "ле", "лег"); else { if (OsnovaProizv(osnova, "мо")) osnova = ZamOsnova(osnova, "мо", "мог"); else if (OsnovaProizv(osnova, "толо")) osnova = ZamOsnova(osnova, "толо", "толк"); else if (OsnovaProizv(osnova, "же")) { osnova = С_О_ret_orig(osnova); osnova = ZamOsnova(osnova, "же", "жг"); } else osnova += Lit(match.Groups["черед"].Value, 'a'); if (Glasnay(osnova[osnova.Length - 1])) osnova += "к"; } switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (OsnovaProizv(osnova, "жг")) { osnova = БезО_ret_orig(osnova); osnova = ZamOsnova_ro(osnova, "жг", "жёг"); } osnova = ZamOsnova_ro(osnova, "толк", "толок"); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "ла"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "ло"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "ли"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее if (OsnovaProizv(osnova, "ле")) osnova = ZamOsnova(osnova, "ле", "ляг"); else { if (OsnovaProizv(osnova, "мо")) osnova = ZamOsnova(osnova, "мо", "мог"); else if (OsnovaProizv(osnova, "толо")) osnova = ZamOsnova(osnova, "толо", "толк"); else if (OsnovaProizv(osnova, "же")) { osnova = С_О_ret_orig(osnova); osnova = ZamOsnova(osnova, "же", "жг"); } else osnova += Lit(match.Groups["черед"].Value, 'a'); if (Glasnay(osnova[osnova.Length - 1])) osnova += "к"; } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо switch (osnova[osnova.Length - 1]) { case 'г': osnova = ZamLit(osnova, 'ж'); break; case 'к': osnova = ZamLit(osnova, 'ч'); break; } osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 9: slovo = Osnova(osnova, "(?<окончание>(еть)|(еться))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova = ZamOsnova_ro(osnova, "ер", "ри"); if (OsnovaProizv(osnova, "растри") || OsnovaProizv(osnova, "распри") || OsnovaProizv(osnova, "истри")) { osnova = ZamСловоВнутри_or(osnova, "рас", "разо", 'a'); osnova = ZamСловоВнутри_or(osnova, "ис", "изо", 'a'); } else { osnova = С_О_ret_orig(osnova); if (!OsnovaProizv(osnova, "отопри") && !Приставка(osnova)) { osnova = ZamOsnova_ro(osnova, "опри", "обопри"); } osnova = ZamСловоВнутри_or(osnova, "отори", "отри", 'b'); } if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "ла"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "ло"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "ли"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее osnova = ZamOsnova_ro(osnova, "ер", "р"); if (OsnovaProizv(osnova, "растр") || OsnovaProizv(osnova, "распр") || OsnovaProizv(osnova, "истр")) { osnova = ZamСловоВнутри_or(osnova, "рас", "разо", 'a'); osnova = ZamСловоВнутри_or(osnova, "ис", "изо", 'a'); } else { osnova = С_О_ret_orig(osnova); if (!OsnovaProizv(osnova, "отопр") && !Приставка(osnova)) osnova = ZamOsnova_ro(osnova, "опр", "обопр"); osnova = ZamСловоВнутри_or(osnova, "отор", "отр", 'b'); } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее osnova = ZamOsnova_ro(osnova, "ер", "р"); if (OsnovaProizv(osnova, "растр") || OsnovaProizv(osnova, "распр") || OsnovaProizv(osnova, "истр")) { osnova = ZamСловоВнутри_or(osnova, "рас", "разо", 'a'); osnova = ZamСловоВнутри_or(osnova, "ис", "изо", 'a'); } else { osnova = С_О_ret_orig(osnova); if (!OsnovaProizv(osnova, "отопр") && !Приставка(osnova)) osnova = ZamOsnova_ro(osnova, "опр", "обопр"); osnova = ZamСловоВнутри_or(osnova, "отор", "отр", 'b'); } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova = ZamOsnova_ro(osnova, "ер", "ри"); if (OsnovaProizv(osnova, "растри") || OsnovaProizv(osnova, "распри") || OsnovaProizv(osnova, "истри")) { osnova = ZamСловоВнутри_or(osnova, "рас", "разо", 'a'); osnova = ZamСловоВнутри_or(osnova, "ис", "изо", 'a'); } else { osnova = С_О_ret_orig(osnova); if (!OsnovaProizv(osnova, "отопри") && !Приставка(osnova)) osnova = ZamOsnova_ro(osnova, "опри", "обопри"); osnova = ZamСловоВнутри_or(osnova, "отори", "отри", 'b'); } if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "ла"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "ло"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "ли"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее osnova = ZamOsnova_ro(osnova, "ер", "р"); if (OsnovaProizv(osnova, "растр") || OsnovaProizv(osnova, "распр") || OsnovaProizv(osnova, "истр")) { osnova = ZamСловоВнутри_or(osnova, "рас", "разо", 'a'); osnova = ZamСловоВнутри_or(osnova, "ис", "изо", 'a'); } else { osnova = С_О_ret_orig(osnova); if (!OsnovaProizv(osnova, "отопр") && !Приставка(osnova)) osnova = ZamOsnova_ro(osnova, "опр", "обопр"); osnova = ZamСловоВнутри_or(osnova, "отор", "отр", 'b'); } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ёшь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ёт"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ём"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ёте"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 10: slovo = Osnova(osnova, "(?<окончание>(оть)|(оться))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova = ZamСловоВнутри_or(osnova, "мол", "мел", 'a') + "и"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее osnova = ZamСловоВнутри_or(osnova, "мол", "мел", 'a'); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее osnova = ZamСловоВнутри_or(osnova, "мол", "мел", 'a'); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova = ZamСловоВнутри_or(osnova, "мол", "мел", 'a') + "и"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее osnova = ZamСловоВнутри_or(osnova, "мол", "мел", 'a'); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 11: slovo = Osnova(osnova, "(?<окончание>(ить)|(иться))"); osnova = slovo.Groups["основа"].Value; switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += "ей"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее if (Приставка(osnova)) { osnova = ZamСловоВнутри_or(osnova, "рас", "раз", 'a'); osnova = ZamСловоВнутри_or(osnova, "оп", "об", 'a'); osnova = ZamСловоВнутри_or(osnova, "и(з|с)", "из", 'a'); if (osnova.Length > 1) { osnova = С_О_ret_orig(osnova); if (osnova[0] == 'в' && !Glasnay(osnova[1])) osnova = "во" + osnova.Substring(1); } } osnova += "ь"; osnova = ZamСловоВнутри_or(osnova, "оь", "о" + slovo.Groups["основа"].Value[slovo.Groups["основа"].Value.Length - 1] + "ь", 'a'); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее if (Приставка(osnova)) { osnova = ZamСловоВнутри_or(osnova, "рас", "раз", 'a'); osnova = ZamСловоВнутри_or(osnova, "оп", "об", 'a'); osnova = ZamСловоВнутри_or(osnova, "и(з|с)", "из", 'a'); if (osnova.Length > 1) { osnova = С_О_ret_orig(osnova); if (osnova[0] == 'в' && !Glasnay(osnova[1])) osnova = "во" + osnova.Substring(1); } } osnova += "ь"; osnova = ZamСловоВнутри_or(osnova, "оь", "о" + slovo.Groups["основа"].Value[slovo.Groups["основа"].Value.Length - 1] + "ь", 'a'); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += "ей"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее if (Приставка(osnova)) { osnova = ZamСловоВнутри_or(osnova, "рас", "раз", 'a'); osnova = ZamСловоВнутри_or(osnova, "оп", "об", 'a'); osnova = ZamСловоВнутри_or(osnova, "и(з|с)", "из", 'a'); if (osnova.Length > 1) { osnova = С_О_ret_orig(osnova); if (osnova[0] == 'в' && !Glasnay(osnova[1])) osnova = "во" + osnova.Substring(1); } } osnova += "ь"; osnova = ZamСловоВнутри_or(osnova, "оь", "о" + slovo.Groups["основа"].Value[slovo.Groups["основа"].Value.Length - 1] + "ь", 'a'); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 12: slovo = Osnova(osnova, "(?<окончание>(ыть)|(ыться)|(уть)|(уться)|(еть)|(еться)|(ить)|(иться))"); osnova = slovo.Groups["основа"].Value; if (osnova.Length > 0) switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (OsnovaProizv(osnova, "бр")) osnova += "ей"; else if (OsnovaProizv(slovo.Value, "(петь)|(петься)")) osnova += "ой"; else switch (slovo.Groups["окончание"].Value[0]) { case 'ы': osnova += "ой"; break; default: osnova = osnova + slovo.Groups["окончание"].Value[0] + "й"; break; } if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее if (OsnovaProizv(osnova, "бр")) osnova += "е"; else if (OsnovaProizv(slovo.Value, "(петь)|(петься)")) osnova += "о"; else switch (slovo.Groups["окончание"].Value[0]) { case 'ы': osnova += "о"; break; default: osnova = osnova + slovo.Groups["окончание"].Value[0]; break; } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее if (OsnovaProizv(osnova, "бр")) osnova += "е"; else if (OsnovaProizv(slovo.Value, "(петь)|(петься)")) osnova += "о"; else switch (slovo.Groups["окончание"].Value[0]) { case 'ы': osnova += "о"; break; default: osnova = osnova + slovo.Groups["окончание"].Value[0]; break; } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (OsnovaProizv(osnova, "бр")) osnova += "ей"; else if (OsnovaProizv(slovo.Value, "(петь)|(петься)")) osnova += "ой"; else switch (slovo.Groups["окончание"].Value[0]) { case 'ы': osnova += "ой"; break; default: osnova = osnova + slovo.Groups["окончание"].Value[0] + "й"; break; } if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее if (OsnovaProizv(osnova, "бр")) osnova += "е"; else if (OsnovaProizv(slovo.Value, "(петь)|(петься)")) osnova += "о"; else switch (slovo.Groups["окончание"].Value[0]) { case 'ы': osnova += "о"; break; default: osnova = osnova + slovo.Groups["окончание"].Value[0]; break; } switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 13: slovo = Osnova(osnova, "(?<окончание>(вать)|(ваться))"); osnova = slovo.Groups["основа"].Value; if (osnova.Length > 0) switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += "вай"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova += "вал"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ёшь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ёт"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ём"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ёте"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ёшь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ёт"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ём"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ёте"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += "вай"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova += "вал"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "ю"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ёшь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ёт"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ём"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ёте"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ют"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 14: slovo = Osnova(osnova, "(?<окончание>(ать)|(аться)|(ять)|(яться))"); osnova = slovo.Groups["основа"].Value; if (osnova.Length > 0) switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (match.Groups["буд"].Value != "") osnova = Чередов(match.Groups["буд"].Value) + "и"; else osnova = osnova + Чередов(match.Groups["черед"].Value) + "и"; if (match.Groups["index"].Value == "") osnova = ZamПриставка(osnova, "(из)|(под)|(над)|(в)|(раз)|(с)|(об)|(от)", 'о'); else if (match.Groups["index"].Value == "с" && match.Groups["буд"].Value == "" && match.Groups["черед"].Value != "(-им-)") osnova = ZamПриставка(osnova, "(раз)|(из)|(от)", 'ы'); osnova = ZamСловоВнутри_or(osnova, "ъи", "ми", 'c'); if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее if (match.Groups["буд"].Value != "") osnova = Чередов(match.Groups["буд"].Value); else osnova = osnova + Чередов(match.Groups["черед"].Value); if (match.Groups["index"].Value == "") osnova = ZamПриставка(osnova, "(из)|(под)|(над)|(в)|(раз)|(с)|(об)|(от)", 'о'); else if (match.Groups["index"].Value == "с" && match.Groups["буд"].Value == "" && match.Groups["черед"].Value != "(-им-)") osnova = ZamПриставка(osnova, "(раз)|(из)|(от)", 'ы'); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; osnova = ZamСловоВнутри_or(osnova, "ъу", "му", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; osnova = ZamСловоВнутри_or(osnova, "ъешь", "мешь", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; osnova = ZamСловоВнутри_or(osnova, "ъет", "мет", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; osnova = ZamСловоВнутри_or(osnova, "ъем", "мем", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; osnova = ZamСловоВнутри_or(osnova, "ъете", "мете", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; osnova = ZamСловоВнутри_or(osnova, "ъут", "мут", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее if (match.Groups["буд"].Value != "") osnova = Чередов(match.Groups["буд"].Value); else osnova = osnova + Чередов(match.Groups["черед"].Value); if (match.Groups["index"].Value == "") osnova = ZamПриставка(osnova, "(из)|(под)|(над)|(в)|(раз)|(с)|(об)|(от)", 'о'); else if (match.Groups["index"].Value == "с" && match.Groups["буд"].Value == "" && match.Groups["черед"].Value != "(-им-)") osnova = ZamПриставка(osnova, "(раз)|(из)|(от)", 'ы'); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; osnova = ZamСловоВнутри_or(osnova, "ъу", "му", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; osnova = ZamСловоВнутри_or(osnova, "ъешь", "мешь", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; osnova = ZamСловоВнутри_or(osnova, "ъет", "мет", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; osnova = ZamСловоВнутри_or(osnova, "ъем", "мем", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; osnova = ZamСловоВнутри_or(osnova, "ъете", "мете", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; osnova = ZamСловоВнутри_or(osnova, "ъут", "мут", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { if (match.Groups["буд"].Value != "") osnova = Чередов(match.Groups["буд"].Value) + "и"; else osnova = osnova + Чередов(match.Groups["черед"].Value) + "и"; if (match.Groups["index"].Value == "") osnova = ZamПриставка(osnova, "(из)|(под)|(над)|(в)|(раз)|(с)|(об)|(от)", 'о'); else if (match.Groups["index"].Value == "с" && match.Groups["буд"].Value == "" && match.Groups["черед"].Value != "(-им-)") osnova = ZamПриставка(osnova, "(раз)|(из)|(от)", 'ы'); osnova = ZamСловоВнутри_or(osnova, "ъи", "ми", 'c'); if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее if (match.Groups["буд"].Value != "") osnova = Чередов(match.Groups["буд"].Value); else osnova = osnova + Чередов(match.Groups["черед"].Value); if (match.Groups["index"].Value == "") osnova = ZamПриставка(osnova, "(из)|(под)|(над)|(в)|(раз)|(с)|(об)|(от)", 'о'); else if (match.Groups["index"].Value == "с" && match.Groups["буд"].Value == "" && match.Groups["черед"].Value != "(-им-)") osnova = ZamПриставка(osnova, "(раз)|(из)|(от)", 'ы'); switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; osnova = ZamСловоВнутри_or(osnova, "ъу", "му", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; osnova = ZamСловоВнутри_or(osnova, "ъешь", "мешь", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; osnova = ZamСловоВнутри_or(osnova, "ъет", "мет", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; osnova = ZamСловоВнутри_or(osnova, "ъем", "мем", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; osnova = ZamСловоВнутри_or(osnova, "ъёте", "мете", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; osnova = ZamСловоВнутри_or(osnova, "ъут", "мут", 'c'); if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 15: slovo = Osnova(osnova, "(?<окончание>(ть)|(ться))"); osnova = slovo.Groups["основа"].Value; if (osnova.Length > 0) switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += "нь"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; } else switch (VremyElRus()) { case 1://прошедшее osnova += "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее osnova += "н"; switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее osnova += "н"; switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += "нь"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; } else switch (VremyElRus()) { case 1://прошедшее osnova += "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее osnova += "н"; switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; case 16: slovo = Osnova(osnova, "(?<окончание>(ть)|(ться))"); osnova = slovo.Groups["основа"].Value; if (osnova.Length > 0) switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += "ви"; if (ChisloElRus() > 0) osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova += "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее osnova += "в"; switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ёшь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ёт"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ём"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ёте"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее osnova += "в"; switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ёшь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ёт"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ём"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ёте"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { osnova += "ви"; if (ChisloElRus() > 0) osnova += "те"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } else switch (VremyElRus()) { case 1://прошедшее osnova += "л"; switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: osnova += "а"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: osnova += "о"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число osnova += "и"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее osnova += "в"; switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо osnova += "у"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; case 2://2 лицо osnova += "ёшь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо osnova += "ёт"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо osnova += "ём"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо osnova += "ёте"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; } break; } break; } } if (match.Groups["type"].Value == "" || !match.Success)//изолированные глаголы { Match slovo = Osnova(osnova, "(?<окончание>(хать)|(хаться))"); if (!slovo.Success) { slovo = Osnova(osnova, "(?<окончание>(шибить)|(шибиться))"); if (!slovo.Success) slovo = Osnova(osnova, "(?<окончание>(ыть)|(ыться)|(сться)|(сть)|(ти)|(тись)|(еть)|(еться)|(ить)|(иться)|(ать)|(аться))"); } osnova = slovo.Groups["основа"].Value; if (osnova.Length > 0) switch (VidElRus()) { case 1://совершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { switch (slovo.Groups["окончание"].Value[0]) { case 'ш': osnova += "шиби"; break; case 'а': osnova = osnova + slovo.Groups["окончание"].Value[0] + "й"; break; case 'ы': osnova += "удь"; break; case 'с': if (osnova[osnova.Length - 1] == 'е') osnova += "шь"; else osnova += "ни"; break; case 'т': if (osnova[osnova.Length - 1] == 'й') { osnova += "ди"; osnova = ZamСловоВнутри_or(osnova, "прийди", "приди", 'a'); } else osnova += "и"; break; case 'х': osnova = ZamСловоВнутри_or(slovo.Value, "ехать", "езжай", 'a'); break; case 'и': if (osnova[osnova.Length - 1] == 'б') osnova += "ли"; else osnova += "и"; break; default: osnova += "и"; break; } if (ChisloElRus() > 0) { osnova += "те"; } if (c.zalog == Zalog.Vozvratniy) { if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } osnova = ZamСловоВнутри_or(osnova, "ьсь", "ься", 'a'); } else switch (VremyElRus()) { case 1://прошедшее switch (slovo.Groups["окончание"].Value[0]) { case 'ш': osnova += "шиб"; break; case 'с': osnova += "л"; break; case 'т': { osnova = ZamСловоВнутри_or(slovo.Value, "((ид)|(й))ти", "шёл", 'a'); break; } case 'х': osnova += "хал"; break; default: osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; break; } switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: if (slovo.Groups["окончание"].Value[0] == 'ш') osnova += "л"; osnova += "а"; osnova = ZamСловоВнутри_or(osnova, "шёл", "шл", 'a'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: if (slovo.Groups["окончание"].Value[0] == 'ш') osnova += "л"; osnova += "о"; osnova = ZamСловоВнутри_or(osnova, "шёл", "шл", 'a'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число if (slovo.Groups["окончание"].Value[0] == 'ш') osnova += "л"; osnova += "и"; osnova = ZamСловоВнутри_or(osnova, "шёл", "шл", 'a'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (slovo.Groups["окончание"].Value[0]) { case 'ш': osnova += "шиб"; break; case 'ы': osnova += "уд"; break; case 'т': if (osnova[osnova.Length - 1] == 'й') { osnova += "д"; } break; case 'с': if (osnova[osnova.Length - 1] == 'я') osnova += "н"; break; case 'х': osnova += "д"; break; case 'и': if (osnova[osnova.Length - 1] == 'б') osnova += "л"; break; } Match n = Osnova_(slovo.Value, "(есть)|(дать)", 'b'); if (n.Success && slovo.Groups["окончание"].Value[0] == 'а') osnova += "а"; switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (n.Success) osnova += "м"; else if (OsnovaProizv(osnova, "зыбл")) osnova += "ю"; else osnova += "у"; if (c.zalog == Zalog.Vozvratniy) { if (osnova[osnova.Length - 1] != 'м') osnova += "сь"; else osnova += "ся"; } break; case 2://2 лицо if (n.Success) osnova += "шь"; else osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо if (n.Success) osnova += "ст"; else osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо if (n.Success) osnova += "дим"; else osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо if (n.Success) osnova += "дите"; else osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо if (n.Success) { osnova += "дят"; if (slovo.Groups["окончание"].Value[0] == 'а') osnova = ZamСловоВнутри_or(osnova, "дадят", "дадут", 'a'); } else if (OsnovaProizv(osnova, "зыбл")) osnova += "ют"; else osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } break; default://настоящее if (osnova == "б") { osnova = ZamСловоВнутри_or(slovo.Value, "быть", "есть", 'a'); } else { switch (slovo.Groups["окончание"].Value[0]) { case 'т': if (osnova[osnova.Length - 1] == 'й') { osnova += "д"; } break; case 'ш': osnova += "шиб"; break; case 'ы': osnova += "уд"; break; case 'с': if (osnova[osnova.Length - 1] == 'я') osnova += "н"; break; case 'х': osnova += "д"; break; case 'и': if (osnova[osnova.Length - 1] == 'б') osnova += "л"; break; } Match n1 = Osnova_(slovo.Value, "(есть)|(дать)", 'b'); if (n1.Success && slovo.Groups["окончание"].Value[0] == 'а') osnova += "а"; switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (n1.Success) osnova += "м"; else if (OsnovaProizv(osnova, "зыбл")) osnova += "ю"; else osnova += "у"; if (c.zalog == Zalog.Vozvratniy) { if (osnova[osnova.Length - 1] != 'м') osnova += "сь"; else osnova += "ся"; } break; case 2://2 лицо if (n1.Success) osnova += "шь"; else osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо if (n1.Success) osnova += "ст"; else osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо if (n1.Success) osnova += "дим"; else osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо if (n1.Success) osnova += "дите"; else osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо if (n1.Success) { osnova += "дят"; if (slovo.Groups["окончание"].Value[0] == 'а') osnova = ZamСловоВнутри_or(osnova, "дадят", "дадут", 'a'); } else if (OsnovaProizv(osnova, "зыбл")) osnova += "ют"; else osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } } break; } break; default://несовершенный if (c.naklonenie == Naklonenie.Povelitelnoe) { switch (slovo.Groups["окончание"].Value[0]) { case 'ш': osnova += "шиби"; break; case 'а': osnova = osnova + slovo.Groups["окончание"].Value[0] + "й"; break; case 'ы': osnova += "удь"; break; case 'с': if (osnova[osnova.Length - 1] == 'е') osnova += "шь"; else osnova += "ни"; break; case 'т': if (osnova[osnova.Length - 1] == 'й') { osnova += "ди"; osnova = ZamСловоВнутри_or(osnova, "прийди", "приди", 'a'); } else osnova += "и"; break; case 'х': osnova = ZamСловоВнутри_or(slovo.Value, "ехать", "езжай", 'a'); break; case 'и': if (osnova[osnova.Length - 1] == 'б') osnova += "ли"; else osnova += "и"; break; default: osnova += "и"; break; } if (ChisloElRus() > 0) { osnova += "те"; } if (c.zalog == Zalog.Vozvratniy) { if (osnova[osnova.Length - 1] == 'й') osnova += "ся"; else osnova += "сь"; } osnova = ZamСловоВнутри_or(osnova, "ьсь", "ься", 'a'); } else switch (VremyElRus()) { case 1://прошедшее switch (slovo.Groups["окончание"].Value[0]) { case 'с': osnova += "л"; break; case 'т': osnova = ZamСловоВнутри_or(slovo.Value, "((ид)|(й))ти", "шёл", 'a'); break; case 'х': osnova += "хал"; break; case 'ш': osnova += "шиб"; break; default: osnova = osnova + slovo.Groups["окончание"].Value[0].ToString() + "л"; break; } switch (ChisloElRus()) { case 0://ед.число switch (c.rod) { case Rod.Muzhskoj: if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case Rod.Zhenskij: if (slovo.Groups["окончание"].Value[0] == 'ш') osnova += "л"; osnova += "а"; osnova = ZamСловоВнутри_or(osnova, "шёл", "шл", 'a'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default: if (slovo.Groups["окончание"].Value[0] == 'ш') osnova += "л"; osnova += "о"; osnova = ZamСловоВнутри_or(osnova, "шёл", "шл", 'a'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 1://множ.число if (slovo.Groups["окончание"].Value[0] == 'ш') osnova += "л"; osnova += "и"; osnova = ZamСловоВнутри_or(osnova, "шёл", "шл", 'a'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; } break; case 2://будущее switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (slovo.Groups["окончание"].Value[0] == 'ы') osnova = ZamСловоВнутри_or(slovo.Value, "быть", "буду", 'a'); else osnova = "буду " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо if (slovo.Groups["окончание"].Value[0] == 'ы') osnova = ZamСловоВнутри_or(slovo.Value, "быть", "будешь", 'a'); else osnova = "будешь " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо if (slovo.Groups["окончание"].Value[0] == 'ы') osnova = ZamСловоВнутри_or(slovo.Value, "быть", "будет", 'a'); else osnova = "будет " + osnova + slovo.Groups["окончание"].Value; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо if (slovo.Groups["окончание"].Value[0] == 'ы') osnova = ZamСловоВнутри_or(slovo.Value, "быть", "будем", 'a'); else osnova = "будем " + osnova + slovo.Groups["окончание"].Value; break; case 2://2 лицо if (slovo.Groups["окончание"].Value[0] == 'ы') osnova = ZamСловоВнутри_or(slovo.Value, "быть", "будете", 'a'); else osnova = "будете " + osnova + slovo.Groups["окончание"].Value; break; default://3 лицо if (slovo.Groups["окончание"].Value[0] == 'ы') osnova = ZamСловоВнутри_or(slovo.Value, "быть", "будут", 'a'); else osnova = "будут " + osnova + slovo.Groups["окончание"].Value; break; } break; } if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://настоящее if (slovo.Groups["окончание"].Value[0] == 'ы') { osnova = ZamСловоВнутри_or(slovo.Value, "быть", "есть", 'a'); } else { switch (slovo.Groups["окончание"].Value[0]) { case 'ш': osnova += "шиб"; break; case 'т': if (osnova[osnova.Length - 1] == 'й') { osnova += "д"; } break; case 'с': if (osnova[osnova.Length - 1] == 'я') osnova += "н"; break; case 'х': osnova += "д"; break; case 'и': if (osnova[osnova.Length - 1] == 'б') osnova += "л"; break; } Match n = Osnova_(slovo.Value, "(есть)|(дать)", 'b'); if (n.Success && slovo.Groups["окончание"].Value[0] == 'а') osnova += "а"; switch (ChisloElRus()) { case 0://ед.число switch (lico) { case 1://1 лицо if (n.Success) osnova += "м"; else if (OsnovaProizv(osnova, "зыбл")) osnova += "ю"; else osnova += "у"; if (c.zalog == Zalog.Vozvratniy) { if (osnova[osnova.Length - 1] != 'м') osnova += "сь"; else osnova += "ся"; } break; case 2://2 лицо if (n.Success) osnova += "шь"; else osnova += "ешь"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; default://3 лицо if (n.Success) osnova += "ст"; else osnova += "ет"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; case 1://множ.число switch (lico) { case 1://1 лицо if (n.Success) osnova += "дим"; else osnova += "ем"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; case 2://2 лицо if (n.Success) osnova += "дите"; else osnova += "ете"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://3 лицо if (n.Success) { osnova += "дят"; if (slovo.Groups["окончание"].Value[0] == 'а') osnova = ZamСловоВнутри_or(osnova, "дадят", "дадут", 'a'); } else if (OsnovaProizv(osnova, "зыбл")) osnova += "ют"; else osnova += "ут"; if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; break; } break; } } break; } break; } } /*osnova=ZamСловоВнутри_or(osnova, "ьсь", "ься", 'a'); newSlovoRus =osnova= ZamСловоВнутри_or(osnova, "йсь", "йся", 'a');*/ // MessageBox.Show(osnova); if (c.naklonenie == Naklonenie.Povelitelnoe) { if (Pom(arPometa, "2")) { Match a = Osnova_(osnova, "и|й", 'c'); if (a.Groups["часть1"].Value + a.Groups["часть2"].Value != osnova) a = Osnova_(osnova, "(и|й)((те)|(сь))", 'c'); if (a.Groups["часть1"].Value + a.Groups["часть2"].Value != osnova) a = Osnova_(osnova, "(и|й)тесь", 'c'); if (a.Success && (a.Groups["часть1"].Value + a.Groups["часть2"].Value == osnova)) { if (Glasnay(a.Groups["часть1"].Value)) osnova = a.Groups["часть1"].Value + "й"; else osnova = a.Groups["часть1"].Value + "ь"; if (ChisloElRus() > 0) { osnova += "те"; if (c.zalog == Zalog.Vozvratniy)osnova += "сь"; } else if (c.zalog == Zalog.Vozvratniy) osnova += "ся"; } } else if (Pom(arPometa, "3")) { Match a = Osnova_(osnova, "(и|ь)тесь", 'c'); if (a.Groups["часть1"].Value + a.Groups["часть2"].Value != osnova) a = Osnova_(osnova, "(и|ь)((те)|(сь))", 'c'); if (a.Groups["часть1"].Value + a.Groups["часть2"].Value != osnova) a = Osnova_(osnova, "и|ь", 'c'); if (a.Success && (a.Groups["часть1"].Value + a.Groups["часть2"].Value == osnova)) { if (ChisloElRus() < 1) osnova = a.Groups["часть1"].Value + "и"; else { osnova = a.Groups["часть1"].Value + "ьте"; } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } } } newSlovoRus = osnova; if (haract == Haract.деепричастие) { string i = match.Groups["type"].Value; switch (VremyElRus()) { case 0://настоящ if (SlovoRus == "быть") osnova = "будучи"; else { Match slovo = null; if (i == "13") slovo = Osnova_(osnova, "ть", 'c'); else slovo = Osnova(osnova, "((ю|(у|я|а)т)(ся)?)"); if (slovo.Success) { osnova = slovo.Groups["основа"].Value; if (Ship(osnova)) osnova += "а"; else { osnova += "я"; } } } if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; break; default://прош Match b; if (SlovoRus == "идти") osnova = "шедши"; else if (Pom(arPometa, "9")) { //MessageBox.Show(osnova,"вход"); b = Osnova(osnova, "(?<окончание>усь)"); //if (b.Success) MessageBox.Show(b.Groups["окончание"].Value); if (b.Success && (b.Groups["основа"].Value + b.Groups["окончание"].Value == osnova)) { osnova = b.Groups["основа"].Value + "я"; } else if (osnova[osnova.Length - 1] == 'у') osnova = ZamLit(osnova, 'я'); if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; //MessageBox.Show(osnova,"выход"); } else { b = Osnova_(osnova, "л(ся)?", 'c'); if (b.Success && (b.Groups["часть1"].Value + b.Groups["часть2"].Value) == osnova) { //"вший"; /*if (i == "9" && c.zalog != Zalog.Vozvratniy && OsnovaProizv("ереть(ся)?")) { b = Osnova_(osnova, "ереть(ся)?", 'c'); if (b.Success && (b.Groups["часть1"].Value + b.Groups["часть2"].Value) == osnova) osnova = b.Groups["часть1"].Value + "ерев"; } else*/ { osnova = b.Groups["часть1"].Value + "в"; if (c.zalog == Zalog.Vozvratniy) osnova += "шись"; } } else//ший { if (Pom(arPometa, "6")) { b = Osnova_(osnova, "ся", 'c'); if (b.Success && (b.Groups["часть1"].Value + b.Groups["часть2"].Value) == osnova) osnova = b.Groups["часть1"].Value + "нув"; else osnova += "нув"; if (c.zalog == Zalog.Vozvratniy) osnova += "шись"; } else { if (((match.Groups["type"].Value == "7" && match.Groups["черед"].Value == "(-д-)" || match.Groups["type"].Value == "7" && match.Groups["черед"].Value == "(-т-)")) && OsnovaProizv(SlovoRus, "сти(сь)?")) { b = Osnova(osnova, "усь"); if (!b.Success) { if (osnova[osnova.Length - 1] == 'у') osnova = osnova.Substring(0, osnova.Length - 1); } else osnova = b.Groups["основа"].Value; } else { b = Osnova_(osnova, "ся", 'c'); if (b.Success && (b.Groups["часть1"].Value + b.Groups["часть2"].Value) == osnova) osnova = b.Groups["часть1"].Value; } osnova += "ши"; if (c.zalog == Zalog.Vozvratniy) osnova += "сь"; } } } break; } newSlovoRus = osnova; } if (c.naklonenie == Naklonenie.Soslagatelnoe) newSlovoRus += " бы"; } return newSlovoRus; }