Ошибка в функции inflect.
Вместо:
function inflect (gender, name, gcase, nametype) {
var nametype_rulesets = rules[nametype],
parts = name.split('-'),
result = [];
for (var k in parts) {
var part = parts[k],
first_word = k === 0 && parts.size > 1,
rule = find_rule_global(gender, name,
nametype_rulesets, {first_word: first_word});
if (rule) result.push(apply_rule(name, gcase, rule));
else result.push(name);
}
return result.join('-');
}
Должно быть:
function inflect (gender, name, gcase, nametype) {
var nametype_rulesets = rules[nametype],
parts = name.split('-'),
result = [];
for (var k in parts) {
var part = parts[k],
first_word = k === 0 && parts.size > 1,
rule = find_rule_global(gender, part,
nametype_rulesets, {first_word: first_word});
if (rule) result.push(apply_rule(part, gcase, rule));
else result.push(part);
}
return result.join('-');
}
Например: дательный падеж "Сидорова-Петрова Маша Ивановна" выдаёт "Сидорова-Петровой-Сидорова-Петровой Маше Ивановне" дательный падеж "Тер-Петрова Маша Ивановна" выдаёт "Тер-Петровой-Тер-Петровой Маше Ивановне".
Ошибка в функции inflect. Вместо: function inflect (gender, name, gcase, nametype) { var nametype_rulesets = rules[nametype], parts = name.split('-'), result = []; for (var k in parts) { var part = parts[k], first_word = k === 0 && parts.size > 1, rule = find_rule_global(gender, name, nametype_rulesets, {first_word: first_word}); if (rule) result.push(apply_rule(name, gcase, rule)); else result.push(name); } return result.join('-'); }
Должно быть: function inflect (gender, name, gcase, nametype) { var nametype_rulesets = rules[nametype], parts = name.split('-'), result = []; for (var k in parts) { var part = parts[k], first_word = k === 0 && parts.size > 1, rule = find_rule_global(gender, part, nametype_rulesets, {first_word: first_word}); if (rule) result.push(apply_rule(part, gcase, rule)); else result.push(part); } return result.join('-'); }
Тесты: expect(p({gender: 'female', last: 'Сидорова-Петрова', first: 'Маша', middle: 'Ивановна'}, 'dative')) .toEqual({gender: 'female', last: 'Сидоровой-Петровой', first: 'Маше', middle: 'Ивановне'})
expect(p({gender: 'female', last: 'Тер-Петрова', first: 'Маша', middle: 'Ивановна'}, 'dative')) .toEqual({gender: 'female', last: 'Тер-Петровой', first: 'Маше', middle: 'Ивановне'})