petrovich / petrovich-js

JS library to inflect Russian first, last, and middle names.
MIT License
311 stars 17 forks source link

Неправильно склоняются составные фамилии #3

Closed Vasya-Chajko closed 9 years ago

Vasya-Chajko commented 9 years ago

Например: дательный падеж "Сидорова-Петрова Маша Ивановна" выдаёт "Сидорова-Петровой-Сидорова-Петровой Маше Ивановне" дательный падеж "Тер-Петрова Маша Ивановна" выдаёт "Тер-Петровой-Тер-Петровой Маше Ивановне".

Ошибка в функции 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: 'Ивановне'})