模块:LatinNameFormatter
外观
- []
- Foobar
- Foobar
- Homo sapiens
- Homo sapiens
- E. coli
- E. coli
- Acanthocalycium klimpelianum var. macranthum
- Acanthocalycium klimpelianum var. macranthum
- Pinus nigra subsp. salzmannii var. corsicana
- Pinus sylvestris L.
- Pinus sylvestris L.
- Pinus koraiensis Siebold & Zucc.
- Sequoia sempervirens (D. Don) Endl., Syn. Conif. 198 (1847)
- Branta albifrons Scopoli, 1769, Annus I Hist.-Nat. 69
- Balaena mysticetus Linnaeus, 1758
local p = {}
local terms = {
['subsp.'] = true,
['ssp.'] = true,
['var.'] = true,
['subvar.'] = true,
['f.'] = true,
['subf.'] = true,
}
local function unformat( name )
name = mw.ustring.gsub( name, "'", '' )
name = mw.ustring.gsub( name, '<.->', '' )
return name
end
local function split( name )
local words = {}
local extra = {}
for piece in mw.ustring.gmatch( name, '%S+') do
if #extra > 0 or (
#words > 0 and
not mw.ustring.match( mw.ustring.sub( piece, 1, 1 ), '[a-z]' )
) then
table.insert( extra, piece )
else
table.insert( words, piece )
end
end
return words, extra
end
local function joinWords( words )
modifiedWords = {}
for i = 1, #words do
local word = words[i]
if not terms[word] then
word = '<i>' .. word .. '</i>'
end
table.insert( modifiedWords, word )
end
return table.concat( modifiedWords, ' ' )
end
local function format( name )
local words, extra = split( name )
name = joinWords( words )
if #extra > 0 then
name = name .. ' ' .. table.concat( extra, ' ' )
end
return name
end
function p.format( frame )
return format( unformat( frame.args.name ) )
end
return p