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