Module:Game dates

From IFWiki

Documentation for this module may be created at Module:Game dates/doc

local p = {}
local cargo = mw.ext.cargo

function getDateAndUncertainty( release )
		
	function getMonthNumber(monthName)
	    local months = {
	        ['january'] = '01', ['february'] = '02', ['march'] = '03', ['april'] = '04',
	        ['may'] = '05', ['june'] = '06', ['july'] = '07', ['august'] = '08',
	        ['september'] = '09', ['october'] = '10', ['november'] = '11', ['december'] = '12'
	    }
	    return months[monthName:lower()]
	end

	dateTable = { }
	for d in string.gmatch( release, "<p>'''Date:''' (.-) </p" ) do 
		-- Relying on [[Template:Game release]] not changing
		d = mw.text.trim(d)
		u = 'No' -- uncertainty, for now
		s = '' -- will be like a timestamp, for ordering
        if d ~= "" then
        	-- We have a date
			if d.match(d, " %(uncertain%)$") then
				u = 'Yes'
			    d = d.gsub(d, " %(uncertain%)$", "")
			    d = mw.text.trim(d)
			end
		    day, month, year = d.match(d, "^(%d+) (%w+) (%d+)$")
		    if day and #day == 1 then
				day = '0' .. day
			end
		    if year then
		    	s = year .. getMonthNumber(month) .. day
		    else 	
			    month, year = d.match(d, "^(%w+) (%d+)$")
			    if year then
			    	s = year .. getMonthNumber(month) .. '99'
			    else 	
			    	year = d.match(d, "^(%d+)$")
				    if year then
				    	s = year .. '9999'
				    end	
		    	end		    	
		    end
			table.insert (dateTable, { d=d, u=u, s=s})
        end
	end	

	-- Get earliest date
	-- Preferring more precise dates, e.g. January 1970 (19700199) rather than 1970 (19709999)
	table.sort(dateTable, function(a, b)
		if a.s == '' and b.s == '' then
	        return false
	    elseif a.s == '' then
	        return false
	    elseif b.s == '' then
	        return true
	    else
	        return a.s < b.s
	    end
	end)
	
	if dateTable[1] ~= nil then
		return dateTable[1]['d'], dateTable[1]['u'] -- earliest
	else 
		return '', 'No'
	end
end

function p.GameDate( frame )
	release = frame.args['Release']
	d,u = getDateAndUncertainty (release)
	return d
end

function p.GameDateUncertain( frame )
    release = frame.args['Release']	
	d,u = getDateAndUncertainty (release)
    return u
end

return p