comparison mm7text_ru.cpp @ 246:1bfe546561c4

sprintfex
author Nomad
date Mon, 18 Feb 2013 03:58:08 +0200
parents
children 37dcbe8f3cca
comparison
equal deleted inserted replaced
236:99ef31ffa74e 246:1bfe546561c4
1 #include <string.h>
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <assert.h>
5
6 #include "Log.h"
7
8
9 struct GenderTableEntry
10 {
11 const char *name;
12 int gender;
13 } gender_table_caps[] =
14 {
15 {"Авель", 0},
16 {"Адам", 0},
17 {"Адриан", 0},
18 {"Адрианис", 0},
19 {"Адская", 1},
20 {"Айр", 0},
21 {"Акио", 0},
22 {"Акира", 0},
23 {"Алан", 0},
24 {"Алейн", 0},
25 {"Алек", 0},
26 {"Александр", 0},
27 {"Ален", 0},
28 {"Алехандро", 0},
29 {"Алиса", 1},
30 {"Альберт", 0},
31 {"Альтон", 0},
32 {"Альтред", 0},
33 {"Альфред", 0},
34 {"Аманда", 1},
35 {"Амбер", 1},
36 {"Амброзий", 0},
37 {"Амелия", 1},
38 {"Амос", 0},
39 {"Ангел", 0},
40 {"Андреа", 1},
41 {"Андрей", 0},
42 {"Анжела", 1},
43 {"Анита", 1},
44 {"Анна", 1},
45 {"Антон", 0},
46 {"Антоний", 0},
47 {"Арби", 0},
48 {"Арда", 0},
49 {"Арден", 0},
50 {"Арена", 1},
51 {"Аристей", 0},
52 {"Аристидис", 0},
53 {"Арих", 0},
54 {"Ариэль", 0},
55 {"Арлен", 0},
56 {"Арло", 0},
57 {"Арманд", 0},
58 {"Арнольд", 0},
59 {"Арон", 0},
60 {"Артур", 0},
61 {"Архангел", 0},
62 {"Архимаг", 0},
63 {"Ахмед", 0},
64 {"Бёртон", 0},
65 {"Бад", 0},
66 {"Байрон", 0},
67 {"Бандит", 0},
68 {"Бар", 0},
69 {"Барбара", 1},
70 {"Баретт", 0},
71 {"Барт", 0},
72 {"Батч", 0},
73 {"Беатрис", 1},
74 {"Беверли", 1},
75 {"Беки", 1},
76 {"Белинда", 1},
77 {"Бен", 0},
78 {"Бенджамин", 0},
79 {"Бенедикт", 0},
80 {"Бенито", 0},
81 {"Беннет", 0},
82 {"Бенни", 0},
83 {"Бенуа", 0},
84 {"Бернадетта", 1},
85 {"Бернард", 0},
86 {"Берни", 0},
87 {"Бернис", 1},
88 {"Бернучо", 0},
89 {"Берт", 0},
90 {"Бертран", 0},
91 {"Бет", 1},
92 {"Бетси", 1},
93 {"Бетти", 1},
94 {"Билли", 0},
95 {"Биллис", 1},
96 {"Бишоп", 0},
97 {"Блейк", 0},
98 {"Блейн", 0},
99 {"Блондо", 0},
100 {"Бо", 0},
101 {"Боб", 0},
102 {"Бобби", 0},
103 {"Бодо", 0},
104 {"Болотный", 0},
105 {"Большой", 0},
106 {"Бонни", 1},
107 {"Борегард", 0},
108 {"Борис", 0},
109 {"Браден", 0},
110 {"Брайс", 0},
111 {"Брат", 0},
112 {"Брейн", 0},
113 {"Бренда", 1},
114 {"Брендон", 0},
115 {"Брент", 0},
116 {"Брет", 0},
117 {"Бронвин", 0},
118 {"Бронзовый", 0},
119 {"Брук", 0},
120 {"Бруно", 0},
121 {"Брэд", 0},
122 {"Брэдли", 0},
123 {"Брэдфорд", 0},
124 {"Брэндон", 0},
125 {"Брюс", 0},
126 {"Буфорд", 0},
127 {"Вадим", 0},
128 {"Вал", 0},
129 {"Валерия", 1},
130 {"Вальтер", 0},
131 {"Ванда", 1},
132 {"Ванесса", 1},
133 {"Ванетта", 1},
134 {"Ванс", 0},
135 {"Вейн", 0},
136 {"Великий", 0},
137 {"Венделл", 0},
138 {"Венди", 1},
139 {"Вера", 1},
140 {"Верн", 0},
141 {"Вернон", 0},
142 {"Вероника", 1},
143 {"Верховная", 1},
144 {"Весли", 0},
145 {"Виверн", 0},
146 {"Вивьен", 1},
147 {"Вики", 1},
148 {"Виктор", 0},
149 {"Викторис", 0},
150 {"Виктория", 1},
151 {"Вилам", 0},
152 {"Вилл", 0},
153 {"Виллард", 0},
154 {"Вильма", 1},
155 {"Вильфред", 0},
156 {"Вильям", 0},
157 {"Винный", 0},
158 {"Винстон", 0},
159 {"Винченцо", 0},
160 {"Виолет", 1},
161 {"Виргилий", 0},
162 {"Виргиния", 1},
163 {"Вихрь", 0},
164 {"Владимир", 0},
165 {"Властелин", 0},
166 {"Водный", 0},
167 {"Военное", 2},
168 {"Воздушная", 1},
169 {"Воздушный", 0},
170 {"Волхв", 0},
171 {"Вольг", 0},
172 {"Восставший", 0},
173 {"Врата", 1},
174 {"Вудро", 0},
175 {"Вурдалак", 0},
176 {"Высшая", 1},
177 {"Вэйд", 0},
178 {"Габриэль", 0},
179 {"Гай", 0},
180 {"Ганс", 0},
181 {"Гарет", 0},
182 {"Гари", 0},
183 {"Гарпия", 1},
184 {"Гарри", 0},
185 {"Гвендолин", 1},
186 {"Гвенн", 1},
187 {"Гейб", 0},
188 {"Гейл", 1},
189 {"Гектор", 0},
190 {"Гельмут", 0},
191 {"Геникки", 1},
192 {"Генри", 0},
193 {"Георгина", 1},
194 {"Герб", 0},
195 {"Герберт", 0},
196 {"Герман", 0},
197 {"Гертруда", 1},
198 {"Герц", 0},
199 {"Гигантская", 1},
200 {"Гильдия", 1},
201 {"Гильермо", 0},
202 {"Гильмор", 0},
203 {"Гимнастический", 0},
204 {"Глазище", 2},
205 {"Глен", 0},
206 {"Гленда", 1},
207 {"Глиняный", 0},
208 {"Глория", 1},
209 {"Гниющий", 0},
210 {"Гном", 0},
211 {"Гоблин", 0},
212 {"Говард", 0},
213 {"Гог", 0},
214 {"Гомер", 0},
215 {"Гонзало", 0},
216 {"Гораций", 0},
217 {"Гордон", 0},
218 {"Горный", 0},
219 {"Грабитель", 0},
220 {"Грант", 0},
221 {"Грахэм", 0},
222 {"Грег", 0},
223 {"Грегори", 0},
224 {"Грей", 0},
225 {"Гретхен", 1},
226 {"Грифон", 0},
227 {"Грозовой", 0},
228 {"Гус", 0},
229 {"Давид", 0},
230 {"Дайана", 1},
231 {"Дал", 0},
232 {"Даллас", 0},
233 {"Дамиан", 0},
234 {"Дана", 1},
235 {"Даниэль", 0},
236 {"Данте", 0},
237 {"Дара", 1},
238 {"Дарлин", 1},
239 {"Дарон", 0},
240 {"Дарси", 1},
241 {"Дастин", 0},
242 {"Дафна", 1},
243 {"Двайт", 0},
244 {"Двейн", 0},
245 {"Деанна", 1},
246 {"Дебби", 1},
247 {"Дебора", 1},
248 {"Девон", 0},
249 {"Дейв", 0},
250 {"Дейл", 0},
251 {"Дел", 0},
252 {"Делорис", 1},
253 {"Денис", 1},
254 {"Денни", 0},
255 {"Депозитарий", 0},
256 {"Дерево", 2},
257 {"Дерек", 0},
258 {"Десмонд", 0},
259 {"Джанис", 1},
260 {"Джастин", 0},
261 {"Джед", 0},
262 {"Джедай", 0},
263 {"Джей", 0},
264 {"Джейк", 0},
265 {"Джеймс", 0},
266 {"Джейн", 1},
267 {"Джейсон", 0},
268 {"Джек", 0},
269 {"Джеки", 1},
270 {"Джеми", 0},
271 {"Дженифер", 1},
272 {"Дженни", 1},
273 {"Джеральд", 0},
274 {"Джеральдина", 1},
275 {"Джером", 0},
276 {"Джероми", 0},
277 {"Джерри", 0},
278 {"Джесс", 0},
279 {"Джесса", 1},
280 {"Джессика", 1},
281 {"Джетано", 0},
282 {"Джим", 0},
283 {"Джин", 1},
284 {"Джина", 1},
285 {"Джинжер", 1},
286 {"Джинни", 1},
287 {"Джино", 0},
288 {"Джо", 2},
289 {"Джоан", 1},
290 {"Джоанн", 1},
291 {"Джоанна", 1},
292 {"Джозеф", 0},
293 {"Джой", 0},
294 {"Джойс", 1},
295 {"Джойсин", 1},
296 {"Джон", 0},
297 {"Джонатан", 0},
298 {"Джордж", 0},
299 {"Джоу", 0},
300 {"Джошуа", 0},
301 {"Джоэль", 0},
302 {"Джуд", 0},
303 {"Джуди", 1},
304 {"Джудис", 1},
305 {"Джули", 1},
306 {"Джун", 1},
307 {"Диана", 1},
308 {"Дилан", 0},
309 {"Дин", 0},
310 {"Дитер", 0},
311 {"Додридж", 0},
312 {"Док", 0},
313 {"Долорес", 1},
314 {"Дольф", 0},
315 {"Дом", 0},
316 {"Доминик", 0},
317 {"Доминика", 1},
318 {"Дон", 0},
319 {"Донайс", 1},
320 {"Дональд", 0},
321 {"Донна", 1},
322 {"Дорин", 1},
323 {"Дорис", 1},
324 {"Дороти", 1},
325 {"Драконовая", 1},
326 {"Древнее", 2},
327 {"Древний", 0},
328 {"Друид", 0},
329 {"Дрю", 0},
330 {"Дуглас", 0},
331 {"Дункан", 0},
332 {"Дьявол", 0},
333 {"Дэви", 0},
334 {"Дэн", 0},
335 {"Дэнис", 0},
336 {"Дэнни", 0},
337 {"Дюк", 0},
338 {"Ева", 1},
339 {"Евгений", 0},
340 {"Елизавета", 1},
341 {"Жан-Поль", 0},
342 {"Жан-Пьер", 0},
343 {"Жанета", 1},
344 {"Жанетт", 1},
345 {"Жанетта", 1},
346 {"Жанин", 1},
347 {"Жанис", 1},
348 {"Жанна", 1},
349 {"Жасмин", 1},
350 {"Жейн", 1},
351 {"Женна", 1},
352 {"Жильбер", 0},
353 {"Жофрей", 0},
354 {"Жуль", 0},
355 {"Зак", 0},
356 {"Замок", 0},
357 {"Замороженные", 2},
358 {"Захарий", 0},
359 {"Зебулон", 0},
360 {"Зеленый", 0},
361 {"Земной", 0},
362 {"Зигги", 0},
363 {"Зик", 0},
364 {"Златые", 2},
365 {"Зод", 0},
366 {"Золотой", 0},
367 {"Золтан", 0},
368 {"Зорекс", 0},
369 {"Ив", 0},
370 {"Иван", 0},
371 {"Ивар", 0},
372 {"Иверсон", 0},
373 {"Ивонна", 1},
374 {"Игнасио", 0},
375 {"Игорь", 0},
376 {"Ида", 1},
377 {"Иеремия", 0},
378 {"Измаил", 0},
379 {"Изумрудный", 0},
380 {"Ике", 0},
381 {"Илена", 1},
382 {"Илья", 0},
383 {"Имение", 2},
384 {"Инкубатор", 0},
385 {"Иоланда", 1},
386 {"Ион", 0},
387 {"Иона", 0},
388 {"Иоханн", 0},
389 {"Ирвин", 0},
390 {"Ирвинг", 0},
391 {"Ирена", 1},
392 {"Ирина", 1},
393 {"Ирис", 1},
394 {"Ирма", 1},
395 {"Исаак", 0},
396 {"Исао", 0},
397 {"Йордан", 0},
398 {"Каао", 0},
399 {"Кай", 0},
400 {"Калеб", 0},
401 {"Кальвин", 0},
402 {"Каменная", 1},
403 {"Каменный", 0},
404 {"Кандейс", 1},
405 {"Капитан", 0},
406 {"Карен", 1},
407 {"Кари", 0},
408 {"Карин", 0},
409 {"Карл", 0},
410 {"Карли", 1},
411 {"Карло", 0},
412 {"Карлон", 0},
413 {"Карлос", 0},
414 {"Кармен", 1},
415 {"Картер", 0},
416 {"Касандра", 1},
417 {"Катерина", 1},
418 {"Кати", 1},
419 {"Катлин", 1},
420 {"Кван", 0},
421 {"Квентин", 0},
422 {"Квинн", 0},
423 {"Кевин", 0},
424 {"Кевинус", 0},
425 {"Кейлин", 1},
426 {"Кейт", 0},
427 {"Кел", 0},
428 {"Келли", 1},
429 {"Кен", 0},
430 {"Кеннет", 0},
431 {"Кери", 1},
432 {"Керн", 0},
433 {"Киган", 0},
434 {"Ким", 1},
435 {"Кимберли", 1},
436 {"Кирк", 0},
437 {"Кирус", 0},
438 {"Клайд", 0},
439 {"Кларенс", 0},
440 {"Кларк", 0},
441 {"Клирик", 0},
442 {"Клиффорд", 0},
443 {"Клэй", 0},
444 {"Клэр", 1},
445 {"Коди", 0},
446 {"Колин", 0},
447 {"Колония", 1},
448 {"Конни", 1},
449 {"Коннор", 0},
450 {"Конрад", 0},
451 {"Константин", 0},
452 {"Констанция", 1},
453 {"Копи", 2},
454 {"Кора", 1},
455 {"Корбет", 0},
456 {"Корд", 0},
457 {"Кори", 0},
458 {"Корисо", 0},
459 {"Корнелия", 1},
460 {"Корнилий", 0},
461 {"Королева", 1},
462 {"Королевский", 0},
463 {"Король", 0},
464 {"Кошка", 1},
465 {"Красный", 0},
466 {"Крейг", 0},
467 {"Крис", 0},
468 {"Криста", 1},
469 {"Кристен", 1},
470 {"Кристина", 1},
471 {"Кристис", 1},
472 {"Кристофер", 0},
473 {"Кровавый", 0},
474 {"Ксуан", 0},
475 {"Кулак", 0},
476 {"Курган", 0},
477 {"Курица", 1},
478 {"Кэй", 1},
479 {"Кэйс", 1},
480 {"Кэл", 0},
481 {"Кэлло", 0},
482 {"Кэмерон", 0},
483 {"Кэнди", 1},
484 {"Кэри", 1},
485 {"Кэрол", 1},
486 {"Кэролан", 1},
487 {"Кэролин", 1},
488 {"Кэрри", 1},
489 {"Кэси", 0},
490 {"Лабиринт", 0},
491 {"Лаборатория", 1},
492 {"Лазарь", 0},
493 {"Лайонел", 0},
494 {"Лаки", 0},
495 {"Лана", 1},
496 {"Ланс", 0},
497 {"Лара", 1},
498 {"Ларри", 0},
499 {"Ларс", 0},
500 {"Лаура", 1},
501 {"Лаури", 1},
502 {"Леа", 1},
503 {"Леаса", 1},
504 {"Лейф", 0},
505 {"Лео", 0},
506 {"Леонард", 0},
507 {"Леора", 1},
508 {"Лерой", 0},
509 {"Лесли", 1},
510 {"Лестер", 0},
511 {"Летучая", 1},
512 {"Ли", 0},
513 {"Ли", 1},
514 {"Лиам", 0},
515 {"Ливия", 1},
516 {"Лиза", 1},
517 {"Лила", 1},
518 {"Лиланд", 0},
519 {"Лилли", 1},
520 {"Лиман", 0},
521 {"Линда", 1},
522 {"Линден", 0},
523 {"Линдсей", 0},
524 {"Линн", 1},
525 {"Лион", 0},
526 {"Лич", 0},
527 {"Ллойд", 0},
528 {"Ловчий", 0},
529 {"Логан", 0},
530 {"Логово", 2},
531 {"Лон", 0},
532 {"Лонни", 0},
533 {"Лора", 1},
534 {"Лорд", 0},
535 {"Лорен", 1},
536 {"Лорена", 1},
537 {"Лоу", 0},
538 {"Лоувелл", 0},
539 {"Лояльный", 0},
540 {"Луи", 0},
541 {"Луиджи", 0},
542 {"Луиза", 1},
543 {"Луис", 0},
544 {"Луиса", 1},
545 {"Лучник", 0},
546 {"Льюис", 0},
547 {"Людвиг", 0},
548 {"Люк", 0},
549 {"Люсиль", 1},
550 {"Лютер", 0},
551 {"Маделена", 1},
552 {"Майк", 0},
553 {"Майлз", 0},
554 {"Майлс", 0},
555 {"Мак", 0},
556 {"Макро", 0},
557 {"Макс", 0},
558 {"Максвелл", 0},
559 {"Малкольм", 0},
560 {"Малый", 0},
561 {"Мами", 1},
562 {"Манни", 0},
563 {"Мантикора", 1},
564 {"Манфред", 0},
565 {"Марвин", 0},
566 {"Маргарита", 1},
567 {"Марджори", 1},
568 {"Марж", 1},
569 {"Мариана", 1},
570 {"Марианна", 1},
571 {"Марио", 0},
572 {"Марион", 0},
573 {"Марис", 1},
574 {"Мариса", 1},
575 {"Маришаль", 1},
576 {"Мария", 1},
577 {"Марк", 0},
578 {"Марко", 0},
579 {"Маркони", 0},
580 {"Маркус", 0},
581 {"Марлен", 1},
582 {"Марлон", 0},
583 {"Марни", 1},
584 {"Марси", 1},
585 {"Марсия", 1},
586 {"Марта", 1},
587 {"Мартил", 1},
588 {"Мартин", 0},
589 {"Мархэм", 0},
590 {"Марчелло", 0},
591 {"Марша", 1},
592 {"Маршал", 0},
593 {"Мастер", 0},
594 {"Матвей", 0},
595 {"Материальные", 2},
596 {"Матт", 0},
597 {"Мегадракон", 0},
598 {"Медный", 0},
599 {"Медуза", 1},
600 {"Мейм", 1},
601 {"Мелани", 1},
602 {"Мелвин", 0},
603 {"Мелинда", 1},
604 {"Мелисса", 1},
605 {"Мелководье", 2},
606 {"Мелоди", 1},
607 {"Мертвец", 0},
608 {"Мертвый", 0},
609 {"Местная", 1},
610 {"Местный", 0},
611 {"Мик", 0},
612 {"Минди", 1},
613 {"Минеральные", 2},
614 {"Миникора", 1},
615 {"Минни", 1},
616 {"Мириам", 1},
617 {"Митч", 0},
618 {"Мишель", 1},
619 {"Могучий", 0},
620 {"Мойра", 1},
621 {"Монах", 0},
622 {"Моника", 1},
623 {"Монте", 0},
624 {"Морел", 0},
625 {"Морина", 1},
626 {"Моррис", 0},
627 {"Мортон", 0},
628 {"Мохаммед", 0},
629 {"Мраморная", 1},
630 {"Мудрый", 0},
631 {"Мэл", 0},
632 {"Мэнди", 1},
633 {"Мэри", 1},
634 {"Мэри", 1},
635 {"Мэрилин", 1},
636 {"Мюрель", 1},
637 {"Мюррей", 0},
638 {"Надина", 1},
639 {"Налётчик", 0},
640 {"Наоми", 1},
641 {"Натали", 1},
642 {"Натан", 0},
643 {"Натаниэль", 0},
644 {"Начальная", 1},
645 {"Небеса", 1},
646 {"Нед", 0},
647 {"Некромант", 0},
648 {"Нельсон", 0},
649 {"Неустрашимый", 0},
650 {"Ник", 0},
651 {"Ники", 1},
652 {"Николай", 0},
653 {"Николас", 0},
654 {"Николь", 1},
655 {"Нил", 0},
656 {"Новобранец", 0},
657 {"Ной", 0},
658 {"Норина", 1},
659 {"Норм", 0},
660 {"Норма", 1},
661 {"Норман", 0},
662 {"Норрис", 0},
663 {"Ньют", 0},
664 {"Нэйт", 0},
665 {"Нэнси", 1},
666 {"Нэнсис", 1},
667 {"Обсидиановая", 1},
668 {"Огненный", 0},
669 {"Олаф", 0},
670 {"Оливер", 0},
671 {"Оливия", 1},
672 {"Орден", 0},
673 {"Особняк", 0},
674 {"Остин", 0},
675 {"Отис", 0},
676 {"Оувен", 0},
677 {"Охотник", 0},
678 {"Павел", 0},
679 {"Пам", 1},
680 {"Памела", 1},
681 {"Паркер", 0},
682 {"Парти", 1},
683 {"Патрик", 0},
684 {"Патрисия", 1},
685 {"Пег", 1},
686 {"Пегги", 1},
687 {"Пейдж", 1},
688 {"Пенни", 1},
689 {"Перри", 0},
690 {"Перси", 0},
691 {"Персиваль", 0},
692 {"Петер", 0},
693 {"Пикси", 1},
694 {"Пирс", 0},
695 {"Пит", 0},
696 {"Плавучий", 0},
697 {"Покои", 2},
698 {"Пол", 0},
699 {"Посвящённый", 0},
700 {"Посвященный", 0},
701 {"Последний", 0},
702 {"Послушник", 0},
703 {"Постоялый", 0},
704 {"Предводитель", 0},
705 {"Престон", 0},
706 {"Привидение", 2},
707 {"Придорожный", 0},
708 {"Призрак", 0},
709 {"Природные", 2},
710 {"Пьер", 0},
711 {"Пэт", 0},
712 {"Пэтти", 1},
713 {"Раду", 0},
714 {"Разбойник", 0},
715 {"Райан", 0},
716 {"Раймонд", 0},
717 {"Ральф", 0},
718 {"Рамей", 0},
719 {"Рамси", 0},
720 {"Рандольф", 0},
721 {"Рассел", 0},
722 {"Расти", 0},
723 {"Ратуша", 1},
724 {"Рауль", 0},
725 {"Рафаэль", 0},
726 {"Рашель", 1},
727 {"Ребекка", 1},
728 {"Реви", 1},
729 {"Рег", 0},
730 {"Регина", 1},
731 {"Реджинальд", 0},
732 {"Рекс", 0},
733 {"Рене", 0},
734 {"Рени", 1},
735 {"Ренцо", 0},
736 {"Ресанда", 1},
737 {"Речной", 0},
738 {"Рики", 0},
739 {"Ринальдо", 0},
740 {"Рита", 1},
741 {"Ричард", 0},
742 {"Роб", 0},
743 {"Робби", 0},
744 {"Роберт", 0},
745 {"Роберта", 1},
746 {"Робин", 0},
747 {"Рогатый", 0},
748 {"Родни", 0},
749 {"Роза", 1},
750 {"Розали", 1},
751 {"Розанна", 1},
752 {"Рози", 1},
753 {"Розмари", 1},
754 {"Розмарина", 1},
755 {"Рой", 0},
756 {"Роки", 0},
757 {"Роланд", 0},
758 {"Ромона", 1},
759 {"Рон", 0},
760 {"Рональд", 0},
761 {"Ронда", 1},
762 {"Рори", 0},
763 {"Росс", 0},
764 {"Роуз", 1},
765 {"Рошель", 1},
766 {"Рубина", 1},
767 {"Руди", 0},
768 {"Руперт", 0},
769 {"Рут", 1},
770 {"Рути", 1},
771 {"Рэндал", 0},
772 {"Рэнди", 0},
773 {"Саад", 0},
774 {"Сабрина", 1},
775 {"Сади", 1},
776 {"Сал", 0},
777 {"Салли", 1},
778 {"Сальваторе", 0},
779 {"Самюэль", 0},
780 {"Сандип", 0},
781 {"Сандра", 1},
782 {"Сантос", 0},
783 {"Сапфировый", 0},
784 {"Сара", 1},
785 {"Свен", 0},
786 {"Свет", 0},
787 {"Светлана", 1},
788 {"Светящийся", 0},
789 {"Святилище", 2},
790 {"Священная", 1},
791 {"Священник", 0},
792 {"Себастьян", 0},
793 {"Седрик", 0},
794 {"Сеймур", 0},
795 {"Секлия", 1},
796 {"Селена", 1},
797 {"Сергио", 0},
798 {"Серый", 0},
799 {"Сесиль", 0},
800 {"Сет", 0},
801 {"Сидней", 0},
802 {"Сильвестр", 0},
803 {"Сильфида", 1},
804 {"Симон", 0},
805 {"Симона", 1},
806 {"Синди", 1},
807 {"Синдис", 1},
808 {"Синий", 0},
809 {"Синтия", 1},
810 {"Скалис", 0},
811 {"Скелет", 0},
812 {"Скорпикора", 1},
813 {"Скотт", 0},
814 {"Слабый", 0},
815 {"Слейд", 0},
816 {"Собака", 1},
817 {"Собор", 0},
818 {"Сол", 0},
819 {"Солнце", 2},
820 {"Сонни", 0},
821 {"Спенсер", 0},
822 {"Старший", 0},
823 {"Стейси", 1},
824 {"Стелс", 0},
825 {"Стефан", 0},
826 {"Стефани", 1},
827 {"Стив", 0},
828 {"Стивен", 0},
829 {"Сторожевая", 1},
830 {"Страж", 0},
831 {"Стражник", 0},
832 {"Стрекозавр", 0},
833 {"Стрелок", 0},
834 {"Стэн", 0},
835 {"Стэнли", 0},
836 {"Стюарт", 0},
837 {"Суанна", 1},
838 {"Судья", 0},
839 {"Сулейман", 0},
840 {"Сумеречный", 0},
841 {"Сьюзан", 1},
842 {"Сьюзи", 1},
843 {"Сэм", 0},
844 {"Сэнди", 1},
845 {"Сэндин", 1},
846 {"Сэра", 1},
847 {"Сюзанна", 1},
848 {"Тадеус", 0},
849 {"Тайлер", 0},
850 {"Тайсон", 0},
851 {"Така", 0},
852 {"Тамара", 1},
853 {"Тамми", 1},
854 {"Таня", 1},
855 {"Тара", 1},
856 {"Тейн", 0},
857 {"Теодор", 0},
858 {"Тереза", 1},
859 {"Тереса", 1},
860 {"Терранс", 0},
861 {"Терри", 1},
862 {"Тим", 0},
863 {"Тимоти", 0},
864 {"Тина", 1},
865 {"Тиффани", 1},
866 {"Тобиас", 0},
867 {"Тодд", 0},
868 {"Том", 0},
869 {"Томас", 0},
870 {"Тон", 0},
871 {"Тони", 0},
872 {"Тран", 0},
873 {"Трейси", 1},
874 {"Трент", 0},
875 {"Трентон", 0},
876 {"Трина", 1},
877 {"Трип", 0},
878 {"Трисия", 1},
879 {"Троглодит", 0},
880 {"Тронный", 0},
881 {"Трувор", 0},
882 {"Трэвис", 0},
883 {"Туманный", 0},
884 {"Тэд", 0},
885 {"Тэрри", 1},
886 {"Тюрьма", 1},
887 {"Уальдо", 0},
888 {"Уилберт", 0},
889 {"Уильсон", 0},
890 {"Ундина", 1},
891 {"Уоллес", 0},
892 {"Уоррен", 0},
893 {"Упырь", 0},
894 {"Учебный", 0},
895 {"Уэбб", 0},
896 {"Фабиан", 0},
897 {"Фамильный", 0},
898 {"Фарелл", 0},
899 {"Федрус", 0},
900 {"Фейт", 1},
901 {"Феликс", 0},
902 {"Фелиция", 1},
903 {"Фердинанд", 0},
904 {"Фил", 0},
905 {"Филип", 0},
906 {"Филлис", 1},
907 {"Филомена", 1},
908 {"Флетчер", 0},
909 {"Флойд", 0},
910 {"Флоренция", 1},
911 {"Флосси", 1},
912 {"Форрест", 0},
913 {"Франк", 0},
914 {"Франклин", 0},
915 {"Франц", 0},
916 {"Франциск", 0},
917 {"Франческа", 1},
918 {"Фред", 0},
919 {"Фредерик", 0},
920 {"Хавьер", 0},
921 {"Хайден", 0},
922 {"Хайди", 1},
923 {"Хан", 0},
924 {"Ханк", 0},
925 {"Ханн", 0},
926 {"Хаос", 0},
927 {"Харви", 0},
928 {"Харди", 0},
929 {"Хариетта", 1},
930 {"Харлан", 0},
931 {"Харлей", 0},
932 {"Харольд", 0},
933 {"Харрисон", 0},
934 {"Хелен", 1},
935 {"Хильда", 1},
936 {"Хит", 0},
937 {"Хитер", 1},
938 {"Хитет", 0},
939 {"Хитоми", 1},
940 {"Ходячий", 0},
941 {"Хок", 0},
942 {"Холден", 0},
943 {"Холли", 1},
944 {"Храм", 0},
945 {"Хранилище", 2},
946 {"Хью", 0},
947 {"Хьюго", 0},
948 {"Хэл", 0},
949 {"Хэмптон", 0},
950 {"Царь", 0},
951 {"Цезарь", 0},
952 {"Циклон", 0},
953 {"Цитадель", 1},
954 {"Чад", 0},
955 {"Чак", 0},
956 {"Чан", 0},
957 {"Чандра", 1},
958 {"Чарли", 0},
959 {"Чарльз", 0},
960 {"Чародей", 0},
961 {"Часовой", 0},
962 {"Чемпион", 0},
963 {"Черная", 1},
964 {"Чернокнижник", 0},
965 {"Чертог", 0},
966 {"Честер", 0},
967 {"Чет", 0},
968 {"Чип", 0},
969 {"Чудище", 2},
970 {"Шатер", 0},
971 {"Шахтерская", 1},
972 {"Шейла", 1},
973 {"Шейлани", 1},
974 {"Шелдон", 0},
975 {"Шелл", 0},
976 {"Шелли", 1},
977 {"Шеллис", 1},
978 {"Шердон", 0},
979 {"Шерил", 1},
980 {"Шерман", 0},
981 {"Шерри", 1},
982 {"Шеррин", 1},
983 {"Шимон", 0},
984 {"Школа", 1},
985 {"Шон", 0},
986 {"Шоуна", 1},
987 {"Штаб", 0},
988 {"Шэнон", 1},
989 {"Шэри", 1},
990 {"Шэрон", 1},
991 {"Эван", 0},
992 {"Эвелин", 1},
993 {"Эд", 0},
994 {"Эдгар", 0},
995 {"Эдди", 0},
996 {"Эдисон", 0},
997 {"Эдит", 1},
998 {"Эдмонд", 0},
999 {"Эдна", 1},
1000 {"Эйб", 0},
1001 {"Эйлин", 1},
1002 {"Эйприл", 1},
1003 {"Экспертная", 1},
1004 {"Эл", 0},
1005 {"Элвин", 0},
1006 {"Элегантный", 0},
1007 {"Элен", 1},
1008 {"Элеонора", 1},
1009 {"Элиот", 0},
1010 {"Элисон", 1},
1011 {"Элисса", 1},
1012 {"Элитный", 0},
1013 {"Элла", 1},
1014 {"Эллен", 1},
1015 {"Элси", 1},
1016 {"Элтон", 0},
1017 {"Эльф", 0},
1018 {"Эми", 1},
1019 {"Эмиль", 0},
1020 {"Эмма", 1},
1021 {"Эммануил", 0},
1022 {"Эммет", 0},
1023 {"Энджи", 1},
1024 {"Энди", 0},
1025 {"Энн", 1},
1026 {"Энн", 2},
1027 {"Энок", 0},
1028 {"Эрвин", 0},
1029 {"Эрик", 0},
1030 {"Эрин", 1},
1031 {"Эрл", 0},
1032 {"Эрнест", 0},
1033 {"Эрни", 0},
1034 {"Эрнин", 0},
1035 {"Эрол", 0},
1036 {"Этан", 0},
1037 {"Этель", 1},
1038 {"Эш", 0},
1039 {"Эштон", 0},
1040 {"Юдифь", 1},
1041 {"Юрий", 0},
1042 {"Ядовитый", 0},
1043 {"Якоб", 0},
1044 {"Ян", 0},
1045 {"Янси", 0},
1046 {"Ярод", 0},
1047 {"Яспер", 0}
1048 },
1049 gender_table[] =
1050 {
1051 {"ад", 0}, {"акула", 1}, {"банк", 0}, {"башня", 1}, {"бластер", 0}, {"вампир", 0}, {"вдова", 1}, {"ведьма", 1}, {"витерсмит", 0}, {"владыка", 0}, {"владычица", 1},
1052 {"воин", 0}, {"вор", 0}, {"гидра", 1}, {"глаз", 0}, {"голем", 0}, {"гора", 1}, {"горгулья", 1}, {"город", 0}, {"громовая", 1}, {"двор", 0}, {"джинн", 0},
1053 {"дракон", 0}, {"дух", 0}, {"житель", 0}, {"жительница", 1}, {"зал", 0}, {"защитник", 0}, {"земля", 1}, {"искатель", 0}, {"ифрит", 0}, {"квартира", 1}, {"кольчуга", 1},
1054 {"командир", 0}, {"крыса", 1}, {"лейтенант", 0}, {"луна", 1}, {"людоед", 0}, {"магог", 0}, {"меч", 0}, {"мечник", 0}, {"минотавр", 0}, {"мышь", 1}, {"наемник", 0},
1055 {"огненная", 1}, {"огонь", 0}, {"орк", 0}, {"паук", 0}, {"пещера", 1}, {"пещеры", 1}, {"повелитель", 0}, {"погреб", 0}, {"полигон", 0}, {"приют", 0}, {"птица", 1},
1056 {"птичий", 0}, {"работник", 0}, {"рай", 0}, {"рейнджер", 0}, {"рух", 0}, {"слизень", 0}, {"солдат", 0}, {"титан", 0}, {"трактир", 0}, {"тролль", 0}, {"убийца", 0},
1057 {"улан", 0}, {"училище", 2}, {"шляпа", 1}, {"элементал", 0}
1058 };
1059
1060
1061
1062 #include <mbstring.h>
1063
1064 int GetGender(char *ansi_name, int name_len)
1065 {
1066 auto name = (unsigned char *)ansi_name;
1067
1068 GenderTableEntry *table = nullptr;
1069 unsigned int table_size = 0;
1070 if (name[0] >= (unsigned char)'а' && name[0] <= (unsigned char)'я')
1071 {
1072 table = gender_table;
1073 table_size = sizeof(gender_table) / sizeof(*gender_table);
1074 }
1075 else if (name[0] >= (unsigned char)'А' && name[0] <= (unsigned char)'Я')
1076 {
1077 table = gender_table_caps;
1078 table_size = sizeof(gender_table_caps) / sizeof(*gender_table_caps);
1079 }
1080 else return 0;
1081
1082 int left = 0,
1083 right = table_size - 1,
1084 match = 0;
1085 while (left <= right)
1086 {
1087 match = left + (right - left) / 2;
1088 switch (_mbsncmp(name, (unsigned char *)table[match].name, name_len))
1089 {
1090 case -1: right = match; break;
1091 case 0: return table[match].gender;
1092 case 1: left = match; break;
1093 }
1094 }
1095 assert(false);
1096 return 0;
1097 }
1098
1099
1100 bool IsSpecialName(const char *ansi_name)
1101 {
1102 auto name = (unsigned char *)ansi_name;
1103 return !_mbsncmp(name, (unsigned char *)"Мэри Джо", 8) || !_mbsncmp(name, (unsigned char *)"Ли Энн", 6) ||
1104 !_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14) || !_mbsncmp(name, (unsigned char *)"Стены тумана", 12);
1105 }
1106 int GetSpecialGender(const char *ansi_name)
1107 {
1108 auto name = (unsigned char *)ansi_name;
1109 if (!_mbsncmp(name, (unsigned char *)"Мэри Джо", 8))
1110 return 1;
1111 if (!_mbsncmp(name, (unsigned char *)"Ли Энн", 6))
1112 return 1;
1113 if (!_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14))
1114 return 1;
1115 if (!!_mbsncmp(name, (unsigned char *)"Стены тумана", 12))
1116 return 0;
1117 return 0;
1118 }
1119 const char *GetSpecialCase(const char *ansi_name, char c)
1120 {
1121 auto name = (unsigned char *)ansi_name;
1122
1123 if (!_mbsncmp(name, (unsigned char *)"Мэри Джо", 8))
1124 return "Мэри Джо";
1125 if (!_mbsncmp(name, (unsigned char *)"Ли Энн", 6))
1126 return "Ли Энн";
1127
1128 if (!_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14))
1129 switch (c)
1130 {
1131 case 'I': case 'i': return "Врата в Бездну";
1132 case 'R': case 'r': return "Врат в Бездну";
1133 case 'D': case 'd': return "Вратам в Бездну";
1134 case 'V': case 'v': return "Врат в Бездну";
1135 case 'T': case 't': return "Вратами в Бездну";
1136 case 'P': case 'p': return "Вратах в Бездну";
1137 }
1138
1139 if (!_mbsncmp(name, (unsigned char *)"Стены тумана", 12))
1140 switch (c)
1141 {
1142 case 'I': case 'i': return "Стены тумана";
1143 case 'R': case 'r': return "Стен тумана";
1144 case 'D': case 'd': return "Стенам тумана";
1145 case 'V': case 'v': return "Стены тумана";
1146 case 'T': case 't': return "Стенами тумана";
1147 case 'P': case 'p': return "Стенах тумана";
1148 }
1149
1150 return nullptr;
1151 }
1152
1153 int __cdecl sprintfex_internal(char *str)
1154 {
1155 auto p = strstr(str, "^");
1156 if (!p)
1157 return strlen(str);
1158
1159 char buf[8192];
1160 assert(strlen(str) < sizeof(buf));
1161
1162 bool integer_token_defined = false;
1163 int integer_token = 0;
1164
1165 bool gender_token_defined = false;
1166 int gender_token = 0;
1167
1168 auto src = buf,
1169 dst = p;
1170 strcpy(buf, str + (p - str));
1171 while (true)
1172 {
1173 switch (src[1])
1174 {
1175 case 'I':
1176 {
1177 if (src[2] != '[')
1178 goto _invalid_token;
1179 src += 3; // ^I[
1180
1181 if (sscanf(src, "%d", &integer_token))
1182 integer_token_defined = true;
1183
1184 auto int_begin = src;
1185 while (*src++ != ']');
1186
1187 int int_len = src - int_begin - 1;
1188 strncpy(dst, int_begin, int_len);
1189 dst += int_len;
1190 }
1191 break;
1192
1193 case 'L':
1194 {
1195 if (src[2] != '[')
1196 goto _invalid_token;
1197 assert(integer_token_defined);
1198 src += 3; // ^L[
1199
1200 auto ending1 = src;
1201 while (*src++ != ';');
1202 auto ending2 = src;
1203 while (*src++ != ';');
1204 auto ending3 = src;
1205 while (*src++ != ']');
1206
1207 char *actual_ending = nullptr;
1208 int actual_ending_len = 0;
1209
1210 int modulo = abs(integer_token) % 10;
1211 if (modulo == 1)
1212 {
1213 actual_ending = ending1;
1214 actual_ending_len = ending2 - ending1 - 1;
1215 }
1216 else if (modulo >= 2 && modulo <= 4)
1217 {
1218 actual_ending = ending2;
1219 actual_ending_len = ending3 - ending2 - 1;
1220 }
1221 else
1222 {
1223 actual_ending = ending3;
1224 actual_ending_len = src - ending3 - 1;
1225 }
1226
1227 strncpy(dst, actual_ending, actual_ending_len);
1228 dst += actual_ending_len;
1229 }
1230 break;
1231
1232 case 'R':
1233 {
1234 if (src[2] != '[')
1235 goto _invalid_token;
1236 assert(gender_token_defined);
1237
1238 src += 3; // ^R[
1239
1240 auto ending1 = src;
1241 while (*src++ != ';');
1242 auto ending2 = src;
1243 while (*src++ != ';');
1244 auto ending3 = src;
1245 while (*src++ != ']');
1246
1247 char *actual_ending = nullptr;
1248 int actual_ending_len = 0;
1249
1250 if (gender_token == 0)
1251 {
1252 actual_ending = ending1;
1253 actual_ending_len = ending2 - ending1 - 1;
1254 }
1255 else if (gender_token == 1)
1256 {
1257 actual_ending = ending2;
1258 actual_ending_len = ending3 - ending2 - 1;
1259 }
1260 else if (gender_token == 2)
1261 {
1262 actual_ending = ending3;
1263 actual_ending_len = src - ending3 - 1;
1264 }
1265 else assert(false);
1266
1267 strncpy(dst, actual_ending, actual_ending_len);
1268 dst += actual_ending_len;
1269 }
1270 break;
1271
1272 case 'P':
1273 {
1274 if (src[3] != '[')
1275 goto _invalid_token;
1276 switch (src[2])
1277 {
1278 case 'I': case 'i':
1279 case 'R': case 'r':
1280 case 'D': case 'd':
1281 case 'V': case 'v':
1282 case 'T': case 't':
1283 case 'P': case 'p': break;
1284 default:
1285 goto _invalid_token;
1286 }
1287
1288 if (IsSpecialName(src + 4))
1289 {
1290 __debugbreak(); // check this is ok
1291 auto name = GetSpecialCase(src + 4, src[2]);
1292 int name_len = strlen(name);
1293
1294 gender_token = GetSpecialGender(src + 4);
1295 gender_token_defined = true;
1296
1297 strncpy(dst, name, name_len);
1298 dst += name_len;
1299 while (*src++ != ']');
1300 break;
1301 }
1302
1303 auto name_begin = src + 4;
1304 int name_len = 0;
1305 for (int i = 0; name_begin[i] != ']'; ++i)
1306 name_len++;
1307 gender_token = GetGender(name_begin, name_len);
1308 gender_token_defined = true;
1309
1310 switch (src[2])
1311 {
1312 case 'I': case 'i':
1313 {
1314 strncpy(dst, name_begin, name_len);
1315 dst += name_len;
1316 }
1317 break;
1318
1319 case 'R': case 'r':
1320 case 'D': case 'd':
1321 case 'V': case 'v':
1322 case 'T': case 't':
1323 case 'P': case 'p':
1324 {
1325 auto token_begin = src;
1326 int token_len = 0;
1327 for (int i = 0; token_begin[i] != ']'; ++i)
1328 token_len++;
1329 strncpy(dst, token_begin, token_len);
1330 dst += token_len;
1331 }
1332 }
1333 while (*src++ != ']');
1334 }
1335 break;
1336
1337 default:
1338 {
1339 _invalid_token:
1340 auto token_begin = src;
1341 while (*src++ != ']');
1342
1343 int token_len = src - token_begin;
1344 char token[1024];
1345 strncpy(token, token_begin, token_len);
1346 token[token_len] = 0;
1347
1348 Log::Warning(L"Invalid format token: %S", token);
1349 assert(false);
1350 }
1351 break;
1352 }
1353
1354 *dst = 0;
1355
1356 auto copy_begin = src;
1357 src = strstr(src, "^");
1358 if (!src)
1359 {
1360 strcpy(dst, copy_begin); // just copy the rest
1361 break;
1362 }
1363
1364 int copy_len = src - copy_begin;
1365 strncpy(dst, copy_begin, copy_len);
1366 dst += copy_len;
1367 }
1368
1369 return dst - str;
1370 }
1371
1372
1373
1374
1375
1376
1377 //mm6text.non -> c structure array
1378 /*FILE *f = fopen("_1.txt", "w+t");
1379 FILE *in = fopen("mm6text.non", "rt");
1380 fscanf(in, "%*[^\n]\n");
1381
1382 int idx = 0;
1383 auto pairs = new NameGender[8000];
1384
1385 char line[1024];
1386 while (fscanf(in, "%[^\n]\n", line) && !feof(in))
1387 {
1388 char name1[100], name2[100], name3[100];
1389 int e = sscanf(line, "%s\t%s\t%s", pairs[idx].name, pairs[idx + 1].name, pairs[idx + 2].name);
1390 pairs[idx].gender = 0;
1391 pairs[idx+1].gender = 1;
1392 pairs[idx+2].gender = 2;
1393 idx += e;
1394 }
1395
1396 for (int i = 0; i < idx; ++i)
1397 for (int j = 0; j < i; ++j)
1398 {
1399 if (_mbsicmp(pairs[i].name, pairs[j].name) < 0)
1400 {
1401 char n[1024];
1402 strcpy(n, (char *)pairs[j].name);
1403 auto g = pairs[j].gender;
1404
1405 strcpy((char *)pairs[j].name, (char *)pairs[i].name);
1406 pairs[j].gender = pairs[i].gender;
1407
1408 strcpy((char *)pairs[i].name, n);
1409 pairs[i].gender = g;
1410 }
1411 }
1412
1413 for (int i = 0; i < idx; ++i)
1414 {
1415 fprintf(f, " {\"%s\", %u},\n", pairs[i].name, pairs[i].gender);
1416 }
1417 fclose(f);*/