Exemplo n.º 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;
		}
Exemplo n.º 2
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;


        }
Exemplo n.º 3
0
		protected RuMorf OsoboeCheredovanie(string ishodnaya,RuMorf izmRuMorf,char firstIndex,RuChislo chislo,RuPadezh padezh,Odushevlennost odush)
		{
			ETRNoun.RuMorf newRuMorf =izmRuMorf;
			switch(firstIndex)
			{
				case '1':
					if(chislo == RuChislo.Mnozhestvennoe)
					{
						newRuMorf.osnova = newRuMorf.osnova.Substring(0,newRuMorf.osnova.Length-2);
						switch(padezh)
						{
							case RuPadezh.Imenitelniy:
								newRuMorf.okonchanie = "е";
								break;
							case RuPadezh.Roditelniy:
								newRuMorf.okonchanie = "";
								break;
							case RuPadezh.Vinitelniy:
								if(odush == Odushevlennost.Odushevlennoe)
									newRuMorf.okonchanie = "";
								else newRuMorf.okonchanie = "е";
								break;
						}
					}
					break;
				case '3':
					switch(chislo)
					{
						case RuChislo.Edinstvennoe:
							newRuMorf.osnova = BeglayaGlasnaya(newRuMorf.osnova,newRuMorf.okonchanie,ishodnaya, RuRod.Muzhskoj,'3',false,false);
							break;
						case RuChislo.Mnozhestvennoe:
							newRuMorf.osnova = newRuMorf.osnova.Replace("ёнок","ят");
							newRuMorf.osnova = newRuMorf.osnova.Replace("енок","ят");
							newRuMorf.osnova = newRuMorf.osnova.Replace("онок","ат");
							newRuMorf.osnova = newRuMorf.osnova.Replace("ёночек","ятк");
							newRuMorf.osnova = newRuMorf.osnova.Replace("еночек","ятк");
							newRuMorf.osnova = newRuMorf.osnova.Replace("оночек","атк");
							if(newRuMorf.osnova.IndexOf("ятк")!=-1||newRuMorf.osnova.IndexOf("атк")!=-1)
							{
								newRuMorf.okonchanie = OkonchanieSklonenia("",'3',padezh,RuRod.Zhenskij,odush,false,false, RuChislo.Mnozhestvennoe,false,false);
							}
							else
							{
								newRuMorf.okonchanie = OkonchanieSklonenia("",'3',padezh,RuRod.Srednij,odush,false,false, RuChislo.Mnozhestvennoe,false,false);
							}
							break;
					}
					break;
				case '8':
					switch(chislo)
					{
						case RuChislo.Edinstvennoe:
							switch(padezh)
							{
								case RuPadezh.Imenitelniy:
								case RuPadezh.Vinitelniy:
									newRuMorf.okonchanie = "я";
									break;
								case RuPadezh.Roditelniy:
								case RuPadezh.Datelniy:
								case RuPadezh.Predlozhniy:
									newRuMorf.okonchanie = "и";
									break;
								case RuPadezh.Tvoritelniy:
									newRuMorf.okonchanie = "ем";
									break;
							}
							break;
						case RuChislo.Mnozhestvennoe:
							switch(padezh)
							{
								case RuPadezh.Imenitelniy:
								case RuPadezh.Vinitelniy:
									newRuMorf.okonchanie = "а";
									break;
								case RuPadezh.Roditelniy:
									newRuMorf.okonchanie = "";
									break;
								case RuPadezh.Datelniy:
									newRuMorf.okonchanie = "ам";
									break;
								case RuPadezh.Predlozhniy:
									newRuMorf.okonchanie = "ах";
									break;
								case RuPadezh.Tvoritelniy:
									newRuMorf.okonchanie = "ами";
									break;
							}
							break;
					}
					if(!(chislo == RuChislo.Edinstvennoe && (padezh == RuPadezh.Imenitelniy || padezh == RuPadezh.Vinitelniy)))
						newRuMorf.osnova = newRuMorf.osnova.Insert(newRuMorf.osnova.Length,"ен");
					break;
			}
			return newRuMorf;
		}
Exemplo n.º 4
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());

        }