Modul:GeoData
Utseende
Dokumentationen för denna modul kan skapas på Modul:GeoData/dok
local i = {}
local function __nospace(s)
local newstr = '';
newstr = mw.ustring.gsub(s or '', '%s', ''); --rimuovo gli spazi
return newstr;
end
function i.nospace(frame)
return __nospace(frame.args[1]); --rimuovo gli spazi
end
local function __nozeros(lat, long)
local lat = lat or '';
local long = long or '';
--se uno dei due parametri è vuoto restituisco una stringa vuota per evidenziarne l'errore
if lat=='' or long=='' then
return "";
end
--normalizzo eventuali simboli non standard
for _,search in ipairs({"'", "‘", "’", "′", "'"}) do
lat = string.gsub(lat, search, "'");
long = string.gsub(long, search, "'");
end
for _,search in ipairs({'"', "''", "“", "”", """}) do
lat = string.gsub(lat, search, '"');
long = string.gsub(long, search, '"');
end
--se hanno entrambi i secondi a 0 li sopprimo
if string.find(lat, "'%s?0?0\"") and string.find(long, "'%s?0?0\"") then
lat = string.gsub(lat, "'%s?0?0\"", "'");
long = string.gsub(long, "'%s?0?0\"", "'");
else
return lat.." "..long;
end
--se hanno entrambi i minuti a 0 li sopprimo
if string.find(lat, "°%s?0?0'") and string.find(long, "°%s?0?0'") then
lat = string.gsub(lat, "°%s?0?0'", "°");
long = string.gsub(long, "°%s?0?0'", "°");
end
return lat.." "..long;
end
function i.nozeros(frame)
return __nozeros(frame.args[1], frame.args[2])
end
local function __dd2dms(p1,p2)
local coordinate=__nozeros(__nospace(p1), __nospace(p2));
--se minuti e/o secondi hanno una sola cifra gli antepongo uno zero
coordinate=string.gsub(coordinate, "(° ?)(.')","%10%2");
coordinate=string.gsub(coordinate, "(' ?)(.\")","%10%2");
return coordinate;
end
function i.dd2dms(frame)
return __dd2dms(frame.args[1], frame.args[2]);
end
function i.dd2dmsspan(frame)
local coordinate = __dd2dms(frame.args[1], frame.args[2]);
local lat, long = coordinate:match("(.+) (.+)");
return '<span class="latitude">' .. lat .. '</span> ' .. '<span class="longitude">' .. long .. '</span>';
end
return i;