<?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%3ABiota_infobox</id>
	<title>Module:Biota infobox - 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%3ABiota_infobox"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Biota_infobox&amp;action=history"/>
	<updated>2026-04-04T18:04:21Z</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:Biota_infobox&amp;diff=10450&amp;oldid=prev</id>
		<title>&gt;Shonebrooks: I corrected the spelling of &quot;system.&quot; WP:TYPO</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Biota_infobox&amp;diff=10450&amp;oldid=prev"/>
		<updated>2024-09-05T15:39:20Z</updated>

		<summary type="html">&lt;p&gt;I corrected the spelling of &amp;quot;system.&amp;quot; &lt;a href=&quot;/wiki/index.php?title=WP:TYPO&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:TYPO (page does not exist)&quot;&gt;WP:TYPO&lt;/a&gt;&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;
-- All Lua modules on Wikipedia must begin by defining a variable that will hold their&lt;br /&gt;
-- externally accessible functions. They can have any name and may also hold data.&lt;br /&gt;
local p = {}  -- exposed variables&lt;br /&gt;
local g = {}  -- these are variables with global scope in this module&lt;br /&gt;
&lt;br /&gt;
local info = {}          -- contains general purpose information (e.g. header background colour)&lt;br /&gt;
info.debug  = false -- ONLY SET THIS WHILE TESTING&lt;br /&gt;
&lt;br /&gt;
--local paramData = require( &amp;#039;Module:Sandbox/Jts1882/Biota Infobox/data&amp;#039; ) -- contains the taxon ranks in order&lt;br /&gt;
--local autotaxa = require(&amp;quot;Module:Sandbox/Jts1882/Biota Infobox/Autotaxobox&amp;quot;)&lt;br /&gt;
--local autotaxa = require(&amp;quot;Module:Autotaxobox&amp;quot;)&lt;br /&gt;
local parameters = require( &amp;#039;Module:Biota infobox/param&amp;#039; ) &lt;br /&gt;
local core = require( &amp;#039;Module:Biota infobox/core&amp;#039; ) &lt;br /&gt;
&lt;br /&gt;
-- ######################### PARAMETER HANDLING ############################&lt;br /&gt;
&lt;br /&gt;
local templateArgs = {}  -- contains preprocessed arguments from calling template&lt;br /&gt;
                          --TODO use info.args instead of templateArgs?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ########################### MAIN AND OTHER ENTRY FUNCTIONS ##################################&lt;br /&gt;
&lt;br /&gt;
--[[ main function callable in Wikipedia via the #invoke command.&lt;br /&gt;
        creates a taxobox-style infobox&lt;br /&gt;
        handles preliminary parameter handling enulating taxobox and automatic taxobox templates&lt;br /&gt;
           -- the parameters are also checked for content, alias, valid names and valid combinations&lt;br /&gt;
           -- the parameter handling is in subpage Module:Sandbox/Jts1882/Biota Infobox/param&lt;br /&gt;
        these are passed the core function&lt;br /&gt;
           -- the core function emulates the template {{Taxobox/core})&lt;br /&gt;
           -- the function is found in subpage Module:Sandbox/Jts1882/Biota Infobox/core&lt;br /&gt;
           -- the core them creates the taxobox&lt;br /&gt;
                 creates main table and header section (with header, subheader and fossil ranges)&lt;br /&gt;
	             adds addition rows for template arguments with following subsidiary functions:&lt;br /&gt;
			        p.addImageSection() - images and range maps &lt;br /&gt;
			        p.addStatusSection() - conservation status&lt;br /&gt;
			        p.addTaxonomySection() - listing of taxonomic heirarchy (manuel or using automatic taxonomy system)&lt;br /&gt;
			        p.addTaxonSection() - adds section with taxonomic information (binomial or trinomials; type genus or species; diversity)&lt;br /&gt;
			        p.addListSection()     - section containing list if subdivisions, synonyms, included or excluded groups&lt;br /&gt;
--]]&lt;br /&gt;
p.main = function(frame) &lt;br /&gt;
	&lt;br /&gt;
	--p.getArgs(frame)&lt;br /&gt;
	parameters.getArgs(frame, templateArgs, info)  -- gets arguments, checks for value, aliases, and against valid parameter list&lt;br /&gt;
&lt;br /&gt;
	if info.auto then&lt;br /&gt;
		p.AutomaticTaxoboxOptions(frame) -- this emulates the automatic taxobox templates that feed the core&lt;br /&gt;
	else&lt;br /&gt;
		--[[TODO manual taxobox options:&lt;br /&gt;
		            name or use Template:Taxonomy name |genus|species|binomial name&lt;br /&gt;
		            colour = p.getTaxoboxColor(frame)&lt;br /&gt;
		]]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--return p._core(frame)&lt;br /&gt;
	return core.core(frame, templateArgs, info)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- this functions emulates Template:automatic taxobox and uses Template:Taxobox/core&lt;br /&gt;
p.auto = function(frame) &lt;br /&gt;
	--info.auto = frame.args.auto or &amp;quot;automatictaxobox&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	p.getArgs(frame)  -- gets arguments, checks for value, aliases, and against valid parameter list&lt;br /&gt;
&lt;br /&gt;
	if info.auto then&lt;br /&gt;
		p.AutomaticTaxoboxOptions(frame) -- this emulates the automatic taxobox templates that feed the core&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- additional parameters needed by Template:Taxobox/core&lt;br /&gt;
	templateArgs[&amp;#039;edit link&amp;#039;]=&amp;quot;edit taxonomy&amp;quot;&lt;br /&gt;
	templateArgs[&amp;#039;colour&amp;#039;] = p.getTaxoboxColor(frame)&lt;br /&gt;
    templateArgs[&amp;#039;upright&amp;#039;] = templateArgs[&amp;#039;image_upright&amp;#039;] or 1   &lt;br /&gt;
    templateArgs[&amp;#039;upright2&amp;#039;] = templateArgs[&amp;#039;image2_upright&amp;#039;] or 1&lt;br /&gt;
    &lt;br /&gt;
    -- use Template:Taxobox/core&lt;br /&gt;
 	return tostring(frame:expandTemplate{ title = &amp;#039;taxobox/core&amp;#039;,  args = templateArgs   } ) &lt;br /&gt;
 	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ ##################### CORE FUNCTIONS ###################################&lt;br /&gt;
&lt;br /&gt;
       this core function emulates Template:Taxobox/core &lt;br /&gt;
       it is followed by functions handling the different type of entry&lt;br /&gt;
       MOVED to subpage Module:Sandbox/Jts1882/Biota_Infobox/core&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ################## AUTOMATIC TAXOBOX SYSTEM HANDLING ################################&lt;br /&gt;
------------------------------------------------------------------------------------------------&lt;br /&gt;
-- handle specific requirements of different options: auto, speciesbox etc&lt;br /&gt;
function p.AutomaticTaxoboxOptions(frame)&lt;br /&gt;
  &lt;br /&gt;
    --TODO replace genus with first word (genus) to strip parenthetic term&lt;br /&gt;
    -- done in speciesbox?&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    templateArgs[&amp;#039;display_taxa&amp;#039;]  = templateArgs[&amp;#039;display_parents&amp;#039;] or 1  -- note change of parameter name &lt;br /&gt;
&lt;br /&gt;
    local extinct = &amp;quot;&amp;quot;&lt;br /&gt;
 	if  templateArgs[&amp;#039;extinct&amp;#039;] or templateArgs[&amp;#039;status&amp;#039;] == &amp;quot;EX&amp;quot; then &lt;br /&gt;
		--extinct = &amp;quot;†&amp;quot;&lt;br /&gt;
		extinct = frame:expandTemplate{ title = &amp;#039;extinct&amp;#039; }  -- use template to get tooltip&lt;br /&gt;
		-- speciesbox also checks the genus taxonomy template for extinct parameter&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    ---------------------variables for SPECIESBOX, SUBSPECIESBOX and INFRASPECIESBOX---------------------&lt;br /&gt;
   	if info.auto == &amp;quot;hybridbox&amp;quot; then&lt;br /&gt;
   		&lt;br /&gt;
   		--templateArgs[&amp;#039;parent&amp;#039;] = templateArgs[&amp;#039;parent&amp;#039;] or templateArgs[&amp;#039;genus&amp;#039;] or templateArgs[&amp;#039;genus1&amp;#039;]&lt;br /&gt;
   		&lt;br /&gt;
   		local species1 = templateArgs[&amp;#039;species&amp;#039;] or templateArgs[&amp;#039;species1&amp;#039;] or templateArgs[&amp;#039;father&amp;#039;] or templateArgs[&amp;#039;father_species&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
   		local species2 = templateArgs[&amp;#039;species2&amp;#039;] or templateArgs[&amp;#039;mother&amp;#039;] or templateArgs[&amp;#039;mother_species&amp;#039;] or templateArgs[&amp;#039;species&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
   		local genus1   = templateArgs[&amp;#039;genus&amp;#039;] or templateArgs[&amp;#039;genus1&amp;#039;]  or templateArgs[&amp;#039;father_genus&amp;#039;]    -- TODO use page&lt;br /&gt;
   		local genus2   = templateArgs[&amp;#039;genus2&amp;#039;] or templateArgs[&amp;#039;mother_genus&amp;#039;]   or templateArgs[&amp;#039;genus&amp;#039;]&lt;br /&gt;
        local species3 = templateArgs[&amp;#039;species3&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
        local genus3   = templateArgs[&amp;#039;genus3&amp;#039;] or templateArgs[&amp;#039;genus&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        local subspecies1, subspecies2, subspecies3 = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
        --if (templateArgs[&amp;#039;subspecies1&amp;#039;] and templateArgs[&amp;#039;subspecies2&amp;#039;])&lt;br /&gt;
        if templateArgs[&amp;#039;subspecies1&amp;#039;] or templateArgs[&amp;#039;subspecies2&amp;#039;] &lt;br /&gt;
           or (templateArgs[&amp;#039;father_subspecies&amp;#039;] and templateArgs[&amp;#039;mother_subspecies&amp;#039;]) then&lt;br /&gt;
        	subspecies1 = &amp;quot; &amp;quot; .. ((templateArgs[&amp;#039;subspecies1&amp;#039;] or templateArgs[&amp;#039;father_subspecies&amp;#039;]) or &amp;quot;&amp;quot;)&lt;br /&gt;
        	subspecies2 = &amp;quot; &amp;quot; .. ((templateArgs[&amp;#039;subspecies2&amp;#039;] or templateArgs[&amp;#039;mother_subspecies&amp;#039;]) or &amp;quot;&amp;quot;)&lt;br /&gt;
        	if templateArgs[&amp;#039;subspecies3&amp;#039;] then&lt;br /&gt;
        		subspecies3 = &amp;quot; &amp;quot; .. templateArgs[&amp;#039;subspecies3&amp;#039;]&lt;br /&gt;
        		species3 = species1&lt;br /&gt;
        	end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
   		local link1    = templateArgs[&amp;#039;link1&amp;#039;] or templateArgs[&amp;#039;father_link&amp;#039;] or (genus1 .. &amp;quot; &amp;quot; .. species1 .. subspecies1)&lt;br /&gt;
   		local link2    = templateArgs[&amp;#039;link2&amp;#039;] or templateArgs[&amp;#039;mother_link&amp;#039;] or (genus2 .. &amp;quot; &amp;quot; .. species2 .. subspecies2)&lt;br /&gt;
        local link3    = templateArgs[&amp;#039;link3&amp;#039;] or (genus3 .. &amp;quot; &amp;quot; .. species3 .. subspecies3) &lt;br /&gt;
&lt;br /&gt;
   		if not templateArgs[&amp;#039;parent&amp;#039;] then templateArgs[&amp;#039;parent&amp;#039;] =  genus1 end&lt;br /&gt;
   		&lt;br /&gt;
        &lt;br /&gt;
        --TODO disambiguate genus pages -- not needed unless using page name&lt;br /&gt;
   		--genus1 = frame:expandTemplate{ title = &amp;#039;Speciesbox/getGenus&amp;#039; , args = {&amp;quot;&amp;quot;, genus1 } }&lt;br /&gt;
   	    --	genus2 = frame:expandTemplate{ title = &amp;#039;Speciesbox/getGenus&amp;#039; , args = {&amp;quot;&amp;quot;, genus2 } }&lt;br /&gt;
   		&lt;br /&gt;
   		if not templateArgs[&amp;#039;genus2&amp;#039;] and not templateArgs[&amp;#039;father_genus&amp;#039;] then &lt;br /&gt;
   			genus1 = string.sub(genus1,1,1) .. &amp;quot;.&amp;quot;   -- shorten generic names for intrageneric hybrids&lt;br /&gt;
   			genus2 = string.sub(genus2,1,1) .. &amp;quot;.&amp;quot;&lt;br /&gt;
   			genus3 = string.sub(genus3,1,1) .. &amp;quot;.&amp;quot;&lt;br /&gt;
   		end&lt;br /&gt;
   		&lt;br /&gt;
   		-- shorten species name if subspecies of same species&lt;br /&gt;
   		if subspecies1 ~= &amp;quot;&amp;quot; and not templateArgs[&amp;#039;species2&amp;#039;]  then&lt;br /&gt;
   			species1 = string.sub(species1,1,1) .. &amp;quot;.&amp;quot;   -- shorten specific epithet for intraspecific hybrids&lt;br /&gt;
   			species2 = string.sub(species2,1,1) .. &amp;quot;.&amp;quot;&lt;br /&gt;
   			if subspecies3 ~= &amp;quot;&amp;quot; then species3 = string.sub(species3,1,1) .. &amp;quot;.&amp;quot; end&lt;br /&gt;
   		end&lt;br /&gt;
&lt;br /&gt;
   		local maleSymbol, femaleSymbol = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
   		if templateArgs[&amp;#039;father&amp;#039;] or templateArgs[&amp;#039;father_genus&amp;#039;] or templateArgs[&amp;#039;father_species&amp;#039;] or templateArgs[&amp;#039;father_subspecies&amp;#039;] then maleSymbol = &amp;quot;♂&amp;quot; end&lt;br /&gt;
   		if templateArgs[&amp;#039;mother&amp;#039;] or templateArgs[&amp;#039;mother_genus&amp;#039;] or templateArgs[&amp;#039;mother_species&amp;#039;] or templateArgs[&amp;#039;mother_subspecies&amp;#039;] then femaleSymbol = &amp;quot;♀&amp;quot; end&lt;br /&gt;
   		&lt;br /&gt;
   		templateArgs[&amp;#039;hybrid&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;[[&amp;quot; .. link1 .. &amp;quot;|&amp;quot; .. genus1 .. &amp;quot; &amp;quot; .. species1 .. subspecies1 ..&amp;quot;]]&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. maleSymbol &lt;br /&gt;
   		                       .. &amp;quot; × &amp;quot;&lt;br /&gt;
   		                       .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;[[&amp;quot; .. link2 .. &amp;quot;|&amp;quot; .. genus2 .. &amp;quot; &amp;quot; .. species2 .. subspecies2 .. &amp;quot;]]&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. femaleSymbol&lt;br /&gt;
&lt;br /&gt;
   		if species3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
   			templateArgs[&amp;#039;hybrid&amp;#039;] = templateArgs[&amp;#039;hybrid&amp;#039;]   .. &amp;quot; × &amp;quot;&lt;br /&gt;
   		                       .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;[[&amp;quot; .. link3 .. &amp;quot;|&amp;quot; .. genus3 .. &amp;quot; &amp;quot; .. species3  .. subspecies3 .. &amp;quot;]]&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot; &lt;br /&gt;
   		end&lt;br /&gt;
        &lt;br /&gt;
     	--templateArgs[&amp;#039;hybrid species&amp;#039;] = templateArgs[&amp;#039;hybrid&amp;#039;]&lt;br /&gt;
     	if subspecies1 ~= &amp;quot;&amp;quot; and not templateArgs[&amp;#039;species2&amp;#039;] then&lt;br /&gt;
     	     templateArgs[&amp;#039;species&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;[[&amp;quot; .. templateArgs[&amp;#039;genus&amp;#039;] .. &amp;quot; &amp;quot; .. templateArgs[&amp;#039;species&amp;#039;] .. &amp;quot;|&amp;quot;&lt;br /&gt;
     	                                .. genus1 .. &amp;quot; &amp;quot; .. templateArgs[&amp;#039;species&amp;#039;] .. &amp;quot;]]&amp;#039;&amp;#039;&amp;quot; &lt;br /&gt;
     	else templateArgs[&amp;#039;species&amp;#039;] = nil&lt;br /&gt;
     	end&lt;br /&gt;
     	templateArgs[&amp;#039;offset&amp;#039;] = 1&lt;br /&gt;
	    &lt;br /&gt;
    -- ======================= setup for SPECIESBOX =============================&lt;br /&gt;
	&lt;br /&gt;
	elseif info.auto == &amp;quot;speciesbox&amp;quot; then                  -- code to emulate SPECIESBOX&lt;br /&gt;
        &lt;br /&gt;
        --[[ {{speciesbox}} gets genus and species from taxon, genus+species or page name&lt;br /&gt;
                1. uses &amp;#039;taxon&amp;#039; paramter ( given as binomial) if available&lt;br /&gt;
                2. otherwise uses &amp;#039;genus&amp;#039; and &amp;#039;species&amp;#039; parameters&lt;br /&gt;
                3. uses page name&lt;br /&gt;
             the genus is used for the &amp;#039;parent&amp;#039; taxon &lt;br /&gt;
            	unless the parent is supplied (e.g. for subgenus)&lt;br /&gt;
&lt;br /&gt;
          This logic is handled using {{Speciesbox/getGenus}},  {{Speciesbox/getSpecies}} and {{Speciesbox/trim}}&lt;br /&gt;
                code doing similar is in an older version of this page&lt;br /&gt;
        --]]&lt;br /&gt;
       &lt;br /&gt;
       local genus, species = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
       genus = frame:expandTemplate   { title = &amp;#039;Speciesbox/getGenus&amp;#039; ,                          -- get genus from taxon or genus parameter&lt;br /&gt;
       	                                args = { templateArgs[&amp;#039;taxon&amp;#039;], templateArgs[&amp;#039;genus&amp;#039;] }&lt;br /&gt;
       	                              }  &lt;br /&gt;
       genus = frame:expandTemplate   { title = &amp;#039;Speciesbox/trim&amp;#039; ,                              -- remove disambiguation&lt;br /&gt;
       	                                args = { genus }&lt;br /&gt;
       	                              }         &lt;br /&gt;
       species = frame:expandTemplate { title = &amp;#039;Speciesbox/getSpecies&amp;#039; ,                        -- get species from taxon or species parameter&lt;br /&gt;
       	                                args = { templateArgs[&amp;#039;taxon&amp;#039;], templateArgs[&amp;#039;species&amp;#039;] }&lt;br /&gt;
       	                              } &lt;br /&gt;
    &lt;br /&gt;
        if not templateArgs[&amp;#039;parent&amp;#039;] or templateArgs[&amp;#039;parent&amp;#039;] == &amp;quot;&amp;quot; then&lt;br /&gt;
        	templateArgs[&amp;#039;parent&amp;#039;] = templateArgs[&amp;#039;genus&amp;#039;]  or genus               -- set parent to genus (with disambiguation if given)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
	    templateArgs[&amp;#039;genus&amp;#039;] = genus                                               -- set to genus without diambiguation&lt;br /&gt;
	    templateArgs[&amp;#039;species&amp;#039;] = species  &lt;br /&gt;
	    templateArgs[&amp;#039;taxon&amp;#039;] = genus .. &amp;#039; &amp;#039; .. species  &lt;br /&gt;
&lt;br /&gt;
        templateArgs[&amp;#039;name&amp;#039;]  = frame:expandTemplate { title = &amp;#039;Speciesbox/name&amp;#039; ,   -- set the page name&lt;br /&gt;
        	                                           args = { templateArgs[&amp;#039;name&amp;#039;], &lt;br /&gt;
        	                                           	        templateArgs[&amp;#039;taxon&amp;#039;], templateArgs[&amp;#039;genus&amp;#039;], templateArgs[&amp;#039;species&amp;#039;],&lt;br /&gt;
        	                                                    --mw.title.getCurrentTitle().baseText,           -- =BASEPAGENAME (magic word for parent page)&lt;br /&gt;
        	                                                    frame:expandTemplate { title = &amp;#039;PAGENAMEBASE&amp;#039; }, -- page name without parenthetic term&lt;br /&gt;
        	                                                    templateArgs[&amp;#039;italic_title&amp;#039; or &amp;#039;yes&amp;#039;]  &lt;br /&gt;
        	          	                           	          } &lt;br /&gt;
        	                                          }&lt;br /&gt;
        	                                          &lt;br /&gt;
		templateArgs[&amp;#039;binomial&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. templateArgs[&amp;#039;taxon&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
		templateArgs[&amp;#039;binomial_authority&amp;#039;] = templateArgs[&amp;#039;authority&amp;#039;] or nil&lt;br /&gt;
				&lt;br /&gt;
    	-- set species_name e.g. Panthera leo -&amp;gt; P. leo&lt;br /&gt;
    	templateArgs[&amp;#039;species_name&amp;#039;] = extinct .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. string.sub(templateArgs[&amp;#039;genus&amp;#039;],1,1) .. &amp;#039;. &amp;#039; .. templateArgs[&amp;#039;species&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
        templateArgs[&amp;#039;species&amp;#039;]      = templateArgs[&amp;#039;species_name&amp;#039;]&lt;br /&gt;
        &lt;br /&gt;
        templateArgs[&amp;#039;display_taxa&amp;#039;]   = templateArgs[&amp;#039;display_taxa&amp;#039;] -1&lt;br /&gt;
        templateArgs[&amp;#039;offset&amp;#039;] = 1&lt;br /&gt;
	    if templateArgs[&amp;#039;subgenus&amp;#039;] and templateArgs[&amp;#039;subgenus&amp;#039;] ~= &amp;quot;&amp;quot;  then&lt;br /&gt;
	    	templateArgs[&amp;#039;offset&amp;#039;] =  templateArgs[&amp;#039;offset&amp;#039;] + 1&lt;br /&gt;
			templateArgs[&amp;#039;subgenus_authority&amp;#039;]              = templateArgs[&amp;#039;parent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
    	end&lt;br /&gt;
&lt;br /&gt;
        templateArgs[&amp;#039;taxon&amp;#039;] = nil -- For auto module&lt;br /&gt;
 &lt;br /&gt;
        &lt;br /&gt;
    -- =====================  set-up for SUBSPECIESBOX or INTRASPECIESBOX =================&lt;br /&gt;
	&lt;br /&gt;
	elseif info.auto == &amp;quot;subspeciesbox&amp;quot; or info.auto == &amp;quot;infraspeciesbox&amp;quot; then&lt;br /&gt;
	&lt;br /&gt;
	   --[[ From template description:&lt;br /&gt;
	          &amp;quot;The genus name, species name and subspecies name&amp;quot; &lt;br /&gt;
	             [or &amp;quot;genus name, specific epithet and infraspecific epithet&amp;quot;] &lt;br /&gt;
                 &amp;quot;&lt;br /&gt;
                 must be supplied separately: the combined taxon parameter cannot be used.&amp;quot;&amp;quot;&lt;br /&gt;
              &amp;quot;The genus name is then the entry into the taxonomic hierarchy.&amp;quot;&amp;quot;&lt;br /&gt;
              &lt;br /&gt;
		    The trinomial name is set from these parameters and the parameter ignored.&lt;br /&gt;
		   --NOTE no infraspeciebox is currently using trinomial parameter&lt;br /&gt;
        --]]&lt;br /&gt;
        &lt;br /&gt;
        -- Parameter checking. This could be here or moved to parameter checking function&lt;br /&gt;
        if templateArgs[&amp;#039;genus&amp;#039;] and templateArgs[&amp;#039;species&amp;#039;] and templateArgs[&amp;#039;subspecies&amp;#039;] then&lt;br /&gt;
        	-- valid parameters for subspecies (may have variety as well)&lt;br /&gt;
        elseif templateArgs[&amp;#039;genus&amp;#039;] and templateArgs[&amp;#039;species&amp;#039;] and templateArgs[&amp;#039;variety&amp;#039;] then&lt;br /&gt;
        	-- valid parameters for infraspecies (variety without subspecies)&lt;br /&gt;
        else&lt;br /&gt;
        	-- insufficient parameters&lt;br /&gt;
        	-- TODO add error message and return&lt;br /&gt;
        end&lt;br /&gt;
        local offset = 2  -- authority offset when subspecies OR variety &lt;br /&gt;
        &lt;br /&gt;
        --TODO strip genus of disambiguator (need to check this works)&lt;br /&gt;
        	local genus =mw.text.split( templateArgs[&amp;#039;genus&amp;#039;], &amp;quot; &amp;quot;, true )&lt;br /&gt;
	    	if genus[1] ~= &amp;quot;&amp;quot; then &lt;br /&gt;
	    		templateArgs[&amp;#039;genus&amp;#039;] = genus[1] &lt;br /&gt;
	    	end&lt;br /&gt;
        templateArgs[&amp;#039;parent&amp;#039;] = templateArgs[&amp;#039;genus&amp;#039;] -- genus must be supplied&lt;br /&gt;
        &lt;br /&gt;
        -- handle parent species name&lt;br /&gt;
        local fullName = templateArgs[&amp;#039;genus&amp;#039;] .. &amp;#039; &amp;#039; .. templateArgs[&amp;#039;species&amp;#039;]&lt;br /&gt;
        local shortName = string.sub(templateArgs[&amp;#039;genus&amp;#039;],1,1) .. &amp;#039;. &amp;#039; .. templateArgs[&amp;#039;species&amp;#039;]&lt;br /&gt;
 		if  templateArgs[&amp;#039;species_link&amp;#039;] then&lt;br /&gt;
 			templateArgs[&amp;#039;species_name&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;[[&amp;quot; ..templateArgs[&amp;#039;species_link&amp;#039;]  .. &amp;#039;|&amp;#039;.. shortName .. &amp;quot;]]&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
 		else&lt;br /&gt;
 			templateArgs[&amp;#039;species_name&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;[[&amp;quot; .. fullName  .. &amp;#039;|&amp;#039;.. shortName .. &amp;quot;]]&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
 		end&lt;br /&gt;
        if  templateArgs[&amp;#039;species_extinct&amp;#039;] then &lt;br /&gt;
        	extinct = frame:expandTemplate{ title = &amp;#039;extinct&amp;#039; }                    -- if parent species extinct, all children will be&lt;br /&gt;
        	templateArgs[&amp;#039;species_name&amp;#039;] = extinct .. templateArgs[&amp;#039;species_name&amp;#039;] &lt;br /&gt;
        end&lt;br /&gt;
        		&lt;br /&gt;
        -- handle subspecies name (if set; varieties may not have a subspecies)&lt;br /&gt;
        local separator = &amp;quot; &amp;quot;                               -- subspecies separator (default zoological)&lt;br /&gt;
	    local abbr_subspecies_name&lt;br /&gt;
	    &lt;br /&gt;
	    if templateArgs[&amp;#039;subspecies&amp;#039;] then     -- might not be subspecies if variety &lt;br /&gt;
        	if info.auto == &amp;quot;infraspeciesbox&amp;quot;   then &lt;br /&gt;
        		separator = &amp;quot; &amp;#039;&amp;#039;subsp.&amp;#039;&amp;#039; &amp;quot;   -- separator for plants etc&lt;br /&gt;
        	end&lt;br /&gt;
  			-- set abbreviated name, full name, and trinomial &lt;br /&gt;
			abbr_subspecies_name = string.sub(templateArgs[&amp;#039;genus&amp;#039;],1,1) .. &amp;#039;.&amp;amp;nbsp;&amp;#039; &lt;br /&gt;
			                          .. string.sub(templateArgs[&amp;#039;species&amp;#039;],1,1) .. &amp;#039;.&amp;#039; &lt;br /&gt;
			                          .. separator .. templateArgs[&amp;#039;subspecies&amp;#039;]&lt;br /&gt;
  			fullName = templateArgs[&amp;#039;genus&amp;#039;] .. &amp;#039; &amp;#039; .. templateArgs[&amp;#039;species&amp;#039;] .. separator .. templateArgs[&amp;#039;subspecies&amp;#039;] &lt;br /&gt;
 			templateArgs[&amp;#039;trinomial&amp;#039;] = extinct ..  &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. fullName .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
            --templateArgs[&amp;#039;subspecies_authority&amp;#039;] = templateArgs[&amp;#039;authority&amp;#039;]  -- replicates authoity in trinomial (unwanted?)&lt;br /&gt;
			&lt;br /&gt;
			templateArgs[&amp;#039;subspecies_name&amp;#039;]= extinct .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;  .. abbr_subspecies_name  .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot; &lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        -- handle population (of a species or subspecies)&lt;br /&gt;
        if templateArgs[&amp;#039;population&amp;#039;] then&lt;br /&gt;
        	if templateArgs[&amp;#039;subspecies&amp;#039;] then                  -- link subspecies name when using population&lt;br /&gt;
				if  templateArgs[&amp;#039;subspecies_link&amp;#039;] then &lt;br /&gt;
					templateArgs[&amp;#039;subspecies_name&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;[[&amp;quot; .. templateArgs[&amp;#039;subspecies_link&amp;#039;] .. &amp;quot;|&amp;quot; .. abbr_subspecies_name  .. &amp;quot;]]&amp;#039;&amp;#039;&amp;quot; &lt;br /&gt;
				else&lt;br /&gt;
					templateArgs[&amp;#039;subspecies_name&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;[[&amp;quot; .. fullName .. &amp;quot;|&amp;quot; .. abbr_subspecies_name  .. &amp;quot;]]&amp;#039;&amp;#039;&amp;quot; &lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if not templateArgs[&amp;#039;name&amp;#039;] then &lt;br /&gt;
				templateArgs[&amp;#039;name&amp;#039;] = templateArgs[&amp;#039;population&amp;#039;]   -- set taxobox name to population&lt;br /&gt;
			end &lt;br /&gt;
			if templateArgs[&amp;#039;population_rank_name&amp;#039;] and templateArgs[&amp;#039;population_rank_abbrev&amp;#039;]  then&lt;br /&gt;
				templateArgs[&amp;#039;trinomial&amp;#039;] = templateArgs[&amp;#039;trinomial&amp;#039;] .. &amp;#039; &amp;#039; .. templateArgs[&amp;#039;population_rank_abbrev&amp;#039;] &lt;br /&gt;
				                                                      .. &amp;#039; &amp;#039; .. templateArgs[&amp;#039;population&amp;#039;]&lt;br /&gt;
			else&lt;br /&gt;
				templateArgs[&amp;#039;trinomial&amp;#039;] = nil -- don&amp;#039;t show trinomial with population unless it has morpha or other suffix&lt;br /&gt;
    		end&lt;br /&gt;
			--templateArgs[&amp;#039;binomial&amp;#039;] = nil -- don&amp;#039;t show binomial with population (when population of species); nver set&lt;br /&gt;
			if templateArgs[&amp;#039;population_extinct&amp;#039;] == &amp;quot;yes&amp;quot; or templateArgs[&amp;#039;population_extinct&amp;#039;] == &amp;quot;true&amp;quot; then&lt;br /&gt;
				extinct = frame:expandTemplate{ title = &amp;#039;extinct&amp;#039; }  -- use template to get tooltip&lt;br /&gt;
			end&lt;br /&gt;
			templateArgs[&amp;#039;population&amp;#039;] = extinct .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. templateArgs[&amp;#039;population&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        -- handle variety &lt;br /&gt;
        if templateArgs[&amp;#039;variety&amp;#039;] or templateArgs[&amp;#039;varietas&amp;#039;] then  -- should now be aliased&lt;br /&gt;
            local vSeparator = &amp;quot; &amp;#039;&amp;#039;var.&amp;#039;&amp;#039; &amp;quot; &lt;br /&gt;
            --alias done? templateArgs[&amp;#039;variety&amp;#039;]= templateArgs[&amp;#039;variety&amp;#039;] or templateArgs[&amp;#039;varietas&amp;#039;] -- will use variety as parameter TODO alias this&lt;br /&gt;
			templateArgs[&amp;#039;variety_name&amp;#039;] = extinct .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. string.sub(templateArgs[&amp;#039;genus&amp;#039;],1,1) .. &amp;#039;.&amp;amp;nbsp;&amp;#039; .. string.sub(templateArgs[&amp;#039;species&amp;#039;],1,1) .. &amp;#039;.&amp;#039; .. vSeparator .. templateArgs[&amp;#039;variety&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
  			templateArgs[&amp;#039;trinomial&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. templateArgs[&amp;#039;genus&amp;#039;] .. &amp;#039; &amp;#039; .. templateArgs[&amp;#039;species&amp;#039;] .. vSeparator .. templateArgs[&amp;#039;variety&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
            --templateArgs[&amp;#039;variety_authority&amp;#039;] = templateArgs[&amp;#039;authority&amp;#039;] -- replicates authority in trinomial&lt;br /&gt;
    	    &lt;br /&gt;
    	    if templateArgs[&amp;#039;subspecies&amp;#039;] then 	-- subspecies needs to linked  [TODO: add subspecies_link]&lt;br /&gt;
	  			local redirectName = templateArgs[&amp;#039;genus&amp;#039;] .. &amp;#039; &amp;#039; .. templateArgs[&amp;#039;species&amp;#039;] .. &amp;quot; subsp. &amp;quot; .. templateArgs[&amp;#039;subspecies&amp;#039;] &lt;br /&gt;
				local shortName = &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. string.sub(templateArgs[&amp;#039;genus&amp;#039;],1,1) .. &amp;#039;.&amp;amp;nbsp;&amp;#039; .. string.sub(templateArgs[&amp;#039;species&amp;#039;],1,1) .. &amp;#039;.&amp;#039; .. separator .. templateArgs[&amp;#039;subspecies&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;quot; &lt;br /&gt;
				templateArgs[&amp;#039;subspecies_name&amp;#039;] =  &amp;quot;[[&amp;quot; .. redirectName .. &amp;#039;|&amp;#039; .. shortName .. &amp;quot;]]&amp;quot;&lt;br /&gt;
				offset = offset + 1 -- offset when susbpecies AND variety&lt;br /&gt;
                templateArgs[&amp;#039;subspecies_authority&amp;#039;] = templateArgs[&amp;#039;parent_authority&amp;#039;]&lt;br /&gt;
        	end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        -- handle customisable infraspecies ranks&lt;br /&gt;
        &lt;br /&gt;
        -- alias (TODO move to parameter section when parameter name conversion complete; see talk page )&lt;br /&gt;
        if  templateArgs[&amp;#039;infraspecies1_name&amp;#039;] or  templateArgs[&amp;#039;infraspecies_rank1&amp;#039;] then&lt;br /&gt;
        	 templateArgs[&amp;#039;infraspecies1_name1&amp;#039;] = templateArgs[&amp;#039;infraspecies1_name&amp;#039;] or  templateArgs[&amp;#039;infraspecies_rank1&amp;#039;]&lt;br /&gt;
        end&lt;br /&gt;
        if  templateArgs[&amp;#039;infraspecies2_name&amp;#039;] or  templateArgs[&amp;#039;infraspecies_rank2&amp;#039;] then&lt;br /&gt;
        	 templateArgs[&amp;#039;infraspecies2_name&amp;#039;] = templateArgs[&amp;#039;infraspecies2_name&amp;#039;] or  templateArgs[&amp;#039;infraspecies_rank2&amp;#039;]&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if templateArgs[&amp;#039;infraspecies_rank1&amp;#039;] then&lt;br /&gt;
            if templateArgs[&amp;#039;subspecies&amp;#039;] then -- link subspecies&lt;br /&gt;
        	   --templateArgs[&amp;#039;subspecies_name&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;[[&amp;quot; .. fullName:gsub(&amp;quot;%&amp;#039;*%&amp;lt;%/?small%&amp;gt;%&amp;#039;*&amp;quot;,&amp;quot;&amp;quot;) .. &amp;quot;|&amp;quot; .. abbr_subspecies_name  .. &amp;quot;]]&amp;#039;&amp;#039;&amp;quot; &lt;br /&gt;
        		templateArgs[&amp;#039;subspecies_name&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;[[&amp;quot; .. fullName .. &amp;quot;|&amp;quot; .. abbr_subspecies_name  .. &amp;quot;]]&amp;#039;&amp;#039;&amp;quot; &lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            local binomial = &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. templateArgs[&amp;#039;genus&amp;#039;] .. &amp;#039; &amp;#039; .. templateArgs[&amp;#039;species&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
            local abbrSpeciesName = string.sub(templateArgs[&amp;#039;genus&amp;#039;],1,1) .. &amp;#039;.&amp;amp;nbsp;&amp;#039; .. string.sub(templateArgs[&amp;#039;species&amp;#039;],1,1) .. &amp;#039;.&amp;amp;nbsp;&amp;#039; &lt;br /&gt;
            abbrSpeciesName = &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. abbrSpeciesName .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;  -- italicise&lt;br /&gt;
            if templateArgs[&amp;#039;infraspecies_rank2&amp;#039;] then&lt;br /&gt;
	           local isrSeparator = &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
	           if templateArgs[&amp;#039;infraspecies_rank2_abbrev&amp;#039;] then&lt;br /&gt;
	             isrSeparator = &amp;quot;&amp;amp;nbsp;&amp;quot; ..  templateArgs[&amp;#039;infraspecies_rank2_abbrev&amp;#039;] .. &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
	           end&lt;br /&gt;
	           templateArgs[&amp;#039;trinomial&amp;#039;] = binomial  .. isrSeparator .. templateArgs[&amp;#039;infraspecies_rank2&amp;#039;] &lt;br /&gt;
	           templateArgs[&amp;#039;infraspecies_rank2&amp;#039;]  = abbrSpeciesName .. isrSeparator ..  templateArgs[&amp;#039;infraspecies_rank2&amp;#039;] &lt;br /&gt;
	           templateArgs[&amp;#039;infraspecies_rank2&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. templateArgs[&amp;#039;infraspecies_rank2&amp;#039;]  .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; -- bold infraspecific name&lt;br /&gt;
	        else&lt;br /&gt;
	           local isrSeparator = &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
	           if templateArgs[&amp;#039;infraspecies_rank1_abbrev&amp;#039;] then&lt;br /&gt;
	             isrSeparator = &amp;quot;&amp;amp;nbsp;&amp;quot; ..  templateArgs[&amp;#039;infraspecies_rank1_abbrev&amp;#039;] .. &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
	           end&lt;br /&gt;
	           templateArgs[&amp;#039;trinomial&amp;#039;] =  binomial .. isrSeparator .. templateArgs[&amp;#039;infraspecies_rank1&amp;#039;] &lt;br /&gt;
	           templateArgs[&amp;#039;infraspecies_rank1&amp;#039;]  = abbrSpeciesName .. isrSeparator ..  templateArgs[&amp;#039;infraspecies_rank1&amp;#039;] &lt;br /&gt;
	           templateArgs[&amp;#039;infraspecies_rank1&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. templateArgs[&amp;#039;infraspecies_rank1&amp;#039;]  .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; -- bold first infraspecific name&lt;br /&gt;
	        end&lt;br /&gt;
        end&lt;br /&gt;
       &lt;br /&gt;
        --TODO what else do subspeciesbox and infraspeciesbox cover?)&lt;br /&gt;
&lt;br /&gt;
       --[[ code from templates&lt;br /&gt;
            both:            |trinomial_authority = {{{authority|{{{trinomial authority|{{{trinomial_authority|}}} }}} }}}&lt;br /&gt;
            infraspeciesbox: |species_authority = {{{parent_authority|{{{parent authority|{{{binomial authority|{{{binomial_authority|}}}}}}}}}}}}&lt;br /&gt;
            subspeciesbox: | species_authority = {{{parent authority|{{{binomial authority|{{{binomial_authority|}}}}}}}}}&lt;br /&gt;
              note: subspeciesbox doesn&amp;#039;t recognise patent_authority with underscore&lt;br /&gt;
          monthly reports on subspeciesbox and infraspeciesbox&lt;br /&gt;
              no uses of parent_authority, binomial_authority or trinomial authority&lt;br /&gt;
              no uses of grandparent, greatgrandparent etc authorites&lt;br /&gt;
        ]]&lt;br /&gt;
 		templateArgs[&amp;#039;trinomial_authority&amp;#039;] = templateArgs[&amp;#039;authority&amp;#039;] or nil&lt;br /&gt;
&lt;br /&gt;
        if not templateArgs[&amp;#039;name&amp;#039;] or templateArgs[&amp;#039;name&amp;#039;] == &amp;quot;&amp;quot; then -- if page name not set&lt;br /&gt;
        	templateArgs[&amp;#039;name&amp;#039;] = templateArgs[&amp;#039;trinomial&amp;#039;]&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        -- these are used by manual taxobox to complete the taxonomy table&lt;br /&gt;
        templateArgs[&amp;#039;species&amp;#039;] = templateArgs[&amp;#039;species_name&amp;#039;]&lt;br /&gt;
        templateArgs[&amp;#039;subspecies&amp;#039;] = templateArgs[&amp;#039;subspecies_name&amp;#039;]&lt;br /&gt;
		templateArgs[&amp;#039;variety&amp;#039;] =templateArgs[&amp;#039;variety_name&amp;#039;]&lt;br /&gt;
        &lt;br /&gt;
        --QUESTION what happens to parent taxa when subspecies and variety? &lt;br /&gt;
        -- set species and subgenus authorities&lt;br /&gt;
	    if templateArgs[&amp;#039;subgenus&amp;#039;] then &lt;br /&gt;
	    	offset = offset + 1&lt;br /&gt;
		    if offset == 4  then    -- when subgenus, species, subspecies and variety&lt;br /&gt;
		    	templateArgs[&amp;#039;subgenus_authority&amp;#039;]  = templateArgs[&amp;#039;subgenus_authority&amp;#039;] or templateArgs[&amp;#039;greatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
		    	templateArgs[&amp;#039;species_authority&amp;#039;]   = templateArgs[&amp;#039;grandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
	        elseif offset == 3  then -- when subgenus, species, (subspecies OR variety)&lt;br /&gt;
		    	templateArgs[&amp;#039;subgenus_authority&amp;#039;]  = 	templateArgs[&amp;#039;subgenus_authority&amp;#039;] or templateArgs[&amp;#039;grandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
		    	templateArgs[&amp;#039;species_authority&amp;#039;]   = templateArgs[&amp;#039;parent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
		    end&lt;br /&gt;
		else -- only need to set species authority or subspecues (if also variety)&lt;br /&gt;
		    if offset == 3 then    -- species, subspecies and variety&lt;br /&gt;
		    	templateArgs[&amp;#039;species_authority&amp;#039;]   = templateArgs[&amp;#039;grandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
		    	templateArgs[&amp;#039;subspecies_authority&amp;#039;]   = templateArgs[&amp;#039;parent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
		    elseif offset == 2 then  -- species, (subspecies or variety)&lt;br /&gt;
		        templateArgs[&amp;#039;species_authority&amp;#039;]   = templateArgs[&amp;#039;parent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
		    end	    &lt;br /&gt;
		end&lt;br /&gt;
       &lt;br /&gt;
        templateArgs[&amp;#039;display_taxa&amp;#039;]   = (templateArgs[&amp;#039;display_taxa&amp;#039;] or 1) -2&lt;br /&gt;
        templateArgs[&amp;#039;offset&amp;#039;] = offset&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	    -- need to set subgenus_authority, species_authority, subspecies_authority and variety_authority&lt;br /&gt;
        &lt;br /&gt;
	    --[[shift authorities for subspeciesbox (two steps or three if subgenus set)&lt;br /&gt;
	    if templateArgs[&amp;#039;subgenus&amp;#039;] and templateArgs[&amp;#039;subgenus&amp;#039;] ~= &amp;quot;&amp;quot;  then&lt;br /&gt;
			templateArgs[&amp;#039;subgenus_authority&amp;#039;]              = templateArgs[&amp;#039;grandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;authority&amp;#039;]                       = templateArgs[&amp;#039;greatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;parent_authority&amp;#039;]                = templateArgs[&amp;#039;greatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;grandparent_authority&amp;#039;]           = templateArgs[&amp;#039;greatgreatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;greatgrandparent_authority&amp;#039;]      = templateArgs[&amp;#039;greatgreatgreatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;greatgreatgrandparent_authority&amp;#039;] = templateArgs[&amp;#039;greatgreatgreatgreatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			templateArgs[&amp;#039;authority&amp;#039;]                       = templateArgs[&amp;#039;grandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;parent_authority&amp;#039;]                = templateArgs[&amp;#039;greatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;grandparent_authority&amp;#039;]           = templateArgs[&amp;#039;greatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;greatgrandparent_authority&amp;#039;]      = templateArgs[&amp;#039;greatgreatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;greatgreatgrandparent_authority&amp;#039;] = templateArgs[&amp;#039;greatgreatgreatgreatgrandparent_authority&amp;#039;]	 or &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		]]&lt;br /&gt;
	&lt;br /&gt;
	-- ========================= setup for AUTOMATIC TAXOBOX ================================&lt;br /&gt;
	        -- CHECK authomatic taxobox pagename overrides taxon (e.g. Tortrix? destructus) for header&lt;br /&gt;
        --         it does but no italics in header for Tortrix? destructus&lt;br /&gt;
&lt;br /&gt;
    --elseif info.auto == &amp;quot;automatictaxobox&amp;quot; then&lt;br /&gt;
	&lt;br /&gt;
	elseif info.auto == &amp;quot;virus&amp;quot; or info.auto == &amp;quot;virusbox&amp;quot; then&lt;br /&gt;
			templateArgs[&amp;#039;virus&amp;#039;] = &amp;quot;yes&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;color_as&amp;#039;] = &amp;quot;Virus&amp;quot;&lt;br /&gt;
			if not templateArgs[&amp;#039;parent&amp;#039;] then&lt;br /&gt;
				if templateArgs[&amp;#039;taxon&amp;#039;] then&lt;br /&gt;
			        templateArgs[&amp;#039;parent&amp;#039;] = templateArgs[&amp;#039;taxon&amp;#039;]  &lt;br /&gt;
			    elseif templateArgs[&amp;#039;species&amp;#039;] then &lt;br /&gt;
			    	templateArgs[&amp;#039;parent&amp;#039;] = templateArgs[&amp;#039;species&amp;#039;] &lt;br /&gt;
			    	templateArgs[&amp;#039;species&amp;#039;] = nil&lt;br /&gt;
			    else&lt;br /&gt;
			    	templateArgs[&amp;#039;parent&amp;#039;] = tostring( mw.title.getCurrentTitle()) or &amp;quot;&amp;quot;&lt;br /&gt;
			    end&lt;br /&gt;
			else&lt;br /&gt;
				templateArgs[&amp;#039;link_parent&amp;#039;] = &amp;quot;yes&amp;quot;            -- if parent given, we want to link it&lt;br /&gt;
			end&lt;br /&gt;
		    &lt;br /&gt;
	else &lt;br /&gt;
&lt;br /&gt;
    	-- &amp;quot;the automated taxobox first looks for the taxonomy template that matches the supplied |taxon= parameter &amp;quot;&lt;br /&gt;
    	--       &amp;quot;(or, if none is supplied, the article&amp;#039;s title, ignoring any parenthetical expressions). &amp;quot;&lt;br /&gt;
    	if not templateArgs[&amp;#039;taxon&amp;#039;] or  templateArgs[&amp;#039;taxon&amp;#039;] == &amp;quot;&amp;quot; then&lt;br /&gt;
    		--templateArgs[&amp;#039;taxon&amp;#039;] = templateArgs[&amp;#039;name&amp;#039;] or tostring( mw.title.getCurrentTitle())&lt;br /&gt;
    		templateArgs[&amp;#039;taxon&amp;#039;] = tostring( mw.title.getCurrentTitle()) or &amp;quot;&amp;quot;&lt;br /&gt;
    		--TODO strip name of parenthetical terms off page title&lt;br /&gt;
    		if templateArgs[&amp;#039;taxon&amp;#039;] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
    			--TODO error message and exit&lt;br /&gt;
    		end&lt;br /&gt;
    	end		&lt;br /&gt;
    	if templateArgs[&amp;#039;parent&amp;#039;] then&lt;br /&gt;
    		templateArgs[&amp;#039;link_parent&amp;#039;] = &amp;quot;yes&amp;quot;              -- if parent given, we want to link it&lt;br /&gt;
    	else&lt;br /&gt;
  		   templateArgs[&amp;#039;parent&amp;#039;] = templateArgs[&amp;#039;taxon&amp;#039;]   -- otherwise set parent&lt;br /&gt;
  		   templateArgs[&amp;#039;link_parent&amp;#039;] = &amp;quot;yes&amp;quot;              -- we still want to link it? VERIFY&lt;br /&gt;
  		end&lt;br /&gt;
  		--TODO set name if parameter no supplies&lt;br /&gt;
  		&lt;br /&gt;
  		--[[ TODO if no taxonomy template, then call setup taxonomy template &lt;br /&gt;
  		   {{#ifexist:Template:Taxonomy/{{{taxon|&amp;lt;includeonly&amp;gt;{{PAGENAME}}&lt;br /&gt;
  		   {{Automatic taxobox/floating intro|taxon={{{taxon|{{PAGENAME}}}}} }}&lt;br /&gt;
  		]]&lt;br /&gt;
	&lt;br /&gt;
	end	-- end special handling for speciesbox, subspeciesbox, and automatic taxobox&lt;br /&gt;
	&lt;br /&gt;
	-- check taxonomy templates for automatic taxobox system&lt;br /&gt;
	--{{#ifexist:Template:Taxonomy/{{{taxon|&amp;lt;includeonly&amp;gt;{{PAGENAME}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Acacia&amp;lt;/noinclude&amp;gt;}}}&lt;br /&gt;
	--       |&amp;lt;noinclude&amp;gt;&amp;lt;!--do nothing if it exists--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
	--       |{{Automatic taxobox/floating intro|taxon={{{taxon|{{PAGENAME}}}}} }}&lt;br /&gt;
--&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------&lt;br /&gt;
function p.templateStyle( frame, src )&lt;br /&gt;
   return frame:extensionTag( &amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, { src = src } );&lt;br /&gt;
   &lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------&lt;br /&gt;
function p.testTables(frame)&lt;br /&gt;
	if 1==1 then return end  -- disable&lt;br /&gt;
	local root = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;wikitable&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local row = root:tag(&amp;#039;tr&amp;#039;)                -- add row using lua library&lt;br /&gt;
	local cell = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
	cell:wikitext(&amp;#039;row A:&amp;#039;)&lt;br /&gt;
	cell = row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;content A&amp;#039;)  &lt;br /&gt;
&lt;br /&gt;
	row = root:tag(&amp;#039;tr&amp;#039;)                      -- add row using lua library &lt;br /&gt;
	cell = row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;row B:&amp;#039;)&lt;br /&gt;
	cell = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
	          :wikitext(&amp;#039;\n{|\n|-\n|P\n|Q\n|}&amp;#039;) --but include a wikitxt table in one cell&lt;br /&gt;
	         -- :done()&lt;br /&gt;
&lt;br /&gt;
   -- row:done()&lt;br /&gt;
    --root=mw.html:allDone()&lt;br /&gt;
    root:wikitext(&amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;a&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;b&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;) -- add row to root using html &lt;br /&gt;
    root:wikitext(&amp;#039;\n|-\n|X\n|Y\n&amp;#039;)              -- add row to root using wikitext (FAILS) &lt;br /&gt;
    &lt;br /&gt;
    root:wikitext(&amp;#039;\r|-\r|I\r|J\r&amp;#039;)              -- FAIL output |- |X |Y &lt;br /&gt;
	&lt;br /&gt;
	root:wikitext(frame:preprocess(&amp;#039;\n|-\n|U\n|V\n&amp;#039;)) -- FAIL output |- |U |V &lt;br /&gt;
	&lt;br /&gt;
	root:wikitext(&amp;#039;&amp;lt;tr&amp;gt;\n|M\n|N\n&amp;lt;/tr&amp;gt;&amp;#039;)    &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	row=root:tag(&amp;#039;tr&amp;#039;):node(&amp;#039;&amp;lt;td&amp;gt;c&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;d&amp;lt;/td&amp;gt;&amp;#039;)    -- adds row successfully&lt;br /&gt;
	row=root:tag(&amp;#039;tr&amp;#039;):node(&amp;#039;\n|Xc\n|Xd\n&amp;#039;)    -- fails to adds row&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	row = root:tag(&amp;#039;tr&amp;#039;)                       -- add another row using lua library&lt;br /&gt;
	cell = row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;row C:&amp;#039;)&lt;br /&gt;
	cell = row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;content C&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	root:node(&amp;#039;\n{|\n|-\n|Xx\n|Yx\n|}\n&amp;#039;)    -- adds new table after&lt;br /&gt;
&lt;br /&gt;
	--frame:preprocess&lt;br /&gt;
	return 	 tostring(root)&lt;br /&gt;
&lt;br /&gt;
--[[ CONCLUSION: cannot mix wikitext freely in the node structure&lt;br /&gt;
           A complete wikitext table can be included in a cell (e.g. used for automatic taxonomy now)&lt;br /&gt;
           An alternative is to use wikitext for the whole taxobox table&lt;br /&gt;
]]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- --------------------------- TEST AUTO TAXONOMY FUNCTIONS -----------------------------&lt;br /&gt;
function p.test(frame)&lt;br /&gt;
	&lt;br /&gt;
    local a = require(&amp;quot;Module:Sandbox/Jts1882/Biota Infobox/auto&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	--local taxonTable = a.loadTaxonomyTable(frame) now done in showTaxonomyTable&lt;br /&gt;
	&lt;br /&gt;
    return a.showTaxonomyTable(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- All modules end by returning the variable containing its functions to Wikipedia.&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>&gt;Shonebrooks</name></author>
	</entry>
</feed>