ماڊيول:Gapnum
ڏيک
| This module depends on the following other modules: |
| هي سانچو ھزارين صفحن تي استعمال ٿئي ٿو، تنهنڪري ان ۾ ڪيل تبديليون وڏي پيماني تي نظر اچي سگهن ٿيون۔ تبديليون لاڳو ڪرڻ کان اڳ، مهرباني ڪري انهن کي سانچي جي /ريتخاني يا /آزمائشي حالتون وارن ذيلي صفحن ۾ آزمائي ڏسو، يا پنهنجي يوزر ذيلي صفحي ۾ جانچ ڪريو۔ تبديليون لاڳو ڪرڻ کان اڳ ڳالهيون صفحي تي بحث ڪرڻ تي پڻ غور ڪيو۔ |
هي ماڊيول {{val}} پاران استعمال ڪيو وڃي ٿو۔
ٻين ماڊيولن ۾ استعمال
[سنواريو]gaps
[سنواريو]gaps فنڪشن ٻين ماڊيولن ۾ وڏي انگن جي ڏيکاري لاءِ ۾ ڪارائتو ٿي سگهي ٿو۔
local gaps = require('ماڊيول:Gapnum').gaps
gaps فنڪشن استعمال ڪندي، پهريون argument اهو انگ هوندو جيڪو فارميٽ ڪرڻو آهي۔ ٻيو argument هڪ ٽيبل ٿي سگهي ٿو جنهن ۾ keys هونديون آهن جيڪي ماڊيول کي ٻڌائين ٿيون ته فارميٽ ڪيئن ڪرڻو آهي۔ ٽيبل ۾ استعمال ٿيندڙ keys هي آهن:
gap— هڪ انگ CSS يونٽن (px، em، en وغيره) سان، جيڪو انگن جي وچ ۾ خالي جاءِ جو سائز طئي ڪري ٿو۔ جيڪڏهن خالي ڇڏيو وڃي، ته ماڊيول0.25emاستعمال ڪندو۔prec— هڪ انگ جيڪو decimal حصي جي درستگي (precision) طئي ڪري ٿو۔ جيڪڏهن درستگي انگن جي تعداد کان گهٽ هجي ته اضافي انگ هٽايا ويندا بغير round ڪرڻ جي؛ جيڪڏهن وڌيڪ هجي ته صفر شامل ڪيا ويندا۔ جيڪڏهن خالي هجي ته-1استعمال ٿيندو، جنهن جو مطلب آهي ته ڪا تبديلي نه ٿيندي۔
نوٽ ڪريو ته return statement هڪ ٽيبل آهي۔ تنهن ڪري وڌيڪ اسٽائل يا متن span tag ۾ شامل ڪري سگهجي ٿو، پر ڪڏهن ڪڏهن tostring() جي ضرورت پئجي سگهي ٿي۔
local gaps = require('ماڊيول:Gapnum').gaps
function example()
local n = 123456.78900011
local n_gaps = gaps(n)
local n_big_gaps = gaps(n, {gap='1em'})
local n_small_gaps = gaps(n, {gap='1px'})
local n_prec_5 = gaps(n, {prec=5})
local n_prec_10 = gaps(n, {prec=10})
local n_big_5 = gaps(n, {gap='1em', prec=5})
local n_small_10 = gaps(n, {gap='1px', prec=10})
end
groups
[سنواريو]groups فنڪشن ٻين ماڊيولن ۾ استعمال ڪري سگهجي ٿو ته جيئن انگن کي گروپن ۾ ورهايو وڃي، جيئن gaps ڪندو آهي، پر هن ۾ string بدران ٽيبل واپس ملندي جنهن ۾ جدا ڪيل گروپ هوندا۔
local groups = require('ماڊيول:Gapnum').groups
function example()
local n1 = groups(123456)
local n2a,n2b = groups(1234.56789)
local n3a,n3b = groups(0.1234567)
local n4a,n4b = groups(123.4567,8)
end
local p = {}
local getArgs
function p.main(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
local args = getArgs(frame, {wrappers = 'Template:Gapnum'})
local n = args[1]
if not n then
error('Parameter 1 is required')
elseif not tonumber(n) and not tonumber(n, 36) then -- Validates any number with base ≤ 36
error('Unable to convert "' .. args[1] .. '" to a number')
end
local gap = args.gap
local precision = tonumber(args.prec)
return p.gaps(n,{gap=gap,prec=precision})
end
-- Not named p._main so that it has a better function name when required by Module:Val
function p.gaps(n,tbl)
local nstr = tostring(n)
if not tbl then
tbl = {}
end
local gap = tbl.gap or '.25em'
local int_part, frac_part = p.groups(n,tbl.prec)
local ret = mw.html.create('span')
:css('white-space','nowrap')
-- No gap necessary on first group
:wikitext(table.remove(int_part,1))
-- Build int part
for _, v in ipairs(int_part) do
ret:tag('span')
:css('margin-left',gap)
:wikitext(v)
end
if frac_part then
-- The first group after the decimal shouldn't have a gap
ret:wikitext('.' .. table.remove(frac_part,1))
-- Build frac part
for _, v in ipairs(frac_part) do
ret:tag('span')
:css('margin-left',gap)
:wikitext(v)
end
end
return ret
end
-- Creates tables where each element is a different group of the number
function p.groups(num,precision)
local nstr = tostring(num)
if not precision then
precision = -1
end
local decimalloc = nstr:find('.', 1, true)
local int_part, frac_part
if decimalloc == nil then
int_part = nstr
else
int_part = nstr:sub(1, decimalloc-1)
frac_part = nstr:sub(decimalloc + 1)
end
-- only define ret_i as an empty table, let ret_d stay nil
local ret_i,ret_d = {}
-- Loop to handle most of the groupings; from right to left, so that if a group has less than 3 members, it will be the first group
while int_part:len() > 3 do
-- Insert in first spot, since we're moving backwards
table.insert(ret_i,1,int_part:sub(-3))
int_part = int_part:sub(1,-4)
end
-- handle any left over numbers
if int_part:len() > 0 then
table.insert(ret_i,1,int_part)
end
if precision ~= 0 and frac_part then
ret_d = {}
if precision == -1 then
precision = frac_part:len()
end
-- Reduce the length of the string if required precision is less than actual precision
-- OR
-- Increase it (by adding 0s) if the required precision is more than actual
local offset = precision - frac_part:len()
if offset < 0 then
frac_part = frac_part:sub(1,precision)
elseif offset > 0 then
frac_part = frac_part .. string.rep('0', offset)
end
-- Allow groups of 3 or 2 (3 first)
for v in string.gmatch(frac_part,'%d%d%d?') do
table.insert(ret_d,v)
end
-- Preference for groups of 4 instead of groups of 1 at the end
if #frac_part % 3 == 1 then
if frac_part:len() == 1 then
ret_d = {frac_part}
else
local last_g = ret_d[#ret_d] or ''
last_g = last_g..frac_part:sub(-1)
ret_d[#ret_d] = last_g
end
end
end
return ret_i,ret_d
end
return p