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