public TurkceSesliUretici(Alfabe alfabe) { HARF_a = alfabe.harf('a'); HARF_e = alfabe.harf('e'); HARF_i = alfabe.harf('i'); HARF_ii = alfabe.harf(Alfabe.CHAR_ii); HARF_u = alfabe.harf('u'); HARF_uu = alfabe.harf(Alfabe.CHAR_uu); }
/// <summary> istenen noktadaki harfi giris parametresi olan TurkceHarf ile degistirir. /// /// </summary> /// <param name="index">degistirilecek indeks. /// </param> /// <param name="harf">kullanilacak harf /// </param> /// <throws> ArrayIndexOutOfBoundsException </throws> public void harfDegistir(int index, TurkceHarf harf) { if (index < 0 || index >= boy) { throw new System.IndexOutOfRangeException("indeks degeri:" + index + " fakat harf dizi boyu:" + boy); } dizi[index] = harf; }
public EkUreticiTr(Alfabe alfabe) { this.sesliUretici = new TurkceSesliUretici(alfabe); HARF_a = alfabe.harf('a'); HARF_e = alfabe.harf('e'); HARF_i = alfabe.harf('i'); HARF_ii = alfabe.harf(Alfabe.CHAR_ii); HARF_u = alfabe.harf('u'); HARF_uu = alfabe.harf(Alfabe.CHAR_uu); }
/// <summary> /// kelimenin sonuna harf ekler. /// </summary> /// <param name="harf">eklenecek harf /// </param> /// <returns> this /// </returns> public virtual HarfDizisi ekle(TurkceHarf harf) { if (boy == dizi.Length) { kapasiteAyarla(3); } dizi[boy++] = harf; return(this); }
public HarfDizisi subSequence(int start, int end) { if (end < start) { return(null); } TurkceHarf[] yeniHarfler = new TurkceHarf[end - start]; Array.Copy(dizi, start, yeniHarfler, 0, end - start); return(new HarfDizisi(yeniHarfler)); }
public TurkceHarf buyukHarf(char c) { TurkceHarf buyuk = buyukHarflerDizi[harf(c).alfabetikSira() - 1]; if (buyuk != null) { return(buyuk); } return(TANIMSIZ_HARF); }
public virtual TurkceHarf kucukHarf(TurkceHarf harf) { TurkceHarf kucuk = kucukHarflerDizi[harf.alfabetikSira() - 1]; if (kucuk != null) { return(kucuk); } return(TANIMSIZ_HARF); }
public TurkceHarf sesliBelirleIU(TurkceHarf sonSesli) { if (sonSesli.inceSesliMi() && sonSesli.duzSesliMi()) return HARF_i; if (!sonSesli.inceSesliMi() && sonSesli.duzSesliMi()) return HARF_ii; if (!sonSesli.inceSesliMi() && sonSesli.yuvarlakSesliMi()) return HARF_u; if (sonSesli.inceSesliMi() && sonSesli.yuvarlakSesliMi()) return HARF_uu; return Alfabe.TANIMSIZ_HARF; }
/** * istenilen kalin seslinin inceltilmis kopya halini dondurur. sadece ters sesli * ozel durumu isleminde kullanilmaslidir. * * @param kalinSesli * @return eger varsa karsilik dusen kalin sesli. yoksa seslinin kendisi. */ public TurkceHarf kalinSesliIncelt(TurkceHarf kalinSesli) { if (ozelInceSesliler.ContainsKey(kalinSesli)) { return(ozelInceSesliler[kalinSesli]); } else { return(kalinSesli); } }
public bool asciiToleransliKiyasla(TurkceHarf ha) { //eger harf icerikleri ayni degilse turkce-ascii donusumleri kiyaslanir. if (_charDeger != ha.charDeger()) { if (_asciiDonusum != null && _asciiDonusum.charDeger() == ha.charDeger()) return true; return _turkceDonusum != null && _turkceDonusum.charDeger() == ha.charDeger(); } return true; }
/// <summary> son harfi yumusatir. Eger harfin yumusamis formu yoksa harf degismez.</summary> public virtual void sonHarfYumusat() { if (boy == 0) { return; } TurkceHarf yum = dizi[boy - 1].yumusama(); if (yum != null) { dizi[boy - 1] = dizi[boy - 1].yumusama(); } }
public bool asciiToleransliKiyasla(TurkceHarf ha) { //eger harf icerikleri ayni degilse turkce-ascii donusumleri kiyaslanir. if (_charDeger != ha.charDeger()) { if (_asciiDonusum != null && _asciiDonusum.charDeger() == ha.charDeger()) { return(true); } return(_turkceDonusum != null && _turkceDonusum.charDeger() == ha.charDeger()); } return(true); }
public System.Object Clone() { TurkceHarf kopya = new TurkceHarf(_charDeger, _alfabetikSira); kopya.sert = sert; kopya.sesli = sesli; kopya.inceSesli = inceSesli; kopya.buyukHarf = buyukHarf; kopya.asciiDisi = asciiDisi; kopya.duzSesli = duzSesli; kopya.yuvarlakSesli = yuvarlakSesli; kopya._yumusama = _yumusama; kopya._sertDonusum = _sertDonusum; kopya._turkceDonusum = _turkceDonusum; kopya._asciiDonusum = _asciiDonusum; return(kopya); }
/// <summary> /// girilen pozisyona herf ekler, bu noktadan sonraki harfler otelenir. /// "armut" icin (2, a) "aramut" uretir. /// </summary> /// <param name="index">eklenecek pozisyon /// </param> /// <param name="harf">eklenecek harf. /// </param> /// <throws> ArrayIndexOutOfBoundsException </throws> public virtual void ekle(int index, TurkceHarf harf) { if (index < 0 || index > boy) { throw new System.IndexOutOfRangeException("index degeri:" + index + " fakat harf dizi boyu:" + boy); } if (boy == dizi.Length) { kapasiteAyarla(); } for (int i = boy - 1; i >= index; i--) { dizi[i + 1] = dizi[i]; } dizi[index] = harf; boy++; }
public void setSertDonusum(TurkceHarf sertDonusum) { this._sertDonusum = sertDonusum; }
public void setYumusama(TurkceHarf yumusama) { this._yumusama = yumusama; }
/** * harf dosyasindan harf bilgilerini okur ve TurkceHarf, ve alfabe sinifi icin gerekli * gerekli harf iliskili veri yapilarinin olusturur. */ private void harfBilgisiOlustur(IDictionary <String, String> bilgi) { String tumKucukler = ozellik(bilgi, HARFLER); String tumBuyukler = tumKucukler.ToUpper(locale); char[] kucukler = harfAyristir(tumKucukler); char[] buyukler = harfAyristir(tumBuyukler); //TurkceHarfleri olustur. for (int i = 0; i < kucukler.Length; i++) { char c = kucukler[i]; TurkceHarf harf = new TurkceHarf(c); harf.setAlfabetikSira(i + 1); harfler.Add(c, harf); turkceHarfDizisi[c] = harf; kucukHarflerDizi[i] = harf; temizlemeDizisi[c] = c; turkceMap[c] = true; asciifierDizisi[c] = c; } for (int i = 0; i < buyukler.Length; i++) { char c = buyukler[i]; TurkceHarf harf = new TurkceHarf(c); if (Char.IsLetter(c)) { harf.setBuyukHarf(true); } harf.setAlfabetikSira(i + 1); // TODO Bu if'i ekledim nokta karakteri sorun çıkarıyordu if (!harfler.ContainsKey(c)) { harfler.Add(c, harf); } buyukHarflerDizi[i] = harf; temizlemeDizisi[c] = kucukHarflerDizi[i].charDeger(); turkceHarfDizisi[c] = harf; } foreach (char c in harfAyristir(ozellik(bilgi, SESLI))) { harf(c).setSesli(true); buyukHarf(harfler[c]).setSesli(true); } foreach (char c in harfAyristir(ozellik(bilgi, INCE_SESLI))) { harf(c).setInceSesli(true); buyukHarf(c).setInceSesli(true); } foreach (char c in harfAyristir(ozellik(bilgi, DUZ_SESLI))) { harf(c).setDuzSesli(true); buyukHarf(c).setDuzSesli(true); } foreach (char c in harfAyristir(ozellik(bilgi, YUVARLAK_SESLI))) { harf(c).setYuvarlakSesli(true); buyukHarf(c).setYuvarlakSesli(true); } foreach (char c in harfAyristir(ozellik(bilgi, SERT))) { harf(c).setSert(true); buyukHarf(c).setSert(true); } asciiDisi = harfAyristir(ozellik(bilgi, ASCII_DISI)); foreach (char c in asciiDisi) { harf(c).setAsciiDisi(true); } foreach (char c in harfAyristir(ozellik(bilgi, AYIKLAMA))) { temizlemeDizisi[c] = ALFABE_DISI_KARAKTER; temizlemeDizisi[buyukHarf(c).charDeger()] = ALFABE_DISI_KARAKTER; } foreach (HarfCifti cift in harfCiftiAyristir(ozellik(bilgi, AYIKLAMA_DONUSUM))) { temizlemeDizisi[cift.h1] = cift.h2; temizlemeDizisi[buyukHarf(cift.h1).charDeger()] = buyukHarf(cift.h2).charDeger(); } List <HarfCifti> yumusamaDonusum = harfCiftiAyristir(ozellik(bilgi, YUMUSAMA_DONUSUM)); foreach (HarfCifti cift in yumusamaDonusum) { harf(cift.h1).setYumusama(harf(cift.h2)); buyukHarf(cift.h1).setYumusama(buyukHarf(cift.h2)); } // eger sert donusum bilgisi harf ozelliklerinde yar almazsa // yumusama donusumun tersi olarak uygulanir. if (bilgi.ContainsKey(SERT_DONUSUM)) { foreach (HarfCifti cift in harfCiftiAyristir(ozellik(bilgi, SERT_DONUSUM))) { harf(cift.h1).setSertDonusum(harf(cift.h2)); buyukHarf(cift.h1).setSertDonusum(buyukHarf(cift.h2)); } } else { foreach (HarfCifti cift in yumusamaDonusum) { harf(cift.h2).setSertDonusum(harf(cift.h1)); buyukHarf(cift.h2).setSertDonusum(buyukHarf(cift.h1)); } } List <HarfCifti> asciiDonusum = harfCiftiAyristir(ozellik(bilgi, TURKCE_ASCII)); foreach (HarfCifti cift in asciiDonusum) { asciifierDizisi[cift.h1] = cift.h2; harfler[cift.h1].setAsciiDonusum(harfler[cift.h2]); } // eger ascii-turkce donusum ikilileri harf dosyasinda belirtilimisse okunur. // yoksa turkce-ascii ikililerinin tersi kullanilarak harflerin turkceDonusum ozellikleri belirlenir. if (bilgi.ContainsKey(ASCII_TURKCE)) { foreach (HarfCifti cift in harfCiftiAyristir(ozellik(bilgi, ASCII_TURKCE))) { harfler[cift.h1].setTurkceDonusum(harfler[cift.h2]); } } else { foreach (HarfCifti cift in asciiDonusum) { harf(cift.h2).setTurkceDonusum(harf(cift.h1)); } } // bazi turkcelerde yabanci dillerden gelen bazi kokler normal kalin-kalin sesli // uretimini bozar. Eger harf ozelliklerinde belirtilmisse burada ince ozelligine sahip kalin // sesli kopyalari uretilir. bu harfler normal sesli listesnde yer almaz. kiyaslama sirasinda // kalin hali ile ayni kabul edilir. if (bilgi.ContainsKey(OZEL_INCE_SESLI)) { foreach (char c in harfAyristir(ozellik(bilgi, OZEL_INCE_SESLI))) { TurkceHarf inceltilmisKalinSesli = (TurkceHarf)harf(c).Clone(); inceltilmisKalinSesli.setInceSesli(true); ozelInceSesliler.Add(harf(c), inceltilmisKalinSesli); } } }
public TurkceHarf sesliBelirleAE(TurkceHarf sonSesli) { if (sonSesli.inceSesliMi()) return HARF_e; else return HARF_a; }
/// <summary> otomatik kapasite ayarlama. dizi boyu iki katina cikarilir.</summary> private void kapasiteAyarla() { TurkceHarf[] yeniDizi = new TurkceHarf[dizi.Length * 2]; Array.Copy(dizi, 0, yeniDizi, 0, dizi.Length); dizi = yeniDizi; }
/** * istenilen kalin seslinin inceltilmis kopya halini dondurur. sadece ters sesli * ozel durumu isleminde kullanilmaslidir. * * @param kalinSesli * @return eger varsa karsilik dusen kalin sesli. yoksa seslinin kendisi. */ public TurkceHarf kalinSesliIncelt(TurkceHarf kalinSesli) { if (ozelInceSesliler.ContainsKey(kalinSesli)) return ozelInceSesliler[kalinSesli]; else return kalinSesli; }
public void setTurkceDonusum(TurkceHarf turkceDonusum) { this._turkceDonusum = turkceDonusum; }
public TurkceHarf buyukHarf(TurkceHarf harf) { TurkceHarf buyuk = buyukHarflerDizi[harf.alfabetikSira() - 1]; if (buyuk != null) return buyuk; return TANIMSIZ_HARF; }
public virtual TurkceHarf kucukHarf(TurkceHarf harf) { TurkceHarf kucuk = kucukHarflerDizi[harf.alfabetikSira() - 1]; if (kucuk != null) return kucuk; return TANIMSIZ_HARF; }
public EkUretimBileseni(UretimKurali kural, TurkceHarf harf) { this._kural = kural; this._harf = harf; }
/** * harf dosyasindan harf bilgilerini okur ve TurkceHarf, ve alfabe sinifi icin gerekli * gerekli harf iliskili veri yapilarinin olusturur. */ private void harfBilgisiOlustur(IDictionary<String, String> bilgi) { String tumKucukler = ozellik(bilgi, HARFLER); String tumBuyukler = tumKucukler.ToUpper(locale); char[] kucukler = harfAyristir(tumKucukler); char[] buyukler = harfAyristir(tumBuyukler); //TurkceHarfleri olustur. for (int i = 0; i < kucukler.Length; i++) { char c = kucukler[i]; TurkceHarf harf = new TurkceHarf(c); harf.setAlfabetikSira(i + 1); harfler.Add(c, harf); turkceHarfDizisi[c] = harf; kucukHarflerDizi[i] = harf; temizlemeDizisi[c] = c; turkceMap[c] = true; asciifierDizisi[c] = c; } for (int i = 0; i < buyukler.Length; i++) { char c = buyukler[i]; TurkceHarf harf = new TurkceHarf(c); if (Char.IsLetter(c)) harf.setBuyukHarf(true); harf.setAlfabetikSira(i + 1); // TODO Bu if'i ekledim nokta karakteri sorun çıkarıyordu if(!harfler.ContainsKey(c)) harfler.Add(c, harf); buyukHarflerDizi[i] = harf; temizlemeDizisi[c] = kucukHarflerDizi[i].charDeger(); turkceHarfDizisi[c] = harf; } foreach(char c in harfAyristir(ozellik(bilgi, SESLI))) { harf(c).setSesli(true); buyukHarf(harfler[c]).setSesli(true); } foreach(char c in harfAyristir(ozellik(bilgi, INCE_SESLI))) { harf(c).setInceSesli(true); buyukHarf(c).setInceSesli(true); } foreach(char c in harfAyristir(ozellik(bilgi, DUZ_SESLI))) { harf(c).setDuzSesli(true); buyukHarf(c).setDuzSesli(true); } foreach(char c in harfAyristir(ozellik(bilgi, YUVARLAK_SESLI))) { harf(c).setYuvarlakSesli(true); buyukHarf(c).setYuvarlakSesli(true); } foreach(char c in harfAyristir(ozellik(bilgi, SERT))) { harf(c).setSert(true); buyukHarf(c).setSert(true); } asciiDisi = harfAyristir(ozellik(bilgi, ASCII_DISI)); foreach (char c in asciiDisi) harf(c).setAsciiDisi(true); foreach(char c in harfAyristir(ozellik(bilgi, AYIKLAMA))) { temizlemeDizisi[c] = ALFABE_DISI_KARAKTER; temizlemeDizisi[buyukHarf(c).charDeger()] = ALFABE_DISI_KARAKTER; } foreach (HarfCifti cift in harfCiftiAyristir(ozellik(bilgi, AYIKLAMA_DONUSUM))) { temizlemeDizisi[cift.h1] = cift.h2; temizlemeDizisi[buyukHarf(cift.h1).charDeger()] = buyukHarf(cift.h2).charDeger(); } List<HarfCifti> yumusamaDonusum = harfCiftiAyristir(ozellik(bilgi, YUMUSAMA_DONUSUM)); foreach (HarfCifti cift in yumusamaDonusum) { harf(cift.h1).setYumusama(harf(cift.h2)); buyukHarf(cift.h1).setYumusama(buyukHarf(cift.h2)); } // eger sert donusum bilgisi harf ozelliklerinde yar almazsa // yumusama donusumun tersi olarak uygulanir. if (bilgi.ContainsKey(SERT_DONUSUM)) { foreach (HarfCifti cift in harfCiftiAyristir(ozellik(bilgi, SERT_DONUSUM))) { harf(cift.h1).setSertDonusum(harf(cift.h2)); buyukHarf(cift.h1).setSertDonusum(buyukHarf(cift.h2)); } } else { foreach (HarfCifti cift in yumusamaDonusum) { harf(cift.h2).setSertDonusum(harf(cift.h1)); buyukHarf(cift.h2).setSertDonusum(buyukHarf(cift.h1)); } } List<HarfCifti> asciiDonusum = harfCiftiAyristir(ozellik(bilgi, TURKCE_ASCII)); foreach (HarfCifti cift in asciiDonusum) { asciifierDizisi[cift.h1] = cift.h2; harfler[cift.h1].setAsciiDonusum(harfler[cift.h2]); } // eger ascii-turkce donusum ikilileri harf dosyasinda belirtilimisse okunur. // yoksa turkce-ascii ikililerinin tersi kullanilarak harflerin turkceDonusum ozellikleri belirlenir. if (bilgi.ContainsKey(ASCII_TURKCE)) { foreach (HarfCifti cift in harfCiftiAyristir(ozellik(bilgi, ASCII_TURKCE))) harfler[cift.h1].setTurkceDonusum(harfler[cift.h2]); } else { foreach (HarfCifti cift in asciiDonusum) harf(cift.h2).setTurkceDonusum(harf(cift.h1)); } // bazi turkcelerde yabanci dillerden gelen bazi kokler normal kalin-kalin sesli // uretimini bozar. Eger harf ozelliklerinde belirtilmisse burada ince ozelligine sahip kalin // sesli kopyalari uretilir. bu harfler normal sesli listesnde yer almaz. kiyaslama sirasinda // kalin hali ile ayni kabul edilir. if (bilgi.ContainsKey(OZEL_INCE_SESLI)) { foreach(char c in harfAyristir(ozellik(bilgi, OZEL_INCE_SESLI))) { TurkceHarf inceltilmisKalinSesli = (TurkceHarf)harf(c).Clone(); inceltilmisKalinSesli.setInceSesli(true); ozelInceSesliler.Add(harf(c), inceltilmisKalinSesli); } } }
public void setAsciiDonusum(TurkceHarf asciiDonusum) { this._asciiDonusum = asciiDonusum; }
public System.Object Clone() { TurkceHarf kopya = new TurkceHarf(_charDeger, _alfabetikSira); kopya.sert = sert; kopya.sesli = sesli; kopya.inceSesli = inceSesli; kopya.buyukHarf = buyukHarf; kopya.asciiDisi = asciiDisi; kopya.duzSesli = duzSesli; kopya.yuvarlakSesli = yuvarlakSesli; kopya._yumusama = _yumusama; kopya._sertDonusum = _sertDonusum; kopya._turkceDonusum = _turkceDonusum; kopya._asciiDonusum = _asciiDonusum; return kopya; }
/** * Eger baslangic harfleri kumsei var ise gelen harfin bu kumede olup olmadigina bakar. * @param ilkHarf * @return eger kume tanimlanmamis ise bu ek icin ilk harf denetimi yapilmiyor demektir, true doner. * eger kume mevcut ise (null disi) ve harf kumede mevcutsa true doner. aksi halde false. */ public bool ilkHarfDenetle(TurkceHarf ilkHarf) { return baslangicHarfleri == null || baslangicHarfleri.Contains(ilkHarf); }