Difference between revisions of "Module:In5"
Jump to navigation
Jump to search
blackwiki>Mr. Stradivarius m (fix comment) |
blackwiki>Mr. Stradivarius (better default handling) |
||
| Line 4: | Line 4: | ||
function p.in5(frame) | function p.in5(frame) | ||
| − | local indent = frame.args[1] | + | local indent = frame.args[1] |
| − | indent = tonumber( mw.text.trim(indent) ) -- | + | -- Trim whitespace and convert to number. Default to 5 if not present, |
| − | + | -- as per the template title. | |
| − | + | indent = tonumber( mw.text.trim(indent) ) or 5 | |
| + | -- Round down to nearest integer. Decimal values produce funky results | ||
| + | -- from the original template, but there's no need for us to replicate that. | ||
| + | indent = math.floor( indent ) | ||
| + | -- Don't output anything for zero or less. Again, there was some funky output | ||
| + | -- here for negatives, but now we're in Lua we should use sane defaults. | ||
| + | if indent <= 0 then | ||
| + | return | ||
end | end | ||
Revision as of 13:15, 27 June 2013
| This module is rated as alpha. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome. |
This is a Lua implementation of the {{in5}} template. Please see the template page for documentation.
-- This module implements {{in5}}.
local p = {}
function p.in5(frame)
local indent = frame.args[1]
-- Trim whitespace and convert to number. Default to 5 if not present,
-- as per the template title.
indent = tonumber( mw.text.trim(indent) ) or 5
-- Round down to nearest integer. Decimal values produce funky results
-- from the original template, but there's no need for us to replicate that.
indent = math.floor( indent )
-- Don't output anything for zero or less. Again, there was some funky output
-- here for negatives, but now we're in Lua we should use sane defaults.
if indent <= 0 then
return
end
local base = ' '
local modulo = ' '
--[[
Indent values and the corresponding values for base and modulo:
indent base modulo
1 0 1
2 0 2
3 1 1
4 1 2
5 2 1
6 2 2
7 3 1
8 3 2
9 4 1
10 4 2
]]
local baseNum = math.floor( (indent - 1) / 2 )
local modNum = math.fmod( indent - 1 , 2 ) + 1
return mw.ustring.rep( base, baseNum) .. mw.ustring.rep( modulo, modNum )
end
return p