词条 | Module:NVR/sandbox |
释义 | --[[ This module generates links to ships in the Naval Vessel Register (nvr.navy.mil) database. It is used by Template:NVR_url and Template:NVR_SC_url Please do not modify this code without applying the changes first at Module:NVR/sandbox and testing at Module:NVR/sandbox/testcases and Module talk:NVR/sandbox/testcases. Authors and maintainers:
]] require('Module:No globals') local p = {} --[[--------------------------< F O R W A R D D E C L A R A T I O N S >--------------------------------------]] local ships_data = {}; local srv_craft_data = {}; local data = mw.loadData ('Module:NVR/data'); ships_data = data.nvr_ships_id; srv_craft_data = data.nvr_srv_craft_id; --[[--------------------------< M A K E _ E R R O R _ M E S S A G E >------------------------------------------General purpose error message function to render error messages and categorization ]] local function make_error_message (output, prefix, item, suffix) local category = ; -- for concatenation
if 0 == mw.title.getCurrentTitle().namespace then -- article namespace category = ; -- categorize only from article namespace end
table.insert (output, '') table.insert (output, prefix); table.insert (output, item); table.insert (output, suffix); table.insert (output, ' (help)'); table.insert (output, category); return end --[[--------------------------< M A K E _ S H I P _ L I N K >--------------------------------------------------This function returns a link to a ship in the Naval Vessel Register. Usage: {{#invoke:NVR|MakeShipLink|1=|title=}}{{#invoke:NVR|MakeShipLink}} - uses the caller's parametersParameters 1, id: The ship's hull classification symbol 2, title: A title or label for the link. ]] function p.MakeShipLink (frame) local args = frame.args -- if no argument provided, check parent template/module args local output = {}; if (args[1]==nil) and (args["id"]==nil) then args = frame:getParent().args; if (args[1]==nil) and (args["id"]==nil) then make_error_message (output, 'required parameter missing', , ); return table.concat (output); end end
local hull = args["id"] or args[1] or ; local hull_prefix; local title = args["title"] or args[2] or ;
if == title then -- to prevent external links that look like this: [1] title = nil; end
hull = mw.text.trim (hull):upper(); -- make sure that there is no leading/trailing whitespace and uppercase -- standardize so that we can recognize as many formats as possible hull = hull:gsub ('^T%-', ); -- if hull classification symbol is T-XX-NNN, remove the 'T-' hull = hull:gsub ('(%a+)_(%d+)_%d+', '%1-%2'); -- if template has 'new' url identifier format (SSBN_659_1635) hull = hull:gsub ('(%a+)[_ ]?(%d+)', '%1-%2'); -- if template has SSBN 659 or SSBN_659 or SSBN659 format if hull:match ('(%a+)%-%d+') then -- most common case hull_prefix = hull:match ('(%a+)[%-_]?%d+'); elseif hull:match ('[%a+ %(%)]+%-%d+') then -- special one-off case for AFSB (I)-15 hull_prefix = hull:match ('([%a+ %(%)]+)%-%d+') elseif hull:match ('^CONSTITUTION$') or hull:match ('^MAINE$') or hull:match ('^TEXAS$') then -- Constitution, Maine, and Texas hull_prefix = hull; -- do not have hull classification symbols; use their names else make_error_message (output, 'malformed hull classification symbol: ', hull, ); return table.concat (output); end
if not ships_data[hull_prefix] then -- is there a group for the hull number? make_error_message (output, 'unable to find group: [\\, hull_prefix, '\\'] in NVR/data nvr_ships_id'); return table.concat (output); end if not ships_data[hull_prefix][hull] then -- is there a hull number make_error_message (output, 'unable to find hull classification symbol: [\\, hull, '\\'] in NVR/data nvr_ships_id'); return table.concat (output); end local nvr_id = ships_data[hull_prefix][hull][1]; -- try to fetch nvr id if (nil ~= nvr_id) and ( ~= nvr_id) then -- there appears to be an identifier, so use it if title then -- if there is a title then make an external link from it table.insert (output, '['); -- opening bracket end table.insert (output, 'http://www.nvr.navy.mil/SHIPDETAILS/SHIPSDETAIL_'); -- create the url table.insert (output, nvr_id); table.insert (output, '.HTML'); if title then table.insert (output, ' '); -- required space table.insert (output, title); -- title table.insert (output, ']'); -- and closing bracket end
else -- no identifier make_error_message (output, 'no identifier for hull classification symbol: [\\, hull, '\\'] in NVR/data nvr_ships_id'); end
return table.concat (output); -- and done end --[[--------------------------< M A K E _ S E R V I C E _ C R A F T _ L I N K >--------------------------------This function returns a link to a service craft in the Naval Vessel Register. Usage: {{#invoke:NVR|MakeServiceCraftLink|1=|title=}}{{#invoke:NVR|MakeServiceCraftLink}} - uses the caller's parametersParameters 1, id: The 'file name' portion of the url path (typically the craft's hull designation) without the .HTM/.HTML extension. 2, title: A title or label for the link. ]] function p.MakeServiceCraftLink( frame ) -- if no argument provided than check parent template/module args local args = frame.args local output = {}; if (args[1]==nil) and (args["id"]==nil) then args = frame:getParent().args; if (args[1]==nil) and (args["id"]==nil) then make_error_message (output, 'required parameter missing', , ); return table.concat (output); end end
local hull = args["id"] or args[1] or ; local hull_prefix; local title = args["title"] or args[2] or ;
if == title then -- to prevent external links that look like this: [1] title = nil; end
hull = mw.text.trim (hull):upper(); -- make sure that there is no leading/trailing whitespace and uppercase -- standardize so that we can recognize as many formats as possible hull = hull:gsub ('(%a+)_(%d+)_%d+', '%1-%2'); -- if template has 'new' url identifier format (YT_807_4629) hull = hull:gsub ('(%a+)[_ ]?(%d+)', '%1-%2'); -- if template has YT 807 or YT_807 or YT807 format if hull:match ('(%a+)%-%d+') then -- most common case hull_prefix = hull:match ('(%a+)%-%d+'); elseif hull:match ('(%a+)%-%d+%a') then -- special cases for the various sections of floating dry docks; hull_prefix = hull:match ('(%a+)%-%d+%a'); -- each section has a single letter designator: AFDB-7F else make_error_message (output, 'malformed hull classification symbol: ', hull, ); return table.concat (output); end
if not srv_craft_data[hull_prefix] then -- is there a group for the hull number? make_error_message (output, 'unable to find group: [\\, hull_prefix, '\\'] in NVR/data nvr_srv_craft_id'); return table.concat (output); end if not srv_craft_data[hull_prefix][hull] then -- is there a hull number make_error_message (output, 'unable to find hull classification symbol: [\\, hull, '\\'] in NVR/data nvr_srv_craft_id'); return table.concat (output); end local nvr_id = srv_craft_data[hull_prefix][hull][1]; -- try to fetch nvr id if (nil ~= nvr_id) and ( ~= nvr_id) then -- there appears to be an identifier, so use it if title then table.insert (output, '['); end table.insert (output, 'http://www.nvr.navy.mil/SHIPDETAILS/SHIPSDETAIL_'); table.insert (output, nvr_id); table.insert (output, '.HTML'); if title then table.insert (output, ' '); table.insert (output, title); table.insert (output, ']'); end else -- no identifier make_error_message (output, 'no identifier for hull classification symbol: [\\, hull, '\\'] in NVR/data nvr_srv_craft_id'); end
return table.concat (output); end return p 1 : WPSHIPS:Template_errors |
随便看 |
|
开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。