# Module:Solar eclipse

local eclipse = {}  
local args = {}  

local data_module_prefix = "Module:Solar eclipse/db/"  

local function ifnotempty(s,a,b)  
if (s and s ~= '') then  
return a  
else  
return b  
end  
end  

local function ifexist(page)  
if not page then return false end  
if mw.title.new(page).exists then return true end  
return false  
end  

local function parsedate(y,m,d)  
local lang = mw.language.getContentLanguage  
d = (tonumber(d) < 10) and ('0' .. tonumber(d)) or (d)  
m = (tonumber(m) < 10) and ('0' .. tonumber(m)) or (m)  
local success, result = pcall(lang.formatDate, lang, 'F j, Y', y .. '-' .. m .. '-' .. d)  
return success and result or nil  
end  

local function parsecoord(, s)  
local lat = s:match('^%s*([%d][%d.]*)%s*[NS]%s*[%d][%d.]*[EW]%s*$')  
local NS = s:match('^%s*[%d][%d.]*%s*([NS])%s*[%d][%d.]*[EW]%s*$')  
local lon = s:match('^%s*[%d][%d.]*%s*[NS]%s*([%d][%d.]*)[EW]%s*$')  
local EW = s:match('^%s*[%d][%d.]*%s*[NS]%s*[%d][%d.]*([EW])%s*$')  
if( lat and NS and lon and EW ) then  
return :expandTemplate{ title = 'coord', args = {lat, NS, lon, EW, 'type:landmark'} }  
else  
return s  
end  
end  

local function parsekm(, s)  
if(s and s:match('^%s*[%d][%d.]*%s*$')) then  
return :expandTemplate{ title = 'convert', args = {s, 'km','mi',abbr = 'on'} }  
else  
if(s and s ~= '') then  
return s .. ' கிமீ'  
else  
return nil  
end  
end  
end  

local function parsetime(s)  
if(s and s ~= '') then  
local min = s:match('^%s*([%d][%d]*)m%s*[%d][%d]*s%s*$')  
local sec = s:match('^%s*[%d][%d]*m%s*([%d][%d]*)s%s*$')  
if( min and sec ) then  
return tostring(tonumber(min)*60 + tonumber(sec)) .. '&nbsp;வி' ..  
' (' .. min .. '&nbsp;நி ' .. sec .. '&nbsp;வி)'  
end  
end  
return s  
end  

local function cataloglink(c, y)  
if(c and tonumber(c)) then  
local y1 = math.floor( (tonumber(y) - 1) / 10 ) * 10 + 1  
local y2 = y1 + 99  
return '.. tostring(y1) .. '-' .. tostring(y2) .. '.html ' .. c .. ''  
else  
return c  
end  
end  

local function loadsolardb(, s)  
local yearstr = s:match('^%s*([%d][%d][%d][%d])[A-Z][a-z][a-z][%d][%d]%s*$') or ''  
local function setarg(k, v)  
if(v and v ~= '') then args[k] = v end  
end  
if( yearstr ~= '' ) then  
local dbsubpage = math.floor( (tonumber(yearstr) - 1) / 50 ) * 5  
local dbpage = data_module_prefix .. tostring( dbsubpage )  
if (ifexist(dbpage)) then  
local data = mw.loadData(dbpage)  
local dargs = data[s]  
setarg('date', parsedate(dargs['y'], dargs['m'] or dargs['m3'] or dargs['m2'], dargs['d'] or dargs['d2']))  
setarg('image', (dargs['Ph'] and dargs['Ph'] ~= *) and * or nil)  
setarg('caption', dargs['PhCap'])  
setarg('map', (dargs['Map'] and dargs['Map'] ~= *) and * or nil)  
setarg('map_caption', 'Map')  
setarg('type_ref', '')  
setarg('cat', cataloglink(dargs['Cat'], dargs['y']) )  
setarg('nature', dargs['Ty'])  
setarg('gamma', dargs['Gam'])  
setarg('magnitude', dargs['Mag'])  
setarg('saros', dargs['Saros'] and '[[Solar Saros ' .. dargs['Saros'] .. '|' .. dargs['Saros'] .. ']]')  
setarg('saros_sequence', dargs['Mem'])  
setarg('saros_total', dargs['Max'])  
setarg('max_eclipse_ref', '')  
setarg('duration', parsetime(dargs['Dur']))  
setarg('location', '')  
setarg('coords', parsecoord(,dargs['Loc']))  
setarg('max_width', parsekm(,dargs['Wid']))  
setarg('times_ref', '')  
setarg('start_partial', dargs['TiPB'])  
setarg('start_total', dargs['TiTB'])  
setarg('start_central', '')  
setarg('greatest_eclipse', dargs['TiG'])  
setarg('end_central', '')  
setarg('end_total', dargs['TiTE'])  
setarg('end_partial', dargs['TiPE'])  
end  
end  
end  

local function infobox  
local abovestr = ifnotempty(args['date'],  
"*" .. (args['date'] or *) .. "''-இல் நிகழ்ந்த கதிரவ மறைப்பு",  
", see Template:Infobox Solar eclipse")  
local bgcolor = args['background'] or args['bgcolour'] or ''  
local mapstr = ifnotempty(args['map'],  
"<div>" ..  
(args['map'] or '') .. ifnotempty(args['map_caption'],  
"<div><small>" ..  
(args['map_caption'] or *) .. "</small></div>", *) .. '</div>')  

return :expandTemplate{ title = 'infobox', args = {  
["bodyclass"] = "vevent",  
["bodystyle"] = "width:25em; text-align:; font-size:90%;",  
["above"] = abovestr,  
["aboveclass"] = "summary",  
["abovestyle"] = "padding-bottom:0.25em; background:" .. bgcolor .. "; line-height:1.2em; text-align:; font-size:115%;",  
------------------ Images and maps ------------------  
["image"] = args['image'] or '',  
["imagestyle"] = "padding-bottom:0.5em;",  
["caption"] = args['caption'] or '',  
["captionstyle"] = "padding-top:0.1em; line-height:1.2em; font-size:90%;",  
["headerstyle"] = "background:#eee; font-size:105%;",  
["labelstyle"] = "padding:0 0.5em 0 0; line-height:1.1em;",  
["datastyle"] = "padding:0; line-height:1.2em; vertical-align:middle;",  
["data1"] = mapstr,  
------------- Type of eclipse and saros -------------  
["header2"] = "மறைப்பின் வகை" .. (args['type_ref'] or ''),  
["label3"] = "இயல்பு",  
["data3"] = args['nature'] or '',  
["label4"] = "காம்மா",  
["data4"] = args['gamma'] or '',  
["label5"] = "அளவு",  
["data5"] = args['magnitude'] or '',  
------------------ Maximum eclipse ------------------  
["header7"] = "அதியுயர் மறைப்பு" .. (args['max_eclipse_ref'] or ''),  
["label8"] = "காலம்",  
["data8"] = args['duration'] or '',  
["label9"] = "இடம்",  
["data9"] = args['location'] or '',  
["class9"] = "location",  
["label10"] = "ஆள் கூறுகள்",  
["data10"] = args['coords'] or '',  
["label11"] = "பட்டையின் அதியுயர் அகலம்",  
["data11"] = args['max_width'] or '',  
----------------------- Times -----------------------  
["header12"] = "நேரங்கள் (UTC)" .. (args['times_ref'] or ''),  
["label13"] = "(P1) பகுதி கிரகணம் துவக்கம்",  
["data13"] = args['start_partial'] or '',  
["label14"] = "(U1) முழு கிரகணம் துவக்கம்",  
["data14"] = args['start_total'] or '',  
["label15"] = "(U2) நடு மறைப்பு துவக்கம்",  
["data15"] = args['start_central'] or '',  
["label16"] = "பெரும் மறைப்பு",  
["data16"] = args['greatest_eclipse'] or '',  
["label17"] = "(U3) நடு மறைப்பு முடிவு",  
["data17"] = args['end_central'] or '',  
["label18"] = "(U4) முழு மறைப்பு முடிவு",  
["data18"] = args['end_total'] or '',  
["label19"] = "(P4) பகுதி கிரகணம் முடிவு",  
["data19"] = args['end_partial'] or '',  
------------------------ Event references -------------------------  
["header20"] = "மேற்கோள்கள்",  
["label21"] = "சாரோசு",  
["data21"] = (args['saros'] or *) .. " (" .. (args['saros_sequence'] or *) .. " of " .. (args['saros_total'] or '') .. ")",  
["label22"] = "அட்டவணை # (SE5000)",  
["data22"] = args['cat'] or '',  
} }  

end  

function eclipse.box  
args = require('Module:Arguments').getArgs(, {  
wrappers = 'Template:Infobox solar eclipse'  
})  

if( args['2'] and args['2'] ~= '') then  
loadsolardb(,args['2'])  
elseif( args['1'] and args['1'] ~= '') then  
loadsolardb(,args['1'])  
end  

return infobox  
end  

return eclipse