Module:Factorization and Module:Factorization/sandbox: Difference between pages

(Difference between pages)
Jump to navigation Jump to search
Page 1
Page 2
imported>Izno
use locals, move var use to where used
 
imported>WOSlinker
fix closing span
 
Line 1: Line 1:
local p = {}
local p = {}
local 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
local function format(numString, bold, big, serif)
    if bold then
    numString = '<b>'..numString..'</b>'
    end
local 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


function p.factor(frame)
function p.factor(frame)
-- Consider calling the parser function #expr
     local number = tonumber(frame.args[1])
--  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


     local result = ""
     result = ""
     local currentNumber = number
     currentNumber = number
     local power = 0
     power = 0
     local divisor = 2
     divisor = 2
    local productSymbol = frame.args['product'] or '·'
 
     -- 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


    local primeLink = frame.args['prime'] and true
     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)


     local bold = frame.args['bold'] and true
     return format(result)
     local big = frame.args['big'] and true
end
    local serif = frame.args['serif'] and true
 
     return format(result, bold, big, serif)
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