Mercurial > mm7
view mm7text_ru.cpp @ 1204:832f09144726
hopefully correct merge
author | Grumpy7 |
---|---|
date | Sat, 08 Jun 2013 21:47:29 +0200 |
parents | 29a8defbad9e |
children | 934074e7fcc1 |
line wrap: on
line source
#ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include <string.h> #include <stdlib.h> #include <stdio.h> #include <assert.h> #include "Log.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 __cdecl 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 assert(false); 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; Log::Warning(L"Invalid format token: %S", token); assert(false); } 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);*/