FANDOM


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', 'Fighting', 'Medieval', 'Adventure', 'Sci-fi', 'FPS', 'Naval', 'RPG', 'Sports', '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
Community content is available under CC-BY-SA unless otherwise noted.