Module:AssignTerrainCategory

-- This module is borrowed/based on the template called TerrainCats from the Forgotten Realms Wiki. -- https://forgottenrealms.fandom.com/wiki/Module:TerrainCats local TerrainCategories = {} -- Helper function that replaces a huge switch statement local ctTrans = require('Module:CTtrans').climateTerrainString -- Helper function for constructing a category local function Category( category, sortkey ) if sortkey == nil then sortkey = '' else sortkey = '|' .. sortkey end -- The '' is done this way to prevent this page from being categorized. return string.format('%s'..'Category:%s%s', '[[', category, sortkey) end -- Return a terrain category if ctTrans finds a matching terrain type local function makeCategory( inputText )    if ctTrans(inputText) ~= "" then        return Category(            ('%s creatures'):format(ctTrans(inputText))        )    else        return nil    end end -- Generate terrain categories for all terrain types given as input. -- Note that "any land" and "any space" have specific meanings that translate -- into multiple categories. function TerrainCategories.AssignTerrainCategory( frame )    local output = {}    local splitText = mw.text.split(mw.ustring.lower(frame.args[1]), '%s*%p%s*')    for _,v in ipairs(splitText) do        if v == "any land" or v == "land" then            table.insert(output, makeCategory('desert'))            table.insert(output, makeCategory('forest'))            table.insert(output, makeCategory('hills'))            table.insert(output, makeCategory('marshes'))            table.insert(output, makeCategory('mountains'))            table.insert(output, makeCategory('plains'))        elseif v == "any water" or v == "water" then            table.insert(output, makeCategory('freshwater lakes'))            table.insert(output, makeCategory('freshwater marshes'))            table.insert(output, makeCategory('rivers'))            table.insert(output, makeCategory('freshwater swamps'))            table.insert(output, makeCategory('saltwater lakes'))            table.insert(output, makeCategory('saltwater marshes'))            table.insert(output, makeCategory('seas and oceans'))        elseif v == "any space" or v == "space" then            table.insert(output, makeCategory('wildspace'))            table.insert(output, makeCategory('phlogiston'))        else            table.insert(output, makeCategory(v))        end    end    return table.concat(output) end return TerrainCategories