Această pagină este protejată de mișcare
Această pagină este protejată

Formă: Coord

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Modul Lua care implementează funcționalitatea șablonului: Coord .

Are o subpagină de configurare a modulului: Coord / Configuration și o subpagină Module CSS : Coord / styles.css .

Utilizați din alt modul

Modulul poate fi utilizat și de un alt modul prin „require”. Pur și simplu introduceți formularul:

 local mCoord = require ( 'Modul: Coord' )

Funcția exportată este _main , cu aceiași parametri ca șablonul.

Exemplu
 local mCoord = require ( 'Modul: Coord' )
local p = {}

funcția p . principal ( cadru )
    local Sydney , wd

    sydney = mCoord . _main ( { '-33.86' , '151.211111' , format = 'dms' } )
    wd = mCoord . _main ( { display = 'inline, title' , format = 'dec' } )
    
    returnează string.format ( „Coordonatele dms din Sydney sunt:% s.” .. 
						 'Coordonatele dec dell \' Element Wikidata conectat:% s. ' ,
						 Sydney , wd )
Sfârșit

retur p

 - [[
* Modul care implementează șablonul Coord.
]]

require ( „Formular: fără globali” )

local mWikidata = require ( 'Modul: Wikidata' )
local cfg = mw . loadData ( „Modul: Coordonare / Configurare” )
local errorCategory = '[[Categorie: erori de compilare șablon Coord]]'

- ================================================== ============================
- Funcții utilitare
- ================================================== ============================

- Handler de eroare pentru xpcall, formatați eroarea.
-
- @param {string} msg
- @return {șir}
funcție locală errhandler ( msg )
local cat = mw . titlu . getCurrentTitle (). spațiu de nume == 0 și errorCategory sau "
returnează string.format ( '<div style = "color: red"> Șablonul {{Coord}} a întâmpinat erori' ..
'([[Template: Coord | instrucțiuni]]): \ n % s </div>% s' , msg , cat )
Sfârșit

- Returnează numărul rotunjit la numărul necesar de zecimale.
- http://lua-users.org/wiki/SimpleRound
-
- @param {number} num
- @param {number} idp
- @return {number}
runda funcției locale ( num , idp )
local mult = 10 ^ ( idp sau 0 )
returnează math.floor ( num * mult + 0,5 ) / mult
Sfârșit

- Returnează șirul „0 + număr” atunci când numărul este o singură cifră, altfel același număr.
-
- @param {number} num
- @return {șir}
funcție locală padleft0 ( num )
return ( num < 10 și '0' sau '' ) .. num
Sfârșit

- Convertiți un număr într-un șir fără a utiliza notația științifică, de exemplu, tostring (0.00001).
-
- @param {number} num
- @return {șir}
numărul funcției locale ToString ( num )
- paranteze suplimentară () este utilizată pentru a nu returna și gsub.count
return ( string.format ( '% f' , num ): gsub ( '%.? 0 + $' , '' ))
Sfârșit

- Parsificați parametrul de afișare și returnați un tabel cu cheile inline, title și debug.
-
- @param {table} args
- @return {table}
funcție locală getDisplay ( args )
întoarce {
inline = not args . afișare sau argumente . afișează == 'inline' sau args . afișează == 'inline, title' ,
titlu = args . afișează == 'titlu' sau args . afișează == 'inline, title' ,
debug = args . afișează == 'depanare'
}
Sfârșit

- Citiți parametrii trecuți modulului.
-
- cadru @param {table}
- @return {table}
funcția locală getArgs ( cadru )
argumente locale = {}

- copiază parametrii primiți, cu excepția celor cu un nume setat într-un șir gol
pentru k , v în perechi ( cadru : getParent (). args ) do
dacă v ~ = " sau tonumber ( k ) atunci
args [ k ] = string.gsub ( v , '^% s * (.-)% s * $' , '% 1' )
Sfârșit
Sfârșit
- compatibilitate inversă cu o funcționalitate ascunsă a șablonului anterior:
- au ignorat parametrii de poziție goi după longitudine și parametri geohack
pentru i = # args , 1 , - 1 faceți
dacă args [ i ] == '' atunci
table.remove ( args , i )
altceva
pauză
Sfârșit
Sfârșit
- elimină parametrii de poziție goi față în spate oprindu-se la primul ne-gol
în timp ce args [ 1 ] == '' face
table.remove ( args , 1 )
Sfârșit
- dacă utilizatorul nu a furnizat lat și long cu pozițional, dar cu latdec și longdec
if ( # args == 0 sau ( # args == 1 și nu tonumber ( args [ 1 ]))) și
tonumber ( args . latdec ) și tonumber ( args . longdec ) atunci
table.insert ( args , 1 , numberToString ( args . latdec ))
table.insert ( args , 2 , numberToString ( args . longdec ))
Sfârșit

întoarce arg
Sfârșit

- ================================================== ============================
- Clasa DecCoord
- ================================================== ============================

- Clasa DecCoord reprezintă o coordonată (latitudine sau longitudine) în grade zecimale.

local DecCoord = {}
local DmsCoord = {} - declarat aici pentru conversii

- Constructor al clasei DecCoord.
-
- @param {string} deg - gradele zecimale, pozitive sau negative, dacă vine negativ
- a schimbat semnul și direcția cardinală inversată
- @param {string} card - direcția cardinală (N | S | E | W)
- @return {table} un nou obiect DecCoord
funcția DecCoord : nou ( deg , card )
auto local = {}

setmetatable ( self , { __index = DecCoord ,
__tostring = function ( t ) return self : __tostring () end ,
__concat = funcție ( t , t2 ) returnare tostring ( t ) .. tostring ( t2 ) end })

sinele . deg = tonumber ( deg )
dacă eul . deg < 0 atunci
sinele . card = card == 'N' și 'S' sau ( card == 'E' și 'W' sau card )
sinele . deg = - sine . deg
altceva
sinele . card = card
Sfârșit

întoarcere de sine
Sfârșit

- Apelat automat ori de câte ori este necesară o legătură sau un lanț.
-
- @return {șir}
funcția DecCoord : __tostring ()
return numberToString ( self . deg ) .. '°' .. self . card
Sfârșit

- Returnează grade semnate.
-
- @return {șir}
funcția DecCoord : getDeg ()
local deg = self . deg * (( self . card == 'N' sau self . card == 'E' ) și 1 sau - 1 )
returnează numărul ToString ( deg )
Sfârșit

- Returnează un nou obiect DmsCoord, convertindu-l în grade / minute / secunde.
-
- @return {table} un nou obiect DmsCoord
funcția DecCoord : toDms ()
deg local , min , sec

deg = rotund ( auto . deg * 3600 , 2 )
sec = round ( math.floor ( deg ) % 60 + deg - math.floor ( deg ), 2 )
deg = math.floor (( deg - sec ) / 60 )
min = deg % 60
deg = math.floor (( deg - min ) / 60 ) % 360

returnează DmsCoord : nou ( card deg , min , sec , auto . )
Sfârșit

- ================================================== ============================
- Clasa DmsCoord
- ================================================== ============================

- Clasa DmsCoord reprezintă o coordonată (latitudine sau longitudine) în grade / minute / secunde.

- Constructor al clasei DmsCoord.
-
- @param {string} deg - gradele
- @param {string} min - minutele, pot fi nule
- @param {string} sec - secundele, pot fi nule
- @param {string} card - direcția cardinală (N | S | E | W)
- @return {table} un nou obiect DmsCoord
funcția DmsCoord : nou ( deg , min , sec , card )
auto local = {}

setmetatable ( self , { __index = DmsCoord ,
__tostring = function ( t ) return self : __tostring () end ,
__concat = funcție ( t , t2 ) returnare tostring ( t ) .. tostring ( t2 ) end })

sinele . deg = tonumber ( deg )
sinele . min = min și tonumber ( min )
sinele . sec = sec și tonumber ( sec )
sinele . card = card

întoarcere de sine
Sfârșit

- Apelat automat ori de câte ori este necesară o legătură sau un lanț.
-
- @return {șir}
funcția DmsCoord : __tostring ()
a reveni auto. deg .. '°' ..
( self . min și ( padleft0 ( self . min ) .. '′' ) sau '' ) ..
( self . sec și ( padleft0 ( self . sec ) .. '″' ) sau '' ) ..
sinele . card
Sfârșit

- Returnează un nou obiect DecCoord, convertindu-l în grade zecimale.
-
- @return {table} un nou obiect DecCoord
funcția DmsCoord : toDec ()
deg local = rotund (( self . deg + (( self . min sau 0 ) + ( self . sec sau 0 ) / 60 ) / 60 ), 6 )
returnează DecCoord : nou ( card auto , deg . )
Sfârșit

- ================================================== ============================
- Clasa Coord
- ================================================== ============================

- Clasa Coord este principala clasă a modulului.
- În interior are o referință la latitudine și longitudine în fiecare format.

local Coord = {}

- Constructor al clasei Coord.
-
- @param {table} args
- @return {table} un nou obiect Coord
funcție Coord : nou ( args )
decLat local , decLong , dmsLat , dmsLong
display local = getDisplay ( args )
self locală = {args = args}

setmetatable ( auto , { __index = Coord })

dacă arg . din și afișează . titlu atunci
eroare ( „parametrul„ de la ”este valid numai cu display = inline” , 3 )
Sfârșit
- cu display = title sau cu parametrii "prop" sau "from"
- citește coordonatele din P625 pentru a le utiliza sau pentru a le compara cu cele introduse
dacă getDisplay ( self . args ). titlu sau sine . argumente . prop sau args . de atunci
self : _checkWikidata ()
- cu „de la”, fără coordonate de utilizator și pe Wikidata nu efectuează următoarele verificări
dacă eul . argumente . din și # auto . args < 2 și nu tonumber ( args [ 1 ]) atunci
întoarcere de sine
Sfârșit
Sfârșit

- identifică tipul de apel
self : _checkRequestFormat ()

- în funcție de tipul de apel, creează obiectele DecCoord sau DmsCoord
dacă eul . reqFormat == 'dec' atunci
- {{coord | 1.111 | 2.222}}
decLat = DecCoord : new ( args [ 1 ], 'N' )
decLong = DecCoord : new ( args [ 2 ], 'E' )
altfel dacă eu . reqFormat == 'd' atunci
- {{coord | 1.111 | N | 3.333 | W}}
decLat = DecCoord : new ( args [ 1 ], args [ 2 ])
decLong = DecCoord : new ( args [ 3 ], args [ 4 ])
altfel dacă eu . reqFormat == 'dm' atunci
- {{coord | 1 | 2 | N | 4 | 5 | W}}
dmsLat = DmsCoord : new ( args [ 1 ], args [ 2 ], nil , args [ 3 ])
dmsLong = DmsCoord : new ( args [ 4 ], args [ 5 ], nil , args [ 6 ])
altfel dacă eu . reqFormat == 'dms' atunci
- {{coord | 1 | 2 | 3 | N | 5 | 6 | 7 | W}}
dmsLat = DmsCoord : new ( args [ 1 ], args [ 2 ], args [ 3 ], args [ 4 ])
dmsLong = DmsCoord : new ( args [ 5 ], args [ 6 ], args [ 7 ], args [ 8 ])
Sfârșit

- efectuați conversii dec <=> dms
dacă eul . reqFormat == 'dec' sau auto . reqFormat == 'd' atunci
dmsLat = decLat : toDms ()
dmsLong = decLong : toDms ()
- elimină secunde și minute dacă este zero și este prezent în lat și lung
dacă dmsLat . sec == 0 și dmsLong . sec == 0 apoi
dmsLat . sec , dmsLong . sec = zero , zero
dacă dmsLat . min == 0 și dmsLong . min == 0 atunci
dmsLat . min , dmsLong . min = zero , zero
Sfârșit
Sfârșit
altfel dacă eu . reqFormat == 'dm' sau auto . reqFormat == 'dms' atunci
decLat = dmsLat : toDec ()
decLong = dmsLong : toDec ()
Sfârșit
	
- dacă sunt prezente argumente potrivite și Wikidata nu a fost folosită, verificați dacă sunt aceleași
dacă arg . catuguali și auto . wdLat și self . wdLong și
sinele . wdCat == zero și
sinele . wdLat == round ( decLat : getDeg (), 6 ) și
sinele . wdLong == round ( decLong : getDeg (), 6 ) apoi
sinele . wdCat = '[[Categorie: P625 la fel pe Wikidata]]'
Sfârșit

sinele . decLat = decLat
sinele . decLong = decLong
sinele . dmsLat = dmsLat
sinele . dmsLong = dmsLong

întoarcere de sine
Sfârșit

- Citește P625 și îl folosește ca latitudine și longitudine dacă nu este furnizat de utilizator.
funcție Coord : _checkWikidata ()
dacă eul . argumente . prop atunci
sinele . wdLat = mWikidata . _getQualifier ({ self . args . prop , 'P625' , coord = 'latitude' , n = 1 , nq = 1 , from = self . args . from })
sinele . wdLong = mWikidata . _getQualifier ({ self . args . prop , 'P625' , coord = 'longitude' , n = 1 , nq = 1 , from = self . args . from })
altceva
sinele . wdLat = mWikidata . _getProperty ({ 'P625' , coord = 'latitude' , n = 1 , from = self . args . from })
sinele . wdLong = mWikidata . _getProperty ({ 'P625' , coord = 'longitudine' , n = 1 , from = self . args . from })
Sfârșit
dacă eul . wdLat și self . wdLong atunci
sinele . wdLat = rotund (self. wdLat, 6)
sinele . wdLong = rotund (auto. wdLong, 6)
- în cazul în care utilizatorul nu a furnizat informații lat și de lungă durată, folosiți-le pe cele ale Wikidata
dacă # sine . args == 0 sau ( # self . args == 1 și nu tonumber ( self . args [ 1 ])) atunci
table.insert ( self . args , 1 , numberToString ( self . wdLat ))
table.insert ( self . args , 2 , numberToString ( self . wdLong ))
sinele . wdCat = '[[Categorie: P625 citită de Wikidata]]'
Sfârșit
altceva
sinele . wdCat = '[[Categorie: P625 absent pe Wikidata]]'
Sfârșit
Sfârșit

- Recunoaște tipul de cerere: dec, d, dm sau dms.
funcție Coord : _checkRequestFormat ()
local errorTable = {}

- recunoașterea tipului de cerere
dacă # sine . args < 2 atunci
eroare ( „* coordonatele nu sunt specificate” , 4 )
elseif # self . args < 4 atunci
sinele . reqFormat = 'dec'
elseif # self . args < 6 atunci
sinele . reqFormat = 'd'
elseif # self . args < 8 atunci
sinele . reqFormat = 'dm'
elseif # self . args < 10 atunci
sinele . reqFormat = 'dms'
altceva
eroare ( „* număr greșit de parametri” , 4 )
Sfârșit

- cu cererile dm și dms verifică dacă există parametri lăsați goi în mod valid.
dacă eul . reqFormat == 'dms' atunci
- {{coord | 1 | 2 || N | 5 | 6 || E}} valid
dacă eul . args [ 3 ] == '' și auto . args [ 7 ] == '' atunci
table.remove ( auto . args , 7 )
table.remove ( auto . args , 3 )
sinele . reqFormat = 'dm'
- {{coord | 1 | 2 | 3 | N | 5 | 6 || E}} invalid
altfel dacă eu . args [ 3 ] == '' sau auto . args [ 7 ] == '' atunci
eroare ( „* lat și long au o precizie diferită” , 4 )
- {{coord | 1 || 3 | N | 5 || 7 | E}} valid
altfel dacă eu . args [ 2 ] == '' și auto . args [ 6 ] == '' atunci
sinele . args [ 2 ], auto . args [ 6 ] = 0 , 0
- {{coord | 1 | 2 | 3 | N | 5 || 7 | E}} invalid
altfel dacă eu . args [ 2 ] == '' sau auto . args [ 6 ] == '' atunci
eroare ( „* lat și long au o precizie diferită” , 4 )
Sfârșit
Sfârșit
dacă eul . reqFormat == 'dm' atunci
- {{coord | 1 || N | 4 || E}} valid
dacă eul . args [ 2 ] == '' și auto . args [ 5 ] == '' atunci
table.remove ( auto . args , 5 )
table.remove (auto. args, 2)
sinele . reqFormat = 'd'
- {{coord | 1 | 2 | N | 4 || E}} nevalid
altfel dacă eu . args [ 2 ] == '' sau auto . args [ 5 ] == '' atunci
eroare ( „* lat și long au o precizie diferită” , 4 )
Sfârșit
Sfârșit

- validarea parametrilor de poziție
local currFormat = cfg . params [ self . reqFormat ]
glob local = sine . args [ # self . args ]: match ( 'glob: (% w +)' )
pământ local = nu glob sau glob == „pământ”
pentru k , v în ipairs ( self . args ) do
dacă currFormat [ k ] atunci
eroare locală
local parType = currFormat [ k ] [ 1 ]
local parName = currFormat [ k ] [ 2 ]
local parMin = currFormat [ k ] [ 3 ]
local parMax = currFormat [ k ] [ 4 ]
- validează un parametru al numărului de tip
dacă parType == 'număr' atunci
local num = tonumber ( v )
dacă num atunci
dacă pământ și num < parMin atunci
err = string.format ( formatul '*% s:% s <% s' , self . reqFormat , parName , parMin )
elseif pământ și math.floor ( num ) > parMax atunci
err = string.format ( formatul '*% s:% s>% s' , self . reqFormat , parName , parMax )
Sfârșit
altceva
err = string.format ( formatul „*% s:% s nu este un număr” , self . reqFormat , parName )
Sfârșit
- validează un parametru de tip șir
elseif parType == 'șir' atunci
dacă v ~ = parMin și v ~ = parMax atunci
err = string.format ( formatul „*% s:% s diferit de% s și% s” ,
sinele . reqFormat , parName , parMin , parMax )
Sfârșit
Sfârșit
dacă erori atunci
table.insert ( errorTable , err )
Sfârșit
Sfârșit
Sfârșit

dacă # errorTable > 0 atunci
eroare ( table.concat ( errorTable , ' \ n ' ), 4 )
Sfârșit
Sfârșit

- Utilizați extensia [[mw: Extension: GeoData]].
-
- afișare @param {table}
- @return {șir}
function Coord : _setGeoData ( display )
local gdStr = string.format ( '{{#coordonates:% s |% s | name =% s}}' ,
table.concat ( self . args , '|' ),
( display . title și mw . title . getCurrentTitle (). namespace == 0 ) și „principal” sau „” ,
sinele . argumente . nume sau '' )
întoarce-te mw . getCurrentFrame (): preproces ( gdStr )
Sfârșit

- Funcția de depanare, returnează latitudinea și longitudinea în ambele formate.
-
- @return {șir}
funcția Coord : getDebugCoords ()
- cu args.from returnează un șir gol dacă nu există date
dacă eul . argumente . din și # auto . args < 2 și nu tonumber ( auto . args [ 1 ]) atunci
intoarce ''
Sfârșit
a reveni auto. decLat .. '' .. sine . decLong .. '' .. sine . dmsLat .. '' .. auto . dmsLong
Sfârșit

- Returnează codul HTML care conține coordonatele în format dec și dms ca link extern către geohack.php.
-
- @return {șir}
funcție Coord : getHTML ()
local defaultFormat , geohackParams , display , root , html , url , htmlTitle

- cu args.from returnează un șir gol dacă nu există date
dacă eul . argumente . din și # auto . args < 2 și nu tonumber ( auto . args [ 1 ]) atunci
intoarce ''
altfel dacă eu . argumente . afișează == „depanare” atunci
a reveni auto: getDebugCoords ()
Sfârșit

- citește parametrul de afișare
display = getDisplay ( self . args )

dacă eul . argumente . formatează atunci
defaultFormat = auto . argumente . format
altfel dacă eu . reqFormat == 'dec' atunci
defaultFormat = 'dec'
altceva
defaultFormat = 'dms'
Sfârșit

- creați șirul pentru parametrul params al geohack.php
dacă eul . reqFormat == 'dec' atunci
geohackParams = string.format ( '% s_N_% s_E' , self . args [ 1 ], self . args [ 2 ])
dacă eul . args [ 3 ] atunci
geohackParams = geohackParams .. '_' .. self . args [ 3 ]
Sfârșit
altceva
- concatenează doar poziționalul
geohackParams = table.concat ( self . args , '_' )
Sfârșit

- adresa geohack și parametrii
url = string.format ( '% s & pagename =% s & params =% s', cfg. geohackUrl,
mw . uri . encode (mw. titlu. getCurrentTitle (). prefixedText, 'WIKI'), geohackParams)
dacă eul . argumente . nume atunci
url = url .. '& title =' .. mw . uri . codifica ( self . args . name )
Sfârșit

rădăcină = mw . html . create ( '' )
rădăcină
: tag ( „span” )
: addClass ( „plainlinks nourlexpansion” )
: wikitext ( '[' .. url )
: tag ( „span” )
: addClass ( defaultFormat == 'dec' și 'geo-nondefault' sau 'geo-default' ) 
: tag ( „span” )
: addClass ( 'geo-dms' )
: attr ( „titlu” , „Hărți, fotografii aeriene și alte date pentru această locație” )
: tag ( „span” )
: addClass ( 'latitudine' )
: Wikitext (tostring (self. DmsLat))
: făcut ()
: wikitext ( '' )
: tag ( „span” )
: addClass ( 'longitudine' )
: Wikitext (tostring (self. DmsLong))
: făcut ()
: făcut ()
: făcut ()
: tag ( „span” )
: addClass ( 'geo-multi-punct' )
: wikitext ( '& # xfeff; / & # xfeff;' )
: făcut ()
: tag ( „span” )
: addClass ( defaultFormat == 'dec' și 'geo-default' sau 'geo-nondefault' )
: wikitext ( self . args . name și '<span class = "vcard">' sau '' )
: tag ( „span” )
: addClass ( 'geo-dec' )
: attr ( „titlu” , „Hărți, fotografii aeriene și alte date pentru această locație” )
: wikitext ( self . decLat .. '' .. self . decLong )
: făcut ()
: tag ( „span” )
: attr ( „stil” , „afișare: nici unul” )
: tag ( „span” )
: addClass ( 'geo' )
: wikitext ( self . decLat : getDeg () .. ';' .. self . decLong : getDeg ())
: făcut ()
: făcut ()
: wikitext ( self . args . name and ( '<span style = "display: none"> (<span class = "fn org">' ..
sinele . argumente . nume .. '</span>) </span> </span>' ) sau '' )
: făcut ()
: wikitext ( ']' )
: făcut ()

html = tostring ( root ) .. ( auto . args . note sau '' )

- formatați rezultatul conform args.display (zero, „inline”, „title”, „inline, title”)
- dacă este în linie și titlu, numai primul este afișat la imprimare
htmlTitle = string.format ( '<span style = "font-size: small"> <span% s id = "coordinates"> [[Coordonate geografice | Coordonate]]:% s </span> </span>' ,
afișaj . inline și 'class = "noprint"' sau '' , html )

întoarce-te mw . getCurrentFrame (): extensionTag ( 'templatestyles' , '' , { src = 'Module: Coord / styles.css' }) ..
( afișare . inline și html sau '' ) .. 
( afișare . titlu și htmlTitlu sau '' ) ..
self : _setGeoData ( display ) .. 
( mw . title . getCurrentTitle (). namespace == 0 și self . wdCat sau '' )
Sfârșit

- ================================================== ============================
- Funcții exportate
- ================================================== ============================

local p = {}

- Funcție importată de la https://en.wikipedia.org/w/index.php?title=Module:Coordinates&oldid=789126031
- pentru a extrage lat, long, type, scale, dim, regiune, glob, sursă, de la linkul către geohack.php generat de coord.
funcția p . text coord2 ( cadru )
dacă cadru . args [ 1 ] == '' sau cadru . args [ 2 ] == '' sau nu cadru . args [2] a reveni apoi la sfârșitul zero
cadru . args [ 2 ] = mw . text . decupare ( cadru . args [ 2 ])
dacă cadru . args [ 2 ] == 'lat' sau cadru . args [ 2 ] == „lung” atunci
rezultat local , negativ = mw . text . split (( mw . ustring . match ( frame . args [ 1 ], '[%.% d] + ° [NS] [%.% d] + ° [EW]' ) sau '' ), '' )
dacă cadru . args [ 2 ] == 'lat' atunci
rezultat , negativ = rezultat [ 1 ], „S”
altceva
rezultat , negativ = rezultat [ 2 ], „W”
Sfârșit
rezultat = mw . text . divizare ( rezultat , '°' )
dacă rezultatul [ 2 ] == negativ atunci rezultatul [ 1 ] = '-' .. rezultatul [ 1 ] sfârșit
returnează rezultatul [ 1 ]
altceva
întoarce-te mw . ustring . match ( frame . args [ 1 ], 'params =.-_' .. frame . args [ 2 ] .. ': (.-) [_]' )
Sfârșit
Sfârșit

- Funcție pentru orice șablon {{dms2dec}}.
funcția p . dms2dec ( cadru )
local args = cadru . argumente
- {{dms2dec | N | 2 | 3 | 4}}
return DmsCoord : new ( args [ 2 ], args [ 3 ], args [ 4 ], args [ 1 ]): toDec (): getDeg ()
Sfârșit

- Funcție pentru orice șablon {{dec2dms}}.
funcția p . dec2dms ( cadru )
local args = cadru . argumente
- {{dec2dms | 1.111 | N | S}}
returnează DecCoord : nou ( args [ 1 ], tonumber ( args [ 1 ]) > = 0 și args [ 2 ] sau args [ 3 ]): toDms ()
Sfârșit

- Funcție pentru utilizare de către un alt modul.
funcția p . _principal ( argumente )
return Coord : new ( args ): getHTML ()
Sfârșit

- Funcție pentru șablonul {{Coord}}.
funcția p . principal ( cadru )
return select ( 2 , xpcall ( funcție ()
retur p . _main ( getArgs ( cadru ))
end , errhandler ))
Sfârșit

retur p