예제 #1
0
		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;
		}
예제 #2
0
		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;
				}
			}
		}
예제 #3
0
        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());

        }
예제 #4
0
        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;


        }
예제 #5
0
        /// <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;
        }