shevchenko
Version:
JavaScript library for declension of Ukrainian anthroponyms
42 lines (38 loc) • 1.65 kB
JavaScript
/**
* @file JavaScript library for declension of Ukrainian anthroponyms
* @module shevchenko
* @version 3.1.4
* @author Oleksandr Tolochko <shevchenko-js@tooleks.com>
* @license MIT
* @copyright 2017-2025 Oleksandr Tolochko <shevchenko-js@tooleks.com>
* @see {@link git+https://github.com/tooleks/shevchenko-js.git}
*/
;
var givenNameRules = require('./artifacts/given-name-rules.json.js');
var patronymicNameRules = require('./artifacts/patronymic-name-rules.json.js');
var grammaticalGenderDetector = require('./grammatical-gender-detector.js');
const givenNameDetector = new grammaticalGenderDetector.GrammaticalGenderDetector({
masculinePattern: new RegExp(givenNameRules.default.masculine, 'i'),
femininePattern: new RegExp(givenNameRules.default.feminine, 'i'),
});
const patronymicNameDetector = new grammaticalGenderDetector.GrammaticalGenderDetector({
masculinePattern: new RegExp(patronymicNameRules.default.masculine, 'i'),
femininePattern: new RegExp(patronymicNameRules.default.feminine, 'i'),
});
/**
* Detects the grammatical gender of the anthroponym using
* patronymic name or given name endings.
*
* Returns the grammatical gender of the anthroponym.
* Returns null if the grammatical gender of the anthroponym cannot be detected.
*/
function detectGender(anthroponym) {
if (anthroponym.patronymicName) {
return patronymicNameDetector.detect(anthroponym.patronymicName.toLocaleLowerCase());
}
if (anthroponym.givenName) {
return givenNameDetector.detect(anthroponym.givenName.toLocaleLowerCase());
}
return null;
}
exports.detectGender = detectGender;