Модуль:КаардынатыЗьВікізьвестак
Дакумэнтацыю да гэтага модуля можна стварыць у Модуль:КаардынатыЗьВікізьвестак/Дакумэнтацыя
local p = {};
-- Дапомныя значэньні аргумэнтаў
local defaultArgs = {
['Шырата градусаў'] = '',
['Шырата хвілінаў'] = '0',
['Шырата сэкундаў'] = '0',
['Шырата паўшар’е'] = 'N',
['Даўгата градусаў'] = '',
['Даўгата хвілінаў'] = '0',
['Даўгата сэкундаў'] = '0',
['Даўгата паўшар’е'] = 'E'
};
-- Суадносіны пайменных і лічбавых парамэтраў
local argsMap = {
'Шырата градусаў',
'Шырата хвілінаў',
'Шырата сэкундаў',
'Шырата паўшар’е',
'Даўгата градусаў',
'Даўгата хвілінаў',
'Даўгата сэкундаў',
'Даўгата паўшар’е'
};
-- Мэтад выклікае шаблён, дадаючы да парамэтраў кардынаты зь ВікіЗьвестак
function p.execTplWithCoords( frame )
local moduleWikidata = require( 'Модуль:Вікізьвесткі' );
local pFrame = frame:getParent();
local args = mw.clone( pFrame.args );
setmetatable( args, nil );
local template = mw.text.trim( args[1] );
args[1] = nil;
-- Фармат вываду
local outType = args[2]
if outType then
outType = mw.text.trim( outType );
end
-- Перавызначэньне 1 і 2 парамэтраў
args[1] = args['01'];
args['01'] = nil;
args[2] = args['02'];
args['02'] = nil;
if not args.lat_deg or args.lat_deg == '' then
-- Атрыманьне каардынатаў зь ВікіЗьвестак
frame.args = {
['property'] = 'p625',
['plain'] = true
};
local coords = moduleWikidata.formatProperty( frame );
coords = string.gsub( coords, ''', '\'' );
coords = string.gsub( coords, '"', '"' );
-- Пераўтварэньне каардынатаў у значэньні асобных парамэтраў
coords = mw.text.split( coords, ', ', true );
local lat = coords[1];
local lon = coords[2];
if lat and lat ~= '' then
args['Шырата градусаў'] = string.match( lat, '%d+°' );
args['Шырата хвілінаў'] = string.match( lat, '%d+\'' );
args['Шырата сэкундаў'] = string.match( lat, '[0-9%.]+"' );
args['Шырата паўшар’е'] = string.match( lat, '[NS]' );
end
if lon and lon ~= '' then
args['Даўгата градусаў'] = string.match( lon, '%d+°' );
args['Даўгата хвілінаў'] = string.match( lon, '%d+\'' );
args['Даўгата сэкундаў'] = string.match( lon, '[0-9%.]+"' );
args['Даўгата паўшар’е'] = string.match( lon, '[EW]' );
end
end
-- Заданьне дапомных значэньняў
for name, value in pairs( defaultArgs ) do
if not args[name] or args[name] == '' then
args[name] = value;
end
args[name] = mw.text.trim( args[name], '°\'" ' );
end
if (args['Шырата паўшар’е'] == 'N') then
args['Шырата паўшар’е'] = 'паўночнае';
else args['Шырата паўшар’е'] = 'паўднёвае';
end
if (args['Даўгата паўшар’е'] == 'E') then
args['Даўгата паўшар’е'] = 'усходняе';
else args['Даўгата паўшар’е'] = 'заходняе';
end
-- Асьлі парамэтры пустыя, шаблён не выклікаецца
if (args.lat_deg == '' and args.lon_deg == '') and not coord then
return '';
end
-- Асьлі ў другім парамэтры пазначаны фармат вываду
if outType and not coord then
-- Нумараваныя парамэтры, пачынаючы з n-га
if outType == '12345678' or outType == '23456789' or outType == '345678910' then
local n = 0;
if outType == '23456789' then
n = 1;
elseif outType == '345678910' then
n = 2;
end
for i, name in ipairs( argsMap ) do
args[i + n] = args[name];
args[name] = nil;
end
end
if outType == 'coord' then
args['coord'] = args.lat_deg .. '/' .. args.lat_min .. '/' .. args.lat_sec .. '/' .. args.lat_dir .. '/' .. args.lon_deg .. '/' .. args.lon_min .. '/' .. args.lon_sec .. '/' .. args.lon_dir
end
end
return frame:expandTemplate{ title = template, args = args };
end
return p;