Permanently protected module
From Wikipedia, the free encyclopedia


local p = {}



--returns any combination of strict/lax/all acceptable instance-of's,

--either as a table for use inside [[Module:Taxonbar]] or another module,

--or as an ordered list for use in documentation.

function p.whitelist( frame )

	local listType = frame.args1

	local documentation = frame.args2

	local outList = {}

	local acceptableInstanceOf_Strict = { --table order == display order

		'Q16521',		--taxon

		'Q310890',		--monotypic taxon

		'Q47487597',	--monotypic fossil taxon

		'Q2568288',		--ichnotaxon

		'Q23038290',	--fossil taxon

		'Q59278506',	--ootaxon

		'Q98961713',	--extinct taxon

		'Q58051350',	--paraphyletic group (subclass of taxon)

	}

	local acceptableInstanceOf_Lax = { --table order == display order

		'Q42621',		--hybrid

		'Q235536',		--incertae sedis

		'Q713623',		--clade

		'Q848328',		--serotype

		'Q857968',		--candidatus

		'Q17487588',	--unavailable combination

		'Q124477390',	--taxon hypothesis

	}

	

	if listType == 'strict'  then outList = acceptableInstanceOf_Strict

	elseif listType == 'lax' then outList = acceptableInstanceOf_Lax

	else --elseif listType == 'all' then --concatenate strict + lax IIF requested

		local acceptableInstanceOf_All = {}

		local i = 0

		for _, v in pairs( acceptableInstanceOf_Strict ) do

			i = i + 1

			acceptableInstanceOf_Alli = v

		end

		for _, v in pairs( acceptableInstanceOf_Lax ) do

			i = i + 1

			acceptableInstanceOf_Alli = v

		end

		outList = acceptableInstanceOf_All

	end

	

	if (documentation == nil) or --module only

	   (documentation and documentation == '')

	then

		local out = {}

		for k, v in pairs( outList ) do

			outv = k --output Q# as keys for easier searching within Module:Taxonbar

		end

		return out

		

	elseif (documentation == 'docdoc') then --self-documentation only

		local selfdocout = 'myWhitelist = {\n'

		for k, q in pairs( outList ) do

			selfdocout = selfdocout..'\t\''..q..'\' = '..k..',\n'

		end

		selfdocout = selfdocout..'}'

		local args = { 'lang' = 'lua',

					   'code' = selfdocout }

		out = frame:expandTemplate{ title = 'Syntaxhighlight', args = args }

		return out

		

	else --normal documentation only

		local out = ''

		for _, q in pairs( outList ) do

			local Q = frame:expandTemplate{ title = 'Q', args = { q } }

			out = out..'# '..Q..'\n'

		end

		out = mw.ustring.gsub(out, '%s+$', '')

		return out

	end

	

end



return p