# etpgrf/conf.py # Настройки по умолчанию для типографа etpgrf # Режимы "отдачи" результатов обработки MODE_UNICODE = "unicode" MODE_MNEMONIC = "mnemonic" MODE_MIXED = "mixed" # DEFAULT_MODE = MODE_MIXED # Языки, поддерживаемые библиотекой LANG_RU = 'ru' # Русский LANG_RU_OLD = 'ruold' # Русская дореволюционная орфография LANG_EN = 'en' # Английский SUPPORTED_LANGS = frozenset([LANG_RU, LANG_RU_OLD, LANG_EN]) # Язык(и) по умолчанию, если не указаны пользователем и не заданы через ETPGRF_DEFAULT_LANGS_MODULE # DEFAULT_LANGS = LANG_RU # Значения по умолчанию для параметров Hyphenator # DEFAULT_HYP_MAX_LEN = 10 # Максимальная длина слова без переносов # DEFAULT_HYP_MIN_LEN = 3 # Минимальный "хвост" слова для переноса # === Соответствия `unicode` и `mnemonic` для типографа # Переносы KEY_SHY = 'SHY' SHY_ENTITIES = { KEY_SHY: ('\u00AD', '­'), # Мягкий перенос } # Пробелы и неразрывные пробелы KEY_NBSP = 'NBSP' KEY_THINSP = 'THINSP' KEY_ENSP = 'ENSP' KEY_EMSP = 'EMSP' KEY_ZWNJ = 'ZWNJ' KEY_ZWJ = 'ZWJ' SPACE_ENTITIES = { KEY_NBSP: ('\u00A0', ' '), # Неразрывный пробел KEY_THINSP: ('\u2009', ' '), # Тонкий пробел KEY_ENSP: ('\u2002', ' '), # Полу-широкий пробел KEY_EMSP: ('\u2003', ' '), # Широкий пробел KEY_ZWNJ: ('\u200C', '‌'), # Разрывный пробел нулевой ширины (без пробела) KEY_ZWJ: ('\u200D', '‍'), # Неразрывный пробел нулевой ширины } # Тире и дефисы DASH_ENTITIES = { 'NDASH': ('\u2013', '–'), # Cреднее тире (En dash) 'MDASH': ('\u2014', '—'), # Длинное тире 'HYPHEN': ('\u2010', '‐'), # Обычный дефис (если нужно отличать от минуса) 'HORBAR': ('\u2015', '―'), # Горизонтальная линия (длинная черта) } # Кавычки QUOTE_ENTITIES = { 'QUOT': ('\u0022', '"'), # Двойная кавычка (универсальная) -- " 'APOS': ('\u0027', '''), # Апостроф (одинарная кавычка) -- ' 'LAQUO': ('\u00AB', '«'), # Открывающая (левая) кавычка «ёлочка» -- « 'RAQUO': ('\u00BB', '»'), # Закрывающая (правая) кавычка «ёлочка» -- » 'LDQUO': ('\u201C', '“'), # Oткрывающая (левая) двойная кавычка -- “ 'RDQUO': ('\u201D', '”'), # Закрывающая (правая) двойная кавычка -- ” 'BDQUO': ('\u2039', '„'), # Нижняя двойная кавычка -- „ 'LSQUO': ('\u2018', '‘'), # Открывающая (левая) одинарная кавычка -- ‘ 'RSQUO': ('\u2019', '’'), # Закрывающая (правая) одинарная кавычка -- ’ 'SBQUO': ('\u201A', '‚'), # Нижняя одинарная кавычка -- ‚ 'LSAQUO': ('\u2039', '‹'), # Открывающая французская угловая кавычка -- › 'RSAQUO': ('\u203A', '›'), # Закрывающая французская угловая кавычка -- ‹ } # Символы валют CURRENCY_ENTITIES = { 'DOLLAR': ('\u0024', '$'), # Доллар 'CENT': ('\u00A2', '¢'), # Цент 'POUND': ('\u00A3', '£'), # Фунт стерлингов 'CURREN': ('\u00A4', '¤'), # Знак валюты (обычно используется для обозначения "без конкретной валюты") 'YEN': ('\u00A5', '¥'), # Йена 'EURO': ('\u20AC', '€'), # Евро 'RUBLE': ('\u20BD', '₽'), # Российский рубль (₽) } # Математические символы KEY_LT = 'LT' KEY_GT = 'GT' MATH_ENTITIES = { KEY_LT: ('\u00B7', '<'), # Меньше (<) KEY_GT: ('\u00B7', '>'), # Больше (>) 'PLUS': ('\u002B', '+'), # Плюс (+) 'MINUS': ('\u2212', '−'), # Минус (−) 'MULTIPLY': ('\u00D7', '×'), # Умножение (×) 'DIVIDE': ('\u00F7', '÷'), # Деление (÷) 'EQUALS': ('\u003D', '='), # Равно (=) 'NOT_EQUAL': ('\u2260', '≠'), # Не равно (≠) 'PLUSMN': ('\u00B1', '±'), # Плюс-минус (±) 'LESS_EQUAL': ('\u2264', '≤'), # Меньше или равно (≤) 'GREATER_EQUAL': ('\u2265', '≥'), # Больше или равно (≥) 'APPROX_EQUAL': ('\u2245', '≅'), # Приблизительно равно (≅) 'APPROX_EQ': ('\u2245', '≊'), # Приблизительно равно (≅) 'APPROX': ('\u2248', '≈'), # Приблизительно равно (≈) } # Другие символы (пример для расширения) KEY_AMP = 'AMP' SYMBOL_ENTITIES = { KEY_AMP: ('\u0026', '&smp;'), #Амперсанд (&) 'HELLIP': ('\u2026', '…'), # Многоточие 'COPY': ('\u00A9', '©'), # Копирайт # ... стрелочки, математические символы и т.д. по мере необходимости } # --- Сборка и валидация --- # 1. Создаем единый словарь всех сущностей для удобного доступа ALL_ENTITIES = { **SHY_ENTITIES, **SPACE_ENTITIES, **DASH_ENTITIES, **MATH_ENTITIES, **QUOTE_ENTITIES, **CURRENCY_ENTITIES, **SYMBOL_ENTITIES } # Сущности, которые ВСЕГДА должны выводиться как мнемоники в режиме MODE_MIXED # Указываются их ИМЕНА (ключи из словарей выше). # NOTE: Повторное использование магических строк 'SHY', 'NBSP' и т.д. не создает новый объект в памяти. Умный Python # когда видит одинаковую строку в коде применяет интернирование строк (string interning). ALWAYS_MNEMONIC_IN_SAFE_MODE = frozenset([KEY_AMP, KEY_LT, KEY_GT, KEY_SHY, KEY_NBSP, KEY_ZWNJ, KEY_ZWJ])