<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AAutomated_taxobox</id>
	<title>Module:Automated taxobox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AAutomated_taxobox"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Automated_taxobox&amp;action=history"/>
	<updated>2026-04-04T17:34:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the-democratika.com/wiki/index.php?title=Module:Automated_taxobox&amp;diff=7511&amp;oldid=prev</id>
		<title>&gt;Paine Ellsworth: per edit request at Wikipedia talk:Automated taxobox system#Edit request 9 September 2024 - replace underscores with spaces</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Automated_taxobox&amp;diff=7511&amp;oldid=prev"/>
		<updated>2024-09-09T20:17:01Z</updated>

		<summary type="html">&lt;p&gt;per edit request at &lt;a href=&quot;/wiki/index.php?title=Wikipedia_talk:Automated_taxobox_system&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Wikipedia talk:Automated taxobox system (page does not exist)&quot;&gt;Wikipedia talk:Automated taxobox system#Edit request 9 September 2024&lt;/a&gt; - replace underscores with spaces&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local TaxonItalics = require(&amp;#039;Module:TaxonItalics&amp;#039;)&lt;br /&gt;
local Autotaxobox = require(&amp;#039;Module:Autotaxobox&amp;#039;)&lt;br /&gt;
local ItalicTitle = require(&amp;#039;Module:Italic title&amp;#039;)&lt;br /&gt;
local p = {} -- functions made public&lt;br /&gt;
local l = {} -- nonpublic internal functions and variables global to the module&lt;br /&gt;
l.system = &amp;#039;&amp;#039; -- &amp;#039;&amp;#039; for normal scientific classification (default)&lt;br /&gt;
              -- &amp;#039;ichnos&amp;#039; for trace fossil classification&lt;br /&gt;
              -- &amp;#039;veterovata&amp;#039; for egg fossil classification&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- ichnobox implements Template:Ichnobox; see the documentation of that&lt;br /&gt;
-- template for details.&lt;br /&gt;
-- The only difference from Template:Automatic taxobox is in the taxobox colour&lt;br /&gt;
-- and classification link and the parameters for type species and genera.&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
function p.ichnobox(frame)&lt;br /&gt;
	l.system = &amp;#039;ichnos&amp;#039;&lt;br /&gt;
	return p.automaticTaxobox(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- oobox implements Template:Oobox; see the documentation of that&lt;br /&gt;
-- template for details.&lt;br /&gt;
-- The only difference from Template:Automatic taxobox is in the taxobox colour&lt;br /&gt;
-- and classification link and the parameters for type species and genera.&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
function p.oobox(frame)&lt;br /&gt;
	l.system = &amp;#039;veterovata&amp;#039;&lt;br /&gt;
	return p.automaticTaxobox(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- automaticTaxobox implements Template:Automatic taxobox; see the documentation&lt;br /&gt;
-- of that template for details.&lt;br /&gt;
-- It also implements Template:Ichnobox and Template:Oobox. The small&lt;br /&gt;
-- differences are signalled by the module-wide variable l.system.&lt;br /&gt;
-- The following parameters present in the old template code version of&lt;br /&gt;
-- Template:Automatic taxobox were not used and have not been implemented:&lt;br /&gt;
--   image_caption_align&lt;br /&gt;
--   image2_caption_align&lt;br /&gt;
--   binomial2&lt;br /&gt;
--   binomial2_authority&lt;br /&gt;
--   binomial3&lt;br /&gt;
--   binomial3_authority&lt;br /&gt;
--   binomial4&lt;br /&gt;
--   binomial4_authority&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
function p.automaticTaxobox(frame)&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args[&amp;#039;direct&amp;#039;] == &amp;#039;yes&amp;#039; then args = frame.args&lt;br /&gt;
	else args = frame:getParent().args end&lt;br /&gt;
	local res = &amp;#039;&amp;#039;&lt;br /&gt;
	-- ---------------------------------------------------------------------&lt;br /&gt;
	-- pick up taxobox parameters from the caller that need to be processed;&lt;br /&gt;
	-- most will be passed on unchanged&lt;br /&gt;
	-- ---------------------------------------------------------------------&lt;br /&gt;
	local pagename = args[&amp;#039;pagename&amp;#039;] or &amp;#039;&amp;#039; -- for testing and debugging only&lt;br /&gt;
	local italicTitle = args[&amp;#039;italic_title&amp;#039;] or args[&amp;#039;italic title&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local ichnos = &amp;#039;&amp;#039;&lt;br /&gt;
	if l.system == &amp;#039;ichnos&amp;#039; then ichnos = &amp;#039;true&amp;#039; end&lt;br /&gt;
	local veterovata = &amp;#039;&amp;#039;&lt;br /&gt;
	if l.system == &amp;#039;veterovata&amp;#039; then veterovata = &amp;#039;true&amp;#039; end&lt;br /&gt;
	local fossilRange = args[&amp;#039;fossil_range&amp;#039;] or args[&amp;#039;fossil range&amp;#039;] or args[&amp;#039;temporal_range&amp;#039;] or args[&amp;#039;temporal range&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local oldestFossil = args[&amp;#039;oldest_fossil&amp;#039;] or args[&amp;#039;oldest fossil&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local youngestFossil =  args[&amp;#039;youngest_fossil&amp;#039;] or args[&amp;#039;youngest fossil&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local name = args[&amp;#039;name&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local colourAs = args[&amp;#039;color_as&amp;#039;] or args[&amp;#039;color as&amp;#039;] or args[&amp;#039;colour_as&amp;#039;]  or args[&amp;#039;colour as&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local taxon = args[&amp;#039;taxon&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local authority = args[&amp;#039;authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local parentAuthority = args[&amp;#039;parent_authority&amp;#039;] or args[&amp;#039;parent authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local subdivision = args[&amp;#039;subdivision&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local subdivisionRef = args[&amp;#039;subdivision_ref&amp;#039;] or args[&amp;#039;subdivision ref&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local subdivisionRanks = args[&amp;#039;subdivision_ranks&amp;#039;] or args[&amp;#039;subdivision ranks&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local manualFlag = &amp;#039;text&amp;#039; -- marks manually specified ranks&lt;br /&gt;
	local binomial = args[&amp;#039;binomial&amp;#039;] or args[&amp;#039;binomial_&amp;#039;..manualFlag] or args[&amp;#039;binomial &amp;#039;..manualFlag] or &amp;#039;&amp;#039;&lt;br /&gt;
	local binomialAuthority = args[&amp;#039;binomial_authority&amp;#039;] or args[&amp;#039;binomial authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local genusManual = args[&amp;#039;genus_&amp;#039;..manualFlag] or args[&amp;#039;genus &amp;#039;..manualFlag] or&amp;#039;&amp;#039;&lt;br /&gt;
	local speciesManual = args[&amp;#039;species_&amp;#039;..manualFlag] or args[&amp;#039;species &amp;#039;..manualFlag] or&amp;#039;&amp;#039;&lt;br /&gt;
	-- ------------------------------------------------------&lt;br /&gt;
	-- set the taxobox parameters determined by this function&lt;br /&gt;
	-- ------------------------------------------------------&lt;br /&gt;
    fossilRange = l.setfossilRange(frame, fossilRange, oldestFossil, youngestFossil)&lt;br /&gt;
	-- use the base page name as the taxon if the taxon parameter is missing&lt;br /&gt;
	local currentPagename = mw.title.getCurrentTitle()&lt;br /&gt;
	if pagename == &amp;#039;&amp;#039; then pagename = currentPagename.text end -- pagename para only used in testing and &lt;br /&gt;
	local basePagename = pagename&lt;br /&gt;
	if italicTitle ~= &amp;#039;taxon&amp;#039; then basePagename = mw.ustring.gsub(basePagename, &amp;#039;%s+%b()$&amp;#039;, &amp;#039;&amp;#039;, 1) end&lt;br /&gt;
	local taxonParaMissingError = false&lt;br /&gt;
	if taxon == &amp;#039;&amp;#039; then&lt;br /&gt;
		taxonParaMissingError = true&lt;br /&gt;
		taxon = basePagename&lt;br /&gt;
	end&lt;br /&gt;
	-- decide if the page name and taxobox name need to be italicized;&lt;br /&gt;
	-- if italic_title is not set, then if the names are the taxon, use its rank to decide&lt;br /&gt;
	local ok, taxonRank = Autotaxobox.getTaxonInfoItem(frame, taxon, &amp;#039;rank&amp;#039;) -- taxonRank needed later if not here&lt;br /&gt;
	if italicTitle == &amp;#039;&amp;#039; then&lt;br /&gt;
		if not (ok and taxonRank ~= &amp;#039;&amp;#039; and&lt;br /&gt;
			    frame:expandTemplate{ title = &amp;#039;Is italic taxon&amp;#039;, args = {taxonRank} } == &amp;#039;yes&amp;#039;) then&lt;br /&gt;
			italicTitle = &amp;#039;no&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	--   remove any &amp;quot; (DISAMBIG)&amp;quot; or &amp;quot;/MODIFIER&amp;quot; from the taxon&amp;#039;s name;&lt;br /&gt;
	--   if the base page name is the same as the base taxon name, then italicization can be applied&lt;br /&gt;
	local baseTaxon = taxon&lt;br /&gt;
	if italicTitle ~= &amp;#039;taxon&amp;#039; then baseTaxon = mw.ustring.gsub(baseTaxon, &amp;#039;%s+%b()$&amp;#039;, &amp;#039;&amp;#039;, 1) end&lt;br /&gt;
	baseTaxon = mw.ustring.gsub(baseTaxon, &amp;#039;/.*$&amp;#039;, &amp;#039;&amp;#039;, 1)&lt;br /&gt;
	if italicTitle == &amp;#039;&amp;#039; and basePagename == baseTaxon then&lt;br /&gt;
		italicTitle = &amp;#039;yes&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- italicize the page name (page title) if required&lt;br /&gt;
	if currentPagename.namespace == 0 and (italicTitle == &amp;#039;yes&amp;#039; or italicTitle == &amp;#039;taxon&amp;#039;) then&lt;br /&gt;
		if italicTitle == &amp;#039;taxon&amp;#039; or TaxonItalics.hasConnectingTerm(baseTaxon) then&lt;br /&gt;
			res =  res .. frame:expandTemplate{ title = &amp;#039;Italic taxon title&amp;#039;, args = {} }&lt;br /&gt;
			italicTitle = &amp;#039;yes&amp;#039;&lt;br /&gt;
		else ItalicTitle._main({})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- set the taxobox name if not supplied, italicizing it if appropriate.&lt;br /&gt;
	if name == &amp;#039;&amp;#039; then&lt;br /&gt;
		name = basePagename&lt;br /&gt;
		if italicTitle == &amp;#039;yes&amp;#039; then&lt;br /&gt;
			name = TaxonItalics.italicizeTaxonName(name, false, false)&lt;br /&gt;
		end&lt;br /&gt;
		-- name = name ..  &amp;#039;/&amp;#039; .. baseTaxon .. &amp;#039;/&amp;#039; .. nameRank&lt;br /&gt;
	end&lt;br /&gt;
	-- determine taxobox colour&lt;br /&gt;
	local colour = &amp;#039;&amp;#039;&lt;br /&gt;
	if colourAs ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		colour = frame:expandTemplate{ title = &amp;#039;Taxobox colour&amp;#039;, args = {colourAs} }&lt;br /&gt;
	elseif l.system == &amp;#039;ichnos&amp;#039; then&lt;br /&gt;
		colour = frame:expandTemplate{ title = &amp;#039;Taxobox colour&amp;#039;, args = {&amp;#039;Ichnos&amp;#039;} }&lt;br /&gt;
	elseif l.system == &amp;#039;veterovata&amp;#039; then&lt;br /&gt;
		colour = frame:expandTemplate{ title = &amp;#039;Taxobox colour&amp;#039;, args = {&amp;#039;Veterovata&amp;#039;} }&lt;br /&gt;
	else&lt;br /&gt;
		colour = Autotaxobox.getTaxoboxColour(frame, taxon)&lt;br /&gt;
	end&lt;br /&gt;
	-- fill in a missing subdivision_ranks parameter&lt;br /&gt;
	if subdivision ~= &amp;#039;&amp;#039; and subdivisionRanks == &amp;#039;&amp;#039; and ok and taxonRank ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		subdivisionRanks =  frame:expandTemplate{ title = &amp;#039;Children rank&amp;#039;, args = {taxonRank} }&lt;br /&gt;
	end&lt;br /&gt;
	-- set binomial parameters if the target taxon is (unusually) a species&lt;br /&gt;
	local genusAuthority = &amp;#039;&amp;#039;&lt;br /&gt;
	if binomial == &amp;#039;&amp;#039; then&lt;br /&gt;
		if ok and taxonRank == &amp;#039;species&amp;#039; then&lt;br /&gt;
			binomial = TaxonItalics.italicizeTaxonName(taxon, false, false)&lt;br /&gt;
			binomialAuthority = authority&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- handle any manually set ranks&lt;br /&gt;
	local boldFirst = &amp;#039;&amp;#039;&lt;br /&gt;
	local offset = 0&lt;br /&gt;
	if speciesManual ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		offset = offset + 1&lt;br /&gt;
		binomialAuthority = authority&lt;br /&gt;
		if binomial == &amp;#039;&amp;#039; then binomial = &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: binomial parameter value is missing&amp;lt;/span&amp;gt;&amp;#039; end&lt;br /&gt;
	end&lt;br /&gt;
	if genusManual ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		boldFirst = &amp;#039;link&amp;#039;&lt;br /&gt;
		offset = offset + 1&lt;br /&gt;
		if offset == 1 then&lt;br /&gt;
			genusAuthority = authority&lt;br /&gt;
		else&lt;br /&gt;
			genusAuthority = parentAuthority&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- process type genus and type species if present; italicize if they seem not to have an authority attached&lt;br /&gt;
	local typeGenus = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeGenusAuthority = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeSpecies = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeSpeciesAuthority = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeIchnogenus = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeIchnogenusAuthority = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeIchnospecies = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeIchnospeciesAuthority = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeOogenus = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeOogenusAuthority = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeOospecies = &amp;#039;&amp;#039;&lt;br /&gt;
	local typeOospeciesAuthority = &amp;#039;&amp;#039;&lt;br /&gt;
	if l.system == &amp;#039;&amp;#039; then&lt;br /&gt;
		typeGenus = l.italicizeTypeName(args[&amp;#039;type_genus&amp;#039;] or args[&amp;#039;type genus&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
		typeGenusAuthority = args[&amp;#039;type_genus_authority&amp;#039;] or args[&amp;#039;type genus authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
		typeSpecies = l.italicizeTypeName(args[&amp;#039;type_species&amp;#039;] or args[&amp;#039;type species&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
		typeSpeciesAuthority = args[&amp;#039;type_species_authority&amp;#039;] or args[&amp;#039;type species authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	elseif l.system == &amp;#039;ichnos&amp;#039; then&lt;br /&gt;
		typeIchnogenus = l.italicizeTypeName(args[&amp;#039;type_ichnogenus&amp;#039;] or args[&amp;#039;type ichnogenus&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
		typeIchnogenusAuthority = args[&amp;#039;type_ichnogenus_authority&amp;#039;] or args[&amp;#039;type ichnogenus authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
		typeIchnospecies = l.italicizeTypeName(args[&amp;#039;type_ichnospecies&amp;#039;] or args[&amp;#039;type ichnospecies&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
		typeIchnospeciesAuthority = args[&amp;#039;type_ichnospecies_authority&amp;#039;] or args[&amp;#039;type ichnospecies authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	elseif l.system == &amp;#039;veterovata&amp;#039; then&lt;br /&gt;
		typeOogenus = l.italicizeTypeName(args[&amp;#039;type_oogenus&amp;#039;] or args[&amp;#039;type oogenus&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
		typeOogenusAuthority = args[&amp;#039;type_oogenus_authority&amp;#039;] or args[&amp;#039;type oogenus authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
		typeOospecies = l.italicizeTypeName(args[&amp;#039;type_oospecies&amp;#039;] or args[&amp;#039;type oospecies&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
		typeOospeciesAuthority = args[&amp;#039;type_oospecies_authority&amp;#039;] or args[&amp;#039;type oospecies authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- ------------------------------------------------&lt;br /&gt;
	-- now call Taxobox/core with all of its parameters&lt;br /&gt;
	-- ------------------------------------------------&lt;br /&gt;
	res = res .. frame:expandTemplate{ title = &amp;#039;Taxobox/core&amp;#039;, args =&lt;br /&gt;
		{ ichnos = ichnos,&lt;br /&gt;
		  veterovata = veterovata,&lt;br /&gt;
		  [&amp;#039;edit link&amp;#039;] = &amp;#039;e&amp;#039;,&lt;br /&gt;
		  temporal_range = fossilRange,&lt;br /&gt;
		  display_taxa = args[&amp;#039;display_parents&amp;#039;] or args[&amp;#039;display parents&amp;#039;] or &amp;#039;1&amp;#039;,&lt;br /&gt;
		  parent = taxon,&lt;br /&gt;
		  authority = authority,&lt;br /&gt;
          parent_authority = parentAuthority,&lt;br /&gt;
		  grandparent_authority = args[&amp;#039;grandparent_authority&amp;#039;] or args[&amp;#039;grandparent authority&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  greatgrandparent_authority = args[&amp;#039;greatgrandparent_authority&amp;#039;] or args[&amp;#039;greatgrandparent authority&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  greatgreatgrandparent_authority = args[&amp;#039;greatgreatgrandparent_authority&amp;#039;] or args[&amp;#039;greatgreatgrandparent authority&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  name = name,&lt;br /&gt;
		  colour = colour,&lt;br /&gt;
		  status = args[&amp;#039;status&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  status_system = args[&amp;#039;status_system&amp;#039;] or args[&amp;#039;status system&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  status_ref = args[&amp;#039;status_ref&amp;#039;] or args[&amp;#039;status ref&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  status2 = args[&amp;#039;status2&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  status2_system = args[&amp;#039;status2_system&amp;#039;] or args[&amp;#039;status2 system&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  status2_ref = args[&amp;#039;status2_ref&amp;#039;] or args[&amp;#039;status2 ref&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  trend = args[&amp;#039;trend&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  extinct = args[&amp;#039;extinct&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  image = args[&amp;#039;image&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  upright = args[&amp;#039;image_upright&amp;#039;] or args[&amp;#039;image upright&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  image_alt = args[&amp;#039;image_alt&amp;#039;] or args[&amp;#039;image alt&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  image_caption = args[&amp;#039;image_caption&amp;#039;] or args[&amp;#039;image caption&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  image2 = args[&amp;#039;image2&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  upright2 = args[&amp;#039;image2_upright&amp;#039;] or args[&amp;#039;image2 upright&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  image2_alt = args[&amp;#039;image2_alt&amp;#039;] or args[&amp;#039;image2 alt&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  image2_caption = args[&amp;#039;image2_caption&amp;#039;] or args[&amp;#039;image2 caption&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  classification_status = args[&amp;#039;classification_status&amp;#039;] or args[&amp;#039;classification status&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  diversity = args[&amp;#039;diversity&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  diversity_ref = args[&amp;#039;diversity_ref&amp;#039;] or args[&amp;#039;diversity ref&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  diversity_link = args[&amp;#039;diversity_link&amp;#039;] or args[&amp;#039;diversity link&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  bold_first = boldFirst,&lt;br /&gt;
		  offset = offset,&lt;br /&gt;
		  genus = genusManual,&lt;br /&gt;
		  genus_authority = genusAuthority,&lt;br /&gt;
		  species = speciesManual,&lt;br /&gt;
		  binomial = binomial,&lt;br /&gt;
		  binomial_authority = binomialAuthority,&lt;br /&gt;
		  trinomial = args[&amp;#039;trinomial&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  trinomial_authority = args[&amp;#039;trinomial_authority&amp;#039;] or args[&amp;#039;trinomial authority&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  type_genus = typeGenus,&lt;br /&gt;
		  type_genus_authority = typeGenusAuthority,&lt;br /&gt;
		  type_species = typeSpecies,&lt;br /&gt;
		  type_species_authority = typeSpeciesAuthority,&lt;br /&gt;
		  type_ichnogenus = typeIchnogenus,&lt;br /&gt;
		  type_ichnogenus_authority = typeIchnogenusAuthority,&lt;br /&gt;
		  type_ichnospecies = typeIchnospecies,&lt;br /&gt;
		  type_ichnospecies_authority = typeIchnospeciesAuthority,&lt;br /&gt;
		  type_oogenus = typeOogenus,&lt;br /&gt;
		  type_oogenus_authority = typeOogenusAuthority,&lt;br /&gt;
		  type_oospecies = typeOospecies,&lt;br /&gt;
		  type_oospecies_authority = typeOospeciesAuthority,&lt;br /&gt;
		  subdivision = subdivision,&lt;br /&gt;
		  subdivision_ref = subdivisionRef,&lt;br /&gt;
		  subdivision_ranks = subdivisionRanks,		  &lt;br /&gt;
		  type_strain = args[&amp;#039;type_strain&amp;#039;] or args[&amp;#039;type strain&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  type_strain_ref = args[&amp;#039;type_strain_ref&amp;#039;] or args[&amp;#039;type strain ref&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map = args[&amp;#039;range_map&amp;#039;] or args[&amp;#039;range map&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map_upright = args[&amp;#039;range_map_upright&amp;#039;] or args[&amp;#039;range map upright&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map_alt = args[&amp;#039;range_map_alt&amp;#039;] or args[&amp;#039;range map alt&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map_caption = args[&amp;#039;range_map_caption&amp;#039;] or args[&amp;#039;range map caption&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map2 = args[&amp;#039;range_map2&amp;#039;] or args[&amp;#039;range map2&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map2_upright = args[&amp;#039;range_map2_upright&amp;#039;] or args[&amp;#039;range map2 upright&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map2_alt = args[&amp;#039;range_map2_alt&amp;#039;] or args[&amp;#039;range map2 alt&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map2_caption = args[&amp;#039;range_map2_caption&amp;#039;] or args[&amp;#039;range map2 caption&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map3 = args[&amp;#039;range_map3&amp;#039;] or args[&amp;#039;range map3&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map3_upright = args[&amp;#039;range_map3_upright&amp;#039;] or args[&amp;#039;range map3 upright&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map3_alt = args[&amp;#039;range_map3_alt&amp;#039;] or args[&amp;#039;range map3 alt&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map3_caption = args[&amp;#039;range_map3_caption&amp;#039;] or args[&amp;#039;range map3 caption&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map4 = args[&amp;#039;range_map4&amp;#039;] or args[&amp;#039;range map4&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map4_upright = args[&amp;#039;range_map4_upright&amp;#039;] or args[&amp;#039;range map4 upright&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map4_alt = args[&amp;#039;range_map4_alt&amp;#039;] or args[&amp;#039;range map4 alt&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  range_map4_caption = args[&amp;#039;range_map4_caption&amp;#039;] or args[&amp;#039;range map4 caption&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  synonyms_ref = args[&amp;#039;synonyms_ref&amp;#039;] or args[&amp;#039;synonyms ref&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
		  synonyms = args[&amp;#039;synonyms&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
		} }&lt;br /&gt;
	-- put page in error-tracking categories if required&lt;br /&gt;
	local errCat1 = &amp;#039;&amp;#039;&lt;br /&gt;
	if genusManual ~= &amp;#039;&amp;#039; or speciesManual ~= &amp;#039;&amp;#039; or binomial ~= &amp;#039;&amp;#039; then errCat1 = &amp;#039;[[Category:Automatic taxoboxes using manual parameters]]&amp;#039; end&lt;br /&gt;
	local errCat2 = &amp;#039;&amp;#039;&lt;br /&gt;
	if taxonParaMissingError then errCat2 = &amp;#039;[[Category:Automatic taxoboxes relying on page title]]&amp;#039; end&lt;br /&gt;
	res = res .. frame:expandTemplate{ title = &amp;#039;Main other&amp;#039;, args = {errCat1..errCat2} }&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- l.setfossilRange(frame, fossilRange, oldestFossil, youngestFossil) checks&lt;br /&gt;
-- the parameters that determine the fossil range, returning an appropriate&lt;br /&gt;
-- range.&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- temporary public function for debugging&lt;br /&gt;
function p.chkFossilRange(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local fossilRange = args[&amp;#039;temporal_range&amp;#039;] or args[&amp;#039;temporal range&amp;#039;] or args[&amp;#039;fossil_range&amp;#039;] or args[&amp;#039;fossil range&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local oldestFossil = args[&amp;#039;oldest_fossil&amp;#039;] or args[&amp;#039;oldest fossil&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local youngestFossil =  args[&amp;#039;youngest_fossil&amp;#039;] or args[&amp;#039;youngest fossil&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local fossilRange = l.setfossilRange(frame, fossilRange, oldestFossil, youngestFossil)&lt;br /&gt;
	return fossilRange&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function l.setfossilRange(frame, fossilRange, oldestFossil, youngestFossil)&lt;br /&gt;
	local res = &amp;#039;&amp;#039;&lt;br /&gt;
	if fossilRange ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		if mw.ustring.find(frame:expandTemplate{ title = &amp;#039;Period start&amp;#039;, args = { fossilRange } }, &amp;#039;[Ee]rror&amp;#039;) then&lt;br /&gt;
			res = fossilRange&lt;br /&gt;
		else &lt;br /&gt;
			res = frame:expandTemplate{ title = &amp;#039;Geological range&amp;#039;, args = { fossilRange } }&lt;br /&gt;
		end&lt;br /&gt;
	elseif oldestFossil ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		if youngestFossil == &amp;#039;&amp;#039; then youngestFossil = &amp;#039;Recent&amp;#039; end&lt;br /&gt;
		if mw.ustring.find(frame:expandTemplate{ title = &amp;#039;Period start&amp;#039;, args = { oldestFossil } }, &amp;#039;[Ee]rror&amp;#039;) or&lt;br /&gt;
		   mw.ustring.find(frame:expandTemplate{ title = &amp;#039;Period start&amp;#039;, args = { youngestFossil } }, &amp;#039;[Ee]rror&amp;#039;) then&lt;br /&gt;
			res = oldestFossil..&amp;#039;–&amp;#039;..youngestFossil&lt;br /&gt;
		else&lt;br /&gt;
		res = frame:expandTemplate{ title = &amp;#039;Geological range&amp;#039;, args = { oldestFossil, youngestFossil } }&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- l.italicizeTypeName(typeName) checks whether the name of a type genus or&lt;br /&gt;
-- species should be italicized, because it appears to be a bare name.&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
function l.italicizeTypeName(typeName)&lt;br /&gt;
	if typeName and not (string.find(typeName, &amp;quot;&amp;lt;&amp;quot;, 1, true) or string.find(typeName, &amp;quot;&amp;gt;&amp;quot;, 1, true)) then&lt;br /&gt;
		typeName = TaxonItalics.italicizeTaxonName(typeName, false, false)&lt;br /&gt;
	end&lt;br /&gt;
	return typeName&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- **************************** Speciesbox support *****************************&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- l.genusOf(str) extracts the genus from a string. Normally this will be the&lt;br /&gt;
-- first word of the string (e.g. given &amp;#039;Bellis perennis&amp;#039; it returns &amp;#039;Bellis&amp;#039;).&lt;br /&gt;
-- It also handles a string containing a nothogenus with a spaced × (e.g. given&lt;br /&gt;
-- &amp;#039;× Heucherella tiarelloides&amp;#039; it returns &amp;#039;× Heucherella&amp;#039;).&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
function l.genusOf(str)&lt;br /&gt;
	local res = mw.ustring.match(str, &amp;#039;^[^%s]*&amp;#039;, 1)&lt;br /&gt;
	if res == mw.ustring.char(215) then&lt;br /&gt;
		res = res .. &amp;#039; &amp;#039; .. mw.ustring.match(str, &amp;#039;^[^%s]*&amp;#039;, 3)&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- l.doSpeciesboxName(name, taxon, genus, species, basePageTitle, italicTitle)&lt;br /&gt;
-- returns a name for a taxobox created by Template:Speciesbox. The name will be&lt;br /&gt;
-- italicized if appropriate. It also generates code to italicize the page title&lt;br /&gt;
-- if appropropriate. In both cases the test for italicization is that the base&lt;br /&gt;
-- taxon name (stripped of any disambiguation or qualifier) is the same as the&lt;br /&gt;
-- base page title.&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
function p.speciesboxName(frame)&lt;br /&gt;
	local name = frame.args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	local taxon = frame.args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	local genus = frame.args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
	local species = frame.args[4] or &amp;#039;&amp;#039;&lt;br /&gt;
	local basePageTitle = frame.args[5] or &amp;#039;&amp;#039;&lt;br /&gt;
	local italicTitle = frame.args[6] or &amp;#039;&amp;#039;&lt;br /&gt;
	return l.doSpeciesboxName(name, taxon, genus, species, basePageTitle, italicTitle)&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function l.doSpeciesboxName(name, taxon, genus, species, basePageTitle, italicTitle)&lt;br /&gt;
	if taxon ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		genus = mw.ustring.gsub(l.genusOf(taxon), &amp;#039;/.*$&amp;#039;, &amp;#039;&amp;#039;, 1) -- strip any qualifier&lt;br /&gt;
	else&lt;br /&gt;
		genus = mw.ustring.gsub(mw.ustring.gsub(genus, &amp;#039;%s+%b()$&amp;#039;, &amp;#039;&amp;#039;, 1), &amp;#039;/.*$&amp;#039;, &amp;#039;&amp;#039;, 1) -- strip any disambig and qualifier&lt;br /&gt;
		if species == &amp;#039;&amp;#039; then taxon = genus&lt;br /&gt;
		else taxon = genus .. &amp;#039; &amp;#039; .. species&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local italicizeP = italicTitle ~= &amp;#039;no&amp;#039; and (basePageTitle == taxon or basePageTitle == genus) -- use basePageTitle to match taxon/genus&lt;br /&gt;
	-- deal with taxobox name (i.e. its caption)&lt;br /&gt;
	if name == &amp;#039;&amp;#039; then&lt;br /&gt;
		name = basePageTitle&lt;br /&gt;
		if italicizeP then name = TaxonItalics.italicizeTaxonName(name, false, false) end&lt;br /&gt;
	end&lt;br /&gt;
	-- deal with page title&lt;br /&gt;
	if italicizeP then&lt;br /&gt;
		local pageTitle = mw.title.getCurrentTitle().text -- formatting the page title with DISPLAYTITLE needs the full page title&lt;br /&gt;
		if italicTitle ~= &amp;#039;test&amp;#039; then &lt;br /&gt;
			pageTitle  = TaxonItalics.italicizeTaxonName(pageTitle, false, false, true) -- format pageTitle, not italicizing any parenthesized term&lt;br /&gt;
			local nsText = mw.title.getCurrentTitle().nsText -- for drafts and other pages not in mainspace&lt;br /&gt;
			if nsText ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				pageTitle = nsText:gsub(&amp;#039;_&amp;#039;, &amp;#039; &amp;#039;) .. &amp;#039;:&amp;#039; .. pageTitle -- [[phab:T369784]]&lt;br /&gt;
			end&lt;br /&gt;
			mw.getCurrentFrame():callParserFunction(&amp;#039;DISPLAYTITLE&amp;#039;, pageTitle)&lt;br /&gt;
		else&lt;br /&gt;
			name = name .. &amp;#039; \\Italic title\\ &amp;#039; .. pageTitle -- for testing and debugging&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
function p.infraspeciesboxName(frame)&lt;br /&gt;
	local name = frame.args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	local genus = frame.args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	local species = frame.args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
	local ct = frame.args[4] or &amp;#039;&amp;#039;&lt;br /&gt;
    local infraspecies = frame.args[5] or &amp;#039;&amp;#039;&lt;br /&gt;
	local basePageTitle = frame.args[6] or &amp;#039;&amp;#039;&lt;br /&gt;
	local italicTitle = frame.args[7] or &amp;#039;&amp;#039;&lt;br /&gt;
	return l.doinfraspeciesboxName(name, genus, species, ct, infraspecies, basePageTitle, italicTitle)&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function l.doinfraspeciesboxName(name, genus, species, ct, infraspecies, basePageTitle, italicTitle)&lt;br /&gt;
	genus = mw.ustring.gsub(mw.ustring.gsub(genus, &amp;#039;%s+%b()$&amp;#039;, &amp;#039;&amp;#039;, 1), &amp;#039;/.*$&amp;#039;, &amp;#039;&amp;#039;, 1) -- strip any disambig and qualifier&lt;br /&gt;
	local taxon = genus .. &amp;#039; &amp;#039; .. species&lt;br /&gt;
	if ct == &amp;#039;&amp;#039; then taxon = taxon .. &amp;#039; &amp;#039; .. infraspecies&lt;br /&gt;
	else taxon = taxon .. &amp;#039; &amp;#039; .. ct .. &amp;#039; &amp;#039; .. infraspecies&lt;br /&gt;
	end&lt;br /&gt;
	local italicizeP = italicTitle ~= &amp;#039;no&amp;#039; and (basePageTitle == taxon) -- use basePageTitle to match taxon&lt;br /&gt;
	-- deal with taxobox name (i.e. its caption)&lt;br /&gt;
	if name == &amp;#039;&amp;#039; then&lt;br /&gt;
		name = basePageTitle&lt;br /&gt;
		if italicizeP then name = TaxonItalics.italicizeTaxonName(name, false, false) end&lt;br /&gt;
	end&lt;br /&gt;
	-- deal with page title&lt;br /&gt;
	if italicizeP then&lt;br /&gt;
		local pageTitle = mw.title.getCurrentTitle().text -- formatting the page title with DISPLAYTITLE needs the full page title&lt;br /&gt;
		pageTitle  = TaxonItalics.italicizeTaxonName(pageTitle, false, false, true) -- format pageTitle, not italicizing any parenthesized term&lt;br /&gt;
		if italicTitle ~= &amp;#039;test&amp;#039; then &lt;br /&gt;
			mw.getCurrentFrame():callParserFunction(&amp;#039;DISPLAYTITLE&amp;#039;, pageTitle)&lt;br /&gt;
		else&lt;br /&gt;
			name = name .. &amp;#039; \\Italic title\\ &amp;#039; .. pageTitle -- for testing and debugging&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>&gt;Paine Ellsworth</name></author>
	</entry>
</feed>