mod: +тесты html-мнемоник для decode_to_unicode() ..
This commit is contained in:
@@ -37,21 +37,33 @@ EN_ALPHABET_FULL = EN_ALPHABET_UPPER | EN_ALPHABET_LOWER
|
||||
# === КОНСТАНТЫ ДЛЯ КОДИРОВАНИЯ HTML-МНЕМНОИКОВ ===
|
||||
# --- ЧЕРНЫЙ СПИСОК: Символы, которые НИКОГДА не нужно кодировать в мнемоники ---
|
||||
NEVER_ENCODE_CHARS = (frozenset(['!', '#', '%', '(', ')', '*', ',', '.', '/', ':', ';', '=', '?', '@',
|
||||
'[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'])
|
||||
'[', '\\', ']', '^', '_', '`', '{', '|', '}', '~', '\n', '\t', '\r'])
|
||||
| RU_ALPHABET_FULL | EN_ALPHABET_FULL)
|
||||
|
||||
|
||||
|
||||
# 2. БЕЛЫЙ СПИСОК (ДЛЯ БЕЗОПАСНОСТИ):
|
||||
# Символы, которые ВСЕГДА должны превращаться в мнемоники в "безопасных" режимах вывода. Сюда добавлены символы,
|
||||
# которые или не видны, или на глаз и не отличимы друг от друга в обычном тексте
|
||||
SAFE_MODE_CHARS_TO_MNEMONIC = frozenset(['<', '>', '&', '"', '\'',
|
||||
'\u00AD', # мягкий перенос (Soft Hyphen)
|
||||
'\u00A0', # неразрывный пробел (Non-Breaking Space)
|
||||
'\u200D', # нулевая ширина (с объединением) (Zero Width Joiner)
|
||||
'\u200C', # нулевая ширина (без объединения) (Zero Width Non-Joiner)
|
||||
'\u2002', # Полужирный пробел (En Space)
|
||||
'\u2003']) # Широкий пробел (Em Space)
|
||||
# которые не видны, на глаз и не отличимы друг от друга в обычном тексте, или очень специфичные
|
||||
SAFE_MODE_CHARS_TO_MNEMONIC = frozenset([
|
||||
'<', '>', '&', '"', '\'',
|
||||
'\u00AD', # Мягкий перенос (Soft Hyphen) -- ­
|
||||
'\u00A0', # Неразрывный пробел (Non-Breaking Space) --
|
||||
'\u2002', # Полужирный пробел (En Space) --  
|
||||
'\u2003', # Широкий пробел (Em Space) --  
|
||||
'\u2007', # Цифровой пробел --  )
|
||||
'\u2008', # Пунктуационный пробел --  
|
||||
'\u2009', # Междусимвольный пробел --  '
|
||||
'\u200A', # Толщина волоса (Hair Space) --  
|
||||
'\u200B', # Негативный пробел (Negative Space) -- ​
|
||||
'\u200C', # Нулевая ширина (без объединения) (Zero Width Non-Joiner) -- ‍
|
||||
'\u200D', # Нулевая ширина (с объединением) (Zero Width Joiner) -- ‌
|
||||
'\u200E', # Изменить направление текста на слева-направо (Left-to-Right Mark /LRE) -- ‎
|
||||
'\u200F', # Изменить направление текста направо-налево (Right-to-Left Mark /RLM) -- ‏
|
||||
'\u205F', # Средний пробел (Medium Mathematical Space) --  
|
||||
'\u2060', # ⁠
|
||||
'\u2062', # ⁢
|
||||
'\u2063', # ⁣
|
||||
|
||||
])
|
||||
|
||||
# 3. СПИСОК ДЛЯ ЧИСЛОВОГО КОДИРОВАНИЯ: Символы без стандартного имени.
|
||||
ALWAYS_ENCODE_TO_NUMERIC_CHARS = frozenset([
|
||||
@@ -62,14 +74,15 @@ ALWAYS_ENCODE_TO_NUMERIC_CHARS = frozenset([
|
||||
'\u20B9', # Знак индийской рупии (₹)
|
||||
'\u20BC', # Знак азербайджанского маната
|
||||
'\u20BE', # Знак грузинский лари (₾)
|
||||
'\u022d', # Специальный символ LEFT-TO-RIGHT OVERRIDE (устанавливает направление текста слева-направо)
|
||||
'\u022e', # Специальный символ RIGHT-TO-LEFT OVERRIDE (устанавливает направление текста справа-налево)
|
||||
])
|
||||
|
||||
# 4. СЛОВАРЬ ПРИОРИТЕТОВ: Кастомные или предпочитаемые мнемоники.
|
||||
# Эти правила применяются в последнюю очередь и имеют наивысший приоритет,
|
||||
# 4. СЛОВАРЬ ПРИОРИТЕТОВ: Кастомные и/или предпочитаемые мнемоники.
|
||||
# Некоторые utf-символы имеют несколько мнемоник, а значит для таких символов преобразование
|
||||
# в из utf во html-мнемоники может иметь несколько вариантов. Словарь приоритетов задает предпочтительное
|
||||
# преобразование. Эти правила применяются в последнюю очередь и имеют наивысший приоритет,
|
||||
# гарантируя предсказуемый результат для символов с несколькими именами.
|
||||
# Также используется для создания исключений из "черного списка" NEVER_ENCODE_CHARS.
|
||||
#
|
||||
# Также можно использовать для создания исключений из "черного списка" NEVER_ENCODE_CHARS.
|
||||
CUSTOM_ENCODE_MAP = {
|
||||
'\u2010': '‐', # Для \u2010 всегда предпочитаем ‐, а не ‐
|
||||
# Исключения для букв, которые есть в алфавитах, но должны кодироваться (для обеспечения консистентности):
|
||||
@@ -77,6 +90,24 @@ CUSTOM_ENCODE_MAP = {
|
||||
# 'Œ': 'Œ',
|
||||
# 'æ': 'æ',
|
||||
# 'œ': 'œ',
|
||||
'\u3253': 'ℵ', # ℵ / &alefsym / ℵ
|
||||
'&': '&', # & / & / &
|
||||
'\u2220': '∠', # ∠ / ∠ / ∠
|
||||
'\u2061': '⁡', # ⁡ / ⁡
|
||||
'\u2248': '≈', # ≈ / ≈ / ≈ / ≈ / ≈ / ≈ / ≈
|
||||
'\u00c5': 'Å', # Å / Å / Å /
|
||||
'\u224a': '≊', # ≊ / ≊ / &≊
|
||||
'\u2305': '⌅', # ⌅ / ⌅ / ⌅
|
||||
'\u2235': '∵', # ∵ / ∵ / ∵ / ∵
|
||||
'\u224c': '≌', # ≌ / ≌ / ≌
|
||||
'\u03f6': '϶', # ϶ / ϶ / ϶
|
||||
'\u212c': 'ℬ', # ℬ / ℬ / ℬ / ℬ
|
||||
'\u22a5': '⊥', # ⊥ / perp; / ⊥ / ⊥ / UpTee
|
||||
'\u2035': '‵', # ‵ / ‵ / ‵
|
||||
'\u02d8': '˘', # ˘ / ˘ / ˘
|
||||
'\u223d': '∽', # ∽ / ∽ / ∽
|
||||
'\u22cd': '⋍', # ⋍ / ⋍ / ⋍
|
||||
'\u2022': '•', # • / • / •
|
||||
}
|
||||
|
||||
# === Динамическая генерация карт преобразования ===
|
||||
|
Reference in New Issue
Block a user