Module:Ordinal: Difference between revisions
Jump to navigation
Jump to search
Remove sup argument (depended on yesno module which we chose not to import) |
merge changes from dev |
||
| Line 1: | Line 1: | ||
--[[ | --[[ | ||
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. | |||
]] | ]] | ||
| Line 11: | Line 8: | ||
--[[ | --[[ | ||
This function converts an integer value into a numeral followed by ordinal indicator. | This function converts an integer value into a numeral followed by ordinal indicator. | ||
The output string might contain HTML tags. | The output string might contain HTML tags. | ||
Usage: | Usage: | ||
{{#invoke:Ordinal|ordinal|1=|2=}} | {{#invoke:Ordinal|ordinal|1=|2=}} | ||
{{#invoke:Ordinal|ordinal}} - uses the caller's parameters | {{#invoke:Ordinal|ordinal}} - uses the caller's parameters | ||
Parameters | Parameters | ||
1: Any number or string. | |||
2: Set to "d" if the module should display "d" instead of "nd" and "rd". | |||
]] | ]] | ||
function p.ordinal(frame) | 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")) | |||
end | end | ||
| Line 40: | Line 37: | ||
local mod10 = math.abs(x) % 10 | local mod10 = math.abs(x) % 10 | ||
local mod100 = math.abs(x) % 100 | local mod100 = math.abs(x) % 100 | ||
if | if mod10 == 1 and mod100 ~= 11 then | ||
suffix = "st" | suffix = "st" | ||
elseif mod10 == 2 and mod100 ~= 12 then | elseif mod10 == 2 and mod100 ~= 12 then | ||
if d then suffix = "d" else suffix = "nd" end | if d then | ||
suffix = "d" | |||
else | |||
suffix = "nd" | |||
end | |||
elseif mod10 == 3 and mod100 ~= 13 then | elseif mod10 == 3 and mod100 ~= 13 then | ||
if d then suffix = "d" else suffix = "rd" end | if d then | ||
suffix = "d" | |||
else | |||
suffix = "rd" | |||
end | |||
end | end | ||
end | end | ||
Revision as of 20:17, 1 April 2024
- This module may be invoked by templates using its corresponding template Template:Ordinal, or used directly from other modules.
This module automatically determines the ordinal of a given number (i.e. 1 → first, 2 → second, 3 → third, etc.).
On templates, you can use {{Ordinal}}.
On modules, you can include local ordinal= require("Module:Ordinal")._ordinal.
| Introspection summary for Module:Ordinal | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| ||||||||||||
No function descriptions were provided. The Lua code may have further information.
--[[
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 = {}
--[[
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=}}
{{#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".
]]
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"))
end
function p._ordinal(n, d)
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
return n .. suffix
end
return p