Module:Taxonbar/whitelist

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.args[1]

local documentation = frame.args[2]

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_All[i] = v

end

for _, v in pairs( acceptableInstanceOf_Lax ) do

i = i + 1

acceptableInstanceOf_All[i] = 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

out[v] = 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