Module:FirstLetter: Difference between revisions
From TANGOWIKI-TITAF
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
function | -- 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) | |||
input = | 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" | 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