World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
mm7text_ru.cpp
См. документацию.
1 #ifdef _WINDOWS
2 #include <mbstring.h>
3 #endif
4 #include <cstdlib>
5 #include <cstdio>
6 #include <cstring>
7 #include <cstdarg>
8 
9 #include "Engine/Engine.h"
10 
12  const char *name;
13  int gender;
14 } gender_table_caps[] = {{"Авель", 0}, {"Адам", 0},
15  {"Адриан", 0}, {"Адрианис", 0},
16  {"Адская", 1}, {"Айр", 0},
17  {"Акио", 0}, {"Акира", 0},
18  {"Алан", 0}, {"Алейн", 0},
19  {"Алек", 0}, {"Александр", 0},
20  {"Алексис", 1}, {"Ален", 0},
21  {"Алехандро", 0}, {"Алиса", 1},
22  {"Альберт", 0}, {"Альтон", 0},
23  {"Альтред", 0}, {"Альфред", 0},
24  {"Аманда", 1}, {"Амбер", 1},
25  {"Амброзий", 0}, {"Амелия", 1},
26  {"Амос", 0}, {"Ангел", 0},
27  {"Андреа", 1}, {"Андрей", 0},
28  {"Анжела", 1}, {"Анита", 1},
29  {"Анна", 1}, {"Антон", 0},
30  {"Антоний", 0}, {"Арби", 0},
31  {"Арда", 0}, {"Арден", 0},
32  {"Арена", 1}, {"Аристей", 0},
33  {"Аристидис", 0}, {"Арих", 0},
34  {"Ариэль", 0}, {"Арлен", 0},
35  {"Арло", 0}, {"Арманд", 0},
36  {"Арнольд", 0}, {"Арон", 0},
37  {"Артур", 0}, {"Архангел", 0},
38  {"Архимаг", 0}, {"Ахмед", 0},
39  {"Бёртон", 0}, {"Бад", 0},
40  {"Байрон", 0}, {"Бандит", 0},
41  {"Бар", 0}, {"Барбара", 1},
42  {"Баретт", 0}, {"Барт", 0},
43  {"Батч", 0}, {"Беатрис", 1},
44  {"Беверли", 1}, {"Беки", 1},
45  {"Белинда", 1}, {"Бен", 0},
46  {"Бенджамин", 0}, {"Бенедикт", 0},
47  {"Бенито", 0}, {"Беннет", 0},
48  {"Бенни", 0}, {"Бенуа", 0},
49  {"Бернадетта", 1}, {"Бернард", 0},
50  {"Берни", 0}, {"Бернис", 1},
51  {"Бернучо", 0}, {"Берт", 0},
52  {"Бертран", 0}, {"Бет", 1},
53  {"Бетси", 1}, {"Бетти", 1},
54  {"Билли", 0}, {"Биллис", 1},
55  {"Бишоп", 0}, {"Блейк", 0},
56  {"Блейн", 0}, {"Блондо", 0},
57  {"Бо", 0}, {"Боб", 0},
58  {"Бобби", 0}, {"Бодо", 0},
59  {"Болотный", 0}, {"Большой", 0},
60  {"Бонни", 1}, {"Борегард", 0},
61  {"Борис", 0}, {"Браден", 0},
62  {"Брайс", 0}, {"Брат", 0},
63  {"Брейн", 0}, {"Бренда", 1},
64  {"Брендон", 0}, {"Брент", 0},
65  {"Брет", 0}, {"Бронвин", 0},
66  {"Бронзовый", 0}, {"Брук", 0},
67  {"Бруно", 0}, {"Брэд", 0},
68  {"Брэдли", 0}, {"Брэдфорд", 0},
69  {"Брэндон", 0}, {"Брюс", 0},
70  {"Буфорд", 0}, {"Вадим", 0},
71  {"Вал", 0}, {"Валерия", 1},
72  {"Вальтер", 0}, {"Ванда", 1},
73  {"Ванесса", 1}, {"Ванетта", 1},
74  {"Ванс", 0}, {"Вейн", 0},
75  {"Великий", 0}, {"Венделл", 0},
76  {"Венди", 1}, {"Вера", 1},
77  {"Верн", 0}, {"Вернон", 0},
78  {"Вероника", 1}, {"Верховная", 1},
79  {"Весли", 0}, {"Виверн", 0},
80  {"Вивьен", 1}, {"Вики", 1},
81  {"Виктор", 0}, {"Викторис", 0},
82  {"Виктория", 1}, {"Вилам", 0},
83  {"Вилл", 0}, {"Виллард", 0},
84  {"Вильма", 1}, {"Вильфред", 0},
85  {"Вильям", 0}, {"Винный", 0},
86  {"Винстон", 0}, {"Винченцо", 0},
87  {"Виолет", 1}, {"Виргилий", 0},
88  {"Виргиния", 1}, {"Вихрь", 0},
89  {"Владимир", 0}, {"Властелин", 0},
90  {"Водный", 0}, {"Военное", 2},
91  {"Воздушная", 1}, {"Воздушный", 0},
92  {"Волхв", 0}, {"Вольг", 0},
93  {"Восставший", 0}, {"Врата", 1},
94  {"Вудро", 0}, {"Вурдалак", 0},
95  {"Высшая", 1}, {"Вэйд", 0},
96  {"Габриэль", 0}, {"Гай", 0},
97  {"Ганс", 0}, {"Гарет", 0},
98  {"Гари", 0}, {"Гарпия", 1},
99  {"Гарри", 0}, {"Гвендолин", 1},
100  {"Гвенн", 1}, {"Гейб", 0},
101  {"Гейл", 1}, {"Гектор", 0},
102  {"Гельмут", 0}, {"Геникки", 1},
103  {"Генри", 0}, {"Георгина", 1},
104  {"Герб", 0}, {"Герберт", 0},
105  {"Герман", 0}, {"Гертруда", 1},
106  {"Герц", 0}, {"Гигантская", 1},
107  {"Гильдия", 1}, {"Гильермо", 0},
108  {"Гильмор", 0}, {"Гимнастический", 0},
109  {"Глазище", 2}, {"Глен", 0},
110  {"Гленда", 1}, {"Глиняный", 0},
111  {"Глория", 1}, {"Гниющий", 0},
112  {"Гном", 0}, {"Гоблин", 0},
113  {"Говард", 0}, {"Гог", 0},
114  {"Гомер", 0}, {"Гонзало", 0},
115  {"Гораций", 0}, {"Гордон", 0},
116  {"Горный", 0}, {"Грабитель", 0},
117  {"Грант", 0}, {"Грахэм", 0},
118  {"Грег", 0}, {"Грегори", 0},
119  {"Грей", 0}, {"Гретхен", 1},
120  {"Грифон", 0}, {"Грозовой", 0},
121  {"Гус", 0}, {"Давид", 0},
122  {"Дайана", 1}, {"Дал", 0},
123  {"Даллас", 0}, {"Дамиан", 0},
124  {"Дана", 1}, {"Даниэль", 0},
125  {"Данте", 0}, {"Дара", 1},
126  {"Дарлин", 1}, {"Дарон", 0},
127  {"Дарси", 1}, {"Дастин", 0},
128  {"Дафна", 1}, {"Двайт", 0},
129  {"Двейн", 0}, {"Деанна", 1},
130  {"Дебби", 1}, {"Дебора", 1},
131  {"Девон", 0}, {"Дейв", 0},
132  {"Дейл", 0}, {"Дел", 0},
133  {"Делорис", 1}, {"Денис", 1},
134  {"Денни", 0}, {"Депозитарий", 0},
135  {"Дерево", 2}, {"Дерек", 0},
136  {"Десмонд", 0}, {"Джанис", 1},
137  {"Джастин", 0}, {"Джед", 0},
138  {"Джедай", 0}, {"Джей", 0},
139  {"Джейк", 0}, {"Джеймс", 0},
140  {"Джейн", 1}, {"Джейсон", 0},
141  {"Джек", 0}, {"Джеки", 1},
142  {"Джеми", 0}, {"Дженифер", 1},
143  {"Дженни", 1}, {"Джеральд", 0},
144  {"Джеральдина", 1}, {"Джером", 0},
145  {"Джероми", 0}, {"Джерри", 0},
146  {"Джесс", 0}, {"Джесса", 1},
147  {"Джессика", 1}, {"Джетано", 0},
148  {"Джим", 0}, {"Джин", 1},
149  {"Джина", 1}, {"Джинжер", 1},
150  {"Джинни", 1}, {"Джино", 0},
151  {"Джо", 2}, {"Джоан", 1},
152  {"Джоанн", 1}, {"Джоанна", 1},
153  {"Джозеф", 0}, {"Джой", 0},
154  {"Джойс", 1}, {"Джойсин", 1},
155  {"Джон", 0}, {"Джонатан", 0},
156  {"Джордж", 0}, {"Джоу", 0},
157  {"Джошуа", 0}, {"Джоэль", 0},
158  {"Джуд", 0}, {"Джуди", 1},
159  {"Джудис", 1}, {"Джули", 1},
160  {"Джун", 1}, {"Диана", 1},
161  {"Дилан", 0}, {"Дин", 0},
162  {"Дитер", 0}, {"Додридж", 0},
163  {"Док", 0}, {"Долорес", 1},
164  {"Дольф", 0}, {"Дом", 0},
165  {"Доминик", 0}, {"Доминика", 1},
166  {"Дон", 0}, {"Донайс", 1},
167  {"Дональд", 0}, {"Донна", 1},
168  {"Дорин", 1}, {"Дорис", 1},
169  {"Дороти", 1}, {"Драконовая", 1},
170  {"Древнее", 2}, {"Древний", 0},
171  {"Друид", 0}, {"Дрю", 0},
172  {"Дуглас", 0}, {"Дункан", 0},
173  {"Дьявол", 0}, {"Дэви", 0},
174  {"Дэн", 0}, {"Дэнис", 0},
175  {"Дэнни", 0}, {"Дюк", 0},
176  {"Ева", 1}, {"Евгений", 0},
177  {"Елизавета", 1}, {"Жан-Поль", 0},
178  {"Жан-Пьер", 0}, {"Жанета", 1},
179  {"Жанетт", 1}, {"Жанетта", 1},
180  {"Жанин", 1}, {"Жанис", 1},
181  {"Жанна", 1}, {"Жасмин", 1},
182  {"Жейн", 1}, {"Женна", 1},
183  {"Жильбер", 0}, {"Жофрей", 0},
184  {"Жуль", 0}, {"Зак", 0},
185  {"Замок", 0}, {"Замороженные", 2},
186  {"Захарий", 0}, {"Зебулон", 0},
187  {"Зеленый", 0}, {"Земной", 0},
188  {"Зигги", 0}, {"Зик", 0},
189  {"Златые", 2}, {"Зод", 0},
190  {"Золотой", 0}, {"Золтан", 0},
191  {"Зорекс", 0}, {"Ив", 0},
192  {"Иван", 0}, {"Ивар", 0},
193  {"Иверсон", 0}, {"Ивонна", 1},
194  {"Игнасио", 0}, {"Игорь", 0},
195  {"Ида", 1}, {"Иеремия", 0},
196  {"Измаил", 0}, {"Изумрудный", 0},
197  {"Ике", 0}, {"Илена", 1},
198  {"Илья", 0}, {"Имение", 2},
199  {"Инкубатор", 0}, {"Иоланда", 1},
200  {"Ион", 0}, {"Иона", 0},
201  {"Иоханн", 0}, {"Ирвин", 0},
202  {"Ирвинг", 0}, {"Ирена", 1},
203  {"Ирина", 1}, {"Ирис", 1},
204  {"Ирма", 1}, {"Исаак", 0},
205  {"Исао", 0}, {"Йордан", 0},
206  {"Каао", 0}, {"Кай", 0},
207  {"Калеб", 0}, {"Кальвин", 0},
208  {"Каменная", 1}, {"Каменный", 0},
209  {"Кандейс", 1}, {"Капитан", 0},
210  {"Карен", 1}, {"Кари", 0},
211  {"Карин", 0}, {"Карл", 0},
212  {"Карли", 1}, {"Карло", 0},
213  {"Карлон", 0}, {"Карлос", 0},
214  {"Кармен", 1}, {"Картер", 0},
215  {"Касандра", 1}, {"Катерина", 1},
216  {"Кати", 1}, {"Катлин", 1},
217  {"Кван", 0}, {"Квентин", 0},
218  {"Квинн", 0}, {"Кевин", 0},
219  {"Кевинус", 0}, {"Кейлин", 1},
220  {"Кейт", 0}, {"Кел", 0},
221  {"Келли", 1}, {"Кен", 0},
222  {"Кеннет", 0}, {"Кери", 1},
223  {"Керн", 0}, {"Киган", 0},
224  {"Ким", 1}, {"Кимберли", 1},
225  {"Кирк", 0}, {"Кирус", 0},
226  {"Клайд", 0}, {"Кларенс", 0},
227  {"Кларк", 0}, {"Клирик", 0},
228  {"Клиффорд", 0}, {"Клэй", 0},
229  {"Клэр", 1}, {"Коди", 0},
230  {"Колин", 0}, {"Колония", 1},
231  {"Конни", 1}, {"Коннор", 0},
232  {"Конрад", 0}, {"Константин", 0},
233  {"Констанция", 1}, {"Копи", 2},
234  {"Кора", 1}, {"Корбет", 0},
235  {"Корд", 0}, {"Кори", 0},
236  {"Корисо", 0}, {"Корнелия", 1},
237  {"Корнилий", 0}, {"Королева", 1},
238  {"Королевский", 0}, {"Король", 0},
239  {"Кошка", 1}, {"Красный", 0},
240  {"Крейг", 0}, {"Крис", 0},
241  {"Криста", 1}, {"Кристен", 1},
242  {"Кристина", 1}, {"Кристис", 1},
243  {"Кристофер", 0}, {"Кровавый", 0},
244  {"Ксуан", 0}, {"Кулак", 0},
245  {"Курган", 0}, {"Курица", 1},
246  {"Кэй", 1}, {"Кэйс", 1},
247  {"Кэл", 0}, {"Кэлло", 0},
248  {"Кэмерон", 0}, {"Кэнди", 1},
249  {"Кэри", 1}, {"Кэрол", 1},
250  {"Кэролан", 1}, {"Кэролин", 1},
251  {"Кэрри", 1}, {"Кэси", 0},
252  {"Лабиринт", 0}, {"Лаборатория", 1},
253  {"Лазарь", 0}, {"Лайонел", 0},
254  {"Лаки", 0}, {"Лана", 1},
255  {"Ланс", 0}, {"Лара", 1},
256  {"Ларри", 0}, {"Ларс", 0},
257  {"Лаура", 1}, {"Лаури", 1},
258  {"Леа", 1}, {"Леаса", 1},
259  {"Лейф", 0}, {"Лео", 0},
260  {"Леонард", 0}, {"Леора", 1},
261  {"Лерой", 0}, {"Лесли", 1},
262  {"Лестер", 0}, {"Летучая", 1},
263  {"Ли", 0}, {"Ли", 1},
264  {"Лиам", 0}, {"Ливия", 1},
265  {"Лиза", 1}, {"Лила", 1},
266  {"Лиланд", 0}, {"Лилли", 1},
267  {"Лиман", 0}, {"Линда", 1},
268  {"Линден", 0}, {"Линдсей", 0},
269  {"Линн", 1}, {"Лион", 0},
270  {"Лич", 0}, {"Ллойд", 0},
271  {"Ловчий", 0}, {"Логан", 0},
272  {"Логово", 2}, {"Лон", 0},
273  {"Лонни", 0}, {"Лора", 1},
274  {"Лорд", 0}, {"Лорен", 1},
275  {"Лорена", 1}, {"Лоу", 0},
276  {"Лоувелл", 0}, {"Лояльный", 0},
277  {"Луи", 0}, {"Луиджи", 0},
278  {"Луиза", 1}, {"Луис", 0},
279  {"Луиса", 1}, {"Лучник", 0},
280  {"Льюис", 0}, {"Людвиг", 0},
281  {"Люк", 0}, {"Люсиль", 1},
282  {"Лютер", 0}, {"Маделена", 1},
283  {"Майк", 0}, {"Майлз", 0},
284  {"Майлс", 0}, {"Мак", 0},
285  {"Макро", 0}, {"Макс", 0},
286  {"Максвелл", 0}, {"Малкольм", 0},
287  {"Малый", 0}, {"Мами", 1},
288  {"Манни", 0}, {"Мантикора", 1},
289  {"Манфред", 0}, {"Марвин", 0},
290  {"Маргарита", 1}, {"Марджори", 1},
291  {"Марж", 1}, {"Мариана", 1},
292  {"Марианна", 1}, {"Марио", 0},
293  {"Марион", 0}, {"Марис", 1},
294  {"Мариса", 1}, {"Маришаль", 1},
295  {"Мария", 1}, {"Марк", 0},
296  {"Марко", 0}, {"Маркони", 0},
297  {"Маркус", 0}, {"Марлен", 1},
298  {"Марлон", 0}, {"Марни", 1},
299  {"Марси", 1}, {"Марсия", 1},
300  {"Марта", 1}, {"Мартил", 1},
301  {"Мартин", 0}, {"Мархэм", 0},
302  {"Марчелло", 0}, {"Марша", 1},
303  {"Маршал", 0}, {"Мастер", 0},
304  {"Матвей", 0}, {"Материальные", 2},
305  {"Матт", 0}, {"Мегадракон", 0},
306  {"Медный", 0}, {"Медуза", 1},
307  {"Мейм", 1}, {"Мелани", 1},
308  {"Мелвин", 0}, {"Мелинда", 1},
309  {"Мелисса", 1}, {"Мелководье", 2},
310  {"Мелоди", 1}, {"Мертвец", 0},
311  {"Мертвый", 0}, {"Местная", 1},
312  {"Местный", 0}, {"Мик", 0},
313  {"Минди", 1}, {"Минеральные", 2},
314  {"Миникора", 1}, {"Минни", 1},
315  {"Мириам", 1}, {"Митч", 0},
316  {"Мишель", 1}, {"Могучий", 0},
317  {"Мойра", 1}, {"Монах", 0},
318  {"Моника", 1}, {"Монте", 0},
319  {"Морел", 0}, {"Морина", 1},
320  {"Моррис", 0}, {"Мортон", 0},
321  {"Мохаммед", 0}, {"Мраморная", 1},
322  {"Мудрый", 0}, {"Мэл", 0},
323  {"Мэнди", 1}, {"Мэри", 1},
324  {"Мэри", 1}, {"Мэрилин", 1},
325  {"Мюрель", 1}, {"Мюррей", 0},
326  {"Надина", 1}, {"Налётчик", 0},
327  {"Наоми", 1}, {"Натали", 1},
328  {"Натан", 0}, {"Натаниэль", 0},
329  {"Начальная", 1}, {"Небеса", 1},
330  {"Нед", 0}, {"Некромант", 0},
331  {"Нельсон", 0}, {"Неустрашимый", 0},
332  {"Ник", 0}, {"Ники", 1},
333  {"Николай", 0}, {"Николас", 0},
334  {"Николь", 1}, {"Нил", 0},
335  {"Новобранец", 0}, {"Ной", 0},
336  {"Норина", 1}, {"Норм", 0},
337  {"Норма", 1}, {"Норман", 0},
338  {"Норрис", 0}, {"Ньют", 0},
339  {"Нэйт", 0}, {"Нэнси", 1},
340  {"Нэнсис", 1}, {"Обсидиановая", 1},
341  {"Огненный", 0}, {"Олаф", 0},
342  {"Оливер", 0}, {"Оливия", 1},
343  {"Орден", 0}, {"Особняк", 0},
344  {"Остин", 0}, {"Отис", 0},
345  {"Оувен", 0}, {"Охотник", 0},
346  {"Павел", 0}, {"Пам", 1},
347  {"Памела", 1}, {"Паркер", 0},
348  {"Парти", 1}, {"Патрик", 0},
349  {"Патрисия", 1}, {"Пег", 1},
350  {"Пегги", 1}, {"Пейдж", 1},
351  {"Пенни", 1}, {"Перри", 0},
352  {"Перси", 0}, {"Персиваль", 0},
353  {"Петер", 0}, {"Пикси", 1},
354  {"Пирс", 0}, {"Пит", 0},
355  {"Плавучий", 0}, {"Покои", 2},
356  {"Пол", 0}, {"Посвящённый", 0},
357  {"Посвященный", 0}, {"Последний", 0},
358  {"Послушник", 0}, {"Постоялый", 0},
359  {"Предводитель", 0}, {"Престон", 0},
360  {"Привидение", 2}, {"Придорожный", 0},
361  {"Призрак", 0}, {"Природные", 2},
362  {"Пьер", 0}, {"Пэт", 0},
363  {"Пэтти", 1}, {"Раду", 0},
364  {"Разбойник", 0}, {"Райан", 0},
365  {"Раймонд", 0}, {"Ральф", 0},
366  {"Рамей", 0}, {"Рамси", 0},
367  {"Рандольф", 0}, {"Рассел", 0},
368  {"Расти", 0}, {"Ратуша", 1},
369  {"Рауль", 0}, {"Рафаэль", 0},
370  {"Рашель", 1}, {"Ребекка", 1},
371  {"Реви", 1}, {"Рег", 0},
372  {"Регина", 1}, {"Реджинальд", 0},
373  {"Рекс", 0}, {"Рене", 0},
374  {"Рени", 1}, {"Ренцо", 0},
375  {"Ресанда", 1}, {"Речной", 0},
376  {"Рики", 0}, {"Ринальдо", 0},
377  {"Рита", 1}, {"Ричард", 0},
378  {"Роб", 0}, {"Робби", 0},
379  {"Роберт", 0}, {"Роберта", 1},
380  {"Робин", 0}, {"Рогатый", 0},
381  {"Родерик", 0}, {"Родни", 0},
382  {"Роза", 1}, {"Розали", 1},
383  {"Розанна", 1}, {"Рози", 1},
384  {"Розмари", 1}, {"Розмарина", 1},
385  {"Рой", 0}, {"Роки", 0},
386  {"Роланд", 0}, {"Ромона", 1},
387  {"Рон", 0}, {"Рональд", 0},
388  {"Ронда", 1}, {"Рори", 0},
389  {"Росс", 0}, {"Роуз", 1},
390  {"Рошель", 1}, {"Рубина", 1},
391  {"Руди", 0}, {"Руперт", 0},
392  {"Рут", 1}, {"Рути", 1},
393  {"Рэндал", 0}, {"Рэнди", 0},
394  {"Саад", 0}, {"Сабрина", 1},
395  {"Сади", 1}, {"Сал", 0},
396  {"Салли", 1}, {"Сальваторе", 0},
397  {"Самюэль", 0}, {"Сандип", 0},
398  {"Сандра", 1}, {"Сантос", 0},
399  {"Сапфировый", 0}, {"Сара", 1},
400  {"Свен", 0}, {"Свет", 0},
401  {"Светлана", 1}, {"Светящийся", 0},
402  {"Святилище", 2}, {"Священная", 1},
403  {"Священник", 0}, {"Себастьян", 0},
404  {"Седрик", 0}, {"Сеймур", 0},
405  {"Секлия", 1}, {"Селена", 1},
406  {"Сергио", 0}, {"Серена", 1},
407  {"Серый", 0}, {"Сесиль", 0},
408  {"Сет", 0}, {"Сидней", 0},
409  {"Сильвестр", 0}, {"Сильфида", 1},
410  {"Симон", 0}, {"Симона", 1},
411  {"Синди", 1}, {"Синдис", 1},
412  {"Синий", 0}, {"Синтия", 1},
413  {"Скалис", 0}, {"Скелет", 0},
414  {"Скорпикора", 1}, {"Скотт", 0},
415  {"Слабый", 0}, {"Слейд", 0},
416  {"Собака", 1}, {"Собор", 0},
417  {"Сол", 0}, {"Солнце", 2},
418  {"Сонни", 0}, {"Спенсер", 0},
419  {"Старший", 0}, {"Стейси", 1},
420  {"Стелс", 0}, {"Стефан", 0},
421  {"Стефани", 1}, {"Стив", 0},
422  {"Стивен", 0}, {"Сторожевая", 1},
423  {"Страж", 0}, {"Стражник", 0},
424  {"Стрекозавр", 0}, {"Стрелок", 0},
425  {"Стэн", 0}, {"Стэнли", 0},
426  {"Стюарт", 0}, {"Суанна", 1},
427  {"Судья", 0}, {"Сулейман", 0},
428  {"Сумеречный", 0}, {"Сьюзан", 1},
429  {"Сьюзи", 1}, {"Сэм", 0},
430  {"Сэнди", 1}, {"Сэндин", 1},
431  {"Сэра", 1}, {"Сюзанна", 1},
432  {"Тадеус", 0}, {"Тайлер", 0},
433  {"Тайсон", 0}, {"Така", 0},
434  {"Тамара", 1}, {"Тамми", 1},
435  {"Таня", 1}, {"Тара", 1},
436  {"Тейн", 0}, {"Теодор", 0},
437  {"Тереза", 1}, {"Тереса", 1},
438  {"Терранс", 0}, {"Терри", 1},
439  {"Тим", 0}, {"Тимоти", 0},
440  {"Тина", 1}, {"Тиффани", 1},
441  {"Тобиас", 0}, {"Тодд", 0},
442  {"Том", 0}, {"Томас", 0},
443  {"Тон", 0}, {"Тони", 0},
444  {"Тор", 0}, {"Тран", 0},
445  {"Траян", 0}, {"Трейси", 1},
446  {"Трент", 0}, {"Трентон", 0},
447  {"Трина", 1}, {"Трип", 0},
448  {"Трисия", 1}, {"Троглодит", 0},
449  {"Тронный", 0}, {"Трувор", 0},
450  {"Трэвис", 0}, {"Туманный", 0},
451  {"Тэд", 0}, {"Тэрри", 1},
452  {"Тюрьма", 1}, {"Уальдо", 0},
453  {"Уилберт", 0}, {"Уильсон", 0},
454  {"Ундина", 1}, {"Уоллес", 0},
455  {"Уоррен", 0}, {"Упырь", 0},
456  {"Учебный", 0}, {"Уэбб", 0},
457  {"Фабиан", 0}, {"Фамильный", 0},
458  {"Фарелл", 0}, {"Федрус", 0},
459  {"Фейт", 1}, {"Феликс", 0},
460  {"Фелиция", 1}, {"Фердинанд", 0},
461  {"Фил", 0}, {"Филип", 0},
462  {"Филлис", 1}, {"Филомена", 1},
463  {"Флетчер", 0}, {"Флойд", 0},
464  {"Флоренция", 1}, {"Флосси", 1},
465  {"Форрест", 0}, {"Франк", 0},
466  {"Франклин", 0}, {"Франц", 0},
467  {"Франциск", 0}, {"Франческа", 1},
468  {"Фред", 0}, {"Фредерик", 0},
469  {"Хавьер", 0}, {"Хайден", 0},
470  {"Хайди", 1}, {"Хан", 0},
471  {"Ханк", 0}, {"Ханн", 0},
472  {"Хаос", 0}, {"Харви", 0},
473  {"Харди", 0}, {"Хариетта", 1},
474  {"Харлан", 0}, {"Харлей", 0},
475  {"Харольд", 0}, {"Харрисон", 0},
476  {"Хелен", 1}, {"Хильда", 1},
477  {"Хит", 0}, {"Хитер", 1},
478  {"Хитет", 0}, {"Хитоми", 1},
479  {"Ходячий", 0}, {"Хок", 0},
480  {"Холден", 0}, {"Холли", 1},
481  {"Храм", 0}, {"Хранилище", 2},
482  {"Хью", 0}, {"Хьюго", 0},
483  {"Хэл", 0}, {"Хэмптон", 0},
484  {"Царь", 0}, {"Цезарь", 0},
485  {"Циклон", 0}, {"Цитадель", 1},
486  {"Чад", 0}, {"Чак", 0},
487  {"Чан", 0}, {"Чандра", 1},
488  {"Чарли", 0}, {"Чарльз", 0},
489  {"Чародей", 0}, {"Часовой", 0},
490  {"Чемпион", 0}, {"Черная", 1},
491  {"Чернокнижник", 0}, {"Чертог", 0},
492  {"Честер", 0}, {"Чет", 0},
493  {"Чип", 0}, {"Чудище", 2},
494  {"Шатер", 0}, {"Шахтерская", 1},
495  {"Шейла", 1}, {"Шейлани", 1},
496  {"Шелдон", 0}, {"Шелл", 0},
497  {"Шелли", 1}, {"Шеллис", 1},
498  {"Шердон", 0}, {"Шерил", 1},
499  {"Шерман", 0}, {"Шерри", 1},
500  {"Шеррин", 1}, {"Шимон", 0},
501  {"Школа", 1}, {"Шон", 0},
502  {"Шоуна", 1}, {"Штаб", 0},
503  {"Шэнон", 1}, {"Шэри", 1},
504  {"Шэрон", 1}, {"Эван", 0},
505  {"Эвелин", 1}, {"Эд", 0},
506  {"Эдгар", 0}, {"Эдди", 0},
507  {"Эдисон", 0}, {"Эдит", 1},
508  {"Эдмонд", 0}, {"Эдна", 1},
509  {"Эйб", 0}, {"Эйлин", 1},
510  {"Эйприл", 1}, {"Экспертная", 1},
511  {"Эл", 0}, {"Элвин", 0},
512  {"Элегантный", 0}, {"Элен", 1},
513  {"Элеонора", 1}, {"Элиот", 0},
514  {"Элисон", 1}, {"Элисса", 1},
515  {"Элитный", 0}, {"Элла", 1},
516  {"Эллен", 1}, {"Элси", 1},
517  {"Элтон", 0}, {"Эльф", 0},
518  {"Эми", 1}, {"Эмиль", 0},
519  {"Эмма", 1}, {"Эммануил", 0},
520  {"Эммет", 0}, {"Энджи", 1},
521  {"Энди", 0}, {"Энн", 1},
522  {"Энн", 2}, {"Энок", 0},
523  {"Эрвин", 0}, {"Эрик", 0},
524  {"Эрин", 1}, {"Эрл", 0},
525  {"Эрнест", 0}, {"Эрни", 0},
526  {"Эрнин", 0}, {"Эрол", 0},
527  {"Этан", 0}, {"Этель", 1},
528  {"Эш", 0}, {"Эштон", 0},
529  {"Юдифь", 1}, {"Юрий", 0},
530  {"Ядовитый", 0}, {"Якоб", 0},
531  {"Ян", 0}, {"Янси", 0},
532  {"Ярод", 0}, {"Яспер", 0}},
533  gender_table[] = {
534  {"ад", 0}, {"акула", 1}, {"банк", 0}, {"башня", 1},
535  {"бластер", 0}, {"вампир", 0}, {"вдова", 1}, {"ведьма", 1},
536  {"витерсмит", 0}, {"владыка", 0}, {"владычица", 1}, {"воин", 0},
537  {"вор", 0}, {"гидра", 1}, {"глаз", 0}, {"голем", 0},
538  {"гора", 1}, {"горгулья", 1}, {"город", 0}, {"громовая", 1},
539  {"двор", 0}, {"джинн", 0}, {"дракон", 0}, {"дух", 0},
540  {"житель", 0}, {"жительница", 1}, {"зал", 0}, {"защитник", 0},
541  {"земля", 1}, {"искатель", 0}, {"ифрит", 0}, {"квартира", 1},
542  {"кольчуга", 1}, {"командир", 0}, {"крыса", 1}, {"лейтенант", 0},
543  {"луна", 1}, {"людоед", 0}, {"магог", 0}, {"меч", 0},
544  {"мечник", 0}, {"минотавр", 0}, {"мышь", 1}, {"наемник", 0},
545  {"огненная", 1}, {"огонь", 0}, {"орк", 0}, {"паук", 0},
546  {"пещера", 1}, {"пещеры", 1}, {"повелитель", 0}, {"погреб", 0},
547  {"полигон", 0}, {"приют", 0}, {"птица", 1}, {"птичий", 0},
548  {"работник", 0}, {"рай", 0}, {"рейнджер", 0}, {"рух", 0},
549  {"слизень", 0}, {"солдат", 0}, {"титан", 0}, {"трактир", 0},
550  {"тролль", 0}, {"убийца", 0}, {"улан", 0}, {"училище", 2},
551  {"шляпа", 1}, {"элементал", 0}};
552 
553 int GetGender(char *ansi_name, int name_len) {
554  auto name = (unsigned char *)ansi_name;
555 
556  GenderTableEntry *table = nullptr;
557  unsigned int table_size = 0;
558  if (name[0] >= (unsigned char)'а' && name[0] <= (unsigned char)'я') {
560  table_size = sizeof(gender_table) / sizeof(*gender_table);
561  } else if (name[0] >= (unsigned char)'А' && name[0] <= (unsigned char)'Я') {
563  table_size = sizeof(gender_table_caps) / sizeof(*gender_table_caps);
564  } else {
565  return 0;
566  }
567 
568  int left = 0, right = table_size - 1, match = 0;
569  while (left < right - 1) {
570  match = left + (right - left) / 2;
571  int rval = _mbsncmp(name, (unsigned char *)table[match].name, name_len);
572  if (rval < 0)
573  right = match;
574  else if (!rval)
575  return table[match].gender;
576  else
577  left = match;
578  }
579 
580  logger->Warning(L"sprintfex: unknown gender: %S", name);
581  return 0;
582 }
583 
584 bool IsSpecialName(const char *ansi_name) {
585  auto name = (unsigned char *)ansi_name;
586  return !_mbsncmp(name, (unsigned char *)"Мэри Джо", 8) ||
587  !_mbsncmp(name, (unsigned char *)"Ли Энн", 6) ||
588  !_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14) ||
589  !_mbsncmp(name, (unsigned char *)"Стены тумана", 12);
590 }
591 int GetSpecialGender(const char *ansi_name) {
592  auto name = (unsigned char *)ansi_name;
593  if (!_mbsncmp(name, (unsigned char *)"Мэри Джо", 8)) return 1;
594  if (!_mbsncmp(name, (unsigned char *)"Ли Энн", 6)) return 1;
595  if (!_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14)) return 1;
596  if (!!_mbsncmp(name, (unsigned char *)"Стены тумана", 12)) return 0;
597  return 0;
598 }
599 const char *GetSpecialCase(const char *ansi_name, char c) {
600  auto name = (unsigned char *)ansi_name;
601 
602  if (!_mbsncmp(name, (unsigned char *)"Мэри Джо", 8)) return "Мэри Джо";
603  if (!_mbsncmp(name, (unsigned char *)"Ли Энн", 6)) return "Ли Энн";
604 
605  if (!_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14)) {
606  switch (c) {
607  case 'I':
608  case 'i':
609  return "Врата в Бездну";
610  case 'R':
611  case 'r':
612  return "Врат в Бездну";
613  case 'D':
614  case 'd':
615  return "Вратам в Бездну";
616  case 'V':
617  case 'v':
618  return "Врат в Бездну";
619  case 'T':
620  case 't':
621  return "Вратами в Бездну";
622  case 'P':
623  case 'p':
624  return "Вратах в Бездну";
625  }
626  }
627 
628  if (!_mbsncmp(name, (unsigned char *)"Стены тумана", 12)) {
629  switch (c) {
630  case 'I':
631  case 'i':
632  return "Стены тумана";
633  case 'R':
634  case 'r':
635  return "Стен тумана";
636  case 'D':
637  case 'd':
638  return "Стенам тумана";
639  case 'V':
640  case 'v':
641  return "Стены тумана";
642  case 'T':
643  case 't':
644  return "Стенами тумана";
645  case 'P':
646  case 'p':
647  return "Стенах тумана";
648  }
649  }
650 
651  return nullptr;
652 }
653 
654 int sprintfex(char *buf, const char *format, ...) {
655  va_list args_ptr;
656  va_start(args_ptr, format);
657  { vsprintf(buf, format, args_ptr); }
658  va_end(args_ptr);
659 
660  extern int sprintfex_internal(char *buf);
661  return sprintfex_internal(buf);
662 }
663 
664 int sprintfex_internal(char *str) {
665  auto p = strstr(str, "^");
666  if (!p) return strlen(str);
667 
668  char buf[8192];
669  Assert(strlen(str) < sizeof(buf));
670 
671  int next_integer_token = 0;
672  bool integer_tokens_defined[10] = {false, false, false, false, false,
673  false, false, false, false, false};
674  int integer_tokens[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
675 
676  bool gender_token_defined = false;
677  int gender_token = 0;
678 
679  auto src = buf, dst = p;
680  strcpy(buf, str + (p - str));
681  while (true) {
682  switch (src[1]) {
683  case 'I': {
684  if (src[2] != '[') goto _invalid_token;
685  src += 3; // ^I[
686 
687  Assert(next_integer_token < 10);
688  if (sscanf(src, "%d", &integer_tokens[next_integer_token]))
689  integer_tokens_defined[next_integer_token++] = true;
690 
691  auto int_begin = src;
692  while (*src++ != ']');
693 
694  int int_len = src - int_begin - 1;
695  strncpy(dst, int_begin, int_len);
696  dst += int_len;
697  } break;
698 
699  case 'L': {
700  int integer_token_idx = 0;
701  if (src[2] >= '1' && src[2] <= '9') {
702  if (src[3] != '[') goto _invalid_token;
703  integer_token_idx = src[2] - '1';
704 
705  src += 1;
706  } else if (src[2] != '[') {
707  goto _invalid_token;
708  }
709 
710  Assert(integer_tokens_defined[integer_token_idx]);
711  src += 3; // ^L[
712 
713  auto ending1 = src;
714  while (*src++ != ';');
715  auto ending2 = src;
716  while (*src++ != ';');
717  auto ending3 = src;
718  while (*src++ != ']');
719 
720  char *actual_ending = nullptr;
721  int actual_ending_len = 0;
722 
723  int modulo = abs(integer_tokens[integer_token_idx]) % 10;
724  if (modulo == 1) {
725  actual_ending = ending1;
726  actual_ending_len = ending2 - ending1 - 1;
727  } else if (modulo >= 2 && modulo <= 4) {
728  actual_ending = ending2;
729  actual_ending_len = ending3 - ending2 - 1;
730  } else {
731  actual_ending = ending3;
732  actual_ending_len = src - ending3 - 1;
733  }
734 
735  strncpy(dst, actual_ending, actual_ending_len);
736  dst += actual_ending_len;
737  } break;
738 
739  case 'R': {
740  if (src[2] != '[') goto _invalid_token;
741  Assert(gender_token_defined);
742 
743  src += 3; // ^R[
744 
745  auto ending1 = src;
746  while (*src++ != ';');
747  auto ending2 = src;
748  while (*src++ != ';');
749  auto ending3 = src;
750  while (*src++ != ']');
751 
752  char *actual_ending = nullptr;
753  int actual_ending_len = 0;
754 
755  if (gender_token == 0) {
756  actual_ending = ending1;
757  actual_ending_len = ending2 - ending1 - 1;
758  } else if (gender_token == 1) {
759  actual_ending = ending2;
760  actual_ending_len = ending3 - ending2 - 1;
761  } else if (gender_token == 2) {
762  actual_ending = ending3;
763  actual_ending_len = src - ending3 - 1;
764  } else {
765  Error("Invalid gender token");
766  }
767 
768  strncpy(dst, actual_ending, actual_ending_len);
769  dst += actual_ending_len;
770  } break;
771 
772  case 'P': {
773  if (src[3] != '[') goto _invalid_token;
774  switch (src[2]) {
775  case 'I':
776  case 'i':
777  case 'R':
778  case 'r':
779  case 'D':
780  case 'd':
781  case 'V':
782  case 'v':
783  case 'T':
784  case 't':
785  case 'P':
786  case 'p':
787  break;
788  default:
789  goto _invalid_token;
790  }
791 
792  if (IsSpecialName(src + 4)) {
793  auto name = GetSpecialCase(src + 4, src[2]);
794  int name_len = strlen(name);
795 
796  gender_token = GetSpecialGender(src + 4);
797  gender_token_defined = true;
798 
799  strncpy(dst, name, name_len);
800  dst += name_len;
801  while (*src++ != ']');
802  break;
803  }
804 
805  auto name_begin = src + 4;
806  int name_len = 0;
807  for (int i = 0; name_begin[i] != ']'; ++i) name_len++;
808  gender_token = GetGender(name_begin, name_len);
809  gender_token_defined = true;
810 
811  switch (src[2]) {
812  case 'I':
813  case 'i':
814  case 'V':
815  case 'v':
816  case 'R':
817  case 'r':
818  case 'D':
819  case 'd':
820  case 'T':
821  case 't': {
822  strncpy(dst, name_begin, name_len);
823  dst += name_len;
824  } break;
825 
826  case 'P':
827  case 'p': {
828  auto token_begin = src;
829  int token_len = 1;
830  for (int i = 0; token_begin[i] != ']'; ++i) token_len++;
831  strncpy(dst, token_begin, token_len);
832  dst += token_len;
833  }
834  }
835  while (*src++ != ']');
836  } break;
837 
838  default: {
839  _invalid_token:
840  auto token_begin = src;
841  while (*src++ != ']');
842 
843  int token_len = src - token_begin;
844  char token[1024];
845  strncpy(token, token_begin, token_len);
846  token[token_len] = 0;
847 
848  Error("Invalid format token: %s", token);
849  } break;
850  }
851 
852  *dst = 0;
853 
854  auto copy_begin = src;
855  src = strstr(src, "^");
856  if (!src) {
857  strcpy(dst, copy_begin); // just copy the rest
858  break;
859  }
860 
861  int copy_len = src - copy_begin;
862  strncpy(dst, copy_begin, copy_len);
863  dst += copy_len;
864  }
865 
866  return dst - str;
867 }
868 
869 // mm6text.non -> c structure array
870 /*FILE *f = fopen("_1.txt", "w+t");
871 FILE *in = fopen("mm6text.non", "rt");
872 fscanf(in, "%*[^\n]\n");
873 
874 int idx = 0;
875 auto pairs = new NameGender[8000];
876 
877 char line[1024];
878 while (fscanf(in, "%[^\n]\n", line) && !feof(in))
879 {
880  char name1[100], name2[100], name3[100];
881  int e = sscanf(line, "%s\t%s\t%s", pairs[idx].name, pairs[idx + 1].name,
882 pairs[idx + 2].name); pairs[idx].gender = 0; pairs[idx+1].gender = 1;
883  pairs[idx+2].gender = 2;
884  idx += e;
885 }
886 
887 for (int i = 0; i < idx; ++i)
888  for (int j = 0; j < i; ++j)
889  {
890  if (_mbsicmp(pairs[i].name, pairs[j].name) < 0)
891  {
892  char n[1024];
893  strcpy(n, (char *)pairs[j].name);
894  auto g = pairs[j].gender;
895 
896  strcpy((char *)pairs[j].name, (char *)pairs[i].name);
897  pairs[j].gender = pairs[i].gender;
898 
899  strcpy((char *)pairs[i].name, n);
900  pairs[i].gender = g;
901  }
902  }
903 
904 for (int i = 0; i < idx; ++i)
905 {
906  fprintf(f, " {\"%s\", %u},\n", pairs[i].name, pairs[i].gender);
907 }
908 fclose(f);*/
right
GLdouble GLdouble right
Definition: SDL_opengl_glext.h:6106
IsSpecialName
bool IsSpecialName(const char *ansi_name)
Definition: mm7text_ru.cpp:584
GenderTableEntry::gender
int gender
Definition: mm7text_ru.cpp:13
Engine.h
format
SDL_AudioFormat format
Definition: SDL_audio.h:194
gender_table
struct GenderTableEntry gender_table[]
buf
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: SDL_opengl_glext.h:2483
sprintfex
int sprintfex(char *buf, const char *format,...)
Definition: mm7text_ru.cpp:654
GetGender
int GetGender(char *ansi_name, int name_len)
Definition: mm7text_ru.cpp:553
p
GLfloat GLfloat p
Definition: SDL_opengl_glext.h:11093
sprintfex_internal
int sprintfex_internal(char *str)
Definition: mm7text_ru.cpp:664
src
GLenum src
Definition: SDL_opengl_glext.h:1740
GetSpecialGender
int GetSpecialGender(const char *ansi_name)
Definition: mm7text_ru.cpp:591
GenderTableEntry
Definition: mm7text_ru.cpp:11
Log::Warning
void Warning(const wchar_t *pFormat,...)
Definition: Log.cpp:28
dst
GLenum GLenum dst
Definition: SDL_opengl_glext.h:1740
gender_table_caps
struct GenderTableEntry gender_table_caps[]
name
EGLImageKHR EGLint * name
Definition: SDL_egl.h:1497
GenderTableEntry::name
const char * name
Definition: mm7text_ru.cpp:12
c
const GLubyte * c
Definition: SDL_opengl_glext.h:11096
GetSpecialCase
const char * GetSpecialCase(const char *ansi_name, char c)
Definition: mm7text_ru.cpp:599
logger
Log * logger
Definition: IocContainer.cpp:47
left
GLint left
Definition: SDL_opengl_glext.h:1952
table
GLenum GLsizei GLenum GLenum const void * table
Definition: SDL_opengl_glext.h:3121