Jump to content

Module:Science redirect/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Ahecht (talk | contribs) at 22:48, 31 May 2017 (rename). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local p = {}

local conf = {
	from_alternative_scientific_name = {
		name     = 'From alternative scientific name of $1',
		from     = 'an alternative scientific name of $1 (or group of $2)',
		to       = 'the accepted scientific name',
		category = 'from alternative scientific names',
	}, to_scientific_name = {
		name     = 'To the scientific name of $1',
		from     = 'a [[Common name|vernacular ("common") name]]',
		to       = 'the [[biological nomenclature|scientific name]] of $1 (or group of $2)',
		category = 'to scientific names',
	}, from_scientific_name = {
		name     = 'From a scientific name of $1',
		from     = 'a [[biological nomenclature|scientific name]] of $1 (or group of $2)',
		to       = 'a [[Common name|vernacular ("common") name]]',
		category = 'from scientific names',
	}, to_monotypic_taxon = {
		name     = 'To a monotypic taxon',
		from     = 'the only lower-ranking member of a monotypic $1 taxon',
		to       = 'its monotypic taxon',
		category = 'to monotypic taxa',
		article  = false
	}, from_monotypic_taxon = {
		name     = 'From a monotypic taxon',
		from     = 'a monotypic $1 taxon',
		to       = 'its only lower-ranking member',
		category = 'from monotypic taxa',
		article  = false
	}, 
}

function p.R(frame)
	local template = mw.ustring.gsub((frame.args[1] or frame:getParent().args['template']), ' ', '_')
	if conf[template] then
		return p._main(frame, conf[template].name, conf[template].from, conf[template].to, conf[template].category, (conf[template].article or true))
	elseif template then
		return '<span class="error">The template '..template..'is not valid.</span>\n'
	else
		return '<span class="error">No template specified</span>\n'
	end
end

local cats = { -- list entries minus any trailing 's'
	plant      = {'a plant', 'plants'},
	fish       = {'a fish', 'fish'},
	fishe      = {'a fish', 'fish'},
	fungu      = {'a fungus', 'fungi'},
	fungi      = {'a fungus', 'fungi'},
	spider     = {'a spider', 'spiders'},
	crustacean = {'a crustacean', 'crustaceans'},
	reptile    = {'a reptile', 'reptiles'},
	insect     = {'an insect', 'insects'},
	none       = {'an organism'},
}

function p._main(frame, name, from, to, category, article)
	--initialize variables
	local args = frame:getParent().args
	local singleNoun, pluralNoun = '', ''
	local cat = mw.ustring.match(mw.ustring.lower(args[1] or 'none'), '^(.-)s?$')
	local unknown = false;
	
	--Check for valid category
	if cats[cat] then singleNoun, pluralNoun = cats[cat][1], cats[cat][2] else
		singleNoun, pluralNoun = 'an organism'
		unknown = true
	end
	
	--strip article from singleNoun if article=false
	if article == false then
		if singleNoun == 'an organism' then singleNoun = '' else singleNoun = (mw.ustring.match(singleNoun, '^an? (.*)$') or singleNoun)	end
	end
	
	--support alternative indications for printworthy
	if args[2] == 'unprintworthy' or args['unprintworthy'] == 'true' then args['printworthy'] = 'no' end
	
	--build template arguments
	local main_category = 'Redirects '..category
	if pluralNoun then main_category = main_category..' of '..pluralNoun end
	local outArgs = {
		name = mw.ustring.gsub(name, '$1', singleNoun),
		from = mw.ustring.gsub(mw.ustring.gsub(from, '$1', singleNoun), '$2', (pluralNoun or 'organisms')),
		to = to,
		['main category'] = main_category,
		printworthy = (args['printworthy'] or 'yes'),
	}
	
	--build output string
	local outStr = ''
	if frame.args['debug'] == 'true' then
		outStr = '{{Redirect template<br \>'
		for k,v in pairs( outArgs ) do
			outStr = outStr..'| '..k..' = '..v..'<br \>'
		end
		outStr = outStr..'}}'
	else
		outStr = frame:expandTemplate{ title = 'Redirect template', args = outArgs }
	end
	if unknown == true then outStr = outStr..'[[Category:Redirects '..category..'using unknown values for parameter 1]]' end
	
	return outStr
end

return p