Module:FirstLetter: Difference between revisions

From TANGOWIKI-TITAF
Created page with "local p = {} function p.from(frame) local input = frame.args[1] or '' -- Remove leading/trailing spaces input = mw.text.trim(input) -- Remove accents for basic comparison (optional) input = mw.ustring.gsub(input, '[ÁÀÄÂ]', 'A') input = mw.ustring.gsub(input, '[ÉÈËÊ]', 'E') input = mw.ustring.gsub(input, '[ÍÌÏÎ]', 'I') input = mw.ustring.gsub(input, '[ÓÒÖÔ]', 'O') input = mw.ustring.gsub(input, '[ÚÙÜÛ]', 'U') in..."
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


function p.from(frame)
-- Normalize and clean up input
     local input = frame.args[1] or ''
local function normalize(str)
    -- Remove leading/trailing spaces
     str = mw.text.trim(str or "")
    input = mw.text.trim(input)
     str = mw.ustring.upper(str)
     -- Remove accents for basic comparison (optional)
     str = mw.ustring.gsub(str, '[ÁÀÄÂ]', 'A')
     input = mw.ustring.gsub(input, '[ÁÀÄÂ]', 'A')
     str = mw.ustring.gsub(str, '[ÉÈËÊ]', 'E')
     input = mw.ustring.gsub(input, '[ÉÈËÊ]', 'E')
     str = mw.ustring.gsub(str, '[ÍÌÏÎ]', 'I')
     input = mw.ustring.gsub(input, '[ÍÌÏÎ]', 'I')
     str = mw.ustring.gsub(str, '[ÓÒÖÔ]', 'O')
     input = mw.ustring.gsub(input, '[ÓÒÖÔ]', 'O')
     str = mw.ustring.gsub(str, '[ÚÙÜÛ]', 'U')
     input = mw.ustring.gsub(input, '[ÚÙÜÛ]', 'U')
     str = mw.ustring.gsub(str, '[Ñ]', 'N')
     input = mw.ustring.gsub(input, '[Ñ]', 'N')
     return str
     -- Uppercase first character
end
     local first = mw.ustring.upper(mw.ustring.sub(input, 1, 1))
 
     return first
-- 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
end


return p
return p

Latest revision as of 07:53, 12 May 2025

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