1 /* Contributor(s): 2 * 3 * Boris Buklov (BBV) <buklov@mail.ru> 4 * 5 * mod_say_ru.c -- Say for Russian 6 * 7 */ 8 9 10 //слишком много падежей поэтому пришлось сделать массив значений 11 //пример таблицы склонений для 1 ниже по ссылкам 12 //http://ru.wiktionary.org/wiki/%D0%BE%D0%B4%D0%B8%D0%BD 13 //http://ru.wiktionary.org/wiki/%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9 14 15 16 17 typedef enum { 18 million, 19 thousand, 20 zero, 21 empty 22 } unit_t; 23 24 //тип числа порядковое или количественное 25 typedef enum { 26 nominativus, // именительный Кто? Что? 27 genitivus, // Родительный Кого? Чего? 28 dativus, // дательный Кого? Что? 29 accusativus_a, // Винительный Кого? animate - одушевлённый 30 accusativus_i, // Винительный Что? inanimate - неодушевлённый 31 instrumentalis, // Творительный Кем? Чем? 32 prepositive // Предложный О ком? О чём? 33 } cases_t; 34 35 36 typedef enum { 37 //количественный 38 male, //мужского пола 39 it, //среднего 40 female, //женского 41 plural, //множественное число 42 //порядковый 43 male_h, //порядковое мужского пола 44 it_h, //порядковое среднего 45 female_h, //порядковое женского 46 plural_h //порядковое множественное число 47 } say_gender_t; 48 49 50 typedef enum { 51 ruble, 52 dollar, 53 euro 54 } currency_t; 55 56 57 58 typedef struct { 59 say_gender_t gender; 60 cases_t cases; 61 currency_t currency; 62 } say_opt_t; 63 64 65 struct say_t { 66 char *num[8]; 67 char *thousand[14]; 68 char *million[14]; 69 int all; 70 }; 71 struct say_cur_t { 72 char *first[6]; 73 say_gender_t first_gender; 74 cases_t first_cases; 75 char *second[6]; 76 say_gender_t second_gender; 77 cases_t second_cases; 78 79 }; 80 81 // описываем как произносить валяюты от 0 до 5 дальше идёт номер рода и падежа (с нуля) 82 //рубли 83 #define c_0 {{"rubles","ruble","ruble-a","ruble-a","ruble-a","rubles"},male,nominativus,\ 84 {"kopecks","kopeck","kopeck-i","kopeck-i","kopeck-i","kopecks"},female,nominativus} 85 86 #define c_1 {{"dollars","dollar","dollara","dollara","dollara","dollars"},male,nominativus,\ 87 {"centov","cent","centa","centa","centa","centov"},male,nominativus} 88 89 #define c_2 {{"rubles","ruble","ruble-a","ruble-a","ruble-a","rubles"},male,nominativus,\ 90 {"kopecks","kopeck","kopeck-i","kopeck-i","kopeck-i","kopecks"},female,nominativus} 91 92 93 94 95 typedef switch_status_t (*switch_new_say_callback_ru_t) (switch_say_file_handle_t *sh, char *tosay, switch_say_args_t *say_args,say_opt_t *say_opt); 96 97 //именительный 98 //именительный количественный/числительное 99 100 //мужской род родительный падеж 101 102 //первая строка описывае как произносить цифры от 0 до 5 потом пристаставка и окончания для остальных 103 // тоже самое для тысяч и миллионов, только ещё с произношением тысяч и миллионов в конце так же окончание для цифр 104 // как произносить тысячи и миллионы берёт с цифры 5 105 106 #define m_00 {\ 107 {"0","1","2","3","4","5","",""},\ 108 {"","","1f","thousand","2f","thousands-i","3","thousands-i","4","thousands-i","5","thousands","",""},\ 109 {"","","1","million","2","million-a","3","million-a","4","million-a","5","millions","",""},\ 110 0,\ 111 }\ 112 //средний род именительный падеж 113 #define m_01 {\ 114 {"0","1n","2","3","4","5","",""},\ 115 {"","","1f","thousand","2f","thousands-i","3","thousands-i","4","thousands-i","5","thousands","",""},\ 116 {"","","","million","2","million-a","3","million-a","4","million-a","5","millions","",""},\ 117 0,\ 118 }\ 119 120 //женский 121 #define m_02 {\ 122 {"0","1f","2f","3","4","5","",""},\ 123 {"","","1f","thousand","2f","thousands-i","3","thousands-i","4","thousands-i","5","thousands","",""},\ 124 {"","","1","million","2","million-a","3","million-a","4","million-a","5","millions","",""},\ 125 0,\ 126 }\ 127 128 //множественное число 129 #define m_03 {\ 130 {"","","","","","","",""},\ 131 {"","","","","","","","","","","","","",""},\ 132 {"","","","","","","","","","","","","",""},\ 133 0,\ 134 }\ 135 136 //порядковый 137 //мужской 138 #define m_04 {\ 139 {"h-0m","h-1m","h-2m","h-3m","h-4m","h-5m","h-","m"},\ 140 {"","","1f","thousand","2f","thousands-i","3","thousands-i","4","thousands-i","5","thousands","",""},\ 141 {"","","","million","2","million-a","3","million-a","4","million-a","5","millions","",""},\ 142 0,\ 143 }\ 144 //средний 145 146 #define m_05 {\ 147 {"0","1n","2","3","4","5","",""},\ 148 {"","","1f","thousand","2f","thousands-i","3","thousands-i","4","thousands-i","5","thousands","",""},\ 149 {"","","","million","2","million-a","3","million-a","4","million-a","5","millions","",""},\ 150 0,\ 151 }\ 152 153 //женский 154 #define m_06 {\ 155 {"h-0f","h-1f","h-2f","h-3f","h-4f","h-5f","h-","f"},\ 156 {"","","1f","thousand","2f","thousands-i","3","thousands-i","4","thousands-i","5","thousands","",""},\ 157 {"","","1","million","2","million-a","3","million-a","4","million-a","5","millions","",""},\ 158 0,\ 159 }\ 160 161 //множественное число 162 #define m_07 {\ 163 {"","","","","","","",""},\ 164 {"","","","","","","","","","","","","",""},\ 165 {"","","","","","","","","","","","","",""},\ 166 0,\ 167 }\ 168 169 170 171 //Родительный Кого? Чего? 172 //количественный/числительное 173 //мужской 174 #define m_10 {\ 175 {"","","","","","","",""},\ 176 {"","","","","","","","","","","","","",""},\ 177 {"","","","","","","","","","","","","",""},\ 178 0,\ 179 }\ 180 //средний 181 #define m_11 {\ 182 {"","","","","","","",""},\ 183 {"","","","","","","","","","","","","",""},\ 184 {"","","","","","","","","","","","","",""},\ 185 0,\ 186 }\ 187 188 //женский 189 #define m_12 {\ 190 {"0","h-1xx","h-2xx","h-3xx","h-4xx","h-5xx","h-","xx"},\ 191 {"","","1xx","thousands-i","h-2xx","thousands","h-3xx","thousands","h-4xx","thousands","h-5xx","thousands","h-","xx"},\ 192 {"","","1x","million-a","h-2xx","millions","h-3xx","millions","h-4xx","millions","h-5xx","millions","h-","xx"},\ 193 0,\ 194 }\ 195 196 //множественное число 197 #define m_13 {\ 198 {"","","","","","","",""},\ 199 {"","","","","","","","","","","","","",""},\ 200 {"","","","","","","","","","","","","",""},\ 201 0,\ 202 }\ 203 204 //порядковый 205 //мужской 206 //родительный 207 #define m_14 {\ 208 {"h-0x","h-1x","h-2x","h-3x","h-4x","h-5x","h-","x"},\ 209 {"","","","h-thousandx","h-2xx","h-thousandx","h-3xx","h-thousandx","h-4xx","h-thousandx","h-5xx","h-thousandx","h-","xx"},\ 210 {"","","","h-millionx","h-2xx","h-millionx","h-3xx","h-millionx","h-4xx","h-millionx","h-5xx","h-millionx","h-","xx"},\ 211 0,\ 212 }\ 213 //средний 214 #define m_15 {\ 215 {"","","","","","","",""},\ 216 {"","","","","","","","","","","","","",""},\ 217 {"","","","","","","","","","","","","",""},\ 218 0,\ 219 }\ 220 //женский 221 #define m_16 {\ 222 {"","","","","","","",""},\ 223 {"","","","","","","","","","","","","",""},\ 224 {"","","","","","","","","","","","","",""},\ 225 0,\ 226 }\ 227 228 //множественное число 229 #define m_17 {\ 230 {"","","","","","","",""},\ 231 {"","","","","","","","","","","","","",""},\ 232 {"","","","","","","","","","","","","",""},\ 233 0,\ 234 }\ 235 236 237 238 //дательный Кого? Что? 239 //количественный/числительное 240 //мужской 241 #define m_20 {\ 242 {"","","","","","","",""},\ 243 {"","","","","","","","","","","","","",""},\ 244 {"","","","","","","","","","","","","",""},\ 245 0,\ 246 }\ 247 //средний 248 #define m_21 {\ 249 {"","","","","","","",""},\ 250 {"","","","","","","","","","","","","",""},\ 251 {"","","","","","","","","","","","","",""},\ 252 0,\ 253 }\ 254 255 //женский 256 #define m_22 {\ 257 {"","","","","","","",""},\ 258 {"","","","","","","","","","","","","",""},\ 259 {"","","","","","","","","","","","","",""},\ 260 0,\ 261 }\ 262 263 //множественное число 264 #define m_23 {\ 265 {"","","","","","","",""},\ 266 {"","","","","","","","","","","","","",""},\ 267 {"","","","","","","","","","","","","",""},\ 268 0,\ 269 }\ 270 271 //порядковый 272 //мужской 273 #define m_24 {\ 274 {"","","","","","","",""},\ 275 {"","","","","","","","","","","","","",""},\ 276 {"","","","","","","","","","","","","",""},\ 277 0,\ 278 }\ 279 //средний 280 #define m_25 {\ 281 {"","","","","","","",""},\ 282 {"","","","","","","","","","","","","",""},\ 283 {"","","","","","","","","","","","","",""},\ 284 0,\ 285 }\ 286 //женский 287 #define m_26 {\ 288 {"","","","","","","",""},\ 289 {"","","","","","","","","","","","","",""},\ 290 {"","","","","","","","","","","","","",""},\ 291 0,\ 292 }\ 293 294 //множественное число 295 #define m_27 {\ 296 {"","","","","","","",""},\ 297 {"","","","","","","","","","","","","",""},\ 298 {"","","","","","","","","","","","","",""},\ 299 0,\ 300 }\ 301 302 303 304 //Винительный Кого? animate - одушевлённый 305 //количественный/числительное 306 //мужской 307 #define m_30 {\ 308 {"","","","","","","",""},\ 309 {"","","","","","","","","","","","","",""},\ 310 {"","","","","","","","","","","","","",""},\ 311 0,\ 312 }\ 313 //средний 314 #define m_31 {\ 315 {"","","","","","","",""},\ 316 {"","","","","","","","","","","","","",""},\ 317 {"","","","","","","","","","","","","",""},\ 318 0,\ 319 }\ 320 321 //женский 322 #define m_32 {\ 323 {"","","","","","","",""},\ 324 {"","","","","","","","","","","","","",""},\ 325 {"","","","","","","","","","","","","",""},\ 326 0,\ 327 }\ 328 329 //множественное число 330 #define m_33 {\ 331 {"","","","","","","",""},\ 332 {"","","","","","","","","","","","","",""},\ 333 {"","","","","","","","","","","","","",""},\ 334 0,\ 335 }\ 336 337 //порядковый 338 //мужской 339 #define m_34 {\ 340 {"","","","","","","",""},\ 341 {"","","","","","","","","","","","","",""},\ 342 {"","","","","","","","","","","","","",""},\ 343 0,\ 344 }\ 345 //средний 346 #define m_35 {\ 347 {"","","","","","","",""},\ 348 {"","","","","","","","","","","","","",""},\ 349 {"","","","","","","","","","","","","",""},\ 350 0,\ 351 }\ 352 //женский 353 #define m_36 {\ 354 {"","","","","","","",""},\ 355 {"","","","","","","","","","","","","",""},\ 356 {"","","","","","","","","","","","","",""},\ 357 0,\ 358 }\ 359 360 //множественное число 361 #define m_37 {\ 362 {"","","","","","","",""},\ 363 {"","","","","","","","","","","","","",""},\ 364 {"","","","","","","","","","","","","",""},\ 365 0,\ 366 }\ 367 368 369 370 //Винительный Что? inanimate - неодушевлённый 371 //количественный/числительное 372 //мужской 373 #define m_40 {\ 374 {"","","","","","","",""},\ 375 {"","","","","","","","","","","","","",""},\ 376 {"","","","","","","","","","","","","",""},\ 377 0,\ 378 }\ 379 //средний 380 #define m_41 {\ 381 {"","","","","","","",""},\ 382 {"","","","","","","","","","","","","",""},\ 383 {"","","","","","","","","","","","","",""},\ 384 0,\ 385 }\ 386 387 //женский 388 #define m_42 {\ 389 {"","","","","","","",""},\ 390 {"","","","","","","","","","","","","",""},\ 391 {"","","","","","","","","","","","","",""},\ 392 0,\ 393 }\ 394 395 //множественное число 396 #define m_43 {\ 397 {"","","","","","","",""},\ 398 {"","","","","","","","","","","","","",""},\ 399 {"","","","","","","","","","","","","",""},\ 400 0,\ 401 }\ 402 403 //порядковый 404 //мужской 405 #define m_44 {\ 406 {"","","","","","","",""},\ 407 {"","","","","","","","","","","","","",""},\ 408 {"","","","","","","","","","","","","",""},\ 409 0,\ 410 }\ 411 //средний 412 #define m_45 {\ 413 {"","","","","","","",""},\ 414 {"","","","","","","","","","","","","",""},\ 415 {"","","","","","","","","","","","","",""},\ 416 0,\ 417 }\ 418 //женский 419 #define m_46 {\ 420 {"","","","","","","",""},\ 421 {"","","","","","","","","","","","","",""},\ 422 {"","","","","","","","","","","","","",""},\ 423 0,\ 424 }\ 425 426 //множественное число 427 #define m_47 {\ 428 {"","","","","","","",""},\ 429 {"","","","","","","","","","","","","",""},\ 430 {"","","","","","","","","","","","","",""},\ 431 0,\ 432 }\ 433 434 435 436 //Творительный Кем? Чем? 437 //количественный/числительное 438 //мужской 439 #define m_50 {\ 440 {"","","","","","","",""},\ 441 {"","","","","","","","","","","","","",""},\ 442 {"","","","","","","","","","","","","",""},\ 443 0,\ 444 }\ 445 //средний 446 #define m_51 {\ 447 {"","","","","","","",""},\ 448 {"","","","","","","","","","","","","",""},\ 449 {"","","","","","","","","","","","","",""},\ 450 0,\ 451 }\ 452 453 //женский 454 #define m_52 {\ 455 {"","","","","","","",""},\ 456 {"","","","","","","","","","","","","",""},\ 457 {"","","","","","","","","","","","","",""},\ 458 0,\ 459 }\ 460 461 //множественное число 462 #define m_53 {\ 463 {"","","","","","","",""},\ 464 {"","","","","","","","","","","","","",""},\ 465 {"","","","","","","","","","","","","",""},\ 466 0,\ 467 }\ 468 469 //порядковый 470 //мужской 471 #define m_54 {\ 472 {"","","","","","","",""},\ 473 {"","","","","","","","","","","","","",""},\ 474 {"","","","","","","","","","","","","",""},\ 475 0,\ 476 }\ 477 //средний 478 #define m_55 {\ 479 {"","","","","","","",""},\ 480 {"","","","","","","","","","","","","",""},\ 481 {"","","","","","","","","","","","","",""},\ 482 0,\ 483 }\ 484 //женский 485 #define m_56 {\ 486 {"","","","","","","",""},\ 487 {"","","","","","","","","","","","","",""},\ 488 {"","","","","","","","","","","","","",""},\ 489 0,\ 490 }\ 491 492 //множественное число 493 #define m_57 {\ 494 {"","","","","","","",""},\ 495 {"","","","","","","","","","","","","",""},\ 496 {"","","","","","","","","","","","","",""},\ 497 0,\ 498 }\ 499 500 501 502 //Предложный О ком? О чём? 503 //количественный/числительное 504 //мужской 505 #define m_60 {\ 506 {"","","","","","","",""},\ 507 {"","","","","","","","","","","","","",""},\ 508 {"","","","","","","","","","","","","",""},\ 509 0,\ 510 }\ 511 //средний 512 #define m_61 {\ 513 {"","","","","","","",""},\ 514 {"","","","","","","","","","","","","",""},\ 515 {"","","","","","","","","","","","","",""},\ 516 0,\ 517 }\ 518 519 //женский 520 #define m_62 {\ 521 {"","","","","","","",""},\ 522 {"","","","","","","","","","","","","",""},\ 523 {"","","","","","","","","","","","","",""},\ 524 0,\ 525 }\ 526 527 //множественное число 528 #define m_63 {\ 529 {"","","","","","","",""},\ 530 {"","","","","","","","","","","","","",""},\ 531 {"","","","","","","","","","","","","",""},\ 532 0,\ 533 }\ 534 535 //порядковый 536 //мужской 537 #define m_64 {\ 538 {"","","","","","","",""},\ 539 {"","","","","","","","","","","","","",""},\ 540 {"","","","","","","","","","","","","",""},\ 541 0,\ 542 }\ 543 //средний 544 #define m_65 {\ 545 {"","","","","","","",""},\ 546 {"","","","","","","","","","","","","",""},\ 547 {"","","","","","","","","","","","","",""},\ 548 0,\ 549 }\ 550 //женский 551 #define m_66 {\ 552 {"","","","","","","",""},\ 553 {"","","","","","","","","","","","","",""},\ 554 {"","","","","","","","","","","","","",""},\ 555 0,\ 556 }\ 557 558 //множественное число 559 #define m_67 {\ 560 {"","","","","","","",""},\ 561 {"","","","","","","","","","","","","",""},\ 562 {"","","","","","","","","","","","","",""},\ 563 0,\ 564 }\ 565 566 567 568 //именительный 569 //именительный количественный/числительное 570 //мужской 571 #define m_60 {\ 572 {"","","","","","","",""},\ 573 {"","","","","","","","","","","","","",""},\ 574 {"","","","","","","","","","","","","",""},\ 575 0,\ 576 }\ 577 //средний 578 #define m_61 {\ 579 {"","","","","","","",""},\ 580 {"","","","","","","","","","","","","",""},\ 581 {"","","","","","","","","","","","","",""},\ 582 0,\ 583 }\ 584 585 //женский 586 #define m_62 {\ 587 {"","","","","","","",""},\ 588 {"","","","","","","","","","","","","",""},\ 589 {"","","","","","","","","","","","","",""},\ 590 0,\ 591 }\ 592 593 //множественное число 594 #define m_63 {\ 595 {"","","","","","","",""},\ 596 {"","","","","","","","","","","","","",""},\ 597 {"","","","","","","","","","","","","",""},\ 598 0,\ 599 }\ 600 601 //порядковый 602 //мужской 603 #define m_64 {\ 604 {"","","","","","","",""},\ 605 {"","","","","","","","","","","","","",""},\ 606 {"","","","","","","","","","","","","",""},\ 607 0,\ 608 }\ 609 //средний 610 #define m_65 {\ 611 {"","","","","","","",""},\ 612 {"","","","","","","","","","","","","",""},\ 613 {"","","","","","","","","","","","","",""},\ 614 0,\ 615 }\ 616 //женский 617 #define m_66 {\ 618 {"","","","","","","",""},\ 619 {"","","","","","","","","","","","","",""},\ 620 {"","","","","","","","","","","","","",""},\ 621 0,\ 622 }\ 623 624 //множественное число 625 #define m_67 {\ 626 {"","","","","","","",""},\ 627 {"","","","","","","","","","","","","",""},\ 628 {"","","","","","","","","","","","","",""},\ 629 0,\ 630 }\ 631 632