<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FJts1882%2FBiota_infobox</id>
	<title>Module:Sandbox/Jts1882/Biota infobox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FJts1882%2FBiota_infobox"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Jts1882/Biota_infobox&amp;action=history"/>
	<updated>2026-04-21T03:42:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Jts1882/Biota_infobox&amp;diff=145637&amp;oldid=prev</id>
		<title>imported&gt;Legoktm: Replace Module:No globals with require( &quot;strict&quot; )</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Jts1882/Biota_infobox&amp;diff=145637&amp;oldid=prev"/>
		<updated>2022-10-23T21:13:04Z</updated>

		<summary type="html">&lt;p&gt;Replace &lt;a href=&quot;/research/Module:No_globals&quot; title=&quot;Module:No globals&quot;&gt;Module:No globals&lt;/a&gt; with require( &amp;quot;strict&amp;quot; )&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  = true -- 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:Sandbox/Jts1882/Biota infobox/param&amp;#039; ) &lt;br /&gt;
local core = require( &amp;#039;Module:Sandbox/Jts1882/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;]  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;] &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;] &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&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;
            	else use genus (from taxon or genus parameter or page name)&lt;br /&gt;
            	&lt;br /&gt;
           {{Speciesbox}} now using {{Speciesbox/getGenus}} and  {Speciesbox/getSpecies}}&lt;br /&gt;
                code doing similar is commented out below&lt;br /&gt;
           &lt;br /&gt;
           TODO use {{{{Speciesbox/name}}&lt;br /&gt;
        --]]&lt;br /&gt;
       local genus, species = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
       &lt;br /&gt;
       genus = frame:expandTemplate{ title = &amp;#039;Speciesbox/getGenus&amp;#039; , args = {templateArgs[&amp;#039;taxon&amp;#039;], templateArgs[&amp;#039;genus&amp;#039;]} }&lt;br /&gt;
       species = frame:expandTemplate{ title = &amp;#039;Speciesbox/getSpecies&amp;#039; , args = {templateArgs[&amp;#039;taxon&amp;#039;], templateArgs[&amp;#039;genus&amp;#039;]} }&lt;br /&gt;
       &lt;br /&gt;
		if templateArgs[&amp;#039;taxon&amp;#039;] then&lt;br /&gt;
           &lt;br /&gt;
           -- following line disableas using getGenus/getSpecies templates	       &lt;br /&gt;
           -- genus, species = string.match(templateArgs[&amp;#039;taxon&amp;#039;], &amp;quot;(%S+)%s(%S+)&amp;quot;) -- %S: All characters not in %s&lt;br /&gt;
	       &lt;br /&gt;
	       templateArgs[&amp;#039;genus&amp;#039;] = genus                 &lt;br /&gt;
	       templateArgs[&amp;#039;species&amp;#039;] = species            &lt;br /&gt;
	   &lt;br /&gt;
	    elseif templateArgs[&amp;#039;genus&amp;#039;] and templateArgs[&amp;#039;species&amp;#039;] then&lt;br /&gt;
	    	&lt;br /&gt;
	    	--[[strip off (disambiguator) to handle multi-kingdom genus e.g.| genus = Acanthocarpus (plant)&lt;br /&gt;
	    	local genusParts =mw.text.split( templateArgs[&amp;#039;genus&amp;#039;], &amp;quot; &amp;quot;, true )     -- string.match( s, &amp;#039;^%a*&amp;#039;&amp;#039;, 1 )&lt;br /&gt;
	    	                                    &lt;br /&gt;
	    	if genusParts[1] ~= &amp;quot;&amp;quot; then &lt;br /&gt;
	    		--templateArgs[&amp;#039;parent&amp;#039;]=templateArgs[&amp;#039;genus&amp;#039;]  -- set parent (NO, parent should override)&lt;br /&gt;
	    		genus = genusParts[1] &lt;br /&gt;
	    	end&lt;br /&gt;
	    	now handled by getGenus/getSpecies templates --]]&lt;br /&gt;
	    	&lt;br /&gt;
	    	templateArgs[&amp;#039;taxon&amp;#039;] = genus .. &amp;#039; &amp;#039; .. templateArgs[&amp;#039;species&amp;#039;]&lt;br /&gt;
	&lt;br /&gt;
	    else&lt;br /&gt;
	    	-- TODO no valid taxon yet; use page name&lt;br /&gt;
	    	-- use first word of pagename - handled by {{Speciesbox/getGenus}}&lt;br /&gt;
	    end&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;]       -- set parent to genus if not supplied&lt;br /&gt;
        end&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;] = &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;
        end    ]]    	&lt;br /&gt;
        --TODO use {{Speciesbox/name}}&lt;br /&gt;
        templateArgs[&amp;#039;name&amp;#039;]  = frame:expandTemplate{ title = &amp;#039;Speciesbox/name&amp;#039; , &lt;br /&gt;
        	                           args = { templateArgs[&amp;#039;name&amp;#039;], templateArgs[&amp;#039;taxon&amp;#039;], &lt;br /&gt;
        	                                    templateArgs[&amp;#039;genus&amp;#039;], templateArgs[&amp;#039;species&amp;#039;],&lt;br /&gt;
        	                                    mw.title.getCurrentTitle().baseText,&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;
&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
		-- set binomial : the speciesbox template seems to use genus and species before taxon name&lt;br /&gt;
		-- &amp;quot;| binomial = &amp;#039;&amp;#039;{{Str letter/trim|{{{genus|{{{taxon|&amp;lt;includeonly&amp;gt;{{PAGENAME}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Acacia&amp;lt;/noinclude&amp;gt;}}}}}}}} {{{species|{{remove first word|{{{taxon|&amp;lt;includeonly&amp;gt;{{PAGENAMEBASE}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Acacia aemula&amp;lt;/noinclude&amp;gt;}}}}}}}}&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
		-- documentation suggest taxon, which is followed here&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;
&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;
	    --templateArgs[&amp;#039;species_authority&amp;#039;]   = templateArgs[&amp;#039;authority&amp;#039;] or &amp;quot;&amp;quot; -- don&amp;#039;t show species_authority as duplicates binomial authority&lt;br /&gt;
	    &lt;br /&gt;
	    &lt;br /&gt;
	    --[[shift authorities for speciesbox (two steps 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;parent_authority&amp;#039;] or &amp;quot;&amp;quot;&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;
		else                                                                &lt;br /&gt;
			-- note: must set to &amp;quot;&amp;quot; if &amp;#039;parent_authority&amp;#039;s don&amp;#039;t exist, otherwise the value of &amp;#039;authority&amp;#039; is unchanged&lt;br /&gt;
			templateArgs[&amp;#039;authority&amp;#039;]                       = templateArgs[&amp;#039;parent_authority&amp;#039;] or &amp;quot;&amp;quot;  &lt;br /&gt;
			templateArgs[&amp;#039;parent_authority&amp;#039;]                = templateArgs[&amp;#039;grandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;grandparent_authority&amp;#039;]           = templateArgs[&amp;#039;greatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;greatgrandparent_authority&amp;#039;]      = templateArgs[&amp;#039;greatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
			templateArgs[&amp;#039;greatgreatgrandparent_authority&amp;#039;] = templateArgs[&amp;#039;greatgreatgreatgrandparent_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 subpecies 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;
        local fullName = templateArgs[&amp;#039;genus&amp;#039;] .. &amp;#039; &amp;#039; .. templateArgs[&amp;#039;species&amp;#039;]&lt;br /&gt;
 		templateArgs[&amp;#039;species_name&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;[[&amp;quot; .. fullName  .. &amp;#039;|&amp;#039;.. 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;quot;&lt;br /&gt;
&lt;br /&gt;
        -- if subspecies is set (could be with or without variety)&lt;br /&gt;
        local separator = &amp;quot; &amp;quot;                               -- subspecies separator (default zoological)&lt;br /&gt;
	    if templateArgs[&amp;#039;subspecies&amp;#039;] then                  -- might not be if variety&lt;br /&gt;
        	if info.auto == &amp;quot;infraspeciesbox&amp;quot;   then separator = &amp;quot; &amp;#039;&amp;#039;&amp;lt;small&amp;gt;subsp.&amp;lt;/small&amp;gt;&amp;#039;&amp;#039; &amp;quot;   end&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; .. 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;#039;&amp;#039;&amp;#039;&amp;quot;&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;] = &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;
        end&lt;br /&gt;
        &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;&amp;lt;small&amp;gt;var.&amp;lt;/small&amp;gt;&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 instead of bold &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;
        --TODO what else do subspeciesbix 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;
  		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 systtem&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>imported&gt;Legoktm</name></author>
	</entry>
</feed>