Content deleted Content added
The Mol Man (talk | contribs) No edit summary |
The Mol Man (talk | contribs) No edit summary |
||
Line 3:
local getArgs
local delimit_groups = require('Module:Gapnum').groups
local makeunit = require('Module:Val/units')▼
local mSu = require('Module:Su')._main▼
function p.main(frame)
Line 16 ⟶ 14:
-- Error checking
if not validnumber(args[1]) then
return valerror('
end
if args[2] and not validnumber(args[2]) then
return valerror('
end
if args[3] and not validnumber(args[3]) then
return valerror('
end
-- Negative third param
if args[3] and (not mw.ustring.find(args[3],'[−%-]') or mw.ustring.find(args[3],'^%D0$')) then
return valerror('
end
if args.e and not validnumber(args.e) then
return valerror('
end
if args.u and args.ul then
return valerror('
end
if args.up and args.upl then
return valerror('
end
-- Group arguments into related categories and unpack when needed
local uncertainty = {upper=args[2], lower=args[3],
errend=args.errend,
Line 52 ⟶ 51:
local e_10 = misc_tbl.e
local unc▼
local uncU, uncL = uncertainty.upper, uncertainty.lower▼
if number.nend then
n:wikitext(number.nend)
end
-- If units are defined, load the unit submodule to create a string
local paren_wrap = misc_tbl.e and (not uncL and (uncU and not uncU:find('%(')))▼
if u_tbl.u then
▲ local makeunit = require('Module:Val/units')
units = makeunit(u_tbl.u,
{link=u_tbl.ul,
Line 66 ⟶ 62:
per_link=u_tbl.pl})
end
-- Uncertainty
▲ local unc
-- Upper and lower
▲ local uncU, uncL = uncertainty.upper, uncertainty.lower
-- Whether or not the entire number needs to be wrapped in parentheses
-- true if:
---- the expontent parameter (e) is defined
---- AND
---- no lower uncertainty is defined
---- AND
---- upper uncertainty is defined and contains no parentheses
▲ local paren_wrap = misc_tbl.e and (not uncL and (uncU and not uncU:find('%(')))
-- boolean to be defined and used later
local paren_uncertainty
-- Upper is always used, so look for it first
if uncU then
-- Look for lower uncertainty
if uncL then
-- Load the sup/sub module
▲ local mSu = require('Module:Su')._main
-- Format upper and lower
uncU = delimit(uncU,fmt)
uncL = delimit(uncL,fmt)
-- If no exponent is defined, and there are units, add them
if not e_10 and units then
uncU = uncU..units
uncL = uncL..units
end
-- Add the uncertainty suffixes here
uncU = uncU..(uncertainty.upperend or '')
uncL = uncL..(uncertainty.lowerend or '')
unc = '<span style="margin-left:0.3em;">'..mSu(uncU,uncL)..'</span>'
else
-- Look for parentheses surrounding upper uncertainty
local uncU_n = mw.ustring.match(uncU,('%((.+)%)')) or uncU
-- If no parens, use ±
if uncU == uncU_n then
unc = '<span style="margin-left:0.3em;margin-right:0.15em">±</span>'..delimit(uncU_n,fmt)
unc = unc..'</span>'
-- Otherwise tidy the number and put it back in parentheses
-- Indicate parentheses were used (for later)
else
unc = '('..delimit(uncU_n,fmt)..')'
paren_uncertainty = true
end
-- Add units if no exponent argument
if not e_10 and units then
unc = unc..units
Line 92 ⟶ 116:
end
end
-- Add units if no exponent argument and no parentheses for uncertainty
if not e_10 and units and not paren_uncertainty then
n = n..units
end
-- If exponent defined, create 10<sup>e</sup>
-- Add units if they're defined
if e_10 then
e_10 = '<span style="margin-left:0.25em;margin-right:0.15em">×</span>10<sup>'..delimit(misc_tbl.e)..'</sup>'
Line 105 ⟶ 130:
e_10 = ''
end
-- Table to concat in order of what goes where
local ret =
-- prefix
misc_tbl.pre or '',
-- opening parenthesis if needed
paren_wrap and '(' or '',
-- number
n,
-- uncertainties
unc or '',
-- closes parenthesis if needed
paren_wrap and ')' or '',
-- 10^e if needed
e_10,
-- suffix
misc_tbl.suf or ''
})
▲ ret = table.concat(ret)
return ret
end
Line 158 ⟶ 190:
end
-- Specific message for {{Val}} errors
function valerror(msg,nocat)
local ret = mw.html.create('strong')
:addClass('error')
:wikitext('Error in {{Val}}: '..msg)
-- Not in talk, user, user_talk, or wikipedia_talk
if not nocat and not mw.title.getCurrentTitle():inNamespaces(1,2,3,5) then
Line 169 ⟶ 202:
end
-- true/false whether or not the string is a valid number
-- ignores parentheses and parity symbolts
function validnumber(n)
-- Look for a number that may be surrounded by parentheses or may have +/-
|