Name, I.I., & Name, I.I. (Colaboration name)  
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 collaboration = author_names:match ('%s*(%b)$'); -- get collaboration name if it exists  
if collaboration then -- when there is a colaboration
collaboration = collaboration:gsub ('[%(%)]', ''); -- remove bounding parentheses
author_names = author_names:gsub ('%s*(%b)$', ''); -- and remove collaboration from author-name-list
end  
local names = author_names:gsub ('%.?,?%s+&%s+', '.|'):gsub ('%.,%s+', '.|'); -- replace 'separators' (<dot><comma><space> and <opt. dot><opt. comma><space><ampersand><space>) with <dot><pipe>
names = names:gsub ('(%.%u),', '%1.|'); -- special case for when last initial is missing its trailing dot
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
list[i] = table.concat ({'|author', (i == 1) and '' or i, '=', name}); -- add |authorn= parameter names; create |author= instead of |author1=
end
if collaboration then
table.insert (list, table.concat ({'|collaboration', '=', collaboration})); -- add |collaboration= parameter
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; attempts to get the italic  
*binomen* (amended or errata title)
*binomen*
*binomen* ssp. *subspecies*
*binomen* subsp. *subspecies*
*binomen* var. *variety*
*binomen* subvar. *subvariety*  
all of the above may have trailing amended or errata text in parentheses  
TODO: are there others?  
local function title_get (raw_iucn_cite)
local title = raw_iucn_cite:match ('%d%d%d%d%.%s+(.-)%s*%. The IUCN Red List of Threatened Species');  
local patterns = { -- tables of string.match patterns [1] and string.gsub patterns [2]
{'(.-)%sssp%.%s+(.-)%s(%b)$', "*%1* ssp. *%2* %3"}, -- binomen ssp. subspecies (zoology) with errata or amended text
{'(.-)%sssp%.%s+(.+)', "*%1* ssp. *%2*"}, -- binomen ssp. subspecies (zoology)
{'(.-)%ssubsp%.%s+(.-)%s(%b)$', "*%1* subsp. *%2* %3"}, -- binomen subsp. subspecies (botany) with errata or amended text
{'(.-)%ssubsp%.%s+(.+)', "*%1* subsp. *%2*"}, -- binomen subsp. subspecies (botany)
{'(.-)%svar%.%s+(.-)%s+(%b)$', "*%1* var. *%2* %3"}, -- binomen var. variety (botany) with errata or amended text
{'(.-)%svar%.%s+(.+)', "*%1* var. *%2*"}, -- binomen var. variety (botany)
{'(.-)%ssubvar%.%s+(.-)%s(%b)$', "*%1* subvar. *%2* %3"}, -- binomen subvar. subvariety (botany) with errata or amended text
{'(.-)%ssubvar%.%s+(.+)', "*%1* subvar. *%2*"}, -- binomen subvar. subvariety (botany)
{'(.-)%s*(%b)$', "*%1* %2"}, -- binomen with errata or amended text
{'(.+)', "*%1*"}, -- binomen
}  
for i, v in ipairs (patterns) do -- spin through the patterns
if title:match (v[1]) then -- when a match
title = title:gsub (v[1], v[2]); -- add italics
break; -- and done
end
end  
return table.concat ({' |title=', title}); -- return the |title= parameter
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 template for substing  
automatic substing by User:AnomieBOT/docs/TemplateSubster  
local function make_cite_iucn
local args = getArgs ;
local raw_iucn_cite = args[1];  
local template = {''); -- close the template  
if args[2] then -- if anything in args[2], write a nowiki'd version that editors can copy into '
end
return table.concat (template); -- the subst'd version
end  
----------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------  
return {
cite = cite,
make_cite_iucn = make_cite_iucn,
}