Modul:Popis stanovništva/unos


local p = {}
		
	-- TODO naselja s velikim slovima su općine
	-- upis općina
	-- provjera da polje sadrži broj
	
	local godine = {1857, 1869, 1880, 1890, 1900, 1910, 1921, 1931, 1948, 1953, 1961, 1971, 1981, 1991, 2001}

function sorted_iter(t)
  local i = {}
  for k in next, t do
    table.insert(i, k)
  end
  table.sort(i, function(a, b) return a > b end)
  return function()
    local k = table.remove(i)
    if k ~= nil then
      return k, t[k]
    end
  end
end

function mysplit (inputstr, sep)
        if sep == nil then
                sep = "%s"
        end
        local t={}
        for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                table.insert(t, str)
        end
        return t
end

function p.start()
	local args = mw.getCurrentFrame().args
	local zupanija = args['1']
	local naselje = args['2']
	local tekst = args['tekst']
	
	local tablica = require('Modul:Popis stanovništva/' .. zupanija .. '/' .. naselje) or 0
	
	local data = parseTekst(tekst)
	
	local sizeFlag = provjeriPodatke(data)
	if sizeFlag == 0 then
		mw.log('Provjera u redu!')
	else
		return 'Pogreška: sva polja u unosu moraju imati 16 stupaca'
	end

	local tablica = dodajPodatke(tablica, data)
	
	return ispis(tablica, zupanija, naselje)
end

function parseTekst(tekst)
	tekst = mysplit(tekst, '\n') -- jedna linija po indeksu tablice
	for k, v in pairs(tekst) do
		tekst[k] = mysplit(v, '\t')
	end
	
	return tekst
end

function provjeriPodatke(data)
	local sizeFlag = 0
	for k, v in pairs(data) do
		if table.getn(v) ~= 16 then
			sizeFlag = 1
		end
	end
	return sizeFlag
end


function dodajPodatke(tablica, data)
	for _, tv in pairs(tablica) do --QB, podatci
		for _, dv in pairs(data) do -- indeks, (mjesto, brojevi po godinama)
			if dv[1] == tv.ime then
				-- ubaci podatke
				for gk, gv in pairs(godine) do
					tv['popis'.. godine[gk]] = dv[gk+1]
				end
			end
		end -- end for data
	end -- end for tablica

	return tablica
end

function getNumber(txt)
local str = ""
string.gsub(txt,"%d+",function(e) str = str .. e end)
return str;
end

function ispis(tablica, zupanija, naselje)
	local retval = '[[Modul:Popis stanovništva/' .. zupanija .. '/' .. naselje ..']]'
	.. '\n<pre>'
		.. 'local naselje = {}\n\n'
	
	local kopija = {}
	for k, v in pairs(tablica) do
		local oldK = k
		local keyVal = tonumber(getNumber(k))
		if string.match(k, "QB") or keyVal < 99 then
			local paddedVal = string.format("%02d", keyVal)
			local newK = k:gsub(keyVal, paddedVal)
			mw.log('key change', oldK, newK)
			
			kopija[newK] = v
			tablica[oldK] = nil
		end
	end
	
	local substCheck = mw.isSubsting()
	
	for k, v in sorted_iter(kopija) do
		
		if substCheck then
			retval = retval .. "naselje[\'" .. k .. "\'] = {\n"
			else retval = retval .. "naselje" .. mw.text.nowiki("[\'" .. k .. "\']") .. ' = {\n'
		end
			
	for kk, vv in sorted_iter(v) do
		if substCheck then
			retval = retval .. "\t" .. kk .. " = " .. "\'" .. vv .. "\'" .. "," .. '\n'
			else retval = retval .. "\t" .. kk .. " = " .. mw.text.nowiki("\'" .. vv .. "\'" .. ",") .. '\n'
		end
	end
	retval = retval .. '}\n\n'
	end
	
	retval = retval .. '\nreturn naselje\n</pre>'
	return retval
end

return p