Module:Biota infobox/test

require('strict') local getArgs = require ('Module:Arguments').getArgs;

local p = {} -- exposed variables

--local pargs = {} local template = {} local args = {}

-- parse the taxon list and get the taxon parameter and authority from the lowest rank (clear the parameters) function p.get_taxon(frame, option) args['taxon'] = "taxon name" local ranks = require ('Module:Biota_infobox/data').taxonRanks; -- get the list of rank parameters used by manual taxoboxes -- interate throught the rank parameters, setting taxon to each in turn. -- The lowest rank parameter should hold the taxon name for the taxoox local rank for k,v in pairs(ranks) do		if args[v] then                                    -- if rank parameter rank = v			args['taxon'] = args[rank]:gsub("[%[%]%']", "")   -- strip wiki formatting and set taxon parameter --args['rank'] = rank args['authority'] = args[rank.."_authority"] or "" -- set authority args[rank] = nil end end args[rank.."_authority"] = nil -- delete the authority of taxon (e.g. familia_authority for family) but keep parent taxon authorities if provided end

-- remove the taxon parameters apart from genus and species function p.clear_taxon_parameters (frame) local ranks = require ('Module:Biota_infobox/data').taxonRanks; -- get the list of rank parameters used by manual taxoboxes for k,v in pairs(ranks) do   	if v ~= "genus" and v ~= "species" then args[v] = nil end end end

-- add the parameter line with appropriate stripping of wikitext function p.addParam(param)

if args[param] then local value = args[param] if param == 'genus' then value = value:gsub("%'",""):gsub("%[",""):gsub("%]","") --value='Hypsiboas' elseif param == 'species' then --value = value:gsub("[%'%[%]]","") value = value:gsub("[%'%[]*[A-Za-z%.]* ([A-Za-z]*)[%]%']*","%1") --value='albopunctatus' elseif param == 'binomial_authority' then param = 'authority' args['binomial_authority']=nil args['binomial']=nil            -- not needed end if param == 'name' and args['name'] == args['taxon'] then -- name parameter not need if same as taxon -- TODO not needed if page title either else table.insert (template, '| ' .. param .. ' = ' .. value ); end args[param]=nil -- remove handled parameters end end

function p.convert(frame) --args = frame:getParent.args args = getArgs (frame); local mode = "speciesbox" if args['genus'] and args['species'] then table.insert (template, '{{Speciesbox ' ); p.clear_taxon_parameters(frame) else table.insert (template, '{{Automatic taxobox ' ); mode = "auto" args['taxon'] = "test taxon" p.get_taxon(frame) end p.addParam('name') p.addParam('fossil range') p.addParam('status') p.addParam('status_system') p.addParam('status_ref') p.addParam('status2') p.addParam('status2_system') p.addParam('status2_ref') p.addParam('trend') p.addParam('image') p.addParam('image_upright') p.addParam('image_alt') p.addParam('image_caption') p.addParam('image2') p.addParam('image2_upright') p.addParam('image2_alt') p.addParam('image2_caption') p.addParam('classification_status') p.addParam('diversity') p.addParam('diversity_ref') p.addParam('diversity_link') p.addParam('extinct')

p.addParam('taxon') p.addParam('authority') p.addParam('genus') p.addParam('species') p.addParam('binomial_authority')

p.addParam('subdivision_ranks') p.addParam('subdivision') p.addParam('subdivision_ref') p.addParam('type_strain') p.addParam('type_strain_ref') p.addParam('range_map') p.addParam('range_map_upright') p.addParam('range_map_alt') p.addParam('range_map_caption') p.addParam('range_map2') p.addParam('range_map2_upright') p.addParam('range_map2_alt') p.addParam('range_map2_caption') p.addParam('range_map3') p.addParam('range_map3_upright') p.addParam('range_map3_alt') p.addParam('range_map3_caption') p.addParam('range_map4') p.addParam('range_map4_upright') p.addParam('range_map4_alt') p.addParam('range_map4_caption') p.addParam('synonyms_ref') p.addParam('synonyms') --p.addParam('')

-- required parameters should have been set -- all others can be discarded local testing = true for k,v in pairs(args) do		if testing == true then if k ~="nosubst" then table.insert (template, table.concat ({' | '..k..'=', v }));	 -- show any unhandled parameters end else if k ~="nosubst" then args[k] = nil                                                -- discard unwanted parameters end end end

table.insert (template, '}}');												-- close the template --return ' ' .. table.concat (template, '\n') .. ' ';	 --return '\n ' local output = table.concat (template, '\n') if args['nosubst'] == "yes" or args['nosubst'] == "code" then --return table.concat ({' '}) return table.concat ({' ', output, ' '}) elseif args['nosubst'] == "preview" then return frame:preprocess(output); else return output; end end

return p