Module:Science redirect

local conf = require( "Module:Science redirect/conf" )

local p = {}

function p.R(frame)

local template = mw.ustring.gsub(frame.args[1], ' ', '_')

if conf.templates[template] then

return p._main(frame, 'R_' .. template, conf.templates[template].name, conf.templates[template].from, conf.templates[template].to, conf.templates[template].category, conf.templates[template].info, conf.templates[template].removeA)

elseif template then

return 'The template '..template..'is not valid.\n'

else

return 'No template specified\n'

end

end

function p.list(frame)

local outstr = ""

local ocats={}

for k, v in pairs(conf.cats) do

if(v[2]) then

ocats[v[2]] = v[1]

end

end

for k, v in pairs(ocats) do

local h = mw.ustring.match(v, ".*%s(.*)")

local catTitle = mw.title.new((h .. " redirects"), 14):getContent() and (h .. " redirects") or (k .. " redirects")

outstr = outstr .. "\n=== " .. frame:expandTemplate{ title = 'cl', args = { catTitle, (mw.language.getContentLanguage():ucfirst(catTitle)), count = "yes" } } .. " ===\n"

for kk, vv in pairs (conf.templates) do

outstr = outstr .. "*" .. frame:expandTemplate{ title = 'cl', args = { ("Redirects " .. vv.category .. " of " .. k), count = "yes" } } .. "\n"

end

end

return outstr

end

function p._main(frame, id, name, from, to, category, info, removeA)

--initialize variables

local args = frame:getParent().args

local singleNoun, pluralNoun = ,

local outStr = ''

--Check for known parameter 1

local cat = mw.ustring.match(mw.ustring.lower(args[1] or 'none'), '^(.-)s?$')

if conf.cats[cat] then singleNoun, pluralNoun = conf.cats[cat][1], conf.cats[cat][2] else

singleNoun, pluralNoun = 'an organism'

outStr = 'Category:Redirects '..category..' using unknown values for parameter 1'

end

--strip article from singleNoun if removeA is true

if removeA == true 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 = {

id = id,

name = mw.ustring.gsub(name, '$1', singleNoun),

from = mw.ustring.gsub(mw.ustring.gsub(from, '$1', singleNoun), '$2', (pluralNoun or 'organisms')),

to = mw.ustring.gsub(mw.ustring.gsub(to, '$1', singleNoun), '$2', (pluralNoun or 'organisms')),

['main category'] = main_category,

printworthy = (args['printworthy'] or 'yes'),

info = info,

}

--build output string

if frame.args['debug'] == 'true' then

local debugStr = '{{Redirect template
\n'

for k,v in pairs( outArgs ) do

debugStr = debugStr..'| '..k..' = '..v..'
\n'

end

outStr = debugStr..'}}'..frame:extensionTag{ name = 'nowiki', content = outStr}

else

outStr = frame:expandTemplate{ title = 'Redirect template', args = outArgs }..outStr

end

return outStr

end

return p