Модуль:WikidataCoord — Вікіпедія

{{i}} Документація модуля[створити]
require('Module:No globals') local getArgs = require('Module:Arguments').getArgs  local patterns = { 	'(%d+)°(%d+)&#39;([%d%.]+)&#34;([NS]),%s*(%d+)°(%d+)&#39;([%d%.]+)&#34;([EW])',		-- if the returned data looks like 55°13&#39;12&#34;N, 23°17&#39;17&#34;E 	'(%d+)°(%d+)&#39;([NS]),%s*(%d+)°(%d+)&#39;([EW])',									-- if the returned data looks like 54°24&#39;N, 25°25&#39;E 	'(%d+)°(%d+)[′\']([%d%.]+)[″\"]([NS]),?%s*(%d+)°(%d+)[′\']([%d%.]+)[″\"]([EW])',	-- when args[1] is a dms string that uses quotes or primes 	'(%d+)°(%d+)[′\']([NS]),?%s*(%d+)°(%d+)[′\']([EW])',								-- when args[1] is a dms string that uses quotes or primes, bit shorter format 	'(%d+%.?%d*)°([NS]),?%s*(%d+%.?%d*)°([EW])',										-- when args[1] is a decimal degrees string 	}  local params = {'display', 'format', 'name', 'notes'};							-- {{coord}} template paramters   --[[--------------------------< I S _ S E T >------------------------------------------------------------------  Whether variable is set or not.  A variable is set when it is not nil and not empty.  ]]  local function is_set( var ) 	return not (var == nil or var == ''); end   --[[--------------------------< M A I N >----------------------------------------------------------------------  Template entry point.  This function takes up to two unnamed positional parameters: 	1 = coordinate string typically from a call to Wikidata like this: {{#property:P625|from=Q...}} 	2 = coordinate parameters; see Template:Coord 	 Also takes the named parameters |display=, |format=, |name=, |notes= which it passes on to {{coord}}  Reformats the Wikidata coordinate string into unnamed parameters for {{coord}}  {{#invoke:WikidataCoord|main|{{#property:P625|from={{{1}}}}}|{{{2}}}|display={{{display}}}|format={{{format}}}|name={{{name}}}|notes={{{notes}}}}}  ]]  local function main (frame) 	local args = getArgs(frame); 	local lat_long = {};														-- table of lat/long coords extracted from wikidata return  	 	if not is_set (args[1]) then												-- in case wikidata returns nothing (happens when Q... is wrong) 		return '<span style="font-size:100%" class="error">{{WikidataCoord}} – missing coordinate data</span>';		-- error message and quit 	else 		for _, pattern in ipairs (patterns) do 			lat_long[1], lat_long[2], lat_long[3], lat_long[4], lat_long[5], lat_long[6], lat_long[7], lat_long[8] = 				mw.ustring.match (args[1], pattern) 			if lat_long[1] then 				break; 			end 		end 	end  	if not lat_long[1] then 		return '<span style="font-size:100%" class="error">{{WikidataCoord}} – malformed coordinate data</span>';	-- wikidata returned something else 	end 	 	if is_set (args[2]) then													-- coordinate parameters are in second unnammed positional parameter 		table.insert (lat_long, args[2]);										-- add coordinate parameters as next positional parameter after coordnates 	end  	for _, param in ipairs (params) do 		if is_set (args[param]) then 			lat_long[param] = args[param];										-- add the named parameters if they have a value 		end 	end  	if args._debug then 		return table.concat ({'<code style="color:inherit; background:inherit; border:none;">{{coord|', table.concat (lat_long, '|' ), '}}</code>'}); 	end 	return frame:expandTemplate ({title = 'coord', args=lat_long});				-- invoke template {{coord}} with wikidata lat/long end   --[[--------------------------< E X P O R T E D   F U N C T I O N >-------------------------------------------- ]]  return {main = main}