@yar.ua/numerals
Version:
Number to text - Inflector for Ukrainian numerals
73 lines (72 loc) • 2.41 kB
JavaScript
import { Case, GrammaticalNumber } from "../grammar.js";
export var Relation;
(function (Relation) {
Relation["num"] = "num";
Relation["nmod"] = "nmod";
Relation["amod"] = "amod";
Relation["nummod"] = "nummod";
Relation["nummod_govsg"] = "nummod:govsg";
Relation["nummod_govpc"] = "nummod:govpc";
Relation["nummod_govpl"] = "nummod:govpl";
})(Relation || (Relation = {}));
export const RelationDef = {
[Relation.num]: {
modifier: (src, dst) => ({}),
governing: (src, dst) => ({}),
},
[Relation.amod]: {
modifier: (src, dst) => src.form(),
governing: (src, dst) => ({}),
},
[Relation.nmod]: {
modifier: (src, dst) => ({
["case"]: Case.genitive,
gender: src.form().gender,
["number"]: src.form()["number"],
animacy: src.form().animacy,
}),
governing: (src, dst) => ({}),
},
[Relation.nummod]: {
modifier: (src, dst) => ({
["case"]: src.form()["case"],
gender: src.form().gender,
["number"]: src.form()["number"],
animacy: src.form().animacy,
}),
governing: (src, dst) => ({}),
},
[Relation.nummod_govsg]: {
modifier: (src, dst) => ({
["case"]: src.form()["case"],
gender: src.form().gender,
["number"]: src.form()["number"],
animacy: src.form().animacy,
}),
governing: (src, dst) => ({ ["number"]: GrammaticalNumber.singular }),
},
[Relation.nummod_govpc]: {
modifier: (src, dst) => ({
["case"]: src.form()["case"],
gender: src.form().gender,
["number"]: src.form()["number"],
animacy: src.form().animacy,
}),
governing: (src, dst) => ({ ["number"]: GrammaticalNumber.plural }),
},
[Relation.nummod_govpl]: {
modifier: (src, dst) => ({
["case"]: src.form()["case"],
gender: src.form().gender,
["number"]: src.form()["number"],
animacy: src.form().animacy,
}),
governing: (src, dst) => {
const form = { ["number"]: GrammaticalNumber.plural };
if ([Case.nominative, Case.accusative].includes(dst.form()["case"])) {
form["case"] = Case.genitive;
}
return form;
},
},
};