Module:Pluralize

From IxWiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:Pluralize/doc

local p = {}

-- Pluralize a word based on local dictionary or rules.
-- To use this directly in Lua, use common.pluralize instead
function p.pluralize( frame )
    local base = frame.args[ 1 ]
    local return_val
    local base_len = string.len( base )
    local base_end = string.sub( base, -1 )
    local base_last2 = string.sub( base, -2 )
    -- dictionary first - irregular plurals
    if (string.lower( base ) == 'nebula') then
        return_val = string.sub( base, 1, 1 ) .. 'ebulae'
    elseif (string.lower( base ) == 'torpedo') then
        return_val = string.sub( base, 1, 1 ) .. 'orpedoes'
        -- uncountable - so no plurals
    elseif (string.sub( base, -5 ) == 'armor') then
        return_val = base
        -- rules
    elseif (base_end == 'y') then
        if (base_last2 == 'ey') then
            -- ex - money
            return_val = string.sub( base, 1, base_len - 2 ) .. 'ies'
        else
            -- ex - Secretary
            return_val = string.sub( base, 1, base_len - 1 ) .. 'ies'
        end
    elseif (base_end == 'h') then
        if (base_last2 == 'ch' or base_last2 == 'sh') then
            -- ex church or fish
            return_val = base .. 'es'
        else
            -- ex - blah
            return_val = base .. 's'
        end
    elseif (base_end == 's') then -- ex - Idris - Or should we deal with things like crisis/crises as a rule?
        return_val = base
    elseif (base_end == 'e') then
        if (base_last2 == 'fe') then
            -- ex knife or wife
            return_val = string.sub( base, 1, base_len - 2 ) .. 'ves'
        else
            -- ex - blah
            return_val = base .. 's'
        end
    else -- default rule
        return_val = base .. 's'
    end
    return return_val
end

return p