<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://it.wikijournal.org/w-wiki/index.php?action=history&amp;feed=atom&amp;title=Modulo%3ACoord</id>
	<title>Modulo:Coord - Cronologia</title>
	<link rel="self" type="application/atom+xml" href="https://it.wikijournal.org/w-wiki/index.php?action=history&amp;feed=atom&amp;title=Modulo%3ACoord"/>
	<link rel="alternate" type="text/html" href="https://it.wikijournal.org/w-wiki/index.php?title=Modulo:Coord&amp;action=history"/>
	<updated>2026-04-29T12:49:04Z</updated>
	<subtitle>Cronologia della pagina su questo sito</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://it.wikijournal.org/w-wiki/index.php?title=Modulo:Coord&amp;diff=177&amp;oldid=prev</id>
		<title>Philip: una versione importata</title>
		<link rel="alternate" type="text/html" href="https://it.wikijournal.org/w-wiki/index.php?title=Modulo:Coord&amp;diff=177&amp;oldid=prev"/>
		<updated>2025-02-19T08:06:23Z</updated>

		<summary type="html">&lt;p&gt;una versione importata&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;it&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Versione meno recente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versione delle 11:06, 19 feb 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;it&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Nessuna differenza)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wikijournal_org-it__:diff:1.41:old-176:rev-177 --&gt;
&lt;/table&gt;</summary>
		<author><name>Philip</name></author>
	</entry>
	<entry>
		<id>https://it.wikijournal.org/w-wiki/index.php?title=Modulo:Coord&amp;diff=176&amp;oldid=prev</id>
		<title>it__&gt;Daimona Eaytoy: non generare indicatore quando non va mostrato, fix per Special:Permalink/140491317#Anomalia_coordinate</title>
		<link rel="alternate" type="text/html" href="https://it.wikijournal.org/w-wiki/index.php?title=Modulo:Coord&amp;diff=176&amp;oldid=prev"/>
		<updated>2024-09-03T16:46:17Z</updated>

		<summary type="html">&lt;p&gt;non generare indicatore quando non va mostrato, fix per &lt;a href=&quot;/wiki/Speciale:LinkPermanente/140491317#Anomalia_coordinate&quot; title=&quot;Speciale:LinkPermanente/140491317&quot;&gt;Special:Permalink/140491317#Anomalia_coordinate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nuova pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
* Modulo che implementa il template Coord.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local mWikidata = require(&amp;#039;Modulo:Wikidata&amp;#039;)&lt;br /&gt;
local cfg = mw.loadData(&amp;#039;Modulo:Coord/Configurazione&amp;#039;)&lt;br /&gt;
local errorCategory = &amp;#039;[[Categoria:Errori di compilazione del template Coord]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
--                            Funzioni di utilità&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
-- Error handler per xpcall, formatta l&amp;#039;errore.&lt;br /&gt;
--&lt;br /&gt;
-- @param {string} msg&lt;br /&gt;
-- @return {string}&lt;br /&gt;
local function errhandler(msg)&lt;br /&gt;
	local cat = mw.title.getCurrentTitle().namespace == 0 and errorCategory or &amp;#039;&amp;#039;&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;div style=&amp;quot;color:red&amp;quot;&amp;gt;Il template {{Coord}} ha riscontrato degli errori &amp;#039; ..&lt;br /&gt;
						 &amp;#039;([[Template:Coord|istruzioni]]):\n%s&amp;lt;/div&amp;gt;%s&amp;#039;, msg, cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce il numero arrotondato al numero di cifre decimali richiesto.&lt;br /&gt;
-- http://lua-users.org/wiki/SimpleRound&lt;br /&gt;
--&lt;br /&gt;
-- @param {number} num&lt;br /&gt;
-- @param {number} idp&lt;br /&gt;
-- @return {number}&lt;br /&gt;
local function round(num, idp)&lt;br /&gt;
	local mult = 10^(idp or 0)&lt;br /&gt;
	return math.floor(num * mult + 0.5) / mult&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce la stringa &amp;quot;0 + numero&amp;quot; quando il numero è di una sola cifra, altrimenti lo stesso numero.&lt;br /&gt;
--&lt;br /&gt;
-- @param {number} num&lt;br /&gt;
-- @return {string}&lt;br /&gt;
local function padleft0(num)&lt;br /&gt;
	return (num &amp;lt; 10 and &amp;#039;0&amp;#039; or &amp;#039;&amp;#039;) .. num&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Converte un numero in stringa senza usare la notazione scientifica, esempio tostring(0.00001).&lt;br /&gt;
--&lt;br /&gt;
-- @param {number} num&lt;br /&gt;
-- @return {string}&lt;br /&gt;
local function numberToString(num)&lt;br /&gt;
	-- la parentesi () extra serve per non restituire anche il gsub.count&lt;br /&gt;
	return (string.format(&amp;#039;%f&amp;#039;, num):gsub(&amp;#039;%.?0+$&amp;#039;, &amp;#039;&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Parsifica il parametro display e restituisce una table con chiavi inline, title e debug.&lt;br /&gt;
--&lt;br /&gt;
-- @param {table} args&lt;br /&gt;
-- @return {table}&lt;br /&gt;
local function getDisplay(args)&lt;br /&gt;
	return {&lt;br /&gt;
		inline = not args.display or args.display == &amp;#039;inline&amp;#039; or args.display == &amp;#039;inline,title&amp;#039;,&lt;br /&gt;
		title = args.display == &amp;#039;title&amp;#039; or args.display == &amp;#039;inline,title&amp;#039;,&lt;br /&gt;
		debug = args.display == &amp;#039;debug&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getZoom( extraparams )&lt;br /&gt;
	local scale = extraparams:match( &amp;#039;%f[%w]scale: ?(%d+)&amp;#039; )&lt;br /&gt;
	if scale then&lt;br /&gt;
		return math.floor(math.log10( 5 / tonumber( scale ) ) * 3 + 25)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local extraType = extraparams:match( &amp;#039;%f[%w]type: ?(%w+)&amp;#039; )&lt;br /&gt;
	if extraType then&lt;br /&gt;
		local zoomType = {&lt;br /&gt;
			country = 5,&lt;br /&gt;
			state = 6,&lt;br /&gt;
			adm1st = 7,&lt;br /&gt;
			adm2nd = 8,&lt;br /&gt;
			city = 9,&lt;br /&gt;
			isle = 10,&lt;br /&gt;
			mountain = 10,&lt;br /&gt;
			waterbody = 10,&lt;br /&gt;
			airport = 12,&lt;br /&gt;
			landmark = 13,&lt;br /&gt;
		}&lt;br /&gt;
		return zoomType[ extraType ]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return 13&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Legge i parametri passati al modulo.&lt;br /&gt;
--&lt;br /&gt;
-- @param {table} frame&lt;br /&gt;
-- @return {table}&lt;br /&gt;
local function getArgs(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
&lt;br /&gt;
	-- copia i parametri ricevuti, eccetto quelli con nome valorizzati a stringa vuota&lt;br /&gt;
	for k, v in pairs(frame:getParent().args) do&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; or tonumber(k) then&lt;br /&gt;
			args[k] = string.gsub(v, &amp;#039;^%s*(.-)%s*$&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- retrocompatibilità con una funzionalità nascosta del precedente template:&lt;br /&gt;
	-- ignorava qualunque parametro posizionale vuoto dopo longitudine e parametri geohack&lt;br /&gt;
	for i = #args, 1, -1 do&lt;br /&gt;
		if args[i] == &amp;#039;&amp;#039; then&lt;br /&gt;
			table.remove(args, i)&lt;br /&gt;
		else&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- rimuove i parametri posizionali vuoti front to back fermandosi al primo non vuoto&lt;br /&gt;
	while args[1] == &amp;#039;&amp;#039; do&lt;br /&gt;
		table.remove(args, 1)&lt;br /&gt;
	end&lt;br /&gt;
	-- se l&amp;#039;utente non ha fornito lat e long con i posizionali ma con latdec e longdec&lt;br /&gt;
	if (#args == 0 or (#args == 1 and not tonumber(args[1]))) and&lt;br /&gt;
	   tonumber(args.latdec) and tonumber(args.longdec) then&lt;br /&gt;
		table.insert(args, 1, numberToString(args.latdec))&lt;br /&gt;
		table.insert(args, 2, numberToString(args.longdec))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
--                            Classe DecCoord&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
-- La classe DecCoord rappresenta una coordinata (latitudine o longitudine) in gradi decimali.&lt;br /&gt;
&lt;br /&gt;
local DecCoord = {}&lt;br /&gt;
local DmsCoord = {} -- dichiarata qui per le conversioni&lt;br /&gt;
&lt;br /&gt;
-- Costruttore della classe DecCoord.&lt;br /&gt;
--&lt;br /&gt;
-- @param {string} deg - i gradi decimali, positivi o negativi, se negativi viene&lt;br /&gt;
--                       cambiato il segno e la direzione cardinale eventualmente invertita&lt;br /&gt;
-- @param {string} card - la direzione cardinale (N|S|E|W)&lt;br /&gt;
-- @return {table} un nuovo oggetto DecCoord&lt;br /&gt;
function DecCoord:new(deg, card)&lt;br /&gt;
	local self = {}&lt;br /&gt;
&lt;br /&gt;
	setmetatable(self, { __index = DecCoord,&lt;br /&gt;
						 __tostring = function(t) return self:__tostring() end,&lt;br /&gt;
						 __concat = function(t, t2) return tostring(t) .. tostring(t2) end })&lt;br /&gt;
&lt;br /&gt;
	self.deg = tonumber(deg)&lt;br /&gt;
	if self.deg &amp;lt; 0 then&lt;br /&gt;
		self.card = card == &amp;#039;N&amp;#039; and &amp;#039;S&amp;#039; or (card == &amp;#039;E&amp;#039; and &amp;#039;W&amp;#039; or card)&lt;br /&gt;
		self.deg = -self.deg&lt;br /&gt;
	else&lt;br /&gt;
		self.card = card&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Richiamata automaticamente ogni volta che è richiesto un tostring o un concatenamento.&lt;br /&gt;
--&lt;br /&gt;
-- @return {string}&lt;br /&gt;
function DecCoord:__tostring()&lt;br /&gt;
	return numberToString(self.deg) .. &amp;#039;°&amp;#039; .. self.card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce i gradi con segno.&lt;br /&gt;
--&lt;br /&gt;
-- @return {string}&lt;br /&gt;
function DecCoord:getDeg()&lt;br /&gt;
	local deg = self.deg * ((self.card == &amp;#039;N&amp;#039; or self.card ==&amp;#039;E&amp;#039;) and 1 or -1)&lt;br /&gt;
	return numberToString(deg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce un nuovo oggetto DmsCoord, convertendo in gradi/minuti/secondi.&lt;br /&gt;
--&lt;br /&gt;
-- @return {table} un nuovo oggetto DmsCoord&lt;br /&gt;
function DecCoord:toDms()&lt;br /&gt;
	local deg, min, sec&lt;br /&gt;
&lt;br /&gt;
	deg = round(self.deg * 3600, 2)&lt;br /&gt;
	sec = round(math.floor(deg) % 60 + deg - math.floor(deg), 2)&lt;br /&gt;
	deg = math.floor((deg - sec) / 60)&lt;br /&gt;
	min = deg % 60&lt;br /&gt;
	deg = math.floor((deg - min) / 60) % 360&lt;br /&gt;
&lt;br /&gt;
	return DmsCoord:new(deg, min, sec, self.card)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
--                            Classe DmsCoord&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
-- La classe DmsCoord rappresenta una coordinata (latitudine o longitudine) in gradi/minuti/secondi.&lt;br /&gt;
&lt;br /&gt;
-- Costruttore della classe DmsCoord.&lt;br /&gt;
--&lt;br /&gt;
-- @param {string} deg - i gradi&lt;br /&gt;
-- @param {string} min - i minuti, può essere nil&lt;br /&gt;
-- @param {string} sec - i secondi, può essere nil&lt;br /&gt;
-- @param {string} card - la direzione cardinale (N|S|E|W)&lt;br /&gt;
-- @return {table} un nuovo oggetto DmsCoord&lt;br /&gt;
function DmsCoord:new(deg, min, sec, card)&lt;br /&gt;
	local self = {}&lt;br /&gt;
&lt;br /&gt;
	setmetatable (self, { __index = DmsCoord,&lt;br /&gt;
						  __tostring = function(t) return self:__tostring() end,&lt;br /&gt;
						  __concat = function(t, t2) return tostring(t) .. tostring(t2) end })&lt;br /&gt;
&lt;br /&gt;
	self.deg = tonumber(deg)&lt;br /&gt;
	self.min = min and tonumber(min)&lt;br /&gt;
	self.sec = sec and tonumber(sec)&lt;br /&gt;
	self.card = card&lt;br /&gt;
&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Richiamata automaticamente ogni volta che è richiesto un tostring o un concatenamento.&lt;br /&gt;
--&lt;br /&gt;
-- @return {string}&lt;br /&gt;
function DmsCoord:__tostring()&lt;br /&gt;
	return self.deg .. &amp;#039;°&amp;#039; ..&lt;br /&gt;
		   (self.min and (padleft0(self.min) .. &amp;#039;′&amp;#039;) or &amp;#039;&amp;#039;) ..&lt;br /&gt;
		   (self.sec and (padleft0(self.sec) .. &amp;#039;″&amp;#039;) or &amp;#039;&amp;#039;) ..&lt;br /&gt;
		   self.card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce un nuovo oggetto DecCoord, convertendo in gradi decimali.&lt;br /&gt;
--&lt;br /&gt;
-- @return {table} un nuovo oggetto DecCoord&lt;br /&gt;
function DmsCoord:toDec()&lt;br /&gt;
	local deg = round((self.deg + ((self.min or 0) + (self.sec or 0) / 60) / 60), 6)&lt;br /&gt;
	return DecCoord:new(deg, self.card)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
--                            Classe Coord&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
-- La classe Coord è la classe principale del modulo.&lt;br /&gt;
-- Al suo interno ha un riferimento alla latitudine e longitudine in ogni formato.&lt;br /&gt;
&lt;br /&gt;
local Coord = {}&lt;br /&gt;
&lt;br /&gt;
-- Costruttore della classe Coord.&lt;br /&gt;
--&lt;br /&gt;
-- @param {table} args&lt;br /&gt;
-- @return {table} un nuovo oggetto Coord&lt;br /&gt;
function Coord:new(args)&lt;br /&gt;
	local decLat, decLong, dmsLat, dmsLong&lt;br /&gt;
	local display = getDisplay(args)&lt;br /&gt;
	local self = { args = args }&lt;br /&gt;
&lt;br /&gt;
	setmetatable(self, { __index = Coord })&lt;br /&gt;
&lt;br /&gt;
	if args.from and display.title then&lt;br /&gt;
		error(&amp;#039;il parametro &amp;quot;from&amp;quot; è valido solo con display=inline&amp;#039;, 3)&lt;br /&gt;
	end&lt;br /&gt;
	-- con display=title o con i parametri &amp;quot;prop&amp;quot; o &amp;quot;from&amp;quot;&lt;br /&gt;
	-- legge le coordinate da P625 per utilizzarle o per confrontarle con quelle inserite&lt;br /&gt;
	if getDisplay(self.args).title or self.args.prop or args.from then&lt;br /&gt;
		self:_checkWikidata()&lt;br /&gt;
		-- con &amp;quot;from&amp;quot;, senza coordinate utente e su Wikidata non esegue i controlli successivi&lt;br /&gt;
		if self.args.from and #self.args &amp;lt; 2 and not tonumber(args[1]) then&lt;br /&gt;
			return self&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- identifica il tipo di chiamata&lt;br /&gt;
	self:_checkRequestFormat()&lt;br /&gt;
&lt;br /&gt;
	-- in base al tipo di chiamata crea gli oggetti DecCoord o DmsCoord&lt;br /&gt;
	if self.reqFormat == &amp;#039;dec&amp;#039; then&lt;br /&gt;
		-- {{coord|1.111|2.222}}&lt;br /&gt;
		decLat = DecCoord:new(args[1], &amp;#039;N&amp;#039;)&lt;br /&gt;
		decLong = DecCoord:new(args[2], &amp;#039;E&amp;#039;)&lt;br /&gt;
	elseif self.reqFormat == &amp;#039;d&amp;#039; then&lt;br /&gt;
		-- {{coord|1.111|N|3.333|W}}&lt;br /&gt;
		decLat = DecCoord:new(args[1], args[2])&lt;br /&gt;
		decLong = DecCoord:new(args[3], args[4])&lt;br /&gt;
	elseif self.reqFormat == &amp;#039;dm&amp;#039; then&lt;br /&gt;
		-- {{coord|1|2|N|4|5|W}}&lt;br /&gt;
		dmsLat = DmsCoord:new(args[1], args[2], nil, args[3])&lt;br /&gt;
		dmsLong = DmsCoord:new(args[4], args[5], nil, args[6])&lt;br /&gt;
	elseif self.reqFormat == &amp;#039;dms&amp;#039; then&lt;br /&gt;
		-- {{coord|1|2|3|N|5|6|7|W}}&lt;br /&gt;
		dmsLat = DmsCoord:new(args[1], args[2], args[3], args[4])&lt;br /&gt;
		dmsLong = DmsCoord:new(args[5], args[6], args[7], args[8])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- effettua le conversioni dec &amp;lt;=&amp;gt; dms&lt;br /&gt;
	if self.reqFormat == &amp;#039;dec&amp;#039; or self.reqFormat == &amp;#039;d&amp;#039; then&lt;br /&gt;
		dmsLat = decLat:toDms()&lt;br /&gt;
		dmsLong = decLong:toDms()&lt;br /&gt;
		-- rimuove secondi e minuti se zero e presenti in lat e long&lt;br /&gt;
		if dmsLat.sec == 0 and dmsLong.sec == 0 then&lt;br /&gt;
			dmsLat.sec, dmsLong.sec = nil, nil&lt;br /&gt;
			if dmsLat.min == 0 and dmsLong.min == 0 then&lt;br /&gt;
				dmsLat.min, dmsLong.min = nil, nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif self.reqFormat == &amp;#039;dm&amp;#039; or self.reqFormat == &amp;#039;dms&amp;#039; then&lt;br /&gt;
		decLat = dmsLat:toDec()&lt;br /&gt;
		decLong = dmsLong:toDec()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- se presente args.catuguali e non è stato usato Wikidata verifica se uguali&lt;br /&gt;
	if args.catuguali and self.wdLat and self.wdLong and&lt;br /&gt;
	   self.wdCat == nil and&lt;br /&gt;
	   self.wdLat == round(decLat:getDeg(), 6) and&lt;br /&gt;
	   self.wdLong == round(decLong:getDeg(), 6) then&lt;br /&gt;
		self.wdCat = &amp;#039;[[Categoria:P625 uguale su Wikidata]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	self.decLat = decLat&lt;br /&gt;
	self.decLong = decLong&lt;br /&gt;
	self.dmsLat = dmsLat&lt;br /&gt;
	self.dmsLong = dmsLong&lt;br /&gt;
&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Legge la P625 e la utilizza come latitudine e longitudine se non fornite dall&amp;#039;utente.&lt;br /&gt;
function Coord:_checkWikidata()&lt;br /&gt;
	self.wdEntityId = self.args.from or mw.wikibase.getEntityIdForCurrentPage();&lt;br /&gt;
	if self.args.prop then&lt;br /&gt;
		self.wdLat = mWikidata._getQualifier({ self.args.prop, &amp;#039;P625&amp;#039;, coord = &amp;#039;latitude&amp;#039;, n = 1, nq = 1, from = self.wdEntityId })&lt;br /&gt;
		self.wdLong = mWikidata._getQualifier({ self.args.prop, &amp;#039;P625&amp;#039;, coord = &amp;#039;longitude&amp;#039;, n = 1, nq = 1, from = self.wdEntityId })&lt;br /&gt;
	else&lt;br /&gt;
		self.wdLat = mWikidata._getProperty({ &amp;#039;P625&amp;#039;, coord = &amp;#039;latitude&amp;#039;, n = 1, from = self.wdEntityId })&lt;br /&gt;
		self.wdLong = mWikidata._getProperty({ &amp;#039;P625&amp;#039;, coord = &amp;#039;longitude&amp;#039;, n = 1, from = self.wdEntityId })&lt;br /&gt;
	end&lt;br /&gt;
	if self.wdLat and self.wdLong then&lt;br /&gt;
		self.wdLat = round(self.wdLat, 6)&lt;br /&gt;
		self.wdLong = round(self.wdLong, 6)&lt;br /&gt;
		-- se l&amp;#039;utente non ha fornito lat e long usa quelli di Wikidata&lt;br /&gt;
		if #self.args == 0 or (#self.args == 1 and not tonumber(self.args[1])) then&lt;br /&gt;
			table.insert(self.args, 1, numberToString(self.wdLat))&lt;br /&gt;
			table.insert(self.args, 2, numberToString(self.wdLong))&lt;br /&gt;
			self.wdCat = &amp;#039;[[Categoria:P625 letta da Wikidata]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		self.wdCat = &amp;#039;[[Categoria:P625 assente su Wikidata]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Riconosce il tipo di richiesta: dec, d, dm o dms.&lt;br /&gt;
function Coord:_checkRequestFormat()&lt;br /&gt;
	local errorTable = {}&lt;br /&gt;
&lt;br /&gt;
	-- riconoscimento tipo di richiesta&lt;br /&gt;
	if #self.args &amp;lt; 2 then&lt;br /&gt;
		error(&amp;#039;* coordinate non specificate&amp;#039;, 4)&lt;br /&gt;
	elseif #self.args &amp;lt; 4 then&lt;br /&gt;
		self.reqFormat = &amp;#039;dec&amp;#039;&lt;br /&gt;
	elseif #self.args &amp;lt; 6 then&lt;br /&gt;
		self.reqFormat = &amp;#039;d&amp;#039;&lt;br /&gt;
	elseif #self.args &amp;lt; 8 then&lt;br /&gt;
		self.reqFormat = &amp;#039;dm&amp;#039;&lt;br /&gt;
	elseif #self.args &amp;lt; 10 then&lt;br /&gt;
		self.reqFormat = &amp;#039;dms&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;#039;* errato numero di parametri&amp;#039;, 4)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- con le richieste dm e dms verifica se ci sono parametri lasciati vuoti in modo valido.&lt;br /&gt;
	if self.reqFormat == &amp;#039;dms&amp;#039; then&lt;br /&gt;
		-- {{coord|1|2||N|5|6||E}} valido&lt;br /&gt;
		if self.args[3] == &amp;#039;&amp;#039; and self.args[7] == &amp;#039;&amp;#039; then&lt;br /&gt;
			table.remove(self.args, 7)&lt;br /&gt;
			table.remove(self.args, 3)&lt;br /&gt;
			self.reqFormat = &amp;#039;dm&amp;#039;&lt;br /&gt;
		-- {{coord|1|2|3|N|5|6||E}} non valido&lt;br /&gt;
		elseif self.args[3] == &amp;#039;&amp;#039; or self.args[7] == &amp;#039;&amp;#039; then&lt;br /&gt;
			error(&amp;#039;* lat e long hanno diversa precisione&amp;#039;, 4)&lt;br /&gt;
		-- {{coord|1||3|N|5||7|E}} valido&lt;br /&gt;
		elseif self.args[2] == &amp;#039;&amp;#039; and self.args[6] == &amp;#039;&amp;#039; then&lt;br /&gt;
			self.args[2], self.args[6] = 0, 0&lt;br /&gt;
		-- {{coord|1|2|3|N|5||7|E}} non valido&lt;br /&gt;
		elseif self.args[2] == &amp;#039;&amp;#039; or self.args[6] == &amp;#039;&amp;#039; then&lt;br /&gt;
			error(&amp;#039;* lat e long hanno diversa precisione&amp;#039;, 4)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if self.reqFormat == &amp;#039;dm&amp;#039; then&lt;br /&gt;
		-- {{coord|1||N|4||E}} valido&lt;br /&gt;
		if self.args[2] == &amp;#039;&amp;#039; and self.args[5] == &amp;#039;&amp;#039; then&lt;br /&gt;
			table.remove(self.args, 5)&lt;br /&gt;
			table.remove(self.args, 2)&lt;br /&gt;
			self.reqFormat = &amp;#039;d&amp;#039;&lt;br /&gt;
		-- {{coord|1|2|N|4||E}} non valido&lt;br /&gt;
		elseif self.args[2] == &amp;#039;&amp;#039; or self.args[5] == &amp;#039;&amp;#039; then&lt;br /&gt;
			error(&amp;#039;* lat e long hanno diversa precisione&amp;#039;, 4)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- validazione parametri posizionali&lt;br /&gt;
	local currFormat = cfg.params[self.reqFormat]&lt;br /&gt;
	local globe = self.args[#self.args]:match(&amp;#039;globe:(%w+)&amp;#039;)&lt;br /&gt;
	self.isEarth = not globe or globe == &amp;#039;earth&amp;#039;&lt;br /&gt;
	for k, v in ipairs(self.args) do&lt;br /&gt;
		if currFormat[k] then&lt;br /&gt;
			local err&lt;br /&gt;
			local parType = currFormat[k][1]&lt;br /&gt;
			local parName = currFormat[k][2]&lt;br /&gt;
			local parMin = currFormat[k][3]&lt;br /&gt;
			local parMax = currFormat[k][4]&lt;br /&gt;
			-- valida un parametro di tipo numero&lt;br /&gt;
			if parType == &amp;#039;number&amp;#039; then&lt;br /&gt;
				local num = tonumber(v)&lt;br /&gt;
				if num then&lt;br /&gt;
					if self.isEarth and num &amp;lt; parMin then&lt;br /&gt;
						err = string.format(&amp;#039;* %s format: %s &amp;lt; %s&amp;#039;, self.reqFormat, parName, parMin)&lt;br /&gt;
					elseif self.isEarth and math.floor(num) &amp;gt; parMax then&lt;br /&gt;
						err = string.format(&amp;#039;* %s format: %s &amp;gt; %s&amp;#039;, self.reqFormat, parName, parMax)&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					err = string.format(&amp;#039;* %s format: %s non è un numero&amp;#039;, self.reqFormat, parName)&lt;br /&gt;
				end&lt;br /&gt;
			-- valida un parametro di tipo stringa&lt;br /&gt;
			elseif parType == &amp;#039;string&amp;#039; then&lt;br /&gt;
				if v ~= parMin and v ~= parMax then&lt;br /&gt;
					err = string.format(&amp;#039;* %s format: %s diverso da %s e da %s&amp;#039;,&lt;br /&gt;
										self.reqFormat, parName, parMin, parMax)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if err then&lt;br /&gt;
				table.insert(errorTable, err)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #errorTable &amp;gt; 0 then&lt;br /&gt;
		error(table.concat(errorTable, &amp;#039;\n&amp;#039;), 4)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Utilizza l&amp;#039;estensione [[mw:Extension:GeoData]].&lt;br /&gt;
--&lt;br /&gt;
-- @param {table} display&lt;br /&gt;
-- @return {string}&lt;br /&gt;
function Coord:_setGeoData(display)&lt;br /&gt;
	local gdStr = string.format(&amp;#039;{{#coordinates:%s|%s|name=%s}}&amp;#039;,&lt;br /&gt;
						table.concat(self.args, &amp;#039;|&amp;#039;),&lt;br /&gt;
						(display.title and mw.title.getCurrentTitle().namespace == 0) and &amp;#039;primary&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
						self.args.name or &amp;#039;&amp;#039;)&lt;br /&gt;
	return mw.getCurrentFrame():preprocess(gdStr)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione di debug, restituisce latitudine e longitudine in entrambi i formati.&lt;br /&gt;
--&lt;br /&gt;
-- @return {string}&lt;br /&gt;
function Coord:getDebugCoords()&lt;br /&gt;
	-- con args.from restitusce una stringa vuota se non c&amp;#039;è nessun dato&lt;br /&gt;
	if self.args.from and #self.args &amp;lt; 2 and not tonumber(self.args[1]) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return self.decLat .. &amp;#039; &amp;#039; .. self.decLong .. &amp;#039; &amp;#039; .. self.dmsLat .. &amp;#039; &amp;#039; .. self.dmsLong&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce l&amp;#039;HTML di un elemento &amp;lt;maplink&amp;gt; di Kartographer per le coordinate&lt;br /&gt;
--&lt;br /&gt;
-- @return {string}&lt;br /&gt;
function Coord:_buildMaplinkHTML()&lt;br /&gt;
	local defaultFormat&lt;br /&gt;
	if self.args.format then&lt;br /&gt;
		defaultFormat = self.args.format&lt;br /&gt;
	elseif self.reqFormat == &amp;#039;dec&amp;#039; then&lt;br /&gt;
		defaultFormat = &amp;#039;dec&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		defaultFormat = &amp;#039;dms&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local linkText;&lt;br /&gt;
	if defaultFormat == &amp;#039;dec&amp;#039; then&lt;br /&gt;
		linkText = self.decLat .. &amp;#039; &amp;#039; .. self.decLong&lt;br /&gt;
	else&lt;br /&gt;
		linkText = tostring(self.dmsLat) .. &amp;#039; &amp;#039; .. tostring(self.dmsLong)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local jsonParams = {&lt;br /&gt;
		type = &amp;#039;Feature&amp;#039;,&lt;br /&gt;
		geometry = {&lt;br /&gt;
			type =&amp;#039;Point&amp;#039;,&lt;br /&gt;
			coordinates = {&lt;br /&gt;
				round( self.decLong:getDeg(), 6 ), -- max precision in GeoJSON format&lt;br /&gt;
				round( self.decLat:getDeg(), 6 )&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		properties = {&lt;br /&gt;
			[&amp;#039;marker-color&amp;#039;] = &amp;quot;228b22&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if self.wdEntityId then&lt;br /&gt;
		-- geoshape da Wikidata&lt;br /&gt;
		jsonParams = {&lt;br /&gt;
			jsonParams,&lt;br /&gt;
			{&lt;br /&gt;
				type = &amp;#039;ExternalData&amp;#039;,&lt;br /&gt;
				service = &amp;#039;geoshape&amp;#039;,&lt;br /&gt;
				ids = self.wdEntityId,&lt;br /&gt;
				properties = {&lt;br /&gt;
					[&amp;#039;fill-opacity&amp;#039;] = 0.2&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = &amp;#039;maplink&amp;#039;,&lt;br /&gt;
		content = mw.text.jsonEncode( jsonParams ),&lt;br /&gt;
		args = {&lt;br /&gt;
			text = linkText,&lt;br /&gt;
			zoom = getZoom( self.args[#self.args] or &amp;#039;&amp;#039; ),&lt;br /&gt;
			latitude = self.decLat:getDeg(),&lt;br /&gt;
			longitude = self.decLong:getDeg(),&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Restituisce l&amp;#039;HTML di un link a geohack con le coordinate (usato solo quando&lt;br /&gt;
--  non è possibile usare maplink).&lt;br /&gt;
--&lt;br /&gt;
-- @return {string}&lt;br /&gt;
function Coord:_buildGeohackLink()&lt;br /&gt;
	-- crea la stringa per il parametro params di geohack.php&lt;br /&gt;
	local geohackParams&lt;br /&gt;
&lt;br /&gt;
	if self.reqFormat == &amp;#039;dec&amp;#039; then&lt;br /&gt;
		geohackParams = string.format(&amp;#039;%s_N_%s_E&amp;#039;, self.args[1], self.args[2])&lt;br /&gt;
		if self.args[3] then&lt;br /&gt;
			geohackParams = geohackParams .. &amp;#039;_&amp;#039; .. self.args[3]&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- concatena solo i posizionali&lt;br /&gt;
		geohackParams = table.concat(self.args, &amp;#039;_&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- geohack url e parametri&lt;br /&gt;
	local url = string.format(&amp;#039;%s&amp;amp;pagename=%s&amp;amp;params=%s&amp;#039;, cfg.geohackUrl,&lt;br /&gt;
						 mw.uri.encode(mw.title.getCurrentTitle().prefixedText, &amp;#039;WIKI&amp;#039;), geohackParams)&lt;br /&gt;
	if self.args.name then&lt;br /&gt;
		url = url .. &amp;#039;&amp;amp;title=&amp;#039; .. mw.uri.encode(self.args.name)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local linkNode = mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;plainlinks nourlexpansion&amp;#039;)&lt;br /&gt;
		:wikitext(&amp;#039;[&amp;#039; .. url .. &amp;#039; &amp;#039; .. tostring(self.dmsLat) .. &amp;#039; &amp;#039; .. tostring(self.dmsLong) .. &amp;#039;]&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
	return tostring(linkNode)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce l&amp;#039;HTML per il microformat Geo.&lt;br /&gt;
-- FIXME Serve ancora nel 2024? La documentazione in proposito è scarsissima, e tutti&lt;br /&gt;
--   i link a strumenti che lo usano non vanno più. Inoltre, qui usiamo un elemento nascosto;&lt;br /&gt;
--   va bene lo stesso? Come verificarlo? Le specifiche non ne parlano.&lt;br /&gt;
--&lt;br /&gt;
-- @return {string}&lt;br /&gt;
function Coord:_buildGeoMarkup()&lt;br /&gt;
	return mw.html.create(&amp;#039;&amp;#039;)&lt;br /&gt;
		:wikitext(self.args.name and &amp;#039;&amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&amp;#039; or &amp;#039;&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;style&amp;#039;, &amp;#039;display:none&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;geo&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;latitude&amp;#039;)&lt;br /&gt;
				:wikitext(tostring(self.dmsLat))&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext( &amp;#039;, &amp;#039; )&lt;br /&gt;
			:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;longitude&amp;#039;)&lt;br /&gt;
				:wikitext(tostring(self.dmsLong))&lt;br /&gt;
				:done()&lt;br /&gt;
		:wikitext(self.args.name and (&amp;#039;&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;﻿ (&amp;lt;span class=&amp;quot;fn org&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
			  self.args.name .. &amp;#039;&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;) or &amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce l&amp;#039;HTML contenente le coordinate con link che utilizza &amp;lt;maplink&amp;gt; (Kartographer)&lt;br /&gt;
--  se possibile, e geohack altrimenti.&lt;br /&gt;
--&lt;br /&gt;
-- @return {string}&lt;br /&gt;
function Coord:getHTML()&lt;br /&gt;
	-- con args.from restitusce una stringa vuota se non c&amp;#039;è nessun dato&lt;br /&gt;
	if self.args.from and #self.args &amp;lt; 2 and not tonumber(self.args[1]) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	elseif self.args.display == &amp;#039;debug&amp;#039; then&lt;br /&gt;
		return self:getDebugCoords()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local display = getDisplay(self.args)&lt;br /&gt;
&lt;br /&gt;
	local coordLink&lt;br /&gt;
	if self.isEarth then&lt;br /&gt;
		-- Usa maplink se possibile. A maggio 2024 supporta solo coordinate terrestri,&lt;br /&gt;
		-- vedi T151138.&lt;br /&gt;
		coordLink = self:_buildMaplinkHTML()&lt;br /&gt;
	else&lt;br /&gt;
		coordLink = self:_buildGeohackLink()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local geo = self:_buildGeoMarkup();&lt;br /&gt;
&lt;br /&gt;
	local html = coordLink .. tostring(geo) .. (self.args.notes or &amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local ret = frame:extensionTag(&amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, {src = &amp;#039;Modulo:Coord/styles.css&amp;#039;}) ..&lt;br /&gt;
		   (display.inline and html or &amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	if display.title then&lt;br /&gt;
		-- formatta il risultato a seconda di args.display (nil, &amp;#039;inline&amp;#039;, &amp;#039;title&amp;#039;, &amp;#039;inline,title&amp;#039;)&lt;br /&gt;
		-- se inline e title, in stampa visualizza solo il primo&lt;br /&gt;
		local htmlTitle = string.format(&lt;br /&gt;
			&amp;#039;&amp;lt;div style=&amp;quot;font-size: small&amp;quot;&amp;gt;&amp;lt;span %s id=&amp;quot;coordinates&amp;quot;&amp;gt;[[Coordinate geografiche|Coordinate]]: %s&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;,&lt;br /&gt;
			display.inline and &amp;#039;class=&amp;quot;noprint&amp;quot;&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
			html&lt;br /&gt;
		)&lt;br /&gt;
		ret = ret .. frame:extensionTag( &amp;#039;indicator&amp;#039;, htmlTitle, { name = &amp;#039;coordinates&amp;#039; } )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret ..&lt;br /&gt;
		self:_setGeoData(display) .. &lt;br /&gt;
		(mw.title.getCurrentTitle().namespace == 0 and self.wdCat or &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
--                            Funzioni esportate&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Funzione importata da https://en.wikipedia.org/w/index.php?title=Module:Coordinates&amp;amp;oldid=789126031&lt;br /&gt;
-- per estrarre lat, long, type, scale, dim, region, globe, source, dal link a geohack.php generato da coord.&lt;br /&gt;
function p.coord2text(frame)&lt;br /&gt;
	if frame.args[1] == &amp;#039;&amp;#039; or frame.args[2] == &amp;#039;&amp;#039; or not frame.args[2] then return nil end&lt;br /&gt;
	frame.args[2] = mw.text.trim(frame.args[2])&lt;br /&gt;
	if frame.args[2] == &amp;#039;lat&amp;#039; or frame.args[2] == &amp;#039;long&amp;#039; then&lt;br /&gt;
		local result, negative = mw.text.split((mw.ustring.match(frame.args[1],&amp;#039;[%.%d]+°[NS] [%.%d]+°[EW]&amp;#039;) or &amp;#039;&amp;#039;), &amp;#039; &amp;#039;)&lt;br /&gt;
		if frame.args[2] == &amp;#039;lat&amp;#039; then&lt;br /&gt;
			result, negative = result[1], &amp;#039;S&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			result, negative = result[2], &amp;#039;W&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		result = mw.text.split(result, &amp;#039;°&amp;#039;)&lt;br /&gt;
		if result[2] == negative then result[1] = &amp;#039;-&amp;#039;..result[1] end&lt;br /&gt;
		return result[1]&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.match(frame.args[1], &amp;#039;params=.-_&amp;#039;..frame.args[2]..&amp;#039;:(.-)[ _]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per eventuale template {{dms2dec}}.&lt;br /&gt;
function p.dms2dec(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	-- {{dms2dec|N|2|3|4}}&lt;br /&gt;
	return DmsCoord:new(args[2], args[3], args[4], args[1]):toDec():getDeg()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per eventuale template {{dec2dms}}.&lt;br /&gt;
function p.dec2dms(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	-- {{dec2dms|1.111|N|S}}&lt;br /&gt;
	return DecCoord:new(args[1], tonumber(args[1]) &amp;gt;= 0 and args[2] or args[3]):toDms()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per l&amp;#039;utilizzo da un altro modulo.&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	return Coord:new(args):getHTML()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{Coord}}.&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._main(getArgs(frame))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>it__&gt;Daimona Eaytoy</name></author>
	</entry>
</feed>