Правильная форма существительного в зависимости от его количества.

Опубликовано в M4

Изначально такая функция потребовалась в lua, но оказалось, что она также бывает нужна и на этапе компоновки.

Вот так она будет выглядеть в варианте M4

 

define(`m4_string_case', `ifelse(eval(`$1'/10%10),1,`$4',eval(`$1'%10),1,`$2',eval(`$1'%10),2,`$3',eval(`$1'%10),3,`$3',eval(`$1'%10),4,`$3',`$4')')

 

Проверим:


1 m4_string_case(1,лось,лося,лосей)
2 m4_string_case(2,лось,лося,лосей)
3 m4_string_case(3,лось,лося,лосей)
4 m4_string_case(4,лось,лося,лосей)
5 m4_string_case(5,лось,лося,лосей)
6 m4_string_case(6,лось,лося,лосей)
11 m4_string_case(11,лось,лося,лосей)
12 m4_string_case(12,лось,лося,лосей)
13 m4_string_case(13,лось,лося,лосей)
14 m4_string_case(14,лось,лося,лосей)
15 m4_string_case(15,лось,лося,лосей)
115 m4_string_case(115,лось,лося,лосей)
1001 m4_string_case(1001,лось,лося,лосей)
1002 m4_string_case(1002,лось,лося,лосей)
1003 m4_string_case(1003,лось,лося,лосей)
1004 m4_string_case(1004,лось,лося,лосей)
1005 m4_string_case(1005,лось,лося,лосей)
1115 m4_string_case(1115,лось,лося,лосей)

 

Результат:

1 лось
2 лося
3 лося
4 лося
5 лосей
6 лосей
11 лосей
12 лосей
13 лосей
14 лосей
15 лосей
115 лосей
1001 лось
1002 лося
1003 лося
1004 лося
1005 лосей
1115 лосей

Недостаточно прав для комментирования

Библиотека