@DeletedUser41170185 (talk | contribs) (Using assert) |
@DeletedUser41170185 (talk | contribs) mNo edit summary |
||
Line 16: | Line 16: | ||
end |
end |
||
− | assert(args[1], 'Enter an expression |
+ | assert(args[1], 'Enter an expression') |
if args['v1'] then |
if args['v1'] then |
Revision as of 10:30, 19 March 2018
▶️
Planeshift.
The documentation for this module can be found at Template:Calculate.
You may be forwarded to another wiki language, in case a translation is not available.
Tests
Lua error in package.lua at line 80: module 'Module:Utils' not found.
Dependencies
- Module:Arguments
- Module:Utils
local expr = mw.ext.ParserFunctions.expr
local getArgs = require('Module:Arguments').main
local split = require('Module:Utils').split
local p = {}
function p.main()
local args = getArgs()
return p._main(args)
end
function p._main(args)
local calculate = function(calc)
-- Replaces percentage signs with /100 since #expr can't handle them.
calc = string.gsub(calc, '%%', '/100')
return expr(calc)
end
assert(args[1], 'Enter an expression')
if args['v1'] then
-- Create a table that holds a table for each v argument.
local v_values = {}
local n = 1
while args['v'..n] do
-- Escape percentage signs to prevent them from escaping the / during the split.
v = string.gsub(args['v'..n], '%%', '%%%%')
-- Split the v into the individual values and add them to the v_values table.
table.insert(v_values, split(v, '/'))
n = n + 1
end
local output = {}
-- Run once for each value in the v1 argument.
for level,_ in ipairs(v_values[1]) do
local calc = args[1]
-- Do a replacement for each v arg.
for i,v in ipairs(v_values) do
calc = calc:gsub('v'..i, v[level])
end
-- Solve the calculation we just constructed and insert it into the output.
-- args[2] is used to trigger special percentage handling.
if args[2] then
table.insert(output, calculate('('..calc..')*100') .. '%')
else
table.insert(output, calculate(calc))
end
end
-- Return the values in the output table separated by a /.
return table.concat(output, '/')
else
-- Just do a normal #calc if no v values are given.
-- Still has percentage handling which normal #calc doesn't.
return calculate(args[1])
end
end
return p