Module:Sandbox/trappist the monk/make cite iucn
< Module:Sandbox
Jump to navigation
Jump to search
Revision as of 14:25, 27 December 2019 by blackwiki>Trappist the monk
Documentation for this module may be created at Module:Sandbox/trappist the monk/make cite iucn/doc
require ('Module:No globals');
--[[--------------------------< A U T H O R _ L I S T _ M A K E >----------------------------------------------
creates a list of individual |authorn= parameters from the list of names provided in the raw iucn citation. names
must have the form: Surname, I. (more than one 'I.' pair allowed)
]]
local function author_names_get (raw_iucn_cite)
local list = {}; -- table that holds name list parts
local author_names = raw_iucn_cite:match ('^([^%d]-)%s+%d%d%d%d'); -- extract author name-list from raw iucn citation
local names = author_names:gsub ('%.,%s+', '.|'):gsub ('%.%s+&%s+', '.|'); -- replace 'separators' (<dot><comma><space> and <space><ampersand><space>) with a pipe
list = mw.text.split (names, '|'); -- split the string on the pipes into entries in list{}
if 0 == #list then
return table.concat ({'|author=', author_names}) -- no 'names' of the proper form; return the original as a single |author= parameter
else
for i, name in ipairs (list) do -- spin through the list and
list[i] = table.concat ({'|author', i, '=', name}); -- add |authorn= parameter names
end
return table.concat (list, ' '); -- make a big string and return that
end
end
--[[--------------------------< T I T L E _ G E T >------------------------------------------------------------
extract and format citation title
''species name'' (amended or errate title)
''species name''
TODO: add support for variants of simple species names
]]
local function title_get (raw_iucn_cite)
local title = raw_iucn_cite:match ('%d%d%d%d%.%s+(.-)%. The IUCN Red List of Threatened Species');
if title:match ('.+%b()$') then -- if title has errata or amended text
title = title:gsub ('(.-)%s(%b())$', "''%1'' %2"); -- italicize species name only
else
title = title:gsub ('(.+)', "''%1''"); -- italicize whole title
end
return table.concat ({' |title=', title});
end
--[[--------------------------< _ M A K E _ C I T E _ I U C N >------------------------------------------------
parses apart an iucn-format citation copied from their webpage and reformats that into a {{cite iucn}} template for substing
]]
--local function _make_cite_iucn (raw_iucn_cite) -- for development
local function make_cite_iucn (frame)
local raw_iucn_cite = frame.args[1];
local template = {'{{cite iucn '}; -- table that holds the {{cite iucn}} template as it is being assembled
local year, volume, page, doi, accessdate;
year = raw_iucn_cite:match ('^%D+(%d%d%d%d)');
volume, page = raw_iucn_cite:match ('(%d%d%d%d):%s+(e%.T%d+A+%d+)%.%s');
doi = raw_iucn_cite:match ('10%.2305/IUCN%.UK%.[%d%-]+%.RLTS%.T%d+A%d+%.en');
accessdate = raw_iucn_cite:match ('Downloaded on ([^%.]+)%.');
table.insert (template, author_names_get (raw_iucn_cite)); -- add string of author name parameters
table.insert (template, table.concat ({' |year=', year})); -- add formatted year
table.insert (template, title_get (raw_iucn_cite)); -- add formatted title
table.insert (template, table.concat ({' |volume=', volume})); -- add formatted volume
table.insert (template, table.concat ({' |page=', page})); -- add formatted page
table.insert (template, table.concat ({' |doi=', doi})); -- add formatted doi
table.insert (template, table.concat ({' |access-date=', accessdate})); -- add formatted access-date
table.insert (template, '}}'); -- close the template
return table.concat (template);
end
--local function make_cite_iucn (frame) -- TODO: delete; for development
-- return _make_cite_iucn (frame.args[1])
--end
return {
make_cite_iucn = make_cite_iucn,
}