Prijeđi na sadržaj

Modul:Broj

Izvor: Wikipedija


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 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">&thinsp;' .. 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