FANDOM


local occupations = {
["actor"] = {"Actors"},
["god"] = {"Gods"},
["spy"] = {"Spies"},
["nurse"] = {"Nurses"},
["ninja"] = {"Ninjas"},
["pilot"] = {"Pilots"},
["boxer"] = {"Boxers"},
["thief"] = {"Thieves"},
["dancer"] = {"Dancers"},
["pirate"] = {"Pirates"},
["zombie"] = {"Zombies"},
["leader"] = {"Leaders"},
["chemist"] = {"Chemists"},
["student"] = {"Students"},
["teacher"] = {"Teachers"},
["assassin"] = {"Assassins"},
["reporter"] = {"Reporters"},
["criminal"] = {"Criminals"},
["inventor"] = {"Inventors"},
["engineer"] = {"Engineers"},
["crimelord"] = {"Crimelords"},
["detective"] = {"Detectives"},
["terrorist"] = {"Terrorists"},
["conqueror"] = {"Conquerors"},
["vigilante"] = {"Vigilantes"},
["scientist"] = {"Scientists"},
["secretary"] = {"Secretaries"},
["mercenary"] = {"Mercenaries"},
["politician"] = {"Politicians"},
["adventurer"] = {"Adventurers"},
["body guard"] = {"Body Guards"},
["bodyguard"] = {"Body Guards"},
["retired"] = {"Retired Characters"},
["prime minister"] = {"Prime Ministers"},
["government agent"] = {"Government Agents"},
["government operative"] = {"Government Agents"},
["intelligence agent"] = {"Intelligence Agents"},
["private investigator"] = {"Private Investigators"},
["magician"] = {"Magicians"},
["shaman"] = {"Magicians"},
["witch"] = {"Magicians"},
["sorcer"] = {"Magicians"},
["advocate"] = {"Lawyers"},
["lawyer"] = {"Lawyers"},
["attorney"] = {"Lawyers"},
["ambassador"] = {"Ambassadors"},
["diplomat"] = {"Ambassadors"},
["dictator"] = {"Dictators"},
["doctor"] = {"Doctors"},
["surgeon"] = {"Doctors"},
["valkyr"] = {"Valkyries"},
["empress"] = {"Queens (Royalty)"},
["majestrix"] = {"Queens (Royalty)"},
["queen"] = {"Queens (Royalty)"},
["emperor"] = {"Kings (Royalty)"},
["monarch"] = {"Kings (Royalty)"},
["majestor"] = {"Kings (Royalty)"},
["king"] = {"Kings (Royalty)"},
["senator"] = {"Senators"},
["janitor"] = {"Janitors"},
["praetor"] = {"Praetors"},
["cop"]     = {"Police Officers"}, 
["police"]  = {"Police Officers"},
["businesswoman"]  = {"Business Management"},
}
 
----------------------------
-- Libraries of functions --
----------------------------
-- stands for High Frequency
local HF = require('Module:ComicsHF')
-- Parses invocation parameters, trims whitespace, and removes blanks.
local getArgs = require('Dev:Arguments').getArgs
-- Gives the name of the current page. It's expensive, so we only do it once.
-- The _G then makes it global, available to all page functions.
_G.vars = { Pagename = mw.title.getCurrentTitle().text }
 
----------------------------------------------------------
-- Public functions (called from a Template or article) --
----------------------------------------------------------
 
-- There is no standalone template, so no public functions.
 
--------------------------------------------------------
-- Internal functions (used in this and other Modules --
--------------------------------------------------------
function occupations:in_database( name )
    if type( self[ string.lower(name) ] ) == 'string' then
        return true
    else
        return nil
    end
end
 
function occupations:pluralize( name )
    if self:in_database ( string.lower(name) ) then
        return self[ string.lower(name) ]
    else
        -- Brute force method of making a singular plural
        name = name:gsub( 's$', 'es' )
        name = name:gsub( 'x$', 'es' )
        name = name:gsub( 'z$', 'es' )
        name = name:gsub( 'ch$', 'es' )
        name = name:gsub( 'sh$', 'es' )
        name = name:gsub( 'y$', 'ies' )
        name = name:gsub( 'f$', 'ves' )
        name = name:gsub( 'fe$', 'ves' )
        name = name:gsub( '[^s]$', '%1s' )
        return name
    end
end
 
function occupations:link( object )
    return HF.CategoryLink( self:pluralize(object), vars.Pagename, object )
end
 
function occupations._Occupation( field )
    local output = ''
    local o = {}
    -- Check for multiple values separated with commas
    local values = HF.explode( ',', field.Value )
 
    for i, v in ipairs( values ) do
        v = HF.trim( v )
        if valid:in_database( v ) then
            -- Check if it's a valid value with a plural form.
            -- If yes - add category links
            table.insert(o, occupations:link( v ) )
        elseif v:match( '%[%[.*%]%]' ) then
            if v:match( '|' ) then
                local target, label = v:match('%[%[(.*)|(.*)%]%]')
                table.insert(o, HF.CategoryLink( 
                self:pluralize(target), vars.Pagename, label ))
            else
                local target = v:match('%[%[(.*)%]%]')
                table.insert(o, HF.CategoryLink( 
                self:pluralize(target), vars.Pagename, target ))
            end
        else
            -- 3. If no substitution is found
            -- fallback to a common grammar rules
            -- and add a page to a Category:Needs valid occupation
            table.insert( o , occupations:link( v ) ..
                HF.Category( "Needs valid occupation", vars.Pagename )
            )
        end
    end
 
    -- If Value2 or ValueRef is provided
    -- concatenate them to the output
    if not HF.isempty( field.Value2 ) then
        output = output .. " " .. field.Value2
    end
    if not HF.isempty( field.ValueRef ) then
        output = output .. " " .. field.ValueRef
    end
 
    return table.concat(o, ' ยท ') .. output
end
 
-------------------------------------------------
-- Output (send it back to whatever called it) --
-------------------------------------------------
return occupations
Community content is available under CC-BY-SA unless otherwise noted.

Bring Your DC Movies Together