Dokumentationen för denna modul kan skapas på Modul:Befolkningsutveckling2/dok

p = {}
 
function p.diagram(frame)
	local lang = mw.language.new('sv')
	local pFrame = frame:getParent()
	local args = pFrame.args
	local text = ''
	local namn = args.namn or frame.args.namn
	local max = -math.huge
	local note = args['ref'] or ''
	local noter = {}
	local fotnot = args.fotnot or ''
	if namn == nil or namn == ''then
		return 'Inget namn är angivet' -- namn måste anges
	end
	local fran = tonumber(args['från']) or 1800 -- default startvärde är 1800
	local fran2 = math.huge -- dummy argument för att hitta lägsta och högsta värde
	local till2 = -math.huge
	local till = tonumber(args.till) or tonumber(os.date("%Y")) --default startvärde är CURRENTYEAR
	local step = 1 -- rätt ordning
	local areakolumn = nil -- variabel för att avgöra om en kolumn för area behövs
	local fkr = nil -- variabel för att avgöra om "före Kristus" behöver markeras
	if args.fkr then
		fkr = 'fkr'
	end
	if till < fran then
		step = -1
	end
	local reffarna = ''
	local notraknare = 1
	for i = fran, till, step do
		local pu = 'inv' .. i
		if tonumber(args[pu]) then
			local pv = 'area' .. i
			if args[pv] then
				areakolumn = ''
			end
			if tonumber(args[pu]) > max then
				max = tonumber(args[pu])
			end
			if i > till2 then
				till2 = i
			end
			if i < fran2 then
				fran2 = i
			end
			if i < 0 then
				fkr = 'fkr'
			end
			local pw = 'typ' .. i
			if args[pw] then
				reffarna = 'A'
				if args[pw] == 'småort' then
					args[pw] = 'som småort'
				end
				if args[pw] == 'tätort' then
					args[pw] = 'som tätort'
				end
				if noter[args[pw]] == nil then
					notraknare = notraknare + 1
					noter[args[pw]] = 'Not'..tostring(notraknare)
				end
			end
		end
	end
	if tonumber(args.max) then 
		max = tonumber(args.max)
	end
	text = 'Befolkningsutvecklingen i ' .. namn
	local frantext = fran2 .. ''
	local tilltext = till2 .. ''
	if fkr then
		if fran2 < 0 then
			frantext = frantext .. ' f. kr.'
		else
			frantext = frantext .. ' e. kr.'
		end
		if till2 < 0 then
			tilltext = tilltext .. ' f. kr.'
		else
			tilltext = tilltext .. ' e. kr.'
		end
	end
	if fran2 == till2 then
		text = text .. ' ' .. frantext  .. note			
	else
		text = text .. ' ' .. frantext .. '–' .. tilltext .. note
	end
	text = mw.text.tag('big', {}, text)
	text = mw.text.tag('th', {colspan="5"}, text)
	text = mw.text.tag('tr', {style="background:#DDD;"}, text)
	text = text .. mw.text.tag('tr', {}, mw.text.tag('td', {colspan="5", style="padding:4px"}, ''))
	local h1 = mw.text.tag('td', {style="padding:0 4px", valign="top"}, 'År')
	h1 = h1 .. mw.text.tag('td', {style="padding:0 4px;", align="right", valign="top"}, '')
	h1 = h1 .. mw.text.tag('td', {style="width:525px"}, '')
	h1 = h1 .. mw.text.tag('td', {style="padding:0 4px;width:5em", align="right", valign="top"}, 'Folkmängd')
	if areakolumn then
		areaheader = args.stapel2header or 'Areal'
		areaenhet = args.areaenhet or '([[hektar|ha]])'
		h1 = h1 .. mw.text.tag('td', {style="padding:0 4px;", align="right", valign="top"}, areaheader.. ' ' .. areaenhet)
	end
	text = text .. mw.text.tag('tr', {style="font-size:88%;"}, h1)
 
	local color = args.color or '#B0C4DE'
	for i = fran, till, step do
 
		local pu = 'inv' .. i
 
		if tonumber(args[pu]) then
			local h4 = math.floor(480*tonumber(args[pu]/max)) .. ''
			local h7 = math.abs(i) .. ''
			if fkr then 
				if i < 0 then
					h7 = h7 .. ' f.&nbsp;Kr.'
				else
					h7 = h7 .. ' e.&nbsp;Kr.'
				end
			end
			local h8 = 'color' .. i
			if args[h8] then 
				color = args[h8]
			end
			local h9 = 'typ' .. i
			local color2 = color
			local lokalnot = ''
			if args[h9] == 'som småort' then
				color2 = '#d0e0f5'
			elseif args[h9] == 'som tätort' then
				color2 = '#B0C4DE'
			end
			if args[h9] then
				lokalnot = frame:extensionTag{ name = 'ref', content = args[h9], args = {name = noter[args[h9]], group = "N"}}
			end
			local h10 = 'ref' .. i
			local h2 = mw.text.tag('td', {colspan="2", style="padding-right:0.4em; padding-left:0.4em"}, h7)
			local h3 = mw.text.tag('div', {style="margin-top:0; margin-bottom:0; background:"..color2.."; height:10px; width:"..h4.."px; overflow:hidden"}, '&#160; ')
			h2 = h2 .. mw.text.tag('td', {style="border-left:solid 1px silver;border-right:solid 1px silver;"}, h3)
 
			local content = lang:formatNum(tonumber(args[pu]))
			if areakolumn == nil then
				content = content .. lokalnot
				if args[h10] then
					content = content .. args[h10]
				end
			end
			h2 = h2 .. mw.text.tag('td', {style="min-width:3em;padding-left:0.4em", align="right"}, content)
			if areakolumn then
				local h5 = 'area' .. i
				local h11 = tonumber(args[h5]) or args[h5] or ''
				local h6 = ''
				if tonumber(h11) then
					h6 = lang:formatNum(h11) or h11
				end
				if args[h10] then
					h6 = h6 .. args[h10]
				end
				h2 = h2 .. mw.text.tag('td', {style="min-width:3em;padding-left:0.4em", align="right"}, h6 .. lokalnot)
			end
			text = text .. mw.text.tag('tr', {}, h2)
		end
	end
 
	if args.fotnot or reffarna ~= '' then
		local slutet2 = args.fotnot or ''
		if reffarna ~= '' then 
			slutet2 = slutet2 .. frame:extensionTag{ name = 'references', args = { group='N' } }
		end
		if slutet2 ~= '' then
			text = text .. mw.text.tag('td', {colspan="5", style="padding:4px"}, mw.text.tag('b', {}, 'Anm: ') .. slutet2)
		end
	end
	i = 1
	while args['legend' .. tostring(i)] do
		local h12 = mw.text.tag('span', {style="display:inline-block; width:1.5em; height:1.5em; margin:1px 0; border:1px solid black; background-color:"..args['legend' .. tostring(i)] .. "; color:black; font-size:88%; text-align:center;"}, '&#160;')
		local h13 = args['legend'..tostring(i)..'_text'] or ''
		h12 = mw.text.tag('div', {}, h12..'&#160;'.. h13)
		h12 = mw.text.tag('td', {colspan="5", style="padding:4px"}, h12 )
		h12 = mw.text.tag('tr', {}, h12)
		text = text .. h12
		i = i + 1
	end
 
	text = mw.text.tag('table', {cellspacing="0", cellpadding="0", style="clear:none;float:none;border:silver solid 1px; font-size:90%; padding:0.4em;margin:0.4em;width:650px"}, text)
 
	return text 
end
 
return p