From 6ab64b19075eab83c2c0f434dc87b464c359f806 Mon Sep 17 00:00:00 2001 From: lionel-rowe Date: Wed, 31 May 2023 00:49:16 +0100 Subject: [PATCH] feat(html): add escape and unescape functions for HTML entities (#3335) --- html/_tools/generate_data.ts | 17 + html/entities.ts | 104 ++ html/entities_test.ts | 110 ++ html/mod.ts | 10 + html/named_entity_list.json | 2233 ++++++++++++++++++++++++++++++++++ 5 files changed, 2474 insertions(+) create mode 100755 html/_tools/generate_data.ts create mode 100644 html/entities.ts create mode 100644 html/entities_test.ts create mode 100644 html/mod.ts create mode 100644 html/named_entity_list.json diff --git a/html/_tools/generate_data.ts b/html/_tools/generate_data.ts new file mode 100755 index 000000000..dd97d4a7d --- /dev/null +++ b/html/_tools/generate_data.ts @@ -0,0 +1,17 @@ +#!/usr/bin/env -S deno run --allow-net --allow-read --allow-write +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. + +// JSON version of the full canonical list of named HTML entities +// https://html.spec.whatwg.org/multipage/named-characters.html +import entityList from "https://html.spec.whatwg.org/entities.json" assert { + type: "json", +}; + +const data = Object.fromEntries( + Object.entries(entityList).map(([k, v]) => [k, v.characters]), +); + +await Deno.writeTextFile( + new URL(import.meta.resolve("../named_entity_list.json")), + JSON.stringify(data, null, 2) + "\n", +); diff --git a/html/entities.ts b/html/entities.ts new file mode 100644 index 000000000..adba24260 --- /dev/null +++ b/html/entities.ts @@ -0,0 +1,104 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +export type EntityList = Record; + +const rawToEntityEntries = [ + ["&", "&"], + ["<", "<"], + [">", ">"], + ['"', """], + ["'", "'"], +] as const; + +const defaultEntityList: EntityList = Object.fromEntries([ + ...rawToEntityEntries.map(([raw, entity]) => [entity, raw]), + ["'", "'"], + [" ", "\xa0"], +]); + +const rawToEntity = new Map(rawToEntityEntries); + +const rawRe = new RegExp(`[${[...rawToEntity.keys()].join("")}]`, "g"); + +/** + * Escapes text for safe interpolation into HTML text content and quoted attributes + * + * @example + * ```ts + * import { escape } from "https://deno.land/std@$STD_VERSION/html/entities.ts"; + * import { assertEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * + * assertEquals(escape("<>'&AA"), "<>'&AA"); + * + * // characters that don't need to be escaped will be left alone, + * // even if named HTML entities exist for them + * assertEquals(escape("þð"), "þð"); + * ``` + */ +export function escape(str: string) { + return str.replaceAll(rawRe, (m) => rawToEntity.get(m)!); +} + +export type UnescapeOptions = { entityList: EntityList }; + +const defaultUnescapeOptions: UnescapeOptions = { + entityList: defaultEntityList, +}; + +const MAX_CODE_POINT = 0x10ffff; + +const RX_DEC_ENTITY = /&#([0-9]+);/g; +const RX_HEX_ENTITY = /&#x(\p{AHex}+);/gu; + +const entityListRegexCache = new WeakMap(); + +/** + * Unescapes HTML entities in text + * + * @example + * ```ts + * import { unescape } from "https://deno.land/std@$STD_VERSION/html/entities.ts"; + * import { assertEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * + * // default options (only handles &<>'" and numeric entities) + * assertEquals(unescape("<>'&AA"), "<>'&AA"); + * assertEquals(unescape("þð"), "þð"); + * + * // using the full named entity list from the HTML spec (~47K unminified) + * import entityList from "https://deno.land/std@$STD_VERSION/html/named_entity_list.json" assert { type: "json" }; + * assertEquals(unescape("þð", { entityList }), "þð"); + * ``` + */ +export function unescape( + str: string, + options: Partial = {}, +) { + const { entityList } = { ...defaultUnescapeOptions, ...options }; + + let entityRe = entityListRegexCache.get(entityList); + + if (!entityRe) { + entityRe = new RegExp( + `(${ + Object.keys(entityList) + .sort((a, b) => b.length - a.length) + .join("|") + })`, + "g", + ); + + entityListRegexCache.set(entityList, entityRe); + } + + return str + .replaceAll(entityRe, (m) => entityList[m]) + .replaceAll(RX_DEC_ENTITY, (_, dec) => codePointStrToChar(dec, 10)) + .replaceAll(RX_HEX_ENTITY, (_, hex) => codePointStrToChar(hex, 16)); +} + +function codePointStrToChar(codePointStr: string, radix: number) { + const codePoint = parseInt(codePointStr, radix); + + return codePoint > MAX_CODE_POINT ? "�" : String.fromCodePoint(codePoint); +} diff --git a/html/entities_test.ts b/html/entities_test.ts new file mode 100644 index 000000000..1fdd20cb7 --- /dev/null +++ b/html/entities_test.ts @@ -0,0 +1,110 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. + +import { escape, unescape } from "./entities.ts"; +import { assertEquals } from "../testing/asserts.ts"; +import entityList from "./named_entity_list.json" assert { type: "json" }; + +Deno.test("escape", async (t) => { + await t.step('escapes &<>"', () => { + assertEquals(escape("&<>'\""), "&<>'""); + }); + await t.step("escapes ' to ' (not ')", () => { + assertEquals(escape("'"), "'"); + }); + await t.step("doesn't escape non-breaking space", () => { + assertEquals(escape("\xa0"), "\xa0"); + }); + await t.step( + "doesn't escape other characters, even if they have named entities", + () => { + assertEquals(escape("þð"), "þð"); + }, + ); +}); + +Deno.test("unescape", async (t) => { + await t.step("round-trips with escape", () => { + const chars = "&<>'\""; + assertEquals(unescape(escape(chars)), chars); + }); + + await t.step("named entities", async (t) => { + await t.step("default options", async (t) => { + await t.step("unescapes ' as alias for ' '", () => { + assertEquals(unescape("'"), "'"); + }); + await t.step("unescapes  ", () => { + assertEquals(unescape(" "), "\xa0"); + }); + await t.step("doesn't unescape other named entities", () => { + assertEquals(unescape("þð"), "þð"); + }); + }); + + await t.step("full entity list", async (t) => { + await t.step("unescapes arbitrary named entities", () => { + assertEquals(unescape("þð", { entityList }), "þð"); + }); + await t.step( + "unescapes truncated named entity (no trailing semicolon) if it is listed", + () => { + assertEquals(unescape("&", { entityList }), "&"); + }, + ); + await t.step( + "consumes full named entity even when a truncated version is specified", + () => { + assertEquals(unescape("&", { entityList }), "&"); + }, + ); + await t.step( + "doesn't unescape truncated named entity if it isn't listed", + () => { + assertEquals( + unescape("∴ &therefore", { entityList }), + "∴ &therefore", + ); + }, + ); + }); + }); + + await t.step("decimal", async (t) => { + await t.step("unescapes decimal", () => { + assertEquals(unescape("."), "."); + }); + await t.step("unescapes max decimal codepoint", () => { + assertEquals(unescape("􏿿"), "\u{10ffff}"); + }); + await t.step("unescapes decimal with leading zero", () => { + assertEquals(unescape("."), "."); + }); + await t.step( + "unescapes invalid decimal codepoint to replacement character", + () => { + assertEquals(unescape("�"), "�"); + }, + ); + }); + + await t.step("hex", async (t) => { + await t.step("unescapes lower-case hex", () => { + assertEquals(unescape("."), "."); + }); + await t.step("unescapes upper-case hex", () => { + assertEquals(unescape("."), "."); + }); + await t.step("unescapes hex with leading zero", () => { + assertEquals(unescape("."), "."); + }); + await t.step("unescapes max hex codepoint", () => { + assertEquals(unescape("􏿿"), "\u{10ffff}"); + }); + await t.step( + "unescapes invalid hex codepoint to replacement character", + () => { + assertEquals(unescape("�"), "�"); + }, + ); + }); +}); diff --git a/html/mod.ts b/html/mod.ts new file mode 100644 index 000000000..f56b037e2 --- /dev/null +++ b/html/mod.ts @@ -0,0 +1,10 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Functions for HTML tasks such as escaping or unescaping HTML entities + * + * @module + */ + +export * from "./entities.ts"; diff --git a/html/named_entity_list.json b/html/named_entity_list.json new file mode 100644 index 000000000..c06877c1f --- /dev/null +++ b/html/named_entity_list.json @@ -0,0 +1,2233 @@ +{ + "Æ": "Æ", + "Æ": "Æ", + "&": "&", + "&": "&", + "Á": "Á", + "Á": "Á", + "Ă": "Ă", + "Â": "Â", + "Â": "Â", + "А": "А", + "𝔄": "𝔄", + "À": "À", + "À": "À", + "Α": "Α", + "Ā": "Ā", + "⩓": "⩓", + "Ą": "Ą", + "𝔸": "𝔸", + "⁡": "⁡", + "Å": "Å", + "Å": "Å", + "𝒜": "𝒜", + "≔": "≔", + "Ã": "Ã", + "Ã": "Ã", + "Ä": "Ä", + "Ä": "Ä", + "∖": "∖", + "⫧": "⫧", + "⌆": "⌆", + "Б": "Б", + "∵": "∵", + "ℬ": "ℬ", + "Β": "Β", + "𝔅": "𝔅", + "𝔹": "𝔹", + "˘": "˘", + "ℬ": "ℬ", + "≎": "≎", + "Ч": "Ч", + "©": "©", + "©": "©", + "Ć": "Ć", + "⋒": "⋒", + "ⅅ": "ⅅ", + "ℭ": "ℭ", + "Č": "Č", + "Ç": "Ç", + "Ç": "Ç", + "Ĉ": "Ĉ", + "∰": "∰", + "Ċ": "Ċ", + "¸": "¸", + "·": "·", + "ℭ": "ℭ", + "Χ": "Χ", + "⊙": "⊙", + "⊖": "⊖", + "⊕": "⊕", + "⊗": "⊗", + "∲": "∲", + "”": "”", + "’": "’", + "∷": "∷", + "⩴": "⩴", + "≡": "≡", + "∯": "∯", + "∮": "∮", + "ℂ": "ℂ", + "∐": "∐", + "∳": "∳", + "⨯": "⨯", + "𝒞": "𝒞", + "⋓": "⋓", + "≍": "≍", + "ⅅ": "ⅅ", + "⤑": "⤑", + "Ђ": "Ђ", + "Ѕ": "Ѕ", + "Џ": "Џ", + "‡": "‡", + "↡": "↡", + "⫤": "⫤", + "Ď": "Ď", + "Д": "Д", + "∇": "∇", + "Δ": "Δ", + "𝔇": "𝔇", + "´": "´", + "˙": "˙", + "˝": "˝", + "`": "`", + "˜": "˜", + "⋄": "⋄", + "ⅆ": "ⅆ", + "𝔻": "𝔻", + "¨": "¨", + "⃜": "⃜", + "≐": "≐", + "∯": "∯", + "¨": "¨", + "⇓": "⇓", + "⇐": "⇐", + "⇔": "⇔", + "⫤": "⫤", + "⟸": "⟸", + "⟺": "⟺", + "⟹": "⟹", + "⇒": "⇒", + "⊨": "⊨", + "⇑": "⇑", + "⇕": "⇕", + "∥": "∥", + "↓": "↓", + "⤓": "⤓", + "⇵": "⇵", + "̑": "̑", + "⥐": "⥐", + "⥞": "⥞", + "↽": "↽", + "⥖": "⥖", + "⥟": "⥟", + "⇁": "⇁", + "⥗": "⥗", + "⊤": "⊤", + "↧": "↧", + "⇓": "⇓", + "𝒟": "𝒟", + "Đ": "Đ", + "Ŋ": "Ŋ", + "Ð": "Ð", + "Ð": "Ð", + "É": "É", + "É": "É", + "Ě": "Ě", + "Ê": "Ê", + "Ê": "Ê", + "Э": "Э", + "Ė": "Ė", + "𝔈": "𝔈", + "È": "È", + "È": "È", + "∈": "∈", + "Ē": "Ē", + "◻": "◻", + "▫": "▫", + "Ę": "Ę", + "𝔼": "𝔼", + "Ε": "Ε", + "⩵": "⩵", + "≂": "≂", + "⇌": "⇌", + "ℰ": "ℰ", + "⩳": "⩳", + "Η": "Η", + "Ë": "Ë", + "Ë": "Ë", + "∃": "∃", + "ⅇ": "ⅇ", + "Ф": "Ф", + "𝔉": "𝔉", + "◼": "◼", + "▪": "▪", + "𝔽": "𝔽", + "∀": "∀", + "ℱ": "ℱ", + "ℱ": "ℱ", + "Ѓ": "Ѓ", + ">": ">", + ">": ">", + "Γ": "Γ", + "Ϝ": "Ϝ", + "Ğ": "Ğ", + "Ģ": "Ģ", + "Ĝ": "Ĝ", + "Г": "Г", + "Ġ": "Ġ", + "𝔊": "𝔊", + "⋙": "⋙", + "𝔾": "𝔾", + "≥": "≥", + "⋛": "⋛", + "≧": "≧", + "⪢": "⪢", + "≷": "≷", + "⩾": "⩾", + "≳": "≳", + "𝒢": "𝒢", + "≫": "≫", + "Ъ": "Ъ", + "ˇ": "ˇ", + "^": "^", + "Ĥ": "Ĥ", + "ℌ": "ℌ", + "ℋ": "ℋ", + "ℍ": "ℍ", + "─": "─", + "ℋ": "ℋ", + "Ħ": "Ħ", + "≎": "≎", + "≏": "≏", + "Е": "Е", + "IJ": "IJ", + "Ё": "Ё", + "Í": "Í", + "Í": "Í", + "Î": "Î", + "Î": "Î", + "И": "И", + "İ": "İ", + "ℑ": "ℑ", + "Ì": "Ì", + "Ì": "Ì", + "ℑ": "ℑ", + "Ī": "Ī", + "ⅈ": "ⅈ", + "⇒": "⇒", + "∬": "∬", + "∫": "∫", + "⋂": "⋂", + "⁣": "⁣", + "⁢": "⁢", + "Į": "Į", + "𝕀": "𝕀", + "Ι": "Ι", + "ℐ": "ℐ", + "Ĩ": "Ĩ", + "І": "І", + "Ï": "Ï", + "Ï": "Ï", + "Ĵ": "Ĵ", + "Й": "Й", + "𝔍": "𝔍", + "𝕁": "𝕁", + "𝒥": "𝒥", + "Ј": "Ј", + "Є": "Є", + "Х": "Х", + "Ќ": "Ќ", + "Κ": "Κ", + "Ķ": "Ķ", + "К": "К", + "𝔎": "𝔎", + "𝕂": "𝕂", + "𝒦": "𝒦", + "Љ": "Љ", + "<": "<", + "<": "<", + "Ĺ": "Ĺ", + "Λ": "Λ", + "⟪": "⟪", + "ℒ": "ℒ", + "↞": "↞", + "Ľ": "Ľ", + "Ļ": "Ļ", + "Л": "Л", + "⟨": "⟨", + "←": "←", + "⇤": "⇤", + "⇆": "⇆", + "⌈": "⌈", + "⟦": "⟦", + "⥡": "⥡", + "⇃": "⇃", + "⥙": "⥙", + "⌊": "⌊", + "↔": "↔", + "⥎": "⥎", + "⊣": "⊣", + "↤": "↤", + "⥚": "⥚", + "⊲": "⊲", + "⧏": "⧏", + "⊴": "⊴", + "⥑": "⥑", + "⥠": "⥠", + "↿": "↿", + "⥘": "⥘", + "↼": "↼", + "⥒": "⥒", + "⇐": "⇐", + "⇔": "⇔", + "⋚": "⋚", + "≦": "≦", + "≶": "≶", + "⪡": "⪡", + "⩽": "⩽", + "≲": "≲", + "𝔏": "𝔏", + "⋘": "⋘", + "⇚": "⇚", + "Ŀ": "Ŀ", + "⟵": "⟵", + "⟷": "⟷", + "⟶": "⟶", + "⟸": "⟸", + "⟺": "⟺", + "⟹": "⟹", + "𝕃": "𝕃", + "↙": "↙", + "↘": "↘", + "ℒ": "ℒ", + "↰": "↰", + "Ł": "Ł", + "≪": "≪", + "⤅": "⤅", + "М": "М", + " ": " ", + "ℳ": "ℳ", + "𝔐": "𝔐", + "∓": "∓", + "𝕄": "𝕄", + "ℳ": "ℳ", + "Μ": "Μ", + "Њ": "Њ", + "Ń": "Ń", + "Ň": "Ň", + "Ņ": "Ņ", + "Н": "Н", + "​": "​", + "​": "​", + "​": "​", + "​": "​", + "≫": "≫", + "≪": "≪", + " ": "\n", + "𝔑": "𝔑", + "⁠": "⁠", + " ": " ", + "ℕ": "ℕ", + "⫬": "⫬", + "≢": "≢", + "≭": "≭", + "∦": "∦", + "∉": "∉", + "≠": "≠", + "≂̸": "≂̸", + "∄": "∄", + "≯": "≯", + "≱": "≱", + "≧̸": "≧̸", + "≫̸": "≫̸", + "≹": "≹", + "⩾̸": "⩾̸", + "≵": "≵", + "≎̸": "≎̸", + "≏̸": "≏̸", + "⋪": "⋪", + "⧏̸": "⧏̸", + "⋬": "⋬", + "≮": "≮", + "≰": "≰", + "≸": "≸", + "≪̸": "≪̸", + "⩽̸": "⩽̸", + "≴": "≴", + "⪢̸": "⪢̸", + "⪡̸": "⪡̸", + "⊀": "⊀", + "⪯̸": "⪯̸", + "⋠": "⋠", + "∌": "∌", + "⋫": "⋫", + "⧐̸": "⧐̸", + "⋭": "⋭", + "⊏̸": "⊏̸", + "⋢": "⋢", + "⊐̸": "⊐̸", + "⋣": "⋣", + "⊂⃒": "⊂⃒", + "⊈": "⊈", + "⊁": "⊁", + "⪰̸": "⪰̸", + "⋡": "⋡", + "≿̸": "≿̸", + "⊃⃒": "⊃⃒", + "⊉": "⊉", + "≁": "≁", + "≄": "≄", + "≇": "≇", + "≉": "≉", + "∤": "∤", + "𝒩": "𝒩", + "Ñ": "Ñ", + "Ñ": "Ñ", + "Ν": "Ν", + "Œ": "Œ", + "Ó": "Ó", + "Ó": "Ó", + "Ô": "Ô", + "Ô": "Ô", + "О": "О", + "Ő": "Ő", + "𝔒": "𝔒", + "Ò": "Ò", + "Ò": "Ò", + "Ō": "Ō", + "Ω": "Ω", + "Ο": "Ο", + "𝕆": "𝕆", + "“": "“", + "‘": "‘", + "⩔": "⩔", + "𝒪": "𝒪", + "Ø": "Ø", + "Ø": "Ø", + "Õ": "Õ", + "Õ": "Õ", + "⨷": "⨷", + "Ö": "Ö", + "Ö": "Ö", + "‾": "‾", + "⏞": "⏞", + "⎴": "⎴", + "⏜": "⏜", + "∂": "∂", + "П": "П", + "𝔓": "𝔓", + "Φ": "Φ", + "Π": "Π", + "±": "±", + "ℌ": "ℌ", + "ℙ": "ℙ", + "⪻": "⪻", + "≺": "≺", + "⪯": "⪯", + "≼": "≼", + "≾": "≾", + "″": "″", + "∏": "∏", + "∷": "∷", + "∝": "∝", + "𝒫": "𝒫", + "Ψ": "Ψ", + """: "\"", + """: "\"", + "𝔔": "𝔔", + "ℚ": "ℚ", + "𝒬": "𝒬", + "⤐": "⤐", + "®": "®", + "®": "®", + "Ŕ": "Ŕ", + "⟫": "⟫", + "↠": "↠", + "⤖": "⤖", + "Ř": "Ř", + "Ŗ": "Ŗ", + "Р": "Р", + "ℜ": "ℜ", + "∋": "∋", + "⇋": "⇋", + "⥯": "⥯", + "ℜ": "ℜ", + "Ρ": "Ρ", + "⟩": "⟩", + "→": "→", + "⇥": "⇥", + "⇄": "⇄", + "⌉": "⌉", + "⟧": "⟧", + "⥝": "⥝", + "⇂": "⇂", + "⥕": "⥕", + "⌋": "⌋", + "⊢": "⊢", + "↦": "↦", + "⥛": "⥛", + "⊳": "⊳", + "⧐": "⧐", + "⊵": "⊵", + "⥏": "⥏", + "⥜": "⥜", + "↾": "↾", + "⥔": "⥔", + "⇀": "⇀", + "⥓": "⥓", + "⇒": "⇒", + "ℝ": "ℝ", + "⥰": "⥰", + "⇛": "⇛", + "ℛ": "ℛ", + "↱": "↱", + "⧴": "⧴", + "Щ": "Щ", + "Ш": "Ш", + "Ь": "Ь", + "Ś": "Ś", + "⪼": "⪼", + "Š": "Š", + "Ş": "Ş", + "Ŝ": "Ŝ", + "С": "С", + "𝔖": "𝔖", + "↓": "↓", + "←": "←", + "→": "→", + "↑": "↑", + "Σ": "Σ", + "∘": "∘", + "𝕊": "𝕊", + "√": "√", + "□": "□", + "⊓": "⊓", + "⊏": "⊏", + "⊑": "⊑", + "⊐": "⊐", + "⊒": "⊒", + "⊔": "⊔", + "𝒮": "𝒮", + "⋆": "⋆", + "⋐": "⋐", + "⋐": "⋐", + "⊆": "⊆", + "≻": "≻", + "⪰": "⪰", + "≽": "≽", + "≿": "≿", + "∋": "∋", + "∑": "∑", + "⋑": "⋑", + "⊃": "⊃", + "⊇": "⊇", + "⋑": "⋑", + "Þ": "Þ", + "Þ": "Þ", + "™": "™", + "Ћ": "Ћ", + "Ц": "Ц", + " ": "\t", + "Τ": "Τ", + "Ť": "Ť", + "Ţ": "Ţ", + "Т": "Т", + "𝔗": "𝔗", + "∴": "∴", + "Θ": "Θ", + "  ": "  ", + " ": " ", + "∼": "∼", + "≃": "≃", + "≅": "≅", + "≈": "≈", + "𝕋": "𝕋", + "⃛": "⃛", + "𝒯": "𝒯", + "Ŧ": "Ŧ", + "Ú": "Ú", + "Ú": "Ú", + "↟": "↟", + "⥉": "⥉", + "Ў": "Ў", + "Ŭ": "Ŭ", + "Û": "Û", + "Û": "Û", + "У": "У", + "Ű": "Ű", + "𝔘": "𝔘", + "Ù": "Ù", + "Ù": "Ù", + "Ū": "Ū", + "_": "_", + "⏟": "⏟", + "⎵": "⎵", + "⏝": "⏝", + "⋃": "⋃", + "⊎": "⊎", + "Ų": "Ų", + "𝕌": "𝕌", + "↑": "↑", + "⤒": "⤒", + "⇅": "⇅", + "↕": "↕", + "⥮": "⥮", + "⊥": "⊥", + "↥": "↥", + "⇑": "⇑", + "⇕": "⇕", + "↖": "↖", + "↗": "↗", + "ϒ": "ϒ", + "Υ": "Υ", + "Ů": "Ů", + "𝒰": "𝒰", + "Ũ": "Ũ", + "Ü": "Ü", + "Ü": "Ü", + "⊫": "⊫", + "⫫": "⫫", + "В": "В", + "⊩": "⊩", + "⫦": "⫦", + "⋁": "⋁", + "‖": "‖", + "‖": "‖", + "∣": "∣", + "|": "|", + "❘": "❘", + "≀": "≀", + " ": " ", + "𝔙": "𝔙", + "𝕍": "𝕍", + "𝒱": "𝒱", + "⊪": "⊪", + "Ŵ": "Ŵ", + "⋀": "⋀", + "𝔚": "𝔚", + "𝕎": "𝕎", + "𝒲": "𝒲", + "𝔛": "𝔛", + "Ξ": "Ξ", + "𝕏": "𝕏", + "𝒳": "𝒳", + "Я": "Я", + "Ї": "Ї", + "Ю": "Ю", + "Ý": "Ý", + "Ý": "Ý", + "Ŷ": "Ŷ", + "Ы": "Ы", + "𝔜": "𝔜", + "𝕐": "𝕐", + "𝒴": "𝒴", + "Ÿ": "Ÿ", + "Ж": "Ж", + "Ź": "Ź", + "Ž": "Ž", + "З": "З", + "Ż": "Ż", + "​": "​", + "Ζ": "Ζ", + "ℨ": "ℨ", + "ℤ": "ℤ", + "𝒵": "𝒵", + "á": "á", + "á": "á", + "ă": "ă", + "∾": "∾", + "∾̳": "∾̳", + "∿": "∿", + "â": "â", + "â": "â", + "´": "´", + "´": "´", + "а": "а", + "æ": "æ", + "æ": "æ", + "⁡": "⁡", + "𝔞": "𝔞", + "à": "à", + "à": "à", + "ℵ": "ℵ", + "ℵ": "ℵ", + "α": "α", + "ā": "ā", + "⨿": "⨿", + "&": "&", + "&": "&", + "∧": "∧", + "⩕": "⩕", + "⩜": "⩜", + "⩘": "⩘", + "⩚": "⩚", + "∠": "∠", + "⦤": "⦤", + "∠": "∠", + "∡": "∡", + "⦨": "⦨", + "⦩": "⦩", + "⦪": "⦪", + "⦫": "⦫", + "⦬": "⦬", + "⦭": "⦭", + "⦮": "⦮", + "⦯": "⦯", + "∟": "∟", + "⊾": "⊾", + "⦝": "⦝", + "∢": "∢", + "Å": "Å", + "⍼": "⍼", + "ą": "ą", + "𝕒": "𝕒", + "≈": "≈", + "⩰": "⩰", + "⩯": "⩯", + "≊": "≊", + "≋": "≋", + "'": "'", + "≈": "≈", + "≊": "≊", + "å": "å", + "å": "å", + "𝒶": "𝒶", + "*": "*", + "≈": "≈", + "≍": "≍", + "ã": "ã", + "ã": "ã", + "ä": "ä", + "ä": "ä", + "∳": "∳", + "⨑": "⨑", + "⫭": "⫭", + "≌": "≌", + "϶": "϶", + "‵": "‵", + "∽": "∽", + "⋍": "⋍", + "⊽": "⊽", + "⌅": "⌅", + "⌅": "⌅", + "⎵": "⎵", + "⎶": "⎶", + "≌": "≌", + "б": "б", + "„": "„", + "∵": "∵", + "∵": "∵", + "⦰": "⦰", + "϶": "϶", + "ℬ": "ℬ", + "β": "β", + "ℶ": "ℶ", + "≬": "≬", + "𝔟": "𝔟", + "⋂": "⋂", + "◯": "◯", + "⋃": "⋃", + "⨀": "⨀", + "⨁": "⨁", + "⨂": "⨂", + "⨆": "⨆", + "★": "★", + "▽": "▽", + "△": "△", + "⨄": "⨄", + "⋁": "⋁", + "⋀": "⋀", + "⤍": "⤍", + "⧫": "⧫", + "▪": "▪", + "▴": "▴", + "▾": "▾", + "◂": "◂", + "▸": "▸", + "␣": "␣", + "▒": "▒", + "░": "░", + "▓": "▓", + "█": "█", + "=⃥": "=⃥", + "≡⃥": "≡⃥", + "⌐": "⌐", + "𝕓": "𝕓", + "⊥": "⊥", + "⊥": "⊥", + "⋈": "⋈", + "╗": "╗", + "╔": "╔", + "╖": "╖", + "╓": "╓", + "═": "═", + "╦": "╦", + "╩": "╩", + "╤": "╤", + "╧": "╧", + "╝": "╝", + "╚": "╚", + "╜": "╜", + "╙": "╙", + "║": "║", + "╬": "╬", + "╣": "╣", + "╠": "╠", + "╫": "╫", + "╢": "╢", + "╟": "╟", + "⧉": "⧉", + "╕": "╕", + "╒": "╒", + "┐": "┐", + "┌": "┌", + "─": "─", + "╥": "╥", + "╨": "╨", + "┬": "┬", + "┴": "┴", + "⊟": "⊟", + "⊞": "⊞", + "⊠": "⊠", + "╛": "╛", + "╘": "╘", + "┘": "┘", + "└": "└", + "│": "│", + "╪": "╪", + "╡": "╡", + "╞": "╞", + "┼": "┼", + "┤": "┤", + "├": "├", + "‵": "‵", + "˘": "˘", + "¦": "¦", + "¦": "¦", + "𝒷": "𝒷", + "⁏": "⁏", + "∽": "∽", + "⋍": "⋍", + "\": "\\", + "⧅": "⧅", + "⟈": "⟈", + "•": "•", + "•": "•", + "≎": "≎", + "⪮": "⪮", + "≏": "≏", + "≏": "≏", + "ć": "ć", + "∩": "∩", + "⩄": "⩄", + "⩉": "⩉", + "⩋": "⩋", + "⩇": "⩇", + "⩀": "⩀", + "∩︀": "∩︀", + "⁁": "⁁", + "ˇ": "ˇ", + "⩍": "⩍", + "č": "č", + "ç": "ç", + "ç": "ç", + "ĉ": "ĉ", + "⩌": "⩌", + "⩐": "⩐", + "ċ": "ċ", + "¸": "¸", + "¸": "¸", + "⦲": "⦲", + "¢": "¢", + "¢": "¢", + "·": "·", + "𝔠": "𝔠", + "ч": "ч", + "✓": "✓", + "✓": "✓", + "χ": "χ", + "○": "○", + "⧃": "⧃", + "ˆ": "ˆ", + "≗": "≗", + "↺": "↺", + "↻": "↻", + "®": "®", + "Ⓢ": "Ⓢ", + "⊛": "⊛", + "⊚": "⊚", + "⊝": "⊝", + "≗": "≗", + "⨐": "⨐", + "⫯": "⫯", + "⧂": "⧂", + "♣": "♣", + "♣": "♣", + ":": ":", + "≔": "≔", + "≔": "≔", + ",": ",", + "@": "@", + "∁": "∁", + "∘": "∘", + "∁": "∁", + "ℂ": "ℂ", + "≅": "≅", + "⩭": "⩭", + "∮": "∮", + "𝕔": "𝕔", + "∐": "∐", + "©": "©", + "©": "©", + "℗": "℗", + "↵": "↵", + "✗": "✗", + "𝒸": "𝒸", + "⫏": "⫏", + "⫑": "⫑", + "⫐": "⫐", + "⫒": "⫒", + "⋯": "⋯", + "⤸": "⤸", + "⤵": "⤵", + "⋞": "⋞", + "⋟": "⋟", + "↶": "↶", + "⤽": "⤽", + "∪": "∪", + "⩈": "⩈", + "⩆": "⩆", + "⩊": "⩊", + "⊍": "⊍", + "⩅": "⩅", + "∪︀": "∪︀", + "↷": "↷", + "⤼": "⤼", + "⋞": "⋞", + "⋟": "⋟", + "⋎": "⋎", + "⋏": "⋏", + "¤": "¤", + "¤": "¤", + "↶": "↶", + "↷": "↷", + "⋎": "⋎", + "⋏": "⋏", + "∲": "∲", + "∱": "∱", + "⌭": "⌭", + "⇓": "⇓", + "⥥": "⥥", + "†": "†", + "ℸ": "ℸ", + "↓": "↓", + "‐": "‐", + "⊣": "⊣", + "⤏": "⤏", + "˝": "˝", + "ď": "ď", + "д": "д", + "ⅆ": "ⅆ", + "‡": "‡", + "⇊": "⇊", + "⩷": "⩷", + "°": "°", + "°": "°", + "δ": "δ", + "⦱": "⦱", + "⥿": "⥿", + "𝔡": "𝔡", + "⇃": "⇃", + "⇂": "⇂", + "⋄": "⋄", + "⋄": "⋄", + "♦": "♦", + "♦": "♦", + "¨": "¨", + "ϝ": "ϝ", + "⋲": "⋲", + "÷": "÷", + "÷": "÷", + "÷": "÷", + "⋇": "⋇", + "⋇": "⋇", + "ђ": "ђ", + "⌞": "⌞", + "⌍": "⌍", + "$": "$", + "𝕕": "𝕕", + "˙": "˙", + "≐": "≐", + "≑": "≑", + "∸": "∸", + "∔": "∔", + "⊡": "⊡", + "⌆": "⌆", + "↓": "↓", + "⇊": "⇊", + "⇃": "⇃", + "⇂": "⇂", + "⤐": "⤐", + "⌟": "⌟", + "⌌": "⌌", + "𝒹": "𝒹", + "ѕ": "ѕ", + "⧶": "⧶", + "đ": "đ", + "⋱": "⋱", + "▿": "▿", + "▾": "▾", + "⇵": "⇵", + "⥯": "⥯", + "⦦": "⦦", + "џ": "џ", + "⟿": "⟿", + "⩷": "⩷", + "≑": "≑", + "é": "é", + "é": "é", + "⩮": "⩮", + "ě": "ě", + "≖": "≖", + "ê": "ê", + "ê": "ê", + "≕": "≕", + "э": "э", + "ė": "ė", + "ⅇ": "ⅇ", + "≒": "≒", + "𝔢": "𝔢", + "⪚": "⪚", + "è": "è", + "è": "è", + "⪖": "⪖", + "⪘": "⪘", + "⪙": "⪙", + "⏧": "⏧", + "ℓ": "ℓ", + "⪕": "⪕", + "⪗": "⪗", + "ē": "ē", + "∅": "∅", + "∅": "∅", + "∅": "∅", + " ": " ", + " ": " ", + " ": " ", + "ŋ": "ŋ", + " ": " ", + "ę": "ę", + "𝕖": "𝕖", + "⋕": "⋕", + "⧣": "⧣", + "⩱": "⩱", + "ε": "ε", + "ε": "ε", + "ϵ": "ϵ", + "≖": "≖", + "≕": "≕", + "≂": "≂", + "⪖": "⪖", + "⪕": "⪕", + "=": "=", + "≟": "≟", + "≡": "≡", + "⩸": "⩸", + "⧥": "⧥", + "≓": "≓", + "⥱": "⥱", + "ℯ": "ℯ", + "≐": "≐", + "≂": "≂", + "η": "η", + "ð": "ð", + "ð": "ð", + "ë": "ë", + "ë": "ë", + "€": "€", + "!": "!", + "∃": "∃", + "ℰ": "ℰ", + "ⅇ": "ⅇ", + "≒": "≒", + "ф": "ф", + "♀": "♀", + "ffi": "ffi", + "ff": "ff", + "ffl": "ffl", + "𝔣": "𝔣", + "fi": "fi", + "fj": "fj", + "♭": "♭", + "fl": "fl", + "▱": "▱", + "ƒ": "ƒ", + "𝕗": "𝕗", + "∀": "∀", + "⋔": "⋔", + "⫙": "⫙", + "⨍": "⨍", + "½": "½", + "½": "½", + "⅓": "⅓", + "¼": "¼", + "¼": "¼", + "⅕": "⅕", + "⅙": "⅙", + "⅛": "⅛", + "⅔": "⅔", + "⅖": "⅖", + "¾": "¾", + "¾": "¾", + "⅗": "⅗", + "⅜": "⅜", + "⅘": "⅘", + "⅚": "⅚", + "⅝": "⅝", + "⅞": "⅞", + "⁄": "⁄", + "⌢": "⌢", + "𝒻": "𝒻", + "≧": "≧", + "⪌": "⪌", + "ǵ": "ǵ", + "γ": "γ", + "ϝ": "ϝ", + "⪆": "⪆", + "ğ": "ğ", + "ĝ": "ĝ", + "г": "г", + "ġ": "ġ", + "≥": "≥", + "⋛": "⋛", + "≥": "≥", + "≧": "≧", + "⩾": "⩾", + "⩾": "⩾", + "⪩": "⪩", + "⪀": "⪀", + "⪂": "⪂", + "⪄": "⪄", + "⋛︀": "⋛︀", + "⪔": "⪔", + "𝔤": "𝔤", + "≫": "≫", + "⋙": "⋙", + "ℷ": "ℷ", + "ѓ": "ѓ", + "≷": "≷", + "⪒": "⪒", + "⪥": "⪥", + "⪤": "⪤", + "≩": "≩", + "⪊": "⪊", + "⪊": "⪊", + "⪈": "⪈", + "⪈": "⪈", + "≩": "≩", + "⋧": "⋧", + "𝕘": "𝕘", + "`": "`", + "ℊ": "ℊ", + "≳": "≳", + "⪎": "⪎", + "⪐": "⪐", + ">": ">", + ">": ">", + "⪧": "⪧", + "⩺": "⩺", + "⋗": "⋗", + "⦕": "⦕", + "⩼": "⩼", + "⪆": "⪆", + "⥸": "⥸", + "⋗": "⋗", + "⋛": "⋛", + "⪌": "⪌", + "≷": "≷", + "≳": "≳", + "≩︀": "≩︀", + "≩︀": "≩︀", + "⇔": "⇔", + " ": " ", + "½": "½", + "ℋ": "ℋ", + "ъ": "ъ", + "↔": "↔", + "⥈": "⥈", + "↭": "↭", + "ℏ": "ℏ", + "ĥ": "ĥ", + "♥": "♥", + "♥": "♥", + "…": "…", + "⊹": "⊹", + "𝔥": "𝔥", + "⤥": "⤥", + "⤦": "⤦", + "⇿": "⇿", + "∻": "∻", + "↩": "↩", + "↪": "↪", + "𝕙": "𝕙", + "―": "―", + "𝒽": "𝒽", + "ℏ": "ℏ", + "ħ": "ħ", + "⁃": "⁃", + "‐": "‐", + "í": "í", + "í": "í", + "⁣": "⁣", + "î": "î", + "î": "î", + "и": "и", + "е": "е", + "¡": "¡", + "¡": "¡", + "⇔": "⇔", + "𝔦": "𝔦", + "ì": "ì", + "ì": "ì", + "ⅈ": "ⅈ", + "⨌": "⨌", + "∭": "∭", + "⧜": "⧜", + "℩": "℩", + "ij": "ij", + "ī": "ī", + "ℑ": "ℑ", + "ℐ": "ℐ", + "ℑ": "ℑ", + "ı": "ı", + "⊷": "⊷", + "Ƶ": "Ƶ", + "∈": "∈", + "℅": "℅", + "∞": "∞", + "⧝": "⧝", + "ı": "ı", + "∫": "∫", + "⊺": "⊺", + "ℤ": "ℤ", + "⊺": "⊺", + "⨗": "⨗", + "⨼": "⨼", + "ё": "ё", + "į": "į", + "𝕚": "𝕚", + "ι": "ι", + "⨼": "⨼", + "¿": "¿", + "¿": "¿", + "𝒾": "𝒾", + "∈": "∈", + "⋹": "⋹", + "⋵": "⋵", + "⋴": "⋴", + "⋳": "⋳", + "∈": "∈", + "⁢": "⁢", + "ĩ": "ĩ", + "і": "і", + "ï": "ï", + "ï": "ï", + "ĵ": "ĵ", + "й": "й", + "𝔧": "𝔧", + "ȷ": "ȷ", + "𝕛": "𝕛", + "𝒿": "𝒿", + "ј": "ј", + "є": "є", + "κ": "κ", + "ϰ": "ϰ", + "ķ": "ķ", + "к": "к", + "𝔨": "𝔨", + "ĸ": "ĸ", + "х": "х", + "ќ": "ќ", + "𝕜": "𝕜", + "𝓀": "𝓀", + "⇚": "⇚", + "⇐": "⇐", + "⤛": "⤛", + "⤎": "⤎", + "≦": "≦", + "⪋": "⪋", + "⥢": "⥢", + "ĺ": "ĺ", + "⦴": "⦴", + "ℒ": "ℒ", + "λ": "λ", + "⟨": "⟨", + "⦑": "⦑", + "⟨": "⟨", + "⪅": "⪅", + "«": "«", + "«": "«", + "←": "←", + "⇤": "⇤", + "⤟": "⤟", + "⤝": "⤝", + "↩": "↩", + "↫": "↫", + "⤹": "⤹", + "⥳": "⥳", + "↢": "↢", + "⪫": "⪫", + "⤙": "⤙", + "⪭": "⪭", + "⪭︀": "⪭︀", + "⤌": "⤌", + "❲": "❲", + "{": "{", + "[": "[", + "⦋": "⦋", + "⦏": "⦏", + "⦍": "⦍", + "ľ": "ľ", + "ļ": "ļ", + "⌈": "⌈", + "{": "{", + "л": "л", + "⤶": "⤶", + "“": "“", + "„": "„", + "⥧": "⥧", + "⥋": "⥋", + "↲": "↲", + "≤": "≤", + "←": "←", + "↢": "↢", + "↽": "↽", + "↼": "↼", + "⇇": "⇇", + "↔": "↔", + "⇆": "⇆", + "⇋": "⇋", + "↭": "↭", + "⋋": "⋋", + "⋚": "⋚", + "≤": "≤", + "≦": "≦", + "⩽": "⩽", + "⩽": "⩽", + "⪨": "⪨", + "⩿": "⩿", + "⪁": "⪁", + "⪃": "⪃", + "⋚︀": "⋚︀", + "⪓": "⪓", + "⪅": "⪅", + "⋖": "⋖", + "⋚": "⋚", + "⪋": "⪋", + "≶": "≶", + "≲": "≲", + "⥼": "⥼", + "⌊": "⌊", + "𝔩": "𝔩", + "≶": "≶", + "⪑": "⪑", + "↽": "↽", + "↼": "↼", + "⥪": "⥪", + "▄": "▄", + "љ": "љ", + "≪": "≪", + "⇇": "⇇", + "⌞": "⌞", + "⥫": "⥫", + "◺": "◺", + "ŀ": "ŀ", + "⎰": "⎰", + "⎰": "⎰", + "≨": "≨", + "⪉": "⪉", + "⪉": "⪉", + "⪇": "⪇", + "⪇": "⪇", + "≨": "≨", + "⋦": "⋦", + "⟬": "⟬", + "⇽": "⇽", + "⟦": "⟦", + "⟵": "⟵", + "⟷": "⟷", + "⟼": "⟼", + "⟶": "⟶", + "↫": "↫", + "↬": "↬", + "⦅": "⦅", + "𝕝": "𝕝", + "⨭": "⨭", + "⨴": "⨴", + "∗": "∗", + "_": "_", + "◊": "◊", + "◊": "◊", + "⧫": "⧫", + "(": "(", + "⦓": "⦓", + "⇆": "⇆", + "⌟": "⌟", + "⇋": "⇋", + "⥭": "⥭", + "‎": "‎", + "⊿": "⊿", + "‹": "‹", + "𝓁": "𝓁", + "↰": "↰", + "≲": "≲", + "⪍": "⪍", + "⪏": "⪏", + "[": "[", + "‘": "‘", + "‚": "‚", + "ł": "ł", + "<": "<", + "<": "<", + "⪦": "⪦", + "⩹": "⩹", + "⋖": "⋖", + "⋋": "⋋", + "⋉": "⋉", + "⥶": "⥶", + "⩻": "⩻", + "⦖": "⦖", + "◃": "◃", + "⊴": "⊴", + "◂": "◂", + "⥊": "⥊", + "⥦": "⥦", + "≨︀": "≨︀", + "≨︀": "≨︀", + "∺": "∺", + "¯": "¯", + "¯": "¯", + "♂": "♂", + "✠": "✠", + "✠": "✠", + "↦": "↦", + "↦": "↦", + "↧": "↧", + "↤": "↤", + "↥": "↥", + "▮": "▮", + "⨩": "⨩", + "м": "м", + "—": "—", + "∡": "∡", + "𝔪": "𝔪", + "℧": "℧", + "µ": "µ", + "µ": "µ", + "∣": "∣", + "*": "*", + "⫰": "⫰", + "·": "·", + "·": "·", + "−": "−", + "⊟": "⊟", + "∸": "∸", + "⨪": "⨪", + "⫛": "⫛", + "…": "…", + "∓": "∓", + "⊧": "⊧", + "𝕞": "𝕞", + "∓": "∓", + "𝓂": "𝓂", + "∾": "∾", + "μ": "μ", + "⊸": "⊸", + "⊸": "⊸", + "⋙̸": "⋙̸", + "≫⃒": "≫⃒", + "≫̸": "≫̸", + "⇍": "⇍", + "⇎": "⇎", + "⋘̸": "⋘̸", + "≪⃒": "≪⃒", + "≪̸": "≪̸", + "⇏": "⇏", + "⊯": "⊯", + "⊮": "⊮", + "∇": "∇", + "ń": "ń", + "∠⃒": "∠⃒", + "≉": "≉", + "⩰̸": "⩰̸", + "≋̸": "≋̸", + "ʼn": "ʼn", + "≉": "≉", + "♮": "♮", + "♮": "♮", + "ℕ": "ℕ", + " ": " ", + " ": " ", + "≎̸": "≎̸", + "≏̸": "≏̸", + "⩃": "⩃", + "ň": "ň", + "ņ": "ņ", + "≇": "≇", + "⩭̸": "⩭̸", + "⩂": "⩂", + "н": "н", + "–": "–", + "≠": "≠", + "⇗": "⇗", + "⤤": "⤤", + "↗": "↗", + "↗": "↗", + "≐̸": "≐̸", + "≢": "≢", + "⤨": "⤨", + "≂̸": "≂̸", + "∄": "∄", + "∄": "∄", + "𝔫": "𝔫", + "≧̸": "≧̸", + "≱": "≱", + "≱": "≱", + "≧̸": "≧̸", + "⩾̸": "⩾̸", + "⩾̸": "⩾̸", + "≵": "≵", + "≯": "≯", + "≯": "≯", + "⇎": "⇎", + "↮": "↮", + "⫲": "⫲", + "∋": "∋", + "⋼": "⋼", + "⋺": "⋺", + "∋": "∋", + "њ": "њ", + "⇍": "⇍", + "≦̸": "≦̸", + "↚": "↚", + "‥": "‥", + "≰": "≰", + "↚": "↚", + "↮": "↮", + "≰": "≰", + "≦̸": "≦̸", + "⩽̸": "⩽̸", + "⩽̸": "⩽̸", + "≮": "≮", + "≴": "≴", + "≮": "≮", + "⋪": "⋪", + "⋬": "⋬", + "∤": "∤", + "𝕟": "𝕟", + "¬": "¬", + "¬": "¬", + "∉": "∉", + "⋹̸": "⋹̸", + "⋵̸": "⋵̸", + "∉": "∉", + "⋷": "⋷", + "⋶": "⋶", + "∌": "∌", + "∌": "∌", + "⋾": "⋾", + "⋽": "⋽", + "∦": "∦", + "∦": "∦", + "⫽⃥": "⫽⃥", + "∂̸": "∂̸", + "⨔": "⨔", + "⊀": "⊀", + "⋠": "⋠", + "⪯̸": "⪯̸", + "⊀": "⊀", + "⪯̸": "⪯̸", + "⇏": "⇏", + "↛": "↛", + "⤳̸": "⤳̸", + "↝̸": "↝̸", + "↛": "↛", + "⋫": "⋫", + "⋭": "⋭", + "⊁": "⊁", + "⋡": "⋡", + "⪰̸": "⪰̸", + "𝓃": "𝓃", + "∤": "∤", + "∦": "∦", + "≁": "≁", + "≄": "≄", + "≄": "≄", + "∤": "∤", + "∦": "∦", + "⋢": "⋢", + "⋣": "⋣", + "⊄": "⊄", + "⫅̸": "⫅̸", + "⊈": "⊈", + "⊂⃒": "⊂⃒", + "⊈": "⊈", + "⫅̸": "⫅̸", + "⊁": "⊁", + "⪰̸": "⪰̸", + "⊅": "⊅", + "⫆̸": "⫆̸", + "⊉": "⊉", + "⊃⃒": "⊃⃒", + "⊉": "⊉", + "⫆̸": "⫆̸", + "≹": "≹", + "ñ": "ñ", + "ñ": "ñ", + "≸": "≸", + "⋪": "⋪", + "⋬": "⋬", + "⋫": "⋫", + "⋭": "⋭", + "ν": "ν", + "#": "#", + "№": "№", + " ": " ", + "⊭": "⊭", + "⤄": "⤄", + "≍⃒": "≍⃒", + "⊬": "⊬", + "≥⃒": "≥⃒", + ">⃒": ">⃒", + "⧞": "⧞", + "⤂": "⤂", + "≤⃒": "≤⃒", + "<⃒": "<⃒", + "⊴⃒": "⊴⃒", + "⤃": "⤃", + "⊵⃒": "⊵⃒", + "∼⃒": "∼⃒", + "⇖": "⇖", + "⤣": "⤣", + "↖": "↖", + "↖": "↖", + "⤧": "⤧", + "Ⓢ": "Ⓢ", + "ó": "ó", + "ó": "ó", + "⊛": "⊛", + "⊚": "⊚", + "ô": "ô", + "ô": "ô", + "о": "о", + "⊝": "⊝", + "ő": "ő", + "⨸": "⨸", + "⊙": "⊙", + "⦼": "⦼", + "œ": "œ", + "⦿": "⦿", + "𝔬": "𝔬", + "˛": "˛", + "ò": "ò", + "ò": "ò", + "⧁": "⧁", + "⦵": "⦵", + "Ω": "Ω", + "∮": "∮", + "↺": "↺", + "⦾": "⦾", + "⦻": "⦻", + "‾": "‾", + "⧀": "⧀", + "ō": "ō", + "ω": "ω", + "ο": "ο", + "⦶": "⦶", + "⊖": "⊖", + "𝕠": "𝕠", + "⦷": "⦷", + "⦹": "⦹", + "⊕": "⊕", + "∨": "∨", + "↻": "↻", + "⩝": "⩝", + "ℴ": "ℴ", + "ℴ": "ℴ", + "ª": "ª", + "ª": "ª", + "º": "º", + "º": "º", + "⊶": "⊶", + "⩖": "⩖", + "⩗": "⩗", + "⩛": "⩛", + "ℴ": "ℴ", + "ø": "ø", + "ø": "ø", + "⊘": "⊘", + "õ": "õ", + "õ": "õ", + "⊗": "⊗", + "⨶": "⨶", + "ö": "ö", + "ö": "ö", + "⌽": "⌽", + "∥": "∥", + "¶": "¶", + "¶": "¶", + "∥": "∥", + "⫳": "⫳", + "⫽": "⫽", + "∂": "∂", + "п": "п", + "%": "%", + ".": ".", + "‰": "‰", + "⊥": "⊥", + "‱": "‱", + "𝔭": "𝔭", + "φ": "φ", + "ϕ": "ϕ", + "ℳ": "ℳ", + "☎": "☎", + "π": "π", + "⋔": "⋔", + "ϖ": "ϖ", + "ℏ": "ℏ", + "ℎ": "ℎ", + "ℏ": "ℏ", + "+": "+", + "⨣": "⨣", + "⊞": "⊞", + "⨢": "⨢", + "∔": "∔", + "⨥": "⨥", + "⩲": "⩲", + "±": "±", + "±": "±", + "⨦": "⨦", + "⨧": "⨧", + "±": "±", + "⨕": "⨕", + "𝕡": "𝕡", + "£": "£", + "£": "£", + "≺": "≺", + "⪳": "⪳", + "⪷": "⪷", + "≼": "≼", + "⪯": "⪯", + "≺": "≺", + "⪷": "⪷", + "≼": "≼", + "⪯": "⪯", + "⪹": "⪹", + "⪵": "⪵", + "⋨": "⋨", + "≾": "≾", + "′": "′", + "ℙ": "ℙ", + "⪵": "⪵", + "⪹": "⪹", + "⋨": "⋨", + "∏": "∏", + "⌮": "⌮", + "⌒": "⌒", + "⌓": "⌓", + "∝": "∝", + "∝": "∝", + "≾": "≾", + "⊰": "⊰", + "𝓅": "𝓅", + "ψ": "ψ", + " ": " ", + "𝔮": "𝔮", + "⨌": "⨌", + "𝕢": "𝕢", + "⁗": "⁗", + "𝓆": "𝓆", + "ℍ": "ℍ", + "⨖": "⨖", + "?": "?", + "≟": "≟", + """: "\"", + """: "\"", + "⇛": "⇛", + "⇒": "⇒", + "⤜": "⤜", + "⤏": "⤏", + "⥤": "⥤", + "∽̱": "∽̱", + "ŕ": "ŕ", + "√": "√", + "⦳": "⦳", + "⟩": "⟩", + "⦒": "⦒", + "⦥": "⦥", + "⟩": "⟩", + "»": "»", + "»": "»", + "→": "→", + "⥵": "⥵", + "⇥": "⇥", + "⤠": "⤠", + "⤳": "⤳", + "⤞": "⤞", + "↪": "↪", + "↬": "↬", + "⥅": "⥅", + "⥴": "⥴", + "↣": "↣", + "↝": "↝", + "⤚": "⤚", + "∶": "∶", + "ℚ": "ℚ", + "⤍": "⤍", + "❳": "❳", + "}": "}", + "]": "]", + "⦌": "⦌", + "⦎": "⦎", + "⦐": "⦐", + "ř": "ř", + "ŗ": "ŗ", + "⌉": "⌉", + "}": "}", + "р": "р", + "⤷": "⤷", + "⥩": "⥩", + "”": "”", + "”": "”", + "↳": "↳", + "ℜ": "ℜ", + "ℛ": "ℛ", + "ℜ": "ℜ", + "ℝ": "ℝ", + "▭": "▭", + "®": "®", + "®": "®", + "⥽": "⥽", + "⌋": "⌋", + "𝔯": "𝔯", + "⇁": "⇁", + "⇀": "⇀", + "⥬": "⥬", + "ρ": "ρ", + "ϱ": "ϱ", + "→": "→", + "↣": "↣", + "⇁": "⇁", + "⇀": "⇀", + "⇄": "⇄", + "⇌": "⇌", + "⇉": "⇉", + "↝": "↝", + "⋌": "⋌", + "˚": "˚", + "≓": "≓", + "⇄": "⇄", + "⇌": "⇌", + "‏": "‏", + "⎱": "⎱", + "⎱": "⎱", + "⫮": "⫮", + "⟭": "⟭", + "⇾": "⇾", + "⟧": "⟧", + "⦆": "⦆", + "𝕣": "𝕣", + "⨮": "⨮", + "⨵": "⨵", + ")": ")", + "⦔": "⦔", + "⨒": "⨒", + "⇉": "⇉", + "›": "›", + "𝓇": "𝓇", + "↱": "↱", + "]": "]", + "’": "’", + "’": "’", + "⋌": "⋌", + "⋊": "⋊", + "▹": "▹", + "⊵": "⊵", + "▸": "▸", + "⧎": "⧎", + "⥨": "⥨", + "℞": "℞", + "ś": "ś", + "‚": "‚", + "≻": "≻", + "⪴": "⪴", + "⪸": "⪸", + "š": "š", + "≽": "≽", + "⪰": "⪰", + "ş": "ş", + "ŝ": "ŝ", + "⪶": "⪶", + "⪺": "⪺", + "⋩": "⋩", + "⨓": "⨓", + "≿": "≿", + "с": "с", + "⋅": "⋅", + "⊡": "⊡", + "⩦": "⩦", + "⇘": "⇘", + "⤥": "⤥", + "↘": "↘", + "↘": "↘", + "§": "§", + "§": "§", + ";": ";", + "⤩": "⤩", + "∖": "∖", + "∖": "∖", + "✶": "✶", + "𝔰": "𝔰", + "⌢": "⌢", + "♯": "♯", + "щ": "щ", + "ш": "ш", + "∣": "∣", + "∥": "∥", + "­": "­", + "­": "­", + "σ": "σ", + "ς": "ς", + "ς": "ς", + "∼": "∼", + "⩪": "⩪", + "≃": "≃", + "≃": "≃", + "⪞": "⪞", + "⪠": "⪠", + "⪝": "⪝", + "⪟": "⪟", + "≆": "≆", + "⨤": "⨤", + "⥲": "⥲", + "←": "←", + "∖": "∖", + "⨳": "⨳", + "⧤": "⧤", + "∣": "∣", + "⌣": "⌣", + "⪪": "⪪", + "⪬": "⪬", + "⪬︀": "⪬︀", + "ь": "ь", + "/": "/", + "⧄": "⧄", + "⌿": "⌿", + "𝕤": "𝕤", + "♠": "♠", + "♠": "♠", + "∥": "∥", + "⊓": "⊓", + "⊓︀": "⊓︀", + "⊔": "⊔", + "⊔︀": "⊔︀", + "⊏": "⊏", + "⊑": "⊑", + "⊏": "⊏", + "⊑": "⊑", + "⊐": "⊐", + "⊒": "⊒", + "⊐": "⊐", + "⊒": "⊒", + "□": "□", + "□": "□", + "▪": "▪", + "▪": "▪", + "→": "→", + "𝓈": "𝓈", + "∖": "∖", + "⌣": "⌣", + "⋆": "⋆", + "☆": "☆", + "★": "★", + "ϵ": "ϵ", + "ϕ": "ϕ", + "¯": "¯", + "⊂": "⊂", + "⫅": "⫅", + "⪽": "⪽", + "⊆": "⊆", + "⫃": "⫃", + "⫁": "⫁", + "⫋": "⫋", + "⊊": "⊊", + "⪿": "⪿", + "⥹": "⥹", + "⊂": "⊂", + "⊆": "⊆", + "⫅": "⫅", + "⊊": "⊊", + "⫋": "⫋", + "⫇": "⫇", + "⫕": "⫕", + "⫓": "⫓", + "≻": "≻", + "⪸": "⪸", + "≽": "≽", + "⪰": "⪰", + "⪺": "⪺", + "⪶": "⪶", + "⋩": "⋩", + "≿": "≿", + "∑": "∑", + "♪": "♪", + "¹": "¹", + "¹": "¹", + "²": "²", + "²": "²", + "³": "³", + "³": "³", + "⊃": "⊃", + "⫆": "⫆", + "⪾": "⪾", + "⫘": "⫘", + "⊇": "⊇", + "⫄": "⫄", + "⟉": "⟉", + "⫗": "⫗", + "⥻": "⥻", + "⫂": "⫂", + "⫌": "⫌", + "⊋": "⊋", + "⫀": "⫀", + "⊃": "⊃", + "⊇": "⊇", + "⫆": "⫆", + "⊋": "⊋", + "⫌": "⫌", + "⫈": "⫈", + "⫔": "⫔", + "⫖": "⫖", + "⇙": "⇙", + "⤦": "⤦", + "↙": "↙", + "↙": "↙", + "⤪": "⤪", + "ß": "ß", + "ß": "ß", + "⌖": "⌖", + "τ": "τ", + "⎴": "⎴", + "ť": "ť", + "ţ": "ţ", + "т": "т", + "⃛": "⃛", + "⌕": "⌕", + "𝔱": "𝔱", + "∴": "∴", + "∴": "∴", + "θ": "θ", + "ϑ": "ϑ", + "ϑ": "ϑ", + "≈": "≈", + "∼": "∼", + " ": " ", + "≈": "≈", + "∼": "∼", + "þ": "þ", + "þ": "þ", + "˜": "˜", + "×": "×", + "×": "×", + "⊠": "⊠", + "⨱": "⨱", + "⨰": "⨰", + "∭": "∭", + "⤨": "⤨", + "⊤": "⊤", + "⌶": "⌶", + "⫱": "⫱", + "𝕥": "𝕥", + "⫚": "⫚", + "⤩": "⤩", + "‴": "‴", + "™": "™", + "▵": "▵", + "▿": "▿", + "◃": "◃", + "⊴": "⊴", + "≜": "≜", + "▹": "▹", + "⊵": "⊵", + "◬": "◬", + "≜": "≜", + "⨺": "⨺", + "⨹": "⨹", + "⧍": "⧍", + "⨻": "⨻", + "⏢": "⏢", + "𝓉": "𝓉", + "ц": "ц", + "ћ": "ћ", + "ŧ": "ŧ", + "≬": "≬", + "↞": "↞", + "↠": "↠", + "⇑": "⇑", + "⥣": "⥣", + "ú": "ú", + "ú": "ú", + "↑": "↑", + "ў": "ў", + "ŭ": "ŭ", + "û": "û", + "û": "û", + "у": "у", + "⇅": "⇅", + "ű": "ű", + "⥮": "⥮", + "⥾": "⥾", + "𝔲": "𝔲", + "ù": "ù", + "ù": "ù", + "↿": "↿", + "↾": "↾", + "▀": "▀", + "⌜": "⌜", + "⌜": "⌜", + "⌏": "⌏", + "◸": "◸", + "ū": "ū", + "¨": "¨", + "¨": "¨", + "ų": "ų", + "𝕦": "𝕦", + "↑": "↑", + "↕": "↕", + "↿": "↿", + "↾": "↾", + "⊎": "⊎", + "υ": "υ", + "ϒ": "ϒ", + "υ": "υ", + "⇈": "⇈", + "⌝": "⌝", + "⌝": "⌝", + "⌎": "⌎", + "ů": "ů", + "◹": "◹", + "𝓊": "𝓊", + "⋰": "⋰", + "ũ": "ũ", + "▵": "▵", + "▴": "▴", + "⇈": "⇈", + "ü": "ü", + "ü": "ü", + "⦧": "⦧", + "⇕": "⇕", + "⫨": "⫨", + "⫩": "⫩", + "⊨": "⊨", + "⦜": "⦜", + "ϵ": "ϵ", + "ϰ": "ϰ", + "∅": "∅", + "ϕ": "ϕ", + "ϖ": "ϖ", + "∝": "∝", + "↕": "↕", + "ϱ": "ϱ", + "ς": "ς", + "⊊︀": "⊊︀", + "⫋︀": "⫋︀", + "⊋︀": "⊋︀", + "⫌︀": "⫌︀", + "ϑ": "ϑ", + "⊲": "⊲", + "⊳": "⊳", + "в": "в", + "⊢": "⊢", + "∨": "∨", + "⊻": "⊻", + "≚": "≚", + "⋮": "⋮", + "|": "|", + "|": "|", + "𝔳": "𝔳", + "⊲": "⊲", + "⊂⃒": "⊂⃒", + "⊃⃒": "⊃⃒", + "𝕧": "𝕧", + "∝": "∝", + "⊳": "⊳", + "𝓋": "𝓋", + "⫋︀": "⫋︀", + "⊊︀": "⊊︀", + "⫌︀": "⫌︀", + "⊋︀": "⊋︀", + "⦚": "⦚", + "ŵ": "ŵ", + "⩟": "⩟", + "∧": "∧", + "≙": "≙", + "℘": "℘", + "𝔴": "𝔴", + "𝕨": "𝕨", + "℘": "℘", + "≀": "≀", + "≀": "≀", + "𝓌": "𝓌", + "⋂": "⋂", + "◯": "◯", + "⋃": "⋃", + "▽": "▽", + "𝔵": "𝔵", + "⟺": "⟺", + "⟷": "⟷", + "ξ": "ξ", + "⟸": "⟸", + "⟵": "⟵", + "⟼": "⟼", + "⋻": "⋻", + "⨀": "⨀", + "𝕩": "𝕩", + "⨁": "⨁", + "⨂": "⨂", + "⟹": "⟹", + "⟶": "⟶", + "𝓍": "𝓍", + "⨆": "⨆", + "⨄": "⨄", + "△": "△", + "⋁": "⋁", + "⋀": "⋀", + "ý": "ý", + "ý": "ý", + "я": "я", + "ŷ": "ŷ", + "ы": "ы", + "¥": "¥", + "¥": "¥", + "𝔶": "𝔶", + "ї": "ї", + "𝕪": "𝕪", + "𝓎": "𝓎", + "ю": "ю", + "ÿ": "ÿ", + "ÿ": "ÿ", + "ź": "ź", + "ž": "ž", + "з": "з", + "ż": "ż", + "ℨ": "ℨ", + "ζ": "ζ", + "𝔷": "𝔷", + "ж": "ж", + "⇝": "⇝", + "𝕫": "𝕫", + "𝓏": "𝓏", + "‍": "‍", + "‌": "‌" +}