"tuna", "yaki", "-hai", "krill", "manes",
"moose", "ninja", "sheep", "ronin", "roshi",
"shito", "tengu", "ki-rin", "Nazgul", "gunyoki",
- "piranha", "samurai", "shuriken", "haggis", 0,
+ "piranha", "samurai", "shuriken", "haggis", "Bordeaux",
+ 0,
/* Note: "fish" and "piranha" are collective plurals, suitable
for "wiped out all <foo>". For "3 <foo>", they should be
"fishes" and "piranhas" instead. We settle for collective
" versus ", " from ", " in ",
" on ", " a la ", " with", /* " with "? */
" de ", " d'", " du ",
- "-in-", "-at-", 0
+ "-in-", "-at-", " au ",
+ 0
}, /* list of first characters for all compounds[] entries */
compound_start[] = " -";
{
static const char *const already_plural[] = {
"ae", /* algae, larvae, &c */
+ "eaux", /* chateaux, gateaux */
"matzot", 0,
};
Strcasecpy(spot - 1, "es");
goto bottom;
}
+ /* -eau/-eaux (gateau, chapeau...) */
+ if (len >= 3 && !strcmpi(spot - 2, "eau")
+ /* 'bureaus' is the more common plural of 'bureau' */
+ && strncmpi(str, "bureau", 6)) {
+ Strcasecpy(spot + 1, "x");
+ goto bottom;
+ }
/* matzoh/matzot, possible food name */
if (len >= 6
&& (!strcmpi(spot - 5, "matzoh") || !strcmpi(spot - 5, "matzah"))) {
goto bottom;
}
- /* note: -eau/-eaux (gateau, bordeau...) */
/* note: ox/oxen, VAX/VAXen, goose/geese */
lo_c = lowc(*spot);
goto bottom;
}
/* matzot -> matzo, algae -> alga */
- if (!BSTRCMPI(bp, p - 6, "matzot") || !BSTRCMPI(bp, p - 2, "ae")) {
- *(p - 1) = '\0'; /* drop t/e */
+ if (!BSTRCMPI(bp, p - 6, "matzot") || !BSTRCMPI(bp, p - 2, "ae")
+ || !BSTRCMPI(bp, p - 4, "eaux")) {
+ *(p - 1) = '\0'; /* drop t/e/x */
goto bottom;
}
/* balactheria -> balactherium */