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