Module:FirstLetter

From TANGOWIKI-TITAF

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

local p = {}

-- Normalize and clean up input
local function normalize(str)
    str = mw.text.trim(str or "")
    str = mw.ustring.upper(str)
    str = mw.ustring.gsub(str, '[ÁÀÄÂ]', 'A')
    str = mw.ustring.gsub(str, '[ÉÈËÊ]', 'E')
    str = mw.ustring.gsub(str, '[ÍÌÏÎ]', 'I')
    str = mw.ustring.gsub(str, '[ÓÒÖÔ]', 'O')
    str = mw.ustring.gsub(str, '[ÚÙÜÛ]', 'U')
    str = mw.ustring.gsub(str, '[Ñ]', 'N')
    return str
end

-- Get first letter
function p.letter(frame)
    local input = normalize(frame.args[1])
    return mw.ustring.sub(input, 1, 1)
end

-- Get letter block
function p.block(frame)
    local input = normalize(frame.args[1])
    local first = mw.ustring.sub(input, 1, 1)

    if first:match("[A-D]") then return "A–D" end
    if first:match("[E-H]") then return "E–H" end
    if first:match("[I-L]") then return "I–L" end
    if first:match("[M-P]") then return "M–P" end
    if first:match("[Q-T]") then return "Q–T" end
    if first:match("[U-Z]") then return "U–Z" end
    return "Other"
end

return p