<?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%2Fauto</id>
	<title>Module:Sandbox/Jts1882/Biota infobox/auto - 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%2Fauto"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Jts1882/Biota_infobox/auto&amp;action=history"/>
	<updated>2026-05-11T16:29:42Z</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/auto&amp;diff=145639&amp;oldid=prev</id>
		<title>imported&gt;Jts1882: Jts1882 moved page Module:Sandbox/Jts1882/Biota Infobox/auto to Module:Sandbox/Jts1882/Biota infobox/auto without leaving a redirect: case consistency in naming</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Jts1882/Biota_infobox/auto&amp;diff=145639&amp;oldid=prev"/>
		<updated>2019-02-05T16:07:15Z</updated>

		<summary type="html">&lt;p&gt;Jts1882 moved page &lt;a href=&quot;/index.php?title=Module:Sandbox/Jts1882/Biota_Infobox/auto&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Module:Sandbox/Jts1882/Biota Infobox/auto (page does not exist)&quot;&gt;Module:Sandbox/Jts1882/Biota Infobox/auto&lt;/a&gt; to &lt;a href=&quot;/research/Module:Sandbox/Jts1882/Biota_infobox/auto&quot; title=&quot;Module:Sandbox/Jts1882/Biota infobox/auto&quot;&gt;Module:Sandbox/Jts1882/Biota infobox/auto&lt;/a&gt; without leaving a redirect: case consistency in naming&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {} -- &lt;br /&gt;
local g = {} -- these are variables with global scope in this sub-module&lt;br /&gt;
g.info = {}&lt;br /&gt;
&lt;br /&gt;
--[[ testing function to show automatic taxonomy within a table ]]&lt;br /&gt;
function p.showTaxonomyTable(frame)&lt;br /&gt;
  &lt;br /&gt;
  g.templateArgs = {}&lt;br /&gt;
  g.info.auto= false &lt;br /&gt;
  &lt;br /&gt;
  g.taxonTable = p.loadTaxonomyTable(frame)&lt;br /&gt;
  &lt;br /&gt;
  local output = &amp;#039;\n{| class=&amp;quot;wikitable&amp;quot; \n|- style=&amp;quot;vertical-align:top;&amp;quot; &amp;#039;&lt;br /&gt;
  --output = output .. &amp;#039;\n! Rank !! Taxon \n|-&amp;#039;  -- oldversion starting new row &lt;br /&gt;
  output = output .. &amp;#039;\n! Rank !! Taxon&amp;#039;         -- don&amp;#039;t start a new row here&lt;br /&gt;
  &lt;br /&gt;
  g.htmlTable = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
               :addClass(&amp;#039;infobox&amp;#039;):addClass(&amp;#039;biota&amp;#039;)&lt;br /&gt;
               :cssText(&amp;quot;text-align: left; width: 200px; font-size: 100%&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  output = output .. p.taxoboxList(frame)&lt;br /&gt;
  output = output .. &amp;#039;\n|}&amp;#039;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  return tostring(g.htmlTable) .. output&lt;br /&gt;
  --return &amp;#039;\n&amp;#039; ..p.showTaxonomyHierarchyRaw(frame, g.taxonTable) --output&lt;br /&gt;
  --return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ function to add rows for an automatic taxonomy to an taxobox-style infobox &lt;br /&gt;
     -- called from parent to this submodule&lt;br /&gt;
     -- uses a modification of p.taxoboxList() form Module:Autotaxobox&lt;br /&gt;
     -- uses a function to emulate &lt;br /&gt;
]]&lt;br /&gt;
function p.getTaxonomyTableRows(frame, htmlTable, templateArgs, info)&lt;br /&gt;
	g.htmlTable = htmlTable&lt;br /&gt;
	g.templateArgs = templateArgs&lt;br /&gt;
	g.info = info&lt;br /&gt;
	g.taxonTable = p.loadTaxonomyTable(frame)&lt;br /&gt;
	return p.taxoboxList(frame)&lt;br /&gt;
end&lt;br /&gt;
--[[ testing function to output the heirarchy table from the automatic taxonomy as a wikitable&lt;br /&gt;
]]&lt;br /&gt;
function p.showTaxonomyHierarchyRaw(frame, taxonTable)&lt;br /&gt;
	local output = &amp;#039;{| class=&amp;quot;wikitable sortable&amp;quot; &amp;#039;&lt;br /&gt;
	for k,v in pairs(taxonTable[1]) do&lt;br /&gt;
		output = output .. &amp;#039;\n!&amp;#039; .. k&lt;br /&gt;
	end&lt;br /&gt;
	for i=1, #taxonTable, 1 do&lt;br /&gt;
		output = output .. &amp;#039;\n|-&amp;#039; &lt;br /&gt;
		for k,v in pairs(taxonTable[i]) do&lt;br /&gt;
			output = output .. &amp;#039;\n|&amp;#039; .. v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	output = output .. &amp;#039;\n|}&amp;#039;&lt;br /&gt;
	--return mw.dumpObject(taxonTable)&lt;br /&gt;
	return output&lt;br /&gt;
end&lt;br /&gt;
--[[ function p.loadTaxonomyTable(frame) - loads a 2-D table of taxon information from automatic taxonomy system&lt;br /&gt;
     each row is the informaiton for a taxon &lt;br /&gt;
        - this obtained useing Template:Taxonomy/TAXON with argument [&amp;#039;machine code&amp;#039;] = &amp;quot;all&amp;quot;&lt;br /&gt;
        - additionally adds blank taxon and authority columns&lt;br /&gt;
     row ={ parent, rank, link_target, link_text, always_display, extinct, same_as, refs, taxon, authority }    &lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function p.loadTaxonomyTable(frame)&lt;br /&gt;
	&lt;br /&gt;
	local ok, taxonInfo&lt;br /&gt;
	local taxonTable= {}&lt;br /&gt;
	local i = 1&lt;br /&gt;
	&lt;br /&gt;
	-- load authorities from template parameters&lt;br /&gt;
	local authorities = { g.templateArgs[&amp;#039;authority&amp;#039;] or &amp;quot;&amp;quot;, &lt;br /&gt;
		   g.templateArgs[&amp;#039;parent_authority&amp;#039;] or &amp;quot;&amp;quot;,&lt;br /&gt;
		   g.templateArgs[&amp;#039;grandparent_authority&amp;#039;] or &amp;quot;&amp;quot;, &lt;br /&gt;
		   g.templateArgs[&amp;#039;greatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;,&lt;br /&gt;
		   g.templateArgs[&amp;#039;greatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;,&lt;br /&gt;
		   g.templateArgs[&amp;#039;greatgreatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;,&lt;br /&gt;
		   g.templateArgs[&amp;#039;greatgreatgreatgreatgrandparent_authority&amp;#039;] or &amp;quot;&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
	-- get the name of the first taxon&lt;br /&gt;
	local taxon = g.templateArgs[&amp;#039;taxon&amp;#039;] or g.templateArgs[&amp;#039;parent&amp;#039;] or &amp;quot;Felis&amp;quot;&lt;br /&gt;
		--taxon= &amp;#039;Felis&amp;#039; &lt;br /&gt;
		--taxon= &amp;#039;Worthenella&amp;#039;       &lt;br /&gt;
		--taxon= &amp;#039;Fereuungulata&amp;#039;&lt;br /&gt;
	--local authority = &amp;#039;authority&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- the following section is an alternative method for adding rows for species, subspecies, etc&lt;br /&gt;
	--[[START: insert rows for variety, subspecies, species and subgenus at base of automatic taxonomy]]&lt;br /&gt;
    if g.templateArgs[&amp;#039;species_name&amp;#039;] then &lt;br /&gt;
&lt;br /&gt;
	    if g.templateArgs[&amp;#039;variety_name&amp;#039;] then &lt;br /&gt;
		    taxonTable[i]= { taxon = g.templateArgs[&amp;#039;variety_name&amp;#039;],&lt;br /&gt;
						     rank = &amp;#039;variety&amp;#039;,&lt;br /&gt;
						     authority = authorities[i] --g.templateArgs[authority],&lt;br /&gt;
						    }&lt;br /&gt;
		    i=i+1&lt;br /&gt;
	    end&lt;br /&gt;
	    if g.templateArgs[&amp;#039;subspecies_name&amp;#039;] then &lt;br /&gt;
		    taxonTable[i]= { taxon = g.templateArgs[&amp;#039;subspecies_name&amp;#039;],&lt;br /&gt;
						     rank = &amp;#039;subspecies&amp;#039;,&lt;br /&gt;
						     authority = authorities[i] -- g.templateArgs[authority],&lt;br /&gt;
						    }&lt;br /&gt;
		    i=i+1&lt;br /&gt;
		end&lt;br /&gt;
		-- TODO if subgenus&lt;br /&gt;
&lt;br /&gt;
	    taxonTable[i]= { taxon = g.templateArgs[&amp;#039;species_name&amp;#039;],&lt;br /&gt;
					     rank = &amp;#039;species&amp;#039;,&lt;br /&gt;
					     authority =  authorities[i] -- g.templateArgs[authority],&lt;br /&gt;
					    }&lt;br /&gt;
	    i=i+1&lt;br /&gt;
	    taxon = g.templateArgs[&amp;#039;parent&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
    --[[END: insert rows for variety, subspecies species and subgenus  at base of automatic taxonomy]]&lt;br /&gt;
    &lt;br /&gt;
    --[[ load the heirarchy of the automatic taxonomy &lt;br /&gt;
          each row has the contents for a taxon returned by g.getTaxonInfo()&lt;br /&gt;
             which uses Template:Taxonomy/TAXON with argument machine code =&amp;quot;all&amp;quot;&lt;br /&gt;
    ]]&lt;br /&gt;
	while i&amp;lt;100 do&lt;br /&gt;
&lt;br /&gt;
		ok, taxonTable[i] = g.getTaxonInfo(frame, taxon)&lt;br /&gt;
&lt;br /&gt;
		--if ok and taxonTable[i][&amp;#039;parent&amp;#039;] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		if ok then&lt;br /&gt;
			if taxonTable[i][&amp;#039;same_as&amp;#039;] and taxonTable[i][&amp;#039;same_as&amp;#039;] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
				taxon = taxonTable[i][&amp;#039;same_as&amp;#039;]&lt;br /&gt;
				local ok, sameAsTable = g.getTaxonInfo(frame, taxon)&lt;br /&gt;
				if ok then&lt;br /&gt;
					for k,v in pairs(taxonTable[i]) do&lt;br /&gt;
					   if v == &amp;quot;&amp;quot; then &lt;br /&gt;
					   	  taxonTable[i][k] = sameAsTable[k] -- use same_as values if none set&lt;br /&gt;
					   end &lt;br /&gt;
					end&lt;br /&gt;
				else break;&lt;br /&gt;
				end&lt;br /&gt;
			else -- we have what data for the taxon directly&lt;br /&gt;
				-- TODO do something&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- add taxon to the table row&lt;br /&gt;
			if taxonTable[i][&amp;#039;link_text&amp;#039;] and taxonTable[i][&amp;#039;link_text&amp;#039;] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
				taxonTable[i][&amp;#039;taxon&amp;#039;] = taxonTable[i][&amp;#039;link_text&amp;#039;]&lt;br /&gt;
			else&lt;br /&gt;
				taxonTable[i][&amp;#039;taxon&amp;#039;] = taxonTable[i][&amp;#039;link_target&amp;#039;]&lt;br /&gt;
			end&lt;br /&gt;
			--  authority from parent authroity sequence&lt;br /&gt;
			taxonTable[i][&amp;#039;authority&amp;#039;] = (authorities[i] or &amp;quot;&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
			if taxonTable[i][&amp;#039;parent&amp;#039;] == &amp;quot;&amp;quot; then -- have we reached the top of the heirarchy?&lt;br /&gt;
				break &lt;br /&gt;
			else &lt;br /&gt;
				taxon = taxonTable[i][&amp;#039;parent&amp;#039;] -- set the taxon for the next loop&lt;br /&gt;
			end&lt;br /&gt;
		else break&lt;br /&gt;
	    end&lt;br /&gt;
	    i = i + 1	&lt;br /&gt;
	    &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--we have a complete table&lt;br /&gt;
	taxonTable.n = #taxonTable - 1  -- minus one as last one has parent=life and displays as Genus: Ursus&lt;br /&gt;
&lt;br /&gt;
    return taxonTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ loads a row of taxon information&lt;br /&gt;
       uses Template:Taxonomy/TAXON with argument [&amp;#039;machine code&amp;#039;] = &amp;quot;all&amp;quot;&lt;br /&gt;
       additionally adds blank taxon and authority columns&lt;br /&gt;
     row ={ parent, rank, link_target, link_text, always_display, extinct, same_as, refs, taxon, authority }    &lt;br /&gt;
]]&lt;br /&gt;
function g.getTaxonInfo(frame, taxon)&lt;br /&gt;
	&lt;br /&gt;
	local ok, taxonInfo = pcall(frame.expandTemplate, frame, { title = &amp;#039;Template:Taxonomy/&amp;#039; .. taxon, &lt;br /&gt;
			                                               args = {[&amp;#039;machine code&amp;#039;] = &amp;quot;all&amp;quot; } })&lt;br /&gt;
	if ok then&lt;br /&gt;
	    local split= mw.text.split(taxonInfo, &amp;quot;$&amp;quot;, true)&lt;br /&gt;
        -- all:  returns &amp;quot;parent$rank$link_target$unnamed parameter$always_display$extinct$same_as$refs&amp;quot;&lt;br /&gt;
		local taxonRow ={ &lt;br /&gt;
				parent              = split[1] or &amp;quot;&amp;quot;,&lt;br /&gt;
	            rank                = split[2] or &amp;quot;&amp;quot;,&lt;br /&gt;
	                -- if link containing pipe, e.g. |link=Fereuungulata|Ferungulata =LINK_TARGET|LINK_TEXT&lt;br /&gt;
	            link_target         = split[3] or &amp;quot;&amp;quot;, -- link_target = link or first part of link before pipe&lt;br /&gt;
	            link_text           = split[4] or &amp;quot;&amp;quot;, -- then produces unnamed parameter &amp;#039;link_text&amp;#039;&lt;br /&gt;
	            always_display      = split[5] or &amp;quot;&amp;quot;,&lt;br /&gt;
	            extinct             = split[6] or &amp;quot;&amp;quot;,&lt;br /&gt;
	            same_as             = split[7] or &amp;quot;&amp;quot;,&lt;br /&gt;
	            refs                = split[8] or &amp;quot;&amp;quot;,&lt;br /&gt;
	            taxon               = &amp;quot;&amp;quot;,        -- create blank now to stop table reordering&lt;br /&gt;
	            authority           = &amp;quot;&amp;quot;,        -- create blank now to stop table reordering&lt;br /&gt;
	    }&lt;br /&gt;
	    &lt;br /&gt;
	    return ok, taxonRow&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[=========================== taxoboxList (old version) =================================&lt;br /&gt;
&lt;br /&gt;
            -- Copied from Module:Autotaxobox on 19 December 2018&lt;br /&gt;
            -- modified to use full table of taxaonomy template parameters&lt;br /&gt;
            -- reason: to reduce template calls, especially in replacement for Template:Taxobox/showtaxon&lt;br /&gt;
&lt;br /&gt;
Returns the rows of taxa in an automated taxobox, based on the taxonomic&lt;br /&gt;
hierarchy for the supplied taxon.&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:Autotaxobox|taxoboxList|TAXON&lt;br /&gt;
|display_taxa = the number of taxa *above* TAXON to force to be displayed&lt;br /&gt;
|authority = taxonomic authority for TAXON&lt;br /&gt;
|parent_authority = taxonomic authority for TAXON&amp;#039;s parent&lt;br /&gt;
|gparent_authority = taxonomic authority for TAXON&amp;#039;s grandparent&lt;br /&gt;
|ggparent_authority = taxonomic authority for TAXON&amp;#039;s greatgrandparent&lt;br /&gt;
|ggparent_authority = taxonomic authority for TAXON&amp;#039;s greatgreatgrandparent&lt;br /&gt;
|bold_first = &amp;#039;bold&amp;#039; to bold TAXON in its row&lt;br /&gt;
|virus = &amp;#039;yes&amp;#039; to apply virus taxa italicization standards&lt;br /&gt;
}}&lt;br /&gt;
=============================================================================]]&lt;br /&gt;
function p.taxoboxList(frame)&lt;br /&gt;
	--local currTaxon = frame.args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	local displayN = (tonumber(g.templateArgs[&amp;#039;display_taxa&amp;#039;]) or 1) + 1&lt;br /&gt;
	--local displayN = (tonumber(frame.args[&amp;#039;display_taxa&amp;#039;]) or 1) + 1&lt;br /&gt;
	--local auth = frame.args[&amp;#039;authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	--local parentAuth = frame.args[&amp;#039;parent_authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	--local gParentAuth = frame.args[&amp;#039;gparent_authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	--local ggParentAuth = frame.args[&amp;#039;ggparent_authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	--local gggParentAuth = frame.args[&amp;#039;gggparent_authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local boldFirst = frame.args[&amp;#039;bold_first&amp;#039;] or &amp;#039;link&amp;#039; -- values &amp;#039;link&amp;#039; or &amp;#039;bold&amp;#039;&lt;br /&gt;
	local virus = frame.args[&amp;#039;virus&amp;#039;] or &amp;#039;no&amp;#039; -- values &amp;#039;yes&amp;#039; or &amp;#039;no&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- local taxonTable = l.makeTable(frame, currTaxon)                  &lt;br /&gt;
	local taxonTable = g.taxonTable                                  -- modifications using full table&lt;br /&gt;
	--taxonTable.n = #taxonTable&lt;br /&gt;
	--displayN = 10 -- force display&lt;br /&gt;
	--[[]&lt;br /&gt;
	taxonTable[1][&amp;#039;authority&amp;#039;] = frame.args[&amp;#039;authority&amp;#039;] or &amp;#039;authority&amp;#039;&lt;br /&gt;
	taxonTable[2][&amp;#039;authority&amp;#039;] = frame.args[&amp;#039;parent_authority&amp;#039;] or &amp;#039;parent auth&amp;#039;&lt;br /&gt;
	taxonTable[3][&amp;#039;authority&amp;#039;] = frame.args[&amp;#039;gparent_authority&amp;#039;] or &amp;#039;gp auth&amp;#039; &lt;br /&gt;
	taxonTable[4][&amp;#039;authority&amp;#039;] = frame.args[&amp;#039;ggparent_authority&amp;#039;] or &amp;#039;ggp auth&amp;#039; &lt;br /&gt;
	taxonTable[5][&amp;#039;authority&amp;#039;] = frame.args[&amp;#039;gggparent_authority&amp;#039;] or &amp;#039;gggp auth&amp;#039; ]]&lt;br /&gt;
 local test = g.templateArgs[&amp;#039;authority&amp;#039;] or &amp;#039;authority&amp;#039;&lt;br /&gt;
	--[[ TODO check that taxonTable[i] exists&lt;br /&gt;
	taxonTable[1][&amp;#039;authority&amp;#039;] = g.templateArgs[&amp;#039;authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	taxonTable[2][&amp;#039;authority&amp;#039;] = g.templateArgs[&amp;#039;parent_authority&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	taxonTable[3][&amp;#039;authority&amp;#039;] = g.templateArgs[&amp;#039;grandparent_authority&amp;#039;] or &amp;#039;&amp;#039; &lt;br /&gt;
	taxonTable[4][&amp;#039;authority&amp;#039;] = g.templateArgs[&amp;#039;greatgrandparent_authority&amp;#039;] or &amp;#039;&amp;#039; &lt;br /&gt;
	taxonTable[5][&amp;#039;authority&amp;#039;] = g.templateArgs[&amp;#039;greatgreatgrandparent_authority&amp;#039;] or &amp;#039;&amp;#039; ]]&lt;br /&gt;
  &lt;br /&gt;
   -- determine when to force: when i&amp;lt;displayN and when infrataxons in i=2 and i=3 (why?)&lt;br /&gt;
    for i= 1, displayN, 1 do                     -- use &amp;#039;always_display&amp;#039; to flag a force&lt;br /&gt;
		taxonTable[i][&amp;#039;always_display&amp;#039;] =  &amp;quot;yes&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
   --[[check for lower infrataxons for i=4 and i=3 TODO verify this works&lt;br /&gt;
   if  g.isInfraTaxon(taxonTable[3][&amp;#039;rank&amp;#039;]) then   -- if i=3 an infrataxon &lt;br /&gt;
   	   taxonTable[4][&amp;#039;always_display&amp;#039;] = &amp;quot;yes&amp;quot;      -- then always display i=4&lt;br /&gt;
   end&lt;br /&gt;
   if  g.isInfraTaxon(taxonTable[2][&amp;#039;rank&amp;#039;]) then   -- if i=2 an infrataxon &lt;br /&gt;
   	   taxonTable[4][&amp;#039;always_display&amp;#039;] = &amp;quot;yes&amp;quot;      -- then always display i=3 and i=4&lt;br /&gt;
   	   taxonTable[3][&amp;#039;always_display&amp;#039;] = &amp;quot;yes&amp;quot; &lt;br /&gt;
   end]]&lt;br /&gt;
   	&lt;br /&gt;
&lt;br /&gt;
	local res = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- generic display to replace &amp;gt;6, 5,4,3,2,1 sections&lt;br /&gt;
	for i = taxonTable.n, 1, -1 do&lt;br /&gt;
		if i==1 then boldFirst = &amp;quot;bold&amp;quot; end&lt;br /&gt;
		res = res .. g.showTaxonRow(frame, i, boldFirst,  virus)&lt;br /&gt;
		--res = res .. g.showTaxonRow(frame, i, taxonTable[i][&amp;#039;taxon&amp;#039;], taxonTable[i][&amp;#039;authority&amp;#039;], taxonTable[i][&amp;#039;always_display&amp;#039;], boldFirst,  virus)&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
--[[ function to check if an infrarank (not major rank) that should be displayed&lt;br /&gt;
      - emulates template Template:Infrataxon(), which uses Template:Principal rank&lt;br /&gt;
]]&lt;br /&gt;
function g.isPrincipalRank(rank)&lt;br /&gt;
	-- Remove &amp;quot;ichno&amp;quot; and &amp;quot;oo&amp;quot; and then check for a major taxon (&amp;quot;oordo&amp;quot; becomes &amp;quot;rdo&amp;quot;):&lt;br /&gt;
	rank = string.gsub(rank, &amp;quot;ichno&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	rank = string.gsub(rank, &amp;quot;oo&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
    if rank == &amp;quot;regnum&amp;quot; or rank==&amp;quot;phylum&amp;quot; or rank==&amp;quot;divisio&amp;quot; or rank==&amp;quot;classis&amp;quot; or rank==&amp;quot;ordo&amp;quot; or rank==&amp;quot;rdo&amp;quot; &lt;br /&gt;
       or rank==&amp;quot;familia&amp;quot; or rank==&amp;quot;genus&amp;quot; or rank==&amp;quot;species&amp;quot; or rank==&amp;quot;subspecies&amp;quot; or rank==&amp;quot;variety&amp;quot; then&lt;br /&gt;
       	return true&lt;br /&gt;
    else&lt;br /&gt;
    	return false -- rank is an infrarank&lt;br /&gt;
    end	&lt;br /&gt;
    --return not g.isInfraTaxon(rank)&lt;br /&gt;
end&lt;br /&gt;
function g.isInfraTaxon(rank)&lt;br /&gt;
	--Remove &amp;quot;ichno&amp;quot; and &amp;quot;oo&amp;quot; and then check for a major taxon (&amp;quot;oordo&amp;quot; becomes &amp;quot;rdo&amp;quot;):&lt;br /&gt;
	rank = string.gsub(rank, &amp;quot;ichno&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	rank = string.gsub(rank, &amp;quot;oo&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
    if rank == &amp;quot;regnum&amp;quot; or rank==&amp;quot;phylum&amp;quot; or rank==&amp;quot;divisio&amp;quot; or rank==&amp;quot;classis&amp;quot; or rank==&amp;quot;ordo&amp;quot; or rank==&amp;quot;rdo&amp;quot; &lt;br /&gt;
       or rank==&amp;quot;familia&amp;quot; or rank==&amp;quot;genus&amp;quot; or rank==&amp;quot;species&amp;quot; or rank==&amp;quot;subspecies&amp;quot; or rank==&amp;quot;variety&amp;quot; then&lt;br /&gt;
       	return false&lt;br /&gt;
    else&lt;br /&gt;
    	return true -- rank is an infrarank&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
--[[ function g.showTaxonRow () - show a row of the taxonomy table&lt;br /&gt;
       - emulates Template:Taxobox/showtaxon&lt;br /&gt;
       - uses Template:Taxon link and Template:anglicise rank&lt;br /&gt;
]]&lt;br /&gt;
function g.showTaxonRow (frame, i,  boldFirst,  virus)&lt;br /&gt;
&lt;br /&gt;
--[[ return frame:expandTemplate{ title = &amp;#039;Template:Taxobox/showtaxon&amp;#039;, &lt;br /&gt;
                                  args = { g.taxonTable[i][&amp;#039;taxon&amp;#039;], &lt;br /&gt;
                                           authority=g.taxonTable[i][&amp;#039;authority&amp;#039;], &lt;br /&gt;
                                           fc = g.taxonTable[i][&amp;#039;always_display&amp;#039;], &lt;br /&gt;
                                           format = boldFirst, &lt;br /&gt;
                                           virus = virus } }&lt;br /&gt;
]]&lt;br /&gt;
	-- do we want to display the taxon?&lt;br /&gt;
	if g.taxonTable[i][&amp;#039;always_display&amp;#039;] == &amp;quot;yes&amp;quot;            -- the flag for whether to force display a taxon&lt;br /&gt;
	    or g.taxonTable[i][&amp;#039;always_display&amp;#039;] == &amp;quot;true&amp;quot; &lt;br /&gt;
	    or g.isPrincipalRank(g.taxonTable[i][&amp;#039;rank&amp;#039;]) then  -- or major ranks&lt;br /&gt;
	    -- continue&lt;br /&gt;
	else --if g.isInfraTaxon(g.taxonTable[i][&amp;#039;rank&amp;#039;]) then -- or a major rank (=not a minor rank)&lt;br /&gt;
		 return &amp;quot;&amp;quot; &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
    --{{Taxon link|{{{1|Ursa}}}|bold={{#ifeq:{{{format|link}}}|bold|yes|no}}|virus={{{virus|no}}}}}&lt;br /&gt;
    local bold = &amp;quot;no&amp;quot;&lt;br /&gt;
    if boldFirst == &amp;quot;bold&amp;quot; then bold = &amp;quot;yes&amp;quot; end&lt;br /&gt;
    --taxon name&lt;br /&gt;
    local taxonName = g.taxonTable[i][&amp;#039;taxon&amp;#039;] -- plain name&lt;br /&gt;
    local rank = g.taxonTable[i][&amp;#039;rank&amp;#039;]&lt;br /&gt;
    if rank == &amp;quot;species&amp;quot; or rank == &amp;quot;subspecies&amp;quot; or rank == &amp;quot;variety&amp;quot; then&lt;br /&gt;
    	-- no processing of name necessary (already set to species_name, subspecies_name, etc)&lt;br /&gt;
    else&lt;br /&gt;
    	taxonName = frame:expandTemplate{ title = &amp;quot;Taxon link&amp;quot;, &lt;br /&gt;
    	                              args = { taxonName, bold=bold, virus=virus } }&lt;br /&gt;
    end&lt;br /&gt;
    --rank&lt;br /&gt;
    local taxonRank = g.taxonTable[i][&amp;#039;rank&amp;#039;]&lt;br /&gt;
    taxonRank = frame:expandTemplate{ title = &amp;quot;anglicise rank&amp;quot;, args = { g.taxonTable[i][&amp;#039;rank&amp;#039;] } }&lt;br /&gt;
		  &lt;br /&gt;
    if g.taxonTable[i][&amp;#039;rank&amp;#039;] == &amp;quot;virus_group&amp;quot; then&lt;br /&gt;
		 taxonName = frame:expandTemplate{ title = &amp;quot;Virus group&amp;quot;, args = { g.taxonTable[i][&amp;#039;taxon&amp;#039;] } }&lt;br /&gt;
		    --	taxonRank = &amp;quot;Group&amp;quot; -- handled by anglicise rank template&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local authorityString = &amp;#039;&amp;#039;&lt;br /&gt;
	if g.taxonTable[i][&amp;#039;authority&amp;#039;] and g.taxonTable[i][&amp;#039;authority&amp;#039;] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
	   	authorityString = &amp;#039;&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;&amp;#039;.. g.taxonTable[i][&amp;#039;authority&amp;#039;] ..&amp;#039;&amp;lt;/small&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--[[ now output the html &lt;br /&gt;
	      the autotaxobox templates had already started a new row and ended with new row&lt;br /&gt;
	      this was the stumbling block for the nodal approach uing the Lua html library (mw.html) &lt;br /&gt;
	         which required the embedded table&lt;br /&gt;
	]]&lt;br /&gt;
    -- new method append row to the table structure using mw:html library&lt;br /&gt;
    local row =g.htmlTable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
    local cell = row:tag(&amp;#039;td&amp;#039;):wikitext(taxonRank .. &amp;quot;:&amp;quot;..i)&lt;br /&gt;
    cell = row:tag(&amp;#039;td&amp;#039;):wikitext(taxonName .. authorityString)&lt;br /&gt;
    &lt;br /&gt;
    -- old method: return wikitext for table row&lt;br /&gt;
    local rowWiki = &amp;#039;\n|-\n|&amp;#039;..taxonRank .. &amp;#039;:&amp;#039; .. i .. &amp;#039;||&amp;#039; .. taxonName .. authorityString &lt;br /&gt;
	--return row .. &amp;#039;\n|-&amp;#039;  -- return  with new row started&lt;br /&gt;
                      &lt;br /&gt;
	return rowWiki              -- so don&amp;#039;t start the new row &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Jts1882</name></author>
	</entry>
</feed>