Modül:Kategori dolaşım

Bu modül için bir Modül:Kategori dolaşım/belge belgelendirmesi oluşturabilirsiniz

local p = {}

-- İllerin listesi
local iller = {
    "Adana", "Adıyaman", "Afyonkarahisar", "Ağrı", "Amasya", "Ankara", "Antalya", "Ardahan", "Artvin", "Aydın", "Balıkesir", "Bartın", "Batman", "Bayburt", "Bilecik", "Bingöl", "Bitlis", "Bolu", "Burdur", "Bursa", "Çanakkale", "Çankırı", "Çorum", "Denizli", "Diyarbakır", "Düzce", "Edirne", "Elazığ", "Erzincan", "Erzurum", "Eskişehir", "Gaziantep", "Giresun", "Gümüşhane", "Hakkâri", "Hatay", "Iğdır", "Isparta", "İstanbul", "İzmir", "Kahramanmaraş", "Karabük", "Karaman", "Kars", "Kastamonu", "Kayseri", "Kırıkkale", "Kırklareli", "Kırşehir", "Kilis", "Kocaeli", "Konya", "Kütahya", "Malatya", "Manisa", "Mardin", "Mersin", "Muğla", "Muş", "Nevşehir", "Niğde", "Ordu", "Osmaniye", "Rize", "Sakarya", "Samsun", "Siirt", "Sinop", "Sivas", "Şanlıurfa", "Şırnak", "Tekirdağ", "Tokat", "Trabzon", "Tunceli", "Uşak", "Van", "Yalova", "Yozgat", "Zonguldak"
}

-- Ünlü uyumuna göre doğru ekleri belirleyen fonksiyon
local function ek_belirle(il, kategori)
    local son_unlu = il:match("[aeiouöüıâîû][^aeiouöüıâîû]*$"):sub(1,1)
    local son_harf = il:sub(-1)
    local sert_unsuzler = {["p"]=true, ["ç"]=true, ["t"]=true, ["k"]=true}

    local de_ek, ki_ek

    if sert_unsuzler[son_harf] then
        if son_unlu:find("[aıou]") then
            de_ek = "'ta"
            ki_ek = "'taki"
        else
            de_ek = "'te"
            ki_ek = "'teki"
        end
    else
        if son_unlu:find("[aıou]") then
            de_ek = "'da"
            ki_ek = "'daki"
        else
            de_ek = "'de"
            ki_ek = "'deki"
        end
    end
    
    local nin_ek
    if son_unlu:find("[aı]") then
        nin_ek = "nın"
    elseif son_unlu:find("[ei]") then
        nin_ek = "nin"
    elseif son_unlu:find("[ou]") then
        nin_ek = "nun"
    else
        nin_ek = "nün"
    end

    if kategori:find("de ") or kategori:find("da ") then
        return de_ek .. " "
    elseif kategori:find("te ") or kategori:find("ta ") then
        return de_ek .. " "
    elseif kategori:find("daki") or kategori:find("deki") then
        return ki_ek
    elseif kategori:find("nın") or kategori:find("nin") or kategori:find("nun") or kategori:find("nün") then
        return "'n" .. nin_ek
    else
        return " ili"
    end
end

-- Modül fonksiyonu
function p.dolasim(frame)
    local kategori = mw.title.getCurrentTitle().text
    kategori = kategori:gsub("^Kategori:", "")
    
    local il_adi = kategori:match("^([%aşçğüöİŞÇĞÜÖ]+)")
    local geri_kalan = kategori:sub(#il_adi + 1)

    if not il_adi or #geri_kalan < 1 then
        return "Hatalı kategori adı formatı: " .. kategori
    end

    -- Kategori adında zaten bir ek var mı kontrolü
    local ek = ""
    if geri_kalan:find("da ") or geri_kalan:find("de ") or geri_kalan:find("ta ") or geri_kalan:find("te ") or geri_kalan:find("daki") or geri_kalan:find("deki") then
        ek = ""
    else
        ek = ek_belirle(il_adi, kategori)
    end
    
    local sonuc = ""
    for i, il in ipairs(iller) do
        local yeni_kategori = il .. ek .. geri_kalan
        local link = "[[:Kategori:" .. yeni_kategori .. "|" .. il .. "]]"
        if i > 1 then
            sonuc = sonuc .. " • "
        end
        sonuc = sonuc .. link
    end
    
    return sonuc
end

return p