Module:Factorization and Module:Factorization/sandbox: Difference between pages
(Difference between pages)
imported>Izno use locals, move var use to where used |
imported>WOSlinker fix closing span |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
function p.factor(frame) | function p.factor(frame) | ||
-- Consider calling the parser function #expr | |||
-- to simplify a potential mathematical expression? | |||
number = tonumber(frame.args[1]) | |||
if number == nil then | if number == nil then | ||
return '<strong class="error">Error: input not recognized as a number</strong>' | return '<strong class="error">Error: input not recognized as a number</strong>' | ||
end | end | ||
productSymbol = frame.args['product'] or '·' | |||
bold = frame.args['bold'] and true | |||
big = frame.args['big'] and true | |||
serif = frame.args['serif'] and true | |||
primeLink = frame.args['prime'] and true | |||
number = math.floor(number) | number = math.floor(number) | ||
if number < 2 or number > 1000000000 or number == math.huge then | if number < 2 or number > 1000000000 or number == math.huge then | ||
| Line 32: | Line 20: | ||
end | end | ||
result = "" | |||
currentNumber = number | |||
power = 0 | |||
divisor = 2 | |||
-- Attempt factoring by the value of the divisor | -- Attempt factoring by the value of the divisor | ||
-- divisor increments by 2, except first iteration (2 to 3) | -- divisor increments by 2, except first iteration (2 to 3) | ||
while divisor <= math.sqrt(currentNumber) do | while divisor <= math.sqrt(currentNumber) do | ||
power = 0 | power = 0 | ||
| Line 56: | Line 44: | ||
end | end | ||
if currentNumber == number and primeLink then | if currentNumber == number and primeLink then | ||
return '[[prime number|prime]]' | return '[[prime number|prime]]' | ||
| Line 63: | Line 50: | ||
result = string.sub(result,1,-4) | result = string.sub(result,1,-4) | ||
return format(result) | |||
end | |||
return | function powerformat(divisor, power, productSymbol) | ||
if power < 1 then return '' | |||
elseif power == 1 then return divisor .. ' ' .. productSymbol .. ' ' | |||
else return divisor .. '<sup>' .. power .. '</sup> ' .. productSymbol .. ' ' | |||
end | |||
end | |||
function format(numString) | |||
if bold then | |||
numString = '<b>'..numString..'</b>' | |||
end | |||
ret = (serif or big) and '<span ' or '' | |||
if serif then ret = ret .. 'class="texhtml" ' end | |||
if big then ret = ret .. 'style="font-size:165%" ' end | |||
ret = ret .. ((serif or big) and '>' or '') .. numString .. ((serif or big) and '</span>' or '') | |||
return ret | |||
end | end | ||
return p | return p | ||