ExCoder/lib/excoder.ex

2150 lines
65 KiB
Elixir
Raw Normal View History

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" },
{ "!", "!" },
{ """, "\"" },
{ """, "\"" },
{ "#", "#" },
{ "$", "$" },
{ "%", "%" },
{ "&", "&" },
{ "&", "&" },
{ "'", "'" },
{ "(", "(" },
{ ")", ")" },
{ "*", "*" },
{ "*", "*" },
{ "+", "+" },
{ ",", "," },
{ ".", "." },
{ "/", "/" },
{ ":", ":" },
{ ";", ";" },
{ "&lt;", "<" },
{ "&LT;", "<" },
{ "&equals;", "=" },
{ "&gt;", ">" },
{ "&GT;", ">" },
{ "&quest;", "?" },
{ "&commat;", "@" },
{ "&lsqb;", "[" },
{ "&lbrack;", "[" },
{ "&bsol;", "\\" },
{ "&rsqb;", "]" },
{ "&rbrack;", "]" },
{ "&Hat;", "^" },
{ "&lowbar;", "_" },
{ "&grave;", "`" },
{ "&DiacriticalGrave;", "`" },
{ "&lcub;", "{" },
{ "&lbrace;", "{" },
{ "&verbar;", "|" },
{ "&vert;", "|" },
{ "&VerticalLine;", "|" },
{ "&rcub;", "}" },
{ "&rbrace;", "}" },
{ "&nbsp;", " " },
{ "&NonBreakingSpace;", " " },
{ "&iexcl;", "¡" },
{ "&cent;", "¢" },
{ "&pound;", "£" },
{ "&curren;", "¤" },
{ "&yen;", "¥" },
{ "&brvbar;", "¦" },
{ "&sect;", "§" },
{ "&Dot;", "¨" },
{ "&die;", "¨" },
{ "&DoubleDot;", "¨" },
{ "&uml;", "¨" },
{ "&copy;", "©" },
{ "&COPY;", "©" },
{ "&ordf;", "ª" },
{ "&laquo;", "«" },
{ "&not;", "¬" },
{ "&shy;", "­" },
{ "&reg;", "®" },
{ "&circledR;", "®" },
{ "&REG;", "®" },
{ "&macr;", "¯" },
{ "&OverBar;", "¯" },
{ "&strns;", "¯" },
{ "&deg;", "°" },
{ "&plusmn;", "±" },
{ "&pm;", "±" },
{ "&PlusMinus;", "±" },
{ "&sup2;", "²" },
{ "&sup3;", "³" },
{ "&acute;", "´" },
{ "&DiacriticalAcute;", "´" },
{ "&micro;", "µ" },
{ "&para;", "" },
{ "&middot;", "·" },
{ "&centerdot;", "·" },
{ "&CenterDot;", "·" },
{ "&cedil;", "¸" },
{ "&Cedilla;", "¸" },
{ "&sup1;", "¹" },
{ "&ordm;", "º" },
{ "&raquo;", "»" },
{ "&frac14;", "¼" },
{ "&frac12;", "½" },
{ "&half;", "½" },
{ "&frac34;", "¾" },
{ "&iquest;", "¿" },
{ "&Agrave;", "À" },
{ "&Aacute;", "Á" },
{ "&Acirc;", "Â" },
{ "&Atilde;", "Ã" },
{ "&Auml;", "Ä" },
{ "&Aring;", "Å" },
{ "&AElig;", "Æ" },
{ "&Ccedil;", "Ç" },
{ "&Egrave;", "È" },
{ "&Eacute;", "É" },
{ "&Ecirc;", "Ê" },
{ "&Euml;", "Ë" },
{ "&Igrave;", "Ì" },
{ "&Iacute;", "Í" },
{ "&Icirc;", "Î" },
{ "&Iuml;", "Ï" },
{ "&ETH;", "Ð" },
{ "&Ntilde;", "Ñ" },
{ "&Ograve;", "Ò" },
{ "&Oacute;", "Ó" },
{ "&Ocirc;", "Ô" },
{ "&Otilde;", "Õ" },
{ "&Ouml;", "Ö" },
{ "&times;", "×" },
{ "&Oslash;", "Ø" },
{ "&Ugrave;", "Ù" },
{ "&Uacute;", "Ú" },
{ "&Ucirc;", "Û" },
{ "&Uuml;", "Ü" },
{ "&Yacute;", "Ý" },
{ "&THORN;", "Þ" },
{ "&szlig;", "ß" },
{ "&agrave;", "à" },
{ "&aacute;", "á" },
{ "&acirc;", "â" },
{ "&atilde;", "ã" },
{ "&auml;", "ä" },
{ "&aring;", "å" },
{ "&aelig;", "æ" },
{ "&ccedil;", "ç" },
{ "&egrave;", "è" },
{ "&eacute;", "é" },
{ "&ecirc;", "ê" },
{ "&euml;", "ë" },
{ "&igrave;", "ì" },
{ "&iacute;", "í" },
{ "&icirc;", "î" },
{ "&iuml;", "ï" },
{ "&eth;", "ð" },
{ "&ntilde;", "ñ" },
{ "&ograve;", "ò" },
{ "&oacute;", "ó" },
{ "&ocirc;", "ô" },
{ "&otilde;", "õ" },
{ "&ouml;", "ö" },
{ "&divide;", "÷" },
{ "&div;", "÷" },
{ "&oslash;", "ø" },
{ "&ugrave;", "ù" },
{ "&uacute;", "ú" },
{ "&ucirc;", "û" },
{ "&uuml;", "ü" },
{ "&yacute;", "ý" },
{ "&thorn;", "þ" },
{ "&yuml;", "ÿ" },
{ "&Amacr;", "Ā" },
{ "&amacr;", "ā" },
{ "&Abreve;", "Ă" },
{ "&abreve;", "ă" },
{ "&Aogon;", "Ą" },
{ "&aogon;", "ą" },
{ "&Cacute;", "Ć" },
{ "&cacute;", "ć" },
{ "&Ccirc;", "Ĉ" },
{ "&ccirc;", "ĉ" },
{ "&Cdot;", "Ċ" },
{ "&cdot;", "ċ" },
{ "&Ccaron;", "Č" },
{ "&ccaron;", "č" },
{ "&Dcaron;", "Ď" },
{ "&dcaron;", "ď" },
{ "&Dstrok;", "Đ" },
{ "&dstrok;", "đ" },
{ "&Emacr;", "Ē" },
{ "&emacr;", "ē" },
{ "&Edot;", "Ė" },
{ "&edot;", "ė" },
{ "&Eogon;", "Ę" },
{ "&eogon;", "ę" },
{ "&Ecaron;", "Ě" },
{ "&ecaron;", "ě" },
{ "&Gcirc;", "Ĝ" },
{ "&gcirc;", "ĝ" },
{ "&Gbreve;", "Ğ" },
{ "&gbreve;", "ğ" },
{ "&Gdot;", "Ġ" },
{ "&gdot;", "ġ" },
{ "&Gcedil;", "Ģ" },
{ "&Hcirc;", "Ĥ" },
{ "&hcirc;", "ĥ" },
{ "&Hstrok;", "Ħ" },
{ "&hstrok;", "ħ" },
{ "&Itilde;", "Ĩ" },
{ "&itilde;", "ĩ" },
{ "&Imacr;", "Ī" },
{ "&imacr;", "ī" },
{ "&Iogon;", "Į" },
{ "&iogon;", "į" },
{ "&Idot;", "İ" },
{ "&imath;", "ı" },
{ "&inodot;", "ı" },
{ "&IJlig;", "IJ" },
{ "&ijlig;", "ij" },
{ "&Jcirc;", "Ĵ" },
{ "&jcirc;", "ĵ" },
{ "&Kcedil;", "Ķ" },
{ "&kcedil;", "ķ" },
{ "&kgreen;", "ĸ" },
{ "&Lacute;", "Ĺ" },
{ "&lacute;", "ĺ" },
{ "&Lcedil;", "Ļ" },
{ "&lcedil;", "ļ" },
{ "&Lcaron;", "Ľ" },
{ "&lcaron;", "ľ" },
{ "&Lmidot;", "Ŀ" },
{ "&lmidot;", "ŀ" },
{ "&Lstrok;", "Ł" },
{ "&lstrok;", "ł" },
{ "&Nacute;", "Ń" },
{ "&nacute;", "ń" },
{ "&Ncedil;", "Ņ" },
{ "&ncedil;", "ņ" },
{ "&Ncaron;", "Ň" },
{ "&ncaron;", "ň" },
{ "&napos;", "ʼn" },
{ "&ENG;", "Ŋ" },
{ "&eng;", "ŋ" },
{ "&Omacr;", "Ō" },
{ "&omacr;", "ō" },
{ "&Odblac;", "Ő" },
{ "&odblac;", "ő" },
{ "&OElig;", "Œ" },
{ "&oelig;", "œ" },
{ "&Racute;", "Ŕ" },
{ "&racute;", "ŕ" },
{ "&Rcedil;", "Ŗ" },
{ "&rcedil;", "ŗ" },
{ "&Rcaron;", "Ř" },
{ "&rcaron;", "ř" },
{ "&Sacute;", "Ś" },
{ "&sacute;", "ś" },
{ "&Scirc;", "Ŝ" },
{ "&scirc;", "ŝ" },
{ "&Scedil;", "Ş" },
{ "&scedil;", "ş" },
{ "&Scaron;", "Š" },
{ "&scaron;", "š" },
{ "&Tcedil;", "Ţ" },
{ "&tcedil;", "ţ" },
{ "&Tcaron;", "Ť" },
{ "&tcaron;", "ť" },
{ "&Tstrok;", "Ŧ" },
{ "&tstrok;", "ŧ" },
{ "&Utilde;", "Ũ" },
{ "&utilde;", "ũ" },
{ "&Umacr;", "Ū" },
{ "&umacr;", "ū" },
{ "&Ubreve;", "Ŭ" },
{ "&ubreve;", "ŭ" },
{ "&Uring;", "Ů" },
{ "&uring;", "ů" },
{ "&Udblac;", "Ű" },
{ "&udblac;", "ű" },
{ "&Uogon;", "Ų" },
{ "&uogon;", "ų" },
{ "&Wcirc;", "Ŵ" },
{ "&wcirc;", "ŵ" },
{ "&Ycirc;", "Ŷ" },
{ "&ycirc;", "ŷ" },
{ "&Yuml;", "Ÿ" },
{ "&Zacute;", "Ź" },
{ "&zacute;", "ź" },
{ "&Zdot;", "Ż" },
{ "&zdot;", "ż" },
{ "&Zcaron;", "Ž" },
{ "&zcaron;", "ž" },
{ "&fnof;", "ƒ" },
{ "&imped;", "Ƶ" },
{ "&gacute;", "ǵ" },
{ "&jmath;", "ȷ" },
{ "&circ;", "ˆ" },
{ "&caron;", "ˇ" },
{ "&Hacek;", "ˇ" },
{ "&breve;", "˘" },
{ "&Breve;", "˘" },
{ "&dot;", "˙" },
{ "&DiacriticalDot;", "˙" },
{ "&ring;", "˚" },
{ "&ogon;", "˛" },
{ "&tilde;", "˜" },
{ "&DiacriticalTilde;", "˜" },
{ "&dblac;", "˝" },
{ "&DiacriticalDoubleAcute;", "˝" },
{ "&DownBreve;", "̑" },
{ "&UnderBar;", "̲" },
{ "&Alpha;", "Α" },
{ "&Beta;", "Β" },
{ "&Gamma;", "Γ" },
{ "&Delta;", "Δ" },
{ "&Epsilon;", "Ε" },
{ "&Zeta;", "Ζ" },
{ "&Eta;", "Η" },
{ "&Theta;", "Θ" },
{ "&Iota;", "Ι" },
{ "&Kappa;", "Κ" },
{ "&Lambda;", "Λ" },
{ "&Mu;", "Μ" },
{ "&Nu;", "Ν" },
{ "&Xi;", "Ξ" },
{ "&Omicron;", "Ο" },
{ "&Pi;", "Π" },
{ "&Rho;", "Ρ" },
{ "&Sigma;", "Σ" },
{ "&Tau;", "Τ" },
{ "&Upsilon;", "Υ" },
{ "&Phi;", "Φ" },
{ "&Chi;", "Χ" },
{ "&Psi;", "Ψ" },
{ "&Omega;", "Ω" },
{ "&alpha;", "α" },
{ "&beta;", "β" },
{ "&gamma;", "γ" },
{ "&delta;", "δ" },
{ "&epsiv;", "ε" },
{ "&varepsilon;", "ε" },
{ "&epsilon;", "ε" },
{ "&zeta;", "ζ" },
{ "&eta;", "η" },
{ "&theta;", "θ" },
{ "&iota;", "ι" },
{ "&kappa;", "κ" },
{ "&lambda;", "λ" },
{ "&mu;", "μ" },
{ "&nu;", "ν" },
{ "&xi;", "ξ" },
{ "&omicron;", "ο" },
{ "&pi;", "π" },
{ "&rho;", "ρ" },
{ "&sigmav;", "ς" },
{ "&varsigma;", "ς" },
{ "&sigmaf;", "ς" },
{ "&sigma;", "σ" },
{ "&tau;", "τ" },
{ "&upsi;", "υ" },
{ "&upsilon;", "υ" },
{ "&phi;", "φ" },
{ "&phiv;", "φ" },
{ "&varphi;", "φ" },
{ "&chi;", "χ" },
{ "&psi;", "ψ" },
{ "&omega;", "ω" },
{ "&thetav;", "ϑ" },
{ "&vartheta;", "ϑ" },
{ "&thetasym;", "ϑ" },
{ "&Upsi;", "ϒ" },
{ "&upsih;", "ϒ" },
{ "&straightphi;", "ϕ" },
{ "&piv;", "ϖ" },
{ "&varpi;", "ϖ" },
{ "&Gammad;", "Ϝ" },
{ "&gammad;", "ϝ" },
{ "&digamma;", "ϝ" },
{ "&kappav;", "ϰ" },
{ "&varkappa;", "ϰ" },
{ "&rhov;", "ϱ" },
{ "&varrho;", "ϱ" },
{ "&epsi;", "ϵ" },
{ "&straightepsilon;", "ϵ" },
{ "&bepsi;", "϶" },
{ "&backepsilon;", "϶" },
{ "&IOcy;", "Ё" },
{ "&DJcy;", "Ђ" },
{ "&GJcy;", "Ѓ" },
{ "&Jukcy;", "Є" },
{ "&DScy;", "Ѕ" },
{ "&Iukcy;", "І" },
{ "&YIcy;", "Ї" },
{ "&Jsercy;", "Ј" },
{ "&LJcy;", "Љ" },
{ "&NJcy;", "Њ" },
{ "&TSHcy;", "Ћ" },
{ "&KJcy;", "Ќ" },
{ "&Ubrcy;", "Ў" },
{ "&DZcy;", "Џ" },
{ "&Acy;", "А" },
{ "&Bcy;", "Б" },
{ "&Vcy;", "В" },
{ "&Gcy;", "Г" },
{ "&Dcy;", "Д" },
{ "&IEcy;", "Е" },
{ "&ZHcy;", "Ж" },
{ "&Zcy;", "З" },
{ "&Icy;", "И" },
{ "&Jcy;", "Й" },
{ "&Kcy;", "К" },
{ "&Lcy;", "Л" },
{ "&Mcy;", "М" },
{ "&Ncy;", "Н" },
{ "&Ocy;", "О" },
{ "&Pcy;", "П" },
{ "&Rcy;", "Р" },
{ "&Scy;", "С" },
{ "&Tcy;", "Т" },
{ "&Ucy;", "У" },
{ "&Fcy;", "Ф" },
{ "&KHcy;", "Х" },
{ "&TScy;", "Ц" },
{ "&CHcy;", "Ч" },
{ "&SHcy;", "Ш" },
{ "&SHCHcy;", "Щ" },
{ "&HARDcy;", "Ъ" },
{ "&Ycy;", "Ы" },
{ "&SOFTcy;", "Ь" },
{ "&Ecy;", "Э" },
{ "&YUcy;", "Ю" },
{ "&YAcy;", "Я" },
{ "&acy;", "а" },
{ "&bcy;", "б" },
{ "&vcy;", "в" },
{ "&gcy;", "г" },
{ "&dcy;", "д" },
{ "&iecy;", "е" },
{ "&zhcy;", "ж" },
{ "&zcy;", "з" },
{ "&icy;", "и" },
{ "&jcy;", "й" },
{ "&kcy;", "к" },
{ "&lcy;", "л" },
{ "&mcy;", "м" },
{ "&ncy;", "н" },
{ "&ocy;", "о" },
{ "&pcy;", "п" },
{ "&rcy;", "р" },
{ "&scy;", "с" },
{ "&tcy;", "т" },
{ "&ucy;", "у" },
{ "&fcy;", "ф" },
{ "&khcy;", "х" },
{ "&tscy;", "ц" },
{ "&chcy;", "ч" },
{ "&shcy;", "ш" },
{ "&shchcy;", "щ" },
{ "&hardcy;", "ъ" },
{ "&ycy;", "ы" },
{ "&softcy;", "ь" },
{ "&ecy;", "э" },
{ "&yucy;", "ю" },
{ "&yacy;", "я" },
{ "&iocy;", "ё" },
{ "&djcy;", "ђ" },
{ "&gjcy;", "ѓ" },
{ "&jukcy;", "є" },
{ "&dscy;", "ѕ" },
{ "&iukcy;", "і" },
{ "&yicy;", "ї" },
{ "&jsercy;", "ј" },
{ "&ljcy;", "љ" },
{ "&njcy;", "њ" },
{ "&tshcy;", "ћ" },
{ "&kjcy;", "ќ" },
{ "&ubrcy;", "ў" },
{ "&dzcy;", "џ" },
{ "&ensp;", "" },
{ "&emsp;", "" },
{ "&emsp13;", "" },
{ "&emsp14;", "" },
{ "&numsp;", "" },
{ "&puncsp;", "" },
{ "&thinsp;", "" },
{ "&ThinSpace;", "" },
{ "&hairsp;", "" },
{ "&VeryThinSpace;", "" },
{ "&ZeroWidthSpace;", "" },
{ "&NegativeVeryThinSpace;", "" },
{ "&NegativeThinSpace;", "" },
{ "&NegativeMediumSpace;", "" },
{ "&NegativeThickSpace;", "" },
{ "&zwnj;", "" },
{ "&zwj;", "" },
{ "&lrm;", "" },
{ "&rlm;", "" },
{ "&hyphen;", "" },
{ "&dash;", "" },
{ "&ndash;", "" },
{ "&mdash;", "" },
{ "&horbar;", "" },
{ "&Verbar;", "" },
{ "&Vert;", "" },
{ "&lsquo;", "" },
{ "&OpenCurlyQuote;", "" },
{ "&rsquo;", "" },
{ "&rsquor;", "" },
{ "&CloseCurlyQuote;", "" },
{ "&lsquor;", "" },
{ "&sbquo;", "" },
{ "&ldquo;", "" },
{ "&OpenCurlyDoubleQuote;", "" },
{ "&rdquo;", "" },
{ "&rdquor;", "" },
{ "&CloseCurlyDoubleQuote;", "" },
{ "&ldquor;", "" },
{ "&bdquo;", "" },
{ "&dagger;", "" },
{ "&Dagger;", "" },
{ "&ddagger;", "" },
{ "&bull;", "" },
{ "&bullet;", "" },
{ "&nldr;", "" },
{ "&hellip;", "" },
{ "&mldr;", "" },
{ "&permil;", "" },
{ "&pertenk;", "" },
{ "&prime;", "" },
{ "&Prime;", "" },
{ "&tprime;", "" },
{ "&bprime;", "" },
{ "&backprime;", "" },
{ "&lsaquo;", "" },
{ "&rsaquo;", "" },
{ "&oline;", "" },
{ "&caret;", "" },
{ "&hybull;", "" },
{ "&frasl;", "" },
{ "&bsemi;", "" },
{ "&qprime;", "" },
{ "&MediumSpace;", "" },
{ "&NoBreak;", "" },
{ "&ApplyFunction;", "" },
{ "&af;", "" },
{ "&InvisibleTimes;", "" },
{ "&it;", "" },
{ "&InvisibleComma;", "" },
{ "&ic;", "" },
{ "&euro;", "" },
{ "&tdot;", "" },
{ "&TripleDot;", "" },
{ "&DotDot;", "" },
{ "&Copf;", "" },
{ "&complexes;", "" },
{ "&incare;", "" },
{ "&gscr;", "" },
{ "&hamilt;", "" },
{ "&HilbertSpace;", "" },
{ "&Hscr;", "" },
{ "&Hfr;", "" },
{ "&Poincareplane;", "" },
{ "&quaternions;", "" },
{ "&Hopf;", "" },
{ "&planckh;", "" },
{ "&planck;", "" },
{ "&hbar;", "" },
{ "&plankv;", "" },
{ "&hslash;", "" },
{ "&Iscr;", "" },
{ "&imagline;", "" },
{ "&image;", "" },
{ "&Im;", "" },
{ "&imagpart;", "" },
{ "&Ifr;", "" },
{ "&Lscr;", "" },
{ "&lagran;", "" },
{ "&Laplacetrf;", "" },
{ "&ell;", "" },
{ "&Nopf;", "" },
{ "&naturals;", "" },
{ "&numero;", "" },
{ "&copysr;", "" },
{ "&weierp;", "" },
{ "&wp;", "" },
{ "&Popf;", "" },
{ "&primes;", "" },
{ "&rationals;", "" },
{ "&Qopf;", "" },
{ "&Rscr;", "" },
{ "&realine;", "" },
{ "&real;", "" },
{ "&Re;", "" },
{ "&realpart;", "" },
{ "&Rfr;", "" },
{ "&reals;", "" },
{ "&Ropf;", "" },
{ "&rx;", "" },
{ "&trade;", "" },
{ "&TRADE;", "" },
{ "&integers;", "" },
{ "&Zopf;", "" },
{ "&ohm;", "" },
{ "&mho;", "" },
{ "&Zfr;", "" },
{ "&zeetrf;", "" },
{ "&iiota;", "" },
{ "&angst;", "" },
{ "&bernou;", "" },
{ "&Bernoullis;", "" },
{ "&Bscr;", "" },
{ "&Cfr;", "" },
{ "&Cayleys;", "" },
{ "&escr;", "" },
{ "&Escr;", "" },
{ "&expectation;", "" },
{ "&Fscr;", "" },
{ "&Fouriertrf;", "" },
{ "&phmmat;", "" },
{ "&Mellintrf;", "" },
{ "&Mscr;", "" },
{ "&order;", "" },
{ "&orderof;", "" },
{ "&oscr;", "" },
{ "&alefsym;", "" },
{ "&aleph;", "" },
{ "&beth;", "" },
{ "&gimel;", "" },
{ "&daleth;", "" },
{ "&CapitalDifferentialD;", "" },
{ "&DD;", "" },
{ "&DifferentialD;", "" },
{ "&dd;", "" },
{ "&ExponentialE;", "" },
{ "&exponentiale;", "" },
{ "&ee;", "" },
{ "&ImaginaryI;", "" },
{ "&ii;", "" },
{ "&frac13;", "" },
{ "&frac23;", "" },
{ "&frac15;", "" },
{ "&frac25;", "" },
{ "&frac35;", "" },
{ "&frac45;", "" },
{ "&frac16;", "" },
{ "&frac56;", "" },
{ "&frac18;", "" },
{ "&frac38;", "" },
{ "&frac58;", "" },
{ "&frac78;", "" },
{ "&larr;", "" },
{ "&leftarrow;", "" },
{ "&LeftArrow;", "" },
{ "&slarr;", "" },
{ "&ShortLeftArrow;", "" },
{ "&uarr;", "" },
{ "&uparrow;", "" },
{ "&UpArrow;", "" },
{ "&ShortUpArrow;", "" },
{ "&rarr;", "" },
{ "&rightarrow;", "" },
{ "&RightArrow;", "" },
{ "&srarr;", "" },
{ "&ShortRightArrow;", "" },
{ "&darr;", "" },
{ "&downarrow;", "" },
{ "&DownArrow;", "" },
{ "&ShortDownArrow;", "" },
{ "&harr;", "" },
{ "&leftrightarrow;", "" },
{ "&LeftRightArrow;", "" },
{ "&varr;", "" },
{ "&updownarrow;", "" },
{ "&UpDownArrow;", "" },
{ "&nwarr;", "" },
{ "&UpperLeftArrow;", "" },
{ "&nwarrow;", "" },
{ "&nearr;", "" },
{ "&UpperRightArrow;", "" },
{ "&nearrow;", "" },
{ "&searr;", "" },
{ "&searrow;", "" },
{ "&LowerRightArrow;", "" },
{ "&swarr;", "" },
{ "&swarrow;", "" },
{ "&LowerLeftArrow;", "" },
{ "&nlarr;", "" },
{ "&nleftarrow;", "" },
{ "&nrarr;", "" },
{ "&nrightarrow;", "" },
{ "&rarrw;", "" },
{ "&rightsquigarrow;", "" },
{ "&Larr;", "" },
{ "&twoheadleftarrow;", "" },
{ "&Uarr;", "" },
{ "&Rarr;", "" },
{ "&twoheadrightarrow;", "" },
{ "&Darr;", "" },
{ "&larrtl;", "" },
{ "&leftarrowtail;", "" },
{ "&rarrtl;", "" },
{ "&rightarrowtail;", "" },
{ "&LeftTeeArrow;", "" },
{ "&mapstoleft;", "" },
{ "&UpTeeArrow;", "" },
{ "&mapstoup;", "" },
{ "&map;", "" },
{ "&RightTeeArrow;", "" },
{ "&mapsto;", "" },
{ "&DownTeeArrow;", "" },
{ "&mapstodown;", "" },
{ "&larrhk;", "" },
{ "&hookleftarrow;", "" },
{ "&rarrhk;", "" },
{ "&hookrightarrow;", "" },
{ "&larrlp;", "" },
{ "&looparrowleft;", "" },
{ "&rarrlp;", "" },
{ "&looparrowright;", "" },
{ "&harrw;", "" },
{ "&leftrightsquigarrow;", "" },
{ "&nharr;", "" },
{ "&nleftrightarrow;", "" },
{ "&lsh;", "" },
{ "&Lsh;", "" },
{ "&rsh;", "" },
{ "&Rsh;", "" },
{ "&ldsh;", "" },
{ "&rdsh;", "" },
{ "&crarr;", "" },
{ "&cularr;", "" },
{ "&curvearrowleft;", "" },
{ "&curarr;", "" },
{ "&curvearrowright;", "" },
{ "&olarr;", "" },
{ "&circlearrowleft;", "" },
{ "&orarr;", "" },
{ "&circlearrowright;", "" },
{ "&lharu;", "" },
{ "&LeftVector;", "" },
{ "&leftharpoonup;", "" },
{ "&lhard;", "" },
{ "&leftharpoondown;", "" },
{ "&DownLeftVector;", "" },
{ "&uharr;", "" },
{ "&upharpoonright;", "" },
{ "&RightUpVector;", "" },
{ "&uharl;", "" },
{ "&upharpoonleft;", "" },
{ "&LeftUpVector;", "" },
{ "&rharu;", "" },
{ "&RightVector;", "" },
{ "&rightharpoonup;", "" },
{ "&rhard;", "" },
{ "&rightharpoondown;", "" },
{ "&DownRightVector;", "" },
{ "&dharr;", "" },
{ "&RightDownVector;", "" },
{ "&downharpoonright;", "" },
{ "&dharl;", "" },
{ "&LeftDownVector;", "" },
{ "&downharpoonleft;", "" },
{ "&rlarr;", "" },
{ "&rightleftarrows;", "" },
{ "&RightArrowLeftArrow;", "" },
{ "&udarr;", "" },
{ "&UpArrowDownArrow;", "" },
{ "&lrarr;", "" },
{ "&leftrightarrows;", "" },
{ "&LeftArrowRightArrow;", "" },
{ "&llarr;", "" },
{ "&leftleftarrows;", "" },
{ "&uuarr;", "" },
{ "&upuparrows;", "" },
{ "&rrarr;", "" },
{ "&rightrightarrows;", "" },
{ "&ddarr;", "" },
{ "&downdownarrows;", "" },
{ "&lrhar;", "" },
{ "&ReverseEquilibrium;", "" },
{ "&leftrightharpoons;", "" },
{ "&rlhar;", "" },
{ "&rightleftharpoons;", "" },
{ "&Equilibrium;", "" },
{ "&nlArr;", "" },
{ "&nLeftarrow;", "" },
{ "&nhArr;", "" },
{ "&nLeftrightarrow;", "" },
{ "&nrArr;", "" },
{ "&nRightarrow;", "" },
{ "&lArr;", "" },
{ "&Leftarrow;", "" },
{ "&DoubleLeftArrow;", "" },
{ "&uArr;", "" },
{ "&Uparrow;", "" },
{ "&DoubleUpArrow;", "" },
{ "&rArr;", "" },
{ "&Rightarrow;", "" },
{ "&Implies;", "" },
{ "&DoubleRightArrow;", "" },
{ "&dArr;", "" },
{ "&Downarrow;", "" },
{ "&DoubleDownArrow;", "" },
{ "&hArr;", "" },
{ "&Leftrightarrow;", "" },
{ "&DoubleLeftRightArrow;", "" },
{ "&iff;", "" },
{ "&vArr;", "" },
{ "&Updownarrow;", "" },
{ "&DoubleUpDownArrow;", "" },
{ "&nwArr;", "" },
{ "&neArr;", "" },
{ "&seArr;", "" },
{ "&swArr;", "" },
{ "&lAarr;", "" },
{ "&Lleftarrow;", "" },
{ "&rAarr;", "" },
{ "&Rrightarrow;", "" },
{ "&zigrarr;", "" },
{ "&larrb;", "" },
{ "&LeftArrowBar;", "" },
{ "&rarrb;", "" },
{ "&RightArrowBar;", "" },
{ "&duarr;", "" },
{ "&DownArrowUpArrow;", "" },
{ "&loarr;", "" },
{ "&roarr;", "" },
{ "&hoarr;", "" },
{ "&forall;", "" },
{ "&ForAll;", "" },
{ "&comp;", "" },
{ "&complement;", "" },
{ "&part;", "" },
{ "&PartialD;", "" },
{ "&exist;", "" },
{ "&Exists;", "" },
{ "&nexist;", "" },
{ "&NotExists;", "" },
{ "&nexists;", "" },
{ "&empty;", "" },
{ "&emptyset;", "" },
{ "&emptyv;", "" },
{ "&varnothing;", "" },
{ "&nabla;", "" },
{ "&Del;", "" },
{ "&isin;", "" },
{ "&isinv;", "" },
{ "&Element;", "" },
{ "&in;", "" },
{ "&notin;", "" },
{ "&NotElement;", "" },
{ "&notinva;", "" },
{ "&niv;", "" },
{ "&ReverseElement;", "" },
{ "&ni;", "" },
{ "&SuchThat;", "" },
{ "&notni;", "" },
{ "&notniva;", "" },
{ "&NotReverseElement;", "" },
{ "&prod;", "" },
{ "&Product;", "" },
{ "&coprod;", "" },
{ "&Coproduct;", "" },
{ "&sum;", "" },
{ "&Sum;", "" },
{ "&minus;", "" },
{ "&mnplus;", "" },
{ "&mp;", "" },
{ "&MinusPlus;", "" },
{ "&plusdo;", "" },
{ "&dotplus;", "" },
{ "&setmn;", "" },
{ "&setminus;", "" },
{ "&Backslash;", "" },
{ "&ssetmn;", "" },
{ "&smallsetminus;", "" },
{ "&lowast;", "" },
{ "&compfn;", "" },
{ "&SmallCircle;", "" },
{ "&radic;", "" },
{ "&Sqrt;", "" },
{ "&prop;", "" },
{ "&propto;", "" },
{ "&Proportional;", "" },
{ "&vprop;", "" },
{ "&varpropto;", "" },
{ "&infin;", "" },
{ "&angrt;", "" },
{ "&ang;", "" },
{ "&angle;", "" },
{ "&angmsd;", "" },
{ "&measuredangle;", "" },
{ "&angsph;", "" },
{ "&mid;", "" },
{ "&VerticalBar;", "" },
{ "&smid;", "" },
{ "&shortmid;", "" },
{ "&nmid;", "" },
{ "&NotVerticalBar;", "" },
{ "&nsmid;", "" },
{ "&nshortmid;", "" },
{ "&par;", "" },
{ "&parallel;", "" },
{ "&DoubleVerticalBar;", "" },
{ "&spar;", "" },
{ "&shortparallel;", "" },
{ "&npar;", "" },
{ "&nparallel;", "" },
{ "&NotDoubleVerticalBar;", "" },
{ "&nspar;", "" },
{ "&nshortparallel;", "" },
{ "&and;", "" },
{ "&wedge;", "" },
{ "&or;", "" },
{ "&vee;", "" },
{ "&cap;", "" },
{ "&cup;", "" },
{ "&int;", "" },
{ "&Integral;", "" },
{ "&Int;", "" },
{ "&tint;", "" },
{ "&iiint;", "" },
{ "&conint;", "" },
{ "&oint;", "" },
{ "&ContourIntegral;", "" },
{ "&Conint;", "" },
{ "&DoubleContourIntegral;", "" },
{ "&Cconint;", "" },
{ "&cwint;", "" },
{ "&cwconint;", "" },
{ "&ClockwiseContourIntegral;", "" },
{ "&awconint;", "" },
{ "&CounterClockwiseContourIntegral;", "" },
{ "&there4;", "" },
{ "&therefore;", "" },
{ "&Therefore;", "" },
{ "&becaus;", "" },
{ "&because;", "" },
{ "&Because;", "" },
{ "&ratio;", "" },
{ "&Colon;", "" },
{ "&Proportion;", "" },
{ "&minusd;", "" },
{ "&dotminus;", "" },
{ "&mDDot;", "" },
{ "&homtht;", "" },
{ "&sim;", "" },
{ "&Tilde;", "" },
{ "&thksim;", "" },
{ "&thicksim;", "" },
{ "&bsim;", "" },
{ "&backsim;", "" },
{ "&ac;", "" },
{ "&mstpos;", "" },
{ "&acd;", "" },
{ "&wreath;", "" },
{ "&VerticalTilde;", "" },
{ "&wr;", "" },
{ "&nsim;", "" },
{ "&NotTilde;", "" },
{ "&esim;", "" },
{ "&EqualTilde;", "" },
{ "&eqsim;", "" },
{ "&sime;", "" },
{ "&TildeEqual;", "" },
{ "&simeq;", "" },
{ "&nsime;", "" },
{ "&nsimeq;", "" },
{ "&NotTildeEqual;", "" },
{ "&cong;", "" },
{ "&TildeFullEqual;", "" },
{ "&simne;", "" },
{ "&ncong;", "" },
{ "&NotTildeFullEqual;", "" },
{ "&asymp;", "" },
{ "&ap;", "" },
{ "&TildeTilde;", "" },
{ "&approx;", "" },
{ "&thkap;", "" },
{ "&thickapprox;", "" },
{ "&nap;", "" },
{ "&NotTildeTilde;", "" },
{ "&napprox;", "" },
{ "&ape;", "" },
{ "&approxeq;", "" },
{ "&apid;", "" },
{ "&bcong;", "" },
{ "&backcong;", "" },
{ "&asympeq;", "" },
{ "&CupCap;", "" },
{ "&bump;", "" },
{ "&HumpDownHump;", "" },
{ "&Bumpeq;", "" },
{ "&bumpe;", "" },
{ "&HumpEqual;", "" },
{ "&bumpeq;", "" },
{ "&esdot;", "" },
{ "&DotEqual;", "" },
{ "&doteq;", "" },
{ "&eDot;", "" },
{ "&doteqdot;", "" },
{ "&efDot;", "" },
{ "&fallingdotseq;", "" },
{ "&erDot;", "" },
{ "&risingdotseq;", "" },
{ "&colone;", "" },
{ "&coloneq;", "" },
{ "&Assign;", "" },
{ "&ecolon;", "" },
{ "&eqcolon;", "" },
{ "&ecir;", "" },
{ "&eqcirc;", "" },
{ "&cire;", "" },
{ "&circeq;", "" },
{ "&wedgeq;", "" },
{ "&veeeq;", "" },
{ "&trie;", "" },
{ "&triangleq;", "" },
{ "&equest;", "" },
{ "&questeq;", "" },
{ "&ne;", "" },
{ "&NotEqual;", "" },
{ "&equiv;", "" },
{ "&Congruent;", "" },
{ "&nequiv;", "" },
{ "&NotCongruent;", "" },
{ "&le;", "" },
{ "&leq;", "" },
{ "&ge;", "" },
{ "&GreaterEqual;", "" },
{ "&geq;", "" },
{ "&lE;", "" },
{ "&LessFullEqual;", "" },
{ "&leqq;", "" },
{ "&gE;", "" },
{ "&GreaterFullEqual;", "" },
{ "&geqq;", "" },
{ "&lnE;", "" },
{ "&lneqq;", "" },
{ "&gnE;", "" },
{ "&gneqq;", "" },
{ "&Lt;", "" },
{ "&NestedLessLess;", "" },
{ "&ll;", "" },
{ "&Gt;", "" },
{ "&NestedGreaterGreater;", "" },
{ "&gg;", "" },
{ "&twixt;", "" },
{ "&between;", "" },
{ "&NotCupCap;", "" },
{ "&nlt;", "" },
{ "&NotLess;", "" },
{ "&nless;", "" },
{ "&ngt;", "" },
{ "&NotGreater;", "" },
{ "&ngtr;", "" },
{ "&nle;", "" },
{ "&NotLessEqual;", "" },
{ "&nleq;", "" },
{ "&nge;", "" },
{ "&NotGreaterEqual;", "" },
{ "&ngeq;", "" },
{ "&lsim;", "" },
{ "&LessTilde;", "" },
{ "&lesssim;", "" },
{ "&gsim;", "" },
{ "&gtrsim;", "" },
{ "&GreaterTilde;", "" },
{ "&nlsim;", "" },
{ "&NotLessTilde;", "" },
{ "&ngsim;", "" },
{ "&NotGreaterTilde;", "" },
{ "&lg;", "" },
{ "&lessgtr;", "" },
{ "&LessGreater;", "" },
{ "&gl;", "" },
{ "&gtrless;", "" },
{ "&GreaterLess;", "" },
{ "&ntlg;", "" },
{ "&NotLessGreater;", "" },
{ "&ntgl;", "" },
{ "&NotGreaterLess;", "" },
{ "&pr;", "" },
{ "&Precedes;", "" },
{ "&prec;", "" },
{ "&sc;", "" },
{ "&Succeeds;", "" },
{ "&succ;", "" },
{ "&prcue;", "" },
{ "&PrecedesSlantEqual;", "" },
{ "&preccurlyeq;", "" },
{ "&sccue;", "" },
{ "&SucceedsSlantEqual;", "" },
{ "&succcurlyeq;", "" },
{ "&prsim;", "" },
{ "&precsim;", "" },
{ "&PrecedesTilde;", "" },
{ "&scsim;", "" },
{ "&succsim;", "" },
{ "&SucceedsTilde;", "" },
{ "&npr;", "" },
{ "&nprec;", "" },
{ "&NotPrecedes;", "" },
{ "&nsc;", "" },
{ "&nsucc;", "" },
{ "&NotSucceeds;", "" },
{ "&sub;", "" },
{ "&subset;", "" },
{ "&sup;", "" },
{ "&supset;", "" },
{ "&Superset;", "" },
{ "&nsub;", "" },
{ "&nsup;", "" },
{ "&sube;", "" },
{ "&SubsetEqual;", "" },
{ "&subseteq;", "" },
{ "&supe;", "" },
{ "&supseteq;", "" },
{ "&SupersetEqual;", "" },
{ "&nsube;", "" },
{ "&nsubseteq;", "" },
{ "&NotSubsetEqual;", "" },
{ "&nsupe;", "" },
{ "&nsupseteq;", "" },
{ "&NotSupersetEqual;", "" },
{ "&subne;", "" },
{ "&subsetneq;", "" },
{ "&supne;", "" },
{ "&supsetneq;", "" },
{ "&cupdot;", "" },
{ "&uplus;", "" },
{ "&UnionPlus;", "" },
{ "&sqsub;", "" },
{ "&SquareSubset;", "" },
{ "&sqsubset;", "" },
{ "&sqsup;", "" },
{ "&SquareSuperset;", "" },
{ "&sqsupset;", "" },
{ "&sqsube;", "" },
{ "&SquareSubsetEqual;", "" },
{ "&sqsubseteq;", "" },
{ "&sqsupe;", "" },
{ "&SquareSupersetEqual;", "" },
{ "&sqsupseteq;", "" },
{ "&sqcap;", "" },
{ "&SquareIntersection;", "" },
{ "&sqcup;", "" },
{ "&SquareUnion;", "" },
{ "&oplus;", "" },
{ "&CirclePlus;", "" },
{ "&ominus;", "" },
{ "&CircleMinus;", "" },
{ "&otimes;", "" },
{ "&CircleTimes;", "" },
{ "&osol;", "" },
{ "&odot;", "" },
{ "&CircleDot;", "" },
{ "&ocir;", "" },
{ "&circledcirc;", "" },
{ "&oast;", "" },
{ "&circledast;", "" },
{ "&odash;", "" },
{ "&circleddash;", "" },
{ "&plusb;", "" },
{ "&boxplus;", "" },
{ "&minusb;", "" },
{ "&boxminus;", "" },
{ "&timesb;", "" },
{ "&boxtimes;", "" },
{ "&sdotb;", "" },
{ "&dotsquare;", "" },
{ "&vdash;", "" },
{ "&RightTee;", "" },
{ "&dashv;", "" },
{ "&LeftTee;", "" },
{ "&top;", "" },
{ "&DownTee;", "" },
{ "&bottom;", "" },
{ "&bot;", "" },
{ "&perp;", "" },
{ "&UpTee;", "" },
{ "&models;", "" },
{ "&vDash;", "" },
{ "&DoubleRightTee;", "" },
{ "&Vdash;", "" },
{ "&Vvdash;", "" },
{ "&VDash;", "" },
{ "&nvdash;", "" },
{ "&nvDash;", "" },
{ "&nVdash;", "" },
{ "&nVDash;", "" },
{ "&prurel;", "" },
{ "&vltri;", "" },
{ "&vartriangleleft;", "" },
{ "&LeftTriangle;", "" },
{ "&vrtri;", "" },
{ "&vartriangleright;", "" },
{ "&RightTriangle;", "" },
{ "&ltrie;", "" },
{ "&trianglelefteq;", "" },
{ "&LeftTriangleEqual;", "" },
{ "&rtrie;", "" },
{ "&trianglerighteq;", "" },
{ "&RightTriangleEqual;", "" },
{ "&origof;", "" },
{ "&imof;", "" },
{ "&mumap;", "" },
{ "&multimap;", "" },
{ "&hercon;", "" },
{ "&intcal;", "" },
{ "&intercal;", "" },
{ "&veebar;", "" },
{ "&barvee;", "" },
{ "&angrtvb;", "" },
{ "&lrtri;", "" },
{ "&xwedge;", "" },
{ "&Wedge;", "" },
{ "&bigwedge;", "" },
{ "&xvee;", "" },
{ "&Vee;", "" },
{ "&bigvee;", "" },
{ "&xcap;", "" },
{ "&Intersection;", "" },
{ "&bigcap;", "" },
{ "&xcup;", "" },
{ "&Union;", "" },
{ "&bigcup;", "" },
{ "&diam;", "" },
{ "&diamond;", "" },
{ "&Diamond;", "" },
{ "&sdot;", "" },
{ "&sstarf;", "" },
{ "&Star;", "" },
{ "&divonx;", "" },
{ "&divideontimes;", "" },
{ "&bowtie;", "" },
{ "&ltimes;", "" },
{ "&rtimes;", "" },
{ "&lthree;", "" },
{ "&leftthreetimes;", "" },
{ "&rthree;", "" },
{ "&rightthreetimes;", "" },
{ "&bsime;", "" },
{ "&backsimeq;", "" },
{ "&cuvee;", "" },
{ "&curlyvee;", "" },
{ "&cuwed;", "" },
{ "&curlywedge;", "" },
{ "&Sub;", "" },
{ "&Subset;", "" },
{ "&Sup;", "" },
{ "&Supset;", "" },
{ "&Cap;", "" },
{ "&Cup;", "" },
{ "&fork;", "" },
{ "&pitchfork;", "" },
{ "&epar;", "" },
{ "&ltdot;", "" },
{ "&lessdot;", "" },
{ "&gtdot;", "" },
{ "&gtrdot;", "" },
{ "&Ll;", "" },
{ "&Gg;", "" },
{ "&ggg;", "" },
{ "&leg;", "" },
{ "&LessEqualGreater;", "" },
{ "&lesseqgtr;", "" },
{ "&gel;", "" },
{ "&gtreqless;", "" },
{ "&GreaterEqualLess;", "" },
{ "&cuepr;", "" },
{ "&curlyeqprec;", "" },
{ "&cuesc;", "" },
{ "&curlyeqsucc;", "" },
{ "&nprcue;", "" },
{ "&NotPrecedesSlantEqual;", "" },
{ "&nsccue;", "" },
{ "&NotSucceedsSlantEqual;", "" },
{ "&nsqsube;", "" },
{ "&NotSquareSubsetEqual;", "" },
{ "&nsqsupe;", "" },
{ "&NotSquareSupersetEqual;", "" },
{ "&lnsim;", "" },
{ "&gnsim;", "" },
{ "&prnsim;", "" },
{ "&precnsim;", "" },
{ "&scnsim;", "" },
{ "&succnsim;", "" },
{ "&nltri;", "" },
{ "&ntriangleleft;", "" },
{ "&NotLeftTriangle;", "" },
{ "&nrtri;", "" },
{ "&ntriangleright;", "" },
{ "&NotRightTriangle;", "" },
{ "&nltrie;", "" },
{ "&ntrianglelefteq;", "" },
{ "&NotLeftTriangleEqual;", "" },
{ "&nrtrie;", "" },
{ "&ntrianglerighteq;", "" },
{ "&NotRightTriangleEqual;", "" },
{ "&vellip;", "" },
{ "&ctdot;", "" },
{ "&utdot;", "" },
{ "&dtdot;", "" },
{ "&disin;", "" },
{ "&isinsv;", "" },
{ "&isins;", "" },
{ "&isindot;", "" },
{ "&notinvc;", "" },
{ "&notinvb;", "" },
{ "&isinE;", "" },
{ "&nisd;", "" },
{ "&xnis;", "" },
{ "&nis;", "" },
{ "&notnivc;", "" },
{ "&notnivb;", "" },
{ "&barwed;", "" },
{ "&barwedge;", "" },
{ "&Barwed;", "" },
{ "&doublebarwedge;", "" },
{ "&lceil;", "" },
{ "&LeftCeiling;", "" },
{ "&rceil;", "" },
{ "&RightCeiling;", "" },
{ "&lfloor;", "" },
{ "&LeftFloor;", "" },
{ "&rfloor;", "" },
{ "&RightFloor;", "" },
{ "&drcrop;", "" },
{ "&dlcrop;", "" },
{ "&urcrop;", "" },
{ "&ulcrop;", "" },
{ "&bnot;", "" },
{ "&profline;", "" },
{ "&profsurf;", "" },
{ "&telrec;", "" },
{ "&target;", "" },
{ "&ulcorn;", "" },
{ "&ulcorner;", "" },
{ "&urcorn;", "" },
{ "&urcorner;", "" },
{ "&dlcorn;", "" },
{ "&llcorner;", "" },
{ "&drcorn;", "" },
{ "&lrcorner;", "" },
{ "&frown;", "" },
{ "&sfrown;", "" },
{ "&smile;", "" },
{ "&ssmile;", "" },
{ "&cylcty;", "" },
{ "&profalar;", "" },
{ "&topbot;", "" },
{ "&ovbar;", "" },
{ "&solbar;", "" },
{ "&angzarr;", "" },
{ "&lmoust;", "" },
{ "&lmoustache;", "" },
{ "&rmoust;", "" },
{ "&rmoustache;", "" },
{ "&tbrk;", "" },
{ "&OverBracket;", "" },
{ "&bbrk;", "" },
{ "&UnderBracket;", "" },
{ "&bbrktbrk;", "" },
{ "&OverParenthesis;", "" },
{ "&UnderParenthesis;", "" },
{ "&OverBrace;", "" },
{ "&UnderBrace;", "" },
{ "&trpezium;", "" },
{ "&elinters;", "" },
{ "&blank;", "" },
{ "&oS;", "" },
{ "&circledS;", "" },
{ "&boxh;", "" },
{ "&HorizontalLine;", "" },
{ "&boxv;", "" },
{ "&boxdr;", "" },
{ "&boxdl;", "" },
{ "&boxur;", "" },
{ "&boxul;", "" },
{ "&boxvr;", "" },
{ "&boxvl;", "" },
{ "&boxhd;", "" },
{ "&boxhu;", "" },
{ "&boxvh;", "" },
{ "&boxH;", "" },
{ "&boxV;", "" },
{ "&boxdR;", "" },
{ "&boxDr;", "" },
{ "&boxDR;", "" },
{ "&boxdL;", "" },
{ "&boxDl;", "" },
{ "&boxDL;", "" },
{ "&boxuR;", "" },
{ "&boxUr;", "" },
{ "&boxUR;", "" },
{ "&boxuL;", "" },
{ "&boxUl;", "" },
{ "&boxUL;", "" },
{ "&boxvR;", "" },
{ "&boxVr;", "" },
{ "&boxVR;", "" },
{ "&boxvL;", "" },
{ "&boxVl;", "" },
{ "&boxVL;", "" },
{ "&boxHd;", "" },
{ "&boxhD;", "" },
{ "&boxHD;", "" },
{ "&boxHu;", "" },
{ "&boxhU;", "" },
{ "&boxHU;", "" },
{ "&boxvH;", "" },
{ "&boxVh;", "" },
{ "&boxVH;", "" },
{ "&uhblk;", "" },
{ "&lhblk;", "" },
{ "&block;", "" },
{ "&blk14;", "" },
{ "&blk12;", "" },
{ "&blk34;", "" },
{ "&squ;", "" },
{ "&square;", "" },
{ "&Square;", "" },
{ "&squf;", "" },
{ "&squarf;", "" },
{ "&blacksquare;", "" },
{ "&FilledVerySmallSquare;", "" },
{ "&EmptyVerySmallSquare;", "" },
{ "&rect;", "" },
{ "&marker;", "" },
{ "&fltns;", "" },
{ "&xutri;", "" },
{ "&bigtriangleup;", "" },
{ "&utrif;", "" },
{ "&blacktriangle;", "" },
{ "&utri;", "" },
{ "&triangle;", "" },
{ "&rtrif;", "" },
{ "&blacktriangleright;", "" },
{ "&rtri;", "" },
{ "&triangleright;", "" },
{ "&xdtri;", "" },
{ "&bigtriangledown;", "" },
{ "&dtrif;", "" },
{ "&blacktriangledown;", "" },
{ "&dtri;", "" },
{ "&triangledown;", "" },
{ "&ltrif;", "" },
{ "&blacktriangleleft;", "" },
{ "&ltri;", "" },
{ "&triangleleft;", "" },
{ "&loz;", "" },
{ "&lozenge;", "" },
{ "&cir;", "" },
{ "&tridot;", "" },
{ "&xcirc;", "" },
{ "&bigcirc;", "" },
{ "&ultri;", "" },
{ "&urtri;", "" },
{ "&lltri;", "" },
{ "&EmptySmallSquare;", "" },
{ "&FilledSmallSquare;", "" },
{ "&starf;", "" },
{ "&bigstar;", "" },
{ "&star;", "" },
{ "&phone;", "" },
{ "&female;", "" },
{ "&male;", "" },
{ "&spades;", "" },
{ "&spadesuit;", "" },
{ "&clubs;", "" },
{ "&clubsuit;", "" },
{ "&hearts;", "" },
{ "&heartsuit;", "" },
{ "&diams;", "" },
{ "&diamondsuit;", "" },
{ "&sung;", "" },
{ "&flat;", "" },
{ "&natur;", "" },
{ "&natural;", "" },
{ "&sharp;", "" },
{ "&check;", "" },
{ "&checkmark;", "" },
{ "&cross;", "" },
{ "&malt;", "" },
{ "&maltese;", "" },
{ "&sext;", "" },
{ "&VerticalSeparator;", "" },
{ "&lbbrk;", "" },
{ "&rbbrk;", "" },
{ "&lobrk;", "" },
{ "&LeftDoubleBracket;", "" },
{ "&robrk;", "" },
{ "&RightDoubleBracket;", "" },
{ "&lang;", "" },
{ "&LeftAngleBracket;", "" },
{ "&langle;", "" },
{ "&rang;", "" },
{ "&RightAngleBracket;", "" },
{ "&rangle;", "" },
{ "&Lang;", "" },
{ "&Rang;", "" },
{ "&loang;", "" },
{ "&roang;", "" },
{ "&xlarr;", "" },
{ "&longleftarrow;", "" },
{ "&LongLeftArrow;", "" },
{ "&xrarr;", "" },
{ "&longrightarrow;", "" },
{ "&LongRightArrow;", "" },
{ "&xharr;", "" },
{ "&longleftrightarrow;", "" },
{ "&LongLeftRightArrow;", "" },
{ "&xlArr;", "" },
{ "&Longleftarrow;", "" },
{ "&DoubleLongLeftArrow;", "" },
{ "&xrArr;", "" },
{ "&Longrightarrow;", "" },
{ "&DoubleLongRightArrow;", "" },
{ "&xhArr;", "" },
{ "&Longleftrightarrow;", "" },
{ "&DoubleLongLeftRightArrow;", "" },
{ "&xmap;", "" },
{ "&longmapsto;", "" },
{ "&dzigrarr;", "" },
{ "&nvlArr;", "" },
{ "&nvrArr;", "" },
{ "&nvHarr;", "" },
{ "&Map;", "" },
{ "&lbarr;", "" },
{ "&rbarr;", "" },
{ "&bkarow;", "" },
{ "&lBarr;", "" },
{ "&rBarr;", "" },
{ "&dbkarow;", "" },
{ "&RBarr;", "" },
{ "&drbkarow;", "" },
{ "&DDotrahd;", "" },
{ "&UpArrowBar;", "" },
{ "&DownArrowBar;", "" },
{ "&Rarrtl;", "" },
{ "&latail;", "" },
{ "&ratail;", "" },
{ "&lAtail;", "" },
{ "&rAtail;", "" },
{ "&larrfs;", "" },
{ "&rarrfs;", "" },
{ "&larrbfs;", "" },
{ "&rarrbfs;", "" },
{ "&nwarhk;", "" },
{ "&nearhk;", "" },
{ "&searhk;", "" },
{ "&hksearow;", "" },
{ "&swarhk;", "" },
{ "&hkswarow;", "" },
{ "&nwnear;", "" },
{ "&nesear;", "" },
{ "&toea;", "" },
{ "&seswar;", "" },
{ "&tosa;", "" },
{ "&swnwar;", "" },
{ "&rarrc;", "" },
{ "&cudarrr;", "" },
{ "&ldca;", "" },
{ "&rdca;", "" },
{ "&cudarrl;", "" },
{ "&larrpl;", "" },
{ "&curarrm;", "" },
{ "&cularrp;", "" },
{ "&rarrpl;", "" },
{ "&harrcir;", "" },
{ "&Uarrocir;", "" },
{ "&lurdshar;", "" },
{ "&ldrushar;", "" },
{ "&LeftRightVector;", "" },
{ "&RightUpDownVector;", "" },
{ "&DownLeftRightVector;", "" },
{ "&LeftUpDownVector;", "" },
{ "&LeftVectorBar;", "" },
{ "&RightVectorBar;", "" },
{ "&RightUpVectorBar;", "" },
{ "&RightDownVectorBar;", "" },
{ "&DownLeftVectorBar;", "" },
{ "&DownRightVectorBar;", "" },
{ "&LeftUpVectorBar;", "" },
{ "&LeftDownVectorBar;", "" },
{ "&LeftTeeVector;", "" },
{ "&RightTeeVector;", "" },
{ "&RightUpTeeVector;", "" },
{ "&RightDownTeeVector;", "" },
{ "&DownLeftTeeVector;", "" },
{ "&DownRightTeeVector;", "" },
{ "&LeftUpTeeVector;", "" },
{ "&LeftDownTeeVector;", "" },
{ "&lHar;", "" },
{ "&uHar;", "" },
{ "&rHar;", "" },
{ "&dHar;", "" },
{ "&luruhar;", "" },
{ "&ldrdhar;", "" },
{ "&ruluhar;", "" },
{ "&rdldhar;", "" },
{ "&lharul;", "" },
{ "&llhard;", "" },
{ "&rharul;", "" },
{ "&lrhard;", "" },
{ "&udhar;", "" },
{ "&UpEquilibrium;", "" },
{ "&duhar;", "" },
{ "&ReverseUpEquilibrium;", "" },
{ "&RoundImplies;", "" },
{ "&erarr;", "" },
{ "&simrarr;", "" },
{ "&larrsim;", "" },
{ "&rarrsim;", "" },
{ "&rarrap;", "" },
{ "&ltlarr;", "" },
{ "&gtrarr;", "" },
{ "&subrarr;", "" },
{ "&suplarr;", "" },
{ "&lfisht;", "" },
{ "&rfisht;", "" },
{ "&ufisht;", "" },
{ "&dfisht;", "⥿" },
{ "&lopar;", "" },
{ "&ropar;", "" },
{ "&lbrke;", "" },
{ "&rbrke;", "" },
{ "&lbrkslu;", "" },
{ "&rbrksld;", "" },
{ "&lbrksld;", "" },
{ "&rbrkslu;", "" },
{ "&langd;", "" },
{ "&rangd;", "" },
{ "&lparlt;", "" },
{ "&rpargt;", "" },
{ "&gtlPar;", "" },
{ "&ltrPar;", "" },
{ "&vzigzag;", "" },
{ "&vangrt;", "" },
{ "&angrtvbd;", "" },
{ "&ange;", "" },
{ "&range;", "" },
{ "&dwangle;", "" },
{ "&uwangle;", "" },
{ "&angmsdaa;", "" },
{ "&angmsdab;", "" },
{ "&angmsdac;", "" },
{ "&angmsdad;", "" },
{ "&angmsdae;", "" },
{ "&angmsdaf;", "" },
{ "&angmsdag;", "" },
{ "&angmsdah;", "" },
{ "&bemptyv;", "" },
{ "&demptyv;", "" },
{ "&cemptyv;", "" },
{ "&raemptyv;", "" },
{ "&laemptyv;", "" },
{ "&ohbar;", "" },
{ "&omid;", "" },
{ "&opar;", "" },
{ "&operp;", "" },
{ "&olcross;", "" },
{ "&odsold;", "" },
{ "&olcir;", "" },
{ "&ofcir;", "⦿" },
{ "&olt;", "" },
{ "&ogt;", "" },
{ "&cirscir;", "" },
{ "&cirE;", "" },
{ "&solb;", "" },
{ "&bsolb;", "" },
{ "&boxbox;", "" },
{ "&trisb;", "" },
{ "&rtriltri;", "" },
{ "&LeftTriangleBar;", "" },
{ "&RightTriangleBar;", "" },
{ "&race;", "" },
{ "&iinfin;", "" },
{ "&infintie;", "" },
{ "&nvinfin;", "" },
{ "&eparsl;", "" },
{ "&smeparsl;", "" },
{ "&eqvparsl;", "" },
{ "&lozf;", "" },
{ "&blacklozenge;", "" },
{ "&RuleDelayed;", "" },
{ "&dsol;", "" },
{ "&xodot;", "" },
{ "&bigodot;", "" },
{ "&xoplus;", "" },
{ "&bigoplus;", "" },
{ "&xotime;", "" },
{ "&bigotimes;", "" },
{ "&xuplus;", "" },
{ "&biguplus;", "" },
{ "&xsqcup;", "" },
{ "&bigsqcup;", "" },
{ "&qint;", "" },
{ "&iiiint;", "" },
{ "&fpartint;", "" },
{ "&cirfnint;", "" },
{ "&awint;", "" },
{ "&rppolint;", "" },
{ "&scpolint;", "" },
{ "&npolint;", "" },
{ "&pointint;", "" },
{ "&quatint;", "" },
{ "&intlarhk;", "" },
{ "&pluscir;", "" },
{ "&plusacir;", "" },
{ "&simplus;", "" },
{ "&plusdu;", "" },
{ "&plussim;", "" },
{ "&plustwo;", "" },
{ "&mcomma;", "" },
{ "&minusdu;", "" },
{ "&loplus;", "" },
{ "&roplus;", "" },
{ "&Cross;", "" },
{ "&timesd;", "" },
{ "&timesbar;", "" },
{ "&smashp;", "" },
{ "&lotimes;", "" },
{ "&rotimes;", "" },
{ "&otimesas;", "" },
{ "&Otimes;", "" },
{ "&odiv;", "" },
{ "&triplus;", "" },
{ "&triminus;", "" },
{ "&tritime;", "" },
{ "&iprod;", "" },
{ "&intprod;", "" },
{ "&amalg;", "⨿" },
{ "&capdot;", "" },
{ "&ncup;", "" },
{ "&ncap;", "" },
{ "&capand;", "" },
{ "&cupor;", "" },
{ "&cupcap;", "" },
{ "&capcup;", "" },
{ "&cupbrcap;", "" },
{ "&capbrcup;", "" },
{ "&cupcup;", "" },
{ "&capcap;", "" },
{ "&ccups;", "" },
{ "&ccaps;", "" },
{ "&ccupssm;", "" },
{ "&And;", "" },
{ "&Or;", "" },
{ "&andand;", "" },
{ "&oror;", "" },
{ "&orslope;", "" },
{ "&andslope;", "" },
{ "&andv;", "" },
{ "&orv;", "" },
{ "&andd;", "" },
{ "&ord;", "" },
{ "&wedbar;", "" },
{ "&sdote;", "" },
{ "&simdot;", "" },
{ "&congdot;", "" },
{ "&easter;", "" },
{ "&apacir;", "" },
{ "&apE;", "" },
{ "&eplus;", "" },
{ "&pluse;", "" },
{ "&Esim;", "" },
{ "&Colone;", "" },
{ "&Equal;", "" },
{ "&eDDot;", "" },
{ "&ddotseq;", "" },
{ "&equivDD;", "" },
{ "&ltcir;", "" },
{ "&gtcir;", "" },
{ "&ltquest;", "" },
{ "&gtquest;", "" },
{ "&les;", "" },
{ "&LessSlantEqual;", "" },
{ "&leqslant;", "" },
{ "&ges;", "" },
{ "&GreaterSlantEqual;", "" },
{ "&geqslant;", "" },
{ "&lesdot;", "⩿" },
{ "&gesdot;", "" },
{ "&lesdoto;", "" },
{ "&gesdoto;", "" },
{ "&lesdotor;", "" },
{ "&gesdotol;", "" },
{ "&lap;", "" },
{ "&lessapprox;", "" },
{ "&gap;", "" },
{ "&gtrapprox;", "" },
{ "&lne;", "" },
{ "&lneq;", "" },
{ "&gne;", "" },
{ "&gneq;", "" },
{ "&lnap;", "" },
{ "&lnapprox;", "" },
{ "&gnap;", "" },
{ "&gnapprox;", "" },
{ "&lEg;", "" },
{ "&lesseqqgtr;", "" },
{ "&gEl;", "" },
{ "&gtreqqless;", "" },
{ "&lsime;", "" },
{ "&gsime;", "" },
{ "&lsimg;", "" },
{ "&gsiml;", "" },
{ "&lgE;", "" },
{ "&glE;", "" },
{ "&lesges;", "" },
{ "&gesles;", "" },
{ "&els;", "" },
{ "&eqslantless;", "" },
{ "&egs;", "" },
{ "&eqslantgtr;", "" },
{ "&elsdot;", "" },
{ "&egsdot;", "" },
{ "&el;", "" },
{ "&eg;", "" },
{ "&siml;", "" },
{ "&simg;", "" },
{ "&simlE;", "" },
{ "&simgE;", "" },
{ "&LessLess;", "" },
{ "&GreaterGreater;", "" },
{ "&glj;", "" },
{ "&gla;", "" },
{ "&ltcc;", "" },
{ "&gtcc;", "" },
{ "&lescc;", "" },
{ "&gescc;", "" },
{ "&smt;", "" },
{ "&lat;", "" },
{ "&smte;", "" },
{ "&late;", "" },
{ "&bumpE;", "" },
{ "&pre;", "" },
{ "&preceq;", "" },
{ "&PrecedesEqual;", "" },
{ "&sce;", "" },
{ "&succeq;", "" },
{ "&SucceedsEqual;", "" },
{ "&prE;", "" },
{ "&scE;", "" },
{ "&prnE;", "" },
{ "&precneqq;", "" },
{ "&scnE;", "" },
{ "&succneqq;", "" },
{ "&prap;", "" },
{ "&precapprox;", "" },
{ "&scap;", "" },
{ "&succapprox;", "" },
{ "&prnap;", "" },
{ "&precnapprox;", "" },
{ "&scnap;", "" },
{ "&succnapprox;", "" },
{ "&Pr;", "" },
{ "&Sc;", "" },
{ "&subdot;", "" },
{ "&supdot;", "" },
{ "&subplus;", "⪿" },
{ "&supplus;", "" },
{ "&submult;", "" },
{ "&supmult;", "" },
{ "&subedot;", "" },
{ "&supedot;", "" },
{ "&subE;", "" },
{ "&subseteqq;", "" },
{ "&supE;", "" },
{ "&supseteqq;", "" },
{ "&subsim;", "" },
{ "&supsim;", "" },
{ "&subnE;", "" },
{ "&subsetneqq;", "" },
{ "&supnE;", "" },
{ "&supsetneqq;", "" },
{ "&csub;", "" },
{ "&csup;", "" },
{ "&csube;", "" },
{ "&csupe;", "" },
{ "&subsup;", "" },
{ "&supsub;", "" },
{ "&subsub;", "" },
{ "&supsup;", "" },
{ "&suphsub;", "" },
{ "&supdsub;", "" },
{ "&forkv;", "" },
{ "&topfork;", "" },
{ "&mlcp;", "" },
{ "&Dashv;", "" },
{ "&DoubleLeftTee;", "" },
{ "&Vdashl;", "" },
{ "&Barv;", "" },
{ "&vBar;", "" },
{ "&vBarv;", "" },
{ "&Vbar;", "" },
{ "&Not;", "" },
{ "&bNot;", "" },
{ "&rnmid;", "" },
{ "&cirmid;", "" },
{ "&midcir;", "" },
{ "&topcir;", "" },
{ "&nhpar;", "" },
{ "&parsim;", "" },
{ "&parsl;", "" },
{ "&fflig;", "" },
{ "&filig;", "" },
{ "&fllig;", "" },
{ "&ffilig;", "" },
{ "&ffllig;", "" },
{ "&Ascr;", "𝒜" },
{ "&Cscr;", "𝒞" },
{ "&Dscr;", "𝒟" },
{ "&Gscr;", "𝒢" },
{ "&Jscr;", "𝒥" },
{ "&Kscr;", "𝒦" },
{ "&Nscr;", "𝒩" },
{ "&Oscr;", "𝒪" },
{ "&Pscr;", "𝒫" },
{ "&Qscr;", "𝒬" },
{ "&Sscr;", "𝒮" },
{ "&Tscr;", "𝒯" },
{ "&Uscr;", "𝒰" },
{ "&Vscr;", "𝒱" },
{ "&Wscr;", "𝒲" },
{ "&Xscr;", "𝒳" },
{ "&Yscr;", "𝒴" },
{ "&Zscr;", "𝒵" },
{ "&ascr;", "𝒶" },
{ "&bscr;", "𝒷" },
{ "&cscr;", "𝒸" },
{ "&dscr;", "𝒹" },
{ "&fscr;", "𝒻" },
{ "&hscr;", "𝒽" },
{ "&iscr;", "𝒾" },
{ "&jscr;", "𝒿" },
{ "&kscr;", "𝓀" },
{ "&lscr;", "𝓁" },
{ "&mscr;", "𝓂" },
{ "&nscr;", "𝓃" },
{ "&pscr;", "𝓅" },
{ "&qscr;", "𝓆" },
{ "&rscr;", "𝓇" },
{ "&sscr;", "𝓈" },
{ "&tscr;", "𝓉" },
{ "&uscr;", "𝓊" },
{ "&vscr;", "𝓋" },
{ "&wscr;", "𝓌" },
{ "&xscr;", "𝓍" },
{ "&yscr;", "𝓎" },
{ "&zscr;", "𝓏" },
{ "&Afr;", "𝔄" },
{ "&Bfr;", "𝔅" },
{ "&Dfr;", "𝔇" },
{ "&Efr;", "𝔈" },
{ "&Ffr;", "𝔉" },
{ "&Gfr;", "𝔊" },
{ "&Jfr;", "𝔍" },
{ "&Kfr;", "𝔎" },
{ "&Lfr;", "𝔏" },
{ "&Mfr;", "𝔐" },
{ "&Nfr;", "𝔑" },
{ "&Ofr;", "𝔒" },
{ "&Pfr;", "𝔓" },
{ "&Qfr;", "𝔔" },
{ "&Sfr;", "𝔖" },
{ "&Tfr;", "𝔗" },
{ "&Ufr;", "𝔘" },
{ "&Vfr;", "𝔙" },
{ "&Wfr;", "𝔚" },
{ "&Xfr;", "𝔛" },
{ "&Yfr;", "𝔜" },
{ "&afr;", "𝔞" },
{ "&bfr;", "𝔟" },
{ "&cfr;", "𝔠" },
{ "&dfr;", "𝔡" },
{ "&efr;", "𝔢" },
{ "&ffr;", "𝔣" },
{ "&gfr;", "𝔤" },
{ "&hfr;", "𝔥" },
{ "&ifr;", "𝔦" },
{ "&jfr;", "𝔧" },
{ "&kfr;", "𝔨" },
{ "&lfr;", "𝔩" },
{ "&mfr;", "𝔪" },
{ "&nfr;", "𝔫" },
{ "&ofr;", "𝔬" },
{ "&pfr;", "𝔭" },
{ "&qfr;", "𝔮" },
{ "&rfr;", "𝔯" },
{ "&sfr;", "𝔰" },
{ "&tfr;", "𝔱" },
{ "&ufr;", "𝔲" },
{ "&vfr;", "𝔳" },
{ "&wfr;", "𝔴" },
{ "&xfr;", "𝔵" },
{ "&yfr;", "𝔶" },
{ "&zfr;", "𝔷" },
{ "&Aopf;", "𝔸" },
{ "&Bopf;", "𝔹" },
{ "&Dopf;", "𝔻" },
{ "&Eopf;", "𝔼" },
{ "&Fopf;", "𝔽" },
{ "&Gopf;", "𝔾" },
{ "&Iopf;", "𝕀" },
{ "&Jopf;", "𝕁" },
{ "&Kopf;", "𝕂" },
{ "&Lopf;", "𝕃" },
{ "&Mopf;", "𝕄" },
{ "&Oopf;", "𝕆" },
{ "&Sopf;", "𝕊" },
{ "&Topf;", "𝕋" },
{ "&Uopf;", "𝕌" },
{ "&Vopf;", "𝕍" },
{ "&Wopf;", "𝕎" },
{ "&Xopf;", "𝕏" },
{ "&Yopf;", "𝕐" },
{ "&aopf;", "𝕒" },
{ "&bopf;", "𝕓" },
{ "&copf;", "𝕔" },
{ "&dopf;", "𝕕" },
{ "&eopf;", "𝕖" },
{ "&fopf;", "𝕗" },
{ "&gopf;", "𝕘" },
{ "&hopf;", "𝕙" },
{ "&iopf;", "𝕚" },
{ "&jopf;", "𝕛" },
{ "&kopf;", "𝕜" },
{ "&lopf;", "𝕝" },
{ "&mopf;", "𝕞" },
{ "&nopf;", "𝕟" },
{ "&oopf;", "𝕠" },
{ "&popf;", "𝕡" },
{ "&qopf;", "𝕢" },
{ "&ropf;", "𝕣" },
{ "&sopf;", "𝕤" },
{ "&topf;", "𝕥" },
{ "&uopf;", "𝕦" },
{ "&vopf;", "𝕧" },
{ "&wopf;", "𝕨" },
{ "&xopf;", "𝕩" },
{ "&yopf;", "𝕪" },
{ "&zopf;", "𝕫" }
]
# 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
2013-08-23 04:15:04 +00:00
# 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
2013-08-23 04:15:04 +00:00
end
def encode(<< codepoint :: utf8, rest :: binary >>, out) do
encode rest, out <> encode(codepoint)
end
def encode("", out) do
out
2013-08-23 04:15:04 +00:00
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, "")
2013-08-23 04:15:04 +00:00
defp strip_numeric(str) do
String.split str, ";"
end
end