Module:Categorizer

local Categorizer = {} local getArgs = require('Module:Arguments').getArgs

local function makeInvokeFunction(funcName) -- makes a function that can be returned from #invoke, using -- Module:Arguments. return function (frame) local args = getArgs(frame, {parentOnly = true}) return p[funcName](args) end end

local function cate(catename,sort) if not mw.title.getCurrentTitle:inNamespace('') then return '' end if sort then sort = '|' .. sort else sort = '' end return '' end

local function get_prop(args) local prop = {} for k, v in pairs(t) do		for _, name in ipairs(v) do			if args[name] then prop[k] = args[name] break end end prop[k] = prop[k] or v.default end return prop end p.game = makeInvokeFunction('_game') function p._game(args) local prop = get_prop(args) local game = args[1] or args.class or args.game or args.Game or '' local gameg -- Game general style if getGames.games[game].fallback then gameg = getGames.games[game].fallback -- e.g. 'p3f' and 'p3p' will fall back to 'p3' if applicable. else gameg = game end

result = cate('Games') if gameg == 'mt1' or gameg == 'mt2' then result = result .. cate('Megami Tensei Series') elseif gameg == 'smt1' or gameg == 'smt2' or gameg == 'smtif' or gameg == 'smt3' or gameg == 'smt9' or gameg == 'smtim' or gameg == 'smtsj' or gameg == 'smt4' then result = result .. cate('Shin Megami Tensei Series') elseif gameg == 'lb1' or gameg == 'lb2' or gameg == 'alb' or gameg == 'lb3' or gameg == 'lbs' or gameg == 'lbnt1' or gameg == 'lbnt2' or gameg == 'lbnt3' then result = result .. cate('Last Bible Series') elseif gameg == 'majin1' or gameg == 'majin2' then result = result .. cate('Majin Tensei Series') elseif gameg == 'smtds' or gameg == 'sh' or gameg == 'raidou1' or gameg == 'raidou2' then result = result .. cate('Devil Summoner') elseif gameg == 'p1' or gameg == 'p2is' or gameg == 'p2ep' or gameg == 'p3' or gameg == 'pts' or gameg == 'p4' or gameg == 'pq' or gameg == 'p5' then result = result .. cate('Persona Series') elseif gameg == 'childred' or gameg == 'childblack' or gameg == 'childwhite' or gameg == 'childlight' or gameg == 'childfire' or gameg == 'childice' or gameg == 'childmessiah' then result = result .. cate('Devil Children') elseif gameg == 'ddsaga1' or gameg == 'ddsaga2' then result = result .. cate('Digital Devil Saga') elseif gameg == 'desu1' or gameg == 'desu2' then result = result .. cate('Devil Survivor Series') end if gameg == 'childred' or gameg == 'childblack' then result = result .. cate('Devil Children Red/Black Book','!') elseif gameg == 'childmessiah' then result = result .. cate('Messiah Riser','!') elseif gameg == '' then elseif gameg then result = result .. cate(gamen,'!') end return result end

p.char = makeInvokeFunction('_char') function p._char(args) local prop = get_prop(args) local game = args[1] or args.class or args.game or args.Game or '' local gameg if getGames.games[game].fallback then gameg = getGames.games[game].fallback else gameg = game end local gamen = getGames.games[game].name local gamegn = getGames.games[gameg].name

if args.Part == 'both' or args.Part == 'Both' then if game == 'p2is' then result = result .. cate(getGames.games['p2is'].name .. ' Characters') .. cate(getGames.games['p2ep'].name .. ' Characters') elseif game == 'smtds' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['sh'].name .. ' Characters') elseif game == 'raidou1' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['raidou2'].name .. ' Characters') elseif game == 'desu2' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['desu2rb'].name .. ' Characters') end elseif args.Part == 'All' or args.Part == 'all' then if game == 'p3' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['p3f'].name .. ' Characters') .. cate(getGames.games['p3p'].name .. ' Characters') elseif game == 'p4' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['p4g'].name .. ' Characters') .. cate(getGames.games['p4a'].name .. ' Characters') .. cate(getGames.games['p4d'].name .. ' Characters') end elseif gamen ~= nil then result = result .. cate(gamen .. ' Characters') end if args.alignment == 'Law' then result = result .. cate('Law-Aligned Characters') elseif args.alignment == 'Neutral' then result = result .. cate('Neutral-Aligned Characters') elseif args.alignment == 'Chaos' then result = result .. cate('Chaos-Aligned Characters') end return result end

return Categorizer