Esempio n. 1
0
        private UretimNesnesi uretimNesnesiUret(Kok kok, IList <Ek> ekler)
        {
            if (kok == null)
            {
                return(new UretimNesnesi(""));
            }
            UretimNesnesi ure    = new UretimNesnesi(kok.icerik());
            Kelime        kelime = new Kelime(kok, alfabe);

            if (ekler.Count > 1)
            {
                HarfDizisi ozelDurumSonrasi = kok.ozelDurumUygula(alfabe, ekler[1]);
                if (ozelDurumSonrasi != null)
                {
                    kelime.setIcerik(ozelDurumSonrasi);
                }
                else
                {
                    return(ure);
                }
            }
            else
            {
                return(ure);
            }

            for (int i = 0; i < ekler.Count; i++)
            {
                Ek ek = ekler[i];

                // eger incelenen ek onceki ekten sonra gelemezse cik.
                if (i > 0)
                {
                    Ek oncekiEk = ekler[i - 1];
                    if (!oncekiEk.ardindanGelebilirMi(ek))
                    {
                        return(ure);
                    }
                }



                //olusum icin kural belirle ve eki olustur.
                HarfDizisi ekOlusumu;
                if (i < ekler.Count - 1)
                {
                    ekOlusumu = new HarfDizisi(ek.olusumIcinUret(kelime, ekler[i + 1]));
                }
                else
                {
                    ekOlusumu = new HarfDizisi(ek.olusumIcinUret(kelime, TemelEkYonetici.BOS_EK));
                }

                //TODO: asagidaki bolum dil ozel. muhtemelen olusumIcinURet metodu duzletilirse gerek kalmaz.
                // ek son harf yumusatmayi kendimiz hallediyoruz (eger yalin ek ise bu islemi pas geciyoruz.)
                if (i > 1)
                {
                    if (kelime.sonHarf().sertMi() && ekOlusumu.ilkHarf().sesliMi())
                    {
                        kelime.icerik().sonHarfYumusat();
                    }
                }

                //eki kelimeye ve ek olusumlarina ekle.
                kelime.icerikEkle(ekOlusumu);
                if (ekOlusumu.Length > 0)
                {
                    ure.olusumlar.Add(ekOlusumu.ToString());
                }
                kelime.ekler().Add(ek);
            }

            //son duzeltmeleri uygula.
            yardimci.kelimeBicimlendir(kelime);
            ure.olusum = kelime.icerikStr();
            return(ure);
        }