پودمان:Celestial object quadrangle

از ویکی‌پدیا، دانشنامهٔ آزاد
توضیحات پودمان[ایجاد] [پاکسازی]
-- This module implements/replaces
-- [[Template:Lunar quadrangle]]
-- [[Template:Mars quadrangle]]
-- [[Template:Venus quadrangle]]
local numConv = require("module:Numeral converter").convert
local p = {}

local function moonquad(lat, lon)
	local function LQ(n)
		if n < 10 then 
			return 'ال‌کیو۰' .. numConv('fa', n)
		else 
			return 'ال‌کیو' .. numConv('fa', n)
		end
	end
	-- Note: requires positive longitude coordinates
	if lat > 65 then
		return LQ(1)
	elseif lat > 30 then
		if lon >= 180 then
			return LQ(2 + math.floor( (lon - 180) / 60 ) )
		else
			return LQ(5 + math.floor( lon / 60 ) )
		end
	elseif lat >= 0 then
		if lon >= 180 then
			return LQ(8 + math.floor( (lon - 180) / 45 ) )
		else
			return LQ(12 + math.floor( lon / 45 ) )
		end
	elseif lat >= -30 then
		if lon >= 180 then
			return LQ(16 + math.floor( (lon - 180) / 45 ) )
		else
			return LQ(20 + math.floor( lon / 45 ) )
		end
	elseif lat >= -65 then
		if lon >= 180 then
			return LQ(24 + math.floor( (lon - 180) / 60 ) )
		else
			return LQ(27 + math.floor( lon / 60 ) )
		end
	else
		return LQ(30)
	end

	return 'خطا'
end

local function marsquad(lat, lon)
	-- Note: requires positive longitude coordinates
	if lat > 65 then 
		return 'دریای شمالی'
	elseif lat > 30 then 
		if lon < 60 then return 'دریاچه ایسمنیوس'
		elseif lon < 120 then return 'کاسیوس'
		elseif lon < 180 then return 'سبرنیا'
		elseif lon < 240 then return 'دیاکریا'
		elseif lon < 300 then return 'آرکادیا'
		else return 'دریای اسیدی' end
	elseif lat >= 0 then 
		if lon < 45 then return 'عرب'
		elseif lon <  90 then return 'سیرت بزرگ'
		elseif lon < 135 then return 'آمنتس'
		elseif lon < 180 then return 'الیسیوم'
		elseif lon < 225 then return 'آمازون'
		elseif lon < 270 then return 'تارسیس'
		elseif lon < 315 then return 'مرداب ماه'
		else return 'مرداب اکسیا' end
	elseif lat >= -30 then 
		if lon < 45 then return 'خلیج سبائوس'
		elseif lon <  90 then return 'یاپیژیا'
		elseif lon < 135 then return 'دریای تیرنی'
		elseif lon < 180 then return 'ائولیس'
		elseif lon < 225 then return 'ممنونیا'
		elseif lon < 270 then return 'دریاچه فینیکس'
		elseif lon < 315 then return 'کاپرتیز'
		else return 'خلیج مارگریتفر' end
	elseif lat >= -65 then 
		if lon < 60 then return 'نوآکیس'
		elseif lon < 120 then return 'هلاس'
		elseif lon < 180 then return 'اریدانیا'
		elseif lon < 240 then return 'فایتون'
		elseif lon < 300 then return 'تاماسیا'
		else return 'آرجری' end
	else
		return 'دریای جنوبی'
	end
end

local function mercuryquad(lat, lon)
	-- Note: requires positive longitude coordinates
	if lat >= 66 then
		return 'بوریلیس'
	elseif lat >= 21 then
		if lon < 90 then return 'هوکوسائی'
		elseif lon < 180 then return 'رادیتلادی'
		elseif lon < 270 then return 'شکسپیر'
		else return 'ویکتوریا' end
	elseif lat > -21 then
		if lon < 72 then return 'دورن'
		elseif lon < 144 then return 'امینسکو'
		elseif lon < 216 then return 'تولستوی'
		elseif lon < 288 then return 'بتهوون'
		else return 'کویپر' end
	elseif lat > -66 then
		if lon < 90 then return 'دبوسی'
		elseif lon < 180 then return 'نرودا'
		elseif lon < 270 then return 'میکل‌آنژ'
		else return 'دیسکاوری' end
	else
		return 'باخ'
	end

	return 'خطا'
end

local function venusquad(lat, lon)
	-- Note: requires positive longitude coordinates
	if lat > 57 then
		return 'ایشتار ترا'
	elseif lat >= 0 then
		if lon < 60 or lon >= 300 then return 'دشت سدنا'
		elseif lon < 180 then return 'دشت نیوب'
		else return 'دشت گوئینیویر' end
	elseif lat >= -57 then
		if lon < 60  or lon >= 300 then return 'دشت لاوینیا'
		elseif lon < 180 then return 'آفرودیته ترا'
		else return 'دشت هلن' end
	else
		return 'لادا ترا'
	end
end

local function quad_name(lat, lon, globe)
	-- lower case
	globe = globe:lower() or ''

	-- convert to numbers
	lat = tonumber(lat) or ''
	lon = tonumber(lon) or ''

	-- get the quad name
	if lat ~= '' and lon ~= '' and globe ~= '' then
		if lon < 0 then lon = lon + 360 end
		if lon < 0 or lon > 360 then
			return 'خطا'
		end
		if globe == 'mars' or globe == 'مریخ' then
			return marsquad(lat, lon)
		elseif globe == 'mercury' or globe == 'عطارد' then
			return mercuryquad(lat, lon)
		elseif globe == 'moon' or globe == 'ماه' then
			return moonquad(lat, lon)
		elseif globe == 'venus' or globe == 'زهره' then
			return venusquad(lat, lon)
		end
	end

	return 'خطا'
end

function p.category(frame)
	local args = frame.args
	local res = quad_name(args['lat'] or '', args['lon'] or '', args['globe'] or '')
	
	if res ~= 'خطا' then
		if args['nameonly'] and args['nameonly'] ~= '' then
			return res
		else
			return '[[رده:چهارگوش ' .. res .. ']]'
		end
	end

	return '<span class="error">خطا</span>'
end

function p.name(frame)
	local args = frame.args
	local res = quad_name(args['lat'] or '', args['lon'] or '', args['globe'] or '')
	
	if res ~= 'خطا' then
		return res
	end
	return '<span class="error">خطا</span>'
end

return p