Module:Genre

local categorization = require('Module:Categorization') local utils = require('Module:Utils') local yesno = require('Dev:Yesno')

local categorize = categorization.categorize_in_namespaces('Catalog', 'Community')

local p = {}

local genres = {'Building', 'Horror', 'Town and City', 'Military', 'Comedy', 'Medieval', 'Adventure', 'Sci-Fi', 'Naval', 'FPS', 'RPG', 'Sports', 'Fighting', 'Western'}

function p._format_genre(args) local genre_name = args.genre local genre_string = genre_name:lower -- Use the lowercase string for comparisons. if genre_string == 'all' then return "All" else for _, genre in next, genres do           if genre:lower == genre_string then return genre .. (args["category suffix"] and (categorize(genre .. " " .. args["category suffix"])) or "") end end -- If the function didn't return in the loop, the genre string corresponded to none of the recognized genres. return error("Invalid genre") end end

p.format_genre = utils.make_wrapper_function(p._format_genre)

function p._enumerate_genres(args) local output = "" assert(args.genres) -- If there are multiple genres, list them. -- Otherwise, we want to format the only genre without putting it in a list. if args.genres:find('/') or args.genres:find(',') then for genre in args.genres:gmatch('%s*([^/,]+)') do           output = output .. "\n* " .. p._format_genre {genre = genre, ["category suffix"] = args["category suffix"]} end output = output:sub(2) -- Remove the initial newline. else output = p._format_genre {genre = args.genres, ["category suffix"] = args["category suffix"]} end return output end

p.enumerate_genres = utils.make_wrapper_function(p._enumerate_genres)

return p