Actions

Module

languages: Difference between revisions

From SUALEX

Created page with "-- Module:languages local languages_data = require("Module:languages/data") local languages = {} local language_cache = {} function languages.get_canonical_name(lang_code) local data = languages_data[lang_code] return (data and data[1]) or lang_code end function languages.get_ancestor_code(lang_code) local data = languages_data[lang_code] return data and data[2] or nil end function languages.get_all_ancestors(lang_code) if language_cache[lang_cod..."
 
No edit summary
Line 2: Line 2:


local languages_data = require("Module:languages/data")
local languages_data = require("Module:languages/data")
local utilities = require("Module:utilities")


local languages = {}
local languages = {}
local language_cache = {}
local language_cache = {}
function languages.parse(lang_param)
    if not lang_param or lang_param == "" then
        return nil, nil
    end
    local parts = utilities.split_string(lang_param, ":")
    local code = parts[1]
    local display = parts[2]
    if display == "" then display = nil end
    return code, display
end
function languages.get_name_and_display(lang_param)
    local code, display = languages.parse(lang_param)
    if not code then return nil end
    local canon = languages.get_canonical_name(code)
    return {
        code = code,
        canonical = canon,
        display = display or canon
    }
end


function languages.get_canonical_name(lang_code)
function languages.get_canonical_name(lang_code)
Line 36: Line 64:
end
end


-- Treat codes ending in -pro OR -pre as proto
function languages.is_proto(lang_code)
function languages.is_proto(lang_code)
     if not lang_code then return false end
     if not lang_code then return false end

Revision as of 23:49, 30 January 2026

Documentation for this module may be created at Module:languages/doc

-- Module:languages

local languages_data = require("Module:languages/data")
local utilities = require("Module:utilities")

local languages = {}
local language_cache = {}

function languages.parse(lang_param)
    if not lang_param or lang_param == "" then
        return nil, nil
    end

    local parts = utilities.split_string(lang_param, ":")
    local code = parts[1]
    local display = parts[2]

    if display == "" then display = nil end

    return code, display
end

function languages.get_name_and_display(lang_param)
    local code, display = languages.parse(lang_param)
    if not code then return nil end

    local canon = languages.get_canonical_name(code)

    return {
        code = code,
        canonical = canon,
        display = display or canon
    }
end

function languages.get_canonical_name(lang_code)
    local data = languages_data[lang_code]
    return (data and data[1]) or lang_code
end

function languages.get_ancestor_code(lang_code)
    local data = languages_data[lang_code]
    return data and data[2] or nil
end

function languages.get_all_ancestors(lang_code)
    if language_cache[lang_code] then return language_cache[lang_code] end
    local ancestors = {}
    local current = lang_code
    while current do
        current = languages.get_ancestor_code(current)
        if current then table.insert(ancestors, current) end
    end
    language_cache[lang_code] = ancestors
    return ancestors
end

function languages.is_descendant_of(child_code, ancestor_code)
    local ancestors = languages.get_all_ancestors(child_code)
    for _, a in ipairs(ancestors) do
        if a == ancestor_code then return true end
    end
    return false
end

function languages.is_proto(lang_code)
    if not lang_code then return false end
    lang_code = tostring(lang_code)
    return lang_code:sub(-4) == "-pro" or lang_code:sub(-4) == "-pre"
end

return languages