「モジュール:Coordinates」の版間の差分
ナビゲーションに移動
検索に移動
Special:Permalink/62683126より転記; WP:AN/PE (差分)による
template>Rxy 細 (「モジュール:Coordinates」を保護しました: 影響が特に大きいテンプレート: 現時点で 118506 ページからの読み込み ([編集=管理者のみに許可] (無期限) [移動=管理者のみに許可] (無...) |
preffff>Waiesu (Special:Permalink/62683126より転記; WP:AN/PE (差分)による) |
||
3行目: | 3行目: | ||
templates. It provides several methods, including | templates. It provides several methods, including | ||
{{# | {{#invoke:Coordinates | coord }} : General function formatting and displaying | ||
coordinate values. | coordinate values. | ||
{{# | {{#invoke:Coordinates | dec2dms }} : Simple function for converting decimal | ||
degree values to DMS format. | degree values to DMS format. | ||
{{# | {{#invoke:Coordinates | dms2dec }} : Simple function for converting DMS format | ||
to decimal degree format. | to decimal degree format. | ||
{{# | {{#invoke:Coordinates | link }} : Export the link used to reach the tools | ||
]] | ]] | ||
require('Module:No globals') | |||
local math_mod = require("Module:Math"); | local math_mod = require("Module:Math"); | ||
51行目: | 53行目: | ||
wrappers = 'Template:Coord' | wrappers = 'Template:Coord' | ||
}) | }) | ||
return coordinates[funcName](args) | return coordinates[funcName](args, frame) | ||
end | end | ||
end | end | ||
347行目: | 349行目: | ||
]] | ]] | ||
local function parseDMS( lat_d, lat_m, lat_s, lat_f, long_d, long_m, long_s, long_f, format ) | local function parseDMS( lat_d, lat_m, lat_s, lat_f, long_d, long_m, long_s, long_f, format ) | ||
local coordinateSpec = {} | local coordinateSpec, errors, backward = {}, {} | ||
local errors = {} | local errors = {} | ||
355行目: | 357行目: | ||
-- Check if specified backward | -- Check if specified backward | ||
if lat_f == 'E' or lat_f == 'W' then | if lat_f == 'E' or lat_f == 'W' then | ||
lat_d, long_d, lat_m, long_m, lat_s, long_s, lat_f, long_f, backward = long_d, lat_d, long_m, lat_m, long_s, lat_s, long_f, lat_f, true; | |||
end | end | ||
401行目: | 391行目: | ||
end | end | ||
return coordinateSpec, errors | return coordinateSpec, errors, backward | ||
end | end | ||
410行目: | 400行目: | ||
local function formatTest(args) | local function formatTest(args) | ||
local result, errors | local result, errors | ||
local primary = false | local backward, primary = false, false | ||
local function getParam(args, lim) | local function getParam(args, lim) | ||
435行目: | 425行目: | ||
elseif dmsTest(args[4], args[8]) then | elseif dmsTest(args[4], args[8]) then | ||
-- dms logic | -- dms logic | ||
result, errors = parseDMS(args[1], args[2], args[3], args[4], | result, errors, backward = parseDMS(args[1], args[2], args[3], args[4], | ||
args[5], args[6], args[7], args[8], args.format) | args[5], args[6], args[7], args[8], args.format) | ||
if args[10] then | if args[10] then | ||
446行目: | 436行目: | ||
elseif dmsTest(args[3], args[6]) then | elseif dmsTest(args[3], args[6]) then | ||
-- dm logic | -- dm logic | ||
result, errors = parseDMS(args[1], args[2], nil, args[3], | result, errors, backward = parseDMS(args[1], args[2], nil, args[3], | ||
args[4], args[5], nil, args[6], args['format']) | args[4], args[5], nil, args[6], args['format']) | ||
if args[8] then | if args[8] then | ||
457行目: | 447行目: | ||
elseif dmsTest(args[2], args[4]) then | elseif dmsTest(args[2], args[4]) then | ||
-- d logic | -- d logic | ||
result, errors = parseDMS(args[1], nil, nil, args[2], | result, errors, backward = parseDMS(args[1], nil, nil, args[2], | ||
args[3], nil, nil, args[4], args.format) | args[3], nil, nil, args[4], args.format) | ||
if args[6] then | if args[6] then | ||
483行目: | 473行目: | ||
ret = ret .. ' ' .. errorPrinter(errors) .. '[[Category:座標タグに誤りがあるページ]]' | ret = ret .. ' ' .. errorPrinter(errors) .. '[[Category:座標タグに誤りがあるページ]]' | ||
end | end | ||
return ret | return ret, backward | ||
end | end | ||
611行目: | 601行目: | ||
coordinates.coord = makeInvokeFunc('_coord') | coordinates.coord = makeInvokeFunc('_coord') | ||
function coordinates._coord(args) | function coordinates._coord(args) | ||
if not args[1] and not args[2] and mw.wikibase.getEntityObject() then | if (not args[1] or not tonumber(args[1])) and not args[2] and mw.wikibase.getEntityObject() then | ||
args[3] = args[1]; args[1] = nil | |||
local entity = mw.wikibase.getEntityObject() | local entity = mw.wikibase.getEntityObject() | ||
if entity | if entity | ||
629行目: | 620行目: | ||
end | end | ||
local contents = formatTest(args) | local contents, backward = formatTest(args) | ||
local Notes = args.notes or '' | local Notes = args.notes or '' | ||
local Display = args.display and args.display:lower() or 'inline' | local Display = args.display and args.display:lower() or 'inline' | ||
640行目: | 631行目: | ||
-- Finds whether coordinates are displayed in the title. | -- Finds whether coordinates are displayed in the title. | ||
return s:find('title') ~= nil or s == 't' or s == 'it' or s == 'ti' | return s:find('title') ~= nil or s == 't' or s == 'it' or s == 'ti' | ||
end | |||
local function coord_wrapper(in_args) | |||
-- Calls the parser function {{#coordinates:}}. | |||
return mw.getCurrentFrame():callParserFunction('#coordinates', in_args) or '' | |||
end | end | ||
650行目: | 646行目: | ||
.. displaytitle(contents, Notes) | .. displaytitle(contents, Notes) | ||
.. makeWikidataCategories() | .. makeWikidataCategories() | ||
end | |||
if not args.nosave then | |||
local page_title, count = mw.title.getCurrentTitle(), 1 | |||
if backward then | |||
local tmp = {} | |||
while not string.find((args[count-1] or ''), '[EW]') do tmp[count] = (args[count] or ''); count = count+1 end | |||
tmp.count = count; count = 2*(count-1) | |||
while count >= tmp.count do table.insert(tmp, 1, (args[count] or '')); count = count-1 end | |||
for i, v in ipairs(tmp) do args[i] = v end | |||
else | |||
while count <= 9 do args[count] = (args[count] or ''); count = count+1 end | |||
end | |||
if isInTitle(Display) and not page_title.isTalkPage and page_title.subpageText ~= 'doc' and page_title.subpageText ~= 'testcases' then args[10] = 'primary' end | |||
args.notes, args.format, args.display = nil | |||
text = text .. coord_wrapper(args) | |||
end | end | ||
return text | return text | ||
end | |||
--[[ | |||
coord2text | |||
Extracts a single value from a transclusion of {{Coord}}. | |||
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED. | |||
Usage: | |||
{{#invoke:Coordinates | coord2text | {{Coord}} | parameter }} | |||
Valid values for the second parameter are: lat (signed integer), long (signed integer), type, scale, dim, region, globe, source | |||
]] | |||
function coordinates.coord2text(frame) | |||
if frame.args[1] == '' or frame.args[2] == '' or not frame.args[2] then return nil end | |||
frame.args[2] = mw.text.trim(frame.args[2]) | |||
if frame.args[2] == 'lat' or frame.args[2] == 'long' then | |||
local result, negative = mw.text.split((mw.ustring.match(frame.args[1],'%d+.?%d*°[NS] %d+.?%d*°[EW]') or ''), ' ') | |||
if frame.args[2] == 'lat' then | |||
result, negative = result[1], 'S' | |||
else | |||
result, negative = result[2], 'W' | |||
end | |||
result = mw.text.split(result, '°') | |||
if result[2] == negative then result[1] = '-'..result[1] end | |||
return result[1] | |||
else | |||
return mw.ustring.match(frame.args[1], 'params=.-_'..frame.args[2]..':(.-)[ _]') | |||
end | |||
end | |||
--[[ | |||
coordinsert | |||
Injects some text into the Geohack link of a transclusion of {{Coord}} (if that text isn't already in the transclusion). Outputs the modified transclusion of {{Coord}}. | |||
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED. | |||
Usage: | |||
{{#invoke:Coordinates | coordinsert | {{Coord}} | parameter:value | parameter:value | … }} | |||
Do not make Geohack unhappy by inserting something which isn't mentioned in the {{Coord}} documentation. | |||
]] | |||
function coordinates.coordinsert(frame) | |||
for i, v in ipairs(frame.args) do | |||
if i ~= 1 then | |||
if not mw.ustring.find(frame.args[1], (mw.ustring.match(frame.args[i], '^(.-:)') or '')) then frame.args[1] = mw.ustring.gsub(frame.args[1], '(params=.-)_? ', '%1_'..frame.args[i]..' ') end | |||
end | |||
end | |||
return frame.args[1] | |||
end | end | ||
return coordinates | return coordinates |