Module:Defaultsort builder
From Ross Surname Project
More actions
Documentation for this module may be created at Module:Defaultsort builder/doc
local p = {}
local function trim(s)
return mw.text.trim(s or "")
end
function p.buildDefaultSort(frame)
local args = frame:getParent().args
if not next(args) then
args = frame.args
end
local given_name = trim(args.given_name)
local middle_name = trim(args.middle_name)
local surname = trim(args.surname)
local title_ordinal = trim(args.title_ordinal)
local title_role = trim(args.title_role)
local title_object = trim(args.title_object)
local birth_year = trim(args.birth_year)
local death_year = trim(args.death_year)
-- If everything is blank, bail
if given_name == "" and middle_name == "" and surname == ""
and title_ordinal == "" and title_role == "" and title_object == ""
and birth_year == "" and death_year == "" then
return "⚠️ No input provided."
end
-- Expand surname switch if provided
local standardized_surname = ""
if surname ~= "" then
standardized_surname = frame:expandTemplate{
title = 'Surname sort standardization switch',
args = { surname }
}
end
-- Expand ordinal switch if needed
local standardized_ordinal = ""
if title_ordinal ~= "" then
standardized_ordinal = frame:expandTemplate{
title = 'Ordinal numbers switch',
args = { title_ordinal }
}
end
-- Handle laird exclusion (case-insensitive)
local include_role = mw.ustring.lower(title_role) ~= "laird" and title_role or ""
-- Build name section
local name_parts = {}
if given_name ~= "" then table.insert(name_parts, given_name) end
if middle_name ~= "" then table.insert(name_parts, middle_name) end
local name_str = table.concat(name_parts, " ")
-- Build title section
local title_parts = {}
if title_object ~= "" then table.insert(title_parts, title_object) end
if include_role ~= "" then table.insert(title_parts, include_role) end
if standardized_ordinal ~= "" then table.insert(title_parts, standardized_ordinal) end
local title_str = table.concat(title_parts, " ")
-- Build main parts
local result_parts = {}
if standardized_surname ~= "" then table.insert(result_parts, standardized_surname) end
if name_str ~= "" then table.insert(result_parts, name_str) end
if title_str ~= "" then table.insert(result_parts, title_str) end
local final_sort = table.concat(result_parts, ", ")
-- Add birth–death years if provided
if birth_year ~= "" or death_year ~= "" then
local years = ""
if birth_year ~= "" and death_year ~= "" then
years = birth_year .. "–" .. death_year
elseif birth_year ~= "" then
years = birth_year .. "–"
elseif death_year ~= "" then
years = "0–" .. death_year
end
final_sort = final_sort .. " " .. years
end
return final_sort
end
return p