Module:Marriage
Appearance
--
--
-- ! This module is currently in its alpha stage and not ready for regular use.
-- Please feel free to discuss improvements and propose modifications.
--
--
-- Notes and TODOs:
-- - Currently this module is not modifying styles like Template:Marriage.
-- - Date formatting logic is still needed to parse out the year.
-- - Test cases are not robust.
--
-- This module provides consistent formatting for common information included in
-- the spouse parameter of an Infobox_person.
-- It is intended to be used by Template:Marriage and not invoked directly within pages.
local getArgs = require('Module:Arguments').getArgs
function makeSet(items)
local set = {}
for _, i in ipairs(items) do
set[i] = true
end
return set
end
-- Define sets of accepted end-reasons for standard abbreviations.
values_died = makeSet({"d", "d.", "died"})
values_divorced = makeSet({"div", "div.", "divorce", "divorced"})
values_separated = makeSet({"sep", "sep.", "separate", "separated"})
values_annulled = makeSet({"ann", "ann.", "annulment", "annulled"})
-- Set standard abbreviation text to be used.
abbr_married = "{{abbr|m.|married}}"
abbr_divorced = "{{abbr|div.|divorced}}"
abbr_separated = "{{abbr|sep.|separated}}"
abbr_annulled = "{{abbr|ann.|annulled}}"
local p = {}
function p.main(frame)
local args = getArgs(frame, {trim = true})
return mw.html.create():wikitext(p._main(args))
end
function p._main(args)
local reason_abbr = ""
local marriage_info = ""
local return_value = ""
local spouse_name = args[1] or ""
local date_start = args[2] or ""
local date_end = args[3] or ""
local end_reason_raw = args["end"] or args["reason"] or ""
if end_reason_raw == nil then
end_reason = ""
else
if values_died[end_reason_raw] then
end_reason = "died"
elseif values_divorced[end_reason_raw] then
end_reason = abbr_divorced
elseif values_separated[end_reason_raw] then
end_reason = abbr_separated
elseif values_annulled[end_reason_raw] then
end_reason = abbr_annulled
else
end_reason = end_reason_raw
end
end
-- Prepare final structure and placement of marriage info (dates, end-reason)
if date_start == "" and date_end == "" and end_reason == "" then
-- If no dates or reason provided, the template is not useful, return nothing.
-- (nothing for now, but we'll add a warning message later on to be shown in preview)
return ""
elseif date_start == "" and date_end == "" then
marriage_info = "(" .. end_reason .. ")"
elseif date_start == "" then
marriage_info = "(" .. end_reason .. " " .. date_end .. ")"
elseif date_end == "" and end_reason == "" then
marriage_info = "(" .. abbr_married .. " " .. date_start .. ")"
elseif date_end == "" then
marriage_info = "(" .. abbr_married .. " " .. date_start .. "; " .. end_reason .. ")"
elseif end_reason == "" then
marriage_info = "(" .. abbr_married .. " " .. date_start .. "–" .. date_end .. ")"
else
marriage_info = "(" .. abbr_married .. " " .. date_start .. "; " .. end_reason .. " " .. date_end .. ")"
end
if spouse_name == "" then
-- When there is no spouse name, return only marriage info.
return_value = marriage_info
else
return_value = spouse_name .. " " .. marriage_info
end
return return_value
end
return p