Modul:Broj
Izgled
local p = {}
function p.rechtschreibung(frame)
args = frame.args
return p.broj_i_jedinice(args)
end
-- 1234567,89 → 1 234 567,89
-- parametri u tablici args: 1=broj; 2 ili jedinice; 3 ili pravilo (b, t, ub, ut; n; d)
function p.broj_i_jedinice(args)
local ul = args[1]
local ul = mw.ustring.gsub(ul,'[ .]', '') --ukloni bjeline, polubjeline i točke: prvi parametar trebao bi biti čisti (decimalni) broj (s predznakom)
N = ul:match('^%D*%d+,?%d-$') --broj s predznakom (ili bilo kakvim nizom znakova)
if N then
L, S, Z, D = ul:match('^(%D*%d)(%d*)(,?)(%d-)$') -- razdijeli -123456,78 na -1 / 23456 / , / 78
local jedinice = args['jedinice'] or args[2]
jedinice = jedinice and mw.text.trim(jedinice)
local pravilo = args['pravilo'] or args[3] or ''
--L = mw.ustring.gsub(L,'-','–') -- en-dash umjesto hyphen-minus; bolje ne, prelama se
if pravilo:match('t') then sep='.' else sep=' ' end --zasad obična bjelina jer reverse() pomiješa bajtove u utf8
if #S<=3 and not pravilo:match('u') or pravilo:match('n') then sep='' end
S = S:reverse():gsub('%d%d%d','%1'..sep):reverse()
--if pravilo:match('d') then
-- D = D:sub(1,-2):gsub('%d%d%d','%1'..sep) .. D:sub(-1) --grupiraj i decimale: radi, treba doradu, ali pravopis nema ništa o tom
--end
izl = mw.ustring.gsub(L .. S .. Z .. D,' ',' ') --sada je sigurno zamijeniti bjelinu neprelomljivom polubjelinom u202f; SI/ISO i dr.
if jedinice~='' then izl = izl .. '<span style="white-space:nowrap"> ' .. jedinice .. '</span>' end
--mw.log(ul, L,S,Z,D, '¦'..izl..'¦')
return izl
else
return '[[Predložak:Broj|<span style="color:red" title="broj se može sastojati od predznaka, znamenki i decimalnog zareza">broj?</span>]]'
end
end
return p