Documentation for this module may be created at Modul:koda zimanî/inglîzî/belge

b = require('Modul:bases')

-- Çavkanî: ku.wiktionary [[Modul:koda zimanî]] ji bo wergera kodên zimanan ên inglîzî hatiye guherandin
local p = {}

-- Cherche et renvoie le code à partir du nom d'une langue depuis notre liste locale [[Module:langues/data]].
-- Fonction utilisable dans un modèle
function p.get_nav(code)
    -- Pas de code langue ? Renvoie nil.
    if (code == nil) then return nil end
    
    -- Espaces avant et après enlevés
     code = mw.text.trim(code)
    
    -- Récupère la table des langues entière (en cache)
    local langues = mw.loadData('Modul:ziman/inglîzî')
    
    -- A-t-on la langue correspondant au code donné ?
    if (langues[code] and langues[code]['nav']) then
        -- Trouvé ! Renvoie le nom
        return langues[code]['nav']
    else
        -- Pas trouvé : on renvoie nil
        return nil
    end
end
function p.nav_ziman(frame)
    local args
    if frame.args ~= nil and frame.args[1] ~= nil then
        args = frame.args
    else
        args = frame:getParent().args
    end
    local code = args[1]
    
    local langue = p.get_nav(code)
    
    if (langue == nil or langue == '') then
        return ''
    else
        return langue
    end
end

function p.koda_zimani(frame)
    -- Besoin que d'un paramètre, voire aucun si le nom de la page correspond exactement au nom dans la liste
    if frame.args ~= nil and frame.args[1] ~= nil then
        args = frame.args
    else
        args = frame:getParent().args
    end

    local nav = args[1]
    
    -- Pas de nom de langue ? Récupère le nom à partir du nom de la page
    if nav == nil or  mw.text.trim(nav) == '' then
        nav = mw.title.getCurrentTitle().text
    else
        -- On enlève les espaces du paramètre donné
        nav = mw.text.trim(nav)
    end
    
    -- Récupère la table des langues entière (en cache)
    local langues = mw.loadData('Modul:ziman/inglîzî')
    
    --if nom then return nom end
    
    -- A-t-on la langue correspondant au code donné?
    -- On tourne sur toutes les langues pour trouver la bonne
    -- Pas aussi efficace que d'avoir le tableau inversé (code-langue -> langue-code)
    -- mais on n'en a besoin que d'une fois dans la page, donc pas la peine
    for code, langue_table in pairs(langues) do
        if nav == langue_table['nav'] then
            -- Trouvé !
            return code
        end
    end
    
    -- Pas trouvé : renvoie une chaîne vide, plus facilement utilisable par les modèles
    return ''
end

return p