pluralise <- function( s, n ) {
result <- s
if( n != 1 ) {
if( pl.noninflective( s ) ||
pl.suffix( "es", s ) ||
pl.suffix( "fish", s ) ||
pl.suffix( "ois", s ) ||
pl.suffix( "sheep", s ) ||
pl.suffix( "deer", s ) ||
pl.suffix( "pox", s ) ||
pl.suffix( "[A-Z].*ese", s ) ||
pl.suffix( "itis", s ) ) {
result <- s
}
else if( pl.is.irregular.pl( s ) ) {
result <- pl.irregular.pl( s )
}
else if( pl.is.irregular.es( s ) ) {
result <- pl.inflect( s, "", "es" )
}
else if( pl.suffix( "man", s ) ) {
result <- pl.inflect( s, "an", "en" )
}
else if( pl.suffix( "[lm]ouse", s ) ) {
result <- pl.inflect( s, "ouse", "ice" )
}
else if( pl.suffix( "tooth", s ) ) {
result <- pl.inflect( s, "ooth", "eeth" )
}
else if( pl.suffix( "goose", s ) ) {
result <- pl.inflect( s, "oose", "eese" )
}
else if( pl.suffix( "foot", s ) ) {
result <- pl.inflect( s, "oot", "eet" )
}
else if( pl.suffix( "zoon", s ) ) {
result <- pl.inflect( s, "on", "a" )
}
else if( pl.suffix( "[csx]is", s ) ) {
result <- pl.inflect( s, "is", "es" )
}
else if( pl.suffix( "([cs]h|ss|zz|x|s)", s ) ) {
result <- pl.inflect( s, "", "es" )
}
else if( pl.suffix( "([aeo]lf|[^d]eaf|arf)", s ) ) {
result <- pl.inflect( s, "f", "ves" )
}
else if( pl.suffix( "[nlw]ife", s ) ) {
result <- pl.inflect( s, "fe", "ves" )
}
else if( pl.suffix( "[aeiou]y", s ) ) {
result <- pl.inflect( s, "", "s" )
}
else if( pl.suffix( "y", s ) ) {
result <- pl.inflect( s, "y", "ies" )
}
else if( pl.suffix( "z", s ) ) {
result <- pl.inflect( s, "", "zes" )
}
else {
result <- pl.inflect( s, "", "s" )
}
}
result
}
pl.inflect <- function( s, suffix, r ) {
gsub( paste( suffix, "$", sep="" ), r, s )
}
pl.suffix <- function( ending, s ) {
grepl( paste( ending, "$", sep="" ), s )
}
pl.noninflective <- function( s ) {
v <- c(
"aircraft",
"Bhutanese",
"bison",
"bream",
"Burmese",
"carp",
"chassis",
"Chinese",
"clippers",
"cod",
"contretemps",
"corps",
"debris",
"djinn",
"eland",
"elk",
"flounder",
"fracas",
"gallows",
"graffiti",
"headquarters",
"high-jinks",
"homework",
"hovercraft",
"innings",
"Japanese",
"Lebanese",
"mackerel",
"means",
"mews",
"mice",
"mumps",
"news",
"pincers",
"pliers",
"Portuguese",
"proceedings",
"salmon",
"scissors",
"sea-bass",
"Senegalese",
"shears",
"Siamese",
"Sinhalese",
"spacecraft",
"swine",
"trout",
"tuna",
"Vietnamese",
"watercraft",
"whiting",
"wildebeest"
)
is.element( s, v )
}
pl.is.irregular.pl <- function( s ) {
v <- c(
"beef", "brother", "child", "cow", "ephemeris", "genie", "money",
"mongoose", "mythos", "octopus", "ox", "soliloquy", "trilby"
)
is.element( s, v )
}
pl.irregular.pl <- function( s ) {
v <- list(
"beef" = "beefs",
"brother" = "brothers",
"child" = "children",
"cow" = "cows",
"ephemeris" = "ephemerides",
"genie" = "genies",
"money" = "moneys",
"mongoose" = "mongooses",
"mythos" = "mythoi",
"octopus" = "octopuses",
"ox" = "oxen",
"soliloquy" = "soliloquies",
"trilby" = "trilbys"
)
.subset2( v, s )
}
pl.is.irregular.es <- function( s ) {
v <- c(
"acropolis", "aegis", "alias", "asbestos", "bathos", "bias", "bronchitis",
"bursitis", "caddis", "cannabis", "canvas", "chaos", "cosmos", "dais",
"digitalis", "epidermis", "ethos", "eyas", "gas", "glottis", "hubris",
"ibis", "lens", "mantis", "marquis", "metropolis", "pathos", "pelvis",
"polis", "rhinoceros", "sassafrass", "trellis"
)
is.element( s, v )
}