Module:TaxonList: Difference between revisions

Content deleted Content added
correction
Copy from sandbox per request on talk
 
(7 intermediate revisions by 3 users not shown)
Line 5:
taxoboxes.
]]
 
-- use a function from Module:TaxonItalics to italicize a taxon name
local TaxonItalics = require("Module:TaxonItalics")
local IfPreview = require([[Module:If preview]])
 
local p = {}
Line 31 ⟶ 35:
else
-- did the taxon name originally have {{extinct}} before it?
if (string.sub(taxonName,1,5) == '<spanabbr') and mw.ustring.find(taxonName, '†') then
taxonName = string.gsub(taxonName, '^.*</spanabbr>', '', 1)
dagger = '†'
end
Line 40 ⟶ 44:
end
 
--[[=========================================================================
--Utility function to italicizedo the taxon name. following:
 
1. Strip off any initial † present to mark the taxon as extinct. We outsource
--Any connecting terms used in botanical names (e.g. 'subsp.', 'f.')
to p.stripDagger() for this.
--should not be italicized. However, de-italicizing is a more complex issue
 
--than the initial version of code commented out here, which caused problems.
2. Strip off any double quotation marks present to mark the taxon as invalid.
--=============================================================================
The double-quotation marks, too, should not be formatted.
function p.italicize(taxonName, linked)
 
-- if not linked then
3. Strip off any Candidatus or Ca. to mark the taxon as Candidatus.
-- taxonName = string.gsub(taxonName, ' %a*%. ', '</i> %0 <i>', 1)
 
-- end
The function returns four values:
return "''" .. taxonName .. "''"
* the taxon name with all of the three modifiers removed
* either '†' if it was present or the empty string if not
* either a single dquote if it was present in a pair or the empty string if not
* either italicized "Candidatus " or "Ca. " if it was present or the empty string if not
 
The function can error in case of an unpaired quotation mark. In that case, a
IfPreview._warning() is mixed into the first return.
--=============================================================================]]
function p.italicizeparseName(taxonName, linked)
taxonName local name, dagger = p.stripDagger(taxonName)
local dquote = ''
if string.sub(name,1,1) == '"' then
name = string.sub(name,2)
daggerdquote = '"'
if string.sub(name,#name) == '"' then
name = string.sub(name,1,#name-1)
else
name = '|' .. IfPreview._warning({'"' .. name .. ' has an unpaired double quote.'})
-- end
end
 
local candidatus = ''
if string.sub(name,1,11) == 'Candidatus ' then
name = string.sub(name,12)
candidatus = "''Candidatus'' "
elseif string.sub(name,1,4) == 'Ca. ' then
name = string.sub(name,5)
candidatus = "''Ca.'' "
end
 
return name, dagger, dquote, candidatus
end
 
Line 73 ⟶ 108:
local linked = frame.args['linked'] == 'yes'
if bold then linked = false end -- must not have bold and wikilinked
local abbreviated = frame.args['abbreviated'] == 'yes'
local incomplete = frame.args['incomplete'] == 'yes'
local taxonArgs = frame:getParent().args
Line 79 ⟶ 115:
local taxonName
local dagger
local dquote
local candidatus
local first = true -- is this the first of a taxon name/author pair?
for param, value in pairs(taxonArgs) do
Line 84 ⟶ 122:
if first then
taxonName = mw.text.trim(value)
-- if necessary separate any initial † from the taxon namemodifier
taxonName, dagger, dquote, candidatus = p.parseName(taxonName)
if linked orand not (italic orand candidatus == bold'') then
taxonName, dagger = p.stripDagger(taxonName)
else
dagger = ''
end
if linked then
taxonName = '[[' .. taxonName .. ']]'
end
if italic and candidatus == '' then
taxonName = pTaxonItalics.italicizeitalicizeTaxonName(taxonName, linked, abbreviated)
end
taxonName = candidatus .. taxonName
if bold then
taxonName = '<b>' .. taxonName .. '</b>'
end
result = result .. '<li>' .. dagger .. dquote .. taxonName .. dquote
else
result = result .. ' <small>' .. value .. '</small></li>'
Line 109 ⟶ 144:
result = result .. '<small>(incomplete list)</small>'
end
return '<ul styleclass="plainlisttaxonlist">' .. result .. '</ul>'
end