shevchenko
Version:
JavaScript library for declension of Ukrainian anthroponyms
44 lines (41 loc) • 1.44 kB
JavaScript
/**
* @file JavaScript library for declension of Ukrainian anthroponyms
* @module shevchenko
* @version 3.2.2
* @author Oleksandr Tolochko <shevchenko-js@tooleks.com>
* @license MIT
* @copyright 2017-2026 Oleksandr Tolochko <shevchenko-js@tooleks.com>
* @see {@link git+https://github.com/tooleks/shevchenko-js.git}
*/
import '../../language/alphabet.js';
import { WordClass } from '../../language/word-class.js';
import '../../language/grammatical-case.js';
import '../../language/grammatical-gender.js';
class FamilyNameClassTransformer {
encode(familyNameClass) {
const values = new Uint8Array(1);
switch (familyNameClass.wordClass) {
case WordClass.NOUN:
values[0] = 1;
break;
case WordClass.ADJECTIVE:
values[0] = 0;
break;
default:
throw new TypeError(`Invalid word class: "${familyNameClass.wordClass}".`);
}
return values;
}
decode(values) {
if (values.length < 1 || values.length > 1) {
throw new RangeError('Invalid vector length.');
}
const value = values[0];
if (value < 0 || value > 1) {
throw new RangeError('Invalid vector value.');
}
const wordClass = value >= 0.5 ? WordClass.NOUN : WordClass.ADJECTIVE;
return { wordClass };
}
}
export { FamilyNameClassTransformer };