Module:Penis size cm
Documentation for this module may be created at Module:Penis size cm/doc
local p = {}
local function toInches(cm)
return cm / 2.54
end
local function toCentimeters(inches)
return inches * 2.54
end
local function formatNumber(value)
value = math.floor(value * 10 + 0.5) / 10
return value % 1 == 0 and string.format("%.0f", value) or string.format("%.1f", value)
end
local function formatLink(category, value, unit)
return string.format('[[:Category:Penis size %s %s|%s %s]]', value, unit, value, unit)
end
local function applyOption(value, option, tag)
return (option == "yes" or option == "y") and string.format(tag, value) or value
end
function p.main(frame)
local input = frame.args[1] or ""
local categoryOption = frame.args["category"] or "yes"
local breakOption = frame.args["break"] or "no"
local linkspanOption = frame.args["linkspan"] or "no"
input = string.lower(input:gsub("%s+", "")):gsub(",", ".")
local cm, inches
if string.match(input, "in$") or string.match(input, "inches$") then
inches = tonumber(string.match(input, "%d+%.?%d*"))
cm = toCentimeters(inches)
else
cm = tonumber(string.match(input, "%d+%.?%d*"))
if cm == nil then return "" end
inches = toInches(cm)
end
local formattedCm = formatNumber(cm)
local formattedInches = formatNumber(inches)
local linkCm = formatLink("cm", formattedCm, "cm")
local linkInches = formatLink("inches", formattedInches, "in")
linkCm = applyOption(linkCm, linkspanOption, '<span class="white-link">%s</span>')
linkInches = applyOption(linkInches, linkspanOption, '<span class="white-link">%s</span>')
local breakTag = applyOption("", breakOption, "<br>")
if categoryOption == "no" then
return linkCm .. breakTag .. " (" .. linkInches .. ")"
elseif mw.title.getCurrentTitle().namespace == 0 then
return "[[Category:Penis size " .. formattedCm .. " cm]]" .. linkCm .. breakTag .. " (" .. linkInches .. ")" .. "[[Category:Penis size " .. formattedInches .. " inches]]"
else
return linkCm .. breakTag .. " (" .. linkInches .. ")"
end
end
return p