Utility functions for dealing with those ampersanded paraphrases of characters which seemed like a good idea in around the year 2000.

§1. The following returns TRUE if entity is a valid HTML5 entity: note that this includes some with no trailing semicolon. (I didn't make these rules.)

If the pointers A and B are non-null, they are set to the Unicode code points for the character referred to by the entity. B is zero unless this is a digraph.

If the entity is not valid, neither A nor B is written to, and FALSE is returned.

int HTMLEntities::parse(text_stream *entity, inchar32_t *A, inchar32_t *B) {
    if (Str::get_at(entity, 0) != '&') return FALSE;
    if (Str::get_at(entity, 1) == '#') {
        int base = 10, from = 2;
        if ((Str::get_at(entity, 2) == 'x') || (Str::get_at(entity, 2) == 'X')) {
            base = 16; from = 3;
        }
        int total = 0, dc = 0;
        while (Str::get_at(entity, from)) {
            int dval = -1;
            inchar32_t digit = Str::get_at(entity, from);
            if ((digit >= '0') && (digit <= '9')) dval = (int) digit - (int) '0';
            else if ((base == 16) && (digit >= 'a') && (digit <= 'f')) dval = 10 + (int) digit - (int) 'a';
            else if ((base == 16) && (digit >= 'A') && (digit <= 'F')) dval = 10 + (int) digit - (int) 'A';
            else if (digit == ';') break;
            else return FALSE;
            total = base*total + dval; dc++;
            from++;
            if (dc > 7) return FALSE;
        }
        if (dc == 0) return FALSE;
        if (A) *A = (inchar32_t)total; if (B) *B = 0;
        return TRUE;
    } else {
        switch (Str::get_at(entity, 1)) {
            case 'A':
                if (Str::eq(entity, I"&AElig")) { if (A) *A = 198; return TRUE; }
                if (Str::eq(entity, I"&AElig;")) { if (A) *A = 198; return TRUE; }
                if (Str::eq(entity, I"&AMP")) { if (A) *A = 38; return TRUE; }
                if (Str::eq(entity, I"&AMP;")) { if (A) *A = 38; return TRUE; }
                if (Str::eq(entity, I"&Aacute")) { if (A) *A = 193; return TRUE; }
                if (Str::eq(entity, I"&Aacute;")) { if (A) *A = 193; return TRUE; }
                if (Str::eq(entity, I"&Abreve;")) { if (A) *A = 258; return TRUE; }
                if (Str::eq(entity, I"&Acirc")) { if (A) *A = 194; return TRUE; }
                if (Str::eq(entity, I"&Acirc;")) { if (A) *A = 194; return TRUE; }
                if (Str::eq(entity, I"&Acy;")) { if (A) *A = 1040; return TRUE; }
                if (Str::eq(entity, I"&Afr;")) { if (A) *A = 120068; return TRUE; }
                if (Str::eq(entity, I"&Agrave")) { if (A) *A = 192; return TRUE; }
                if (Str::eq(entity, I"&Agrave;")) { if (A) *A = 192; return TRUE; }
                if (Str::eq(entity, I"&Alpha;")) { if (A) *A = 913; return TRUE; }
                if (Str::eq(entity, I"&Amacr;")) { if (A) *A = 256; return TRUE; }
                if (Str::eq(entity, I"&And;")) { if (A) *A = 10835; return TRUE; }
                if (Str::eq(entity, I"&Aogon;")) { if (A) *A = 260; return TRUE; }
                if (Str::eq(entity, I"&Aopf;")) { if (A) *A = 120120; return TRUE; }
                if (Str::eq(entity, I"&ApplyFunction;")) { if (A) *A = 8289; return TRUE; }
                if (Str::eq(entity, I"&Aring")) { if (A) *A = 197; return TRUE; }
                if (Str::eq(entity, I"&Aring;")) { if (A) *A = 197; return TRUE; }
                if (Str::eq(entity, I"&Ascr;")) { if (A) *A = 119964; return TRUE; }
                if (Str::eq(entity, I"&Assign;")) { if (A) *A = 8788; return TRUE; }
                if (Str::eq(entity, I"&Atilde")) { if (A) *A = 195; return TRUE; }
                if (Str::eq(entity, I"&Atilde;")) { if (A) *A = 195; return TRUE; }
                if (Str::eq(entity, I"&Auml")) { if (A) *A = 196; return TRUE; }
                if (Str::eq(entity, I"&Auml;")) { if (A) *A = 196; return TRUE; }
                break;
            case 'B':
                if (Str::eq(entity, I"&Backslash;")) { if (A) *A = 8726; return TRUE; }
                if (Str::eq(entity, I"&Barv;")) { if (A) *A = 10983; return TRUE; }
                if (Str::eq(entity, I"&Barwed;")) { if (A) *A = 8966; return TRUE; }
                if (Str::eq(entity, I"&Bcy;")) { if (A) *A = 1041; return TRUE; }
                if (Str::eq(entity, I"&Because;")) { if (A) *A = 8757; return TRUE; }
                if (Str::eq(entity, I"&Bernoullis;")) { if (A) *A = 8492; return TRUE; }
                if (Str::eq(entity, I"&Beta;")) { if (A) *A = 914; return TRUE; }
                if (Str::eq(entity, I"&Bfr;")) { if (A) *A = 120069; return TRUE; }
                if (Str::eq(entity, I"&Bopf;")) { if (A) *A = 120121; return TRUE; }
                if (Str::eq(entity, I"&Breve;")) { if (A) *A = 728; return TRUE; }
                if (Str::eq(entity, I"&Bscr;")) { if (A) *A = 8492; return TRUE; }
                if (Str::eq(entity, I"&Bumpeq;")) { if (A) *A = 8782; return TRUE; }
                break;
            case 'C':
                if (Str::eq(entity, I"&CHcy;")) { if (A) *A = 1063; return TRUE; }
                if (Str::eq(entity, I"&COPY")) { if (A) *A = 169; return TRUE; }
                if (Str::eq(entity, I"&COPY;")) { if (A) *A = 169; return TRUE; }
                if (Str::eq(entity, I"&Cacute;")) { if (A) *A = 262; return TRUE; }
                if (Str::eq(entity, I"&Cap;")) { if (A) *A = 8914; return TRUE; }
                if (Str::eq(entity, I"&CapitalDifferentialD;")) { if (A) *A = 8517; return TRUE; }
                if (Str::eq(entity, I"&Cayleys;")) { if (A) *A = 8493; return TRUE; }
                if (Str::eq(entity, I"&Ccaron;")) { if (A) *A = 268; return TRUE; }
                if (Str::eq(entity, I"&Ccedil")) { if (A) *A = 199; return TRUE; }
                if (Str::eq(entity, I"&Ccedil;")) { if (A) *A = 199; return TRUE; }
                if (Str::eq(entity, I"&Ccirc;")) { if (A) *A = 264; return TRUE; }
                if (Str::eq(entity, I"&Cconint;")) { if (A) *A = 8752; return TRUE; }
                if (Str::eq(entity, I"&Cdot;")) { if (A) *A = 266; return TRUE; }
                if (Str::eq(entity, I"&Cedilla;")) { if (A) *A = 184; return TRUE; }
                if (Str::eq(entity, I"&CenterDot;")) { if (A) *A = 183; return TRUE; }
                if (Str::eq(entity, I"&Cfr;")) { if (A) *A = 8493; return TRUE; }
                if (Str::eq(entity, I"&Chi;")) { if (A) *A = 935; return TRUE; }
                if (Str::eq(entity, I"&CircleDot;")) { if (A) *A = 8857; return TRUE; }
                if (Str::eq(entity, I"&CircleMinus;")) { if (A) *A = 8854; return TRUE; }
                if (Str::eq(entity, I"&CirclePlus;")) { if (A) *A = 8853; return TRUE; }
                if (Str::eq(entity, I"&CircleTimes;")) { if (A) *A = 8855; return TRUE; }
                if (Str::eq(entity, I"&ClockwiseContourIntegral;")) { if (A) *A = 8754; return TRUE; }
                if (Str::eq(entity, I"&CloseCurlyDoubleQuote;")) { if (A) *A = 8221; return TRUE; }
                if (Str::eq(entity, I"&CloseCurlyQuote;")) { if (A) *A = 8217; return TRUE; }
                if (Str::eq(entity, I"&Colon;")) { if (A) *A = 8759; return TRUE; }
                if (Str::eq(entity, I"&Colone;")) { if (A) *A = 10868; return TRUE; }
                if (Str::eq(entity, I"&Congruent;")) { if (A) *A = 8801; return TRUE; }
                if (Str::eq(entity, I"&Conint;")) { if (A) *A = 8751; return TRUE; }
                if (Str::eq(entity, I"&ContourIntegral;")) { if (A) *A = 8750; return TRUE; }
                if (Str::eq(entity, I"&Copf;")) { if (A) *A = 8450; return TRUE; }
                if (Str::eq(entity, I"&Coproduct;")) { if (A) *A = 8720; return TRUE; }
                if (Str::eq(entity, I"&CounterClockwiseContourIntegral;")) { if (A) *A = 8755; return TRUE; }
                if (Str::eq(entity, I"&Cross;")) { if (A) *A = 10799; return TRUE; }
                if (Str::eq(entity, I"&Cscr;")) { if (A) *A = 119966; return TRUE; }
                if (Str::eq(entity, I"&Cup;")) { if (A) *A = 8915; return TRUE; }
                if (Str::eq(entity, I"&CupCap;")) { if (A) *A = 8781; return TRUE; }
                break;
            case 'D':
                if (Str::eq(entity, I"&DD;")) { if (A) *A = 8517; return TRUE; }
                if (Str::eq(entity, I"&DDotrahd;")) { if (A) *A = 10513; return TRUE; }
                if (Str::eq(entity, I"&DJcy;")) { if (A) *A = 1026; return TRUE; }
                if (Str::eq(entity, I"&DScy;")) { if (A) *A = 1029; return TRUE; }
                if (Str::eq(entity, I"&DZcy;")) { if (A) *A = 1039; return TRUE; }
                if (Str::eq(entity, I"&Dagger;")) { if (A) *A = 8225; return TRUE; }
                if (Str::eq(entity, I"&Darr;")) { if (A) *A = 8609; return TRUE; }
                if (Str::eq(entity, I"&Dashv;")) { if (A) *A = 10980; return TRUE; }
                if (Str::eq(entity, I"&Dcaron;")) { if (A) *A = 270; return TRUE; }
                if (Str::eq(entity, I"&Dcy;")) { if (A) *A = 1044; return TRUE; }
                if (Str::eq(entity, I"&Del;")) { if (A) *A = 8711; return TRUE; }
                if (Str::eq(entity, I"&Delta;")) { if (A) *A = 916; return TRUE; }
                if (Str::eq(entity, I"&Dfr;")) { if (A) *A = 120071; return TRUE; }
                if (Str::eq(entity, I"&DiacriticalAcute;")) { if (A) *A = 180; return TRUE; }
                if (Str::eq(entity, I"&DiacriticalDot;")) { if (A) *A = 729; return TRUE; }
                if (Str::eq(entity, I"&DiacriticalDoubleAcute;")) { if (A) *A = 733; return TRUE; }
                if (Str::eq(entity, I"&DiacriticalGrave;")) { if (A) *A = 96; return TRUE; }
                if (Str::eq(entity, I"&DiacriticalTilde;")) { if (A) *A = 732; return TRUE; }
                if (Str::eq(entity, I"&Diamond;")) { if (A) *A = 8900; return TRUE; }
                if (Str::eq(entity, I"&DifferentialD;")) { if (A) *A = 8518; return TRUE; }
                if (Str::eq(entity, I"&Dopf;")) { if (A) *A = 120123; return TRUE; }
                if (Str::eq(entity, I"&Dot;")) { if (A) *A = 168; return TRUE; }
                if (Str::eq(entity, I"&DotDot;")) { if (A) *A = 8412; return TRUE; }
                if (Str::eq(entity, I"&DotEqual;")) { if (A) *A = 8784; return TRUE; }
                if (Str::eq(entity, I"&DoubleContourIntegral;")) { if (A) *A = 8751; return TRUE; }
                if (Str::eq(entity, I"&DoubleDot;")) { if (A) *A = 168; return TRUE; }
                if (Str::eq(entity, I"&DoubleDownArrow;")) { if (A) *A = 8659; return TRUE; }
                if (Str::eq(entity, I"&DoubleLeftArrow;")) { if (A) *A = 8656; return TRUE; }
                if (Str::eq(entity, I"&DoubleLeftRightArrow;")) { if (A) *A = 8660; return TRUE; }
                if (Str::eq(entity, I"&DoubleLeftTee;")) { if (A) *A = 10980; return TRUE; }
                if (Str::eq(entity, I"&DoubleLongLeftArrow;")) { if (A) *A = 10232; return TRUE; }
                if (Str::eq(entity, I"&DoubleLongLeftRightArrow;")) { if (A) *A = 10234; return TRUE; }
                if (Str::eq(entity, I"&DoubleLongRightArrow;")) { if (A) *A = 10233; return TRUE; }
                if (Str::eq(entity, I"&DoubleRightArrow;")) { if (A) *A = 8658; return TRUE; }
                if (Str::eq(entity, I"&DoubleRightTee;")) { if (A) *A = 8872; return TRUE; }
                if (Str::eq(entity, I"&DoubleUpArrow;")) { if (A) *A = 8657; return TRUE; }
                if (Str::eq(entity, I"&DoubleUpDownArrow;")) { if (A) *A = 8661; return TRUE; }
                if (Str::eq(entity, I"&DoubleVerticalBar;")) { if (A) *A = 8741; return TRUE; }
                if (Str::eq(entity, I"&DownArrow;")) { if (A) *A = 8595; return TRUE; }
                if (Str::eq(entity, I"&DownArrowBar;")) { if (A) *A = 10515; return TRUE; }
                if (Str::eq(entity, I"&DownArrowUpArrow;")) { if (A) *A = 8693; return TRUE; }
                if (Str::eq(entity, I"&DownBreve;")) { if (A) *A = 785; return TRUE; }
                if (Str::eq(entity, I"&DownLeftRightVector;")) { if (A) *A = 10576; return TRUE; }
                if (Str::eq(entity, I"&DownLeftTeeVector;")) { if (A) *A = 10590; return TRUE; }
                if (Str::eq(entity, I"&DownLeftVector;")) { if (A) *A = 8637; return TRUE; }
                if (Str::eq(entity, I"&DownLeftVectorBar;")) { if (A) *A = 10582; return TRUE; }
                if (Str::eq(entity, I"&DownRightTeeVector;")) { if (A) *A = 10591; return TRUE; }
                if (Str::eq(entity, I"&DownRightVector;")) { if (A) *A = 8641; return TRUE; }
                if (Str::eq(entity, I"&DownRightVectorBar;")) { if (A) *A = 10583; return TRUE; }
                if (Str::eq(entity, I"&DownTee;")) { if (A) *A = 8868; return TRUE; }
                if (Str::eq(entity, I"&DownTeeArrow;")) { if (A) *A = 8615; return TRUE; }
                if (Str::eq(entity, I"&Downarrow;")) { if (A) *A = 8659; return TRUE; }
                if (Str::eq(entity, I"&Dscr;")) { if (A) *A = 119967; return TRUE; }
                if (Str::eq(entity, I"&Dstrok;")) { if (A) *A = 272; return TRUE; }
                break;
            case 'E':
                if (Str::eq(entity, I"&ENG;")) { if (A) *A = 330; return TRUE; }
                if (Str::eq(entity, I"&ETH")) { if (A) *A = 208; return TRUE; }
                if (Str::eq(entity, I"&ETH;")) { if (A) *A = 208; return TRUE; }
                if (Str::eq(entity, I"&Eacute")) { if (A) *A = 201; return TRUE; }
                if (Str::eq(entity, I"&Eacute;")) { if (A) *A = 201; return TRUE; }
                if (Str::eq(entity, I"&Ecaron;")) { if (A) *A = 282; return TRUE; }
                if (Str::eq(entity, I"&Ecirc")) { if (A) *A = 202; return TRUE; }
                if (Str::eq(entity, I"&Ecirc;")) { if (A) *A = 202; return TRUE; }
                if (Str::eq(entity, I"&Ecy;")) { if (A) *A = 1069; return TRUE; }
                if (Str::eq(entity, I"&Edot;")) { if (A) *A = 278; return TRUE; }
                if (Str::eq(entity, I"&Efr;")) { if (A) *A = 120072; return TRUE; }
                if (Str::eq(entity, I"&Egrave")) { if (A) *A = 200; return TRUE; }
                if (Str::eq(entity, I"&Egrave;")) { if (A) *A = 200; return TRUE; }
                if (Str::eq(entity, I"&Element;")) { if (A) *A = 8712; return TRUE; }
                if (Str::eq(entity, I"&Emacr;")) { if (A) *A = 274; return TRUE; }
                if (Str::eq(entity, I"&EmptySmallSquare;")) { if (A) *A = 9723; return TRUE; }
                if (Str::eq(entity, I"&EmptyVerySmallSquare;")) { if (A) *A = 9643; return TRUE; }
                if (Str::eq(entity, I"&Eogon;")) { if (A) *A = 280; return TRUE; }
                if (Str::eq(entity, I"&Eopf;")) { if (A) *A = 120124; return TRUE; }
                if (Str::eq(entity, I"&Epsilon;")) { if (A) *A = 917; return TRUE; }
                if (Str::eq(entity, I"&Equal;")) { if (A) *A = 10869; return TRUE; }
                if (Str::eq(entity, I"&EqualTilde;")) { if (A) *A = 8770; return TRUE; }
                if (Str::eq(entity, I"&Equilibrium;")) { if (A) *A = 8652; return TRUE; }
                if (Str::eq(entity, I"&Escr;")) { if (A) *A = 8496; return TRUE; }
                if (Str::eq(entity, I"&Esim;")) { if (A) *A = 10867; return TRUE; }
                if (Str::eq(entity, I"&Eta;")) { if (A) *A = 919; return TRUE; }
                if (Str::eq(entity, I"&Euml")) { if (A) *A = 203; return TRUE; }
                if (Str::eq(entity, I"&Euml;")) { if (A) *A = 203; return TRUE; }
                if (Str::eq(entity, I"&Exists;")) { if (A) *A = 8707; return TRUE; }
                if (Str::eq(entity, I"&ExponentialE;")) { if (A) *A = 8519; return TRUE; }
                break;
            case 'F':
                if (Str::eq(entity, I"&Fcy;")) { if (A) *A = 1060; return TRUE; }
                if (Str::eq(entity, I"&Ffr;")) { if (A) *A = 120073; return TRUE; }
                if (Str::eq(entity, I"&FilledSmallSquare;")) { if (A) *A = 9724; return TRUE; }
                if (Str::eq(entity, I"&FilledVerySmallSquare;")) { if (A) *A = 9642; return TRUE; }
                if (Str::eq(entity, I"&Fopf;")) { if (A) *A = 120125; return TRUE; }
                if (Str::eq(entity, I"&ForAll;")) { if (A) *A = 8704; return TRUE; }
                if (Str::eq(entity, I"&Fouriertrf;")) { if (A) *A = 8497; return TRUE; }
                if (Str::eq(entity, I"&Fscr;")) { if (A) *A = 8497; return TRUE; }
                break;
            case 'G':
                if (Str::eq(entity, I"&GJcy;")) { if (A) *A = 1027; return TRUE; }
                if (Str::eq(entity, I"&GT")) { if (A) *A = 62; return TRUE; }
                if (Str::eq(entity, I"&GT;")) { if (A) *A = 62; return TRUE; }
                if (Str::eq(entity, I"&Gamma;")) { if (A) *A = 915; return TRUE; }
                if (Str::eq(entity, I"&Gammad;")) { if (A) *A = 988; return TRUE; }
                if (Str::eq(entity, I"&Gbreve;")) { if (A) *A = 286; return TRUE; }
                if (Str::eq(entity, I"&Gcedil;")) { if (A) *A = 290; return TRUE; }
                if (Str::eq(entity, I"&Gcirc;")) { if (A) *A = 284; return TRUE; }
                if (Str::eq(entity, I"&Gcy;")) { if (A) *A = 1043; return TRUE; }
                if (Str::eq(entity, I"&Gdot;")) { if (A) *A = 288; return TRUE; }
                if (Str::eq(entity, I"&Gfr;")) { if (A) *A = 120074; return TRUE; }
                if (Str::eq(entity, I"&Gg;")) { if (A) *A = 8921; return TRUE; }
                if (Str::eq(entity, I"&Gopf;")) { if (A) *A = 120126; return TRUE; }
                if (Str::eq(entity, I"&GreaterEqual;")) { if (A) *A = 8805; return TRUE; }
                if (Str::eq(entity, I"&GreaterEqualLess;")) { if (A) *A = 8923; return TRUE; }
                if (Str::eq(entity, I"&GreaterFullEqual;")) { if (A) *A = 8807; return TRUE; }
                if (Str::eq(entity, I"&GreaterGreater;")) { if (A) *A = 10914; return TRUE; }
                if (Str::eq(entity, I"&GreaterLess;")) { if (A) *A = 8823; return TRUE; }
                if (Str::eq(entity, I"&GreaterSlantEqual;")) { if (A) *A = 10878; return TRUE; }
                if (Str::eq(entity, I"&GreaterTilde;")) { if (A) *A = 8819; return TRUE; }
                if (Str::eq(entity, I"&Gscr;")) { if (A) *A = 119970; return TRUE; }
                if (Str::eq(entity, I"&Gt;")) { if (A) *A = 8811; return TRUE; }
                break;
            case 'H':
                if (Str::eq(entity, I"&HARDcy;")) { if (A) *A = 1066; return TRUE; }
                if (Str::eq(entity, I"&Hacek;")) { if (A) *A = 711; return TRUE; }
                if (Str::eq(entity, I"&Hat;")) { if (A) *A = 94; return TRUE; }
                if (Str::eq(entity, I"&Hcirc;")) { if (A) *A = 292; return TRUE; }
                if (Str::eq(entity, I"&Hfr;")) { if (A) *A = 8460; return TRUE; }
                if (Str::eq(entity, I"&HilbertSpace;")) { if (A) *A = 8459; return TRUE; }
                if (Str::eq(entity, I"&Hopf;")) { if (A) *A = 8461; return TRUE; }
                if (Str::eq(entity, I"&HorizontalLine;")) { if (A) *A = 9472; return TRUE; }
                if (Str::eq(entity, I"&Hscr;")) { if (A) *A = 8459; return TRUE; }
                if (Str::eq(entity, I"&Hstrok;")) { if (A) *A = 294; return TRUE; }
                if (Str::eq(entity, I"&HumpDownHump;")) { if (A) *A = 8782; return TRUE; }
                if (Str::eq(entity, I"&HumpEqual;")) { if (A) *A = 8783; return TRUE; }
                break;
            case 'I':
                if (Str::eq(entity, I"&IEcy;")) { if (A) *A = 1045; return TRUE; }
                if (Str::eq(entity, I"&IJlig;")) { if (A) *A = 306; return TRUE; }
                if (Str::eq(entity, I"&IOcy;")) { if (A) *A = 1025; return TRUE; }
                if (Str::eq(entity, I"&Iacute")) { if (A) *A = 205; return TRUE; }
                if (Str::eq(entity, I"&Iacute;")) { if (A) *A = 205; return TRUE; }
                if (Str::eq(entity, I"&Icirc")) { if (A) *A = 206; return TRUE; }
                if (Str::eq(entity, I"&Icirc;")) { if (A) *A = 206; return TRUE; }
                if (Str::eq(entity, I"&Icy;")) { if (A) *A = 1048; return TRUE; }
                if (Str::eq(entity, I"&Idot;")) { if (A) *A = 304; return TRUE; }
                if (Str::eq(entity, I"&Ifr;")) { if (A) *A = 8465; return TRUE; }
                if (Str::eq(entity, I"&Igrave")) { if (A) *A = 204; return TRUE; }
                if (Str::eq(entity, I"&Igrave;")) { if (A) *A = 204; return TRUE; }
                if (Str::eq(entity, I"&Im;")) { if (A) *A = 8465; return TRUE; }
                if (Str::eq(entity, I"&Imacr;")) { if (A) *A = 298; return TRUE; }
                if (Str::eq(entity, I"&ImaginaryI;")) { if (A) *A = 8520; return TRUE; }
                if (Str::eq(entity, I"&Implies;")) { if (A) *A = 8658; return TRUE; }
                if (Str::eq(entity, I"&Int;")) { if (A) *A = 8748; return TRUE; }
                if (Str::eq(entity, I"&Integral;")) { if (A) *A = 8747; return TRUE; }
                if (Str::eq(entity, I"&Intersection;")) { if (A) *A = 8898; return TRUE; }
                if (Str::eq(entity, I"&InvisibleComma;")) { if (A) *A = 8291; return TRUE; }
                if (Str::eq(entity, I"&InvisibleTimes;")) { if (A) *A = 8290; return TRUE; }
                if (Str::eq(entity, I"&Iogon;")) { if (A) *A = 302; return TRUE; }
                if (Str::eq(entity, I"&Iopf;")) { if (A) *A = 120128; return TRUE; }
                if (Str::eq(entity, I"&Iota;")) { if (A) *A = 921; return TRUE; }
                if (Str::eq(entity, I"&Iscr;")) { if (A) *A = 8464; return TRUE; }
                if (Str::eq(entity, I"&Itilde;")) { if (A) *A = 296; return TRUE; }
                if (Str::eq(entity, I"&Iukcy;")) { if (A) *A = 1030; return TRUE; }
                if (Str::eq(entity, I"&Iuml")) { if (A) *A = 207; return TRUE; }
                if (Str::eq(entity, I"&Iuml;")) { if (A) *A = 207; return TRUE; }
                break;
            case 'J':
                if (Str::eq(entity, I"&Jcirc;")) { if (A) *A = 308; return TRUE; }
                if (Str::eq(entity, I"&Jcy;")) { if (A) *A = 1049; return TRUE; }
                if (Str::eq(entity, I"&Jfr;")) { if (A) *A = 120077; return TRUE; }
                if (Str::eq(entity, I"&Jopf;")) { if (A) *A = 120129; return TRUE; }
                if (Str::eq(entity, I"&Jscr;")) { if (A) *A = 119973; return TRUE; }
                if (Str::eq(entity, I"&Jsercy;")) { if (A) *A = 1032; return TRUE; }
                if (Str::eq(entity, I"&Jukcy;")) { if (A) *A = 1028; return TRUE; }
                break;
            case 'K':
                if (Str::eq(entity, I"&KHcy;")) { if (A) *A = 1061; return TRUE; }
                if (Str::eq(entity, I"&KJcy;")) { if (A) *A = 1036; return TRUE; }
                if (Str::eq(entity, I"&Kappa;")) { if (A) *A = 922; return TRUE; }
                if (Str::eq(entity, I"&Kcedil;")) { if (A) *A = 310; return TRUE; }
                if (Str::eq(entity, I"&Kcy;")) { if (A) *A = 1050; return TRUE; }
                if (Str::eq(entity, I"&Kfr;")) { if (A) *A = 120078; return TRUE; }
                if (Str::eq(entity, I"&Kopf;")) { if (A) *A = 120130; return TRUE; }
                if (Str::eq(entity, I"&Kscr;")) { if (A) *A = 119974; return TRUE; }
                break;
            case 'L':
                if (Str::eq(entity, I"&LJcy;")) { if (A) *A = 1033; return TRUE; }
                if (Str::eq(entity, I"&LT")) { if (A) *A = 60; return TRUE; }
                if (Str::eq(entity, I"&LT;")) { if (A) *A = 60; return TRUE; }
                if (Str::eq(entity, I"&Lacute;")) { if (A) *A = 313; return TRUE; }
                if (Str::eq(entity, I"&Lambda;")) { if (A) *A = 923; return TRUE; }
                if (Str::eq(entity, I"&Lang;")) { if (A) *A = 10218; return TRUE; }
                if (Str::eq(entity, I"&Laplacetrf;")) { if (A) *A = 8466; return TRUE; }
                if (Str::eq(entity, I"&Larr;")) { if (A) *A = 8606; return TRUE; }
                if (Str::eq(entity, I"&Lcaron;")) { if (A) *A = 317; return TRUE; }
                if (Str::eq(entity, I"&Lcedil;")) { if (A) *A = 315; return TRUE; }
                if (Str::eq(entity, I"&Lcy;")) { if (A) *A = 1051; return TRUE; }
                if (Str::eq(entity, I"&LeftAngleBracket;")) { if (A) *A = 10216; return TRUE; }
                if (Str::eq(entity, I"&LeftArrow;")) { if (A) *A = 8592; return TRUE; }
                if (Str::eq(entity, I"&LeftArrowBar;")) { if (A) *A = 8676; return TRUE; }
                if (Str::eq(entity, I"&LeftArrowRightArrow;")) { if (A) *A = 8646; return TRUE; }
                if (Str::eq(entity, I"&LeftCeiling;")) { if (A) *A = 8968; return TRUE; }
                if (Str::eq(entity, I"&LeftDoubleBracket;")) { if (A) *A = 10214; return TRUE; }
                if (Str::eq(entity, I"&LeftDownTeeVector;")) { if (A) *A = 10593; return TRUE; }
                if (Str::eq(entity, I"&LeftDownVector;")) { if (A) *A = 8643; return TRUE; }
                if (Str::eq(entity, I"&LeftDownVectorBar;")) { if (A) *A = 10585; return TRUE; }
                if (Str::eq(entity, I"&LeftFloor;")) { if (A) *A = 8970; return TRUE; }
                if (Str::eq(entity, I"&LeftRightArrow;")) { if (A) *A = 8596; return TRUE; }
                if (Str::eq(entity, I"&LeftRightVector;")) { if (A) *A = 10574; return TRUE; }
                if (Str::eq(entity, I"&LeftTee;")) { if (A) *A = 8867; return TRUE; }
                if (Str::eq(entity, I"&LeftTeeArrow;")) { if (A) *A = 8612; return TRUE; }
                if (Str::eq(entity, I"&LeftTeeVector;")) { if (A) *A = 10586; return TRUE; }
                if (Str::eq(entity, I"&LeftTriangle;")) { if (A) *A = 8882; return TRUE; }
                if (Str::eq(entity, I"&LeftTriangleBar;")) { if (A) *A = 10703; return TRUE; }
                if (Str::eq(entity, I"&LeftTriangleEqual;")) { if (A) *A = 8884; return TRUE; }
                if (Str::eq(entity, I"&LeftUpDownVector;")) { if (A) *A = 10577; return TRUE; }
                if (Str::eq(entity, I"&LeftUpTeeVector;")) { if (A) *A = 10592; return TRUE; }
                if (Str::eq(entity, I"&LeftUpVector;")) { if (A) *A = 8639; return TRUE; }
                if (Str::eq(entity, I"&LeftUpVectorBar;")) { if (A) *A = 10584; return TRUE; }
                if (Str::eq(entity, I"&LeftVector;")) { if (A) *A = 8636; return TRUE; }
                if (Str::eq(entity, I"&LeftVectorBar;")) { if (A) *A = 10578; return TRUE; }
                if (Str::eq(entity, I"&Leftarrow;")) { if (A) *A = 8656; return TRUE; }
                if (Str::eq(entity, I"&Leftrightarrow;")) { if (A) *A = 8660; return TRUE; }
                if (Str::eq(entity, I"&LessEqualGreater;")) { if (A) *A = 8922; return TRUE; }
                if (Str::eq(entity, I"&LessFullEqual;")) { if (A) *A = 8806; return TRUE; }
                if (Str::eq(entity, I"&LessGreater;")) { if (A) *A = 8822; return TRUE; }
                if (Str::eq(entity, I"&LessLess;")) { if (A) *A = 10913; return TRUE; }
                if (Str::eq(entity, I"&LessSlantEqual;")) { if (A) *A = 10877; return TRUE; }
                if (Str::eq(entity, I"&LessTilde;")) { if (A) *A = 8818; return TRUE; }
                if (Str::eq(entity, I"&Lfr;")) { if (A) *A = 120079; return TRUE; }
                if (Str::eq(entity, I"&Ll;")) { if (A) *A = 8920; return TRUE; }
                if (Str::eq(entity, I"&Lleftarrow;")) { if (A) *A = 8666; return TRUE; }
                if (Str::eq(entity, I"&Lmidot;")) { if (A) *A = 319; return TRUE; }
                if (Str::eq(entity, I"&LongLeftArrow;")) { if (A) *A = 10229; return TRUE; }
                if (Str::eq(entity, I"&LongLeftRightArrow;")) { if (A) *A = 10231; return TRUE; }
                if (Str::eq(entity, I"&LongRightArrow;")) { if (A) *A = 10230; return TRUE; }
                if (Str::eq(entity, I"&Longleftarrow;")) { if (A) *A = 10232; return TRUE; }
                if (Str::eq(entity, I"&Longleftrightarrow;")) { if (A) *A = 10234; return TRUE; }
                if (Str::eq(entity, I"&Longrightarrow;")) { if (A) *A = 10233; return TRUE; }
                if (Str::eq(entity, I"&Lopf;")) { if (A) *A = 120131; return TRUE; }
                if (Str::eq(entity, I"&LowerLeftArrow;")) { if (A) *A = 8601; return TRUE; }
                if (Str::eq(entity, I"&LowerRightArrow;")) { if (A) *A = 8600; return TRUE; }
                if (Str::eq(entity, I"&Lscr;")) { if (A) *A = 8466; return TRUE; }
                if (Str::eq(entity, I"&Lsh;")) { if (A) *A = 8624; return TRUE; }
                if (Str::eq(entity, I"&Lstrok;")) { if (A) *A = 321; return TRUE; }
                if (Str::eq(entity, I"&Lt;")) { if (A) *A = 8810; return TRUE; }
                break;
            case 'M':
                if (Str::eq(entity, I"&Map;")) { if (A) *A = 10501; return TRUE; }
                if (Str::eq(entity, I"&Mcy;")) { if (A) *A = 1052; return TRUE; }
                if (Str::eq(entity, I"&MediumSpace;")) { if (A) *A = 8287; return TRUE; }
                if (Str::eq(entity, I"&Mellintrf;")) { if (A) *A = 8499; return TRUE; }
                if (Str::eq(entity, I"&Mfr;")) { if (A) *A = 120080; return TRUE; }
                if (Str::eq(entity, I"&MinusPlus;")) { if (A) *A = 8723; return TRUE; }
                if (Str::eq(entity, I"&Mopf;")) { if (A) *A = 120132; return TRUE; }
                if (Str::eq(entity, I"&Mscr;")) { if (A) *A = 8499; return TRUE; }
                if (Str::eq(entity, I"&Mu;")) { if (A) *A = 924; return TRUE; }
                break;
            case 'N':
                if (Str::eq(entity, I"&NJcy;")) { if (A) *A = 1034; return TRUE; }
                if (Str::eq(entity, I"&Nacute;")) { if (A) *A = 323; return TRUE; }
                if (Str::eq(entity, I"&Ncaron;")) { if (A) *A = 327; return TRUE; }
                if (Str::eq(entity, I"&Ncedil;")) { if (A) *A = 325; return TRUE; }
                if (Str::eq(entity, I"&Ncy;")) { if (A) *A = 1053; return TRUE; }
                if (Str::eq(entity, I"&NegativeMediumSpace;")) { if (A) *A = 8203; return TRUE; }
                if (Str::eq(entity, I"&NegativeThickSpace;")) { if (A) *A = 8203; return TRUE; }
                if (Str::eq(entity, I"&NegativeThinSpace;")) { if (A) *A = 8203; return TRUE; }
                if (Str::eq(entity, I"&NegativeVeryThinSpace;")) { if (A) *A = 8203; return TRUE; }
                if (Str::eq(entity, I"&NestedGreaterGreater;")) { if (A) *A = 8811; return TRUE; }
                if (Str::eq(entity, I"&NestedLessLess;")) { if (A) *A = 8810; return TRUE; }
                if (Str::eq(entity, I"&NewLine;")) { if (A) *A = 10; return TRUE; }
                if (Str::eq(entity, I"&Nfr;")) { if (A) *A = 120081; return TRUE; }
                if (Str::eq(entity, I"&NoBreak;")) { if (A) *A = 8288; return TRUE; }
                if (Str::eq(entity, I"&NonBreakingSpace;")) { if (A) *A = 160; return TRUE; }
                if (Str::eq(entity, I"&Nopf;")) { if (A) *A = 8469; return TRUE; }
                if (Str::eq(entity, I"&Not;")) { if (A) *A = 10988; return TRUE; }
                if (Str::eq(entity, I"&NotCongruent;")) { if (A) *A = 8802; return TRUE; }
                if (Str::eq(entity, I"&NotCupCap;")) { if (A) *A = 8813; return TRUE; }
                if (Str::eq(entity, I"&NotDoubleVerticalBar;")) { if (A) *A = 8742; return TRUE; }
                if (Str::eq(entity, I"&NotElement;")) { if (A) *A = 8713; return TRUE; }
                if (Str::eq(entity, I"&NotEqual;")) { if (A) *A = 8800; return TRUE; }
                if (Str::eq(entity, I"&NotEqualTilde;")) { if (A) *A = 8770; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotExists;")) { if (A) *A = 8708; return TRUE; }
                if (Str::eq(entity, I"&NotGreater;")) { if (A) *A = 8815; return TRUE; }
                if (Str::eq(entity, I"&NotGreaterEqual;")) { if (A) *A = 8817; return TRUE; }
                if (Str::eq(entity, I"&NotGreaterFullEqual;")) { if (A) *A = 8807; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotGreaterGreater;")) { if (A) *A = 8811; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotGreaterLess;")) { if (A) *A = 8825; return TRUE; }
                if (Str::eq(entity, I"&NotGreaterSlantEqual;")) { if (A) *A = 10878; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotGreaterTilde;")) { if (A) *A = 8821; return TRUE; }
                if (Str::eq(entity, I"&NotHumpDownHump;")) { if (A) *A = 8782; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotHumpEqual;")) { if (A) *A = 8783; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotLeftTriangle;")) { if (A) *A = 8938; return TRUE; }
                if (Str::eq(entity, I"&NotLeftTriangleBar;")) { if (A) *A = 10703; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotLeftTriangleEqual;")) { if (A) *A = 8940; return TRUE; }
                if (Str::eq(entity, I"&NotLess;")) { if (A) *A = 8814; return TRUE; }
                if (Str::eq(entity, I"&NotLessEqual;")) { if (A) *A = 8816; return TRUE; }
                if (Str::eq(entity, I"&NotLessGreater;")) { if (A) *A = 8824; return TRUE; }
                if (Str::eq(entity, I"&NotLessLess;")) { if (A) *A = 8810; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotLessSlantEqual;")) { if (A) *A = 10877; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotLessTilde;")) { if (A) *A = 8820; return TRUE; }
                if (Str::eq(entity, I"&NotNestedGreaterGreater;")) { if (A) *A = 10914; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotNestedLessLess;")) { if (A) *A = 10913; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotPrecedes;")) { if (A) *A = 8832; return TRUE; }
                if (Str::eq(entity, I"&NotPrecedesEqual;")) { if (A) *A = 10927; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotPrecedesSlantEqual;")) { if (A) *A = 8928; return TRUE; }
                if (Str::eq(entity, I"&NotReverseElement;")) { if (A) *A = 8716; return TRUE; }
                if (Str::eq(entity, I"&NotRightTriangle;")) { if (A) *A = 8939; return TRUE; }
                if (Str::eq(entity, I"&NotRightTriangleBar;")) { if (A) *A = 10704; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotRightTriangleEqual;")) { if (A) *A = 8941; return TRUE; }
                if (Str::eq(entity, I"&NotSquareSubset;")) { if (A) *A = 8847; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotSquareSubsetEqual;")) { if (A) *A = 8930; return TRUE; }
                if (Str::eq(entity, I"&NotSquareSuperset;")) { if (A) *A = 8848; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotSquareSupersetEqual;")) { if (A) *A = 8931; return TRUE; }
                if (Str::eq(entity, I"&NotSubset;")) { if (A) *A = 8834; if (B) *B = 8402; return TRUE; }
                if (Str::eq(entity, I"&NotSubsetEqual;")) { if (A) *A = 8840; return TRUE; }
                if (Str::eq(entity, I"&NotSucceeds;")) { if (A) *A = 8833; return TRUE; }
                if (Str::eq(entity, I"&NotSucceedsEqual;")) { if (A) *A = 10928; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotSucceedsSlantEqual;")) { if (A) *A = 8929; return TRUE; }
                if (Str::eq(entity, I"&NotSucceedsTilde;")) { if (A) *A = 8831; if (B) *B = 824; return TRUE; }
                if (Str::eq(entity, I"&NotSuperset;")) { if (A) *A = 8835; if (B) *B = 8402; return TRUE; }
                if (Str::eq(entity, I"&NotSupersetEqual;")) { if (A) *A = 8841; return TRUE; }
                if (Str::eq(entity, I"&NotTilde;")) { if (A) *A = 8769; return TRUE; }
                if (Str::eq(entity, I"&NotTildeEqual;")) { if (A) *A = 8772; return TRUE; }
                if (Str::eq(entity, I"&NotTildeFullEqual;")) { if (A) *A = 8775; return TRUE; }
                if (Str::eq(entity, I"&NotTildeTilde;")) { if (A) *A = 8777; return TRUE; }
                if (Str::eq(entity, I"&NotVerticalBar;")) { if (A) *A = 8740; return TRUE; }
                if (Str::eq(entity, I"&Nscr;")) { if (A) *A = 119977; return TRUE; }
                if (Str::eq(entity, I"&Ntilde")) { if (A) *A = 209; return TRUE; }
                if (Str::eq(entity, I"&Ntilde;")) { if (A) *A = 209; return TRUE; }
                if (Str::eq(entity, I"&Nu;")) { if (A) *A = 925; return TRUE; }
                break;
            case 'O':
                if (Str::eq(entity, I"&OElig;")) { if (A) *A = 338; return TRUE; }
                if (Str::eq(entity, I"&Oacute")) { if (A) *A = 211; return TRUE; }
                if (Str::eq(entity, I"&Oacute;")) { if (A) *A = 211; return TRUE; }
                if (Str::eq(entity, I"&Ocirc")) { if (A) *A = 212; return TRUE; }
                if (Str::eq(entity, I"&Ocirc;")) { if (A) *A = 212; return TRUE; }
                if (Str::eq(entity, I"&Ocy;")) { if (A) *A = 1054; return TRUE; }
                if (Str::eq(entity, I"&Odblac;")) { if (A) *A = 336; return TRUE; }
                if (Str::eq(entity, I"&Ofr;")) { if (A) *A = 120082; return TRUE; }
                if (Str::eq(entity, I"&Ograve")) { if (A) *A = 210; return TRUE; }
                if (Str::eq(entity, I"&Ograve;")) { if (A) *A = 210; return TRUE; }
                if (Str::eq(entity, I"&Omacr;")) { if (A) *A = 332; return TRUE; }
                if (Str::eq(entity, I"&Omega;")) { if (A) *A = 937; return TRUE; }
                if (Str::eq(entity, I"&Omicron;")) { if (A) *A = 927; return TRUE; }
                if (Str::eq(entity, I"&Oopf;")) { if (A) *A = 120134; return TRUE; }
                if (Str::eq(entity, I"&OpenCurlyDoubleQuote;")) { if (A) *A = 8220; return TRUE; }
                if (Str::eq(entity, I"&OpenCurlyQuote;")) { if (A) *A = 8216; return TRUE; }
                if (Str::eq(entity, I"&Or;")) { if (A) *A = 10836; return TRUE; }
                if (Str::eq(entity, I"&Oscr;")) { if (A) *A = 119978; return TRUE; }
                if (Str::eq(entity, I"&Oslash")) { if (A) *A = 216; return TRUE; }
                if (Str::eq(entity, I"&Oslash;")) { if (A) *A = 216; return TRUE; }
                if (Str::eq(entity, I"&Otilde")) { if (A) *A = 213; return TRUE; }
                if (Str::eq(entity, I"&Otilde;")) { if (A) *A = 213; return TRUE; }
                if (Str::eq(entity, I"&Otimes;")) { if (A) *A = 10807; return TRUE; }
                if (Str::eq(entity, I"&Ouml")) { if (A) *A = 214; return TRUE; }
                if (Str::eq(entity, I"&Ouml;")) { if (A) *A = 214; return TRUE; }
                if (Str::eq(entity, I"&OverBar;")) { if (A) *A = 8254; return TRUE; }
                if (Str::eq(entity, I"&OverBrace;")) { if (A) *A = 9182; return TRUE; }
                if (Str::eq(entity, I"&OverBracket;")) { if (A) *A = 9140; return TRUE; }
                if (Str::eq(entity, I"&OverParenthesis;")) { if (A) *A = 9180; return TRUE; }
                break;
            case 'P':
                if (Str::eq(entity, I"&PartialD;")) { if (A) *A = 8706; return TRUE; }
                if (Str::eq(entity, I"&Pcy;")) { if (A) *A = 1055; return TRUE; }
                if (Str::eq(entity, I"&Pfr;")) { if (A) *A = 120083; return TRUE; }
                if (Str::eq(entity, I"&Phi;")) { if (A) *A = 934; return TRUE; }
                if (Str::eq(entity, I"&Pi;")) { if (A) *A = 928; return TRUE; }
                if (Str::eq(entity, I"&PlusMinus;")) { if (A) *A = 177; return TRUE; }
                if (Str::eq(entity, I"&Poincareplane;")) { if (A) *A = 8460; return TRUE; }
                if (Str::eq(entity, I"&Popf;")) { if (A) *A = 8473; return TRUE; }
                if (Str::eq(entity, I"&Pr;")) { if (A) *A = 10939; return TRUE; }
                if (Str::eq(entity, I"&Precedes;")) { if (A) *A = 8826; return TRUE; }
                if (Str::eq(entity, I"&PrecedesEqual;")) { if (A) *A = 10927; return TRUE; }
                if (Str::eq(entity, I"&PrecedesSlantEqual;")) { if (A) *A = 8828; return TRUE; }
                if (Str::eq(entity, I"&PrecedesTilde;")) { if (A) *A = 8830; return TRUE; }
                if (Str::eq(entity, I"&Prime;")) { if (A) *A = 8243; return TRUE; }
                if (Str::eq(entity, I"&Product;")) { if (A) *A = 8719; return TRUE; }
                if (Str::eq(entity, I"&Proportion;")) { if (A) *A = 8759; return TRUE; }
                if (Str::eq(entity, I"&Proportional;")) { if (A) *A = 8733; return TRUE; }
                if (Str::eq(entity, I"&Pscr;")) { if (A) *A = 119979; return TRUE; }
                if (Str::eq(entity, I"&Psi;")) { if (A) *A = 936; return TRUE; }
                break;
            case 'Q':
                if (Str::eq(entity, I"&QUOT")) { if (A) *A = 34; return TRUE; }
                if (Str::eq(entity, I"&QUOT;")) { if (A) *A = 34; return TRUE; }
                if (Str::eq(entity, I"&Qfr;")) { if (A) *A = 120084; return TRUE; }
                if (Str::eq(entity, I"&Qopf;")) { if (A) *A = 8474; return TRUE; }
                if (Str::eq(entity, I"&Qscr;")) { if (A) *A = 119980; return TRUE; }
                break;
            case 'R':
                if (Str::eq(entity, I"&RBarr;")) { if (A) *A = 10512; return TRUE; }
                if (Str::eq(entity, I"&REG")) { if (A) *A = 174; return TRUE; }
                if (Str::eq(entity, I"&REG;")) { if (A) *A = 174; return TRUE; }
                if (Str::eq(entity, I"&Racute;")) { if (A) *A = 340; return TRUE; }
                if (Str::eq(entity, I"&Rang;")) { if (A) *A = 10219; return TRUE; }
                if (Str::eq(entity, I"&Rarr;")) { if (A) *A = 8608; return TRUE; }
                if (Str::eq(entity, I"&Rarrtl;")) { if (A) *A = 10518; return TRUE; }
                if (Str::eq(entity, I"&Rcaron;")) { if (A) *A = 344; return TRUE; }
                if (Str::eq(entity, I"&Rcedil;")) { if (A) *A = 342; return TRUE; }
                if (Str::eq(entity, I"&Rcy;")) { if (A) *A = 1056; return TRUE; }
                if (Str::eq(entity, I"&Re;")) { if (A) *A = 8476; return TRUE; }
                if (Str::eq(entity, I"&ReverseElement;")) { if (A) *A = 8715; return TRUE; }
                if (Str::eq(entity, I"&ReverseEquilibrium;")) { if (A) *A = 8651; return TRUE; }
                if (Str::eq(entity, I"&ReverseUpEquilibrium;")) { if (A) *A = 10607; return TRUE; }
                if (Str::eq(entity, I"&Rfr;")) { if (A) *A = 8476; return TRUE; }
                if (Str::eq(entity, I"&Rho;")) { if (A) *A = 929; return TRUE; }
                if (Str::eq(entity, I"&RightAngleBracket;")) { if (A) *A = 10217; return TRUE; }
                if (Str::eq(entity, I"&RightArrow;")) { if (A) *A = 8594; return TRUE; }
                if (Str::eq(entity, I"&RightArrowBar;")) { if (A) *A = 8677; return TRUE; }
                if (Str::eq(entity, I"&RightArrowLeftArrow;")) { if (A) *A = 8644; return TRUE; }
                if (Str::eq(entity, I"&RightCeiling;")) { if (A) *A = 8969; return TRUE; }
                if (Str::eq(entity, I"&RightDoubleBracket;")) { if (A) *A = 10215; return TRUE; }
                if (Str::eq(entity, I"&RightDownTeeVector;")) { if (A) *A = 10589; return TRUE; }
                if (Str::eq(entity, I"&RightDownVector;")) { if (A) *A = 8642; return TRUE; }
                if (Str::eq(entity, I"&RightDownVectorBar;")) { if (A) *A = 10581; return TRUE; }
                if (Str::eq(entity, I"&RightFloor;")) { if (A) *A = 8971; return TRUE; }
                if (Str::eq(entity, I"&RightTee;")) { if (A) *A = 8866; return TRUE; }
                if (Str::eq(entity, I"&RightTeeArrow;")) { if (A) *A = 8614; return TRUE; }
                if (Str::eq(entity, I"&RightTeeVector;")) { if (A) *A = 10587; return TRUE; }
                if (Str::eq(entity, I"&RightTriangle;")) { if (A) *A = 8883; return TRUE; }
                if (Str::eq(entity, I"&RightTriangleBar;")) { if (A) *A = 10704; return TRUE; }
                if (Str::eq(entity, I"&RightTriangleEqual;")) { if (A) *A = 8885; return TRUE; }
                if (Str::eq(entity, I"&RightUpDownVector;")) { if (A) *A = 10575; return TRUE; }
                if (Str::eq(entity, I"&RightUpTeeVector;")) { if (A) *A = 10588; return TRUE; }
                if (Str::eq(entity, I"&RightUpVector;")) { if (A) *A = 8638; return TRUE; }
                if (Str::eq(entity, I"&RightUpVectorBar;")) { if (A) *A = 10580; return TRUE; }
                if (Str::eq(entity, I"&RightVector;")) { if (A) *A = 8640; return TRUE; }
                if (Str::eq(entity, I"&RightVectorBar;")) { if (A) *A = 10579; return TRUE; }
                if (Str::eq(entity, I"&Rightarrow;")) { if (A) *A = 8658; return TRUE; }
                if (Str::eq(entity, I"&Ropf;")) { if (A) *A = 8477; return TRUE; }
                if (Str::eq(entity, I"&RoundImplies;")) { if (A) *A = 10608; return TRUE; }
                if (Str::eq(entity, I"&Rrightarrow;")) { if (A) *A = 8667; return TRUE; }
                if (Str::eq(entity, I"&Rscr;")) { if (A) *A = 8475; return TRUE; }
                if (Str::eq(entity, I"&Rsh;")) { if (A) *A = 8625; return TRUE; }
                if (Str::eq(entity, I"&RuleDelayed;")) { if (A) *A = 10740; return TRUE; }
                break;
            case 'S':
                if (Str::eq(entity, I"&SHCHcy;")) { if (A) *A = 1065; return TRUE; }
                if (Str::eq(entity, I"&SHcy;")) { if (A) *A = 1064; return TRUE; }
                if (Str::eq(entity, I"&SOFTcy;")) { if (A) *A = 1068; return TRUE; }
                if (Str::eq(entity, I"&Sacute;")) { if (A) *A = 346; return TRUE; }
                if (Str::eq(entity, I"&Sc;")) { if (A) *A = 10940; return TRUE; }
                if (Str::eq(entity, I"&Scaron;")) { if (A) *A = 352; return TRUE; }
                if (Str::eq(entity, I"&Scedil;")) { if (A) *A = 350; return TRUE; }
                if (Str::eq(entity, I"&Scirc;")) { if (A) *A = 348; return TRUE; }
                if (Str::eq(entity, I"&Scy;")) { if (A) *A = 1057; return TRUE; }
                if (Str::eq(entity, I"&Sfr;")) { if (A) *A = 120086; return TRUE; }
                if (Str::eq(entity, I"&ShortDownArrow;")) { if (A) *A = 8595; return TRUE; }
                if (Str::eq(entity, I"&ShortLeftArrow;")) { if (A) *A = 8592; return TRUE; }
                if (Str::eq(entity, I"&ShortRightArrow;")) { if (A) *A = 8594; return TRUE; }
                if (Str::eq(entity, I"&ShortUpArrow;")) { if (A) *A = 8593; return TRUE; }
                if (Str::eq(entity, I"&Sigma;")) { if (A) *A = 931; return TRUE; }
                if (Str::eq(entity, I"&SmallCircle;")) { if (A) *A = 8728; return TRUE; }
                if (Str::eq(entity, I"&Sopf;")) { if (A) *A = 120138; return TRUE; }
                if (Str::eq(entity, I"&Sqrt;")) { if (A) *A = 8730; return TRUE; }
                if (Str::eq(entity, I"&Square;")) { if (A) *A = 9633; return TRUE; }
                if (Str::eq(entity, I"&SquareIntersection;")) { if (A) *A = 8851; return TRUE; }
                if (Str::eq(entity, I"&SquareSubset;")) { if (A) *A = 8847; return TRUE; }
                if (Str::eq(entity, I"&SquareSubsetEqual;")) { if (A) *A = 8849; return TRUE; }
                if (Str::eq(entity, I"&SquareSuperset;")) { if (A) *A = 8848; return TRUE; }
                if (Str::eq(entity, I"&SquareSupersetEqual;")) { if (A) *A = 8850; return TRUE; }
                if (Str::eq(entity, I"&SquareUnion;")) { if (A) *A = 8852; return TRUE; }
                if (Str::eq(entity, I"&Sscr;")) { if (A) *A = 119982; return TRUE; }
                if (Str::eq(entity, I"&Star;")) { if (A) *A = 8902; return TRUE; }
                if (Str::eq(entity, I"&Sub;")) { if (A) *A = 8912; return TRUE; }
                if (Str::eq(entity, I"&Subset;")) { if (A) *A = 8912; return TRUE; }
                if (Str::eq(entity, I"&SubsetEqual;")) { if (A) *A = 8838; return TRUE; }
                if (Str::eq(entity, I"&Succeeds;")) { if (A) *A = 8827; return TRUE; }
                if (Str::eq(entity, I"&SucceedsEqual;")) { if (A) *A = 10928; return TRUE; }
                if (Str::eq(entity, I"&SucceedsSlantEqual;")) { if (A) *A = 8829; return TRUE; }
                if (Str::eq(entity, I"&SucceedsTilde;")) { if (A) *A = 8831; return TRUE; }
                if (Str::eq(entity, I"&SuchThat;")) { if (A) *A = 8715; return TRUE; }
                if (Str::eq(entity, I"&Sum;")) { if (A) *A = 8721; return TRUE; }
                if (Str::eq(entity, I"&Sup;")) { if (A) *A = 8913; return TRUE; }
                if (Str::eq(entity, I"&Superset;")) { if (A) *A = 8835; return TRUE; }
                if (Str::eq(entity, I"&SupersetEqual;")) { if (A) *A = 8839; return TRUE; }
                if (Str::eq(entity, I"&Supset;")) { if (A) *A = 8913; return TRUE; }
                break;
            case 'T':
                if (Str::eq(entity, I"&THORN")) { if (A) *A = 222; return TRUE; }
                if (Str::eq(entity, I"&THORN;")) { if (A) *A = 222; return TRUE; }
                if (Str::eq(entity, I"&TRADE;")) { if (A) *A = 8482; return TRUE; }
                if (Str::eq(entity, I"&TSHcy;")) { if (A) *A = 1035; return TRUE; }
                if (Str::eq(entity, I"&TScy;")) { if (A) *A = 1062; return TRUE; }
                if (Str::eq(entity, I"&Tab;")) { if (A) *A = 9; return TRUE; }
                if (Str::eq(entity, I"&Tau;")) { if (A) *A = 932; return TRUE; }
                if (Str::eq(entity, I"&Tcaron;")) { if (A) *A = 356; return TRUE; }
                if (Str::eq(entity, I"&Tcedil;")) { if (A) *A = 354; return TRUE; }
                if (Str::eq(entity, I"&Tcy;")) { if (A) *A = 1058; return TRUE; }
                if (Str::eq(entity, I"&Tfr;")) { if (A) *A = 120087; return TRUE; }
                if (Str::eq(entity, I"&Therefore;")) { if (A) *A = 8756; return TRUE; }
                if (Str::eq(entity, I"&Theta;")) { if (A) *A = 920; return TRUE; }
                if (Str::eq(entity, I"&ThickSpace;")) { if (A) *A = 8287; if (B) *B = 8202; return TRUE; }
                if (Str::eq(entity, I"&ThinSpace;")) { if (A) *A = 8201; return TRUE; }
                if (Str::eq(entity, I"&Tilde;")) { if (A) *A = 8764; return TRUE; }
                if (Str::eq(entity, I"&TildeEqual;")) { if (A) *A = 8771; return TRUE; }
                if (Str::eq(entity, I"&TildeFullEqual;")) { if (A) *A = 8773; return TRUE; }
                if (Str::eq(entity, I"&TildeTilde;")) { if (A) *A = 8776; return TRUE; }
                if (Str::eq(entity, I"&Topf;")) { if (A) *A = 120139; return TRUE; }
                if (Str::eq(entity, I"&TripleDot;")) { if (A) *A = 8411; return TRUE; }
                if (Str::eq(entity, I"&Tscr;")) { if (A) *A = 119983; return TRUE; }
                if (Str::eq(entity, I"&Tstrok;")) { if (A) *A = 358; return TRUE; }
                break;
            case 'U':
                if (Str::eq(entity, I"&Uacute")) { if (A) *A = 218; return TRUE; }
                if (Str::eq(entity, I"&Uacute;")) { if (A) *A = 218; return TRUE; }
                if (Str::eq(entity, I"&Uarr;")) { if (A) *A = 8607; return TRUE; }
                if (Str::eq(entity, I"&Uarrocir;")) { if (A) *A = 10569; return TRUE; }
                if (Str::eq(entity, I"&Ubrcy;")) { if (A) *A = 1038; return TRUE; }
                if (Str::eq(entity, I"&Ubreve;")) { if (A) *A = 364; return TRUE; }
                if (Str::eq(entity, I"&Ucirc")) { if (A) *A = 219; return TRUE; }
                if (Str::eq(entity, I"&Ucirc;")) { if (A) *A = 219; return TRUE; }
                if (Str::eq(entity, I"&Ucy;")) { if (A) *A = 1059; return TRUE; }
                if (Str::eq(entity, I"&Udblac;")) { if (A) *A = 368; return TRUE; }
                if (Str::eq(entity, I"&Ufr;")) { if (A) *A = 120088; return TRUE; }
                if (Str::eq(entity, I"&Ugrave")) { if (A) *A = 217; return TRUE; }
                if (Str::eq(entity, I"&Ugrave;")) { if (A) *A = 217; return TRUE; }
                if (Str::eq(entity, I"&Umacr;")) { if (A) *A = 362; return TRUE; }
                if (Str::eq(entity, I"&UnderBar;")) { if (A) *A = 95; return TRUE; }
                if (Str::eq(entity, I"&UnderBrace;")) { if (A) *A = 9183; return TRUE; }
                if (Str::eq(entity, I"&UnderBracket;")) { if (A) *A = 9141; return TRUE; }
                if (Str::eq(entity, I"&UnderParenthesis;")) { if (A) *A = 9181; return TRUE; }
                if (Str::eq(entity, I"&Union;")) { if (A) *A = 8899; return TRUE; }
                if (Str::eq(entity, I"&UnionPlus;")) { if (A) *A = 8846; return TRUE; }
                if (Str::eq(entity, I"&Uogon;")) { if (A) *A = 370; return TRUE; }
                if (Str::eq(entity, I"&Uopf;")) { if (A) *A = 120140; return TRUE; }
                if (Str::eq(entity, I"&UpArrow;")) { if (A) *A = 8593; return TRUE; }
                if (Str::eq(entity, I"&UpArrowBar;")) { if (A) *A = 10514; return TRUE; }
                if (Str::eq(entity, I"&UpArrowDownArrow;")) { if (A) *A = 8645; return TRUE; }
                if (Str::eq(entity, I"&UpDownArrow;")) { if (A) *A = 8597; return TRUE; }
                if (Str::eq(entity, I"&UpEquilibrium;")) { if (A) *A = 10606; return TRUE; }
                if (Str::eq(entity, I"&UpTee;")) { if (A) *A = 8869; return TRUE; }
                if (Str::eq(entity, I"&UpTeeArrow;")) { if (A) *A = 8613; return TRUE; }
                if (Str::eq(entity, I"&Uparrow;")) { if (A) *A = 8657; return TRUE; }
                if (Str::eq(entity, I"&Updownarrow;")) { if (A) *A = 8661; return TRUE; }
                if (Str::eq(entity, I"&UpperLeftArrow;")) { if (A) *A = 8598; return TRUE; }
                if (Str::eq(entity, I"&UpperRightArrow;")) { if (A) *A = 8599; return TRUE; }
                if (Str::eq(entity, I"&Upsi;")) { if (A) *A = 978; return TRUE; }
                if (Str::eq(entity, I"&Upsilon;")) { if (A) *A = 933; return TRUE; }
                if (Str::eq(entity, I"&Uring;")) { if (A) *A = 366; return TRUE; }
                if (Str::eq(entity, I"&Uscr;")) { if (A) *A = 119984; return TRUE; }
                if (Str::eq(entity, I"&Utilde;")) { if (A) *A = 360; return TRUE; }
                if (Str::eq(entity, I"&Uuml")) { if (A) *A = 220; return TRUE; }
                if (Str::eq(entity, I"&Uuml;")) { if (A) *A = 220; return TRUE; }
                break;
            case 'V':
                if (Str::eq(entity, I"&VDash;")) { if (A) *A = 8875; return TRUE; }
                if (Str::eq(entity, I"&Vbar;")) { if (A) *A = 10987; return TRUE; }
                if (Str::eq(entity, I"&Vcy;")) { if (A) *A = 1042; return TRUE; }
                if (Str::eq(entity, I"&Vdash;")) { if (A) *A = 8873; return TRUE; }
                if (Str::eq(entity, I"&Vdashl;")) { if (A) *A = 10982; return TRUE; }
                if (Str::eq(entity, I"&Vee;")) { if (A) *A = 8897; return TRUE; }
                if (Str::eq(entity, I"&Verbar;")) { if (A) *A = 8214; return TRUE; }
                if (Str::eq(entity, I"&Vert;")) { if (A) *A = 8214; return TRUE; }
                if (Str::eq(entity, I"&VerticalBar;")) { if (A) *A = 8739; return TRUE; }
                if (Str::eq(entity, I"&VerticalLine;")) { if (A) *A = 124; return TRUE; }
                if (Str::eq(entity, I"&VerticalSeparator;")) { if (A) *A = 10072; return TRUE; }
                if (Str::eq(entity, I"&VerticalTilde;")) { if (A) *A = 8768; return TRUE; }
                if (Str::eq(entity, I"&VeryThinSpace;")) { if (A) *A = 8202; return TRUE; }
                if (Str::eq(entity, I"&Vfr;")) { if (A) *A = 120089; return TRUE; }
                if (Str::eq(entity, I"&Vopf;")) { if (A) *A = 120141; return TRUE; }
                if (Str::eq(entity, I"&Vscr;")) { if (A) *A = 119985; return TRUE; }
                if (Str::eq(entity, I"&Vvdash;")) { if (A) *A = 8874; return TRUE; }
                break;
            case 'W':
                if (Str::eq(entity, I"&Wcirc;")) { if (A) *A = 372; return TRUE; }
                if (Str::eq(entity, I"&Wedge;")) { if (A) *A = 8896; return TRUE; }
                if (Str::eq(entity, I"&Wfr;")) { if (A) *A = 120090; return TRUE; }
                if (Str::eq(entity, I"&Wopf;")) { if (A) *A = 120142; return TRUE; }
                if (Str::eq(entity, I"&Wscr;")) { if (A) *A = 119986; return TRUE; }
                break;
            case 'X':
                if (Str::eq(entity, I"&Xfr;")) { if (A) *A = 120091; return TRUE; }
                if (Str::eq(entity, I"&Xi;")) { if (A) *A = 926; return TRUE; }
                if (Str::eq(entity, I"&Xopf;")) { if (A) *A = 120143; return TRUE; }
                if (Str::eq(entity, I"&Xscr;")) { if (A) *A = 119987; return TRUE; }
                break;
            case 'Y':
                if (Str::eq(entity, I"&YAcy;")) { if (A) *A = 1071; return TRUE; }
                if (Str::eq(entity, I"&YIcy;")) { if (A) *A = 1031; return TRUE; }
                if (Str::eq(entity, I"&YUcy;")) { if (A) *A = 1070; return TRUE; }
                if (Str::eq(entity, I"&Yacute")) { if (A) *A = 221; return TRUE; }
                if (Str::eq(entity, I"&Yacute;")) { if (A) *A = 221; return TRUE; }
                if (Str::eq(entity, I"&Ycirc;")) { if (A) *A = 374; return TRUE; }
                if (Str::eq(entity, I"&Ycy;")) { if (A) *A = 1067; return TRUE; }
                if (Str::eq(entity, I"&Yfr;")) { if (A) *A = 120092; return TRUE; }
                if (Str::eq(entity, I"&Yopf;")) { if (A) *A = 120144; return TRUE; }
                if (Str::eq(entity, I"&Yscr;")) { if (A) *A = 119988; return TRUE; }
                if (Str::eq(entity, I"&Yuml;")) { if (A) *A = 376; return TRUE; }
                break;
            case 'Z':
                if (Str::eq(entity, I"&ZHcy;")) { if (A) *A = 1046; return TRUE; }
                if (Str::eq(entity, I"&Zacute;")) { if (A) *A = 377; return TRUE; }
                if (Str::eq(entity, I"&Zcaron;")) { if (A) *A = 381; return TRUE; }
                if (Str::eq(entity, I"&Zcy;")) { if (A) *A = 1047; return TRUE; }
                if (Str::eq(entity, I"&Zdot;")) { if (A) *A = 379; return TRUE; }
                if (Str::eq(entity, I"&ZeroWidthSpace;")) { if (A) *A = 8203; return TRUE; }
                if (Str::eq(entity, I"&Zeta;")) { if (A) *A = 918; return TRUE; }
                if (Str::eq(entity, I"&Zfr;")) { if (A) *A = 8488; return TRUE; }
                if (Str::eq(entity, I"&Zopf;")) { if (A) *A = 8484; return TRUE; }
                if (Str::eq(entity, I"&Zscr;")) { if (A) *A = 119989; return TRUE; }
                break;
            case 'a':
                if (Str::eq(entity, I"&aacute")) { if (A) *A = 225; return TRUE; }
                if (Str::eq(entity, I"&aacute;")) { if (A) *A = 225; return TRUE; }
                if (Str::eq(entity, I"&abreve;")) { if (A) *A = 259; return TRUE; }
                if (Str::eq(entity, I"&ac;")) { if (A) *A = 8766; return TRUE; }
                if (Str::eq(entity, I"&acE;")) { if (A) *A = 8766; if (B) *B = 819; return TRUE; }
                if (Str::eq(entity, I"&acd;")) { if (A) *A = 8767; return TRUE; }
                if (Str::eq(entity, I"&acirc")) { if (A) *A = 226; return TRUE; }
                if (Str::eq(entity, I"&acirc;")) { if (A) *A = 226; return TRUE; }
                if (Str::eq(entity, I"&acute")) { if (A) *A = 180; return TRUE; }
                if (Str::eq(entity, I"&acute;")) { if (A) *A = 180; return TRUE; }
                if (Str::eq(entity, I"&acy;")) { if (A) *A = 1072; return TRUE; }
                if (Str::eq(entity, I"&aelig")) { if (A) *A = 230; return TRUE; }
                if (Str::eq(entity, I"&aelig;")) { if (A) *A = 230; return TRUE; }
                if (Str::eq(entity, I"&af;")) { if (A) *A = 8289; return TRUE; }
                if (Str::eq(entity, I"&afr;")) { if (A) *A = 120094; return TRUE; }
                if (Str::eq(entity, I"&agrave")) { if (A) *A = 224; return TRUE; }
                if (Str::eq(entity, I"&agrave;")) { if (A) *A = 224; return TRUE; }
                if (Str::eq(entity, I"&alefsym;")) { if (A) *A = 8501; return TRUE; }
                if (Str::eq(entity, I"&aleph;")) { if (A) *A = 8501; return TRUE; }
                if (Str::eq(entity, I"&alpha;")) { if (A) *A = 945; return TRUE; }
                if (Str::eq(entity, I"&amacr;")) { if (A) *A = 257; return TRUE; }
                if (Str::eq(entity, I"&amalg;")) { if (A) *A = 10815; return TRUE; }
                if (Str::eq(entity, I"&amp")) { if (A) *A = 38; return TRUE; }
                if (Str::eq(entity, I"&amp;")) { if (A) *A = 38; return TRUE; }
                if (Str::eq(entity, I"&and;")) { if (A) *A = 8743; return TRUE; }
                if (Str::eq(entity, I"&andand;")) { if (A) *A = 10837; return TRUE; }
                if (Str::eq(entity, I"&andd;")) { if (A) *A = 10844; return TRUE; }
                if (Str::eq(entity, I"&andslope;")) { if (A) *A = 10840; return TRUE; }
                if (Str::eq(entity, I"&andv;")) { if (A) *A = 10842; return TRUE; }
                if (Str::eq(entity, I"&ang;")) { if (A) *A = 8736; return TRUE; }
                if (Str::eq(entity, I"&ange;")) { if (A) *A = 10660; return TRUE; }
                if (Str::eq(entity, I"&angle;")) { if (A) *A = 8736; return TRUE; }
                if (Str::eq(entity, I"&angmsd;")) { if (A) *A = 8737; return TRUE; }
                if (Str::eq(entity, I"&angmsdaa;")) { if (A) *A = 10664; return TRUE; }
                if (Str::eq(entity, I"&angmsdab;")) { if (A) *A = 10665; return TRUE; }
                if (Str::eq(entity, I"&angmsdac;")) { if (A) *A = 10666; return TRUE; }
                if (Str::eq(entity, I"&angmsdad;")) { if (A) *A = 10667; return TRUE; }
                if (Str::eq(entity, I"&angmsdae;")) { if (A) *A = 10668; return TRUE; }
                if (Str::eq(entity, I"&angmsdaf;")) { if (A) *A = 10669; return TRUE; }
                if (Str::eq(entity, I"&angmsdag;")) { if (A) *A = 10670; return TRUE; }
                if (Str::eq(entity, I"&angmsdah;")) { if (A) *A = 10671; return TRUE; }
                if (Str::eq(entity, I"&angrt;")) { if (A) *A = 8735; return TRUE; }
                if (Str::eq(entity, I"&angrtvb;")) { if (A) *A = 8894; return TRUE; }
                if (Str::eq(entity, I"&angrtvbd;")) { if (A) *A = 10653; return TRUE; }
                if (Str::eq(entity, I"&angsph;")) { if (A) *A = 8738; return TRUE; }
                if (Str::eq(entity, I"&angst;")) { if (A) *A = 197; return TRUE; }
                if (Str::eq(entity, I"&angzarr;")) { if (A) *A = 9084; return TRUE; }
                if (Str::eq(entity, I"&aogon;")) { if (A) *A = 261; return TRUE; }
                if (Str::eq(entity, I"&aopf;")) { if (A) *A = 120146; return TRUE; }
                if (Str::eq(entity, I"&ap;")) { if (A) *A = 8776; return TRUE; }
                if (Str::eq(entity, I"&apE;")) { if (A) *A = 10864; return TRUE; }
                if (Str::eq(entity, I"&apacir;")) { if (A) *A = 10863; return TRUE; }
                if (Str::eq(entity, I"&ape;")) { if (A) *A = 8778; return TRUE; }
                if (Str::eq(entity, I"&apid;")) { if (A) *A = 8779; return TRUE; }
                if (Str::eq(entity, I"&apos;")) { if (A) *A = 39; return TRUE; }
                if (Str::eq(entity, I"&approx;")) { if (A) *A = 8776; return TRUE; }
                if (Str::eq(entity, I"&approxeq;")) { if (A) *A = 8778; return TRUE; }
                if (Str::eq(entity, I"&aring")) { if (A) *A = 229; return TRUE; }
                if (Str::eq(entity, I"&aring;")) { if (A) *A = 229; return TRUE; }
                if (Str::eq(entity, I"&ascr;")) { if (A) *A = 119990; return TRUE; }
                if (Str::eq(entity, I"&ast;")) { if (A) *A = 42; return TRUE; }
                if (Str::eq(entity, I"&asymp;")) { if (A) *A = 8776; return TRUE; }
                if (Str::eq(entity, I"&asympeq;")) { if (A) *A = 8781; return TRUE; }
                if (Str::eq(entity, I"&atilde")) { if (A) *A = 227; return TRUE; }
                if (Str::eq(entity, I"&atilde;")) { if (A) *A = 227; return TRUE; }
                if (Str::eq(entity, I"&auml")) { if (A) *A = 228; return TRUE; }
                if (Str::eq(entity, I"&auml;")) { if (A) *A = 228; return TRUE; }
                if (Str::eq(entity, I"&awconint;")) { if (A) *A = 8755; return TRUE; }
                if (Str::eq(entity, I"&awint;")) { if (A) *A = 10769; return TRUE; }
                break;
            case 'b':
                if (Str::eq(entity, I"&bNot;")) { if (A) *A = 10989; return TRUE; }
                if (Str::eq(entity, I"&backcong;")) { if (A) *A = 8780; return TRUE; }
                if (Str::eq(entity, I"&backepsilon;")) { if (A) *A = 1014; return TRUE; }
                if (Str::eq(entity, I"&backprime;")) { if (A) *A = 8245; return TRUE; }
                if (Str::eq(entity, I"&backsim;")) { if (A) *A = 8765; return TRUE; }
                if (Str::eq(entity, I"&backsimeq;")) { if (A) *A = 8909; return TRUE; }
                if (Str::eq(entity, I"&barvee;")) { if (A) *A = 8893; return TRUE; }
                if (Str::eq(entity, I"&barwed;")) { if (A) *A = 8965; return TRUE; }
                if (Str::eq(entity, I"&barwedge;")) { if (A) *A = 8965; return TRUE; }
                if (Str::eq(entity, I"&bbrk;")) { if (A) *A = 9141; return TRUE; }
                if (Str::eq(entity, I"&bbrktbrk;")) { if (A) *A = 9142; return TRUE; }
                if (Str::eq(entity, I"&bcong;")) { if (A) *A = 8780; return TRUE; }
                if (Str::eq(entity, I"&bcy;")) { if (A) *A = 1073; return TRUE; }
                if (Str::eq(entity, I"&bdquo;")) { if (A) *A = 8222; return TRUE; }
                if (Str::eq(entity, I"&becaus;")) { if (A) *A = 8757; return TRUE; }
                if (Str::eq(entity, I"&because;")) { if (A) *A = 8757; return TRUE; }
                if (Str::eq(entity, I"&bemptyv;")) { if (A) *A = 10672; return TRUE; }
                if (Str::eq(entity, I"&bepsi;")) { if (A) *A = 1014; return TRUE; }
                if (Str::eq(entity, I"&bernou;")) { if (A) *A = 8492; return TRUE; }
                if (Str::eq(entity, I"&beta;")) { if (A) *A = 946; return TRUE; }
                if (Str::eq(entity, I"&beth;")) { if (A) *A = 8502; return TRUE; }
                if (Str::eq(entity, I"&between;")) { if (A) *A = 8812; return TRUE; }
                if (Str::eq(entity, I"&bfr;")) { if (A) *A = 120095; return TRUE; }
                if (Str::eq(entity, I"&bigcap;")) { if (A) *A = 8898; return TRUE; }
                if (Str::eq(entity, I"&bigcirc;")) { if (A) *A = 9711; return TRUE; }
                if (Str::eq(entity, I"&bigcup;")) { if (A) *A = 8899; return TRUE; }
                if (Str::eq(entity, I"&bigodot;")) { if (A) *A = 10752; return TRUE; }
                if (Str::eq(entity, I"&bigoplus;")) { if (A) *A = 10753; return TRUE; }
                if (Str::eq(entity, I"&bigotimes;")) { if (A) *A = 10754; return TRUE; }
                if (Str::eq(entity, I"&bigsqcup;")) { if (A) *A = 10758; return TRUE; }
                if (Str::eq(entity, I"&bigstar;")) { if (A) *A = 9733; return TRUE; }
                if (Str::eq(entity, I"&bigtriangledown;")) { if (A) *A = 9661; return TRUE; }
                if (Str::eq(entity, I"&bigtriangleup;")) { if (A) *A = 9651; return TRUE; }
                if (Str::eq(entity, I"&biguplus;")) { if (A) *A = 10756; return TRUE; }
                if (Str::eq(entity, I"&bigvee;")) { if (A) *A = 8897; return TRUE; }
                if (Str::eq(entity, I"&bigwedge;")) { if (A) *A = 8896; return TRUE; }
                if (Str::eq(entity, I"&bkarow;")) { if (A) *A = 10509; return TRUE; }
                if (Str::eq(entity, I"&blacklozenge;")) { if (A) *A = 10731; return TRUE; }
                if (Str::eq(entity, I"&blacksquare;")) { if (A) *A = 9642; return TRUE; }
                if (Str::eq(entity, I"&blacktriangle;")) { if (A) *A = 9652; return TRUE; }
                if (Str::eq(entity, I"&blacktriangledown;")) { if (A) *A = 9662; return TRUE; }
                if (Str::eq(entity, I"&blacktriangleleft;")) { if (A) *A = 9666; return TRUE; }
                if (Str::eq(entity, I"&blacktriangleright;")) { if (A) *A = 9656; return TRUE; }
                if (Str::eq(entity, I"&blank;")) { if (A) *A = 9251; return TRUE; }
                if (Str::eq(entity, I"&blk12;")) { if (A) *A = 9618; return TRUE; }
                if (Str::eq(entity, I"&blk14;")) { if (A) *A = 9617; return TRUE; }
                if (Str::eq(entity, I"&blk34;")) { if (A) *A = 9619; return TRUE; }
                if (Str::eq(entity, I"&block;")) { if (A) *A = 9608; return TRUE; }
                if (Str::eq(entity, I"&bne;")) { if (A) *A = 61; if (B) *B = 8421; return TRUE; }
                if (Str::eq(entity, I"&bnequiv;")) { if (A) *A = 8801; if (B) *B = 8421; return TRUE; }
                if (Str::eq(entity, I"&bnot;")) { if (A) *A = 8976; return TRUE; }
                if (Str::eq(entity, I"&bopf;")) { if (A) *A = 120147; return TRUE; }
                if (Str::eq(entity, I"&bot;")) { if (A) *A = 8869; return TRUE; }
                if (Str::eq(entity, I"&bottom;")) { if (A) *A = 8869; return TRUE; }
                if (Str::eq(entity, I"&bowtie;")) { if (A) *A = 8904; return TRUE; }
                if (Str::eq(entity, I"&boxDL;")) { if (A) *A = 9559; return TRUE; }
                if (Str::eq(entity, I"&boxDR;")) { if (A) *A = 9556; return TRUE; }
                if (Str::eq(entity, I"&boxDl;")) { if (A) *A = 9558; return TRUE; }
                if (Str::eq(entity, I"&boxDr;")) { if (A) *A = 9555; return TRUE; }
                if (Str::eq(entity, I"&boxH;")) { if (A) *A = 9552; return TRUE; }
                if (Str::eq(entity, I"&boxHD;")) { if (A) *A = 9574; return TRUE; }
                if (Str::eq(entity, I"&boxHU;")) { if (A) *A = 9577; return TRUE; }
                if (Str::eq(entity, I"&boxHd;")) { if (A) *A = 9572; return TRUE; }
                if (Str::eq(entity, I"&boxHu;")) { if (A) *A = 9575; return TRUE; }
                if (Str::eq(entity, I"&boxUL;")) { if (A) *A = 9565; return TRUE; }
                if (Str::eq(entity, I"&boxUR;")) { if (A) *A = 9562; return TRUE; }
                if (Str::eq(entity, I"&boxUl;")) { if (A) *A = 9564; return TRUE; }
                if (Str::eq(entity, I"&boxUr;")) { if (A) *A = 9561; return TRUE; }
                if (Str::eq(entity, I"&boxV;")) { if (A) *A = 9553; return TRUE; }
                if (Str::eq(entity, I"&boxVH;")) { if (A) *A = 9580; return TRUE; }
                if (Str::eq(entity, I"&boxVL;")) { if (A) *A = 9571; return TRUE; }
                if (Str::eq(entity, I"&boxVR;")) { if (A) *A = 9568; return TRUE; }
                if (Str::eq(entity, I"&boxVh;")) { if (A) *A = 9579; return TRUE; }
                if (Str::eq(entity, I"&boxVl;")) { if (A) *A = 9570; return TRUE; }
                if (Str::eq(entity, I"&boxVr;")) { if (A) *A = 9567; return TRUE; }
                if (Str::eq(entity, I"&boxbox;")) { if (A) *A = 10697; return TRUE; }
                if (Str::eq(entity, I"&boxdL;")) { if (A) *A = 9557; return TRUE; }
                if (Str::eq(entity, I"&boxdR;")) { if (A) *A = 9554; return TRUE; }
                if (Str::eq(entity, I"&boxdl;")) { if (A) *A = 9488; return TRUE; }
                if (Str::eq(entity, I"&boxdr;")) { if (A) *A = 9484; return TRUE; }
                if (Str::eq(entity, I"&boxh;")) { if (A) *A = 9472; return TRUE; }
                if (Str::eq(entity, I"&boxhD;")) { if (A) *A = 9573; return TRUE; }
                if (Str::eq(entity, I"&boxhU;")) { if (A) *A = 9576; return TRUE; }
                if (Str::eq(entity, I"&boxhd;")) { if (A) *A = 9516; return TRUE; }
                if (Str::eq(entity, I"&boxhu;")) { if (A) *A = 9524; return TRUE; }
                if (Str::eq(entity, I"&boxminus;")) { if (A) *A = 8863; return TRUE; }
                if (Str::eq(entity, I"&boxplus;")) { if (A) *A = 8862; return TRUE; }
                if (Str::eq(entity, I"&boxtimes;")) { if (A) *A = 8864; return TRUE; }
                if (Str::eq(entity, I"&boxuL;")) { if (A) *A = 9563; return TRUE; }
                if (Str::eq(entity, I"&boxuR;")) { if (A) *A = 9560; return TRUE; }
                if (Str::eq(entity, I"&boxul;")) { if (A) *A = 9496; return TRUE; }
                if (Str::eq(entity, I"&boxur;")) { if (A) *A = 9492; return TRUE; }
                if (Str::eq(entity, I"&boxv;")) { if (A) *A = 9474; return TRUE; }
                if (Str::eq(entity, I"&boxvH;")) { if (A) *A = 9578; return TRUE; }
                if (Str::eq(entity, I"&boxvL;")) { if (A) *A = 9569; return TRUE; }
                if (Str::eq(entity, I"&boxvR;")) { if (A) *A = 9566; return TRUE; }
                if (Str::eq(entity, I"&boxvh;")) { if (A) *A = 9532; return TRUE; }
                if (Str::eq(entity, I"&boxvl;")) { if (A) *A = 9508; return TRUE; }
                if (Str::eq(entity, I"&boxvr;")) { if (A) *A = 9500; return TRUE; }
                if (Str::eq(entity, I"&bprime;")) { if (A) *A = 8245; return TRUE; }
                if (Str::eq(entity, I"&breve;")) { if (A) *A = 728; return TRUE; }
                if (Str::eq(entity, I"&brvbar")) { if (A) *A = 166; return TRUE; }
                if (Str::eq(entity, I"&brvbar;")) { if (A) *A = 166; return TRUE; }
                if (Str::eq(entity, I"&bscr;")) { if (A) *A = 119991; return TRUE; }
                if (Str::eq(entity, I"&bsemi;")) { if (A) *A = 8271; return TRUE; }
                if (Str::eq(entity, I"&bsim;")) { if (A) *A = 8765; return TRUE; }
                if (Str::eq(entity, I"&bsime;")) { if (A) *A = 8909; return TRUE; }
                if (Str::eq(entity, I"&bsol;")) { if (A) *A = 92; return TRUE; }
                if (Str::eq(entity, I"&bsolb;")) { if (A) *A = 10693; return TRUE; }
                if (Str::eq(entity, I"&bsolhsub;")) { if (A) *A = 10184; return TRUE; }
                if (Str::eq(entity, I"&bull;")) { if (A) *A = 8226; return TRUE; }
                if (Str::eq(entity, I"&bullet;")) { if (A) *A = 8226; return TRUE; }
                if (Str::eq(entity, I"&bump;")) { if (A) *A = 8782; return TRUE; }
                if (Str::eq(entity, I"&bumpE;")) { if (A) *A = 10926; return TRUE; }
                if (Str::eq(entity, I"&bumpe;")) { if (A) *A = 8783; return TRUE; }
                if (Str::eq(entity, I"&bumpeq;")) { if (A) *A = 8783; return TRUE; }
                break;
            case 'c':
                if (Str::eq(entity, I"&cacute;")) { if (A) *A = 263; return TRUE; }
                if (Str::eq(entity, I"&cap;")) { if (A) *A = 8745; return TRUE; }
                if (Str::eq(entity, I"&capand;")) { if (A) *A = 10820; return TRUE; }
                if (Str::eq(entity, I"&capbrcup;")) { if (A) *A = 10825; return TRUE; }
                if (Str::eq(entity, I"&capcap;")) { if (A) *A = 10827; return TRUE; }
                if (Str::eq(entity, I"&capcup;")) { if (A) *A = 10823; return TRUE; }
                if (Str::eq(entity, I"&capdot;")) { if (A) *A = 10816; return TRUE; }
                if (Str::eq(entity, I"&caps;")) { if (A) *A = 8745; if (B) *B = 65024; return TRUE; }
                if (Str::eq(entity, I"&caret;")) { if (A) *A = 8257; return TRUE; }
                if (Str::eq(entity, I"&caron;")) { if (A) *A = 711; return TRUE; }
                if (Str::eq(entity, I"&ccaps;")) { if (A) *A = 10829; return TRUE; }
                if (Str::eq(entity, I"&ccaron;")) { if (A) *A = 269; return TRUE; }
                if (Str::eq(entity, I"&ccedil")) { if (A) *A = 231; return TRUE; }
                if (Str::eq(entity, I"&ccedil;")) { if (A) *A = 231; return TRUE; }
                if (Str::eq(entity, I"&ccirc;")) { if (A) *A = 265; return TRUE; }
                if (Str::eq(entity, I"&ccups;")) { if (A) *A = 10828; return TRUE; }
                if (Str::eq(entity, I"&ccupssm;")) { if (A) *A = 10832; return TRUE; }
                if (Str::eq(entity, I"&cdot;")) { if (A) *A = 267; return TRUE; }
                if (Str::eq(entity, I"&cedil")) { if (A) *A = 184; return TRUE; }
                if (Str::eq(entity, I"&cedil;")) { if (A) *A = 184; return TRUE; }
                if (Str::eq(entity, I"&cemptyv;")) { if (A) *A = 10674; return TRUE; }
                if (Str::eq(entity, I"&cent")) { if (A) *A = 162; return TRUE; }
                if (Str::eq(entity, I"&cent;")) { if (A) *A = 162; return TRUE; }
                if (Str::eq(entity, I"&centerdot;")) { if (A) *A = 183; return TRUE; }
                if (Str::eq(entity, I"&cfr;")) { if (A) *A = 120096; return TRUE; }
                if (Str::eq(entity, I"&chcy;")) { if (A) *A = 1095; return TRUE; }
                if (Str::eq(entity, I"&check;")) { if (A) *A = 10003; return TRUE; }
                if (Str::eq(entity, I"&checkmark;")) { if (A) *A = 10003; return TRUE; }
                if (Str::eq(entity, I"&chi;")) { if (A) *A = 967; return TRUE; }
                if (Str::eq(entity, I"&cir;")) { if (A) *A = 9675; return TRUE; }
                if (Str::eq(entity, I"&cirE;")) { if (A) *A = 10691; return TRUE; }
                if (Str::eq(entity, I"&circ;")) { if (A) *A = 710; return TRUE; }
                if (Str::eq(entity, I"&circeq;")) { if (A) *A = 8791; return TRUE; }
                if (Str::eq(entity, I"&circlearrowleft;")) { if (A) *A = 8634; return TRUE; }
                if (Str::eq(entity, I"&circlearrowright;")) { if (A) *A = 8635; return TRUE; }
                if (Str::eq(entity, I"&circledR;")) { if (A) *A = 174; return TRUE; }
                if (Str::eq(entity, I"&circledS;")) { if (A) *A = 9416; return TRUE; }
                if (Str::eq(entity, I"&circledast;")) { if (A) *A = 8859; return TRUE; }
                if (Str::eq(entity, I"&circledcirc;")) { if (A) *A = 8858; return TRUE; }
                if (Str::eq(entity, I"&circleddash;")) { if (A) *A = 8861; return TRUE; }
                if (Str::eq(entity, I"&cire;")) { if (A) *A = 8791; return TRUE; }
                if (Str::eq(entity, I"&cirfnint;")) { if (A) *A = 10768; return TRUE; }
                if (Str::eq(entity, I"&cirmid;")) { if (A) *A = 10991; return TRUE; }
                if (Str::eq(entity, I"&cirscir;")) { if (A) *A = 10690; return TRUE; }
                if (Str::eq(entity, I"&clubs;")) { if (A) *A = 9827; return TRUE; }
                if (Str::eq(entity, I"&clubsuit;")) { if (A) *A = 9827; return TRUE; }
                if (Str::eq(entity, I"&colon;")) { if (A) *A = 58; return TRUE; }
                if (Str::eq(entity, I"&colone;")) { if (A) *A = 8788; return TRUE; }
                if (Str::eq(entity, I"&coloneq;")) { if (A) *A = 8788; return TRUE; }
                if (Str::eq(entity, I"&comma;")) { if (A) *A = 44; return TRUE; }
                if (Str::eq(entity, I"&commat;")) { if (A) *A = 64; return TRUE; }
                if (Str::eq(entity, I"&comp;")) { if (A) *A = 8705; return TRUE; }
                if (Str::eq(entity, I"&compfn;")) { if (A) *A = 8728; return TRUE; }
                if (Str::eq(entity, I"&complement;")) { if (A) *A = 8705; return TRUE; }
                if (Str::eq(entity, I"&complexes;")) { if (A) *A = 8450; return TRUE; }
                if (Str::eq(entity, I"&cong;")) { if (A) *A = 8773; return TRUE; }
                if (Str::eq(entity, I"&congdot;")) { if (A) *A = 10861; return TRUE; }
                if (Str::eq(entity, I"&conint;")) { if (A) *A = 8750; return TRUE; }
                if (Str::eq(entity, I"&copf;")) { if (A) *A = 120148; return TRUE; }
                if (Str::eq(entity, I"&coprod;")) { if (A) *A = 8720; return TRUE; }
                if (Str::eq(entity, I"&copy")) { if (A) *A = 169; return TRUE; }
                if (Str::eq(entity, I"&copy;")) { if (A) *A = 169; return TRUE; }
                if (Str::eq(entity, I"&copysr;")) { if (A) *A = 8471; return TRUE; }
                if (Str::eq(entity, I"&crarr;")) { if (A) *A = 8629; return TRUE; }
                if (Str::eq(entity, I"&cross;")) { if (A) *A = 10007; return TRUE; }
                if (Str::eq(entity, I"&cscr;")) { if (A) *A = 119992; return TRUE; }
                if (Str::eq(entity, I"&csub;")) { if (A) *A = 10959; return TRUE; }
                if (Str::eq(entity, I"&csube;")) { if (A) *A = 10961; return TRUE; }
                if (Str::eq(entity, I"&csup;")) { if (A) *A = 10960; return TRUE; }
                if (Str::eq(entity, I"&csupe;")) { if (A) *A = 10962; return TRUE; }
                if (Str::eq(entity, I"&ctdot;")) { if (A) *A = 8943; return TRUE; }
                if (Str::eq(entity, I"&cudarrl;")) { if (A) *A = 10552; return TRUE; }
                if (Str::eq(entity, I"&cudarrr;")) { if (A) *A = 10549; return TRUE; }
                if (Str::eq(entity, I"&cuepr;")) { if (A) *A = 8926; return TRUE; }
                if (Str::eq(entity, I"&cuesc;")) { if (A) *A = 8927; return TRUE; }
                if (Str::eq(entity, I"&cularr;")) { if (A) *A = 8630; return TRUE; }
                if (Str::eq(entity, I"&cularrp;")) { if (A) *A = 10557; return TRUE; }
                if (Str::eq(entity, I"&cup;")) { if (A) *A = 8746; return TRUE; }
                if (Str::eq(entity, I"&cupbrcap;")) { if (A) *A = 10824; return TRUE; }
                if (Str::eq(entity, I"&cupcap;")) { if (A) *A = 10822; return TRUE; }
                if (Str::eq(entity, I"&cupcup;")) { if (A) *A = 10826; return TRUE; }
                if (Str::eq(entity, I"&cupdot;")) { if (A) *A = 8845; return TRUE; }
                if (Str::eq(entity, I"&cupor;")) { if (A) *A = 10821; return TRUE; }
                if (Str::eq(entity, I"&cups;")) { if (A) *A = 8746; if (B) *B = 65024; return TRUE; }
                if (Str::eq(entity, I"&curarr;")) { if (A) *A = 8631; return TRUE; }
                if (Str::eq(entity, I"&curarrm;")) { if (A) *A = 10556; return TRUE; }
                if (Str::eq(entity, I"&curlyeqprec;")) { if (A) *A = 8926; return TRUE; }
                if (Str::eq(entity, I"&curlyeqsucc;")) { if (A) *A = 8927; return TRUE; }
                if (Str::eq(entity, I"&curlyvee;")) { if (A) *A = 8910; return TRUE; }
                if (Str::eq(entity, I"&curlywedge;")) { if (A) *A = 8911; return TRUE; }
                if (Str::eq(entity, I"&curren")) { if (A) *A = 164; return TRUE; }
                if (Str::eq(entity, I"&curren;")) { if (A) *A = 164; return TRUE; }
                if (Str::eq(entity, I"&curvearrowleft;")) { if (A) *A = 8630; return TRUE; }
                if (Str::eq(entity, I"&curvearrowright;")) { if (A) *A = 8631; return TRUE; }
                if (Str::eq(entity, I"&cuvee;")) { if (A) *A = 8910; return TRUE; }
                if (Str::eq(entity, I"&cuwed;")) { if (A) *A = 8911; return TRUE; }
                if (Str::eq(entity, I"&cwconint;")) { if (A) *A = 8754; return TRUE; }
                if (Str::eq(entity, I"&cwint;")) { if (A) *A = 8753; return TRUE; }
                if (Str::eq(entity, I"&cylcty;")) { if (A) *A = 9005; return TRUE; }
                break;
            case 'd':
                if (Str::eq(entity, I"&dArr;")) { if (A) *A = 8659; return TRUE; }
                if (Str::eq(entity, I"&dHar;")) { if (A) *A = 10597; return TRUE; }
                if (Str::eq(entity, I"&dagger;")) { if (A) *A = 8224; return TRUE; }
                if (Str::eq(entity, I"&daleth;")) { if (A) *A = 8504; return TRUE; }
                if (Str::eq(entity, I"&darr;")) { if (A) *A = 8595; return TRUE; }
                if (Str::eq(entity, I"&dash;")) { if (A) *A = 8208; return TRUE; }
                if (Str::eq(entity, I"&dashv;")) { if (A) *A = 8867; return TRUE; }
                if (Str::eq(entity, I"&dbkarow;")) { if (A) *A = 10511; return TRUE; }
                if (Str::eq(entity, I"&dblac;")) { if (A) *A = 733; return TRUE; }
                if (Str::eq(entity, I"&dcaron;")) { if (A) *A = 271; return TRUE; }
                if (Str::eq(entity, I"&dcy;")) { if (A) *A = 1076; return TRUE; }
                if (Str::eq(entity, I"&dd;")) { if (A) *A = 8518; return TRUE; }
                if (Str::eq(entity, I"&ddagger;")) { if (A) *A = 8225; return TRUE; }
                if (Str::eq(entity, I"&ddarr;")) { if (A) *A = 8650; return TRUE; }
                if (Str::eq(entity, I"&ddotseq;")) { if (A) *A = 10871; return TRUE; }
                if (Str::eq(entity, I"&deg")) { if (A) *A = 176; return TRUE; }
                if (Str::eq(entity, I"&deg;")) { if (A) *A = 176; return TRUE; }
                if (Str::eq(entity, I"&delta;")) { if (A) *A = 948; return TRUE; }
                if (Str::eq(entity, I"&demptyv;")) { if (A) *A = 10673; return TRUE; }
                if (Str::eq(entity, I"&dfisht;")) { if (A) *A = 10623; return TRUE; }
                if (Str::eq(entity, I"&dfr;")) { if (A) *A = 120097; return TRUE; }
                if (Str::eq(entity, I"&dharl;")) { if (A) *A = 8643; return TRUE; }
                if (Str::eq(entity, I"&dharr;")) { if (A) *A = 8642; return TRUE; }
                if (Str::eq(entity, I"&diam;")) { if (A) *A = 8900; return TRUE; }
                if (Str::eq(entity, I"&diamond;")) { if (A) *A = 8900; return TRUE; }
                if (Str::eq(entity, I"&diamondsuit;")) { if (A) *A = 9830; return TRUE; }
                if (Str::eq(entity, I"&diams;")) { if (A) *A = 9830; return TRUE; }
                if (Str::eq(entity, I"&die;")) { if (A) *A = 168; return TRUE; }
                if (Str::eq(entity, I"&digamma;")) { if (A) *A = 989; return TRUE; }
                if (Str::eq(entity, I"&disin;")) { if (A) *A = 8946; return TRUE; }
                if (Str::eq(entity, I"&div;")) { if (A) *A = 247; return TRUE; }
                if (Str::eq(entity, I"&divide")) { if (A) *A = 247; return TRUE; }
                if (Str::eq(entity, I"&divide;")) { if (A) *A = 247; return TRUE; }
                if (Str::eq(entity, I"&divideontimes;")) { if (A) *A = 8903; return TRUE; }
                if (Str::eq(entity, I"&divonx;")) { if (A) *A = 8903; return TRUE; }
                if (Str::eq(entity, I"&djcy;")) { if (A) *A = 1106; return TRUE; }
                if (Str::eq(entity, I"&dlcorn;")) { if (A) *A = 8990; return TRUE; }
                if (Str::eq(entity, I"&dlcrop;")) { if (A) *A = 8973; return TRUE; }
                if (Str::eq(entity, I"&dollar;")) { if (A) *A = 36; return TRUE; }
                if (Str::eq(entity, I"&dopf;")) { if (A) *A = 120149; return TRUE; }
                if (Str::eq(entity, I"&dot;")) { if (A) *A = 729; return TRUE; }
                if (Str::eq(entity, I"&doteq;")) { if (A) *A = 8784; return TRUE; }
                if (Str::eq(entity, I"&doteqdot;")) { if (A) *A = 8785; return TRUE; }
                if (Str::eq(entity, I"&dotminus;")) { if (A) *A = 8760; return TRUE; }
                if (Str::eq(entity, I"&dotplus;")) { if (A) *A = 8724; return TRUE; }
                if (Str::eq(entity, I"&dotsquare;")) { if (A) *A = 8865; return TRUE; }
                if (Str::eq(entity, I"&doublebarwedge;")) { if (A) *A = 8966; return TRUE; }
                if (Str::eq(entity, I"&downarrow;")) { if (A) *A = 8595; return TRUE; }
                if (Str::eq(entity, I"&downdownarrows;")) { if (A) *A = 8650; return TRUE; }
                if (Str::eq(entity, I"&downharpoonleft;")) { if (A) *A = 8643; return TRUE; }
                if (Str::eq(entity, I"&downharpoonright;")) { if (A) *A = 8642; return TRUE; }
                if (Str::eq(entity, I"&drbkarow;")) { if (A) *A = 10512; return TRUE; }
                if (Str::eq(entity, I"&drcorn;")) { if (A) *A = 8991; return TRUE; }
                if (Str::eq(entity, I"&drcrop;")) { if (A) *A = 8972; return TRUE; }
                if (Str::eq(entity, I"&dscr;")) { if (A) *A = 119993; return TRUE; }
                if (Str::eq(entity, I"&dscy;")) { if (A) *A = 1109; return TRUE; }
                if (Str::eq(entity, I"&dsol;")) { if (A) *A = 10742; return TRUE; }
                if (Str::eq(entity, I"&dstrok;")) { if (A) *A = 273; return TRUE; }
                if (Str::eq(entity, I"&dtdot;")) { if (A) *A = 8945; return TRUE; }
                if (Str::eq(entity, I"&dtri;")) { if (A) *A = 9663; return TRUE; }
                if (Str::eq(entity, I"&dtrif;")) { if (A) *A = 9662; return TRUE; }
                if (Str::eq(entity, I"&duarr;")) { if (A) *A = 8693; return TRUE; }
                if (Str::eq(entity, I"&duhar;")) { if (A) *A = 10607; return TRUE; }
                if (Str::eq(entity, I"&dwangle;")) { if (A) *A = 10662; return TRUE; }
                if (Str::eq(entity, I"&dzcy;")) { if (A) *A = 1119; return TRUE; }
                if (Str::eq(entity, I"&dzigrarr;")) { if (A) *A = 10239; return TRUE; }
                break;
            case 'e':
                if (Str::eq(entity, I"&eDDot;")) { if (A) *A = 10871; return TRUE; }
                if (Str::eq(entity, I"&eDot;")) { if (A) *A = 8785; return TRUE; }
                if (Str::eq(entity, I"&eacute")) { if (A) *A = 233; return TRUE; }
                if (Str::eq(entity, I"&eacute;")) { if (A) *A = 233; return TRUE; }
                if (Str::eq(entity, I"&easter;")) { if (A) *A = 10862; return TRUE; }
                if (Str::eq(entity, I"&ecaron;")) { if (A) *A = 283; return TRUE; }
                if (Str::eq(entity, I"&ecir;")) { if (A) *A = 8790; return TRUE; }
                if (Str::eq(entity, I"&ecirc")) { if (A) *A = 234; return TRUE; }
                if (Str::eq(entity, I"&ecirc;")) { if (A) *A = 234; return TRUE; }
                if (Str::eq(entity, I"&ecolon;")) { if (A) *A = 8789; return TRUE; }
                if (Str::eq(entity, I"&ecy;")) { if (A) *A = 1101; return TRUE; }
                if (Str::eq(entity, I"&edot;")) { if (A) *A = 279; return TRUE; }
                if (Str::eq(entity, I"&ee;")) { if (A) *A = 8519; return TRUE; }
                if (Str::eq(entity, I"&efDot;")) { if (A) *A = 8786; return TRUE; }
                if (Str::eq(entity, I"&efr;")) { if (A) *A = 120098; return TRUE; }
                if (Str::eq(entity, I"&eg;")) { if (A) *A = 10906; return TRUE; }
                if (Str::eq(entity, I"&egrave")) { if (A) *A = 232; return TRUE; }
                if (Str::eq(entity, I"&egrave;")) { if (A) *A = 232; return TRUE; }
                if (Str::eq(entity, I"&egs;")) { if (A) *A = 10902; return TRUE; }
                if (Str::eq(entity, I"&egsdot;")) { if (A) *A = 10904; return TRUE; }
                if (Str::eq(entity, I"&el;")) { if (A) *A = 10905; return TRUE; }
                if (Str::eq(entity, I"&elinters;")) { if (A) *A = 9191; return TRUE; }
                if (Str::eq(entity, I"&ell;")) { if (A) *A = 8467; return TRUE; }
                if (Str::eq(entity, I"&els;")) { if (A) *A = 10901; return TRUE; }
                if (Str::eq(entity, I"&elsdot;")) { if (A) *A = 10903; return TRUE; }
                if (Str::eq(entity, I"&emacr;")) { if (A) *A = 275; return TRUE; }
                if (Str::eq(entity, I"&empty;")) { if (A) *A = 8709; return TRUE; }
                if (Str::eq(entity, I"&emptyset;")) { if (A) *A = 8709; return TRUE; }
                if (Str::eq(entity, I"&emptyv;")) { if (A) *A = 8709; return TRUE; }
                if (Str::eq(entity, I"&emsp13;")) { if (A) *A = 8196; return TRUE; }
                if (Str::eq(entity, I"&emsp14;")) { if (A) *A = 8197; return TRUE; }
                if (Str::eq(entity, I"&emsp;")) { if (A) *A = 8195; return TRUE; }
                if (Str::eq(entity, I"&eng;")) { if (A) *A = 331; return TRUE; }
                if (Str::eq(entity, I"&ensp;")) { if (A) *A = 8194; return TRUE; }
                if (Str::eq(entity, I"&eogon;")) { if (A) *A = 281; return TRUE; }
                if (Str::eq(entity, I"&eopf;")) { if (A) *A = 120150; return TRUE; }
                if (Str::eq(entity, I"&epar;")) { if (A) *A = 8917; return TRUE; }
                if (Str::eq(entity, I"&eparsl;")) { if (A) *A = 10723; return TRUE; }
                if (Str::eq(entity, I"&eplus;")) { if (A) *A = 10865; return TRUE; }
                if (Str::eq(entity, I"&epsi;")) { if (A) *A = 949; return TRUE; }
                if (Str::eq(entity, I"&epsilon;")) { if (A) *A = 949; return TRUE; }
                if (Str::eq(entity, I"&epsiv;")) { if (A) *A = 1013; return TRUE; }
                if (Str::eq(entity, I"&eqcirc;")) { if (A) *A = 8790; return TRUE; }
                if (Str::eq(entity, I"&eqcolon;")) { if (A) *A = 8789; return TRUE; }
                if (Str::eq(entity, I"&eqsim;")) { if (A) *A = 8770; return TRUE; }
                if (Str::eq(entity, I"&eqslantgtr;")) { if (A) *A = 10902; return TRUE; }
                if (Str::eq(entity, I"&eqslantless;")) { if (A) *A = 10901; return TRUE; }
                if (Str::eq(entity, I"&equals;")) { if (A) *A = 61; return TRUE; }
                if (Str::eq(entity, I"&equest;")) { if (A) *A = 8799; return TRUE; }
                if (Str::eq(entity, I"&equiv;")) { if (A) *A = 8801; return TRUE; }
                if (Str::eq(entity, I"&equivDD;")) { if (A) *A = 10872; return TRUE; }
                if (Str::eq(entity, I"&eqvparsl;")) { if (A) *A = 10725; return TRUE; }
                if (Str::eq(entity, I"&erDot;")) { if (A) *A = 8787; return TRUE; }
                if (Str::eq(entity, I"&erarr;")) { if (A) *A = 10609; return TRUE; }
                if (Str::eq(entity, I"&escr;")) { if (A) *A = 8495; return TRUE; }
                if (Str::eq(entity, I"&esdot;")) { if (A) *A = 8784; return TRUE; }
                if (Str::eq(entity, I"&esim;")) { if (A) *A = 8770; return TRUE; }
                if (Str::eq(entity, I"&eta;")) { if (A) *A = 951; return TRUE; }
                if (Str::eq(entity, I"&eth")) { if (A) *A = 240; return TRUE; }
                if (Str::eq(entity, I"&eth;")) { if (A) *A = 240; return TRUE; }
                if (Str::eq(entity, I"&euml")) { if (A) *A = 235; return TRUE; }
                if (Str::eq(entity, I"&euml;")) { if (A) *A = 235; return TRUE; }
                if (Str::eq(entity, I"&euro;")) { if (A) *A = 8364; return TRUE; }
                if (Str::eq(entity, I"&excl;")) { if (A) *A = 33; return TRUE; }
                if (Str::eq(entity, I"&exist;")) { if (A) *A = 8707; return TRUE; }
                if (Str::eq(entity, I"&expectation;")) { if (A) *A = 8496; return TRUE; }
                if (Str::eq(entity, I"&exponentiale;")) { if (A) *A = 8519; return TRUE; }
                break;
            case 'f':
                if (Str::eq(entity, I"&fallingdotseq;")) { if (A) *A = 8786; return TRUE; }
                if (Str::eq(entity, I"&fcy;")) { if (A) *A = 1092; return TRUE; }
                if (Str::eq(entity, I"&female;")) { if (A) *A = 9792; return TRUE; }
                if (Str::eq(entity, I"&ffilig;")) { if (A) *A = 64259; return TRUE; }
                if (Str::eq(entity, I"&fflig;")) { if (A) *A = 64256; return TRUE; }
                if (Str::eq(entity, I"&ffllig;")) { if (A) *A = 64260; return TRUE; }
                if (Str::eq(entity, I"&ffr;")) { if (A) *A = 120099; return TRUE; }
                if (Str::eq(entity, I"&filig;")) { if (A) *A = 64257; return TRUE; }
                if (Str::eq(entity, I"&fjlig;")) { if (A) *A = 102; if (B) *B = 106; return TRUE; }
                if (Str::eq(entity, I"&flat;")) { if (A) *A = 9837; return TRUE; }
                if (Str::eq(entity, I"&fllig;")) { if (A) *A = 64258; return TRUE; }
                if (Str::eq(entity, I"&fltns;")) { if (A) *A = 9649; return TRUE; }
                if (Str::eq(entity, I"&fnof;")) { if (A) *A = 402; return TRUE; }
                if (Str::eq(entity, I"&fopf;")) { if (A) *A = 120151; return TRUE; }
                if (Str::eq(entity, I"&forall;")) { if (A) *A = 8704; return TRUE; }
                if (Str::eq(entity, I"&fork;")) { if (A) *A = 8916; return TRUE; }
                if (Str::eq(entity, I"&forkv;")) { if (A) *A = 10969; return TRUE; }
                if (Str::eq(entity, I"&fpartint;")) { if (A) *A = 10765; return TRUE; }
                if (Str::eq(entity, I"&frac12")) { if (A) *A = 189; return TRUE; }
                if (Str::eq(entity, I"&frac12;")) { if (A) *A = 189; return TRUE; }
                if (Str::eq(entity, I"&frac13;")) { if (A) *A = 8531; return TRUE; }
                if (Str::eq(entity, I"&frac14")) { if (A) *A = 188; return TRUE; }
                if (Str::eq(entity, I"&frac14;")) { if (A) *A = 188; return TRUE; }
                if (Str::eq(entity, I"&frac15;")) { if (A) *A = 8533; return TRUE; }
                if (Str::eq(entity, I"&frac16;")) { if (A) *A = 8537; return TRUE; }
                if (Str::eq(entity, I"&frac18;")) { if (A) *A = 8539; return TRUE; }
                if (Str::eq(entity, I"&frac23;")) { if (A) *A = 8532; return TRUE; }
                if (Str::eq(entity, I"&frac25;")) { if (A) *A = 8534; return TRUE; }
                if (Str::eq(entity, I"&frac34")) { if (A) *A = 190; return TRUE; }
                if (Str::eq(entity, I"&frac34;")) { if (A) *A = 190; return TRUE; }
                if (Str::eq(entity, I"&frac35;")) { if (A) *A = 8535; return TRUE; }
                if (Str::eq(entity, I"&frac38;")) { if (A) *A = 8540; return TRUE; }
                if (Str::eq(entity, I"&frac45;")) { if (A) *A = 8536; return TRUE; }
                if (Str::eq(entity, I"&frac56;")) { if (A) *A = 8538; return TRUE; }
                if (Str::eq(entity, I"&frac58;")) { if (A) *A = 8541; return TRUE; }
                if (Str::eq(entity, I"&frac78;")) { if (A) *A = 8542; return TRUE; }
                if (Str::eq(entity, I"&frasl;")) { if (A) *A = 8260; return TRUE; }
                if (Str::eq(entity, I"&frown;")) { if (A) *A = 8994; return TRUE; }
                if (Str::eq(entity, I"&fscr;")) { if (A) *A = 119995; return TRUE; }
                break;
            case 'g':
                if (Str::eq(entity, I"&gE;")) { if (A) *A = 8807; return TRUE; }
                if (Str::eq(entity, I"&gEl;")) { if (A) *A = 10892; return TRUE; }
                if (Str::eq(