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