Difference between revisions of "Module:Ordinal"
Jump to navigation
Jump to search
m (1 revision imported) |
(keep module up to date with wikipedia, I don't know what im doing) |
||
Line 3: | Line 3: | ||
This template will add the appropriate ordinal suffix to a given integer. | This template will add the appropriate ordinal suffix to a given integer. | ||
Please do not modify this code without applying the changes first at Module:Ordinal/sandbox and testing | Please do not modify this code without applying the changes first at | ||
Module:Ordinal/sandbox and testing. | |||
]] | ]] | ||
local p = {} | |||
local | |||
local yesno = require('Module:Yesno') -- boolean value interpretation | |||
-- | |||
--[[ | --[[ | ||
This function converts an integer value into a numeral followed by ordinal indicator. | |||
The output string might contain HTML tags. | |||
This function converts an integer value into a numeral followed by ordinal indicator. | |||
contain HTML tags | |||
Usage: | Usage: | ||
{{#invoke:Ordinal| | {{#invoke:Ordinal|ordinal|1=|2=|sup=}} | ||
{{#invoke:Ordinal| | {{#invoke:Ordinal|ordinal}} - uses the caller's parameters | ||
Parameters | Parameters | ||
1: | 1: Any number or string. | ||
2: Set to "d" if the module should display "d" instead of "nd" and "rd". | |||
sup: Set to yes/no to toggle superscript ordinal suffix. | |||
]] | ]] | ||
function p. | function p.ordinal(frame) | ||
local args = frame.args | local args = frame.args | ||
if args[1] == nil then | |||
args = frame:getParent().args | |||
end | |||
if args[1] == nil then | |||
args[1] = "{{{1}}}" | |||
end | |||
return p._ordinal(args[1], (args[2] == 'd'), yesno(args.sup)) | |||
end | end | ||
function p._ordinal(n, d, sup) | |||
local x = tonumber(mw.ustring.match(n, "(%d*)%W*$")) | |||
local suffix = "th" | |||
-- If tonumber(n) worked: | |||
if x then | |||
local mod10 = math.abs(x) % 10 | |||
local mod100 = math.abs(x) % 100 | |||
if mod10 == 1 and mod100 ~= 11 then | |||
suffix = "st" | |||
elseif mod10 == 2 and mod100 ~= 12 then | |||
if d then suffix = "d" else suffix = "nd" end | |||
elseif mod10 == 3 and mod100 ~= 13 then | |||
if d then suffix = "d" else suffix = "rd" end | |||
local | |||
if | |||
local | |||
if | |||
end | end | ||
end | end | ||
if sup then | |||
return | suffix = "<sup>" .. suffix .. "</sup>" | ||
end | |||
return n .. suffix | |||
end | end | ||
return p | return p |
Latest revision as of 20:17, 28 November 2021
Documentation for this module may be created at Module:Ordinal/doc
--[[ This template will add the appropriate ordinal suffix to a given integer. Please do not modify this code without applying the changes first at Module:Ordinal/sandbox and testing. ]] local p = {} local yesno = require('Module:Yesno') -- boolean value interpretation --[[ This function converts an integer value into a numeral followed by ordinal indicator. The output string might contain HTML tags. Usage: {{#invoke:Ordinal|ordinal|1=|2=|sup=}} {{#invoke:Ordinal|ordinal}} - uses the caller's parameters Parameters 1: Any number or string. 2: Set to "d" if the module should display "d" instead of "nd" and "rd". sup: Set to yes/no to toggle superscript ordinal suffix. ]] function p.ordinal(frame) local args = frame.args if args[1] == nil then args = frame:getParent().args end if args[1] == nil then args[1] = "{{{1}}}" end return p._ordinal(args[1], (args[2] == 'd'), yesno(args.sup)) end function p._ordinal(n, d, sup) local x = tonumber(mw.ustring.match(n, "(%d*)%W*$")) local suffix = "th" -- If tonumber(n) worked: if x then local mod10 = math.abs(x) % 10 local mod100 = math.abs(x) % 100 if mod10 == 1 and mod100 ~= 11 then suffix = "st" elseif mod10 == 2 and mod100 ~= 12 then if d then suffix = "d" else suffix = "nd" end elseif mod10 == 3 and mod100 ~= 13 then if d then suffix = "d" else suffix = "rd" end end end if sup then suffix = "<sup>" .. suffix .. "</sup>" end return n .. suffix end return p