local mWikidata = require('Modulo:Wikidata')
local p = {}
local function dump(t, ...)
local args = {...}
for _, s in ipairs(args) do
table.insert(t, s)
end
end
-- Converte una stringa di valori numerici separati da "," in una lista
-- Eventuali valori non numerici sono ignorati
local function read_array(args)
local years = {}
local populations = {}
if args.anni then
local list = mw.text.split(string.gsub(args.anni, "%s", ""), ",")
for _,s in ipairs(list) do
years[#years+1] = tonumber(s) or 0
end
if args.popolazione then
local list = mw.text.split(string.gsub(args.popolazione, "%s", ""), ",")
for _,s in ipairs(list) do
populations[#populations+1] = tonumber(s) or 0
end
end
else -- vecchio metodo di inserimento
for i=1,20 do
local index = tonumber(i)
local year = tonumber(args['a' .. index])
if year then
years[#years+1] = years
populations[#populations+1] = args['p' .. index]
end
end
end
return years, populations
end
function p.get_wikidata(from)
local populations = mWikidata._getProperty({'P1082', from=from, rank='normal'}, true)
local years = {}
for i =1, #populations do -- per il momento inserisco come anni una sequenza numerica
years[i] = #populations-i+1
end
return years,populations
end
function p._demografia(args)
local years,populations = read_array(args)
--if #years == 0 then
-- years,populations = get_wikidta(args.from)
--end
local graph = {}
local popmax = 0
for _,p in ipairs(populations) do
if p > popmax then popmax = p end
end
dump(graph, 'Colors=\n id:lightgrey value:gray(0.9)\n id:darkgrey value:gray(0.7)\n id:sfondo value:rgb(1,1,1)\n id:barra value:rgb(0.6,0.7,0.8)\n\n')
dump(graph, 'ImageSize = width:', args.dimx or '455', ' height:', args.dmy or '373', '\n')
dump(graph, 'PlotArea = left:50 bottom:50 top:30 right:30\nDateFormat = x.y\n')
dump(graph, 'Period = from:0 till:', args.popmax or tostring(popmax), '\n')
dump(graph, 'TimeAxis = orientation:vertical\nAlignBars = justify\n')
dump(graph, 'ScaleMajor = gridcolor:darkgrey increment:', args.passo1 or '10000', ' start:0\n' )
dump(graph, 'ScaleMinor = gridcolor:lightgrey increment:', args.passo2 or '1000', ' start:0\n')
dump(graph, 'BackgroundColors = canvas:sfondo\n')
dump(graph, 'BarData=\n')
for _,year in ipairs(years) do
dump(graph, string.format(' bar: %d text:%d\n', year, year))
end
dump(graph, '\n')
dump(graph, 'PlotData=\n color:barra width:20 align:left\n\n')
for i =1,#years do
dump(graph, string.format(' bar:%d from:0 till:%d\n', years[i], populations[i]))
end
dump(graph, '\n')
lang = mw.language.new('it')
dump(graph, 'PlotData=\n')
for i=1,#years do
p_formatted = lang:formatNum(math.floor(tonumber(populations[i]) + 0,5) )
dump(graph, string.format(' bar: %d at: %d fontsize:S text: %s shift:(-10,5)|n.d. shift:(-8,5)\n',
year[i], populations[i], p_formatted))
end
dump(graph, '\n')
if args.fonte then
dump(graph, 'TextData=\n fontsize:S pos:(20,20)\n text:fonte ', args.fonte, '\n')
end
local draw_graph
if args.raw then
draw_graph = '<nowiki>'.. table.concat(graph) .. '</nowiki>'
else
draw_graph = frame:extensionTag('timeline', table.concat(graph))
end
local titolo = "''Abitanti censiti''\n"
if args.titolo then
args.titolo = "''" .. args.titolo .. "''\n"
end
return titolo .. draw_graph
end
function p.demografia(frame)
local args = require('Modulo:Arguments').getArgs(frame)
return p._demografia(args)
end
return p