pashto-inflector/src/lib/get-english-word.ts

63 lines
1.7 KiB
TypeScript
Raw Normal View History

2021-10-05 01:15:13 +00:00
import * as T from "../types";
/**
* returns the singular and plural english word for a Pashto entry if possible
* NOTE: only works with nouns and adjectives
*
2021-10-05 22:51:44 +00:00
* @param entry dictionary entry
* @returns undefined if not possible, string for adjective, { singular?: string, plural: string } for noun
2021-10-05 01:15:13 +00:00
*/
export function getEnglishWord(entry: T.DictionaryEntry): {
singular?: string,
plural: string,
2021-10-05 22:51:44 +00:00
} | string | undefined {
if (!entry.c) return undefined;
const isNoun = entry.c.includes("n.");
const isAdj = entry.c.includes("adj.");
2021-10-31 02:31:22 +00:00
const isAdv = entry.c.includes("adv.");
if (!isNoun && !isAdj && !isAdv) return undefined;
2021-10-05 22:51:44 +00:00
const base = entry.e.split(",")[0].split(";")[0].split("(")[0].trim();
2021-10-31 02:39:55 +00:00
if ((isAdj || isAdv) && !isNoun) {
2021-10-05 22:51:44 +00:00
return base;
2021-10-05 01:15:13 +00:00
}
if (entry.ec && entry.ep) {
return {
singular: entry.ec,
plural: entry.ep,
};
}
if (entry.c.includes("pl.")) {
return {
plural: base,
};
}
if (base.slice(-3) === "sis") {
return {
singular: base,
plural: `${base.slice(0, -2)}es`,
};
}
if (
["sh", "ch"].includes(base.slice(-2)) ||
["s", "x", "z", "o"].includes(base.slice(-1))
) {
return {
singular: base,
plural: `${base}es`,
};
}
if (base.slice(-1) === "y" && !isVowel(base.slice(-2, -1))) {
return {
singular: base,
plural: `${base.slice(0, -1)}ies`,
};
}
return {
singular: base,
plural: `${base}s`,
};
}
function isVowel(l: string): boolean {
return ["a", "e", "i", "o", "u"].includes(l);
}