view Engine/mm7text_ru.cpp @ 2542:bacf9809126a

.
author a.parshin
date Sun, 10 May 2015 02:04:52 +0200
parents a902abdfc7f2
children
line wrap: on
line source

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#include "Engine/Engine.h"


struct GenderTableEntry
{
  const char *name;
  int         gender;
} gender_table_caps[] =
{
  {"Авель", 0},
  {"Адам", 0},
  {"Адриан", 0},
  {"Адрианис", 0},
  {"Адская", 1},
  {"Айр", 0},
  {"Акио", 0},
  {"Акира", 0},
  {"Алан", 0},
  {"Алейн", 0},
  {"Алек", 0},
  {"Александр", 0},
  {"Алексис", 1},
  {"Ален", 0},
  {"Алехандро", 0},
  {"Алиса", 1},
  {"Альберт", 0},
  {"Альтон", 0},
  {"Альтред", 0},
  {"Альфред", 0},
  {"Аманда", 1},
  {"Амбер", 1},
  {"Амброзий", 0},
  {"Амелия", 1},
  {"Амос", 0},
  {"Ангел", 0},
  {"Андреа", 1},
  {"Андрей", 0},
  {"Анжела", 1},
  {"Анита", 1},
  {"Анна", 1},
  {"Антон", 0},
  {"Антоний", 0},
  {"Арби", 0},
  {"Арда", 0},
  {"Арден", 0},
  {"Арена", 1},
  {"Аристей", 0},
  {"Аристидис", 0},
  {"Арих", 0},
  {"Ариэль", 0},
  {"Арлен", 0},
  {"Арло", 0},
  {"Арманд", 0},
  {"Арнольд", 0},
  {"Арон", 0},
  {"Артур", 0},
  {"Архангел", 0},
  {"Архимаг", 0},
  {"Ахмед", 0},
  {"Бёртон", 0},
  {"Бад", 0},
  {"Байрон", 0},
  {"Бандит", 0},
  {"Бар", 0},
  {"Барбара", 1},
  {"Баретт", 0},
  {"Барт", 0},
  {"Батч", 0},
  {"Беатрис", 1},
  {"Беверли", 1},
  {"Беки", 1},
  {"Белинда", 1},
  {"Бен", 0},
  {"Бенджамин", 0},
  {"Бенедикт", 0},
  {"Бенито", 0},
  {"Беннет", 0},
  {"Бенни", 0},
  {"Бенуа", 0},
  {"Бернадетта", 1},
  {"Бернард", 0},
  {"Берни", 0},
  {"Бернис", 1},
  {"Бернучо", 0},
  {"Берт", 0},
  {"Бертран", 0},
  {"Бет", 1},
  {"Бетси", 1},
  {"Бетти", 1},
  {"Билли", 0},
  {"Биллис", 1},
  {"Бишоп", 0},
  {"Блейк", 0},
  {"Блейн", 0},
  {"Блондо", 0},
  {"Бо", 0},
  {"Боб", 0},
  {"Бобби", 0},
  {"Бодо", 0},
  {"Болотный", 0},
  {"Большой", 0},
  {"Бонни", 1},
  {"Борегард", 0},
  {"Борис", 0},
  {"Браден", 0},
  {"Брайс", 0},
  {"Брат", 0},
  {"Брейн", 0},
  {"Бренда", 1},
  {"Брендон", 0},
  {"Брент", 0},
  {"Брет", 0},
  {"Бронвин", 0},
  {"Бронзовый", 0},
  {"Брук", 0},
  {"Бруно", 0},
  {"Брэд", 0},
  {"Брэдли", 0},
  {"Брэдфорд", 0},
  {"Брэндон", 0},
  {"Брюс", 0},
  {"Буфорд", 0},
  {"Вадим", 0},
  {"Вал", 0},
  {"Валерия", 1},
  {"Вальтер", 0},
  {"Ванда", 1},
  {"Ванесса", 1},
  {"Ванетта", 1},
  {"Ванс", 0},
  {"Вейн", 0},
  {"Великий", 0},
  {"Венделл", 0},
  {"Венди", 1},
  {"Вера", 1},
  {"Верн", 0},
  {"Вернон", 0},
  {"Вероника", 1},
  {"Верховная", 1},
  {"Весли", 0},
  {"Виверн", 0},
  {"Вивьен", 1},
  {"Вики", 1},
  {"Виктор", 0},
  {"Викторис", 0},
  {"Виктория", 1},
  {"Вилам", 0},
  {"Вилл", 0},
  {"Виллард", 0},
  {"Вильма", 1},
  {"Вильфред", 0},
  {"Вильям", 0},
  {"Винный", 0},
  {"Винстон", 0},
  {"Винченцо", 0},
  {"Виолет", 1},
  {"Виргилий", 0},
  {"Виргиния", 1},
  {"Вихрь", 0},
  {"Владимир", 0},
  {"Властелин", 0},
  {"Водный", 0},
  {"Военное", 2},
  {"Воздушная", 1},
  {"Воздушный", 0},
  {"Волхв", 0},
  {"Вольг", 0},
  {"Восставший", 0},
  {"Врата", 1},
  {"Вудро", 0},
  {"Вурдалак", 0},
  {"Высшая", 1},
  {"Вэйд", 0},
  {"Габриэль", 0},
  {"Гай", 0},
  {"Ганс", 0},
  {"Гарет", 0},
  {"Гари", 0},
  {"Гарпия", 1},
  {"Гарри", 0},
  {"Гвендолин", 1},
  {"Гвенн", 1},
  {"Гейб", 0},
  {"Гейл", 1},
  {"Гектор", 0},
  {"Гельмут", 0},
  {"Геникки", 1},
  {"Генри", 0},
  {"Георгина", 1},
  {"Герб", 0},
  {"Герберт", 0},
  {"Герман", 0},
  {"Гертруда", 1},
  {"Герц", 0},
  {"Гигантская", 1},
  {"Гильдия", 1},
  {"Гильермо", 0},
  {"Гильмор", 0},
  {"Гимнастический", 0},
  {"Глазище", 2},
  {"Глен", 0},
  {"Гленда", 1},
  {"Глиняный", 0},
  {"Глория", 1},
  {"Гниющий", 0},
  {"Гном", 0},
  {"Гоблин", 0},
  {"Говард", 0},
  {"Гог", 0},
  {"Гомер", 0},
  {"Гонзало", 0},
  {"Гораций", 0},
  {"Гордон", 0},
  {"Горный", 0},
  {"Грабитель", 0},
  {"Грант", 0},
  {"Грахэм", 0},
  {"Грег", 0},
  {"Грегори", 0},
  {"Грей", 0},
  {"Гретхен", 1},
  {"Грифон", 0},
  {"Грозовой", 0},
  {"Гус", 0},
  {"Давид", 0},
  {"Дайана", 1},
  {"Дал", 0},
  {"Даллас", 0},
  {"Дамиан", 0},
  {"Дана", 1},
  {"Даниэль", 0},
  {"Данте", 0},
  {"Дара", 1},
  {"Дарлин", 1},
  {"Дарон", 0},
  {"Дарси", 1},
  {"Дастин", 0},
  {"Дафна", 1},
  {"Двайт", 0},
  {"Двейн", 0},
  {"Деанна", 1},
  {"Дебби", 1},
  {"Дебора", 1},
  {"Девон", 0},
  {"Дейв", 0},
  {"Дейл", 0},
  {"Дел", 0},
  {"Делорис", 1},
  {"Денис", 1},
  {"Денни", 0},
  {"Депозитарий", 0},
  {"Дерево", 2},
  {"Дерек", 0},
  {"Десмонд", 0},
  {"Джанис", 1},
  {"Джастин", 0},
  {"Джед", 0},
  {"Джедай", 0},
  {"Джей", 0},
  {"Джейк", 0},
  {"Джеймс", 0},
  {"Джейн", 1},
  {"Джейсон", 0},
  {"Джек", 0},
  {"Джеки", 1},
  {"Джеми", 0},
  {"Дженифер", 1},
  {"Дженни", 1},
  {"Джеральд", 0},
  {"Джеральдина", 1},
  {"Джером", 0},
  {"Джероми", 0},
  {"Джерри", 0},
  {"Джесс", 0},
  {"Джесса", 1},
  {"Джессика", 1},
  {"Джетано", 0},
  {"Джим", 0},
  {"Джин", 1},
  {"Джина", 1},
  {"Джинжер", 1},
  {"Джинни", 1},
  {"Джино", 0},
  {"Джо", 2},
  {"Джоан", 1},
  {"Джоанн", 1},
  {"Джоанна", 1},
  {"Джозеф", 0},
  {"Джой", 0},
  {"Джойс", 1},
  {"Джойсин", 1},
  {"Джон", 0},
  {"Джонатан", 0},
  {"Джордж", 0},
  {"Джоу", 0},
  {"Джошуа", 0},
  {"Джоэль", 0},
  {"Джуд", 0},
  {"Джуди", 1},
  {"Джудис", 1},
  {"Джули", 1},
  {"Джун", 1},
  {"Диана", 1},
  {"Дилан", 0},
  {"Дин", 0},
  {"Дитер", 0},
  {"Додридж", 0},
  {"Док", 0},
  {"Долорес", 1},
  {"Дольф", 0},
  {"Дом", 0},
  {"Доминик", 0},
  {"Доминика", 1},
  {"Дон", 0},
  {"Донайс", 1},
  {"Дональд", 0},
  {"Донна", 1},
  {"Дорин", 1},
  {"Дорис", 1},
  {"Дороти", 1},
  {"Драконовая", 1},
  {"Древнее", 2},
  {"Древний", 0},
  {"Друид", 0},
  {"Дрю", 0},
  {"Дуглас", 0},
  {"Дункан", 0},
  {"Дьявол", 0},
  {"Дэви", 0},
  {"Дэн", 0},
  {"Дэнис", 0},
  {"Дэнни", 0},
  {"Дюк", 0},
  {"Ева", 1},
  {"Евгений", 0},
  {"Елизавета", 1},
  {"Жан-Поль", 0},
  {"Жан-Пьер", 0},
  {"Жанета", 1},
  {"Жанетт", 1},
  {"Жанетта", 1},
  {"Жанин", 1},
  {"Жанис", 1},
  {"Жанна", 1},
  {"Жасмин", 1},
  {"Жейн", 1},
  {"Женна", 1},
  {"Жильбер", 0},
  {"Жофрей", 0},
  {"Жуль", 0},
  {"Зак", 0},
  {"Замок", 0},
  {"Замороженные", 2},
  {"Захарий", 0},
  {"Зебулон", 0},
  {"Зеленый", 0},
  {"Земной", 0},
  {"Зигги", 0},
  {"Зик", 0},
  {"Златые", 2},
  {"Зод", 0},
  {"Золотой", 0},
  {"Золтан", 0},
  {"Зорекс", 0},
  {"Ив", 0},
  {"Иван", 0},
  {"Ивар", 0},
  {"Иверсон", 0},
  {"Ивонна", 1},
  {"Игнасио", 0},
  {"Игорь", 0},
  {"Ида", 1},
  {"Иеремия", 0},
  {"Измаил", 0},
  {"Изумрудный", 0},
  {"Ике", 0},
  {"Илена", 1},
  {"Илья", 0},
  {"Имение", 2},
  {"Инкубатор", 0},
  {"Иоланда", 1},
  {"Ион", 0},
  {"Иона", 0},
  {"Иоханн", 0},
  {"Ирвин", 0},
  {"Ирвинг", 0},
  {"Ирена", 1},
  {"Ирина", 1},
  {"Ирис", 1},
  {"Ирма", 1},
  {"Исаак", 0},
  {"Исао", 0},
  {"Йордан", 0},
  {"Каао", 0},
  {"Кай", 0},
  {"Калеб", 0},
  {"Кальвин", 0},
  {"Каменная", 1},
  {"Каменный", 0},
  {"Кандейс", 1},
  {"Капитан", 0},
  {"Карен", 1},
  {"Кари", 0},
  {"Карин", 0},
  {"Карл", 0},
  {"Карли", 1},
  {"Карло", 0},
  {"Карлон", 0},
  {"Карлос", 0},
  {"Кармен", 1},
  {"Картер", 0},
  {"Касандра", 1},
  {"Катерина", 1},
  {"Кати", 1},
  {"Катлин", 1},
  {"Кван", 0},
  {"Квентин", 0},
  {"Квинн", 0},
  {"Кевин", 0},
  {"Кевинус", 0},
  {"Кейлин", 1},
  {"Кейт", 0},
  {"Кел", 0},
  {"Келли", 1},
  {"Кен", 0},
  {"Кеннет", 0},
  {"Кери", 1},
  {"Керн", 0},
  {"Киган", 0},
  {"Ким", 1},
  {"Кимберли", 1},
  {"Кирк", 0},
  {"Кирус", 0},
  {"Клайд", 0},
  {"Кларенс", 0},
  {"Кларк", 0},
  {"Клирик", 0},
  {"Клиффорд", 0},
  {"Клэй", 0},
  {"Клэр", 1},
  {"Коди", 0},
  {"Колин", 0},
  {"Колония", 1},
  {"Конни", 1},
  {"Коннор", 0},
  {"Конрад", 0},
  {"Константин", 0},
  {"Констанция", 1},
  {"Копи", 2},
  {"Кора", 1},
  {"Корбет", 0},
  {"Корд", 0},
  {"Кори", 0},
  {"Корисо", 0},
  {"Корнелия", 1},
  {"Корнилий", 0},
  {"Королева", 1},
  {"Королевский", 0},
  {"Король", 0},
  {"Кошка", 1},
  {"Красный", 0},
  {"Крейг", 0},
  {"Крис", 0},
  {"Криста", 1},
  {"Кристен", 1},
  {"Кристина", 1},
  {"Кристис", 1},
  {"Кристофер", 0},
  {"Кровавый", 0},
  {"Ксуан", 0},
  {"Кулак", 0},
  {"Курган", 0},
  {"Курица", 1},
  {"Кэй", 1},
  {"Кэйс", 1},
  {"Кэл", 0},
  {"Кэлло", 0},
  {"Кэмерон", 0},
  {"Кэнди", 1},
  {"Кэри", 1},
  {"Кэрол", 1},
  {"Кэролан", 1},
  {"Кэролин", 1},
  {"Кэрри", 1},
  {"Кэси", 0},
  {"Лабиринт", 0},
  {"Лаборатория", 1},
  {"Лазарь", 0},
  {"Лайонел", 0},
  {"Лаки", 0},
  {"Лана", 1},
  {"Ланс", 0},
  {"Лара", 1},
  {"Ларри", 0},
  {"Ларс", 0},
  {"Лаура", 1},
  {"Лаури", 1},
  {"Леа", 1},
  {"Леаса", 1},
  {"Лейф", 0},
  {"Лео", 0},
  {"Леонард", 0},
  {"Леора", 1},
  {"Лерой", 0},
  {"Лесли", 1},
  {"Лестер", 0},
  {"Летучая", 1},
  {"Ли", 0},
  {"Ли", 1},
  {"Лиам", 0},
  {"Ливия", 1},
  {"Лиза", 1},
  {"Лила", 1},
  {"Лиланд", 0},
  {"Лилли", 1},
  {"Лиман", 0},
  {"Линда", 1},
  {"Линден", 0},
  {"Линдсей", 0},
  {"Линн", 1},
  {"Лион", 0},
  {"Лич", 0},
  {"Ллойд", 0},
  {"Ловчий", 0},
  {"Логан", 0},
  {"Логово", 2},
  {"Лон", 0},
  {"Лонни", 0},
  {"Лора", 1},
  {"Лорд", 0},
  {"Лорен", 1},
  {"Лорена", 1},
  {"Лоу", 0},
  {"Лоувелл", 0},
  {"Лояльный", 0},
  {"Луи", 0},
  {"Луиджи", 0},
  {"Луиза", 1},
  {"Луис", 0},
  {"Луиса", 1},
  {"Лучник", 0},
  {"Льюис", 0},
  {"Людвиг", 0},
  {"Люк", 0},
  {"Люсиль", 1},
  {"Лютер", 0},
  {"Маделена", 1},
  {"Майк", 0},
  {"Майлз", 0},
  {"Майлс", 0},
  {"Мак", 0},
  {"Макро", 0},
  {"Макс", 0},
  {"Максвелл", 0},
  {"Малкольм", 0},
  {"Малый", 0},
  {"Мами", 1},
  {"Манни", 0},
  {"Мантикора", 1},
  {"Манфред", 0},
  {"Марвин", 0},
  {"Маргарита", 1},
  {"Марджори", 1},
  {"Марж", 1},
  {"Мариана", 1},
  {"Марианна", 1},
  {"Марио", 0},
  {"Марион", 0},
  {"Марис", 1},
  {"Мариса", 1},
  {"Маришаль", 1},
  {"Мария", 1},
  {"Марк", 0},
  {"Марко", 0},
  {"Маркони", 0},
  {"Маркус", 0},
  {"Марлен", 1},
  {"Марлон", 0},
  {"Марни", 1},
  {"Марси", 1},
  {"Марсия", 1},
  {"Марта", 1},
  {"Мартил", 1},
  {"Мартин", 0},
  {"Мархэм", 0},
  {"Марчелло", 0},
  {"Марша", 1},
  {"Маршал", 0},
  {"Мастер", 0},
  {"Матвей", 0},
  {"Материальные", 2},
  {"Матт", 0},
  {"Мегадракон", 0},
  {"Медный", 0},
  {"Медуза", 1},
  {"Мейм", 1},
  {"Мелани", 1},
  {"Мелвин", 0},
  {"Мелинда", 1},
  {"Мелисса", 1},
  {"Мелководье", 2},
  {"Мелоди", 1},
  {"Мертвец", 0},
  {"Мертвый", 0},
  {"Местная", 1},
  {"Местный", 0},
  {"Мик", 0},
  {"Минди", 1},
  {"Минеральные", 2},
  {"Миникора", 1},
  {"Минни", 1},
  {"Мириам", 1},
  {"Митч", 0},
  {"Мишель", 1},
  {"Могучий", 0},
  {"Мойра", 1},
  {"Монах", 0},
  {"Моника", 1},
  {"Монте", 0},
  {"Морел", 0},
  {"Морина", 1},
  {"Моррис", 0},
  {"Мортон", 0},
  {"Мохаммед", 0},
  {"Мраморная", 1},
  {"Мудрый", 0},
  {"Мэл", 0},
  {"Мэнди", 1},
  {"Мэри", 1},
  {"Мэри", 1},
  {"Мэрилин", 1},
  {"Мюрель", 1},
  {"Мюррей", 0},
  {"Надина", 1},
  {"Налётчик", 0},
  {"Наоми", 1},
  {"Натали", 1},
  {"Натан", 0},
  {"Натаниэль", 0},
  {"Начальная", 1},
  {"Небеса", 1},
  {"Нед", 0},
  {"Некромант", 0},
  {"Нельсон", 0},
  {"Неустрашимый", 0},
  {"Ник", 0},
  {"Ники", 1},
  {"Николай", 0},
  {"Николас", 0},
  {"Николь", 1},
  {"Нил", 0},
  {"Новобранец", 0},
  {"Ной", 0},
  {"Норина", 1},
  {"Норм", 0},
  {"Норма", 1},
  {"Норман", 0},
  {"Норрис", 0},
  {"Ньют", 0},
  {"Нэйт", 0},
  {"Нэнси", 1},
  {"Нэнсис", 1},
  {"Обсидиановая", 1},
  {"Огненный", 0},
  {"Олаф", 0},
  {"Оливер", 0},
  {"Оливия", 1},
  {"Орден", 0},
  {"Особняк", 0},
  {"Остин", 0},
  {"Отис", 0},
  {"Оувен", 0},
  {"Охотник", 0},
  {"Павел", 0},
  {"Пам", 1},
  {"Памела", 1},
  {"Паркер", 0},
  {"Парти", 1},
  {"Патрик", 0},
  {"Патрисия", 1},
  {"Пег", 1},
  {"Пегги", 1},
  {"Пейдж", 1},
  {"Пенни", 1},
  {"Перри", 0},
  {"Перси", 0},
  {"Персиваль", 0},
  {"Петер", 0},
  {"Пикси", 1},
  {"Пирс", 0},
  {"Пит", 0},
  {"Плавучий", 0},
  {"Покои", 2},
  {"Пол", 0},
  {"Посвящённый", 0},
  {"Посвященный", 0},
  {"Последний", 0},
  {"Послушник", 0},
  {"Постоялый", 0},
  {"Предводитель", 0},
  {"Престон", 0},
  {"Привидение", 2},
  {"Придорожный", 0},
  {"Призрак", 0},
  {"Природные", 2},
  {"Пьер", 0},
  {"Пэт", 0},
  {"Пэтти", 1},
  {"Раду", 0},
  {"Разбойник", 0},
  {"Райан", 0},
  {"Раймонд", 0},
  {"Ральф", 0},
  {"Рамей", 0},
  {"Рамси", 0},
  {"Рандольф", 0},
  {"Рассел", 0},
  {"Расти", 0},
  {"Ратуша", 1},
  {"Рауль", 0},
  {"Рафаэль", 0},
  {"Рашель", 1},
  {"Ребекка", 1},
  {"Реви", 1},
  {"Рег", 0},
  {"Регина", 1},
  {"Реджинальд", 0},
  {"Рекс", 0},
  {"Рене", 0},
  {"Рени", 1},
  {"Ренцо", 0},
  {"Ресанда", 1},
  {"Речной", 0},
  {"Рики", 0},
  {"Ринальдо", 0},
  {"Рита", 1},
  {"Ричард", 0},
  {"Роб", 0},
  {"Робби", 0},
  {"Роберт", 0},
  {"Роберта", 1},
  {"Робин", 0},
  {"Рогатый", 0},
  {"Родерик", 0},
  {"Родни", 0},
  {"Роза", 1},
  {"Розали", 1},
  {"Розанна", 1},
  {"Рози", 1},
  {"Розмари", 1},
  {"Розмарина", 1},
  {"Рой", 0},
  {"Роки", 0},
  {"Роланд", 0},
  {"Ромона", 1},
  {"Рон", 0},
  {"Рональд", 0},
  {"Ронда", 1},
  {"Рори", 0},
  {"Росс", 0},
  {"Роуз", 1},
  {"Рошель", 1},
  {"Рубина", 1},
  {"Руди", 0},
  {"Руперт", 0},
  {"Рут", 1},
  {"Рути", 1},
  {"Рэндал", 0},
  {"Рэнди", 0},
  {"Саад", 0},
  {"Сабрина", 1},
  {"Сади", 1},
  {"Сал", 0},
  {"Салли", 1},
  {"Сальваторе", 0},
  {"Самюэль", 0},
  {"Сандип", 0},
  {"Сандра", 1},
  {"Сантос", 0},
  {"Сапфировый", 0},
  {"Сара", 1},
  {"Свен", 0},
  {"Свет", 0},
  {"Светлана", 1},
  {"Светящийся", 0},
  {"Святилище", 2},
  {"Священная", 1},
  {"Священник", 0},
  {"Себастьян", 0},
  {"Седрик", 0},
  {"Сеймур", 0},
  {"Секлия", 1},
  {"Селена", 1},
  {"Сергио", 0},
  {"Серена", 1},
  {"Серый", 0},
  {"Сесиль", 0},
  {"Сет", 0},
  {"Сидней", 0},
  {"Сильвестр", 0},
  {"Сильфида", 1},
  {"Симон", 0},
  {"Симона", 1},
  {"Синди", 1},
  {"Синдис", 1},
  {"Синий", 0},
  {"Синтия", 1},
  {"Скалис", 0},
  {"Скелет", 0},
  {"Скорпикора", 1},
  {"Скотт", 0},
  {"Слабый", 0},
  {"Слейд", 0},
  {"Собака", 1},
  {"Собор", 0},
  {"Сол", 0},
  {"Солнце", 2},
  {"Сонни", 0},
  {"Спенсер", 0},
  {"Старший", 0},
  {"Стейси", 1},
  {"Стелс", 0},
  {"Стефан", 0},
  {"Стефани", 1},
  {"Стив", 0},
  {"Стивен", 0},
  {"Сторожевая", 1},
  {"Страж", 0},
  {"Стражник", 0},
  {"Стрекозавр", 0},
  {"Стрелок", 0},
  {"Стэн", 0},
  {"Стэнли", 0},
  {"Стюарт", 0},
  {"Суанна", 1},
  {"Судья", 0},
  {"Сулейман", 0},
  {"Сумеречный", 0},
  {"Сьюзан", 1},
  {"Сьюзи", 1},
  {"Сэм", 0},
  {"Сэнди", 1},
  {"Сэндин", 1},
  {"Сэра", 1},
  {"Сюзанна", 1},
  {"Тадеус", 0},
  {"Тайлер", 0},
  {"Тайсон", 0},
  {"Така", 0},
  {"Тамара", 1},
  {"Тамми", 1},
  {"Таня", 1},
  {"Тара", 1},
  {"Тейн", 0},
  {"Теодор", 0},
  {"Тереза", 1},
  {"Тереса", 1},
  {"Терранс", 0},
  {"Терри", 1},
  {"Тим", 0},
  {"Тимоти", 0},
  {"Тина", 1},
  {"Тиффани", 1},
  {"Тобиас", 0},
  {"Тодд", 0},
  {"Том", 0},
  {"Томас", 0},
  {"Тон", 0},
  {"Тони", 0},
  {"Тор", 0},
  {"Тран", 0},
  {"Траян", 0},
  {"Трейси", 1},
  {"Трент", 0},
  {"Трентон", 0},
  {"Трина", 1},
  {"Трип", 0},
  {"Трисия", 1},
  {"Троглодит", 0},
  {"Тронный", 0},
  {"Трувор", 0},
  {"Трэвис", 0},
  {"Туманный", 0},
  {"Тэд", 0},
  {"Тэрри", 1},
  {"Тюрьма", 1},
  {"Уальдо", 0},
  {"Уилберт", 0},
  {"Уильсон", 0},
  {"Ундина", 1},
  {"Уоллес", 0},
  {"Уоррен", 0},
  {"Упырь", 0},
  {"Учебный", 0},
  {"Уэбб", 0},
  {"Фабиан", 0},
  {"Фамильный", 0},
  {"Фарелл", 0},
  {"Федрус", 0},
  {"Фейт", 1},
  {"Феликс", 0},
  {"Фелиция", 1},
  {"Фердинанд", 0},
  {"Фил", 0},
  {"Филип", 0},
  {"Филлис", 1},
  {"Филомена", 1},
  {"Флетчер", 0},
  {"Флойд", 0},
  {"Флоренция", 1},
  {"Флосси", 1},
  {"Форрест", 0},
  {"Франк", 0},
  {"Франклин", 0},
  {"Франц", 0},
  {"Франциск", 0},
  {"Франческа", 1},
  {"Фред", 0},
  {"Фредерик", 0},
  {"Хавьер", 0},
  {"Хайден", 0},
  {"Хайди", 1},
  {"Хан", 0},
  {"Ханк", 0},
  {"Ханн", 0},
  {"Хаос", 0},
  {"Харви", 0},
  {"Харди", 0},
  {"Хариетта", 1},
  {"Харлан", 0},
  {"Харлей", 0},
  {"Харольд", 0},
  {"Харрисон", 0},
  {"Хелен", 1},
  {"Хильда", 1},
  {"Хит", 0},
  {"Хитер", 1},
  {"Хитет", 0},
  {"Хитоми", 1},
  {"Ходячий", 0},
  {"Хок", 0},
  {"Холден", 0},
  {"Холли", 1},
  {"Храм", 0},
  {"Хранилище", 2},
  {"Хью", 0},
  {"Хьюго", 0},
  {"Хэл", 0},
  {"Хэмптон", 0},
  {"Царь", 0},
  {"Цезарь", 0},
  {"Циклон", 0},
  {"Цитадель", 1},
  {"Чад", 0},
  {"Чак", 0},
  {"Чан", 0},
  {"Чандра", 1},
  {"Чарли", 0},
  {"Чарльз", 0},
  {"Чародей", 0},
  {"Часовой", 0},
  {"Чемпион", 0},
  {"Черная", 1},
  {"Чернокнижник", 0},
  {"Чертог", 0},
  {"Честер", 0},
  {"Чет", 0},
  {"Чип", 0},
  {"Чудище", 2},
  {"Шатер", 0},
  {"Шахтерская", 1},
  {"Шейла", 1},
  {"Шейлани", 1},
  {"Шелдон", 0},
  {"Шелл", 0},
  {"Шелли", 1},
  {"Шеллис", 1},
  {"Шердон", 0},
  {"Шерил", 1},
  {"Шерман", 0},
  {"Шерри", 1},
  {"Шеррин", 1},
  {"Шимон", 0},
  {"Школа", 1},
  {"Шон", 0},
  {"Шоуна", 1},
  {"Штаб", 0},
  {"Шэнон", 1},
  {"Шэри", 1},
  {"Шэрон", 1},
  {"Эван", 0},
  {"Эвелин", 1},
  {"Эд", 0},
  {"Эдгар", 0},
  {"Эдди", 0},
  {"Эдисон", 0},
  {"Эдит", 1},
  {"Эдмонд", 0},
  {"Эдна", 1},
  {"Эйб", 0},
  {"Эйлин", 1},
  {"Эйприл", 1},
  {"Экспертная", 1},
  {"Эл", 0},
  {"Элвин", 0},
  {"Элегантный", 0},
  {"Элен", 1},
  {"Элеонора", 1},
  {"Элиот", 0},
  {"Элисон", 1},
  {"Элисса", 1},
  {"Элитный", 0},
  {"Элла", 1},
  {"Эллен", 1},
  {"Элси", 1},
  {"Элтон", 0},
  {"Эльф", 0},
  {"Эми", 1},
  {"Эмиль", 0},
  {"Эмма", 1},
  {"Эммануил", 0},
  {"Эммет", 0},
  {"Энджи", 1},
  {"Энди", 0},
  {"Энн", 1},
  {"Энн", 2},
  {"Энок", 0},
  {"Эрвин", 0},
  {"Эрик", 0},
  {"Эрин", 1},
  {"Эрл", 0},
  {"Эрнест", 0},
  {"Эрни", 0},
  {"Эрнин", 0},
  {"Эрол", 0},
  {"Этан", 0},
  {"Этель", 1},
  {"Эш", 0},
  {"Эштон", 0},
  {"Юдифь", 1},
  {"Юрий", 0},
  {"Ядовитый", 0},
  {"Якоб", 0},
  {"Ян", 0},
  {"Янси", 0},
  {"Ярод", 0},
  {"Яспер", 0}
},
  gender_table[] =
{
  {"ад", 0},       {"акула", 1},    {"банк", 0},      {"башня", 1},      {"бластер", 0}, {"вампир", 0},   {"вдова", 1},      {"ведьма", 1},   {"витерсмит", 0}, {"владыка", 0},  {"владычица", 1},
  {"воин", 0},     {"вор", 0},      {"гидра", 1},     {"глаз", 0},       {"голем", 0},   {"гора", 1},     {"горгулья", 1},   {"город", 0},    {"громовая", 1},  {"двор", 0},     {"джинн", 0},
  {"дракон", 0},   {"дух", 0},      {"житель", 0},    {"жительница", 1}, {"зал", 0},     {"защитник", 0}, {"земля", 1},      {"искатель", 0}, {"ифрит", 0},     {"квартира", 1}, {"кольчуга", 1},
  {"командир", 0}, {"крыса", 1},    {"лейтенант", 0}, {"луна", 1},       {"людоед", 0},  {"магог", 0},    {"меч", 0},        {"мечник", 0},   {"минотавр", 0},  {"мышь", 1},     {"наемник", 0},
  {"огненная", 1}, {"огонь", 0},    {"орк", 0},       {"паук", 0},       {"пещера", 1},  {"пещеры", 1},   {"повелитель", 0}, {"погреб", 0},   {"полигон", 0},   {"приют", 0},    {"птица", 1},
  {"птичий", 0},   {"работник", 0}, {"рай", 0},       {"рейнджер", 0},   {"рух", 0},     {"слизень", 0},  {"солдат", 0},     {"титан", 0},    {"трактир", 0},   {"тролль", 0},   {"убийца", 0},
  {"улан", 0},     {"училище", 2},  {"шляпа", 1},     {"элементал", 0}
};



#include <mbstring.h>

int GetGender(char *ansi_name, int name_len)
{
  auto name = (unsigned char *)ansi_name;

  GenderTableEntry *table = nullptr;
  unsigned int      table_size = 0;
  if (name[0] >= (unsigned char)'а' && name[0] <= (unsigned char)'я')
  {
    table = gender_table;
    table_size = sizeof(gender_table) / sizeof(*gender_table);
  }
  else if (name[0] >= (unsigned char)'А' && name[0] <= (unsigned char)'Я')
  {
    table = gender_table_caps;
    table_size = sizeof(gender_table_caps) / sizeof(*gender_table_caps);
  }
  else return 0;

  int left = 0,
      right = table_size - 1,
      match = 0;
  while (left < right - 1)
  {
    match = left + (right - left) / 2;
    int rval = _mbsncmp(name, (unsigned char *)table[match].name, name_len);
    if (rval < 0)
      right = match;
    else if (!rval)
      return table[match].gender;
    else
      left = match;
  }

  Log::Warning(L"sprintfex: unknown gender: %S", name);
  return 0;
}


bool IsSpecialName(const char *ansi_name)
{
  auto name = (unsigned char *)ansi_name;
  return !_mbsncmp(name, (unsigned char *)"Мэри Джо", 8)        || !_mbsncmp(name, (unsigned char *)"Ли Энн", 6) ||
         !_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14) || !_mbsncmp(name, (unsigned char *)"Стены тумана", 12);
}
int GetSpecialGender(const char *ansi_name)
{
  auto name = (unsigned char *)ansi_name;
  if (!_mbsncmp(name, (unsigned char *)"Мэри Джо", 8))
    return 1;
  if (!_mbsncmp(name, (unsigned char *)"Ли Энн", 6))
    return 1;
  if (!_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14))
    return 1;
  if (!!_mbsncmp(name, (unsigned char *)"Стены тумана", 12))
    return 0;
  return 0;
}
const char *GetSpecialCase(const char *ansi_name, char c)
{
  auto name = (unsigned char *)ansi_name;

  if (!_mbsncmp(name, (unsigned char *)"Мэри Джо", 8))
    return "Мэри Джо";
  if (!_mbsncmp(name, (unsigned char *)"Ли Энн", 6))
    return "Ли Энн";

  if (!_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14))
    switch (c)
    {
      case 'I': case 'i': return "Врата в Бездну";
      case 'R': case 'r': return "Врат в Бездну";
      case 'D': case 'd': return "Вратам в Бездну";
      case 'V': case 'v': return "Врат в Бездну";
      case 'T': case 't': return "Вратами в Бездну";
      case 'P': case 'p': return "Вратах в Бездну";
    }

  if (!_mbsncmp(name, (unsigned char *)"Стены тумана", 12))
    switch (c)
    {
      case 'I': case 'i': return "Стены тумана";
      case 'R': case 'r': return "Стен тумана";
      case 'D': case 'd': return "Стенам тумана";
      case 'V': case 'v': return "Стены тумана";
      case 'T': case 't': return "Стенами тумана";
      case 'P': case 'p': return "Стенах тумана";
    }

  return nullptr;
}

int sprintfex_internal(char *str)
{
  auto p = strstr(str, "^");
  if (!p)
    return strlen(str);

  char buf[8192];
  Assert(strlen(str) < sizeof(buf));

  int next_integer_token = 0;
  bool integer_tokens_defined[10] = {false, false, false, false, false, false, false, false, false, false};
  int integer_tokens[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

  bool gender_token_defined = false;
  int gender_token = 0;
  
  auto src = buf,
       dst = p;
  strcpy(buf, str + (p - str));
  while (true)
  {
    switch (src[1])
    {
      case 'I':
      {
        if (src[2] != '[')
          goto _invalid_token;
        src += 3;  // ^I[
        
        Assert(next_integer_token < 10);
        if (sscanf(src, "%d", &integer_tokens[next_integer_token]))
          integer_tokens_defined[next_integer_token++] = true;

        auto int_begin = src;
        while (*src++ != ']');

        int int_len = src - int_begin - 1;
        strncpy(dst, int_begin, int_len);
        dst += int_len;
      }
      break;

      case 'L':
      {
        int integer_token_idx = 0;
        if (src[2] >= '1' && src[2] <= '9')
        {
          if (src[3] != '[')
            goto _invalid_token;
          integer_token_idx = src[2] - '1';

          src += 1;
        }
        else if (src[2] != '[')
          goto _invalid_token;

        Assert(integer_tokens_defined[integer_token_idx]);
        src += 3; // ^L[

        auto ending1 = src;
        while (*src++ != ';');
        auto ending2 = src;
        while (*src++ != ';');
        auto ending3 = src;
        while (*src++ != ']');

        char *actual_ending = nullptr;
        int   actual_ending_len = 0;

        int modulo = abs(integer_tokens[integer_token_idx]) % 10;
        if (modulo == 1)
        {
          actual_ending = ending1;
          actual_ending_len = ending2 - ending1 - 1;
        }
        else if (modulo >= 2 && modulo <= 4)
        {
          actual_ending = ending2;
          actual_ending_len = ending3 - ending2 - 1;
        }
        else
        {
          actual_ending = ending3;
          actual_ending_len = src - ending3 - 1;
        }

        strncpy(dst, actual_ending, actual_ending_len);
        dst += actual_ending_len;
      }
      break;

      case 'R':
      {
        if (src[2] != '[')
          goto _invalid_token;
        Assert(gender_token_defined);

        src += 3; // ^R[

        auto ending1 = src;
        while (*src++ != ';');
        auto ending2 = src;
        while (*src++ != ';');
        auto ending3 = src;
        while (*src++ != ']');

        char *actual_ending = nullptr;
        int   actual_ending_len = 0;

        if (gender_token == 0)
        {
          actual_ending = ending1;
          actual_ending_len = ending2 - ending1 - 1;
        }
        else if (gender_token == 1)
        {
          actual_ending = ending2;
          actual_ending_len = ending3 - ending2 - 1;
        }
        else if (gender_token == 2)
        {
          actual_ending = ending3;
          actual_ending_len = src - ending3 - 1;
        }
        else Error("Invalid gender token");

        strncpy(dst, actual_ending, actual_ending_len);
        dst += actual_ending_len;
      }
      break;

      case 'P':
      {
        if (src[3] != '[')
          goto _invalid_token;
        switch (src[2])
        {
          case 'I': case 'i':
          case 'R': case 'r':
          case 'D': case 'd':
          case 'V': case 'v':
          case 'T': case 't':
          case 'P': case 'p': break;
          default:
            goto _invalid_token;
        }

        if (IsSpecialName(src + 4))
        {
          auto name = GetSpecialCase(src + 4, src[2]);
          int name_len = strlen(name);

          gender_token = GetSpecialGender(src + 4);
          gender_token_defined = true;

          strncpy(dst, name, name_len);
          dst += name_len;
          while (*src++ != ']');
          break;
        }
        
        auto name_begin = src + 4;
        int name_len = 0;
        for (int i = 0; name_begin[i] != ']'; ++i)
          name_len++;
        gender_token = GetGender(name_begin, name_len);
        gender_token_defined = true;

        switch (src[2])
        {
          case 'I': case 'i':
          case 'V': case 'v':
          case 'R': case 'r':
          case 'D': case 'd':
          case 'T': case 't':
          {
            strncpy(dst, name_begin, name_len);
            dst += name_len;
          }
          break;

          case 'P': case 'p':
          {
            auto token_begin = src;
            int token_len = 1;
            for (int i = 0; token_begin[i] != ']'; ++i)
              token_len++;
            strncpy(dst, token_begin, token_len);
            dst += token_len;
          }
        }
        while (*src++ != ']');
      }
      break;

      default:
      {
_invalid_token:
        auto token_begin = src;
        while (*src++ != ']');

        int token_len = src - token_begin;
        char token[1024];
        strncpy(token, token_begin, token_len);
        token[token_len] = 0;

        Error("Invalid format token: %s", token);
      }
      break;
    }
    
    *dst = 0;

    auto copy_begin = src;
    src = strstr(src, "^");
    if (!src)
    {
      strcpy(dst, copy_begin); // just copy the rest
      break;
    }

    int copy_len = src - copy_begin;
    strncpy(dst, copy_begin, copy_len);
    dst += copy_len;
  }

  return dst - str;
}






//mm6text.non -> c structure array
  /*FILE *f = fopen("_1.txt", "w+t");
  FILE *in = fopen("mm6text.non", "rt");
  fscanf(in, "%*[^\n]\n");

  int idx = 0;
  auto pairs = new NameGender[8000];

  char line[1024];
  while (fscanf(in, "%[^\n]\n", line) && !feof(in))
  {
    char name1[100], name2[100], name3[100];
    int e = sscanf(line, "%s\t%s\t%s", pairs[idx].name, pairs[idx + 1].name, pairs[idx + 2].name);
    pairs[idx].gender = 0;
    pairs[idx+1].gender = 1;
    pairs[idx+2].gender = 2;
    idx += e;
  }

  for (int i = 0; i < idx; ++i)
    for (int j = 0; j < i; ++j)
    {
      if (_mbsicmp(pairs[i].name, pairs[j].name) < 0)
      {
        char n[1024];
        strcpy(n, (char *)pairs[j].name);
        auto g = pairs[j].gender;

        strcpy((char *)pairs[j].name, (char *)pairs[i].name);
        pairs[j].gender = pairs[i].gender;

        strcpy((char *)pairs[i].name, n);
        pairs[i].gender = g;
      }
    }
    
  for (int i = 0; i < idx; ++i)
  {
    fprintf(f, "  {\"%s\", %u},\n", pairs[i].name, pairs[i].gender);
  }
  fclose(f);*/