124 lines
6.7 KiB
Python
124 lines
6.7 KiB
Python
# 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])
|
||
|