İçeriğe atla

Modül:tr-araçlar

Vikisözlük sitesinden
Modül belgelemesi [Düzenle] [Tazele]


local cikart = {}

function cikart.sonUnluBul(eylem)
	return mw.ustring.sub( mw.ustring.gsub( eylem, "[%s%d%p%'bBcCçÇdDfFgGğĞhHjJkKlLmMnNpPrRsSşŞtTvVyYzZ']", ""), -1 )
end

--sözcüklerden sesli veya sessiz harfleri ayıklamaya yarar
function cikart.harfAyikla(ad, harfTipi)
	if harfTipi == "sessiz" then
		return mw.ustring.gsub( ad, "[%s%d%p%'bBcCçÇdDfFgGğĞhHjJkKlLmMnNpPrRsSşŞtTvVyYzZ']", "")
    elseif harfTipi == "sesli" then
    	return mw.ustring.gsub( ad, "[(%s%d%p%'aAeEıIiİoOöÖuUüÜ')]", "")
    end
end

--Türkçe'deki ünlü uyumuna göre hazır bir "if" fonksiyonunu size tek satırda sunar, tamamen fazla kod satırlarından kurtulmak için idealdir
function cikart.unluUyumu(ad, s1, s2, s3, s4)
	sonUnlu = mw.ustring.sub( cikart.harfAyikla(ad, "sessiz"), -1 )
	
	if s1 and s2 and s3 and s4 then
	    if mw.ustring.find(sonUnlu, "[aıâ]$") then
	    	ad = ad .. s1
	    elseif mw.ustring.find(sonUnlu, "[eiî]$") then
	    	ad = ad .. s2
	    elseif mw.ustring.find(sonUnlu, "[ouû]$") then
	    	ad = ad .. s3
	    elseif mw.ustring.find(sonUnlu, "[öü]$") then
	    	ad = ad .. s4
	    end
	elseif s1 and s2 then
	    if mw.ustring.find(sonUnlu, "[aıouâû]$") then
	    	ad = ad .. s1
	    elseif mw.ustring.find(sonUnlu, "[eiöüî]$") then
	    	ad = ad .. s2
	    end
	end
    
    return ad
end

--Türkçe eylemleri yalın hallerine çevirir
function cikart.yalinYap(eylem)
	if mw.ustring.sub( eylem, -3 ) == "mek" or mw.ustring.sub( eylem, -3 ) == "mak" then
		return mw.ustring.sub( eylem, 1, -4 )
	else
		return eylem
	end
end

--Bir eylemin yalın olup olmadığı bilgisini verir
function cikart.yaliniTersCevir(eylem)
	if mw.ustring.sub( eylem, -3 ) == "mek" or mw.ustring.sub( eylem, -3 ) == "mak" then
		return eylem
	else
		return eylem .. "m" .. (mw.ustring.find(cikart.sonUnluBul(eylem), "[aıouâ]$") and "a" or "e") .. "k" or ""
	end
end

--bir sözcüğün son harfinin ünlü olup olmadığını saptayan fonksiyon
function cikart.sonHarfUnluMu(yazi)
	local sonHarf = mw.ustring.sub( yazi, -1 )
	local sonUnlu = mw.ustring.sub( cikart.harfAyikla(yazi, "sessiz"), -1 )
	
	return sonHarf == sonUnlu and true or nil
end

--Dil adlarına ek geldiğinde bu ekleri Türkçe yazım kurallarına göre ayarla.
function cikart.dilDuzenle(dil)
	-- Girilen dil parametresinin son kelimesi "dili" ile bitiyorsa onu belirt, çünkü dilden sonra gelecek ek buna göre ayarlanacaktır.
	local sonHece1 = mw.ustring.sub( dil, -4 )
	
	-- Girilen dil parametresinin son iki hecesini ayırt et, çünkü dilden sonra gelecek ek buna göre ayarlanacaktır.
	local sonHece2 = mw.ustring.sub( dil, -2 )
	
	-- Daha önceden son heceleri/kelimesi ayırt edilen dil adlarının sonrasına "de", "da", "nde", "nda" eklerini ekle.
	local ekliDil = ""
	
	-- Son iki harfi "si" ile biten (Örneğin: İskoç İngilizcesi) veya son kelimesi "dili" olan (Örneğin: İdo dili) dil adlarından sonra "nde" ekini ekle.
    if dil and sonHece1 == "dili" or  sonHece2 == "si" then
    	ekliDil = ekliDil .. dil .. "nde"
    	
	-- Son iki harfi "sı" ile (Örneğin: İsviçre Almancası) dil adlarından sonra "nda" ekini ekle.
    elseif dil and sonHece2 == "sı" then
    	ekliDil = ekliDil .. dil .. "nda" 
    
    -- Son iki harfi "ce" ile (Örneğin: İngilizce) veya "çe" ile biten (Örneğin: Türkçe) dil adlarından sonra "de" ekini ekle.
    elseif dil and sonHece2 == "ce" or sonHece2 == "çe" then
    	ekliDil = ekliDil .. dil .. "de" 
    
    -- Son iki harfi "ca" ile (Örneğin: Almanca) veya "ça" ile biten (Örneğin: Başkça) dil adlarından sonra "da" ekini ekle.
    elseif dil and sonHece2 == "ca" or sonHece2 == "ça" then
    	ekliDil = ekliDil .. dil .. "da" 
    end
    
    return ekliDil
end

return cikart