mod: +тесты html-мнемоник для decode_to_unicode() ..

This commit is contained in:
2025-08-05 22:38:28 +03:00
parent 65970f3170
commit 3684088fd0
2 changed files with 323 additions and 18 deletions

View File

@@ -37,21 +37,33 @@ EN_ALPHABET_FULL = EN_ALPHABET_UPPER | EN_ALPHABET_LOWER
# === КОНСТАНТЫ ДЛЯ КОДИРОВАНИЯ HTML-МНЕМНОИКОВ === # === КОНСТАНТЫ ДЛЯ КОДИРОВАНИЯ HTML-МНЕМНОИКОВ ===
# --- ЧЕРНЫЙ СПИСОК: Символы, которые НИКОГДА не нужно кодировать в мнемоники --- # --- ЧЕРНЫЙ СПИСОК: Символы, которые НИКОГДА не нужно кодировать в мнемоники ---
NEVER_ENCODE_CHARS = (frozenset(['!', '#', '%', '(', ')', '*', ',', '.', '/', ':', ';', '=', '?', '@', NEVER_ENCODE_CHARS = (frozenset(['!', '#', '%', '(', ')', '*', ',', '.', '/', ':', ';', '=', '?', '@',
'[', '\\', ']', '^', '_', '`', '{', '|', '}', '~']) '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~', '\n', '\t', '\r'])
| RU_ALPHABET_FULL | EN_ALPHABET_FULL) | RU_ALPHABET_FULL | EN_ALPHABET_FULL)
# 2. БЕЛЫЙ СПИСОК (ДЛЯ БЕЗОПАСНОСТИ): # 2. БЕЛЫЙ СПИСОК (ДЛЯ БЕЗОПАСНОСТИ):
# Символы, которые ВСЕГДА должны превращаться в мнемоники в "безопасных" режимах вывода. Сюда добавлены символы, # Символы, которые ВСЕГДА должны превращаться в мнемоники в "безопасных" режимах вывода. Сюда добавлены символы,
# которые или не видны, или на глаз и не отличимы друг от друга в обычном тексте # которые не видны, на глаз и не отличимы друг от друга в обычном тексте, или очень специфичные
SAFE_MODE_CHARS_TO_MNEMONIC = frozenset(['<', '>', '&', '"', '\'', SAFE_MODE_CHARS_TO_MNEMONIC = frozenset([
'\u00AD', # мягкий перенос (Soft Hyphen) '<', '>', '&', '"', '\'',
'\u00A0', # неразрывный пробел (Non-Breaking Space) '\u00AD', # Мягкий перенос (Soft Hyphen) -- &shy;
'\u200D', # нулевая ширина (с объединением) (Zero Width Joiner) '\u00A0', # Неразрывный пробел (Non-Breaking Space) -- &nbsp;
'\u200C', # нулевая ширина (без объединения) (Zero Width Non-Joiner) '\u2002', # Полужирный пробел (En Space) -- &ensp;
'\u2002', # Полужирный пробел (En Space) '\u2003', # Широкий пробел (Em Space) -- &emsp;
'\u2003']) # Широкий пробел (Em Space) '\u2007', # Цифровой пробел -- &numsp;)
'\u2008', # Пунктуационный пробел -- &puncsp;
'\u2009', # Междусимвольный пробел -- &thinsp;'
'\u200A', # Толщина волоса (Hair Space) -- &hairsp;
'\u200B', # Негативный пробел (Negative Space) -- &NegativeThinSpace;
'\u200C', # Нулевая ширина (без объединения) (Zero Width Non-Joiner) -- &zwj;
'\u200D', # Нулевая ширина (с объединением) (Zero Width Joiner) -- &zwnj;
'\u200E', # Изменить направление текста на слева-направо (Left-to-Right Mark /LRE) -- &lrm;
'\u200F', # Изменить направление текста направо-налево (Right-to-Left Mark /RLM) -- &rlm;
'\u205F', # Средний пробел (Medium Mathematical Space) -- &MediumSpace;
'\u2060', # &NoBreak;
'\u2062', # &InvisibleTimes;
'\u2063', # &InvisibleComma;
])
# 3. СПИСОК ДЛЯ ЧИСЛОВОГО КОДИРОВАНИЯ: Символы без стандартного имени. # 3. СПИСОК ДЛЯ ЧИСЛОВОГО КОДИРОВАНИЯ: Символы без стандартного имени.
ALWAYS_ENCODE_TO_NUMERIC_CHARS = frozenset([ ALWAYS_ENCODE_TO_NUMERIC_CHARS = frozenset([
@@ -62,14 +74,15 @@ ALWAYS_ENCODE_TO_NUMERIC_CHARS = frozenset([
'\u20B9', # Знак индийской рупии (₹) '\u20B9', # Знак индийской рупии (₹)
'\u20BC', # Знак азербайджанского маната '\u20BC', # Знак азербайджанского маната
'\u20BE', # Знак грузинский лари (₾) '\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 = { CUSTOM_ENCODE_MAP = {
'\u2010': '&hyphen;', # Для \u2010 всегда предпочитаем &hyphen;, а не &dash; '\u2010': '&hyphen;', # Для \u2010 всегда предпочитаем &hyphen;, а не &dash;
# Исключения для букв, которые есть в алфавитах, но должны кодироваться (для обеспечения консистентности): # Исключения для букв, которые есть в алфавитах, но должны кодироваться (для обеспечения консистентности):
@@ -77,6 +90,24 @@ CUSTOM_ENCODE_MAP = {
# 'Œ': '&OElig;', # 'Œ': '&OElig;',
# 'æ': '&aelig;', # 'æ': '&aelig;',
# 'œ': '&oelig;', # 'œ': '&oelig;',
'\u3253': '&alefsym;', # ℵ / &alefsym / &aleph;
'&': '&amp;', # & / &amp; / &AMP;
'\u2220': '&ang;', # ∠ / &ang; / &angle;
'\u2061': '&af;', # &af; / &ApplyFunction;
'\u2248': '&asymp;', # ≈ / &asymp; / &approx; / &ap; / &thickapprox; / &thkap; / &TildeTilde;
'\u00c5': '&Aring;', # Å / &Aring; / &angst; /
'\u224a': '&ape;', # ≊ / &ape; / &&approxeq;
'\u2305': '&barwed;', # ⌅ / &barwed; / &barwedge;
'\u2235': '&becaus;', # ∵ / &becaus; / &Because; / &because;
'\u224c': '&bcong;', # ≌ / &backcong; / &bcong;
'\u03f6': '&bepsi;', # ϶ / &bepsi; / &backepsilon;
'\u212c': '&Bscr;', # / &Bscr; / &Bernoullis; / &bernou;
'\u22a5': '&perp;', # ⊥ / perp; / &bot; / &bottom; / UpTee
'\u2035': '&bprime;', # / &bprime; / &backprime;
'\u02d8': '&breve;', # ˘ / &breve; / &Breve;
'\u223d': '&bsim;', # ∽ / &bsim; / &backsim;
'\u22cd': '&bsime;', # ⋍ / &bsime; / &backsimeq;
'\u2022': '&bull;', # • / &bull; / &bullet;
} }
# === Динамическая генерация карт преобразования === # === Динамическая генерация карт преобразования ===

View File

@@ -18,7 +18,8 @@ STRINGS_FOR_DECODE = [
("&shy;", "\u00AD"), # Мягкий перенос ("&shy;", "\u00AD"), # Мягкий перенос
("&nbsp;&ensp;&emsp;&thinsp;&zwj;&zwnj;", "\u00A0\u2002\u2003\u2009\u200D\u200C"), # Набор пробелов и невидимых символов ("&nbsp;&ensp;&emsp;&thinsp;&zwj;&zwnj;", "\u00A0\u2002\u2003\u2009\u200D\u200C"), # Набор пробелов и невидимых символов
("&ndash; &mdash; &hyphen; &horbar;", ""), # Набор тире и дефисов ("&ndash; &mdash; &hyphen; &horbar;", ""), # Набор тире и дефисов
("&dollar; &cent; &pound; &curren; &yen; &euro; &#8381;", "$ ¢ £ ¤ ¥ €"), # Валютные символы ("&dollar; &cent; &pound; &curren; &yen; &euro;", "$ ¢ £ ¤ ¥ €"), # Валютные символы
("&#1423; &#8381; &#8372; &#8376; &#8377; &#8380; &#8382;", "֏ ₽ ₴ ₸ ₹ ₼ ₾"), # Валютные символы
# Набор из html.entities.name2codepoint # Набор из html.entities.name2codepoint
("&AElig; &Aacute; &Acirc; &Agrave; &Alpha; &Aring; &Atilde; &Auml; &Auml;", "Æ Á Â À Α Å Ã Ä Ä"), ("&AElig; &Aacute; &Acirc; &Agrave; &Alpha; &Aring; &Atilde; &Auml; &Auml;", "Æ Á Â À Α Å Ã Ä Ä"),
("&Beta; &Ccedil; &Chi; &Dagger; &Delta; &ETH; &Eacute; &Ecirc; &Egrave;", "Β Ç Χ ‡ Δ Ð É Ê È"), ("&Beta; &Ccedil; &Chi; &Dagger; &Delta; &ETH; &Eacute; &Ecirc; &Egrave;", "Β Ç Χ ‡ Δ Ð É Ê È"),
@@ -55,7 +56,7 @@ STRINGS_FOR_DECODE = [
("&angrtvbd; &angsph; &angst; &angzarr; &Aogon; &aogon; &Aopf; &aopf; &ap;", "⦝ ∢ Å ⍼ Ą ą 𝔸 𝕒"), ("&angrtvbd; &angsph; &angst; &angzarr; &Aogon; &aogon; &Aopf; &aopf; &ap;", "⦝ ∢ Å ⍼ Ą ą 𝔸 𝕒"),
("&apacir; &apE; &ape; &apid; &apos; &ApplyFunction; &approx; &approxeq;", "⩯ ⩰ ≊ ≋ ' \u2061 ≈ ≊"), ("&apacir; &apE; &ape; &apid; &apos; &ApplyFunction; &approx; &approxeq;", "⩯ ⩰ ≊ ≋ ' \u2061 ≈ ≊"),
("&Ascr; &ascr; &Assign; &ast; &asympeq; &awconint; &awint; &backcong;", "𝒜 𝒶 ≔ * ≍ ∳ ⨑ ≌"), ("&Ascr; &ascr; &Assign; &ast; &asympeq; &awconint; &awint; &backcong;", "𝒜 𝒶 ≔ * ≍ ∳ ⨑ ≌"),
("&backepsilon; &backprime; &backsim; &backsimeq; &Backslash; &Barv; &barvee;", "϶ ∽ ⋍ ⫧ ⊽"), ("&backepsilon; &backprime; &backsim; &bsime; &Backslash; &Barv; &barvee;", "϶ ∽ ⋍ ⫧ ⊽"),
("&Barwed; &barwed; &barwedge; &bbrk; &bbrktbrk; &bcong; &Bcy; &bcy; &bdquo;", "⌆ ⌅ ⌅ ⎵ ⎶ ≌ Б б"), ("&Barwed; &barwed; &barwedge; &bbrk; &bbrktbrk; &bcong; &Bcy; &bcy; &bdquo;", "⌆ ⌅ ⌅ ⎵ ⎶ ≌ Б б"),
("&becaus; &Because; &because; &bemptyv; &bepsi; &bernou; &Bernoullis; &beth;", "∵ ∵ ∵ ⦰ ϶ "), ("&becaus; &Because; &because; &bemptyv; &bepsi; &bernou; &Bernoullis; &beth;", "∵ ∵ ∵ ⦰ ϶ "),
("&between; &Bfr; &bfr; &bigcap; &bigcirc; &bigcup; &bigodot; &bigoplus;", "𝔅 𝔟 ⋂ ◯ ⨀ ⨁"), ("&between; &Bfr; &bfr; &bigcap; &bigcirc; &bigcup; &bigodot; &bigoplus;", "𝔅 𝔟 ⋂ ◯ ⨀ ⨁"),
@@ -352,6 +353,7 @@ STRINGS_FOR_ENCODE = [
("\u00A0\u2002\u2003\u2009\u200D\u200C", "&nbsp;&ensp;&emsp;&thinsp;&zwj;&zwnj;"), # Набор пробелов и невидимых символов ("\u00A0\u2002\u2003\u2009\u200D\u200C", "&nbsp;&ensp;&emsp;&thinsp;&zwj;&zwnj;"), # Набор пробелов и невидимых символов
("", "&ndash; &mdash; &hyphen; &horbar;"), # Набор тире и дефисов ("", "&ndash; &mdash; &hyphen; &horbar;"), # Набор тире и дефисов
("$ ¢ £ ¤ ¥ € ₽", "&dollar; &cent; &pound; &curren; &yen; &euro; &#8381;"), # Валютные символы ("$ ¢ £ ¤ ¥ € ₽", "&dollar; &cent; &pound; &curren; &yen; &euro; &#8381;"), # Валютные символы
("֏ ₽ ₴ ₸ ₹ ₼ ₾", "&#1423; &#8381; &#8372; &#8376; &#8377; &#8380; &#8382;"), # Валютные символы
# Набор из html.entities.name2codepoint # Набор из html.entities.name2codepoint
("Æ Á Â À Α Å Ã Ä Ä", "Æ &Aacute; &Acirc; &Agrave; &Alpha; &Aring; &Atilde; &Auml; &Auml;"), ("Æ Á Â À Α Å Ã Ä Ä", "Æ &Aacute; &Acirc; &Agrave; &Alpha; &Aring; &Atilde; &Auml; &Auml;"),
("Β Ç Χ ‡ Δ Ð É Ê È", "&Beta; &Ccedil; &Chi; &Dagger; &Delta; &ETH; &Eacute; &Ecirc; &Egrave;"), ("Β Ç Χ ‡ Δ Ð É Ê È", "&Beta; &Ccedil; &Chi; &Dagger; &Delta; &ETH; &Eacute; &Ecirc; &Egrave;"),
@@ -381,6 +383,278 @@ STRINGS_FOR_ENCODE = [
("ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ", "&ugrave; &uml; &upsih; &upsilon; &uuml; &weierp; &xi; &yacute; &yen; &yuml;"), ("ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ", "&ugrave; &uml; &upsih; &upsilon; &uuml; &weierp; &xi; &yacute; &yen; &yuml;"),
("ζ \u200D \u200C + = %", "&zeta; &zwj; &zwnj; &plus; = %"), ("ζ \u200D \u200C + = %", "&zeta; &zwj; &zwnj; &plus; = %"),
# Набор из html.entities.html5 # Набор из html.entities.html5
("Á á Á á Ă ă ∾ ∿ Â", "&Aacute; &aacute; &Aacute; &aacute; &Abreve; &abreve; &ac; &acd; &Acirc;"),
("â Â â ´ ´ А а Æ æ Æ", "&acirc; &Acirc; &acirc; &acute; &acute; А а Æ æ Æ"),
("æ \u2061 𝔄 𝔞 À à À à ℵ ℵ", "æ &af; &Afr; &afr; &Agrave; &agrave; &Agrave; &agrave; &alefsym; &alefsym;"),
("Α α Ā ā ⨿ & & & & ⩓ ∧", "&Alpha; &alpha; &Amacr; &amacr; &amalg; &amp; &amp; &amp; &amp; &And; &and;"),
("⩕ ⩜ ⩘ ⩚ ∠ ⦤ ∠ ∡ ⦨", "&andand; &andd; &andslope; &andv; &ang; &ange; &ang; &angmsd; &angmsdaa;"),
("⦩ ⦪ ⦫ ⦬ ⦭ ⦮ ⦯", "&angmsdab; &angmsdac; &angmsdad; &angmsdae; &angmsdaf; &angmsdag; &angmsdah;"),
("∟ ⊾ ⦝ ∢ Å ⍼ Ą ą 𝔸", "&angrt; &angrtvb; &angrtvbd; &angsph; &Aring; &angzarr; &Aogon; &aogon; &Aopf;"),
("𝕒 ≈ ⩯ ⩰ ≊ ≋ ' \u2061", "&aopf; &asymp; &apacir; &apE; &ape; &apid; &apos; &af; &asymp;"),
("≊ Å å Å å 𝒜 𝒶 ≔ *", "&ape; &Aring; &aring; &Aring; &aring; &Ascr; &ascr; &Assign; *"),
("≈ ≍ Ã ã Ã ã Ä ä Ä", "&asymp; &asympeq; &Atilde; &atilde; &Atilde; &atilde; &Auml; &auml; &Auml;"),
("ä ∳ ⨑ ≌ ϶ ", "&auml; &awconint; &awint; &bcong; &bepsi; &bprime; &bsim;"),
(" ⫧ ⊽ ⌆ ⌅ ⌅ ⎵", "&bsime; &Backslash; &Barv; &barvee; &Barwed; &barwed; &barwed; &bbrk;"),
("⎶ ≌ Б б „ ∵ ⦰", "&bbrktbrk; &bcong; Б б &bdquo; &becaus; &bemptyv;"),
("϶ Β β ℶ ≬ 𝔅 𝔟", "&bepsi; &Bscr; &Bscr; &Beta; &beta; &beth; &between; &Bfr; &bfr;"),
("⋂ ◯ ⨀ ⨁ ⨂ ⨆", "&bigcap; &bigcirc; &bigcup; &bigodot; &bigoplus; &bigotimes; &bigsqcup;"),
("★ ▽ △ ⨄ ", "&bigstar; &bigtriangledown; &bigtriangleup; &biguplus; &bigvee; &bigwedge;"),
("⤍ ⧫ ▪ ▴ ▾", "&bkarow; &blacklozenge; &blacksquare; &blacktriangle; &blacktriangledown;"),
("◂ ▸ ␣ ▒ ░ ▓", "&blacktriangleleft; &blacktriangleright; &blank; &blk12; &blk14; &blk34;"),
("█ ⫭ ⌐ 𝔹 𝕓 ⊥ ⊥ ⋈ ⧉ ╗", "&block; &bNot; &bnot; &Bopf; &bopf; &perp; &perp; &bowtie; &boxbox; &boxDL;"),
("╖ ╕ ┐ ╔ ╓ ╒ ┌ ═ ─ ╦", "&boxDl; &boxdL; &boxdl; &boxDR; &boxDr; &boxdR; &boxdr; &boxH; &boxh; &boxHD;"),
("╤ ╥ ┬ ╩ ╧ ╨ ┴ ⊟ ⊞", "&boxHd; &boxhD; &boxhd; &boxHU; &boxHu; &boxhU; &boxhu; &boxminus; &boxplus;"),
("⊠ ╝ ╜ ╛ ┘ ╚ ╙ ╘ └", "&boxtimes; &boxUL; &boxUl; &boxuL; &boxul; &boxUR; &boxUr; &boxuR; &boxur;"),
("║ │ ╬ ╫ ╪ ┼ ╣ ╢ ╡ ┤", "&boxV; &boxv; &boxVH; &boxVh; &boxvH; &boxvh; &boxVL; &boxVl; &boxvL; &boxvl;"),
("╠ ╟ ╞ ├ ˘ ˘ ¦ ¦", "&boxVR; &boxVr; &boxvR; &boxvr; &bprime; &breve; &breve; &brvbar; &brvbar;"),
(" 𝒷 ⁏ ∽ ⋍ \\ ⧅ ⟈ • •", "&Bscr; &bscr; &bsemi; &bsim; &bsime; \\ &bsolb; &bsolhsub; &bull; &bull;"),
# ("≎ ⪮ ≏ ≎ ≏ Ć ć ⋒ ∩", "&bump; &bumpE; &bumpe; &Bumpeq; &bumpeq; &Cacute; &cacute; &Cap; &cap;"),
# ("⩄ ⩉ ⩋ ⩇ ⩀ ", "&capand; &capbrcup; &capcap; &capcup; &capdot; &CapitalDifferentialD; &caret;"),
# ("ˇ ⩍ Č č Ç ç Ç", "&caron; &Cayleys; &ccaps; &Ccaron; &ccaron; &Ccedil; &ccedil; &Ccedil;"),
# ("ç Ĉ ĉ ∰ ⩌ ⩐ Ċ ċ ¸", "&ccedil; &Ccirc; &ccirc; &Cconint; &ccups; &ccupssm; &Cdot; &cdot; &cedil;"),
# ("¸ ¸ ⦲ ¢ ¢ · · 𝔠", "&cedil; &Cedilla; &cemptyv; &cent; &cent; &CenterDot; &centerdot; &Cfr; &cfr;"),
# ("Ч ч ✓ ✓ Χ χ ○ ˆ ≗", "&CHcy; &chcy; &check; &checkmark; &Chi; &chi; &cir; &circ; &circeq;"),
# ("↺ ↻ ⊛ ⊚ ⊝", "&circlearrowleft; &circlearrowright; &circledast; &circledcirc; &circleddash;"),
# ("⊙ ® Ⓢ ⊖ ⊕ ⊗", "&CircleDot; &circledR; &circledS; &CircleMinus; &CirclePlus; &CircleTimes;"),
# ("⧃ ≗ ⨐ ⫯ ⧂ ∲", "&cirE; &cire; &cirfnint; &cirmid; &cirscir; &ClockwiseContourIntegral;"),
# ("” ♣ ♣ ∷ :", "&CloseCurlyDoubleQuote; &CloseCurlyQuote; &clubs; &clubsuit; &Colon; &colon;"),
# ("⩴ ≔ ≔ , @ ∁ ∘ ∁", "&Colone; &colone; &coloneq; &comma; &commat; &comp; &compfn; &complement;"),
# (" ≅ ⩭ ≡ ∯ ∮ ∮", "&complexes; &cong; &congdot; &Congruent; &Conint; &conint; &ContourIntegral;"),
# (" 𝕔 ∐ ∐ © © © © ℗", "&Copf; &copf; &coprod; &Coproduct; &COPY; &copy; &COPY; &copy; &copysr;"),
# ("∳ ↵ 𝒞 𝒸 ⫏", "&CounterClockwiseContourIntegral; &crarr; &Cross; &cross; &Cscr; &cscr; &csub;"),
# ("⫑ ⫐ ⫒ ⋯ ⤸ ⤵ ⋞ ⋟ ↶", "&csube; &csup; &csupe; &ctdot; &cudarrl; &cudarrr; &cuepr; &cuesc; &cularr;"),
# ("⤽ ⋓ ⩈ ≍ ⩆ ⩊ ⊍ ⩅", "&cularrp; &Cup; &cup; &cupbrcap; &CupCap; &cupcap; &cupcup; &cupdot; &cupor;"),
# ("↷ ⤼ ⋞ ⋟ ⋎ ⋏", "&curarr; &curarrm; &curlyeqprec; &curlyeqsucc; &curlyvee; &curlywedge;"),
# ("¤ ¤ ↶ ↷ ⋎ ⋏", "&curren; &curren; &curvearrowleft; &curvearrowright; &cuvee; &cuwed;"),
# ("∲ ∱ ⌭ ‡ † ℸ ↡ ⇓ ↓", "&cwconint; &cwint; &cylcty; &Dagger; &dagger; &daleth; &Darr; &dArr; &darr;"),
# (" ⫤ ⊣ ⤏ ˝ Ď ď Д д ", "&dash; &Dashv; &dashv; &dbkarow; &dblac; &Dcaron; &dcaron; &Dcy; &dcy; &DD;"),
# (" ‡ ⇊ ⤑ ⩷ ° ° ∇ Δ δ", "&dd; &ddagger; &ddarr; &DDotrahd; &ddotseq; &deg; &deg; &Del; &Delta; &delta;"),
# ("⦱ ⥿ 𝔇 𝔡 ⥥ ⇃ ⇂ ´", "&demptyv; &dfisht; &Dfr; &dfr; &dHar; &dharl; &dharr; &DiacriticalAcute;"),
# ("˙ ˝ `", "&DiacriticalDot; &DiacriticalDoubleAcute; &DiacriticalGrave;"),
# ("˜ ⋄ ⋄ ⋄ ♦ ♦ ¨", "&DiacriticalTilde; &diam; &Diamond; &diamond; &diamondsuit; &diams; &die;"),
# (" ϝ ⋲ ÷ ÷ ÷ ⋇", "&DifferentialD; &digamma; &disin; &div; &divide; &divide; &divideontimes;"),
# ("⋇ Ђ ђ ⌞ ⌍ $ 𝔻 𝕕 ¨ ˙", "&divonx; &DJcy; &djcy; &dlcorn; &dlcrop; &dollar; &Dopf; &dopf; &Dot; &dot;"),
# ("⃜ ≐ ≑ ≐ ∸ ∔ ⊡", "&DotDot; &doteq; &doteqdot; &DotEqual; &dotminus; &dotplus; &dotsquare;"),
# ("⌆ ∯ ¨ ⇓", "&doublebarwedge; &DoubleContourIntegral; &DoubleDot; &DoubleDownArrow;"),
# ("⇐ ⇔ ⫤ ⟸", "&DoubleLeftArrow; &DoubleLeftRightArrow; &DoubleLeftTee; &DoubleLongLeftArrow;"),
# ("⟺ ⟹ ⇒", "&DoubleLongLeftRightArrow; &DoubleLongRightArrow; &DoubleRightArrow;"),
# ("⊨ ⇑ ⇕ ∥", "&DoubleRightTee; &DoubleUpArrow; &DoubleUpDownArrow; &DoubleVerticalBar;"),
# ("↓ ⇓ ↓ ⤓ ⇵", "&DownArrow; &Downarrow; &downarrow; &DownArrowBar; &DownArrowUpArrow;"),
# ("̑ ⇊ ⇃ ⇂", "&DownBreve; &downdownarrows; &downharpoonleft; &downharpoonright;"),
# ("⥐ ⥞ ↽ ⥖", "&DownLeftRightVector; &DownLeftTeeVector; &DownLeftVector; &DownLeftVectorBar;"),
# ("⥟ ⇁ ⥗ ", "&DownRightTeeVector; &DownRightVector; &DownRightVectorBar; &DownTee;"),
# ("↧ ⤐ ⌟ ⌌ 𝒟 𝒹 Ѕ ѕ ⧶", "&DownTeeArrow; &drbkarow; &drcorn; &drcrop; &Dscr; &dscr; &DScy; &dscy; &dsol;"),
# ("Đ đ ⋱ ▿ ▾ ⇵ ⥯ ⦦ Џ", "&Dstrok; &dstrok; &dtdot; &dtri; &dtrif; &duarr; &duhar; &dwangle; &DZcy;"),
# ("џ ⟿ É é É é ⩮ Ě", "&dzcy; &dzigrarr; &Eacute; &eacute; &Eacute; &eacute; &easter; &Ecaron;"),
# ("ě ≖ Ê ê Ê ê ≕ Э э ⩷", "&ecaron; &ecir; &Ecirc; &ecirc; &Ecirc; &ecirc; &ecolon; &Ecy; &ecy; &eDDot;"),
# ("Ė ≑ ė 𝔈 𝔢 ⪚ È è È", "&Edot; &eDot; &edot; &ee; &efDot; &Efr; &efr; &eg; &Egrave; &egrave; &Egrave;"),
# ("è ⪖ ⪘ ⪙ ∈ ⏧ ⪕ ⪗ Ē", "&egrave; &egs; &egsdot; &el; &Element; &elinters; &ell; &els; &elsdot; &Emacr;"),
# ("ē ∅ ∅ ◻ ∅ ▫", "&emacr; &empty; &emptyset; &EmptySmallSquare; &emptyv; &EmptyVerySmallSquare;"),
# (" Ŋ ŋ Ę ę 𝔼 𝕖", "&emsp13; &emsp14; &emsp; &ENG; &eng; &ensp; &Eogon; &eogon; &Eopf; &eopf;"),
# ("⋕ ⧣ ⩱ ε Ε ε ϵ ≖ ≕", "&epar; &eparsl; &eplus; &epsi; &Epsilon; &epsilon; &epsiv; &eqcirc; &eqcolon;"),
# ("≂ ⪖ ⪕ ⩵ = ≂ ≟", "&eqsim; &eqslantgtr; &eqslantless; &Equal; &equals; &EqualTilde; &equest;"),
# ("⇌ ≡ ⩸ ⧥ ⥱ ≓ ", "&Equilibrium; &equiv; &equivDD; &eqvparsl; &erarr; &erDot; &Escr; &escr;"),
# ("≐ ⩳ ≂ Η η Ð ð Ð ð Ë ë Ë", "&esdot; &Esim; &esim; &Eta; &eta; &ETH; &eth; &ETH; &eth; &Euml; &euml; &Euml;"),
# ("ë € ! ∃ ∃ ", "&euml; &euro; &excl; &exist; &Exists; &expectation; &ExponentialE;"),
# (" ≒ Ф ф ♀ ffi ff ffl", "&exponentiale; &fallingdotseq; &Fcy; &fcy; &female; &ffilig; &fflig; &ffllig;"),
# ("𝔉 𝔣 fi ◼ ▪ ♭ fl", "&Ffr; &ffr; &filig; &FilledSmallSquare; &FilledVerySmallSquare; &flat; &fllig;"),
# ("▱ ƒ 𝔽 𝕗 ∀ ∀ ⋔ ⫙ ", "&fltns; &fnof; &Fopf; &fopf; &ForAll; &forall; &fork; &forkv; &Fouriertrf;"),
# ("⨍ ½ ½ ⅓ ¼ ¼ ⅕ ⅙", "&fpartint; &frac12; &frac12; &frac13; &frac14; &frac14; &frac15; &frac16;"),
# ("⅛ ⅔ ⅖ ¾ ¾ ⅗ ⅜ ⅘", "&frac18; &frac23; &frac25; &frac34; &frac34; &frac35; &frac38; &frac45;"),
# ("⅚ ⅝ ⅞ 𝒻 ǵ Γ", "&frac56; &frac58; &frac78; &frasl; &frown; &Fscr; &fscr; &gacute; &Gamma;"),
# ("γ Ϝ ϝ ⪆ Ğ ğ Ģ Ĝ ĝ", "&gamma; &Gammad; &gammad; &gap; &Gbreve; &gbreve; &Gcedil; &Gcirc; &gcirc;"),
# ("Г г Ġ ġ ≧ ≥ ⪌ ⋛ ≥ ≧ ⩾ ⩾", "&Gcy; &gcy; &Gdot; &gdot; &gE; &ge; &gEl; &gel; &geq; &geqq; &geqslant; &ges;"),
# ("⪩ ⪀ ⪂ ⪄ ⪔ 𝔊 𝔤 ⋙ ≫ ⋙", "&gescc; &gesdot; &gesdoto; &gesdotol; &gesles; &Gfr; &gfr; &Gg; &gg; &ggg;"),
# ("ℷ Ѓ ѓ ≷ ⪥ ⪒ ⪤ ⪊ ⪊ ≩ ⪈", "&gimel; &GJcy; &gjcy; &gl; &gla; &glE; &glj; &gnap; &gnapprox; &gnE; &gne;"),
# ("⪈ ≩ ⋧ 𝔾 𝕘 ` ≥ ⋛", "&gneq; &gneqq; &gnsim; &Gopf; &gopf; &grave; &GreaterEqual; &GreaterEqualLess;"),
# ("≧ ⪢ ≷ ⩾", "&GreaterFullEqual; &GreaterGreater; &GreaterLess; &GreaterSlantEqual;"),
# ("≳ 𝒢 ≳ ⪎ ⪐ > > > ≫ >", "&GreaterTilde; &Gscr; &gscr; &gsim; &gsime; &gsiml; &GT; &gt; &GT; &Gt; &gt;"),
# ("⪧ ⩺ ⋗ ⦕ ⩼ ⪆ ⥸ ⋗", "&gtcc; &gtcir; &gtdot; &gtlPar; &gtquest; &gtrapprox; &gtrarr; &gtrdot;"),
# ("⋛ ⪌ ≷ ≳ ˇ ½ ", "&gtreqless; &gtreqqless; &gtrless; &gtrsim; &Hacek; &hairsp; &half; &hamilt;"),
# ("Ъ ъ ⇔ ↔ ⥈ ↭ ^ ℏ Ĥ ĥ", "&HARDcy; &hardcy; &hArr; &harr; &harrcir; &harrw; &Hat; &hbar; &Hcirc; &hcirc;"),
# ("♥ ♥ … ⊹ 𝔥 ⤥", "&hearts; &heartsuit; &hellip; &hercon; &Hfr; &hfr; &HilbertSpace; &hksearow;"),
# ("⤦ ⇿ ∻ ↩ ↪ 𝕙", "&hkswarow; &hoarr; &homtht; &hookleftarrow; &hookrightarrow; &Hopf; &hopf;"),
# ("― ─ 𝒽 ℏ Ħ ħ", "&horbar; &HorizontalLine; &Hscr; &hscr; &hslash; &Hstrok; &hstrok;"),
# ("≎ ≏ Í í Í", "&HumpDownHump; &HumpEqual; &hybull; &hyphen; &Iacute; &iacute; &Iacute;"),
# ("í Î î Î î И и İ Е е", "&iacute; &ic; &Icirc; &icirc; &Icirc; &icirc; &Icy; &icy; &Idot; &IEcy; &iecy;"),
# ("¡ ¡ ⇔ 𝔦 Ì ì Ì ì ", "&iexcl; &iexcl; &iff; &Ifr; &ifr; &Igrave; &igrave; &Igrave; &igrave; &ii;"),
# ("⨌ ∭ ⧜ ℩ IJ ij Ī ī ", "&iiiint; &iiint; &iinfin; &iiota; &IJlig; &ijlig; &Im; &Imacr; &imacr; &image;"),
# (" ı ⊷ Ƶ ⇒ ∈", "&ImaginaryI; &imagline; &imagpart; &imath; &imof; &imped; &Implies; &in;"),
# ("℅ ∞ ⧝ ı ∬ ∫ ⊺ ", "&incare; &infin; &infintie; &inodot; &Int; &int; &intcal; &integers;"),
# ("∫ ⊺ ⋂ ⨗ ⨼ ", "&Integral; &intercal; &Intersection; &intlarhk; &intprod; &InvisibleComma;"),
# (" Ё ё Į į 𝕀 𝕚 Ι ι", "&InvisibleTimes; &IOcy; &iocy; &Iogon; &iogon; &Iopf; &iopf; &Iota; &iota;"),
# ("⨼ ¿ ¿ 𝒾 ∈ ⋵ ⋹ ⋴", "&iprod; &iquest; &iquest; &Iscr; &iscr; &isin; &isindot; &isinE; &isins;"),
# ("⋳ ∈ Ĩ ĩ І і Ï ï Ï", "&isinsv; &isinv; &it; &Itilde; &itilde; &Iukcy; &iukcy; &Iuml; &iuml; &Iuml;"),
# ("ï Ĵ ĵ Й й 𝔍 𝔧 ȷ 𝕁 𝕛 𝒥", "&iuml; &Jcirc; &jcirc; &Jcy; &jcy; &Jfr; &jfr; &jmath; &Jopf; &jopf; &Jscr;"),
# ("𝒿 Ј ј Є є Κ κ ϰ Ķ", "&jscr; &Jsercy; &jsercy; &Jukcy; &jukcy; &Kappa; &kappa; &kappav; &Kcedil;"),
# ("ķ К к 𝔎 𝔨 ĸ Х х Ќ ќ 𝕂", "&kcedil; &Kcy; &kcy; &Kfr; &kfr; &kgreen; &KHcy; &khcy; &KJcy; &kjcy; &Kopf;"),
# ("𝕜 𝒦 𝓀 ⇚ Ĺ ĺ ⦴ Λ", "&kopf; &Kscr; &kscr; &lAarr; &Lacute; &lacute; &laemptyv; &lagran; &Lambda;"),
# ("λ ⟪ ⟨ ⦑ ⟨ ⪅ « «", "&lambda; &Lang; &lang; &langd; &langle; &lap; &Laplacetrf; &laquo; &laquo;"),
# ("↞ ⇐ ← ⇤ ⤟ ⤝ ↩ ↫ ⤹", "&Larr; &lArr; &larr; &larrb; &larrbfs; &larrfs; &larrhk; &larrlp; &larrpl;"),
# ("⥳ ↢ ⪫ ⤛ ⤙ ⪭ ⤎ ⤌ ", "&larrsim; &larrtl; &lat; &lAtail; &latail; &late; &lBarr; &lbarr; &lbbrk;"),
# ("{ [ ⦋ ⦏ ⦍ Ľ ľ Ļ", "&lbrace; &lbrack; &lbrke; &lbrksld; &lbrkslu; &Lcaron; &lcaron; &Lcedil;"),
# ("ļ ⌈ { Л л ⤶ “ „ ⥧", "&lcedil; &lceil; &lcub; &Lcy; &lcy; &ldca; &ldquo; &ldquor; &ldrdhar;"),
# ("⥋ ↲ ≦ ≤ ⟨ ← ⇐", "&ldrushar; &ldsh; &lE; &le; &LeftAngleBracket; &LeftArrow; &Leftarrow;"),
# ("← ⇤ ⇆ ↢ ⌈", "&leftarrow; &LeftArrowBar; &LeftArrowRightArrow; &leftarrowtail; &LeftCeiling;"),
# ("⟦ ⥡ ⇃ ⥙", "&LeftDoubleBracket; &LeftDownTeeVector; &LeftDownVector; &LeftDownVectorBar;"),
# ("⌊ ↽ ↼ ⇇", "&LeftFloor; &leftharpoondown; &leftharpoonup; &leftleftarrows;"),
# ("↔ ⇔ ↔ ⇆", "&LeftRightArrow; &Leftrightarrow; &leftrightarrow; &leftrightarrows;"),
# ("⇋ ↭ ⥎ ⊣", "&leftrightharpoons; &leftrightsquigarrow; &LeftRightVector; &LeftTee;"),
# ("↤ ⥚ ⋋ ⊲", "&LeftTeeArrow; &LeftTeeVector; &leftthreetimes; &LeftTriangle;"),
# ("⧏ ⊴ ⥑ ⥠", "&LeftTriangleBar; &LeftTriangleEqual; &LeftUpDownVector; &LeftUpTeeVector;"),
# ("↿ ⥘ ↼ ⥒ ⪋ ⋚", "&LeftUpVector; &LeftUpVectorBar; &LeftVector; &LeftVectorBar; &lEg; &leg;"),
# ("≤ ≦ ⩽ ⩽ ⪨ ⩿ ⪁ ⪃ ⪓", "&leq; &leqq; &leqslant; &les; &lescc; &lesdot; &lesdoto; &lesdotor; &lesges;"),
# ("⪅ ⋖ ⋚ ⪋ ⋚", "&lessapprox; &lessdot; &lesseqgtr; &lesseqqgtr; &LessEqualGreater;"),
# ("≦ ≶ ≶ ⪡ ≲ ⩽", "&LessFullEqual; &LessGreater; &lessgtr; &LessLess; &lesssim; &LessSlantEqual;"),
# ("≲ ⥼ ⌊ 𝔏 𝔩 ≶ ⪑ ⥢ ↽ ↼", "&LessTilde; &lfisht; &lfloor; &Lfr; &lfr; &lg; &lgE; &lHar; &lhard; &lharu;"),
# ("⥪ ▄ Љ љ ⋘ ≪ ⇇ ⌞ ⇚", "&lharul; &lhblk; &LJcy; &ljcy; &Ll; &ll; &llarr; &llcorner; &Lleftarrow;"),
# ("⥫ ◺ Ŀ ŀ ⎰ ⎰ ⪉ ⪉", "&llhard; &lltri; &Lmidot; &lmidot; &lmoust; &lmoustache; &lnap; &lnapprox;"),
# ("≨ ⪇ ⪇ ≨ ⋦ ⟬ ⇽ ⟦ ⟵", "&lnE; &lne; &lneq; &lneqq; &lnsim; &loang; &loarr; &lobrk; &LongLeftArrow;"),
# ("⟸ ⟵ ⟷ ⟺", "&Longleftarrow; &longleftarrow; &LongLeftRightArrow; &Longleftrightarrow;"),
# ("⟷ ⟼ ⟶ ⟹", "&longleftrightarrow; &longmapsto; &LongRightArrow; &Longrightarrow;"),
# ("⟶ ↫ ↬ ⦅ 𝕃 𝕝", "&longrightarrow; &looparrowleft; &looparrowright; &lopar; &Lopf; &lopf;"),
# ("⨭ ⨴ _ ↙ ↘ ◊", "&loplus; &lotimes; &lowast; &lowbar; &LowerLeftArrow; &LowerRightArrow; &loz;"),
# ("◊ ⧫ ( ⦓ ⇆ ⌟ ⇋ ⥭ ", "&lozenge; &lozf; &lpar; &lparlt; &lrarr; &lrcorner; &lrhar; &lrhard; &lrm;"),
# ("⊿ 𝓁 ↰ ↰ ≲ ⪍ ⪏ [", "&lrtri; &lsaquo; &Lscr; &lscr; &Lsh; &lsh; &lsim; &lsime; &lsimg; &lsqb;"),
# (" Ł ł < < < ≪ < ⪦ ⩹", "&lsquo; &lsquor; &Lstrok; &lstrok; &LT; &lt; &LT; &Lt; &lt; &ltcc; &ltcir;"),
# ("⋖ ⋋ ⋉ ⥶ ⩻ ◃ ⊴ ◂ ⦖", "&ltdot; &lthree; &ltimes; &ltlarr; &ltquest; &ltri; &ltrie; &ltrif; &ltrPar;"),
# ("⥊ ⥦ ¯ ¯ ♂ ✠ ✠ ⤅ ↦", "&lurdshar; &luruhar; &macr; &macr; &male; &malt; &maltese; &Map; &map;"),
# ("↦ ↧ ↤ ↥ ▮ ⨩ М м", "&mapsto; &mapstodown; &mapstoleft; &mapstoup; &marker; &mcomma; &Mcy; &mcy;"),
# ("— ∺ ∡ 𝔐 𝔪 ℧", "&mdash; &mDDot; &measuredangle; &MediumSpace; &Mellintrf; &Mfr; &mfr; &mho;"),
# ("µ µ * ⫰ · · ⊟", "&micro; &micro; &mid; &midast; &midcir; &middot; &middot; &minus; &minusb;"),
# ("∸ ⨪ ∓ ⫛ … ∓ ⊧ 𝕄 𝕞", "&minusd; &minusdu; &MinusPlus; &mlcp; &mldr; &mnplus; &models; &Mopf; &mopf;"),
# ("∓ 𝓂 ∾ Μ μ ⊸ ⊸ ∇ Ń", "&mp; &Mscr; &mscr; &mstpos; &Mu; &mu; &multimap; &mumap; &nabla; &Nacute;"),
# ("ń ≉ ʼn ≉ ♮ ♮    ", "&nacute; &nap; &napos; &napprox; &natur; &natural; &naturals; &nbsp; &nbsp;"),
# ("⩃ Ň ň Ņ ņ ≇ ⩂ Н н ", "&ncap; &Ncaron; &ncaron; &Ncedil; &ncedil; &ncong; &ncup; &Ncy; &ncy; &ndash;"),
# ("≠ ⤤ ⇗ ↗ ↗ ", "&ne; &nearhk; &neArr; &nearr; &nearrow; &NegativeMediumSpace;"),
# (" ≢", "&NegativeThickSpace; &NegativeThinSpace; &NegativeVeryThinSpace; &nequiv;"),
# ("⤨ ≫ ≪ \n # ∄ ∄", "&nesear; &NestedGreaterGreater; &NestedLessLess; &NewLine; &nexist; &nexists;"),
# ("𝔑 𝔫 ≱ ≱ ≵ ≯ ≯ ⇎ ↮ ⫲ ∋", "&Nfr; &nfr; &nge; &ngeq; &ngsim; &ngt; &ngtr; &nhArr; &nharr; &nhpar; &ni;"),
# ("⋼ ⋺ ∋ Њ њ ⇍ ↚ ‥ ≰ ⇍", "&nis; &nisd; &niv; &NJcy; &njcy; &nlArr; &nlarr; &nldr; &nle; &nLeftarrow;"),
# ("↚ ⇎ ↮ ≰ ≮ ≴ ≮", "&nleftarrow; &nLeftrightarrow; &nleftrightarrow; &nleq; &nless; &nlsim; &nlt;"),
# ("⋪ ⋬ ∤   𝕟 ¬ ⫬", "&nltri; &nltrie; &nmid; &NoBreak; &NonBreakingSpace; &Nopf; &nopf; &not; &Not;"),
# ("¬ ≢ ≭ ∦ ∉", "&not; &NotCongruent; &NotCupCap; &NotDoubleVerticalBar; &NotElement;"),
# ("≠ ∄ ≯ ≱ ≹", "&NotEqual; &NotExists; &NotGreater; &NotGreaterEqual; &NotGreaterLess;"),
# ("≵ ∉ ∉ ⋷ ⋶ ⋪", "&NotGreaterTilde; &notin; &notinva; &notinvb; &notinvc; &NotLeftTriangle;"),
# ("⋬ ≮ ≰ ≸", "&NotLeftTriangleEqual; &NotLess; &NotLessEqual; &NotLessGreater;"),
# ("≴ ∌ ∌ ⋾ ⋽ ⊀", "&NotLessTilde; &notni; &notniva; &notnivb; &notnivc; &NotPrecedes;"),
# ("⋠ ∌ ⋫", "&NotPrecedesSlantEqual; &NotReverseElement; &NotRightTriangle;"),
# ("⋭ ⋢ ⋣", "&NotRightTriangleEqual; &NotSquareSubsetEqual; &NotSquareSupersetEqual;"),
# ("⊈ ⊁ ⋡ ⊉", "&NotSubsetEqual; &NotSucceeds; &NotSucceedsSlantEqual; &NotSupersetEqual;"),
# ("≁ ≄ ≇ ≉", "&NotTilde; &NotTildeEqual; &NotTildeFullEqual; &NotTildeTilde;"),
# ("∤ ∦ ∦ ⨔ ⊀ ⋠ ⊀ ⇏", "&NotVerticalBar; &npar; &nparallel; &npolint; &npr; &nprcue; &nprec; &nrArr;"),
# ("↛ ⇏ ↛ ⋫ ⋭ ⊁ ⋡ 𝒩", "&nrarr; &nRightarrow; &nrightarrow; &nrtri; &nrtrie; &nsc; &nsccue; &Nscr;"),
# ("𝓃 ∤ ∦ ≁ ≄ ≄ ∤ ∦", "&nscr; &nshortmid; &nshortparallel; &nsim; &nsime; &nsimeq; &nsmid; &nspar;"),
# ("⋢ ⋣ ⊄ ⊈ ⊈ ⊁ ⊅ ⊉", "&nsqsube; &nsqsupe; &nsub; &nsube; &nsubseteq; &nsucc; &nsup; &nsupe;"),
# ("⊉ ≹ Ñ ñ Ñ ñ ≸ ⋪", "&nsupseteq; &ntgl; &Ntilde; &ntilde; &Ntilde; &ntilde; &ntlg; &ntriangleleft;"),
# ("⋬ ⋫ ⋭ Ν ν # №", "&ntrianglelefteq; &ntriangleright; &ntrianglerighteq; &Nu; &nu; &num; &numero;"),
# (" ⊯ ⊮ ⊭ ⊬ ⤄ ⧞ ⤂", "&numsp; &nVDash; &nVdash; &nvDash; &nvdash; &nvHarr; &nvinfin; &nvlArr;"),
# ("⤃ ⤣ ⇖ ↖ ↖ ⤧ Ó ó", "&nvrArr; &nwarhk; &nwArr; &nwarr; &nwarrow; &nwnear; &Oacute; &oacute;"),
# ("Ó ó ⊛ ⊚ Ô ô Ô ô О о", "&Oacute; &oacute; &oast; &ocir; &Ocirc; &ocirc; &Ocirc; &ocirc; &Ocy; &ocy;"),
# ("⊝ Ő ő ⨸ ⊙ ⦼ Œ œ ⦿ 𝔒", "&odash; &Odblac; &odblac; &odiv; &odot; &odsold; &OElig; &oelig; &ofcir; &Ofr;"),
# ("𝔬 ˛ Ò ò Ò ò ⧁ ⦵ Ω ∮", "&ofr; &ogon; &Ograve; &ograve; &Ograve; &ograve; &ogt; &ohbar; &ohm; &oint;"),
# ("↺ ⦾ ⦻ ‾ ⧀ Ō ō Ω ω", "&olarr; &olcir; &olcross; &oline; &olt; &Omacr; &omacr; &Omega; &omega;"),
# ("Ο ο ⦶ ⊖ 𝕆 𝕠 ⦷", "&Omicron; &omicron; &omid; &ominus; &Oopf; &oopf; &opar;"),
# ("“ ⦹ ⊕ ⩔ ↻", "&OpenCurlyDoubleQuote; &OpenCurlyQuote; &operp; &oplus; &Or; &or; &orarr;"),
# ("⩝ ª ª º º ⊶ ⩖ ⩗", "&ord; &order; &orderof; &ordf; &ordf; &ordm; &ordm; &origof; &oror; &orslope;"),
# ("⩛ Ⓢ 𝒪 Ø ø Ø ø ⊘ Õ", "&orv; &oS; &Oscr; &oscr; &Oslash; &oslash; &Oslash; &oslash; &osol; &Otilde;"),
# ("õ Õ õ ⨷ ⊗ ⨶ Ö ö Ö", "&otilde; &Otilde; &otilde; &Otimes; &otimes; &otimesas; &Ouml; &ouml; &Ouml;"),
# ("ö ⌽ ‾ ⏞ ⎴ ⏜ ∥", "&ouml; &ovbar; &OverBar; &OverBrace; &OverBracket; &OverParenthesis; &par;"),
# ("¶ ¶ ∥ ⫳ ⫽ ∂ ∂ П п", "&para; &para; &parallel; &parsim; &parsl; &part; &PartialD; &Pcy; &pcy;"),
# ("% . ‰ ⊥ ‱ 𝔓 𝔭 Φ φ ϕ", "&percnt; &period; &permil; &perp; &pertenk; &Pfr; &pfr; &Phi; &phi; &phiv;"),
# (" ☎ Π π ⋔ ϖ ℏ ℏ", "&phmmat; &phone; &Pi; &pi; &pitchfork; &piv; &planck; &planckh; &plankv;"),
# ("+ ⨣ ⊞ ⨢ ∔ ⨥ ⩲ ±", "&plus; &plusacir; &plusb; &pluscir; &plusdo; &plusdu; &pluse; &PlusMinus;"),
# ("± ± ⨦ ⨧ ± ", "&plusmn; &plusmn; &plussim; &plustwo; &pm; &Poincareplane; &pointint; &Popf;"),
# ("𝕡 £ £ ⪻ ≺ ⪷ ≼ ⪳ ⪯ ≺", "&popf; &pound; &pound; &Pr; &pr; &prap; &prcue; &prE; &pre; &prec;"),
# ("⪷ ≼ ≺ ⪯ ≼", "&precapprox; &preccurlyeq; &Precedes; &PrecedesEqual; &PrecedesSlantEqual;"),
# ("≾ ⪯ ⪹ ⪵ ⋨ ≾ ″", "&PrecedesTilde; &preceq; &precnapprox; &precneqq; &precnsim; &precsim; &Prime;"),
# (" ⪹ ⪵ ⋨ ∏ ∏ ⌮", "&prime; &primes; &prnap; &prnE; &prnsim; &prod; &Product; &profalar;"),
# ("⌒ ⌓ ∝ ∷ ∝ ∝ ≾", "&profline; &profsurf; &prop; &Proportion; &Proportional; &propto; &prsim;"),
# ("⊰ 𝒫 𝓅 Ψ ψ 𝔔 𝔮 𝕢", "&prurel; &Pscr; &pscr; &Psi; &psi; &puncsp; &Qfr; &qfr; &qint; &Qopf; &qopf;"),
# ("⁗ 𝒬 𝓆 ⨖ ? ≟ " "", "&qprime; &Qscr; &qscr; &quaternions; &quatint; &quest; &questeq; &QUOT; &quot;"),
# ("" " ⇛ Ŕ ŕ √ ⦳ ⟫ ⟩", "&QUOT; &quot; &rAarr; &Racute; &racute; &radic; &raemptyv; &Rang; &rang;"),
# ("⦒ ⦥ ⟩ » » ↠ ⇒ → ⥵ ⇥", "&rangd; &range; &rangle; &raquo; &raquo; &Rarr; &rArr; &rarr; &rarrap; &rarrb;"),
# ("⤠ ⤳ ⤞ ↪ ↬ ⥅ ⥴ ⤖", "&rarrbfs; &rarrc; &rarrfs; &rarrhk; &rarrlp; &rarrpl; &rarrsim; &Rarrtl;"),
# ("↣ ↝ ⤜ ⤚ ⤐ ⤏ ⤍", "&rarrtl; &rarrw; &rAtail; &ratail; &ratio; &rationals; &RBarr; &rBarr; &rbarr;"),
# (" } ] ⦌ ⦎ ⦐ Ř ř", "&rbbrk; &rbrace; &rbrack; &rbrke; &rbrksld; &rbrkslu; &Rcaron; &rcaron;"),
# ("Ŗ ŗ ⌉ } Р р ⤷ ⥩ ” ”", "&Rcedil; &rcedil; &rceil; &rcub; &Rcy; &rcy; &rdca; &rdldhar; &rdquo; &rdquor;"),
# ("↳ ▭ ® ® ® ®", "&rdsh; &Re; &real; &realine; &realpart; &reals; &rect; &REG; &reg; &REG; &reg;"),
# ("∋ ⇋ ⥯ ⥽ ⌋", "&ReverseElement; &ReverseEquilibrium; &ReverseUpEquilibrium; &rfisht; &rfloor;"),
# (" 𝔯 ⥤ ⇁ ⇀ ⥬ Ρ ρ ϱ", "&Rfr; &rfr; &rHar; &rhard; &rharu; &rharul; &Rho; &rho; &rhov;"),
# ("⟩ → ⇒ → ⇥", "&RightAngleBracket; &RightArrow; &Rightarrow; &rightarrow; &RightArrowBar;"),
# ("⇄ ↣ ⌉ ⟧", "&RightArrowLeftArrow; &rightarrowtail; &RightCeiling; &RightDoubleBracket;"),
# ("⥝ ⇂ ⥕ ⌋", "&RightDownTeeVector; &RightDownVector; &RightDownVectorBar; &RightFloor;"),
# ("⇁ ⇀ ⇄ ⇌", "&rightharpoondown; &rightharpoonup; &rightleftarrows; &rightleftharpoons;"),
# ("⇉ ↝ ⊢ ↦", "&rightrightarrows; &rightsquigarrow; &RightTee; &RightTeeArrow;"),
# ("⥛ ⋌ ⊳ ⧐", "&RightTeeVector; &rightthreetimes; &RightTriangle; &RightTriangleBar;"),
# ("⊵ ⥏ ⥜ ↾", "&RightTriangleEqual; &RightUpDownVector; &RightUpTeeVector; &RightUpVector;"),
# ("⥔ ⇀ ⥓ ˚ ≓", "&RightUpVectorBar; &RightVector; &RightVectorBar; &ring; &risingdotseq;"),
# ("⇄ ⇌ ⎱ ⎱ ⫮ ⟭ ⇾ ⟧", "&rlarr; &rlhar; &rlm; &rmoust; &rmoustache; &rnmid; &roang; &roarr; &robrk;"),
# ("⦆ 𝕣 ⨮ ⨵ ⥰ ) ⦔", "&ropar; &Ropf; &ropf; &roplus; &rotimes; &RoundImplies; &rpar; &rpargt;"),
# ("⨒ ⇉ ⇛ 𝓇 ↱ ↱ ]", "&rppolint; &rrarr; &Rrightarrow; &rsaquo; &Rscr; &rscr; &Rsh; &rsh; &rsqb;"),
# (" ⋌ ⋊ ▹ ⊵ ▸ ⧎", "&rsquo; &rsquor; &rthree; &rtimes; &rtri; &rtrie; &rtrif; &rtriltri;"),
# ("⧴ ⥨ ℞ Ś ś ⪼ ≻ ⪸", "&RuleDelayed; &ruluhar; &rx; &Sacute; &sacute; &sbquo; &Sc; &sc; &scap;"),
# ("Š š ≽ ⪴ ⪰ Ş ş Ŝ ŝ", "&Scaron; &scaron; &sccue; &scE; &sce; &Scedil; &scedil; &Scirc; &scirc;"),
# ("⪺ ⪶ ⋩ ⨓ ≿ С с ⋅ ⊡ ⩦", "&scnap; &scnE; &scnsim; &scpolint; &scsim; &Scy; &scy; &sdot; &sdotb; &sdote;"),
# ("⤥ ⇘ ↘ ↘ § § ; ⤩ ", "&searhk; &seArr; &searr; &searrow; &sect; &sect; &semi; &seswar; &setminus;"),
# ("𝔖 𝔰 ⌢ ♯ Щ щ Ш ш", "&setmn; &sext; &Sfr; &sfr; &sfrown; &sharp; &SHCHcy; &shchcy; &SHcy; &shcy;"),
# ("↓ ← ∥ →", "&ShortDownArrow; &ShortLeftArrow; &shortmid; &shortparallel; &ShortRightArrow;"),
# ("↑ ­ ­ Σ σ ς ς ⩪", "&ShortUpArrow; &shy; &shy; &Sigma; &sigma; &sigmaf; &sigmav; &sim; &simdot;"),
# ("≃ ≃ ⪞ ⪠ ⪝ ⪟ ≆ ⨤ ⥲", "&sime; &simeq; &simg; &simgE; &siml; &simlE; &simne; &simplus; &simrarr;"),
# ("← ∘ ⨳ ⧤ ⌣ ⪪", "&slarr; &SmallCircle; &smallsetminus; &smashp; &smeparsl; &smid; &smile; &smt;"),
# ("⪬ Ь ь / ⧄ ⌿ 𝕊 𝕤 ♠", "&smte; &SOFTcy; &softcy; &sol; &solb; &solbar; &Sopf; &sopf; &spades;"),
# ("♠ ∥ ⊓ ⊔ √ ⊏ ⊑ ⊏", "&spadesuit; &spar; &sqcap; &sqcup; &Sqrt; &sqsub; &sqsube; &sqsubset;"),
# ("⊑ ⊐ ⊒ ⊐ ⊒ □ □ □", "&sqsubseteq; &sqsup; &sqsupe; &sqsupset; &sqsupseteq; &squ; &Square; &square;"),
# ("⊓ ⊏ ⊑ ⊐", "&SquareIntersection; &SquareSubset; &SquareSubsetEqual; &SquareSuperset;"),
# ("⊒ ⊔ ▪ ▪ → 𝒮 𝓈", "&SquareSupersetEqual; &SquareUnion; &squarf; &squf; &srarr; &Sscr; &sscr;"),
# (" ⌣ ⋆ ⋆ ☆ ★ ϵ", "&ssetmn; &ssmile; &sstarf; &Star; &star; &starf; &straightepsilon;"),
# ("ϕ ¯ ⋐ ⊂ ⪽ ⫅ ⊆ ⫃ ⫁", "&straightphi; &strns; &Sub; &sub; &subdot; &subE; &sube; &subedot; &submult;"),
# ("⫋ ⊊ ⪿ ⥹ ⋐ ⊂ ⊆ ⫅", "&subnE; &subne; &subplus; &subrarr; &Subset; &subset; &subseteq; &subseteqq;"),
# ("⊆ ⊊ ⫋ ⫇ ⫕ ⫓ ≻", "&SubsetEqual; &subsetneq; &subsetneqq; &subsim; &subsub; &subsup; &succ;"),
# ("⪸ ≽ ≻ ⪰ ≽", "&succapprox; &succcurlyeq; &Succeeds; &SucceedsEqual; &SucceedsSlantEqual;"),
# ("≿ ⪰ ⪺ ⪶ ⋩ ≿", "&SucceedsTilde; &succeq; &succnapprox; &succneqq; &succnsim; &succsim;"),
# ("∋ ∑ ∑ ♪ ¹ ¹ ² ² ³ ³ ⋑", "&SuchThat; &Sum; &sum; &sung; &sup1; &sup1; &sup2; &sup2; &sup3; &sup3; &Sup;"),
# ("⊃ ⪾ ⫘ ⫆ ⊇ ⫄ ⊃ ⊇", "&sup; &supdot; &supdsub; &supE; &supe; &supedot; &Superset; &SupersetEqual;"),
# ("⟉ ⫗ ⥻ ⫂ ⫌ ⊋ ⫀ ⋑", "&suphsol; &suphsub; &suplarr; &supmult; &supnE; &supne; &supplus; &Supset;"),
# ("⊃ ⊇ ⫆ ⊋ ⫌ ⫈ ⫔", "&supset; &supseteq; &supseteqq; &supsetneq; &supsetneqq; &supsim; &supsub;"),
# ("⫖ ⤦ ⇙ ↙ ↙ ⤪ ß ß ", "&supsup; &swarhk; &swArr; &swarr; &swarrow; &swnwar; &szlig; &szlig; &Tab;"),
# ("⌖ Τ τ ⎴ Ť ť Ţ ţ Т т", "&target; &Tau; &tau; &tbrk; &Tcaron; &tcaron; &Tcedil; &tcedil; &Tcy; &tcy;"),
# ("⃛ ⌕ 𝔗 𝔱 ∴ ∴ ∴ Θ θ", "&tdot; &telrec; &Tfr; &tfr; &there4; &Therefore; &therefore; &Theta; &theta;"),
# ("ϑ ϑ ≈ ≈", "&thetasym; &thetav; &thickapprox; &thicksim; &thinsp; &ThinSpace; &thkap;"),
# (" Þ þ Þ þ ˜ ≃", "&thksim; &THORN; &thorn; &THORN; &thorn; &Tilde; &tilde; &TildeEqual;"),
# ("≅ ≈ × × ⊠ ⨱ ⨰", "&TildeFullEqual; &TildeTilde; &times; &times; &timesb; &timesbar; &timesd;"),
# ("∭ ⤨ ⌶ ⫱ 𝕋 𝕥 ⫚ ⤩ ‴", "&tint; &toea; &top; &topbot; &topcir; &Topf; &topf; &topfork; &tosa; &tprime;"),
# ("™ ™ ▵ ▿ ◃ ⊴", "&TRADE; &trade; &triangle; &triangledown; &triangleleft; &trianglelefteq;"),
# ("≜ ▹ ⊵ ◬ ≜ ⨺", "&triangleq; &triangleright; &trianglerighteq; &tridot; &trie; &triminus;"),
# ("⃛ ⨹ ⧍ ⨻ ⏢ 𝒯 𝓉 Ц ц", "&TripleDot; &triplus; &trisb; &tritime; &trpezium; &Tscr; &tscr; &TScy; &tscy;"),
# ("Ћ ћ Ŧ ŧ ≬ ↞", "&TSHcy; &tshcy; &Tstrok; &tstrok; &twixt; &twoheadleftarrow;"),
# ("↠ Ú ú Ú ú ↟ ⇑ ↑", "&twoheadrightarrow; &Uacute; &uacute; &Uacute; &uacute; &Uarr; &uArr; &uarr;"),
# ("⥉ Ў ў Ŭ ŭ Û û Û û", "&Uarrocir; &Ubrcy; &ubrcy; &Ubreve; &ubreve; &Ucirc; &ucirc; &Ucirc; &ucirc;"),
# ("У у ⇅ Ű ű ⥮ ⥾ 𝔘 𝔲 Ù", "&Ucy; &ucy; &udarr; &Udblac; &udblac; &udhar; &ufisht; &Ufr; &ufr; &Ugrave;"),
# ("ù Ù ù ⥣ ↿ ↾ ▀ ⌜ ⌜", "&ugrave; &Ugrave; &ugrave; &uHar; &uharl; &uharr; &uhblk; &ulcorn; &ulcorner;"),
# ("⌏ ◸ Ū ū ¨ ¨ _ ⏟", "&ulcrop; &ultri; &Umacr; &umacr; &uml; &uml; &UnderBar; &UnderBrace;"),
# ("⎵ ⏝ ⊎ Ų ų 𝕌", "&UnderBracket; &UnderParenthesis; &Union; &UnionPlus; &Uogon; &uogon; &Uopf;"),
# ("𝕦 ↑ ⇑ ↑ ⤒ ⇅", "&uopf; &UpArrow; &Uparrow; &uparrow; &UpArrowBar; &UpArrowDownArrow;"),
# ("↕ ⇕ ↕ ⥮ ↿", "&UpDownArrow; &Updownarrow; &updownarrow; &UpEquilibrium; &upharpoonleft;"),
# ("↾ ⊎ ↖ ↗ ϒ υ", "&upharpoonright; &uplus; &UpperLeftArrow; &UpperRightArrow; &Upsi; &upsi;"),
# ("ϒ Υ υ ⊥ ↥ ⇈ ⌝", "&upsih; &Upsilon; &upsilon; &perp; &UpTeeArrow; &upuparrows; &urcorn;"),
# ("⌝ ⌎ Ů ů ◹ 𝒰 𝓊 ⋰ Ũ", "&urcorner; &urcrop; &Uring; &uring; &urtri; &Uscr; &uscr; &utdot; &Utilde;"),
# ("ũ ▵ ▴ ⇈ Ü ü Ü ü ⦧ ⦜", "&utilde; &utri; &utrif; &uuarr; &Uuml; &uuml; &Uuml; &uuml; &uwangle; &vangrt;"),
# ("ϵ ϰ ∅ ϕ ϖ ∝ ⇕", "&varepsilon; &varkappa; &varnothing; &varphi; &varpi; &varpropto; &vArr;"),
# ("↕ ϱ ς ϑ ⊲ ⊳", "&varr; &varrho; &varsigma; &vartheta; &vartriangleleft; &vartriangleright;"),
# ("⫫ ⫨ ⫩ В в ⊫ ⊩ ⊨ ⊢ ⫦", "&Vbar; &vBar; &vBarv; &Vcy; &vcy; &VDash; &Vdash; &vDash; &vdash; &Vdashl;"),
# (" ⊻ ≚ ⋮ ‖ | ‖ |", "&Vee; &vee; &veebar; &veeeq; &vellip; &Verbar; &verbar; &Vert; &vert;"),
# (" | ❘ ≀", "&VerticalBar; &VerticalLine; &VerticalSeparator; &VerticalTilde;"),
# (" 𝔙 𝔳𝕍 𝕧 ∝ ⊳ 𝒱", "&VeryThinSpace; &Vfr; &vfr; &vltri; &Vopf; &vopf; &vprop; &vrtri; &Vscr;"),
# ("𝓋 ⊪ ⦚ Ŵ ŵ ⩟ ⋀ ∧ ≙", "&vscr; &Vvdash; &vzigzag; &Wcirc; &wcirc; &wedbar; &Wedge; &wedge; &wedgeq;"),
# ("℘ 𝔚 𝔴 𝕎 𝕨 ℘ ≀ ≀ 𝒲 𝓌 ⋂", "&weierp; &Wfr; &wfr; &Wopf; &wopf; &wp; &wr; &wreath; &Wscr; &wscr; &xcap;"),
# ("◯ 𝔛 𝔵 ⟺ ⟷ Ξ ξ ⟸ ⟵", "&xcirc; &xcup; &xdtri; &Xfr; &xfr; &xhArr; &xharr; &Xi; &xi; &xlArr; &xlarr;"),
# ("⟼ ⋻ ⨀ 𝕏 𝕩 ⨁ ⨂ ⟹ ⟶ 𝒳", "&xmap; &xnis; &xodot; &Xopf; &xopf; &xoplus; &xotime; &xrArr; &xrarr; &Xscr;"),
# ("𝓍 ⨆ ⨄ △ ⋀ Ý ý Ý", "&xscr; &xsqcup; &xuplus; &xutri; &xvee; &xwedge; &Yacute; &yacute; &Yacute;"),
# ("ý Я я Ŷ ŷ Ы ы ¥ ¥ 𝔜 𝔶", "&yacute; &YAcy; &yacy; &Ycirc; &ycirc; &Ycy; &ycy; &yen; &yen; &Yfr; &yfr;"),
# ("Ї ї 𝕐 𝕪 𝒴 𝓎 Ю ю ÿ Ÿ ÿ", "&YIcy; &yicy; &Yopf; &yopf; &Yscr; &yscr; &YUcy; &yucy; &yuml; &Yuml; &yuml;"),
# ("Ź ź Ž ž З з Ż ż ", "&Zacute; &zacute; &Zcaron; &zcaron; &Zcy; &zcy; &Zdot; &zdot; &zeetrf;"),
# (" Ζ ζ 𝔷 Ж ж ⇝ ", "&ZeroWidthSpace; &Zeta; &zeta; &Zfr; &zfr; &ZHcy; &zhcy; &zigrarr; &Zopf;"),
] ]
@pytest.mark.parametrize("input_string, expected_output", STRINGS_FOR_ENCODE) @pytest.mark.parametrize("input_string, expected_output", STRINGS_FOR_ENCODE)