// @generated
// this file is autogenerated by
// curl https://html.spec.whatwg.org/entities.json | python generate_entities.py

pub struct CharRef {
    /// Name as it appears escaped in HTML
    pub name: &'static str,
    /// Unescaped character codepoints
    pub characters: &'static str,
}

pub fn try_read_character_reference(
    first_char: char,
    mut try_read: impl FnMut(&str) -> bool,
) -> Option<CharRef> {
    if first_char == 'C' && try_read("ounterClockwiseContourIntegral;") {
        return Some(CharRef {
            name: "ounterClockwiseContourIntegral;",
            characters: "\u{2233}",
        });
    }

    if first_char == 'C' && try_read("lockwiseContourIntegral;") {
        return Some(CharRef {
            name: "lockwiseContourIntegral;",
            characters: "\u{2232}",
        });
    }

    if first_char == 'D' && try_read("oubleLongLeftRightArrow;") {
        return Some(CharRef {
            name: "oubleLongLeftRightArrow;",
            characters: "\u{27fa}",
        });
    }

    if first_char == 'N' && try_read("otNestedGreaterGreater;") {
        return Some(CharRef {
            name: "otNestedGreaterGreater;",
            characters: "\u{2aa2}\u{338}",
        });
    }

    if first_char == 'D' && try_read("iacriticalDoubleAcute;") {
        return Some(CharRef {
            name: "iacriticalDoubleAcute;",
            characters: "\u{2dd}",
        });
    }

    if first_char == 'N' && try_read("otSquareSupersetEqual;") {
        return Some(CharRef {
            name: "otSquareSupersetEqual;",
            characters: "\u{22e3}",
        });
    }

    if first_char == 'C' && try_read("loseCurlyDoubleQuote;") {
        return Some(CharRef {
            name: "loseCurlyDoubleQuote;",
            characters: "\u{201d}",
        });
    }

    if first_char == 'D' && try_read("oubleContourIntegral;") {
        return Some(CharRef {
            name: "oubleContourIntegral;",
            characters: "\u{222f}",
        });
    }

    if first_char == 'F' && try_read("illedVerySmallSquare;") {
        return Some(CharRef {
            name: "illedVerySmallSquare;",
            characters: "\u{25aa}",
        });
    }

    if first_char == 'N' && try_read("egativeVeryThinSpace;") {
        return Some(CharRef {
            name: "egativeVeryThinSpace;",
            characters: "\u{200b}",
        });
    }

    if first_char == 'N' && try_read("otPrecedesSlantEqual;") {
        return Some(CharRef {
            name: "otPrecedesSlantEqual;",
            characters: "\u{22e0}",
        });
    }

    if first_char == 'N' && try_read("otRightTriangleEqual;") {
        return Some(CharRef {
            name: "otRightTriangleEqual;",
            characters: "\u{22ed}",
        });
    }

    if first_char == 'N' && try_read("otSucceedsSlantEqual;") {
        return Some(CharRef {
            name: "otSucceedsSlantEqual;",
            characters: "\u{22e1}",
        });
    }

    if first_char == 'C' && try_read("apitalDifferentialD;") {
        return Some(CharRef {
            name: "apitalDifferentialD;",
            characters: "\u{2145}",
        });
    }

    if first_char == 'D' && try_read("oubleLeftRightArrow;") {
        return Some(CharRef {
            name: "oubleLeftRightArrow;",
            characters: "\u{21d4}",
        });
    }

    if first_char == 'D' && try_read("oubleLongRightArrow;") {
        return Some(CharRef {
            name: "oubleLongRightArrow;",
            characters: "\u{27f9}",
        });
    }

    if first_char == 'E' && try_read("mptyVerySmallSquare;") {
        return Some(CharRef {
            name: "mptyVerySmallSquare;",
            characters: "\u{25ab}",
        });
    }

    if first_char == 'N' && try_read("estedGreaterGreater;") {
        return Some(CharRef {
            name: "estedGreaterGreater;",
            characters: "\u{226b}",
        });
    }

    if first_char == 'N' && try_read("otDoubleVerticalBar;") {
        return Some(CharRef {
            name: "otDoubleVerticalBar;",
            characters: "\u{2226}",
        });
    }

    if first_char == 'N' && try_read("otGreaterSlantEqual;") {
        return Some(CharRef {
            name: "otGreaterSlantEqual;",
            characters: "\u{2a7e}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otLeftTriangleEqual;") {
        return Some(CharRef {
            name: "otLeftTriangleEqual;",
            characters: "\u{22ec}",
        });
    }

    if first_char == 'N' && try_read("otSquareSubsetEqual;") {
        return Some(CharRef {
            name: "otSquareSubsetEqual;",
            characters: "\u{22e2}",
        });
    }

    if first_char == 'O' && try_read("penCurlyDoubleQuote;") {
        return Some(CharRef {
            name: "penCurlyDoubleQuote;",
            characters: "\u{201c}",
        });
    }

    if first_char == 'R' && try_read("everseUpEquilibrium;") {
        return Some(CharRef {
            name: "everseUpEquilibrium;",
            characters: "\u{296f}",
        });
    }

    if first_char == 'D' && try_read("oubleLongLeftArrow;") {
        return Some(CharRef {
            name: "oubleLongLeftArrow;",
            characters: "\u{27f8}",
        });
    }

    if first_char == 'D' && try_read("ownLeftRightVector;") {
        return Some(CharRef {
            name: "ownLeftRightVector;",
            characters: "\u{2950}",
        });
    }

    if first_char == 'L' && try_read("eftArrowRightArrow;") {
        return Some(CharRef {
            name: "eftArrowRightArrow;",
            characters: "\u{21c6}",
        });
    }

    if first_char == 'N' && try_read("egativeMediumSpace;") {
        return Some(CharRef {
            name: "egativeMediumSpace;",
            characters: "\u{200b}",
        });
    }

    if first_char == 'N' && try_read("otGreaterFullEqual;") {
        return Some(CharRef {
            name: "otGreaterFullEqual;",
            characters: "\u{2267}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otRightTriangleBar;") {
        return Some(CharRef {
            name: "otRightTriangleBar;",
            characters: "\u{29d0}\u{338}",
        });
    }

    if first_char == 'R' && try_read("ightArrowLeftArrow;") {
        return Some(CharRef {
            name: "ightArrowLeftArrow;",
            characters: "\u{21c4}",
        });
    }

    if first_char == 'S' && try_read("quareSupersetEqual;") {
        return Some(CharRef {
            name: "quareSupersetEqual;",
            characters: "\u{2292}",
        });
    }

    if first_char == 'l' && try_read("eftrightsquigarrow;") {
        return Some(CharRef {
            name: "eftrightsquigarrow;",
            characters: "\u{21ad}",
        });
    }

    if first_char == 'D' && try_read("ownRightTeeVector;") {
        return Some(CharRef {
            name: "ownRightTeeVector;",
            characters: "\u{295f}",
        });
    }

    if first_char == 'D' && try_read("ownRightVectorBar;") {
        return Some(CharRef {
            name: "ownRightVectorBar;",
            characters: "\u{2957}",
        });
    }

    if first_char == 'L' && try_read("ongLeftRightArrow;") {
        return Some(CharRef {
            name: "ongLeftRightArrow;",
            characters: "\u{27f7}",
        });
    }

    if first_char == 'L' && try_read("ongleftrightarrow;") {
        return Some(CharRef {
            name: "ongleftrightarrow;",
            characters: "\u{27fa}",
        });
    }

    if first_char == 'N' && try_read("egativeThickSpace;") {
        return Some(CharRef {
            name: "egativeThickSpace;",
            characters: "\u{200b}",
        });
    }

    if first_char == 'N' && try_read("otLeftTriangleBar;") {
        return Some(CharRef {
            name: "otLeftTriangleBar;",
            characters: "\u{29cf}\u{338}",
        });
    }

    if first_char == 'P' && try_read("recedesSlantEqual;") {
        return Some(CharRef {
            name: "recedesSlantEqual;",
            characters: "\u{227c}",
        });
    }

    if first_char == 'R' && try_read("everseEquilibrium;") {
        return Some(CharRef {
            name: "everseEquilibrium;",
            characters: "\u{21cb}",
        });
    }

    if first_char == 'R' && try_read("ightDoubleBracket;") {
        return Some(CharRef {
            name: "ightDoubleBracket;",
            characters: "\u{27e7}",
        });
    }

    if first_char == 'R' && try_read("ightDownTeeVector;") {
        return Some(CharRef {
            name: "ightDownTeeVector;",
            characters: "\u{295d}",
        });
    }

    if first_char == 'R' && try_read("ightDownVectorBar;") {
        return Some(CharRef {
            name: "ightDownVectorBar;",
            characters: "\u{2955}",
        });
    }

    if first_char == 'R' && try_read("ightTriangleEqual;") {
        return Some(CharRef {
            name: "ightTriangleEqual;",
            characters: "\u{22b5}",
        });
    }

    if first_char == 'S' && try_read("quareIntersection;") {
        return Some(CharRef {
            name: "quareIntersection;",
            characters: "\u{2293}",
        });
    }

    if first_char == 'S' && try_read("ucceedsSlantEqual;") {
        return Some(CharRef {
            name: "ucceedsSlantEqual;",
            characters: "\u{227d}",
        });
    }

    if first_char == 'b' && try_read("lacktriangleright;") {
        return Some(CharRef {
            name: "lacktriangleright;",
            characters: "\u{25b8}",
        });
    }

    if first_char == 'l' && try_read("ongleftrightarrow;") {
        return Some(CharRef {
            name: "ongleftrightarrow;",
            characters: "\u{27f7}",
        });
    }

    if first_char == 'D' && try_read("oubleUpDownArrow;") {
        return Some(CharRef {
            name: "oubleUpDownArrow;",
            characters: "\u{21d5}",
        });
    }

    if first_char == 'D' && try_read("oubleVerticalBar;") {
        return Some(CharRef {
            name: "oubleVerticalBar;",
            characters: "\u{2225}",
        });
    }

    if first_char == 'D' && try_read("ownLeftTeeVector;") {
        return Some(CharRef {
            name: "ownLeftTeeVector;",
            characters: "\u{295e}",
        });
    }

    if first_char == 'D' && try_read("ownLeftVectorBar;") {
        return Some(CharRef {
            name: "ownLeftVectorBar;",
            characters: "\u{2956}",
        });
    }

    if first_char == 'F' && try_read("illedSmallSquare;") {
        return Some(CharRef {
            name: "illedSmallSquare;",
            characters: "\u{25fc}",
        });
    }

    if first_char == 'G' && try_read("reaterSlantEqual;") {
        return Some(CharRef {
            name: "reaterSlantEqual;",
            characters: "\u{2a7e}",
        });
    }

    if first_char == 'L' && try_read("eftDoubleBracket;") {
        return Some(CharRef {
            name: "eftDoubleBracket;",
            characters: "\u{27e6}",
        });
    }

    if first_char == 'L' && try_read("eftDownTeeVector;") {
        return Some(CharRef {
            name: "eftDownTeeVector;",
            characters: "\u{2961}",
        });
    }

    if first_char == 'L' && try_read("eftDownVectorBar;") {
        return Some(CharRef {
            name: "eftDownVectorBar;",
            characters: "\u{2959}",
        });
    }

    if first_char == 'L' && try_read("eftTriangleEqual;") {
        return Some(CharRef {
            name: "eftTriangleEqual;",
            characters: "\u{22b4}",
        });
    }

    if first_char == 'N' && try_read("egativeThinSpace;") {
        return Some(CharRef {
            name: "egativeThinSpace;",
            characters: "\u{200b}",
        });
    }

    if first_char == 'N' && try_read("otGreaterGreater;") {
        return Some(CharRef {
            name: "otGreaterGreater;",
            characters: "\u{226b}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otLessSlantEqual;") {
        return Some(CharRef {
            name: "otLessSlantEqual;",
            characters: "\u{2a7d}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otNestedLessLess;") {
        return Some(CharRef {
            name: "otNestedLessLess;",
            characters: "\u{2aa1}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otReverseElement;") {
        return Some(CharRef {
            name: "otReverseElement;",
            characters: "\u{220c}",
        });
    }

    if first_char == 'N' && try_read("otSquareSuperset;") {
        return Some(CharRef {
            name: "otSquareSuperset;",
            characters: "\u{2290}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otTildeFullEqual;") {
        return Some(CharRef {
            name: "otTildeFullEqual;",
            characters: "\u{2247}",
        });
    }

    if first_char == 'R' && try_read("ightAngleBracket;") {
        return Some(CharRef {
            name: "ightAngleBracket;",
            characters: "\u{27e9}",
        });
    }

    if first_char == 'R' && try_read("ightUpDownVector;") {
        return Some(CharRef {
            name: "ightUpDownVector;",
            characters: "\u{294f}",
        });
    }

    if first_char == 'S' && try_read("quareSubsetEqual;") {
        return Some(CharRef {
            name: "quareSubsetEqual;",
            characters: "\u{2291}",
        });
    }

    if first_char == 'V' && try_read("erticalSeparator;") {
        return Some(CharRef {
            name: "erticalSeparator;",
            characters: "\u{2758}",
        });
    }

    if first_char == 'b' && try_read("lacktriangledown;") {
        return Some(CharRef {
            name: "lacktriangledown;",
            characters: "\u{25be}",
        });
    }

    if first_char == 'b' && try_read("lacktriangleleft;") {
        return Some(CharRef {
            name: "lacktriangleleft;",
            characters: "\u{25c2}",
        });
    }

    if first_char == 'l' && try_read("eftrightharpoons;") {
        return Some(CharRef {
            name: "eftrightharpoons;",
            characters: "\u{21cb}",
        });
    }

    if first_char == 'r' && try_read("ightleftharpoons;") {
        return Some(CharRef {
            name: "ightleftharpoons;",
            characters: "\u{21cc}",
        });
    }

    if first_char == 't' && try_read("woheadrightarrow;") {
        return Some(CharRef {
            name: "woheadrightarrow;",
            characters: "\u{21a0}",
        });
    }

    if first_char == 'D' && try_read("iacriticalAcute;") {
        return Some(CharRef {
            name: "iacriticalAcute;",
            characters: "\u{b4}",
        });
    }

    if first_char == 'D' && try_read("iacriticalGrave;") {
        return Some(CharRef {
            name: "iacriticalGrave;",
            characters: "\u{60}",
        });
    }

    if first_char == 'D' && try_read("iacriticalTilde;") {
        return Some(CharRef {
            name: "iacriticalTilde;",
            characters: "\u{2dc}",
        });
    }

    if first_char == 'D' && try_read("oubleRightArrow;") {
        return Some(CharRef {
            name: "oubleRightArrow;",
            characters: "\u{21d2}",
        });
    }

    if first_char == 'D' && try_read("ownArrowUpArrow;") {
        return Some(CharRef {
            name: "ownArrowUpArrow;",
            characters: "\u{21f5}",
        });
    }

    if first_char == 'E' && try_read("mptySmallSquare;") {
        return Some(CharRef {
            name: "mptySmallSquare;",
            characters: "\u{25fb}",
        });
    }

    if first_char == 'G' && try_read("reaterEqualLess;") {
        return Some(CharRef {
            name: "reaterEqualLess;",
            characters: "\u{22db}",
        });
    }

    if first_char == 'G' && try_read("reaterFullEqual;") {
        return Some(CharRef {
            name: "reaterFullEqual;",
            characters: "\u{2267}",
        });
    }

    if first_char == 'L' && try_read("eftAngleBracket;") {
        return Some(CharRef {
            name: "eftAngleBracket;",
            characters: "\u{27e8}",
        });
    }

    if first_char == 'L' && try_read("eftUpDownVector;") {
        return Some(CharRef {
            name: "eftUpDownVector;",
            characters: "\u{2951}",
        });
    }

    if first_char == 'L' && try_read("essEqualGreater;") {
        return Some(CharRef {
            name: "essEqualGreater;",
            characters: "\u{22da}",
        });
    }

    if first_char == 'N' && try_read("onBreakingSpace;") {
        return Some(CharRef {
            name: "onBreakingSpace;",
            characters: "\u{a0}",
        });
    }

    if first_char == 'N' && try_read("otPrecedesEqual;") {
        return Some(CharRef {
            name: "otPrecedesEqual;",
            characters: "\u{2aaf}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otRightTriangle;") {
        return Some(CharRef {
            name: "otRightTriangle;",
            characters: "\u{22eb}",
        });
    }

    if first_char == 'N' && try_read("otSucceedsEqual;") {
        return Some(CharRef {
            name: "otSucceedsEqual;",
            characters: "\u{2ab0}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otSucceedsTilde;") {
        return Some(CharRef {
            name: "otSucceedsTilde;",
            characters: "\u{227f}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otSupersetEqual;") {
        return Some(CharRef {
            name: "otSupersetEqual;",
            characters: "\u{2289}",
        });
    }

    if first_char == 'R' && try_read("ightTriangleBar;") {
        return Some(CharRef {
            name: "ightTriangleBar;",
            characters: "\u{29d0}",
        });
    }

    if first_char == 'R' && try_read("ightUpTeeVector;") {
        return Some(CharRef {
            name: "ightUpTeeVector;",
            characters: "\u{295c}",
        });
    }

    if first_char == 'R' && try_read("ightUpVectorBar;") {
        return Some(CharRef {
            name: "ightUpVectorBar;",
            characters: "\u{2954}",
        });
    }

    if first_char == 'U' && try_read("nderParenthesis;") {
        return Some(CharRef {
            name: "nderParenthesis;",
            characters: "\u{23dd}",
        });
    }

    if first_char == 'U' && try_read("pArrowDownArrow;") {
        return Some(CharRef {
            name: "pArrowDownArrow;",
            characters: "\u{21c5}",
        });
    }

    if first_char == 'c' && try_read("irclearrowright;") {
        return Some(CharRef {
            name: "irclearrowright;",
            characters: "\u{21bb}",
        });
    }

    if first_char == 'd' && try_read("ownharpoonright;") {
        return Some(CharRef {
            name: "ownharpoonright;",
            characters: "\u{21c2}",
        });
    }

    if first_char == 'n' && try_read("trianglerighteq;") {
        return Some(CharRef {
            name: "trianglerighteq;",
            characters: "\u{22ed}",
        });
    }

    if first_char == 'r' && try_read("ightharpoondown;") {
        return Some(CharRef {
            name: "ightharpoondown;",
            characters: "\u{21c1}",
        });
    }

    if first_char == 'r' && try_read("ightrightarrows;") {
        return Some(CharRef {
            name: "ightrightarrows;",
            characters: "\u{21c9}",
        });
    }

    if first_char == 't' && try_read("woheadleftarrow;") {
        return Some(CharRef {
            name: "woheadleftarrow;",
            characters: "\u{219e}",
        });
    }

    if first_char == 'v' && try_read("artriangleright;") {
        return Some(CharRef {
            name: "artriangleright;",
            characters: "\u{22b3}",
        });
    }

    if first_char == 'C' && try_read("loseCurlyQuote;") {
        return Some(CharRef {
            name: "loseCurlyQuote;",
            characters: "\u{2019}",
        });
    }

    if first_char == 'C' && try_read("ontourIntegral;") {
        return Some(CharRef {
            name: "ontourIntegral;",
            characters: "\u{222e}",
        });
    }

    if first_char == 'D' && try_read("oubleDownArrow;") {
        return Some(CharRef {
            name: "oubleDownArrow;",
            characters: "\u{21d3}",
        });
    }

    if first_char == 'D' && try_read("oubleLeftArrow;") {
        return Some(CharRef {
            name: "oubleLeftArrow;",
            characters: "\u{21d0}",
        });
    }

    if first_char == 'D' && try_read("ownRightVector;") {
        return Some(CharRef {
            name: "ownRightVector;",
            characters: "\u{21c1}",
        });
    }

    if first_char == 'L' && try_read("eftRightVector;") {
        return Some(CharRef {
            name: "eftRightVector;",
            characters: "\u{294e}",
        });
    }

    if first_char == 'L' && try_read("eftTriangleBar;") {
        return Some(CharRef {
            name: "eftTriangleBar;",
            characters: "\u{29cf}",
        });
    }

    if first_char == 'L' && try_read("eftUpTeeVector;") {
        return Some(CharRef {
            name: "eftUpTeeVector;",
            characters: "\u{2960}",
        });
    }

    if first_char == 'L' && try_read("eftUpVectorBar;") {
        return Some(CharRef {
            name: "eftUpVectorBar;",
            characters: "\u{2958}",
        });
    }

    if first_char == 'L' && try_read("owerRightArrow;") {
        return Some(CharRef {
            name: "owerRightArrow;",
            characters: "\u{2198}",
        });
    }

    if first_char == 'N' && try_read("otGreaterEqual;") {
        return Some(CharRef {
            name: "otGreaterEqual;",
            characters: "\u{2271}",
        });
    }

    if first_char == 'N' && try_read("otGreaterTilde;") {
        return Some(CharRef {
            name: "otGreaterTilde;",
            characters: "\u{2275}",
        });
    }

    if first_char == 'N' && try_read("otHumpDownHump;") {
        return Some(CharRef {
            name: "otHumpDownHump;",
            characters: "\u{224e}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otLeftTriangle;") {
        return Some(CharRef {
            name: "otLeftTriangle;",
            characters: "\u{22ea}",
        });
    }

    if first_char == 'N' && try_read("otSquareSubset;") {
        return Some(CharRef {
            name: "otSquareSubset;",
            characters: "\u{228f}\u{338}",
        });
    }

    if first_char == 'O' && try_read("verParenthesis;") {
        return Some(CharRef {
            name: "verParenthesis;",
            characters: "\u{23dc}",
        });
    }

    if first_char == 'R' && try_read("ightDownVector;") {
        return Some(CharRef {
            name: "ightDownVector;",
            characters: "\u{21c2}",
        });
    }

    if first_char == 'S' && try_read("hortRightArrow;") {
        return Some(CharRef {
            name: "hortRightArrow;",
            characters: "\u{2192}",
        });
    }

    if first_char == 'U' && try_read("pperRightArrow;") {
        return Some(CharRef {
            name: "pperRightArrow;",
            characters: "\u{2197}",
        });
    }

    if first_char == 'b' && try_read("igtriangledown;") {
        return Some(CharRef {
            name: "igtriangledown;",
            characters: "\u{25bd}",
        });
    }

    if first_char == 'c' && try_read("irclearrowleft;") {
        return Some(CharRef {
            name: "irclearrowleft;",
            characters: "\u{21ba}",
        });
    }

    if first_char == 'c' && try_read("urvearrowright;") {
        return Some(CharRef {
            name: "urvearrowright;",
            characters: "\u{21b7}",
        });
    }

    if first_char == 'd' && try_read("ownharpoonleft;") {
        return Some(CharRef {
            name: "ownharpoonleft;",
            characters: "\u{21c3}",
        });
    }

    if first_char == 'l' && try_read("eftharpoondown;") {
        return Some(CharRef {
            name: "eftharpoondown;",
            characters: "\u{21bd}",
        });
    }

    if first_char == 'l' && try_read("eftrightarrows;") {
        return Some(CharRef {
            name: "eftrightarrows;",
            characters: "\u{21c6}",
        });
    }

    if first_char == 'n' && try_read("Leftrightarrow;") {
        return Some(CharRef {
            name: "Leftrightarrow;",
            characters: "\u{21ce}",
        });
    }

    if first_char == 'n' && try_read("leftrightarrow;") {
        return Some(CharRef {
            name: "leftrightarrow;",
            characters: "\u{21ae}",
        });
    }

    if first_char == 'n' && try_read("trianglelefteq;") {
        return Some(CharRef {
            name: "trianglelefteq;",
            characters: "\u{22ec}",
        });
    }

    if first_char == 'r' && try_read("ightleftarrows;") {
        return Some(CharRef {
            name: "ightleftarrows;",
            characters: "\u{21c4}",
        });
    }

    if first_char == 'r' && try_read("ightsquigarrow;") {
        return Some(CharRef {
            name: "ightsquigarrow;",
            characters: "\u{219d}",
        });
    }

    if first_char == 'r' && try_read("ightthreetimes;") {
        return Some(CharRef {
            name: "ightthreetimes;",
            characters: "\u{22cc}",
        });
    }

    if first_char == 's' && try_read("traightepsilon;") {
        return Some(CharRef {
            name: "traightepsilon;",
            characters: "\u{3f5}",
        });
    }

    if first_char == 't' && try_read("rianglerighteq;") {
        return Some(CharRef {
            name: "rianglerighteq;",
            characters: "\u{22b5}",
        });
    }

    if first_char == 'v' && try_read("artriangleleft;") {
        return Some(CharRef {
            name: "artriangleleft;",
            characters: "\u{22b2}",
        });
    }

    if first_char == 'D' && try_read("iacriticalDot;") {
        return Some(CharRef {
            name: "iacriticalDot;",
            characters: "\u{2d9}",
        });
    }

    if first_char == 'D' && try_read("oubleRightTee;") {
        return Some(CharRef {
            name: "oubleRightTee;",
            characters: "\u{22a8}",
        });
    }

    if first_char == 'D' && try_read("ownLeftVector;") {
        return Some(CharRef {
            name: "ownLeftVector;",
            characters: "\u{21bd}",
        });
    }

    if first_char == 'G' && try_read("reaterGreater;") {
        return Some(CharRef {
            name: "reaterGreater;",
            characters: "\u{2aa2}",
        });
    }

    if first_char == 'H' && try_read("orizontalLine;") {
        return Some(CharRef {
            name: "orizontalLine;",
            characters: "\u{2500}",
        });
    }

    if first_char == 'I' && try_read("nvisibleComma;") {
        return Some(CharRef {
            name: "nvisibleComma;",
            characters: "\u{2063}",
        });
    }

    if first_char == 'I' && try_read("nvisibleTimes;") {
        return Some(CharRef {
            name: "nvisibleTimes;",
            characters: "\u{2062}",
        });
    }

    if first_char == 'L' && try_read("eftDownVector;") {
        return Some(CharRef {
            name: "eftDownVector;",
            characters: "\u{21c3}",
        });
    }

    if first_char == 'L' && try_read("eftRightArrow;") {
        return Some(CharRef {
            name: "eftRightArrow;",
            characters: "\u{2194}",
        });
    }

    if first_char == 'L' && try_read("eftrightarrow;") {
        return Some(CharRef {
            name: "eftrightarrow;",
            characters: "\u{21d4}",
        });
    }

    if first_char == 'L' && try_read("essSlantEqual;") {
        return Some(CharRef {
            name: "essSlantEqual;",
            characters: "\u{2a7d}",
        });
    }

    if first_char == 'L' && try_read("ongRightArrow;") {
        return Some(CharRef {
            name: "ongRightArrow;",
            characters: "\u{27f6}",
        });
    }

    if first_char == 'L' && try_read("ongrightarrow;") {
        return Some(CharRef {
            name: "ongrightarrow;",
            characters: "\u{27f9}",
        });
    }

    if first_char == 'L' && try_read("owerLeftArrow;") {
        return Some(CharRef {
            name: "owerLeftArrow;",
            characters: "\u{2199}",
        });
    }

    if first_char == 'N' && try_read("estedLessLess;") {
        return Some(CharRef {
            name: "estedLessLess;",
            characters: "\u{226a}",
        });
    }

    if first_char == 'N' && try_read("otGreaterLess;") {
        return Some(CharRef {
            name: "otGreaterLess;",
            characters: "\u{2279}",
        });
    }

    if first_char == 'N' && try_read("otLessGreater;") {
        return Some(CharRef {
            name: "otLessGreater;",
            characters: "\u{2278}",
        });
    }

    if first_char == 'N' && try_read("otSubsetEqual;") {
        return Some(CharRef {
            name: "otSubsetEqual;",
            characters: "\u{2288}",
        });
    }

    if first_char == 'N' && try_read("otVerticalBar;") {
        return Some(CharRef {
            name: "otVerticalBar;",
            characters: "\u{2224}",
        });
    }

    if first_char == 'O' && try_read("penCurlyQuote;") {
        return Some(CharRef {
            name: "penCurlyQuote;",
            characters: "\u{2018}",
        });
    }

    if first_char == 'R' && try_read("everseElement;") {
        return Some(CharRef {
            name: "everseElement;",
            characters: "\u{220b}",
        });
    }

    if first_char == 'R' && try_read("ightTeeVector;") {
        return Some(CharRef {
            name: "ightTeeVector;",
            characters: "\u{295b}",
        });
    }

    if first_char == 'R' && try_read("ightVectorBar;") {
        return Some(CharRef {
            name: "ightVectorBar;",
            characters: "\u{2953}",
        });
    }

    if first_char == 'S' && try_read("hortDownArrow;") {
        return Some(CharRef {
            name: "hortDownArrow;",
            characters: "\u{2193}",
        });
    }

    if first_char == 'S' && try_read("hortLeftArrow;") {
        return Some(CharRef {
            name: "hortLeftArrow;",
            characters: "\u{2190}",
        });
    }

    if first_char == 'S' && try_read("quareSuperset;") {
        return Some(CharRef {
            name: "quareSuperset;",
            characters: "\u{2290}",
        });
    }

    if first_char == 'T' && try_read("ildeFullEqual;") {
        return Some(CharRef {
            name: "ildeFullEqual;",
            characters: "\u{2245}",
        });
    }

    if first_char == 'U' && try_read("pperLeftArrow;") {
        return Some(CharRef {
            name: "pperLeftArrow;",
            characters: "\u{2196}",
        });
    }

    if first_char == 'Z' && try_read("eroWidthSpace;") {
        return Some(CharRef {
            name: "eroWidthSpace;",
            characters: "\u{200b}",
        });
    }

    if first_char == 'c' && try_read("urvearrowleft;") {
        return Some(CharRef {
            name: "urvearrowleft;",
            characters: "\u{21b6}",
        });
    }

    if first_char == 'd' && try_read("oublebarwedge;") {
        return Some(CharRef {
            name: "oublebarwedge;",
            characters: "\u{2306}",
        });
    }

    if first_char == 'd' && try_read("owndownarrows;") {
        return Some(CharRef {
            name: "owndownarrows;",
            characters: "\u{21ca}",
        });
    }

    if first_char == 'h' && try_read("ookrightarrow;") {
        return Some(CharRef {
            name: "ookrightarrow;",
            characters: "\u{21aa}",
        });
    }

    if first_char == 'l' && try_read("eftleftarrows;") {
        return Some(CharRef {
            name: "eftleftarrows;",
            characters: "\u{21c7}",
        });
    }

    if first_char == 'l' && try_read("eftrightarrow;") {
        return Some(CharRef {
            name: "eftrightarrow;",
            characters: "\u{2194}",
        });
    }

    if first_char == 'l' && try_read("eftthreetimes;") {
        return Some(CharRef {
            name: "eftthreetimes;",
            characters: "\u{22cb}",
        });
    }

    if first_char == 'l' && try_read("ongrightarrow;") {
        return Some(CharRef {
            name: "ongrightarrow;",
            characters: "\u{27f6}",
        });
    }

    if first_char == 'l' && try_read("ooparrowright;") {
        return Some(CharRef {
            name: "ooparrowright;",
            characters: "\u{21ac}",
        });
    }

    if first_char == 'n' && try_read("shortparallel;") {
        return Some(CharRef {
            name: "shortparallel;",
            characters: "\u{2226}",
        });
    }

    if first_char == 'n' && try_read("triangleright;") {
        return Some(CharRef {
            name: "triangleright;",
            characters: "\u{22eb}",
        });
    }

    if first_char == 'r' && try_read("ightarrowtail;") {
        return Some(CharRef {
            name: "ightarrowtail;",
            characters: "\u{21a3}",
        });
    }

    if first_char == 'r' && try_read("ightharpoonup;") {
        return Some(CharRef {
            name: "ightharpoonup;",
            characters: "\u{21c0}",
        });
    }

    if first_char == 't' && try_read("rianglelefteq;") {
        return Some(CharRef {
            name: "rianglelefteq;",
            characters: "\u{22b4}",
        });
    }

    if first_char == 'u' && try_read("pharpoonright;") {
        return Some(CharRef {
            name: "pharpoonright;",
            characters: "\u{21be}",
        });
    }

    if first_char == 'A' && try_read("pplyFunction;") {
        return Some(CharRef {
            name: "pplyFunction;",
            characters: "\u{2061}",
        });
    }

    if first_char == 'D' && try_read("ifferentialD;") {
        return Some(CharRef {
            name: "ifferentialD;",
            characters: "\u{2146}",
        });
    }

    if first_char == 'D' && try_read("oubleLeftTee;") {
        return Some(CharRef {
            name: "oubleLeftTee;",
            characters: "\u{2ae4}",
        });
    }

    if first_char == 'D' && try_read("oubleUpArrow;") {
        return Some(CharRef {
            name: "oubleUpArrow;",
            characters: "\u{21d1}",
        });
    }

    if first_char == 'L' && try_read("eftTeeVector;") {
        return Some(CharRef {
            name: "eftTeeVector;",
            characters: "\u{295a}",
        });
    }

    if first_char == 'L' && try_read("eftVectorBar;") {
        return Some(CharRef {
            name: "eftVectorBar;",
            characters: "\u{2952}",
        });
    }

    if first_char == 'L' && try_read("essFullEqual;") {
        return Some(CharRef {
            name: "essFullEqual;",
            characters: "\u{2266}",
        });
    }

    if first_char == 'L' && try_read("ongLeftArrow;") {
        return Some(CharRef {
            name: "ongLeftArrow;",
            characters: "\u{27f5}",
        });
    }

    if first_char == 'L' && try_read("ongleftarrow;") {
        return Some(CharRef {
            name: "ongleftarrow;",
            characters: "\u{27f8}",
        });
    }

    if first_char == 'N' && try_read("otEqualTilde;") {
        return Some(CharRef {
            name: "otEqualTilde;",
            characters: "\u{2242}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otTildeEqual;") {
        return Some(CharRef {
            name: "otTildeEqual;",
            characters: "\u{2244}",
        });
    }

    if first_char == 'N' && try_read("otTildeTilde;") {
        return Some(CharRef {
            name: "otTildeTilde;",
            characters: "\u{2249}",
        });
    }

    if first_char == 'P' && try_read("oincareplane;") {
        return Some(CharRef {
            name: "oincareplane;",
            characters: "\u{210c}",
        });
    }

    if first_char == 'P' && try_read("recedesEqual;") {
        return Some(CharRef {
            name: "recedesEqual;",
            characters: "\u{2aaf}",
        });
    }

    if first_char == 'P' && try_read("recedesTilde;") {
        return Some(CharRef {
            name: "recedesTilde;",
            characters: "\u{227e}",
        });
    }

    if first_char == 'R' && try_read("ightArrowBar;") {
        return Some(CharRef {
            name: "ightArrowBar;",
            characters: "\u{21e5}",
        });
    }

    if first_char == 'R' && try_read("ightTeeArrow;") {
        return Some(CharRef {
            name: "ightTeeArrow;",
            characters: "\u{21a6}",
        });
    }

    if first_char == 'R' && try_read("ightTriangle;") {
        return Some(CharRef {
            name: "ightTriangle;",
            characters: "\u{22b3}",
        });
    }

    if first_char == 'R' && try_read("ightUpVector;") {
        return Some(CharRef {
            name: "ightUpVector;",
            characters: "\u{21be}",
        });
    }

    if first_char == 'S' && try_read("ucceedsEqual;") {
        return Some(CharRef {
            name: "ucceedsEqual;",
            characters: "\u{2ab0}",
        });
    }

    if first_char == 'S' && try_read("ucceedsTilde;") {
        return Some(CharRef {
            name: "ucceedsTilde;",
            characters: "\u{227f}",
        });
    }

    if first_char == 'S' && try_read("upersetEqual;") {
        return Some(CharRef {
            name: "upersetEqual;",
            characters: "\u{2287}",
        });
    }

    if first_char == 'U' && try_read("pEquilibrium;") {
        return Some(CharRef {
            name: "pEquilibrium;",
            characters: "\u{296e}",
        });
    }

    if first_char == 'V' && try_read("erticalTilde;") {
        return Some(CharRef {
            name: "erticalTilde;",
            characters: "\u{2240}",
        });
    }

    if first_char == 'V' && try_read("eryThinSpace;") {
        return Some(CharRef {
            name: "eryThinSpace;",
            characters: "\u{200a}",
        });
    }

    if first_char == 'b' && try_read("igtriangleup;") {
        return Some(CharRef {
            name: "igtriangleup;",
            characters: "\u{25b3}",
        });
    }

    if first_char == 'b' && try_read("lacktriangle;") {
        return Some(CharRef {
            name: "lacktriangle;",
            characters: "\u{25b4}",
        });
    }

    if first_char == 'd' && try_read("ivideontimes;") {
        return Some(CharRef {
            name: "ivideontimes;",
            characters: "\u{22c7}",
        });
    }

    if first_char == 'f' && try_read("allingdotseq;") {
        return Some(CharRef {
            name: "allingdotseq;",
            characters: "\u{2252}",
        });
    }

    if first_char == 'h' && try_read("ookleftarrow;") {
        return Some(CharRef {
            name: "ookleftarrow;",
            characters: "\u{21a9}",
        });
    }

    if first_char == 'l' && try_read("eftarrowtail;") {
        return Some(CharRef {
            name: "eftarrowtail;",
            characters: "\u{21a2}",
        });
    }

    if first_char == 'l' && try_read("eftharpoonup;") {
        return Some(CharRef {
            name: "eftharpoonup;",
            characters: "\u{21bc}",
        });
    }

    if first_char == 'l' && try_read("ongleftarrow;") {
        return Some(CharRef {
            name: "ongleftarrow;",
            characters: "\u{27f5}",
        });
    }

    if first_char == 'l' && try_read("ooparrowleft;") {
        return Some(CharRef {
            name: "ooparrowleft;",
            characters: "\u{21ab}",
        });
    }

    if first_char == 'm' && try_read("easuredangle;") {
        return Some(CharRef {
            name: "easuredangle;",
            characters: "\u{2221}",
        });
    }

    if first_char == 'n' && try_read("triangleleft;") {
        return Some(CharRef {
            name: "triangleleft;",
            characters: "\u{22ea}",
        });
    }

    if first_char == 's' && try_read("hortparallel;") {
        return Some(CharRef {
            name: "hortparallel;",
            characters: "\u{2225}",
        });
    }

    if first_char == 's' && try_read("mallsetminus;") {
        return Some(CharRef {
            name: "mallsetminus;",
            characters: "\u{2216}",
        });
    }

    if first_char == 't' && try_read("riangleright;") {
        return Some(CharRef {
            name: "riangleright;",
            characters: "\u{25b9}",
        });
    }

    if first_char == 'u' && try_read("pharpoonleft;") {
        return Some(CharRef {
            name: "pharpoonleft;",
            characters: "\u{21bf}",
        });
    }

    if first_char == 'v' && try_read("arsubsetneqq;") {
        return Some(CharRef {
            name: "arsubsetneqq;",
            characters: "\u{2acb}\u{fe00}",
        });
    }

    if first_char == 'v' && try_read("arsupsetneqq;") {
        return Some(CharRef {
            name: "arsupsetneqq;",
            characters: "\u{2acc}\u{fe00}",
        });
    }

    if first_char == 'D' && try_read("ownArrowBar;") {
        return Some(CharRef {
            name: "ownArrowBar;",
            characters: "\u{2913}",
        });
    }

    if first_char == 'D' && try_read("ownTeeArrow;") {
        return Some(CharRef {
            name: "ownTeeArrow;",
            characters: "\u{21a7}",
        });
    }

    if first_char == 'E' && try_read("xponentialE;") {
        return Some(CharRef {
            name: "xponentialE;",
            characters: "\u{2147}",
        });
    }

    if first_char == 'G' && try_read("reaterEqual;") {
        return Some(CharRef {
            name: "reaterEqual;",
            characters: "\u{2265}",
        });
    }

    if first_char == 'G' && try_read("reaterTilde;") {
        return Some(CharRef {
            name: "reaterTilde;",
            characters: "\u{2273}",
        });
    }

    if first_char == 'H' && try_read("ilbertSpace;") {
        return Some(CharRef {
            name: "ilbertSpace;",
            characters: "\u{210b}",
        });
    }

    if first_char == 'H' && try_read("umpDownHump;") {
        return Some(CharRef {
            name: "umpDownHump;",
            characters: "\u{224e}",
        });
    }

    if first_char == 'I' && try_read("ntersection;") {
        return Some(CharRef {
            name: "ntersection;",
            characters: "\u{22c2}",
        });
    }

    if first_char == 'L' && try_read("eftArrowBar;") {
        return Some(CharRef {
            name: "eftArrowBar;",
            characters: "\u{21e4}",
        });
    }

    if first_char == 'L' && try_read("eftTeeArrow;") {
        return Some(CharRef {
            name: "eftTeeArrow;",
            characters: "\u{21a4}",
        });
    }

    if first_char == 'L' && try_read("eftTriangle;") {
        return Some(CharRef {
            name: "eftTriangle;",
            characters: "\u{22b2}",
        });
    }

    if first_char == 'L' && try_read("eftUpVector;") {
        return Some(CharRef {
            name: "eftUpVector;",
            characters: "\u{21bf}",
        });
    }

    if first_char == 'N' && try_read("otCongruent;") {
        return Some(CharRef {
            name: "otCongruent;",
            characters: "\u{2262}",
        });
    }

    if first_char == 'N' && try_read("otHumpEqual;") {
        return Some(CharRef {
            name: "otHumpEqual;",
            characters: "\u{224f}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otLessEqual;") {
        return Some(CharRef {
            name: "otLessEqual;",
            characters: "\u{2270}",
        });
    }

    if first_char == 'N' && try_read("otLessTilde;") {
        return Some(CharRef {
            name: "otLessTilde;",
            characters: "\u{2274}",
        });
    }

    if first_char == 'P' && try_read("roportional;") {
        return Some(CharRef {
            name: "roportional;",
            characters: "\u{221d}",
        });
    }

    if first_char == 'R' && try_read("ightCeiling;") {
        return Some(CharRef {
            name: "ightCeiling;",
            characters: "\u{2309}",
        });
    }

    if first_char == 'R' && try_read("oundImplies;") {
        return Some(CharRef {
            name: "oundImplies;",
            characters: "\u{2970}",
        });
    }

    if first_char == 'S' && try_read("hortUpArrow;") {
        return Some(CharRef {
            name: "hortUpArrow;",
            characters: "\u{2191}",
        });
    }

    if first_char == 'S' && try_read("quareSubset;") {
        return Some(CharRef {
            name: "quareSubset;",
            characters: "\u{228f}",
        });
    }

    if first_char == 'U' && try_read("nderBracket;") {
        return Some(CharRef {
            name: "nderBracket;",
            characters: "\u{23b5}",
        });
    }

    if first_char == 'V' && try_read("erticalLine;") {
        return Some(CharRef {
            name: "erticalLine;",
            characters: "\u{7c}",
        });
    }

    if first_char == 'b' && try_read("lacklozenge;") {
        return Some(CharRef {
            name: "lacklozenge;",
            characters: "\u{29eb}",
        });
    }

    if first_char == 'e' && try_read("xponentiale;") {
        return Some(CharRef {
            name: "xponentiale;",
            characters: "\u{2147}",
        });
    }

    if first_char == 'r' && try_read("isingdotseq;") {
        return Some(CharRef {
            name: "isingdotseq;",
            characters: "\u{2253}",
        });
    }

    if first_char == 't' && try_read("riangledown;") {
        return Some(CharRef {
            name: "riangledown;",
            characters: "\u{25bf}",
        });
    }

    if first_char == 't' && try_read("riangleleft;") {
        return Some(CharRef {
            name: "riangleleft;",
            characters: "\u{25c3}",
        });
    }

    if first_char == 'v' && try_read("arsubsetneq;") {
        return Some(CharRef {
            name: "arsubsetneq;",
            characters: "\u{228a}\u{fe00}",
        });
    }

    if first_char == 'v' && try_read("arsupsetneq;") {
        return Some(CharRef {
            name: "arsupsetneq;",
            characters: "\u{228b}\u{fe00}",
        });
    }

    if first_char == 'C' && try_read("ircleMinus;") {
        return Some(CharRef {
            name: "ircleMinus;",
            characters: "\u{2296}",
        });
    }

    if first_char == 'C' && try_read("ircleTimes;") {
        return Some(CharRef {
            name: "ircleTimes;",
            characters: "\u{2297}",
        });
    }

    if first_char == 'E' && try_read("quilibrium;") {
        return Some(CharRef {
            name: "quilibrium;",
            characters: "\u{21cc}",
        });
    }

    if first_char == 'G' && try_read("reaterLess;") {
        return Some(CharRef {
            name: "reaterLess;",
            characters: "\u{2277}",
        });
    }

    if first_char == 'L' && try_read("eftCeiling;") {
        return Some(CharRef {
            name: "eftCeiling;",
            characters: "\u{2308}",
        });
    }

    if first_char == 'L' && try_read("essGreater;") {
        return Some(CharRef {
            name: "essGreater;",
            characters: "\u{2276}",
        });
    }

    if first_char == 'M' && try_read("ediumSpace;") {
        return Some(CharRef {
            name: "ediumSpace;",
            characters: "\u{205f}",
        });
    }

    if first_char == 'N' && try_read("otLessLess;") {
        return Some(CharRef {
            name: "otLessLess;",
            characters: "\u{226a}\u{338}",
        });
    }

    if first_char == 'N' && try_read("otPrecedes;") {
        return Some(CharRef {
            name: "otPrecedes;",
            characters: "\u{2280}",
        });
    }

    if first_char == 'N' && try_read("otSucceeds;") {
        return Some(CharRef {
            name: "otSucceeds;",
            characters: "\u{2281}",
        });
    }

    if first_char == 'N' && try_read("otSuperset;") {
        return Some(CharRef {
            name: "otSuperset;",
            characters: "\u{2283}\u{20d2}",
        });
    }

    if first_char == 'O' && try_read("verBracket;") {
        return Some(CharRef {
            name: "verBracket;",
            characters: "\u{23b4}",
        });
    }

    if first_char == 'R' && try_read("ightVector;") {
        return Some(CharRef {
            name: "ightVector;",
            characters: "\u{21c0}",
        });
    }

    if first_char == 'R' && try_read("rightarrow;") {
        return Some(CharRef {
            name: "rightarrow;",
            characters: "\u{21db}",
        });
    }

    if first_char == 'R' && try_read("uleDelayed;") {
        return Some(CharRef {
            name: "uleDelayed;",
            characters: "\u{29f4}",
        });
    }

    if first_char == 'S' && try_read("mallCircle;") {
        return Some(CharRef {
            name: "mallCircle;",
            characters: "\u{2218}",
        });
    }

    if first_char == 'S' && try_read("quareUnion;") {
        return Some(CharRef {
            name: "quareUnion;",
            characters: "\u{2294}",
        });
    }

    if first_char == 'S' && try_read("ubsetEqual;") {
        return Some(CharRef {
            name: "ubsetEqual;",
            characters: "\u{2286}",
        });
    }

    if first_char == 'U' && try_read("pDownArrow;") {
        return Some(CharRef {
            name: "pDownArrow;",
            characters: "\u{2195}",
        });
    }

    if first_char == 'U' && try_read("pdownarrow;") {
        return Some(CharRef {
            name: "pdownarrow;",
            characters: "\u{21d5}",
        });
    }

    if first_char == 'V' && try_read("erticalBar;") {
        return Some(CharRef {
            name: "erticalBar;",
            characters: "\u{2223}",
        });
    }

    if first_char == 'b' && try_read("ackepsilon;") {
        return Some(CharRef {
            name: "ackepsilon;",
            characters: "\u{3f6}",
        });
    }

    if first_char == 'b' && try_read("lacksquare;") {
        return Some(CharRef {
            name: "lacksquare;",
            characters: "\u{25aa}",
        });
    }

    if first_char == 'c' && try_read("ircledcirc;") {
        return Some(CharRef {
            name: "ircledcirc;",
            characters: "\u{229a}",
        });
    }

    if first_char == 'c' && try_read("ircleddash;") {
        return Some(CharRef {
            name: "ircleddash;",
            characters: "\u{229d}",
        });
    }

    if first_char == 'c' && try_read("urlyeqprec;") {
        return Some(CharRef {
            name: "urlyeqprec;",
            characters: "\u{22de}",
        });
    }

    if first_char == 'c' && try_read("urlyeqsucc;") {
        return Some(CharRef {
            name: "urlyeqsucc;",
            characters: "\u{22df}",
        });
    }

    if first_char == 'd' && try_read("iamondsuit;") {
        return Some(CharRef {
            name: "iamondsuit;",
            characters: "\u{2666}",
        });
    }

    if first_char == 'e' && try_read("qslantless;") {
        return Some(CharRef {
            name: "qslantless;",
            characters: "\u{2a95}",
        });
    }

    if first_char == 'e' && try_read("xpectation;") {
        return Some(CharRef {
            name: "xpectation;",
            characters: "\u{2130}",
        });
    }

    if first_char == 'n' && try_read("Rightarrow;") {
        return Some(CharRef {
            name: "Rightarrow;",
            characters: "\u{21cf}",
        });
    }

    if first_char == 'n' && try_read("rightarrow;") {
        return Some(CharRef {
            name: "rightarrow;",
            characters: "\u{219b}",
        });
    }

    if first_char == 'p' && try_read("reccurlyeq;") {
        return Some(CharRef {
            name: "reccurlyeq;",
            characters: "\u{227c}",
        });
    }

    if first_char == 'p' && try_read("recnapprox;") {
        return Some(CharRef {
            name: "recnapprox;",
            characters: "\u{2ab9}",
        });
    }

    if first_char == 'q' && try_read("uaternions;") {
        return Some(CharRef {
            name: "uaternions;",
            characters: "\u{210d}",
        });
    }

    if first_char == 's' && try_read("traightphi;") {
        return Some(CharRef {
            name: "traightphi;",
            characters: "\u{3d5}",
        });
    }

    if first_char == 's' && try_read("ucccurlyeq;") {
        return Some(CharRef {
            name: "ucccurlyeq;",
            characters: "\u{227d}",
        });
    }

    if first_char == 's' && try_read("uccnapprox;") {
        return Some(CharRef {
            name: "uccnapprox;",
            characters: "\u{2aba}",
        });
    }

    if first_char == 't' && try_read("hickapprox;") {
        return Some(CharRef {
            name: "hickapprox;",
            characters: "\u{2248}",
        });
    }

    if first_char == 'u' && try_read("pdownarrow;") {
        return Some(CharRef {
            name: "pdownarrow;",
            characters: "\u{2195}",
        });
    }

    if first_char == 'B' && try_read("ernoullis;") {
        return Some(CharRef {
            name: "ernoullis;",
            characters: "\u{212c}",
        });
    }

    if first_char == 'C' && try_read("irclePlus;") {
        return Some(CharRef {
            name: "irclePlus;",
            characters: "\u{2295}",
        });
    }

    if first_char == 'E' && try_read("qualTilde;") {
        return Some(CharRef {
            name: "qualTilde;",
            characters: "\u{2242}",
        });
    }

    if first_char == 'F' && try_read("ouriertrf;") {
        return Some(CharRef {
            name: "ouriertrf;",
            characters: "\u{2131}",
        });
    }

    if first_char == 'I' && try_read("maginaryI;") {
        return Some(CharRef {
            name: "maginaryI;",
            characters: "\u{2148}",
        });
    }

    if first_char == 'L' && try_read("aplacetrf;") {
        return Some(CharRef {
            name: "aplacetrf;",
            characters: "\u{2112}",
        });
    }

    if first_char == 'L' && try_read("eftVector;") {
        return Some(CharRef {
            name: "eftVector;",
            characters: "\u{21bc}",
        });
    }

    if first_char == 'L' && try_read("leftarrow;") {
        return Some(CharRef {
            name: "leftarrow;",
            characters: "\u{21da}",
        });
    }

    if first_char == 'N' && try_read("otElement;") {
        return Some(CharRef {
            name: "otElement;",
            characters: "\u{2209}",
        });
    }

    if first_char == 'N' && try_read("otGreater;") {
        return Some(CharRef {
            name: "otGreater;",
            characters: "\u{226f}",
        });
    }

    if first_char == 'P' && try_read("roportion;") {
        return Some(CharRef {
            name: "roportion;",
            characters: "\u{2237}",
        });
    }

    if first_char == 'R' && try_read("ightArrow;") {
        return Some(CharRef {
            name: "ightArrow;",
            characters: "\u{2192}",
        });
    }

    if first_char == 'R' && try_read("ightFloor;") {
        return Some(CharRef {
            name: "ightFloor;",
            characters: "\u{230b}",
        });
    }

    if first_char == 'R' && try_read("ightarrow;") {
        return Some(CharRef {
            name: "ightarrow;",
            characters: "\u{21d2}",
        });
    }

    if first_char == 'T' && try_read("hickSpace;") {
        return Some(CharRef {
            name: "hickSpace;",
            characters: "\u{205f}\u{200a}",
        });
    }

    if first_char == 'T' && try_read("ildeEqual;") {
        return Some(CharRef {
            name: "ildeEqual;",
            characters: "\u{2243}",
        });
    }

    if first_char == 'T' && try_read("ildeTilde;") {
        return Some(CharRef {
            name: "ildeTilde;",
            characters: "\u{2248}",
        });
    }

    if first_char == 'U' && try_read("nderBrace;") {
        return Some(CharRef {
            name: "nderBrace;",
            characters: "\u{23df}",
        });
    }

    if first_char == 'U' && try_read("pArrowBar;") {
        return Some(CharRef {
            name: "pArrowBar;",
            characters: "\u{2912}",
        });
    }

    if first_char == 'U' && try_read("pTeeArrow;") {
        return Some(CharRef {
            name: "pTeeArrow;",
            characters: "\u{21a5}",
        });
    }

    if first_char == 'c' && try_read("ircledast;") {
        return Some(CharRef {
            name: "ircledast;",
            characters: "\u{229b}",
        });
    }

    if first_char == 'c' && try_read("omplement;") {
        return Some(CharRef {
            name: "omplement;",
            characters: "\u{2201}",
        });
    }

    if first_char == 'c' && try_read("urlywedge;") {
        return Some(CharRef {
            name: "urlywedge;",
            characters: "\u{22cf}",
        });
    }

    if first_char == 'e' && try_read("qslantgtr;") {
        return Some(CharRef {
            name: "qslantgtr;",
            characters: "\u{2a96}",
        });
    }

    if first_char == 'g' && try_read("treqqless;") {
        return Some(CharRef {
            name: "treqqless;",
            characters: "\u{2a8c}",
        });
    }

    if first_char == 'l' && try_read("essapprox;") {
        return Some(CharRef {
            name: "essapprox;",
            characters: "\u{2a85}",
        });
    }

    if first_char == 'l' && try_read("esseqqgtr;") {
        return Some(CharRef {
            name: "esseqqgtr;",
            characters: "\u{2a8b}",
        });
    }

    if first_char == 'l' && try_read("moustache;") {
        return Some(CharRef {
            name: "moustache;",
            characters: "\u{23b0}",
        });
    }

    if first_char == 'l' && try_read("ongmapsto;") {
        return Some(CharRef {
            name: "ongmapsto;",
            characters: "\u{27fc}",
        });
    }

    if first_char == 'm' && try_read("apstodown;") {
        return Some(CharRef {
            name: "apstodown;",
            characters: "\u{21a7}",
        });
    }

    if first_char == 'm' && try_read("apstoleft;") {
        return Some(CharRef {
            name: "apstoleft;",
            characters: "\u{21a4}",
        });
    }

    if first_char == 'n' && try_read("Leftarrow;") {
        return Some(CharRef {
            name: "Leftarrow;",
            characters: "\u{21cd}",
        });
    }

    if first_char == 'n' && try_read("leftarrow;") {
        return Some(CharRef {
            name: "leftarrow;",
            characters: "\u{219a}",
        });
    }

    if first_char == 'n' && try_read("subseteqq;") {
        return Some(CharRef {
            name: "subseteqq;",
            characters: "\u{2ac5}\u{338}",
        });
    }

    if first_char == 'n' && try_read("supseteqq;") {
        return Some(CharRef {
            name: "supseteqq;",
            characters: "\u{2ac6}\u{338}",
        });
    }

    if first_char == 'p' && try_read("recapprox;") {
        return Some(CharRef {
            name: "recapprox;",
            characters: "\u{2ab7}",
        });
    }

    if first_char == 'r' && try_read("ightarrow;") {
        return Some(CharRef {
            name: "ightarrow;",
            characters: "\u{2192}",
        });
    }

    if first_char == 'r' && try_read("moustache;") {
        return Some(CharRef {
            name: "moustache;",
            characters: "\u{23b1}",
        });
    }

    if first_char == 's' && try_read("qsubseteq;") {
        return Some(CharRef {
            name: "qsubseteq;",
            characters: "\u{2291}",
        });
    }

    if first_char == 's' && try_read("qsupseteq;") {
        return Some(CharRef {
            name: "qsupseteq;",
            characters: "\u{2292}",
        });
    }

    if first_char == 's' && try_read("ubsetneqq;") {
        return Some(CharRef {
            name: "ubsetneqq;",
            characters: "\u{2acb}",
        });
    }

    if first_char == 's' && try_read("uccapprox;") {
        return Some(CharRef {
            name: "uccapprox;",
            characters: "\u{2ab8}",
        });
    }

    if first_char == 's' && try_read("upsetneqq;") {
        return Some(CharRef {
            name: "upsetneqq;",
            characters: "\u{2acc}",
        });
    }

    if first_char == 'u' && try_read("puparrows;") {
        return Some(CharRef {
            name: "puparrows;",
            characters: "\u{21c8}",
        });
    }

    if first_char == 'v' && try_read("arepsilon;") {
        return Some(CharRef {
            name: "arepsilon;",
            characters: "\u{3f5}",
        });
    }

    if first_char == 'v' && try_read("arnothing;") {
        return Some(CharRef {
            name: "arnothing;",
            characters: "\u{2205}",
        });
    }

    if first_char == 'B' && try_read("ackslash;") {
        return Some(CharRef {
            name: "ackslash;",
            characters: "\u{2216}",
        });
    }

    if first_char == 'C' && try_read("enterDot;") {
        return Some(CharRef {
            name: "enterDot;",
            characters: "\u{b7}",
        });
    }

    if first_char == 'C' && try_read("ircleDot;") {
        return Some(CharRef {
            name: "ircleDot;",
            characters: "\u{2299}",
        });
    }

    if first_char == 'C' && try_read("ongruent;") {
        return Some(CharRef {
            name: "ongruent;",
            characters: "\u{2261}",
        });
    }

    if first_char == 'C' && try_read("oproduct;") {
        return Some(CharRef {
            name: "oproduct;",
            characters: "\u{2210}",
        });
    }

    if first_char == 'D' && try_read("oubleDot;") {
        return Some(CharRef {
            name: "oubleDot;",
            characters: "\u{a8}",
        });
    }

    if first_char == 'D' && try_read("ownArrow;") {
        return Some(CharRef {
            name: "ownArrow;",
            characters: "\u{2193}",
        });
    }

    if first_char == 'D' && try_read("ownBreve;") {
        return Some(CharRef {
            name: "ownBreve;",
            characters: "\u{311}",
        });
    }

    if first_char == 'D' && try_read("ownarrow;") {
        return Some(CharRef {
            name: "ownarrow;",
            characters: "\u{21d3}",
        });
    }

    if first_char == 'H' && try_read("umpEqual;") {
        return Some(CharRef {
            name: "umpEqual;",
            characters: "\u{224f}",
        });
    }

    if first_char == 'L' && try_read("eftArrow;") {
        return Some(CharRef {
            name: "eftArrow;",
            characters: "\u{2190}",
        });
    }

    if first_char == 'L' && try_read("eftFloor;") {
        return Some(CharRef {
            name: "eftFloor;",
            characters: "\u{230a}",
        });
    }

    if first_char == 'L' && try_read("eftarrow;") {
        return Some(CharRef {
            name: "eftarrow;",
            characters: "\u{21d0}",
        });
    }

    if first_char == 'L' && try_read("essTilde;") {
        return Some(CharRef {
            name: "essTilde;",
            characters: "\u{2272}",
        });
    }

    if first_char == 'M' && try_read("ellintrf;") {
        return Some(CharRef {
            name: "ellintrf;",
            characters: "\u{2133}",
        });
    }

    if first_char == 'M' && try_read("inusPlus;") {
        return Some(CharRef {
            name: "inusPlus;",
            characters: "\u{2213}",
        });
    }

    if first_char == 'N' && try_read("otCupCap;") {
        return Some(CharRef {
            name: "otCupCap;",
            characters: "\u{226d}",
        });
    }

    if first_char == 'N' && try_read("otExists;") {
        return Some(CharRef {
            name: "otExists;",
            characters: "\u{2204}",
        });
    }

    if first_char == 'N' && try_read("otSubset;") {
        return Some(CharRef {
            name: "otSubset;",
            characters: "\u{2282}\u{20d2}",
        });
    }

    if first_char == 'O' && try_read("verBrace;") {
        return Some(CharRef {
            name: "verBrace;",
            characters: "\u{23de}",
        });
    }

    if first_char == 'P' && try_read("lusMinus;") {
        return Some(CharRef {
            name: "lusMinus;",
            characters: "\u{b1}",
        });
    }

    if first_char == 'T' && try_read("herefore;") {
        return Some(CharRef {
            name: "herefore;",
            characters: "\u{2234}",
        });
    }

    if first_char == 'T' && try_read("hinSpace;") {
        return Some(CharRef {
            name: "hinSpace;",
            characters: "\u{2009}",
        });
    }

    if first_char == 'T' && try_read("ripleDot;") {
        return Some(CharRef {
            name: "ripleDot;",
            characters: "\u{20db}",
        });
    }

    if first_char == 'U' && try_read("nionPlus;") {
        return Some(CharRef {
            name: "nionPlus;",
            characters: "\u{228e}",
        });
    }

    if first_char == 'b' && try_read("ackprime;") {
        return Some(CharRef {
            name: "ackprime;",
            characters: "\u{2035}",
        });
    }

    if first_char == 'b' && try_read("acksimeq;") {
        return Some(CharRef {
            name: "acksimeq;",
            characters: "\u{22cd}",
        });
    }

    if first_char == 'b' && try_read("igotimes;") {
        return Some(CharRef {
            name: "igotimes;",
            characters: "\u{2a02}",
        });
    }

    if first_char == 'c' && try_read("enterdot;") {
        return Some(CharRef {
            name: "enterdot;",
            characters: "\u{b7}",
        });
    }

    if first_char == 'c' && try_read("heckmark;") {
        return Some(CharRef {
            name: "heckmark;",
            characters: "\u{2713}",
        });
    }

    if first_char == 'c' && try_read("omplexes;") {
        return Some(CharRef {
            name: "omplexes;",
            characters: "\u{2102}",
        });
    }

    if first_char == 'd' && try_read("otsquare;") {
        return Some(CharRef {
            name: "otsquare;",
            characters: "\u{22a1}",
        });
    }

    if first_char == 'd' && try_read("ownarrow;") {
        return Some(CharRef {
            name: "ownarrow;",
            characters: "\u{2193}",
        });
    }

    if first_char == 'g' && try_read("trapprox;") {
        return Some(CharRef {
            name: "trapprox;",
            characters: "\u{2a86}",
        });
    }

    if first_char == 'g' && try_read("treqless;") {
        return Some(CharRef {
            name: "treqless;",
            characters: "\u{22db}",
        });
    }

    if first_char == 'g' && try_read("vertneqq;") {
        return Some(CharRef {
            name: "vertneqq;",
            characters: "\u{2269}\u{fe00}",
        });
    }

    if first_char == 'h' && try_read("eartsuit;") {
        return Some(CharRef {
            name: "eartsuit;",
            characters: "\u{2665}",
        });
    }

    if first_char == 'l' && try_read("eftarrow;") {
        return Some(CharRef {
            name: "eftarrow;",
            characters: "\u{2190}",
        });
    }

    if first_char == 'l' && try_read("esseqgtr;") {
        return Some(CharRef {
            name: "esseqgtr;",
            characters: "\u{22da}",
        });
    }

    if first_char == 'l' && try_read("vertneqq;") {
        return Some(CharRef {
            name: "vertneqq;",
            characters: "\u{2268}\u{fe00}",
        });
    }

    if first_char == 'n' && try_read("geqslant;") {
        return Some(CharRef {
            name: "geqslant;",
            characters: "\u{2a7e}\u{338}",
        });
    }

    if first_char == 'n' && try_read("leqslant;") {
        return Some(CharRef {
            name: "leqslant;",
            characters: "\u{2a7d}\u{338}",
        });
    }

    if first_char == 'n' && try_read("parallel;") {
        return Some(CharRef {
            name: "parallel;",
            characters: "\u{2226}",
        });
    }

    if first_char == 'n' && try_read("shortmid;") {
        return Some(CharRef {
            name: "shortmid;",
            characters: "\u{2224}",
        });
    }

    if first_char == 'n' && try_read("subseteq;") {
        return Some(CharRef {
            name: "subseteq;",
            characters: "\u{2288}",
        });
    }

    if first_char == 'n' && try_read("supseteq;") {
        return Some(CharRef {
            name: "supseteq;",
            characters: "\u{2289}",
        });
    }

    if first_char == 'p' && try_read("itchfork;") {
        return Some(CharRef {
            name: "itchfork;",
            characters: "\u{22d4}",
        });
    }

    if first_char == 'r' && try_read("ationals;") {
        return Some(CharRef {
            name: "ationals;",
            characters: "\u{211a}",
        });
    }

    if first_char == 's' && try_read("padesuit;") {
        return Some(CharRef {
            name: "padesuit;",
            characters: "\u{2660}",
        });
    }

    if first_char == 's' && try_read("ubseteqq;") {
        return Some(CharRef {
            name: "ubseteqq;",
            characters: "\u{2ac5}",
        });
    }

    if first_char == 's' && try_read("ubsetneq;") {
        return Some(CharRef {
            name: "ubsetneq;",
            characters: "\u{228a}",
        });
    }

    if first_char == 's' && try_read("upseteqq;") {
        return Some(CharRef {
            name: "upseteqq;",
            characters: "\u{2ac6}",
        });
    }

    if first_char == 's' && try_read("upsetneq;") {
        return Some(CharRef {
            name: "upsetneq;",
            characters: "\u{228b}",
        });
    }

    if first_char == 't' && try_read("herefore;") {
        return Some(CharRef {
            name: "herefore;",
            characters: "\u{2234}",
        });
    }

    if first_char == 't' && try_read("riangleq;") {
        return Some(CharRef {
            name: "riangleq;",
            characters: "\u{225c}",
        });
    }

    if first_char == 'v' && try_read("arpropto;") {
        return Some(CharRef {
            name: "arpropto;",
            characters: "\u{221d}",
        });
    }

    if first_char == 'D' && try_read("Dotrahd;") {
        return Some(CharRef {
            name: "Dotrahd;",
            characters: "\u{2911}",
        });
    }

    if first_char == 'D' && try_read("otEqual;") {
        return Some(CharRef {
            name: "otEqual;",
            characters: "\u{2250}",
        });
    }

    if first_char == 'I' && try_read("ntegral;") {
        return Some(CharRef {
            name: "ntegral;",
            characters: "\u{222b}",
        });
    }

    if first_char == 'L' && try_read("essLess;") {
        return Some(CharRef {
            name: "essLess;",
            characters: "\u{2aa1}",
        });
    }

    if first_char == 'N' && try_read("otEqual;") {
        return Some(CharRef {
            name: "otEqual;",
            characters: "\u{2260}",
        });
    }

    if first_char == 'N' && try_read("otTilde;") {
        return Some(CharRef {
            name: "otTilde;",
            characters: "\u{2241}",
        });
    }

    if first_char == 'P' && try_read("artialD;") {
        return Some(CharRef {
            name: "artialD;",
            characters: "\u{2202}",
        });
    }

    if first_char == 'P' && try_read("recedes;") {
        return Some(CharRef {
            name: "recedes;",
            characters: "\u{227a}",
        });
    }

    if first_char == 'R' && try_read("ightTee;") {
        return Some(CharRef {
            name: "ightTee;",
            characters: "\u{22a2}",
        });
    }

    if first_char == 'S' && try_read("ucceeds;") {
        return Some(CharRef {
            name: "ucceeds;",
            characters: "\u{227b}",
        });
    }

    if first_char == 'S' && try_read("uchThat;") {
        return Some(CharRef {
            name: "uchThat;",
            characters: "\u{220b}",
        });
    }

    if first_char == 'S' && try_read("uperset;") {
        return Some(CharRef {
            name: "uperset;",
            characters: "\u{2283}",
        });
    }

    if first_char == 'U' && try_read("arrocir;") {
        return Some(CharRef {
            name: "arrocir;",
            characters: "\u{2949}",
        });
    }

    if first_char == 'U' && try_read("nderBar;") {
        return Some(CharRef {
            name: "nderBar;",
            characters: "\u{5f}",
        });
    }

    if first_char == 'a' && try_read("ndslope;") {
        return Some(CharRef {
            name: "ndslope;",
            characters: "\u{2a58}",
        });
    }

    if first_char == 'a' && try_read("ngmsdaa;") {
        return Some(CharRef {
            name: "ngmsdaa;",
            characters: "\u{29a8}",
        });
    }

    if first_char == 'a' && try_read("ngmsdab;") {
        return Some(CharRef {
            name: "ngmsdab;",
            characters: "\u{29a9}",
        });
    }

    if first_char == 'a' && try_read("ngmsdac;") {
        return Some(CharRef {
            name: "ngmsdac;",
            characters: "\u{29aa}",
        });
    }

    if first_char == 'a' && try_read("ngmsdad;") {
        return Some(CharRef {
            name: "ngmsdad;",
            characters: "\u{29ab}",
        });
    }

    if first_char == 'a' && try_read("ngmsdae;") {
        return Some(CharRef {
            name: "ngmsdae;",
            characters: "\u{29ac}",
        });
    }

    if first_char == 'a' && try_read("ngmsdaf;") {
        return Some(CharRef {
            name: "ngmsdaf;",
            characters: "\u{29ad}",
        });
    }

    if first_char == 'a' && try_read("ngmsdag;") {
        return Some(CharRef {
            name: "ngmsdag;",
            characters: "\u{29ae}",
        });
    }

    if first_char == 'a' && try_read("ngmsdah;") {
        return Some(CharRef {
            name: "ngmsdah;",
            characters: "\u{29af}",
        });
    }

    if first_char == 'a' && try_read("ngrtvbd;") {
        return Some(CharRef {
            name: "ngrtvbd;",
            characters: "\u{299d}",
        });
    }

    if first_char == 'a' && try_read("pproxeq;") {
        return Some(CharRef {
            name: "pproxeq;",
            characters: "\u{224a}",
        });
    }

    if first_char == 'a' && try_read("wconint;") {
        return Some(CharRef {
            name: "wconint;",
            characters: "\u{2233}",
        });
    }

    if first_char == 'b' && try_read("ackcong;") {
        return Some(CharRef {
            name: "ackcong;",
            characters: "\u{224c}",
        });
    }

    if first_char == 'b' && try_read("arwedge;") {
        return Some(CharRef {
            name: "arwedge;",
            characters: "\u{2305}",
        });
    }

    if first_char == 'b' && try_read("brktbrk;") {
        return Some(CharRef {
            name: "brktbrk;",
            characters: "\u{23b6}",
        });
    }

    if first_char == 'b' && try_read("igoplus;") {
        return Some(CharRef {
            name: "igoplus;",
            characters: "\u{2a01}",
        });
    }

    if first_char == 'b' && try_read("igsqcup;") {
        return Some(CharRef {
            name: "igsqcup;",
            characters: "\u{2a06}",
        });
    }

    if first_char == 'b' && try_read("iguplus;") {
        return Some(CharRef {
            name: "iguplus;",
            characters: "\u{2a04}",
        });
    }

    if first_char == 'b' && try_read("igwedge;") {
        return Some(CharRef {
            name: "igwedge;",
            characters: "\u{22c0}",
        });
    }

    if first_char == 'b' && try_read("oxminus;") {
        return Some(CharRef {
            name: "oxminus;",
            characters: "\u{229f}",
        });
    }

    if first_char == 'b' && try_read("oxtimes;") {
        return Some(CharRef {
            name: "oxtimes;",
            characters: "\u{22a0}",
        });
    }

    if first_char == 'b' && try_read("solhsub;") {
        return Some(CharRef {
            name: "solhsub;",
            characters: "\u{27c8}",
        });
    }

    if first_char == 'c' && try_read("apbrcup;") {
        return Some(CharRef {
            name: "apbrcup;",
            characters: "\u{2a49}",
        });
    }

    if first_char == 'c' && try_read("ircledR;") {
        return Some(CharRef {
            name: "ircledR;",
            characters: "\u{ae}",
        });
    }

    if first_char == 'c' && try_read("ircledS;") {
        return Some(CharRef {
            name: "ircledS;",
            characters: "\u{24c8}",
        });
    }

    if first_char == 'c' && try_read("irfnint;") {
        return Some(CharRef {
            name: "irfnint;",
            characters: "\u{2a10}",
        });
    }

    if first_char == 'c' && try_read("lubsuit;") {
        return Some(CharRef {
            name: "lubsuit;",
            characters: "\u{2663}",
        });
    }

    if first_char == 'c' && try_read("upbrcap;") {
        return Some(CharRef {
            name: "upbrcap;",
            characters: "\u{2a48}",
        });
    }

    if first_char == 'c' && try_read("urlyvee;") {
        return Some(CharRef {
            name: "urlyvee;",
            characters: "\u{22ce}",
        });
    }

    if first_char == 'c' && try_read("wconint;") {
        return Some(CharRef {
            name: "wconint;",
            characters: "\u{2232}",
        });
    }

    if first_char == 'd' && try_read("oteqdot;") {
        return Some(CharRef {
            name: "oteqdot;",
            characters: "\u{2251}",
        });
    }

    if first_char == 'd' && try_read("otminus;") {
        return Some(CharRef {
            name: "otminus;",
            characters: "\u{2238}",
        });
    }

    if first_char == 'd' && try_read("rbkarow;") {
        return Some(CharRef {
            name: "rbkarow;",
            characters: "\u{2910}",
        });
    }

    if first_char == 'd' && try_read("zigrarr;") {
        return Some(CharRef {
            name: "zigrarr;",
            characters: "\u{27ff}",
        });
    }

    if first_char == 'e' && try_read("linters;") {
        return Some(CharRef {
            name: "linters;",
            characters: "\u{23e7}",
        });
    }

    if first_char == 'e' && try_read("mptyset;") {
        return Some(CharRef {
            name: "mptyset;",
            characters: "\u{2205}",
        });
    }

    if first_char == 'e' && try_read("qvparsl;") {
        return Some(CharRef {
            name: "qvparsl;",
            characters: "\u{29e5}",
        });
    }

    if first_char == 'f' && try_read("partint;") {
        return Some(CharRef {
            name: "partint;",
            characters: "\u{2a0d}",
        });
    }

    if first_char == 'g' && try_read("eqslant;") {
        return Some(CharRef {
            name: "eqslant;",
            characters: "\u{2a7e}",
        });
    }

    if first_char == 'g' && try_read("esdotol;") {
        return Some(CharRef {
            name: "esdotol;",
            characters: "\u{2a84}",
        });
    }

    if first_char == 'g' && try_read("napprox;") {
        return Some(CharRef {
            name: "napprox;",
            characters: "\u{2a8a}",
        });
    }

    if first_char == 'h' && try_read("ksearow;") {
        return Some(CharRef {
            name: "ksearow;",
            characters: "\u{2925}",
        });
    }

    if first_char == 'h' && try_read("kswarow;") {
        return Some(CharRef {
            name: "kswarow;",
            characters: "\u{2926}",
        });
    }

    if first_char == 'i' && try_read("magline;") {
        return Some(CharRef {
            name: "magline;",
            characters: "\u{2110}",
        });
    }

    if first_char == 'i' && try_read("magpart;") {
        return Some(CharRef {
            name: "magpart;",
            characters: "\u{2111}",
        });
    }

    if first_char == 'i' && try_read("nfintie;") {
        return Some(CharRef {
            name: "nfintie;",
            characters: "\u{29dd}",
        });
    }

    if first_char == 'i' && try_read("ntegers;") {
        return Some(CharRef {
            name: "ntegers;",
            characters: "\u{2124}",
        });
    }

    if first_char == 'i' && try_read("ntercal;") {
        return Some(CharRef {
            name: "ntercal;",
            characters: "\u{22ba}",
        });
    }

    if first_char == 'i' && try_read("ntlarhk;") {
        return Some(CharRef {
            name: "ntlarhk;",
            characters: "\u{2a17}",
        });
    }

    if first_char == 'l' && try_read("aemptyv;") {
        return Some(CharRef {
            name: "aemptyv;",
            characters: "\u{29b4}",
        });
    }

    if first_char == 'l' && try_read("drushar;") {
        return Some(CharRef {
            name: "drushar;",
            characters: "\u{294b}",
        });
    }

    if first_char == 'l' && try_read("eqslant;") {
        return Some(CharRef {
            name: "eqslant;",
            characters: "\u{2a7d}",
        });
    }

    if first_char == 'l' && try_read("esdotor;") {
        return Some(CharRef {
            name: "esdotor;",
            characters: "\u{2a83}",
        });
    }

    if first_char == 'l' && try_read("lcorner;") {
        return Some(CharRef {
            name: "lcorner;",
            characters: "\u{231e}",
        });
    }

    if first_char == 'l' && try_read("napprox;") {
        return Some(CharRef {
            name: "napprox;",
            characters: "\u{2a89}",
        });
    }

    if first_char == 'l' && try_read("rcorner;") {
        return Some(CharRef {
            name: "rcorner;",
            characters: "\u{231f}",
        });
    }

    if first_char == 'l' && try_read("urdshar;") {
        return Some(CharRef {
            name: "urdshar;",
            characters: "\u{294a}",
        });
    }

    if first_char == 'm' && try_read("apstoup;") {
        return Some(CharRef {
            name: "apstoup;",
            characters: "\u{21a5}",
        });
    }

    if first_char == 'm' && try_read("ultimap;") {
        return Some(CharRef {
            name: "ultimap;",
            characters: "\u{22b8}",
        });
    }

    if first_char == 'n' && try_read("aturals;") {
        return Some(CharRef {
            name: "aturals;",
            characters: "\u{2115}",
        });
    }

    if first_char == 'n' && try_read("congdot;") {
        return Some(CharRef {
            name: "congdot;",
            characters: "\u{2a6d}\u{338}",
        });
    }

    if first_char == 'n' && try_read("otindot;") {
        return Some(CharRef {
            name: "otindot;",
            characters: "\u{22f5}\u{338}",
        });
    }

    if first_char == 'o' && try_read("timesas;") {
        return Some(CharRef {
            name: "timesas;",
            characters: "\u{2a36}",
        });
    }

    if first_char == 'p' && try_read("arallel;") {
        return Some(CharRef {
            name: "arallel;",
            characters: "\u{2225}",
        });
    }

    if first_char == 'p' && try_read("lusacir;") {
        return Some(CharRef {
            name: "lusacir;",
            characters: "\u{2a23}",
        });
    }

    if first_char == 'p' && try_read("ointint;") {
        return Some(CharRef {
            name: "ointint;",
            characters: "\u{2a15}",
        });
    }

    if first_char == 'p' && try_read("recneqq;") {
        return Some(CharRef {
            name: "recneqq;",
            characters: "\u{2ab5}",
        });
    }

    if first_char == 'p' && try_read("recnsim;") {
        return Some(CharRef {
            name: "recnsim;",
            characters: "\u{22e8}",
        });
    }

    if first_char == 'p' && try_read("rofalar;") {
        return Some(CharRef {
            name: "rofalar;",
            characters: "\u{232e}",
        });
    }

    if first_char == 'p' && try_read("rofline;") {
        return Some(CharRef {
            name: "rofline;",
            characters: "\u{2312}",
        });
    }

    if first_char == 'p' && try_read("rofsurf;") {
        return Some(CharRef {
            name: "rofsurf;",
            characters: "\u{2313}",
        });
    }

    if first_char == 'r' && try_read("aemptyv;") {
        return Some(CharRef {
            name: "aemptyv;",
            characters: "\u{29b3}",
        });
    }

    if first_char == 'r' && try_read("ealpart;") {
        return Some(CharRef {
            name: "ealpart;",
            characters: "\u{211c}",
        });
    }

    if first_char == 'r' && try_read("ppolint;") {
        return Some(CharRef {
            name: "ppolint;",
            characters: "\u{2a12}",
        });
    }

    if first_char == 'r' && try_read("triltri;") {
        return Some(CharRef {
            name: "triltri;",
            characters: "\u{29ce}",
        });
    }

    if first_char == 's' && try_read("cpolint;") {
        return Some(CharRef {
            name: "cpolint;",
            characters: "\u{2a13}",
        });
    }

    if first_char == 's' && try_read("etminus;") {
        return Some(CharRef {
            name: "etminus;",
            characters: "\u{2216}",
        });
    }

    if first_char == 's' && try_read("hortmid;") {
        return Some(CharRef {
            name: "hortmid;",
            characters: "\u{2223}",
        });
    }

    if first_char == 's' && try_read("meparsl;") {
        return Some(CharRef {
            name: "meparsl;",
            characters: "\u{29e4}",
        });
    }

    if first_char == 's' && try_read("qsubset;") {
        return Some(CharRef {
            name: "qsubset;",
            characters: "\u{228f}",
        });
    }

    if first_char == 's' && try_read("qsupset;") {
        return Some(CharRef {
            name: "qsupset;",
            characters: "\u{2290}",
        });
    }

    if first_char == 's' && try_read("ubseteq;") {
        return Some(CharRef {
            name: "ubseteq;",
            characters: "\u{2286}",
        });
    }

    if first_char == 's' && try_read("uccneqq;") {
        return Some(CharRef {
            name: "uccneqq;",
            characters: "\u{2ab6}",
        });
    }

    if first_char == 's' && try_read("uccnsim;") {
        return Some(CharRef {
            name: "uccnsim;",
            characters: "\u{22e9}",
        });
    }

    if first_char == 's' && try_read("upseteq;") {
        return Some(CharRef {
            name: "upseteq;",
            characters: "\u{2287}",
        });
    }

    if first_char == 't' && try_read("hetasym;") {
        return Some(CharRef {
            name: "hetasym;",
            characters: "\u{3d1}",
        });
    }

    if first_char == 't' && try_read("hicksim;") {
        return Some(CharRef {
            name: "hicksim;",
            characters: "\u{223c}",
        });
    }

    if first_char == 't' && try_read("imesbar;") {
        return Some(CharRef {
            name: "imesbar;",
            characters: "\u{2a31}",
        });
    }

    if first_char == 't' && try_read("riangle;") {
        return Some(CharRef {
            name: "riangle;",
            characters: "\u{25b5}",
        });
    }

    if first_char == 't' && try_read("riminus;") {
        return Some(CharRef {
            name: "riminus;",
            characters: "\u{2a3a}",
        });
    }

    if first_char == 't' && try_read("rpezium;") {
        return Some(CharRef {
            name: "rpezium;",
            characters: "\u{23e2}",
        });
    }

    if first_char == 'u' && try_read("lcorner;") {
        return Some(CharRef {
            name: "lcorner;",
            characters: "\u{231c}",
        });
    }

    if first_char == 'u' && try_read("rcorner;") {
        return Some(CharRef {
            name: "rcorner;",
            characters: "\u{231d}",
        });
    }

    if first_char == 'v' && try_read("arkappa;") {
        return Some(CharRef {
            name: "arkappa;",
            characters: "\u{3f0}",
        });
    }

    if first_char == 'v' && try_read("arsigma;") {
        return Some(CharRef {
            name: "arsigma;",
            characters: "\u{3c2}",
        });
    }

    if first_char == 'v' && try_read("artheta;") {
        return Some(CharRef {
            name: "artheta;",
            characters: "\u{3d1}",
        });
    }

    if first_char == 'B' && try_read("ecause;") {
        return Some(CharRef {
            name: "ecause;",
            characters: "\u{2235}",
        });
    }

    if first_char == 'C' && try_read("ayleys;") {
        return Some(CharRef {
            name: "ayleys;",
            characters: "\u{212d}",
        });
    }

    if first_char == 'C' && try_read("conint;") {
        return Some(CharRef {
            name: "conint;",
            characters: "\u{2230}",
        });
    }

    if first_char == 'C' && try_read("edilla;") {
        return Some(CharRef {
            name: "edilla;",
            characters: "\u{b8}",
        });
    }

    if first_char == 'D' && try_read("iamond;") {
        return Some(CharRef {
            name: "iamond;",
            characters: "\u{22c4}",
        });
    }

    if first_char == 'D' && try_read("ownTee;") {
        return Some(CharRef {
            name: "ownTee;",
            characters: "\u{22a4}",
        });
    }

    if first_char == 'E' && try_read("lement;") {
        return Some(CharRef {
            name: "lement;",
            characters: "\u{2208}",
        });
    }

    if first_char == 'E' && try_read("psilon;") {
        return Some(CharRef {
            name: "psilon;",
            characters: "\u{395}",
        });
    }

    if first_char == 'I' && try_read("mplies;") {
        return Some(CharRef {
            name: "mplies;",
            characters: "\u{21d2}",
        });
    }

    if first_char == 'L' && try_read("eftTee;") {
        return Some(CharRef {
            name: "eftTee;",
            characters: "\u{22a3}",
        });
    }

    if first_char == 'N' && try_read("ewLine;") {
        return Some(CharRef {
            name: "ewLine;",
            characters: "\u{a}",
        });
    }

    if first_char == 'N' && try_read("oBreak;") {
        return Some(CharRef {
            name: "oBreak;",
            characters: "\u{2060}",
        });
    }

    if first_char == 'N' && try_read("otLess;") {
        return Some(CharRef {
            name: "otLess;",
            characters: "\u{226e}",
        });
    }

    if first_char == 'O' && try_read("micron;") {
        return Some(CharRef {
            name: "micron;",
            characters: "\u{39f}",
        });
    }

    if first_char == 'O' && try_read("verBar;") {
        return Some(CharRef {
            name: "verBar;",
            characters: "\u{203e}",
        });
    }

    if first_char == 'P' && try_read("roduct;") {
        return Some(CharRef {
            name: "roduct;",
            characters: "\u{220f}",
        });
    }

    if first_char == 'U' && try_read("pArrow;") {
        return Some(CharRef {
            name: "pArrow;",
            characters: "\u{2191}",
        });
    }

    if first_char == 'U' && try_read("parrow;") {
        return Some(CharRef {
            name: "parrow;",
            characters: "\u{21d1}",
        });
    }

    if first_char == 'U' && try_read("psilon;") {
        return Some(CharRef {
            name: "psilon;",
            characters: "\u{3a5}",
        });
    }

    if first_char == 'a' && try_read("lefsym;") {
        return Some(CharRef {
            name: "lefsym;",
            characters: "\u{2135}",
        });
    }

    if first_char == 'a' && try_read("ngrtvb;") {
        return Some(CharRef {
            name: "ngrtvb;",
            characters: "\u{22be}",
        });
    }

    if first_char == 'a' && try_read("ngzarr;") {
        return Some(CharRef {
            name: "ngzarr;",
            characters: "\u{237c}",
        });
    }

    if first_char == 'a' && try_read("sympeq;") {
        return Some(CharRef {
            name: "sympeq;",
            characters: "\u{224d}",
        });
    }

    if first_char == 'b' && try_read("acksim;") {
        return Some(CharRef {
            name: "acksim;",
            characters: "\u{223d}",
        });
    }

    if first_char == 'b' && try_read("ecause;") {
        return Some(CharRef {
            name: "ecause;",
            characters: "\u{2235}",
        });
    }

    if first_char == 'b' && try_read("emptyv;") {
        return Some(CharRef {
            name: "emptyv;",
            characters: "\u{29b0}",
        });
    }

    if first_char == 'b' && try_read("etween;") {
        return Some(CharRef {
            name: "etween;",
            characters: "\u{226c}",
        });
    }

    if first_char == 'b' && try_read("igcirc;") {
        return Some(CharRef {
            name: "igcirc;",
            characters: "\u{25ef}",
        });
    }

    if first_char == 'b' && try_read("igodot;") {
        return Some(CharRef {
            name: "igodot;",
            characters: "\u{2a00}",
        });
    }

    if first_char == 'b' && try_read("igstar;") {
        return Some(CharRef {
            name: "igstar;",
            characters: "\u{2605}",
        });
    }

    if first_char == 'b' && try_read("nequiv;") {
        return Some(CharRef {
            name: "nequiv;",
            characters: "\u{2261}\u{20e5}",
        });
    }

    if first_char == 'b' && try_read("oxplus;") {
        return Some(CharRef {
            name: "oxplus;",
            characters: "\u{229e}",
        });
    }

    if first_char == 'c' && try_read("cupssm;") {
        return Some(CharRef {
            name: "cupssm;",
            characters: "\u{2a50}",
        });
    }

    if first_char == 'c' && try_read("emptyv;") {
        return Some(CharRef {
            name: "emptyv;",
            characters: "\u{29b2}",
        });
    }

    if first_char == 'c' && try_read("irscir;") {
        return Some(CharRef {
            name: "irscir;",
            characters: "\u{29c2}",
        });
    }

    if first_char == 'c' && try_read("oloneq;") {
        return Some(CharRef {
            name: "oloneq;",
            characters: "\u{2254}",
        });
    }

    if first_char == 'c' && try_read("ongdot;") {
        return Some(CharRef {
            name: "ongdot;",
            characters: "\u{2a6d}",
        });
    }

    if first_char == 'c' && try_read("udarrl;") {
        return Some(CharRef {
            name: "udarrl;",
            characters: "\u{2938}",
        });
    }

    if first_char == 'c' && try_read("udarrr;") {
        return Some(CharRef {
            name: "udarrr;",
            characters: "\u{2935}",
        });
    }

    if first_char == 'c' && try_read("ularrp;") {
        return Some(CharRef {
            name: "ularrp;",
            characters: "\u{293d}",
        });
    }

    if first_char == 'c' && try_read("urarrm;") {
        return Some(CharRef {
            name: "urarrm;",
            characters: "\u{293c}",
        });
    }

    if first_char == 'd' && try_read("bkarow;") {
        return Some(CharRef {
            name: "bkarow;",
            characters: "\u{290f}",
        });
    }

    if first_char == 'd' && try_read("dagger;") {
        return Some(CharRef {
            name: "dagger;",
            characters: "\u{2021}",
        });
    }

    if first_char == 'd' && try_read("dotseq;") {
        return Some(CharRef {
            name: "dotseq;",
            characters: "\u{2a77}",
        });
    }

    if first_char == 'd' && try_read("emptyv;") {
        return Some(CharRef {
            name: "emptyv;",
            characters: "\u{29b1}",
        });
    }

    if first_char == 'd' && try_read("iamond;") {
        return Some(CharRef {
            name: "iamond;",
            characters: "\u{22c4}",
        });
    }

    if first_char == 'd' && try_read("igamma;") {
        return Some(CharRef {
            name: "igamma;",
            characters: "\u{3dd}",
        });
    }

    if first_char == 'd' && try_read("otplus;") {
        return Some(CharRef {
            name: "otplus;",
            characters: "\u{2214}",
        });
    }

    if first_char == 'd' && try_read("wangle;") {
        return Some(CharRef {
            name: "wangle;",
            characters: "\u{29a6}",
        });
    }

    if first_char == 'e' && try_read("psilon;") {
        return Some(CharRef {
            name: "psilon;",
            characters: "\u{3b5}",
        });
    }

    if first_char == 'e' && try_read("qcolon;") {
        return Some(CharRef {
            name: "qcolon;",
            characters: "\u{2255}",
        });
    }

    if first_char == 'e' && try_read("quivDD;") {
        return Some(CharRef {
            name: "quivDD;",
            characters: "\u{2a78}",
        });
    }

    if first_char == 'g' && try_read("esdoto;") {
        return Some(CharRef {
            name: "esdoto;",
            characters: "\u{2a82}",
        });
    }

    if first_char == 'g' && try_read("tquest;") {
        return Some(CharRef {
            name: "tquest;",
            characters: "\u{2a7c}",
        });
    }

    if first_char == 'g' && try_read("trless;") {
        return Some(CharRef {
            name: "trless;",
            characters: "\u{2277}",
        });
    }

    if first_char == 'h' && try_read("arrcir;") {
        return Some(CharRef {
            name: "arrcir;",
            characters: "\u{2948}",
        });
    }

    if first_char == 'i' && try_read("ntprod;") {
        return Some(CharRef {
            name: "ntprod;",
            characters: "\u{2a3c}",
        });
    }

    if first_char == 'i' && try_read("sindot;") {
        return Some(CharRef {
            name: "sindot;",
            characters: "\u{22f5}",
        });
    }

    if first_char == 'l' && try_read("arrbfs;") {
        return Some(CharRef {
            name: "arrbfs;",
            characters: "\u{291f}",
        });
    }

    if first_char == 'l' && try_read("arrsim;") {
        return Some(CharRef {
            name: "arrsim;",
            characters: "\u{2973}",
        });
    }

    if first_char == 'l' && try_read("brksld;") {
        return Some(CharRef {
            name: "brksld;",
            characters: "\u{298f}",
        });
    }

    if first_char == 'l' && try_read("brkslu;") {
        return Some(CharRef {
            name: "brkslu;",
            characters: "\u{298d}",
        });
    }

    if first_char == 'l' && try_read("drdhar;") {
        return Some(CharRef {
            name: "drdhar;",
            characters: "\u{2967}",
        });
    }

    if first_char == 'l' && try_read("esdoto;") {
        return Some(CharRef {
            name: "esdoto;",
            characters: "\u{2a81}",
        });
    }

    if first_char == 'l' && try_read("essdot;") {
        return Some(CharRef {
            name: "essdot;",
            characters: "\u{22d6}",
        });
    }

    if first_char == 'l' && try_read("essgtr;") {
        return Some(CharRef {
            name: "essgtr;",
            characters: "\u{2276}",
        });
    }

    if first_char == 'l' && try_read("esssim;") {
        return Some(CharRef {
            name: "esssim;",
            characters: "\u{2272}",
        });
    }

    if first_char == 'l' && try_read("otimes;") {
        return Some(CharRef {
            name: "otimes;",
            characters: "\u{2a34}",
        });
    }

    if first_char == 'l' && try_read("ozenge;") {
        return Some(CharRef {
            name: "ozenge;",
            characters: "\u{25ca}",
        });
    }

    if first_char == 'l' && try_read("tquest;") {
        return Some(CharRef {
            name: "tquest;",
            characters: "\u{2a7b}",
        });
    }

    if first_char == 'l' && try_read("uruhar;") {
        return Some(CharRef {
            name: "uruhar;",
            characters: "\u{2966}",
        });
    }

    if first_char == 'm' && try_read("altese;") {
        return Some(CharRef {
            name: "altese;",
            characters: "\u{2720}",
        });
    }

    if first_char == 'm' && try_read("inusdu;") {
        return Some(CharRef {
            name: "inusdu;",
            characters: "\u{2a2a}",
        });
    }

    if first_char == 'n' && try_read("approx;") {
        return Some(CharRef {
            name: "approx;",
            characters: "\u{2249}",
        });
    }

    if first_char == 'n' && try_read("atural;") {
        return Some(CharRef {
            name: "atural;",
            characters: "\u{266e}",
        });
    }

    if first_char == 'n' && try_read("earrow;") {
        return Some(CharRef {
            name: "earrow;",
            characters: "\u{2197}",
        });
    }

    if first_char == 'n' && try_read("exists;") {
        return Some(CharRef {
            name: "exists;",
            characters: "\u{2204}",
        });
    }

    if first_char == 'n' && try_read("otinva;") {
        return Some(CharRef {
            name: "otinva;",
            characters: "\u{2209}",
        });
    }

    if first_char == 'n' && try_read("otinvb;") {
        return Some(CharRef {
            name: "otinvb;",
            characters: "\u{22f7}",
        });
    }

    if first_char == 'n' && try_read("otinvc;") {
        return Some(CharRef {
            name: "otinvc;",
            characters: "\u{22f6}",
        });
    }

    if first_char == 'n' && try_read("otniva;") {
        return Some(CharRef {
            name: "otniva;",
            characters: "\u{220c}",
        });
    }

    if first_char == 'n' && try_read("otnivb;") {
        return Some(CharRef {
            name: "otnivb;",
            characters: "\u{22fe}",
        });
    }

    if first_char == 'n' && try_read("otnivc;") {
        return Some(CharRef {
            name: "otnivc;",
            characters: "\u{22fd}",
        });
    }

    if first_char == 'n' && try_read("polint;") {
        return Some(CharRef {
            name: "polint;",
            characters: "\u{2a14}",
        });
    }

    if first_char == 'n' && try_read("preceq;") {
        return Some(CharRef {
            name: "preceq;",
            characters: "\u{2aaf}\u{338}",
        });
    }

    if first_char == 'n' && try_read("sqsube;") {
        return Some(CharRef {
            name: "sqsube;",
            characters: "\u{22e2}",
        });
    }

    if first_char == 'n' && try_read("sqsupe;") {
        return Some(CharRef {
            name: "sqsupe;",
            characters: "\u{22e3}",
        });
    }

    if first_char == 'n' && try_read("subset;") {
        return Some(CharRef {
            name: "subset;",
            characters: "\u{2282}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("succeq;") {
        return Some(CharRef {
            name: "succeq;",
            characters: "\u{2ab0}\u{338}",
        });
    }

    if first_char == 'n' && try_read("supset;") {
        return Some(CharRef {
            name: "supset;",
            characters: "\u{2283}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("vinfin;") {
        return Some(CharRef {
            name: "vinfin;",
            characters: "\u{29de}",
        });
    }

    if first_char == 'n' && try_read("vltrie;") {
        return Some(CharRef {
            name: "vltrie;",
            characters: "\u{22b4}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("vrtrie;") {
        return Some(CharRef {
            name: "vrtrie;",
            characters: "\u{22b5}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("warrow;") {
        return Some(CharRef {
            name: "warrow;",
            characters: "\u{2196}",
        });
    }

    if first_char == 'o' && try_read("lcross;") {
        return Some(CharRef {
            name: "lcross;",
            characters: "\u{29bb}",
        });
    }

    if first_char == 'o' && try_read("micron;") {
        return Some(CharRef {
            name: "micron;",
            characters: "\u{3bf}",
        });
    }

    if first_char == 'o' && try_read("rderof;") {
        return Some(CharRef {
            name: "rderof;",
            characters: "\u{2134}",
        });
    }

    if first_char == 'o' && try_read("rslope;") {
        return Some(CharRef {
            name: "rslope;",
            characters: "\u{2a57}",
        });
    }

    if first_char == 'p' && try_read("ertenk;") {
        return Some(CharRef {
            name: "ertenk;",
            characters: "\u{2031}",
        });
    }

    if first_char == 'p' && try_read("lanckh;") {
        return Some(CharRef {
            name: "lanckh;",
            characters: "\u{210e}",
        });
    }

    if first_char == 'p' && try_read("luscir;") {
        return Some(CharRef {
            name: "luscir;",
            characters: "\u{2a22}",
        });
    }

    if first_char == 'p' && try_read("lussim;") {
        return Some(CharRef {
            name: "lussim;",
            characters: "\u{2a26}",
        });
    }

    if first_char == 'p' && try_read("lustwo;") {
        return Some(CharRef {
            name: "lustwo;",
            characters: "\u{2a27}",
        });
    }

    if first_char == 'p' && try_read("recsim;") {
        return Some(CharRef {
            name: "recsim;",
            characters: "\u{227e}",
        });
    }

    if first_char == 'q' && try_read("uatint;") {
        return Some(CharRef {
            name: "uatint;",
            characters: "\u{2a16}",
        });
    }

    if first_char == 'q' && try_read("uesteq;") {
        return Some(CharRef {
            name: "uesteq;",
            characters: "\u{225f}",
        });
    }

    if first_char == 'r' && try_read("arrbfs;") {
        return Some(CharRef {
            name: "arrbfs;",
            characters: "\u{2920}",
        });
    }

    if first_char == 'r' && try_read("arrsim;") {
        return Some(CharRef {
            name: "arrsim;",
            characters: "\u{2974}",
        });
    }

    if first_char == 'r' && try_read("brksld;") {
        return Some(CharRef {
            name: "brksld;",
            characters: "\u{298e}",
        });
    }

    if first_char == 'r' && try_read("brkslu;") {
        return Some(CharRef {
            name: "brkslu;",
            characters: "\u{2990}",
        });
    }

    if first_char == 'r' && try_read("dldhar;") {
        return Some(CharRef {
            name: "dldhar;",
            characters: "\u{2969}",
        });
    }

    if first_char == 'r' && try_read("ealine;") {
        return Some(CharRef {
            name: "ealine;",
            characters: "\u{211b}",
        });
    }

    if first_char == 'r' && try_read("otimes;") {
        return Some(CharRef {
            name: "otimes;",
            characters: "\u{2a35}",
        });
    }

    if first_char == 'r' && try_read("uluhar;") {
        return Some(CharRef {
            name: "uluhar;",
            characters: "\u{2968}",
        });
    }

    if first_char == 's' && try_read("earrow;") {
        return Some(CharRef {
            name: "earrow;",
            characters: "\u{2198}",
        });
    }

    if first_char == 's' && try_read("implus;") {
        return Some(CharRef {
            name: "implus;",
            characters: "\u{2a24}",
        });
    }

    if first_char == 's' && try_read("imrarr;") {
        return Some(CharRef {
            name: "imrarr;",
            characters: "\u{2972}",
        });
    }

    if first_char == 's' && try_read("ubedot;") {
        return Some(CharRef {
            name: "ubedot;",
            characters: "\u{2ac3}",
        });
    }

    if first_char == 's' && try_read("ubmult;") {
        return Some(CharRef {
            name: "ubmult;",
            characters: "\u{2ac1}",
        });
    }

    if first_char == 's' && try_read("ubplus;") {
        return Some(CharRef {
            name: "ubplus;",
            characters: "\u{2abf}",
        });
    }

    if first_char == 's' && try_read("ubrarr;") {
        return Some(CharRef {
            name: "ubrarr;",
            characters: "\u{2979}",
        });
    }

    if first_char == 's' && try_read("uccsim;") {
        return Some(CharRef {
            name: "uccsim;",
            characters: "\u{227f}",
        });
    }

    if first_char == 's' && try_read("updsub;") {
        return Some(CharRef {
            name: "updsub;",
            characters: "\u{2ad8}",
        });
    }

    if first_char == 's' && try_read("upedot;") {
        return Some(CharRef {
            name: "upedot;",
            characters: "\u{2ac4}",
        });
    }

    if first_char == 's' && try_read("uphsol;") {
        return Some(CharRef {
            name: "uphsol;",
            characters: "\u{27c9}",
        });
    }

    if first_char == 's' && try_read("uphsub;") {
        return Some(CharRef {
            name: "uphsub;",
            characters: "\u{2ad7}",
        });
    }

    if first_char == 's' && try_read("uplarr;") {
        return Some(CharRef {
            name: "uplarr;",
            characters: "\u{297b}",
        });
    }

    if first_char == 's' && try_read("upmult;") {
        return Some(CharRef {
            name: "upmult;",
            characters: "\u{2ac2}",
        });
    }

    if first_char == 's' && try_read("upplus;") {
        return Some(CharRef {
            name: "upplus;",
            characters: "\u{2ac0}",
        });
    }

    if first_char == 's' && try_read("warrow;") {
        return Some(CharRef {
            name: "warrow;",
            characters: "\u{2199}",
        });
    }

    if first_char == 't' && try_read("opfork;") {
        return Some(CharRef {
            name: "opfork;",
            characters: "\u{2ada}",
        });
    }

    if first_char == 't' && try_read("riplus;") {
        return Some(CharRef {
            name: "riplus;",
            characters: "\u{2a39}",
        });
    }

    if first_char == 't' && try_read("ritime;") {
        return Some(CharRef {
            name: "ritime;",
            characters: "\u{2a3b}",
        });
    }

    if first_char == 'u' && try_read("parrow;") {
        return Some(CharRef {
            name: "parrow;",
            characters: "\u{2191}",
        });
    }

    if first_char == 'u' && try_read("psilon;") {
        return Some(CharRef {
            name: "psilon;",
            characters: "\u{3c5}",
        });
    }

    if first_char == 'u' && try_read("wangle;") {
        return Some(CharRef {
            name: "wangle;",
            characters: "\u{29a7}",
        });
    }

    if first_char == 'v' && try_read("zigzag;") {
        return Some(CharRef {
            name: "zigzag;",
            characters: "\u{299a}",
        });
    }

    if first_char == 'z' && try_read("igrarr;") {
        return Some(CharRef {
            name: "igrarr;",
            characters: "\u{21dd}",
        });
    }

    if first_char == 'A' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{c1}",
        });
    }

    if first_char == 'A' && try_read("breve;") {
        return Some(CharRef {
            name: "breve;",
            characters: "\u{102}",
        });
    }

    if first_char == 'A' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{c0}",
        });
    }

    if first_char == 'A' && try_read("ssign;") {
        return Some(CharRef {
            name: "ssign;",
            characters: "\u{2254}",
        });
    }

    if first_char == 'A' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{c3}",
        });
    }

    if first_char == 'B' && try_read("arwed;") {
        return Some(CharRef {
            name: "arwed;",
            characters: "\u{2306}",
        });
    }

    if first_char == 'B' && try_read("umpeq;") {
        return Some(CharRef {
            name: "umpeq;",
            characters: "\u{224e}",
        });
    }

    if first_char == 'C' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{106}",
        });
    }

    if first_char == 'C' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{10c}",
        });
    }

    if first_char == 'C' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{c7}",
        });
    }

    if first_char == 'C' && try_read("olone;") {
        return Some(CharRef {
            name: "olone;",
            characters: "\u{2a74}",
        });
    }

    if first_char == 'C' && try_read("onint;") {
        return Some(CharRef {
            name: "onint;",
            characters: "\u{222f}",
        });
    }

    if first_char == 'C' && try_read("upCap;") {
        return Some(CharRef {
            name: "upCap;",
            characters: "\u{224d}",
        });
    }

    if first_char == 'D' && try_read("agger;") {
        return Some(CharRef {
            name: "agger;",
            characters: "\u{2021}",
        });
    }

    if first_char == 'D' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{10e}",
        });
    }

    if first_char == 'D' && try_read("otDot;") {
        return Some(CharRef {
            name: "otDot;",
            characters: "\u{20dc}",
        });
    }

    if first_char == 'D' && try_read("strok;") {
        return Some(CharRef {
            name: "strok;",
            characters: "\u{110}",
        });
    }

    if first_char == 'E' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{c9}",
        });
    }

    if first_char == 'E' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{11a}",
        });
    }

    if first_char == 'E' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{c8}",
        });
    }

    if first_char == 'E' && try_read("xists;") {
        return Some(CharRef {
            name: "xists;",
            characters: "\u{2203}",
        });
    }

    if first_char == 'F' && try_read("orAll;") {
        return Some(CharRef {
            name: "orAll;",
            characters: "\u{2200}",
        });
    }

    if first_char == 'G' && try_read("ammad;") {
        return Some(CharRef {
            name: "ammad;",
            characters: "\u{3dc}",
        });
    }

    if first_char == 'G' && try_read("breve;") {
        return Some(CharRef {
            name: "breve;",
            characters: "\u{11e}",
        });
    }

    if first_char == 'G' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{122}",
        });
    }

    if first_char == 'H' && try_read("ARDcy;") {
        return Some(CharRef {
            name: "ARDcy;",
            characters: "\u{42a}",
        });
    }

    if first_char == 'H' && try_read("strok;") {
        return Some(CharRef {
            name: "strok;",
            characters: "\u{126}",
        });
    }

    if first_char == 'I' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{cd}",
        });
    }

    if first_char == 'I' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{cc}",
        });
    }

    if first_char == 'I' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{128}",
        });
    }

    if first_char == 'J' && try_read("sercy;") {
        return Some(CharRef {
            name: "sercy;",
            characters: "\u{408}",
        });
    }

    if first_char == 'K' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{136}",
        });
    }

    if first_char == 'L' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{139}",
        });
    }

    if first_char == 'L' && try_read("ambda;") {
        return Some(CharRef {
            name: "ambda;",
            characters: "\u{39b}",
        });
    }

    if first_char == 'L' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{13d}",
        });
    }

    if first_char == 'L' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{13b}",
        });
    }

    if first_char == 'L' && try_read("midot;") {
        return Some(CharRef {
            name: "midot;",
            characters: "\u{13f}",
        });
    }

    if first_char == 'L' && try_read("strok;") {
        return Some(CharRef {
            name: "strok;",
            characters: "\u{141}",
        });
    }

    if first_char == 'N' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{143}",
        });
    }

    if first_char == 'N' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{147}",
        });
    }

    if first_char == 'N' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{145}",
        });
    }

    if first_char == 'N' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{d1}",
        });
    }

    if first_char == 'O' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{d3}",
        });
    }

    if first_char == 'O' && try_read("dblac;") {
        return Some(CharRef {
            name: "dblac;",
            characters: "\u{150}",
        });
    }

    if first_char == 'O' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{d2}",
        });
    }

    if first_char == 'O' && try_read("slash;") {
        return Some(CharRef {
            name: "slash;",
            characters: "\u{d8}",
        });
    }

    if first_char == 'O' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{d5}",
        });
    }

    if first_char == 'O' && try_read("times;") {
        return Some(CharRef {
            name: "times;",
            characters: "\u{2a37}",
        });
    }

    if first_char == 'R' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{154}",
        });
    }

    if first_char == 'R' && try_read("arrtl;") {
        return Some(CharRef {
            name: "arrtl;",
            characters: "\u{2916}",
        });
    }

    if first_char == 'R' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{158}",
        });
    }

    if first_char == 'R' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{156}",
        });
    }

    if first_char == 'S' && try_read("HCHcy;") {
        return Some(CharRef {
            name: "HCHcy;",
            characters: "\u{429}",
        });
    }

    if first_char == 'S' && try_read("OFTcy;") {
        return Some(CharRef {
            name: "OFTcy;",
            characters: "\u{42c}",
        });
    }

    if first_char == 'S' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{15a}",
        });
    }

    if first_char == 'S' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{160}",
        });
    }

    if first_char == 'S' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{15e}",
        });
    }

    if first_char == 'S' && try_read("quare;") {
        return Some(CharRef {
            name: "quare;",
            characters: "\u{25a1}",
        });
    }

    if first_char == 'S' && try_read("ubset;") {
        return Some(CharRef {
            name: "ubset;",
            characters: "\u{22d0}",
        });
    }

    if first_char == 'S' && try_read("upset;") {
        return Some(CharRef {
            name: "upset;",
            characters: "\u{22d1}",
        });
    }

    if first_char == 'T' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{164}",
        });
    }

    if first_char == 'T' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{162}",
        });
    }

    if first_char == 'T' && try_read("strok;") {
        return Some(CharRef {
            name: "strok;",
            characters: "\u{166}",
        });
    }

    if first_char == 'U' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{da}",
        });
    }

    if first_char == 'U' && try_read("breve;") {
        return Some(CharRef {
            name: "breve;",
            characters: "\u{16c}",
        });
    }

    if first_char == 'U' && try_read("dblac;") {
        return Some(CharRef {
            name: "dblac;",
            characters: "\u{170}",
        });
    }

    if first_char == 'U' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{d9}",
        });
    }

    if first_char == 'U' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{168}",
        });
    }

    if first_char == 'V' && try_read("dashl;") {
        return Some(CharRef {
            name: "dashl;",
            characters: "\u{2ae6}",
        });
    }

    if first_char == 'V' && try_read("erbar;") {
        return Some(CharRef {
            name: "erbar;",
            characters: "\u{2016}",
        });
    }

    if first_char == 'V' && try_read("vdash;") {
        return Some(CharRef {
            name: "vdash;",
            characters: "\u{22aa}",
        });
    }

    if first_char == 'Y' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{dd}",
        });
    }

    if first_char == 'Z' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{179}",
        });
    }

    if first_char == 'Z' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{17d}",
        });
    }

    if first_char == 'a' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{e1}",
        });
    }

    if first_char == 'a' && try_read("breve;") {
        return Some(CharRef {
            name: "breve;",
            characters: "\u{103}",
        });
    }

    if first_char == 'a' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{e0}",
        });
    }

    if first_char == 'a' && try_read("ndand;") {
        return Some(CharRef {
            name: "ndand;",
            characters: "\u{2a55}",
        });
    }

    if first_char == 'a' && try_read("ngmsd;") {
        return Some(CharRef {
            name: "ngmsd;",
            characters: "\u{2221}",
        });
    }

    if first_char == 'a' && try_read("ngsph;") {
        return Some(CharRef {
            name: "ngsph;",
            characters: "\u{2222}",
        });
    }

    if first_char == 'a' && try_read("pacir;") {
        return Some(CharRef {
            name: "pacir;",
            characters: "\u{2a6f}",
        });
    }

    if first_char == 'a' && try_read("pprox;") {
        return Some(CharRef {
            name: "pprox;",
            characters: "\u{2248}",
        });
    }

    if first_char == 'a' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{e3}",
        });
    }

    if first_char == 'b' && try_read("arvee;") {
        return Some(CharRef {
            name: "arvee;",
            characters: "\u{22bd}",
        });
    }

    if first_char == 'b' && try_read("arwed;") {
        return Some(CharRef {
            name: "arwed;",
            characters: "\u{2305}",
        });
    }

    if first_char == 'b' && try_read("ecaus;") {
        return Some(CharRef {
            name: "ecaus;",
            characters: "\u{2235}",
        });
    }

    if first_char == 'b' && try_read("ernou;") {
        return Some(CharRef {
            name: "ernou;",
            characters: "\u{212c}",
        });
    }

    if first_char == 'b' && try_read("igcap;") {
        return Some(CharRef {
            name: "igcap;",
            characters: "\u{22c2}",
        });
    }

    if first_char == 'b' && try_read("igcup;") {
        return Some(CharRef {
            name: "igcup;",
            characters: "\u{22c3}",
        });
    }

    if first_char == 'b' && try_read("igvee;") {
        return Some(CharRef {
            name: "igvee;",
            characters: "\u{22c1}",
        });
    }

    if first_char == 'b' && try_read("karow;") {
        return Some(CharRef {
            name: "karow;",
            characters: "\u{290d}",
        });
    }

    if first_char == 'b' && try_read("ottom;") {
        return Some(CharRef {
            name: "ottom;",
            characters: "\u{22a5}",
        });
    }

    if first_char == 'b' && try_read("owtie;") {
        return Some(CharRef {
            name: "owtie;",
            characters: "\u{22c8}",
        });
    }

    if first_char == 'b' && try_read("oxbox;") {
        return Some(CharRef {
            name: "oxbox;",
            characters: "\u{29c9}",
        });
    }

    if first_char == 'b' && try_read("prime;") {
        return Some(CharRef {
            name: "prime;",
            characters: "\u{2035}",
        });
    }

    if first_char == 'b' && try_read("rvbar;") {
        return Some(CharRef {
            name: "rvbar;",
            characters: "\u{a6}",
        });
    }

    if first_char == 'b' && try_read("ullet;") {
        return Some(CharRef {
            name: "ullet;",
            characters: "\u{2022}",
        });
    }

    if first_char == 'b' && try_read("umpeq;") {
        return Some(CharRef {
            name: "umpeq;",
            characters: "\u{224f}",
        });
    }

    if first_char == 'c' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{107}",
        });
    }

    if first_char == 'c' && try_read("apand;") {
        return Some(CharRef {
            name: "apand;",
            characters: "\u{2a44}",
        });
    }

    if first_char == 'c' && try_read("apcap;") {
        return Some(CharRef {
            name: "apcap;",
            characters: "\u{2a4b}",
        });
    }

    if first_char == 'c' && try_read("apcup;") {
        return Some(CharRef {
            name: "apcup;",
            characters: "\u{2a47}",
        });
    }

    if first_char == 'c' && try_read("apdot;") {
        return Some(CharRef {
            name: "apdot;",
            characters: "\u{2a40}",
        });
    }

    if first_char == 'c' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{10d}",
        });
    }

    if first_char == 'c' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{e7}",
        });
    }

    if first_char == 'c' && try_read("irceq;") {
        return Some(CharRef {
            name: "irceq;",
            characters: "\u{2257}",
        });
    }

    if first_char == 'c' && try_read("irmid;") {
        return Some(CharRef {
            name: "irmid;",
            characters: "\u{2aef}",
        });
    }

    if first_char == 'c' && try_read("olone;") {
        return Some(CharRef {
            name: "olone;",
            characters: "\u{2254}",
        });
    }

    if first_char == 'c' && try_read("ommat;") {
        return Some(CharRef {
            name: "ommat;",
            characters: "\u{40}",
        });
    }

    if first_char == 'c' && try_read("ompfn;") {
        return Some(CharRef {
            name: "ompfn;",
            characters: "\u{2218}",
        });
    }

    if first_char == 'c' && try_read("onint;") {
        return Some(CharRef {
            name: "onint;",
            characters: "\u{222e}",
        });
    }

    if first_char == 'c' && try_read("oprod;") {
        return Some(CharRef {
            name: "oprod;",
            characters: "\u{2210}",
        });
    }

    if first_char == 'c' && try_read("opysr;") {
        return Some(CharRef {
            name: "opysr;",
            characters: "\u{2117}",
        });
    }

    if first_char == 'c' && try_read("ularr;") {
        return Some(CharRef {
            name: "ularr;",
            characters: "\u{21b6}",
        });
    }

    if first_char == 'c' && try_read("upcap;") {
        return Some(CharRef {
            name: "upcap;",
            characters: "\u{2a46}",
        });
    }

    if first_char == 'c' && try_read("upcup;") {
        return Some(CharRef {
            name: "upcup;",
            characters: "\u{2a4a}",
        });
    }

    if first_char == 'c' && try_read("updot;") {
        return Some(CharRef {
            name: "updot;",
            characters: "\u{228d}",
        });
    }

    if first_char == 'c' && try_read("urarr;") {
        return Some(CharRef {
            name: "urarr;",
            characters: "\u{21b7}",
        });
    }

    if first_char == 'c' && try_read("urren;") {
        return Some(CharRef {
            name: "urren;",
            characters: "\u{a4}",
        });
    }

    if first_char == 'c' && try_read("ylcty;") {
        return Some(CharRef {
            name: "ylcty;",
            characters: "\u{232d}",
        });
    }

    if first_char == 'd' && try_read("agger;") {
        return Some(CharRef {
            name: "agger;",
            characters: "\u{2020}",
        });
    }

    if first_char == 'd' && try_read("aleth;") {
        return Some(CharRef {
            name: "aleth;",
            characters: "\u{2138}",
        });
    }

    if first_char == 'd' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{10f}",
        });
    }

    if first_char == 'd' && try_read("fisht;") {
        return Some(CharRef {
            name: "fisht;",
            characters: "\u{297f}",
        });
    }

    if first_char == 'd' && try_read("ivide;") {
        return Some(CharRef {
            name: "ivide;",
            characters: "\u{f7}",
        });
    }

    if first_char == 'd' && try_read("ivonx;") {
        return Some(CharRef {
            name: "ivonx;",
            characters: "\u{22c7}",
        });
    }

    if first_char == 'd' && try_read("lcorn;") {
        return Some(CharRef {
            name: "lcorn;",
            characters: "\u{231e}",
        });
    }

    if first_char == 'd' && try_read("lcrop;") {
        return Some(CharRef {
            name: "lcrop;",
            characters: "\u{230d}",
        });
    }

    if first_char == 'd' && try_read("ollar;") {
        return Some(CharRef {
            name: "ollar;",
            characters: "\u{24}",
        });
    }

    if first_char == 'd' && try_read("rcorn;") {
        return Some(CharRef {
            name: "rcorn;",
            characters: "\u{231f}",
        });
    }

    if first_char == 'd' && try_read("rcrop;") {
        return Some(CharRef {
            name: "rcrop;",
            characters: "\u{230c}",
        });
    }

    if first_char == 'd' && try_read("strok;") {
        return Some(CharRef {
            name: "strok;",
            characters: "\u{111}",
        });
    }

    if first_char == 'e' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{e9}",
        });
    }

    if first_char == 'e' && try_read("aster;") {
        return Some(CharRef {
            name: "aster;",
            characters: "\u{2a6e}",
        });
    }

    if first_char == 'e' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{11b}",
        });
    }

    if first_char == 'e' && try_read("colon;") {
        return Some(CharRef {
            name: "colon;",
            characters: "\u{2255}",
        });
    }

    if first_char == 'e' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{e8}",
        });
    }

    if first_char == 'e' && try_read("gsdot;") {
        return Some(CharRef {
            name: "gsdot;",
            characters: "\u{2a98}",
        });
    }

    if first_char == 'e' && try_read("lsdot;") {
        return Some(CharRef {
            name: "lsdot;",
            characters: "\u{2a97}",
        });
    }

    if first_char == 'e' && try_read("mptyv;") {
        return Some(CharRef {
            name: "mptyv;",
            characters: "\u{2205}",
        });
    }

    if first_char == 'e' && try_read("msp13;") {
        return Some(CharRef {
            name: "msp13;",
            characters: "\u{2004}",
        });
    }

    if first_char == 'e' && try_read("msp14;") {
        return Some(CharRef {
            name: "msp14;",
            characters: "\u{2005}",
        });
    }

    if first_char == 'e' && try_read("parsl;") {
        return Some(CharRef {
            name: "parsl;",
            characters: "\u{29e3}",
        });
    }

    if first_char == 'e' && try_read("qcirc;") {
        return Some(CharRef {
            name: "qcirc;",
            characters: "\u{2256}",
        });
    }

    if first_char == 'e' && try_read("quals;") {
        return Some(CharRef {
            name: "quals;",
            characters: "\u{3d}",
        });
    }

    if first_char == 'e' && try_read("quest;") {
        return Some(CharRef {
            name: "quest;",
            characters: "\u{225f}",
        });
    }

    if first_char == 'f' && try_read("emale;") {
        return Some(CharRef {
            name: "emale;",
            characters: "\u{2640}",
        });
    }

    if first_char == 'f' && try_read("filig;") {
        return Some(CharRef {
            name: "filig;",
            characters: "\u{fb03}",
        });
    }

    if first_char == 'f' && try_read("fllig;") {
        return Some(CharRef {
            name: "fllig;",
            characters: "\u{fb04}",
        });
    }

    if first_char == 'f' && try_read("orall;") {
        return Some(CharRef {
            name: "orall;",
            characters: "\u{2200}",
        });
    }

    if first_char == 'f' && try_read("rac12;") {
        return Some(CharRef {
            name: "rac12;",
            characters: "\u{bd}",
        });
    }

    if first_char == 'f' && try_read("rac13;") {
        return Some(CharRef {
            name: "rac13;",
            characters: "\u{2153}",
        });
    }

    if first_char == 'f' && try_read("rac14;") {
        return Some(CharRef {
            name: "rac14;",
            characters: "\u{bc}",
        });
    }

    if first_char == 'f' && try_read("rac15;") {
        return Some(CharRef {
            name: "rac15;",
            characters: "\u{2155}",
        });
    }

    if first_char == 'f' && try_read("rac16;") {
        return Some(CharRef {
            name: "rac16;",
            characters: "\u{2159}",
        });
    }

    if first_char == 'f' && try_read("rac18;") {
        return Some(CharRef {
            name: "rac18;",
            characters: "\u{215b}",
        });
    }

    if first_char == 'f' && try_read("rac23;") {
        return Some(CharRef {
            name: "rac23;",
            characters: "\u{2154}",
        });
    }

    if first_char == 'f' && try_read("rac25;") {
        return Some(CharRef {
            name: "rac25;",
            characters: "\u{2156}",
        });
    }

    if first_char == 'f' && try_read("rac34;") {
        return Some(CharRef {
            name: "rac34;",
            characters: "\u{be}",
        });
    }

    if first_char == 'f' && try_read("rac35;") {
        return Some(CharRef {
            name: "rac35;",
            characters: "\u{2157}",
        });
    }

    if first_char == 'f' && try_read("rac38;") {
        return Some(CharRef {
            name: "rac38;",
            characters: "\u{215c}",
        });
    }

    if first_char == 'f' && try_read("rac45;") {
        return Some(CharRef {
            name: "rac45;",
            characters: "\u{2158}",
        });
    }

    if first_char == 'f' && try_read("rac56;") {
        return Some(CharRef {
            name: "rac56;",
            characters: "\u{215a}",
        });
    }

    if first_char == 'f' && try_read("rac58;") {
        return Some(CharRef {
            name: "rac58;",
            characters: "\u{215d}",
        });
    }

    if first_char == 'f' && try_read("rac78;") {
        return Some(CharRef {
            name: "rac78;",
            characters: "\u{215e}",
        });
    }

    if first_char == 'g' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{1f5}",
        });
    }

    if first_char == 'g' && try_read("ammad;") {
        return Some(CharRef {
            name: "ammad;",
            characters: "\u{3dd}",
        });
    }

    if first_char == 'g' && try_read("breve;") {
        return Some(CharRef {
            name: "breve;",
            characters: "\u{11f}",
        });
    }

    if first_char == 'g' && try_read("esdot;") {
        return Some(CharRef {
            name: "esdot;",
            characters: "\u{2a80}",
        });
    }

    if first_char == 'g' && try_read("esles;") {
        return Some(CharRef {
            name: "esles;",
            characters: "\u{2a94}",
        });
    }

    if first_char == 'g' && try_read("tlPar;") {
        return Some(CharRef {
            name: "tlPar;",
            characters: "\u{2995}",
        });
    }

    if first_char == 'g' && try_read("trarr;") {
        return Some(CharRef {
            name: "trarr;",
            characters: "\u{2978}",
        });
    }

    if first_char == 'g' && try_read("trdot;") {
        return Some(CharRef {
            name: "trdot;",
            characters: "\u{22d7}",
        });
    }

    if first_char == 'g' && try_read("trsim;") {
        return Some(CharRef {
            name: "trsim;",
            characters: "\u{2273}",
        });
    }

    if first_char == 'h' && try_read("airsp;") {
        return Some(CharRef {
            name: "airsp;",
            characters: "\u{200a}",
        });
    }

    if first_char == 'h' && try_read("amilt;") {
        return Some(CharRef {
            name: "amilt;",
            characters: "\u{210b}",
        });
    }

    if first_char == 'h' && try_read("ardcy;") {
        return Some(CharRef {
            name: "ardcy;",
            characters: "\u{44a}",
        });
    }

    if first_char == 'h' && try_read("earts;") {
        return Some(CharRef {
            name: "earts;",
            characters: "\u{2665}",
        });
    }

    if first_char == 'h' && try_read("ellip;") {
        return Some(CharRef {
            name: "ellip;",
            characters: "\u{2026}",
        });
    }

    if first_char == 'h' && try_read("ercon;") {
        return Some(CharRef {
            name: "ercon;",
            characters: "\u{22b9}",
        });
    }

    if first_char == 'h' && try_read("omtht;") {
        return Some(CharRef {
            name: "omtht;",
            characters: "\u{223b}",
        });
    }

    if first_char == 'h' && try_read("orbar;") {
        return Some(CharRef {
            name: "orbar;",
            characters: "\u{2015}",
        });
    }

    if first_char == 'h' && try_read("slash;") {
        return Some(CharRef {
            name: "slash;",
            characters: "\u{210f}",
        });
    }

    if first_char == 'h' && try_read("strok;") {
        return Some(CharRef {
            name: "strok;",
            characters: "\u{127}",
        });
    }

    if first_char == 'h' && try_read("ybull;") {
        return Some(CharRef {
            name: "ybull;",
            characters: "\u{2043}",
        });
    }

    if first_char == 'h' && try_read("yphen;") {
        return Some(CharRef {
            name: "yphen;",
            characters: "\u{2010}",
        });
    }

    if first_char == 'i' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{ed}",
        });
    }

    if first_char == 'i' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{ec}",
        });
    }

    if first_char == 'i' && try_read("iiint;") {
        return Some(CharRef {
            name: "iiint;",
            characters: "\u{2a0c}",
        });
    }

    if first_char == 'i' && try_read("infin;") {
        return Some(CharRef {
            name: "infin;",
            characters: "\u{29dc}",
        });
    }

    if first_char == 'i' && try_read("ncare;") {
        return Some(CharRef {
            name: "ncare;",
            characters: "\u{2105}",
        });
    }

    if first_char == 'i' && try_read("nodot;") {
        return Some(CharRef {
            name: "nodot;",
            characters: "\u{131}",
        });
    }

    if first_char == 'i' && try_read("ntcal;") {
        return Some(CharRef {
            name: "ntcal;",
            characters: "\u{22ba}",
        });
    }

    if first_char == 'i' && try_read("quest;") {
        return Some(CharRef {
            name: "quest;",
            characters: "\u{bf}",
        });
    }

    if first_char == 'i' && try_read("sinsv;") {
        return Some(CharRef {
            name: "sinsv;",
            characters: "\u{22f3}",
        });
    }

    if first_char == 'i' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{129}",
        });
    }

    if first_char == 'j' && try_read("sercy;") {
        return Some(CharRef {
            name: "sercy;",
            characters: "\u{458}",
        });
    }

    if first_char == 'k' && try_read("appav;") {
        return Some(CharRef {
            name: "appav;",
            characters: "\u{3f0}",
        });
    }

    if first_char == 'k' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{137}",
        });
    }

    if first_char == 'k' && try_read("green;") {
        return Some(CharRef {
            name: "green;",
            characters: "\u{138}",
        });
    }

    if first_char == 'l' && try_read("Atail;") {
        return Some(CharRef {
            name: "Atail;",
            characters: "\u{291b}",
        });
    }

    if first_char == 'l' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{13a}",
        });
    }

    if first_char == 'l' && try_read("agran;") {
        return Some(CharRef {
            name: "agran;",
            characters: "\u{2112}",
        });
    }

    if first_char == 'l' && try_read("ambda;") {
        return Some(CharRef {
            name: "ambda;",
            characters: "\u{3bb}",
        });
    }

    if first_char == 'l' && try_read("angle;") {
        return Some(CharRef {
            name: "angle;",
            characters: "\u{27e8}",
        });
    }

    if first_char == 'l' && try_read("arrfs;") {
        return Some(CharRef {
            name: "arrfs;",
            characters: "\u{291d}",
        });
    }

    if first_char == 'l' && try_read("arrhk;") {
        return Some(CharRef {
            name: "arrhk;",
            characters: "\u{21a9}",
        });
    }

    if first_char == 'l' && try_read("arrlp;") {
        return Some(CharRef {
            name: "arrlp;",
            characters: "\u{21ab}",
        });
    }

    if first_char == 'l' && try_read("arrpl;") {
        return Some(CharRef {
            name: "arrpl;",
            characters: "\u{2939}",
        });
    }

    if first_char == 'l' && try_read("arrtl;") {
        return Some(CharRef {
            name: "arrtl;",
            characters: "\u{21a2}",
        });
    }

    if first_char == 'l' && try_read("atail;") {
        return Some(CharRef {
            name: "atail;",
            characters: "\u{2919}",
        });
    }

    if first_char == 'l' && try_read("brace;") {
        return Some(CharRef {
            name: "brace;",
            characters: "\u{7b}",
        });
    }

    if first_char == 'l' && try_read("brack;") {
        return Some(CharRef {
            name: "brack;",
            characters: "\u{5b}",
        });
    }

    if first_char == 'l' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{13e}",
        });
    }

    if first_char == 'l' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{13c}",
        });
    }

    if first_char == 'l' && try_read("dquor;") {
        return Some(CharRef {
            name: "dquor;",
            characters: "\u{201e}",
        });
    }

    if first_char == 'l' && try_read("esdot;") {
        return Some(CharRef {
            name: "esdot;",
            characters: "\u{2a7f}",
        });
    }

    if first_char == 'l' && try_read("esges;") {
        return Some(CharRef {
            name: "esges;",
            characters: "\u{2a93}",
        });
    }

    if first_char == 'l' && try_read("fisht;") {
        return Some(CharRef {
            name: "fisht;",
            characters: "\u{297c}",
        });
    }

    if first_char == 'l' && try_read("floor;") {
        return Some(CharRef {
            name: "floor;",
            characters: "\u{230a}",
        });
    }

    if first_char == 'l' && try_read("harul;") {
        return Some(CharRef {
            name: "harul;",
            characters: "\u{296a}",
        });
    }

    if first_char == 'l' && try_read("lhard;") {
        return Some(CharRef {
            name: "lhard;",
            characters: "\u{296b}",
        });
    }

    if first_char == 'l' && try_read("midot;") {
        return Some(CharRef {
            name: "midot;",
            characters: "\u{140}",
        });
    }

    if first_char == 'l' && try_read("moust;") {
        return Some(CharRef {
            name: "moust;",
            characters: "\u{23b0}",
        });
    }

    if first_char == 'l' && try_read("oplus;") {
        return Some(CharRef {
            name: "oplus;",
            characters: "\u{2a2d}",
        });
    }

    if first_char == 'l' && try_read("owast;") {
        return Some(CharRef {
            name: "owast;",
            characters: "\u{2217}",
        });
    }

    if first_char == 'l' && try_read("owbar;") {
        return Some(CharRef {
            name: "owbar;",
            characters: "\u{5f}",
        });
    }

    if first_char == 'l' && try_read("parlt;") {
        return Some(CharRef {
            name: "parlt;",
            characters: "\u{2993}",
        });
    }

    if first_char == 'l' && try_read("rhard;") {
        return Some(CharRef {
            name: "rhard;",
            characters: "\u{296d}",
        });
    }

    if first_char == 'l' && try_read("saquo;") {
        return Some(CharRef {
            name: "saquo;",
            characters: "\u{2039}",
        });
    }

    if first_char == 'l' && try_read("squor;") {
        return Some(CharRef {
            name: "squor;",
            characters: "\u{201a}",
        });
    }

    if first_char == 'l' && try_read("strok;") {
        return Some(CharRef {
            name: "strok;",
            characters: "\u{142}",
        });
    }

    if first_char == 'l' && try_read("three;") {
        return Some(CharRef {
            name: "three;",
            characters: "\u{22cb}",
        });
    }

    if first_char == 'l' && try_read("times;") {
        return Some(CharRef {
            name: "times;",
            characters: "\u{22c9}",
        });
    }

    if first_char == 'l' && try_read("tlarr;") {
        return Some(CharRef {
            name: "tlarr;",
            characters: "\u{2976}",
        });
    }

    if first_char == 'l' && try_read("trPar;") {
        return Some(CharRef {
            name: "trPar;",
            characters: "\u{2996}",
        });
    }

    if first_char == 'm' && try_read("apsto;") {
        return Some(CharRef {
            name: "apsto;",
            characters: "\u{21a6}",
        });
    }

    if first_char == 'm' && try_read("arker;") {
        return Some(CharRef {
            name: "arker;",
            characters: "\u{25ae}",
        });
    }

    if first_char == 'm' && try_read("comma;") {
        return Some(CharRef {
            name: "comma;",
            characters: "\u{2a29}",
        });
    }

    if first_char == 'm' && try_read("idast;") {
        return Some(CharRef {
            name: "idast;",
            characters: "\u{2a}",
        });
    }

    if first_char == 'm' && try_read("idcir;") {
        return Some(CharRef {
            name: "idcir;",
            characters: "\u{2af0}",
        });
    }

    if first_char == 'm' && try_read("iddot;") {
        return Some(CharRef {
            name: "iddot;",
            characters: "\u{b7}",
        });
    }

    if first_char == 'm' && try_read("inusb;") {
        return Some(CharRef {
            name: "inusb;",
            characters: "\u{229f}",
        });
    }

    if first_char == 'm' && try_read("inusd;") {
        return Some(CharRef {
            name: "inusd;",
            characters: "\u{2238}",
        });
    }

    if first_char == 'm' && try_read("nplus;") {
        return Some(CharRef {
            name: "nplus;",
            characters: "\u{2213}",
        });
    }

    if first_char == 'm' && try_read("odels;") {
        return Some(CharRef {
            name: "odels;",
            characters: "\u{22a7}",
        });
    }

    if first_char == 'm' && try_read("stpos;") {
        return Some(CharRef {
            name: "stpos;",
            characters: "\u{223e}",
        });
    }

    if first_char == 'n' && try_read("VDash;") {
        return Some(CharRef {
            name: "VDash;",
            characters: "\u{22af}",
        });
    }

    if first_char == 'n' && try_read("Vdash;") {
        return Some(CharRef {
            name: "Vdash;",
            characters: "\u{22ae}",
        });
    }

    if first_char == 'n' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{144}",
        });
    }

    if first_char == 'n' && try_read("bumpe;") {
        return Some(CharRef {
            name: "bumpe;",
            characters: "\u{224f}\u{338}",
        });
    }

    if first_char == 'n' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{148}",
        });
    }

    if first_char == 'n' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{146}",
        });
    }

    if first_char == 'n' && try_read("earhk;") {
        return Some(CharRef {
            name: "earhk;",
            characters: "\u{2924}",
        });
    }

    if first_char == 'n' && try_read("equiv;") {
        return Some(CharRef {
            name: "equiv;",
            characters: "\u{2262}",
        });
    }

    if first_char == 'n' && try_read("esear;") {
        return Some(CharRef {
            name: "esear;",
            characters: "\u{2928}",
        });
    }

    if first_char == 'n' && try_read("exist;") {
        return Some(CharRef {
            name: "exist;",
            characters: "\u{2204}",
        });
    }

    if first_char == 'n' && try_read("ltrie;") {
        return Some(CharRef {
            name: "ltrie;",
            characters: "\u{22ec}",
        });
    }

    if first_char == 'n' && try_read("otinE;") {
        return Some(CharRef {
            name: "otinE;",
            characters: "\u{22f9}\u{338}",
        });
    }

    if first_char == 'n' && try_read("parsl;") {
        return Some(CharRef {
            name: "parsl;",
            characters: "\u{2afd}\u{20e5}",
        });
    }

    if first_char == 'n' && try_read("prcue;") {
        return Some(CharRef {
            name: "prcue;",
            characters: "\u{22e0}",
        });
    }

    if first_char == 'n' && try_read("rarrc;") {
        return Some(CharRef {
            name: "rarrc;",
            characters: "\u{2933}\u{338}",
        });
    }

    if first_char == 'n' && try_read("rarrw;") {
        return Some(CharRef {
            name: "rarrw;",
            characters: "\u{219d}\u{338}",
        });
    }

    if first_char == 'n' && try_read("rtrie;") {
        return Some(CharRef {
            name: "rtrie;",
            characters: "\u{22ed}",
        });
    }

    if first_char == 'n' && try_read("sccue;") {
        return Some(CharRef {
            name: "sccue;",
            characters: "\u{22e1}",
        });
    }

    if first_char == 'n' && try_read("simeq;") {
        return Some(CharRef {
            name: "simeq;",
            characters: "\u{2244}",
        });
    }

    if first_char == 'n' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{f1}",
        });
    }

    if first_char == 'n' && try_read("umero;") {
        return Some(CharRef {
            name: "umero;",
            characters: "\u{2116}",
        });
    }

    if first_char == 'n' && try_read("vDash;") {
        return Some(CharRef {
            name: "vDash;",
            characters: "\u{22ad}",
        });
    }

    if first_char == 'n' && try_read("vHarr;") {
        return Some(CharRef {
            name: "vHarr;",
            characters: "\u{2904}",
        });
    }

    if first_char == 'n' && try_read("vdash;") {
        return Some(CharRef {
            name: "vdash;",
            characters: "\u{22ac}",
        });
    }

    if first_char == 'n' && try_read("vlArr;") {
        return Some(CharRef {
            name: "vlArr;",
            characters: "\u{2902}",
        });
    }

    if first_char == 'n' && try_read("vrArr;") {
        return Some(CharRef {
            name: "vrArr;",
            characters: "\u{2903}",
        });
    }

    if first_char == 'n' && try_read("warhk;") {
        return Some(CharRef {
            name: "warhk;",
            characters: "\u{2923}",
        });
    }

    if first_char == 'n' && try_read("wnear;") {
        return Some(CharRef {
            name: "wnear;",
            characters: "\u{2927}",
        });
    }

    if first_char == 'o' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{f3}",
        });
    }

    if first_char == 'o' && try_read("dblac;") {
        return Some(CharRef {
            name: "dblac;",
            characters: "\u{151}",
        });
    }

    if first_char == 'o' && try_read("dsold;") {
        return Some(CharRef {
            name: "dsold;",
            characters: "\u{29bc}",
        });
    }

    if first_char == 'o' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{f2}",
        });
    }

    if first_char == 'o' && try_read("minus;") {
        return Some(CharRef {
            name: "minus;",
            characters: "\u{2296}",
        });
    }

    if first_char == 'o' && try_read("rigof;") {
        return Some(CharRef {
            name: "rigof;",
            characters: "\u{22b6}",
        });
    }

    if first_char == 'o' && try_read("slash;") {
        return Some(CharRef {
            name: "slash;",
            characters: "\u{f8}",
        });
    }

    if first_char == 'o' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{f5}",
        });
    }

    if first_char == 'o' && try_read("times;") {
        return Some(CharRef {
            name: "times;",
            characters: "\u{2297}",
        });
    }

    if first_char == 'p' && try_read("arsim;") {
        return Some(CharRef {
            name: "arsim;",
            characters: "\u{2af3}",
        });
    }

    if first_char == 'p' && try_read("ercnt;") {
        return Some(CharRef {
            name: "ercnt;",
            characters: "\u{25}",
        });
    }

    if first_char == 'p' && try_read("eriod;") {
        return Some(CharRef {
            name: "eriod;",
            characters: "\u{2e}",
        });
    }

    if first_char == 'p' && try_read("ermil;") {
        return Some(CharRef {
            name: "ermil;",
            characters: "\u{2030}",
        });
    }

    if first_char == 'p' && try_read("hmmat;") {
        return Some(CharRef {
            name: "hmmat;",
            characters: "\u{2133}",
        });
    }

    if first_char == 'p' && try_read("lanck;") {
        return Some(CharRef {
            name: "lanck;",
            characters: "\u{210f}",
        });
    }

    if first_char == 'p' && try_read("lankv;") {
        return Some(CharRef {
            name: "lankv;",
            characters: "\u{210f}",
        });
    }

    if first_char == 'p' && try_read("lusdo;") {
        return Some(CharRef {
            name: "lusdo;",
            characters: "\u{2214}",
        });
    }

    if first_char == 'p' && try_read("lusdu;") {
        return Some(CharRef {
            name: "lusdu;",
            characters: "\u{2a25}",
        });
    }

    if first_char == 'p' && try_read("lusmn;") {
        return Some(CharRef {
            name: "lusmn;",
            characters: "\u{b1}",
        });
    }

    if first_char == 'p' && try_read("receq;") {
        return Some(CharRef {
            name: "receq;",
            characters: "\u{2aaf}",
        });
    }

    if first_char == 'p' && try_read("rimes;") {
        return Some(CharRef {
            name: "rimes;",
            characters: "\u{2119}",
        });
    }

    if first_char == 'p' && try_read("rnsim;") {
        return Some(CharRef {
            name: "rnsim;",
            characters: "\u{22e8}",
        });
    }

    if first_char == 'p' && try_read("ropto;") {
        return Some(CharRef {
            name: "ropto;",
            characters: "\u{221d}",
        });
    }

    if first_char == 'p' && try_read("rurel;") {
        return Some(CharRef {
            name: "rurel;",
            characters: "\u{22b0}",
        });
    }

    if first_char == 'p' && try_read("uncsp;") {
        return Some(CharRef {
            name: "uncsp;",
            characters: "\u{2008}",
        });
    }

    if first_char == 'q' && try_read("prime;") {
        return Some(CharRef {
            name: "prime;",
            characters: "\u{2057}",
        });
    }

    if first_char == 'r' && try_read("Atail;") {
        return Some(CharRef {
            name: "Atail;",
            characters: "\u{291c}",
        });
    }

    if first_char == 'r' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{155}",
        });
    }

    if first_char == 'r' && try_read("angle;") {
        return Some(CharRef {
            name: "angle;",
            characters: "\u{27e9}",
        });
    }

    if first_char == 'r' && try_read("arrap;") {
        return Some(CharRef {
            name: "arrap;",
            characters: "\u{2975}",
        });
    }

    if first_char == 'r' && try_read("arrfs;") {
        return Some(CharRef {
            name: "arrfs;",
            characters: "\u{291e}",
        });
    }

    if first_char == 'r' && try_read("arrhk;") {
        return Some(CharRef {
            name: "arrhk;",
            characters: "\u{21aa}",
        });
    }

    if first_char == 'r' && try_read("arrlp;") {
        return Some(CharRef {
            name: "arrlp;",
            characters: "\u{21ac}",
        });
    }

    if first_char == 'r' && try_read("arrpl;") {
        return Some(CharRef {
            name: "arrpl;",
            characters: "\u{2945}",
        });
    }

    if first_char == 'r' && try_read("arrtl;") {
        return Some(CharRef {
            name: "arrtl;",
            characters: "\u{21a3}",
        });
    }

    if first_char == 'r' && try_read("atail;") {
        return Some(CharRef {
            name: "atail;",
            characters: "\u{291a}",
        });
    }

    if first_char == 'r' && try_read("brace;") {
        return Some(CharRef {
            name: "brace;",
            characters: "\u{7d}",
        });
    }

    if first_char == 'r' && try_read("brack;") {
        return Some(CharRef {
            name: "brack;",
            characters: "\u{5d}",
        });
    }

    if first_char == 'r' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{159}",
        });
    }

    if first_char == 'r' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{157}",
        });
    }

    if first_char == 'r' && try_read("dquor;") {
        return Some(CharRef {
            name: "dquor;",
            characters: "\u{201d}",
        });
    }

    if first_char == 'r' && try_read("fisht;") {
        return Some(CharRef {
            name: "fisht;",
            characters: "\u{297d}",
        });
    }

    if first_char == 'r' && try_read("floor;") {
        return Some(CharRef {
            name: "floor;",
            characters: "\u{230b}",
        });
    }

    if first_char == 'r' && try_read("harul;") {
        return Some(CharRef {
            name: "harul;",
            characters: "\u{296c}",
        });
    }

    if first_char == 'r' && try_read("moust;") {
        return Some(CharRef {
            name: "moust;",
            characters: "\u{23b1}",
        });
    }

    if first_char == 'r' && try_read("oplus;") {
        return Some(CharRef {
            name: "oplus;",
            characters: "\u{2a2e}",
        });
    }

    if first_char == 'r' && try_read("pargt;") {
        return Some(CharRef {
            name: "pargt;",
            characters: "\u{2994}",
        });
    }

    if first_char == 'r' && try_read("saquo;") {
        return Some(CharRef {
            name: "saquo;",
            characters: "\u{203a}",
        });
    }

    if first_char == 'r' && try_read("squor;") {
        return Some(CharRef {
            name: "squor;",
            characters: "\u{2019}",
        });
    }

    if first_char == 'r' && try_read("three;") {
        return Some(CharRef {
            name: "three;",
            characters: "\u{22cc}",
        });
    }

    if first_char == 'r' && try_read("times;") {
        return Some(CharRef {
            name: "times;",
            characters: "\u{22ca}",
        });
    }

    if first_char == 's' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{15b}",
        });
    }

    if first_char == 's' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{161}",
        });
    }

    if first_char == 's' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{15f}",
        });
    }

    if first_char == 's' && try_read("cnsim;") {
        return Some(CharRef {
            name: "cnsim;",
            characters: "\u{22e9}",
        });
    }

    if first_char == 's' && try_read("earhk;") {
        return Some(CharRef {
            name: "earhk;",
            characters: "\u{2925}",
        });
    }

    if first_char == 's' && try_read("eswar;") {
        return Some(CharRef {
            name: "eswar;",
            characters: "\u{2929}",
        });
    }

    if first_char == 's' && try_read("frown;") {
        return Some(CharRef {
            name: "frown;",
            characters: "\u{2322}",
        });
    }

    if first_char == 's' && try_read("hchcy;") {
        return Some(CharRef {
            name: "hchcy;",
            characters: "\u{449}",
        });
    }

    if first_char == 's' && try_read("igmaf;") {
        return Some(CharRef {
            name: "igmaf;",
            characters: "\u{3c2}",
        });
    }

    if first_char == 's' && try_read("igmav;") {
        return Some(CharRef {
            name: "igmav;",
            characters: "\u{3c2}",
        });
    }

    if first_char == 's' && try_read("imdot;") {
        return Some(CharRef {
            name: "imdot;",
            characters: "\u{2a6a}",
        });
    }

    if first_char == 's' && try_read("mashp;") {
        return Some(CharRef {
            name: "mashp;",
            characters: "\u{2a33}",
        });
    }

    if first_char == 's' && try_read("oftcy;") {
        return Some(CharRef {
            name: "oftcy;",
            characters: "\u{44c}",
        });
    }

    if first_char == 's' && try_read("olbar;") {
        return Some(CharRef {
            name: "olbar;",
            characters: "\u{233f}",
        });
    }

    if first_char == 's' && try_read("pades;") {
        return Some(CharRef {
            name: "pades;",
            characters: "\u{2660}",
        });
    }

    if first_char == 's' && try_read("qcaps;") {
        return Some(CharRef {
            name: "qcaps;",
            characters: "\u{2293}\u{fe00}",
        });
    }

    if first_char == 's' && try_read("qcups;") {
        return Some(CharRef {
            name: "qcups;",
            characters: "\u{2294}\u{fe00}",
        });
    }

    if first_char == 's' && try_read("qsube;") {
        return Some(CharRef {
            name: "qsube;",
            characters: "\u{2291}",
        });
    }

    if first_char == 's' && try_read("qsupe;") {
        return Some(CharRef {
            name: "qsupe;",
            characters: "\u{2292}",
        });
    }

    if first_char == 's' && try_read("quare;") {
        return Some(CharRef {
            name: "quare;",
            characters: "\u{25a1}",
        });
    }

    if first_char == 's' && try_read("quarf;") {
        return Some(CharRef {
            name: "quarf;",
            characters: "\u{25aa}",
        });
    }

    if first_char == 's' && try_read("setmn;") {
        return Some(CharRef {
            name: "setmn;",
            characters: "\u{2216}",
        });
    }

    if first_char == 's' && try_read("smile;") {
        return Some(CharRef {
            name: "smile;",
            characters: "\u{2323}",
        });
    }

    if first_char == 's' && try_read("starf;") {
        return Some(CharRef {
            name: "starf;",
            characters: "\u{22c6}",
        });
    }

    if first_char == 's' && try_read("ubdot;") {
        return Some(CharRef {
            name: "ubdot;",
            characters: "\u{2abd}",
        });
    }

    if first_char == 's' && try_read("ubset;") {
        return Some(CharRef {
            name: "ubset;",
            characters: "\u{2282}",
        });
    }

    if first_char == 's' && try_read("ubsim;") {
        return Some(CharRef {
            name: "ubsim;",
            characters: "\u{2ac7}",
        });
    }

    if first_char == 's' && try_read("ubsub;") {
        return Some(CharRef {
            name: "ubsub;",
            characters: "\u{2ad5}",
        });
    }

    if first_char == 's' && try_read("ubsup;") {
        return Some(CharRef {
            name: "ubsup;",
            characters: "\u{2ad3}",
        });
    }

    if first_char == 's' && try_read("ucceq;") {
        return Some(CharRef {
            name: "ucceq;",
            characters: "\u{2ab0}",
        });
    }

    if first_char == 's' && try_read("updot;") {
        return Some(CharRef {
            name: "updot;",
            characters: "\u{2abe}",
        });
    }

    if first_char == 's' && try_read("upset;") {
        return Some(CharRef {
            name: "upset;",
            characters: "\u{2283}",
        });
    }

    if first_char == 's' && try_read("upsim;") {
        return Some(CharRef {
            name: "upsim;",
            characters: "\u{2ac8}",
        });
    }

    if first_char == 's' && try_read("upsub;") {
        return Some(CharRef {
            name: "upsub;",
            characters: "\u{2ad4}",
        });
    }

    if first_char == 's' && try_read("upsup;") {
        return Some(CharRef {
            name: "upsup;",
            characters: "\u{2ad6}",
        });
    }

    if first_char == 's' && try_read("warhk;") {
        return Some(CharRef {
            name: "warhk;",
            characters: "\u{2926}",
        });
    }

    if first_char == 's' && try_read("wnwar;") {
        return Some(CharRef {
            name: "wnwar;",
            characters: "\u{292a}",
        });
    }

    if first_char == 't' && try_read("arget;") {
        return Some(CharRef {
            name: "arget;",
            characters: "\u{2316}",
        });
    }

    if first_char == 't' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{165}",
        });
    }

    if first_char == 't' && try_read("cedil;") {
        return Some(CharRef {
            name: "cedil;",
            characters: "\u{163}",
        });
    }

    if first_char == 't' && try_read("elrec;") {
        return Some(CharRef {
            name: "elrec;",
            characters: "\u{2315}",
        });
    }

    if first_char == 't' && try_read("here4;") {
        return Some(CharRef {
            name: "here4;",
            characters: "\u{2234}",
        });
    }

    if first_char == 't' && try_read("hetav;") {
        return Some(CharRef {
            name: "hetav;",
            characters: "\u{3d1}",
        });
    }

    if first_char == 't' && try_read("hinsp;") {
        return Some(CharRef {
            name: "hinsp;",
            characters: "\u{2009}",
        });
    }

    if first_char == 't' && try_read("hksim;") {
        return Some(CharRef {
            name: "hksim;",
            characters: "\u{223c}",
        });
    }

    if first_char == 't' && try_read("imesb;") {
        return Some(CharRef {
            name: "imesb;",
            characters: "\u{22a0}",
        });
    }

    if first_char == 't' && try_read("imesd;") {
        return Some(CharRef {
            name: "imesd;",
            characters: "\u{2a30}",
        });
    }

    if first_char == 't' && try_read("opbot;") {
        return Some(CharRef {
            name: "opbot;",
            characters: "\u{2336}",
        });
    }

    if first_char == 't' && try_read("opcir;") {
        return Some(CharRef {
            name: "opcir;",
            characters: "\u{2af1}",
        });
    }

    if first_char == 't' && try_read("prime;") {
        return Some(CharRef {
            name: "prime;",
            characters: "\u{2034}",
        });
    }

    if first_char == 't' && try_read("ridot;") {
        return Some(CharRef {
            name: "ridot;",
            characters: "\u{25ec}",
        });
    }

    if first_char == 't' && try_read("strok;") {
        return Some(CharRef {
            name: "strok;",
            characters: "\u{167}",
        });
    }

    if first_char == 'u' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{fa}",
        });
    }

    if first_char == 'u' && try_read("breve;") {
        return Some(CharRef {
            name: "breve;",
            characters: "\u{16d}",
        });
    }

    if first_char == 'u' && try_read("dblac;") {
        return Some(CharRef {
            name: "dblac;",
            characters: "\u{171}",
        });
    }

    if first_char == 'u' && try_read("fisht;") {
        return Some(CharRef {
            name: "fisht;",
            characters: "\u{297e}",
        });
    }

    if first_char == 'u' && try_read("grave;") {
        return Some(CharRef {
            name: "grave;",
            characters: "\u{f9}",
        });
    }

    if first_char == 'u' && try_read("lcorn;") {
        return Some(CharRef {
            name: "lcorn;",
            characters: "\u{231c}",
        });
    }

    if first_char == 'u' && try_read("lcrop;") {
        return Some(CharRef {
            name: "lcrop;",
            characters: "\u{230f}",
        });
    }

    if first_char == 'u' && try_read("rcorn;") {
        return Some(CharRef {
            name: "rcorn;",
            characters: "\u{231d}",
        });
    }

    if first_char == 'u' && try_read("rcrop;") {
        return Some(CharRef {
            name: "rcrop;",
            characters: "\u{230e}",
        });
    }

    if first_char == 'u' && try_read("tilde;") {
        return Some(CharRef {
            name: "tilde;",
            characters: "\u{169}",
        });
    }

    if first_char == 'v' && try_read("angrt;") {
        return Some(CharRef {
            name: "angrt;",
            characters: "\u{299c}",
        });
    }

    if first_char == 'v' && try_read("arphi;") {
        return Some(CharRef {
            name: "arphi;",
            characters: "\u{3d5}",
        });
    }

    if first_char == 'v' && try_read("arrho;") {
        return Some(CharRef {
            name: "arrho;",
            characters: "\u{3f1}",
        });
    }

    if first_char == 'v' && try_read("eebar;") {
        return Some(CharRef {
            name: "eebar;",
            characters: "\u{22bb}",
        });
    }

    if first_char == 'v' && try_read("ellip;") {
        return Some(CharRef {
            name: "ellip;",
            characters: "\u{22ee}",
        });
    }

    if first_char == 'v' && try_read("erbar;") {
        return Some(CharRef {
            name: "erbar;",
            characters: "\u{7c}",
        });
    }

    if first_char == 'v' && try_read("subnE;") {
        return Some(CharRef {
            name: "subnE;",
            characters: "\u{2acb}\u{fe00}",
        });
    }

    if first_char == 'v' && try_read("subne;") {
        return Some(CharRef {
            name: "subne;",
            characters: "\u{228a}\u{fe00}",
        });
    }

    if first_char == 'v' && try_read("supnE;") {
        return Some(CharRef {
            name: "supnE;",
            characters: "\u{2acc}\u{fe00}",
        });
    }

    if first_char == 'v' && try_read("supne;") {
        return Some(CharRef {
            name: "supne;",
            characters: "\u{228b}\u{fe00}",
        });
    }

    if first_char == 'w' && try_read("edbar;") {
        return Some(CharRef {
            name: "edbar;",
            characters: "\u{2a5f}",
        });
    }

    if first_char == 'w' && try_read("edgeq;") {
        return Some(CharRef {
            name: "edgeq;",
            characters: "\u{2259}",
        });
    }

    if first_char == 'w' && try_read("eierp;") {
        return Some(CharRef {
            name: "eierp;",
            characters: "\u{2118}",
        });
    }

    if first_char == 'w' && try_read("reath;") {
        return Some(CharRef {
            name: "reath;",
            characters: "\u{2240}",
        });
    }

    if first_char == 'x' && try_read("oplus;") {
        return Some(CharRef {
            name: "oplus;",
            characters: "\u{2a01}",
        });
    }

    if first_char == 'x' && try_read("otime;") {
        return Some(CharRef {
            name: "otime;",
            characters: "\u{2a02}",
        });
    }

    if first_char == 'x' && try_read("sqcup;") {
        return Some(CharRef {
            name: "sqcup;",
            characters: "\u{2a06}",
        });
    }

    if first_char == 'x' && try_read("uplus;") {
        return Some(CharRef {
            name: "uplus;",
            characters: "\u{2a04}",
        });
    }

    if first_char == 'x' && try_read("wedge;") {
        return Some(CharRef {
            name: "wedge;",
            characters: "\u{22c0}",
        });
    }

    if first_char == 'y' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{fd}",
        });
    }

    if first_char == 'z' && try_read("acute;") {
        return Some(CharRef {
            name: "acute;",
            characters: "\u{17a}",
        });
    }

    if first_char == 'z' && try_read("caron;") {
        return Some(CharRef {
            name: "caron;",
            characters: "\u{17e}",
        });
    }

    if first_char == 'z' && try_read("eetrf;") {
        return Some(CharRef {
            name: "eetrf;",
            characters: "\u{2128}",
        });
    }

    if first_char == 'A' && try_read("Elig;") {
        return Some(CharRef {
            name: "Elig;",
            characters: "\u{c6}",
        });
    }

    if first_char == 'A' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{c1}",
        });
    }

    if first_char == 'A' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{c2}",
        });
    }

    if first_char == 'A' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{c0}",
        });
    }

    if first_char == 'A' && try_read("lpha;") {
        return Some(CharRef {
            name: "lpha;",
            characters: "\u{391}",
        });
    }

    if first_char == 'A' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{100}",
        });
    }

    if first_char == 'A' && try_read("ogon;") {
        return Some(CharRef {
            name: "ogon;",
            characters: "\u{104}",
        });
    }

    if first_char == 'A' && try_read("ring;") {
        return Some(CharRef {
            name: "ring;",
            characters: "\u{c5}",
        });
    }

    if first_char == 'A' && try_read("tilde") {
        return Some(CharRef {
            name: "tilde",
            characters: "\u{c3}",
        });
    }

    if first_char == 'B' && try_read("reve;") {
        return Some(CharRef {
            name: "reve;",
            characters: "\u{2d8}",
        });
    }

    if first_char == 'C' && try_read("cedil") {
        return Some(CharRef {
            name: "cedil",
            characters: "\u{c7}",
        });
    }

    if first_char == 'C' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{108}",
        });
    }

    if first_char == 'C' && try_read("olon;") {
        return Some(CharRef {
            name: "olon;",
            characters: "\u{2237}",
        });
    }

    if first_char == 'C' && try_read("ross;") {
        return Some(CharRef {
            name: "ross;",
            characters: "\u{2a2f}",
        });
    }

    if first_char == 'D' && try_read("ashv;") {
        return Some(CharRef {
            name: "ashv;",
            characters: "\u{2ae4}",
        });
    }

    if first_char == 'D' && try_read("elta;") {
        return Some(CharRef {
            name: "elta;",
            characters: "\u{394}",
        });
    }

    if first_char == 'E' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{c9}",
        });
    }

    if first_char == 'E' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{ca}",
        });
    }

    if first_char == 'E' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{c8}",
        });
    }

    if first_char == 'E' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{112}",
        });
    }

    if first_char == 'E' && try_read("ogon;") {
        return Some(CharRef {
            name: "ogon;",
            characters: "\u{118}",
        });
    }

    if first_char == 'E' && try_read("qual;") {
        return Some(CharRef {
            name: "qual;",
            characters: "\u{2a75}",
        });
    }

    if first_char == 'G' && try_read("amma;") {
        return Some(CharRef {
            name: "amma;",
            characters: "\u{393}",
        });
    }

    if first_char == 'G' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{11c}",
        });
    }

    if first_char == 'H' && try_read("acek;") {
        return Some(CharRef {
            name: "acek;",
            characters: "\u{2c7}",
        });
    }

    if first_char == 'H' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{124}",
        });
    }

    if first_char == 'I' && try_read("Jlig;") {
        return Some(CharRef {
            name: "Jlig;",
            characters: "\u{132}",
        });
    }

    if first_char == 'I' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{cd}",
        });
    }

    if first_char == 'I' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{ce}",
        });
    }

    if first_char == 'I' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{cc}",
        });
    }

    if first_char == 'I' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{12a}",
        });
    }

    if first_char == 'I' && try_read("ogon;") {
        return Some(CharRef {
            name: "ogon;",
            characters: "\u{12e}",
        });
    }

    if first_char == 'I' && try_read("ukcy;") {
        return Some(CharRef {
            name: "ukcy;",
            characters: "\u{406}",
        });
    }

    if first_char == 'J' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{134}",
        });
    }

    if first_char == 'J' && try_read("ukcy;") {
        return Some(CharRef {
            name: "ukcy;",
            characters: "\u{404}",
        });
    }

    if first_char == 'K' && try_read("appa;") {
        return Some(CharRef {
            name: "appa;",
            characters: "\u{39a}",
        });
    }

    if first_char == 'N' && try_read("tilde") {
        return Some(CharRef {
            name: "tilde",
            characters: "\u{d1}",
        });
    }

    if first_char == 'O' && try_read("Elig;") {
        return Some(CharRef {
            name: "Elig;",
            characters: "\u{152}",
        });
    }

    if first_char == 'O' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{d3}",
        });
    }

    if first_char == 'O' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{d4}",
        });
    }

    if first_char == 'O' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{d2}",
        });
    }

    if first_char == 'O' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{14c}",
        });
    }

    if first_char == 'O' && try_read("mega;") {
        return Some(CharRef {
            name: "mega;",
            characters: "\u{3a9}",
        });
    }

    if first_char == 'O' && try_read("slash") {
        return Some(CharRef {
            name: "slash",
            characters: "\u{d8}",
        });
    }

    if first_char == 'O' && try_read("tilde") {
        return Some(CharRef {
            name: "tilde",
            characters: "\u{d5}",
        });
    }

    if first_char == 'P' && try_read("rime;") {
        return Some(CharRef {
            name: "rime;",
            characters: "\u{2033}",
        });
    }

    if first_char == 'R' && try_read("Barr;") {
        return Some(CharRef {
            name: "Barr;",
            characters: "\u{2910}",
        });
    }

    if first_char == 'S' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{15c}",
        });
    }

    if first_char == 'S' && try_read("igma;") {
        return Some(CharRef {
            name: "igma;",
            characters: "\u{3a3}",
        });
    }

    if first_char == 'T' && try_read("HORN;") {
        return Some(CharRef {
            name: "HORN;",
            characters: "\u{de}",
        });
    }

    if first_char == 'T' && try_read("RADE;") {
        return Some(CharRef {
            name: "RADE;",
            characters: "\u{2122}",
        });
    }

    if first_char == 'T' && try_read("SHcy;") {
        return Some(CharRef {
            name: "SHcy;",
            characters: "\u{40b}",
        });
    }

    if first_char == 'T' && try_read("heta;") {
        return Some(CharRef {
            name: "heta;",
            characters: "\u{398}",
        });
    }

    if first_char == 'T' && try_read("ilde;") {
        return Some(CharRef {
            name: "ilde;",
            characters: "\u{223c}",
        });
    }

    if first_char == 'U' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{da}",
        });
    }

    if first_char == 'U' && try_read("brcy;") {
        return Some(CharRef {
            name: "brcy;",
            characters: "\u{40e}",
        });
    }

    if first_char == 'U' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{db}",
        });
    }

    if first_char == 'U' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{d9}",
        });
    }

    if first_char == 'U' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{16a}",
        });
    }

    if first_char == 'U' && try_read("nion;") {
        return Some(CharRef {
            name: "nion;",
            characters: "\u{22c3}",
        });
    }

    if first_char == 'U' && try_read("ogon;") {
        return Some(CharRef {
            name: "ogon;",
            characters: "\u{172}",
        });
    }

    if first_char == 'U' && try_read("pTee;") {
        return Some(CharRef {
            name: "pTee;",
            characters: "\u{22a5}",
        });
    }

    if first_char == 'U' && try_read("ring;") {
        return Some(CharRef {
            name: "ring;",
            characters: "\u{16e}",
        });
    }

    if first_char == 'V' && try_read("Dash;") {
        return Some(CharRef {
            name: "Dash;",
            characters: "\u{22ab}",
        });
    }

    if first_char == 'V' && try_read("dash;") {
        return Some(CharRef {
            name: "dash;",
            characters: "\u{22a9}",
        });
    }

    if first_char == 'W' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{174}",
        });
    }

    if first_char == 'W' && try_read("edge;") {
        return Some(CharRef {
            name: "edge;",
            characters: "\u{22c0}",
        });
    }

    if first_char == 'Y' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{dd}",
        });
    }

    if first_char == 'Y' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{176}",
        });
    }

    if first_char == 'a' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{e1}",
        });
    }

    if first_char == 'a' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{e2}",
        });
    }

    if first_char == 'a' && try_read("cute;") {
        return Some(CharRef {
            name: "cute;",
            characters: "\u{b4}",
        });
    }

    if first_char == 'a' && try_read("elig;") {
        return Some(CharRef {
            name: "elig;",
            characters: "\u{e6}",
        });
    }

    if first_char == 'a' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{e0}",
        });
    }

    if first_char == 'a' && try_read("leph;") {
        return Some(CharRef {
            name: "leph;",
            characters: "\u{2135}",
        });
    }

    if first_char == 'a' && try_read("lpha;") {
        return Some(CharRef {
            name: "lpha;",
            characters: "\u{3b1}",
        });
    }

    if first_char == 'a' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{101}",
        });
    }

    if first_char == 'a' && try_read("malg;") {
        return Some(CharRef {
            name: "malg;",
            characters: "\u{2a3f}",
        });
    }

    if first_char == 'a' && try_read("ngle;") {
        return Some(CharRef {
            name: "ngle;",
            characters: "\u{2220}",
        });
    }

    if first_char == 'a' && try_read("ngrt;") {
        return Some(CharRef {
            name: "ngrt;",
            characters: "\u{221f}",
        });
    }

    if first_char == 'a' && try_read("ngst;") {
        return Some(CharRef {
            name: "ngst;",
            characters: "\u{c5}",
        });
    }

    if first_char == 'a' && try_read("ogon;") {
        return Some(CharRef {
            name: "ogon;",
            characters: "\u{105}",
        });
    }

    if first_char == 'a' && try_read("ring;") {
        return Some(CharRef {
            name: "ring;",
            characters: "\u{e5}",
        });
    }

    if first_char == 'a' && try_read("symp;") {
        return Some(CharRef {
            name: "symp;",
            characters: "\u{2248}",
        });
    }

    if first_char == 'a' && try_read("tilde") {
        return Some(CharRef {
            name: "tilde",
            characters: "\u{e3}",
        });
    }

    if first_char == 'a' && try_read("wint;") {
        return Some(CharRef {
            name: "wint;",
            characters: "\u{2a11}",
        });
    }

    if first_char == 'b' && try_read("cong;") {
        return Some(CharRef {
            name: "cong;",
            characters: "\u{224c}",
        });
    }

    if first_char == 'b' && try_read("dquo;") {
        return Some(CharRef {
            name: "dquo;",
            characters: "\u{201e}",
        });
    }

    if first_char == 'b' && try_read("epsi;") {
        return Some(CharRef {
            name: "epsi;",
            characters: "\u{3f6}",
        });
    }

    if first_char == 'b' && try_read("lank;") {
        return Some(CharRef {
            name: "lank;",
            characters: "\u{2423}",
        });
    }

    if first_char == 'b' && try_read("lk12;") {
        return Some(CharRef {
            name: "lk12;",
            characters: "\u{2592}",
        });
    }

    if first_char == 'b' && try_read("lk14;") {
        return Some(CharRef {
            name: "lk14;",
            characters: "\u{2591}",
        });
    }

    if first_char == 'b' && try_read("lk34;") {
        return Some(CharRef {
            name: "lk34;",
            characters: "\u{2593}",
        });
    }

    if first_char == 'b' && try_read("lock;") {
        return Some(CharRef {
            name: "lock;",
            characters: "\u{2588}",
        });
    }

    if first_char == 'b' && try_read("oxDL;") {
        return Some(CharRef {
            name: "oxDL;",
            characters: "\u{2557}",
        });
    }

    if first_char == 'b' && try_read("oxDR;") {
        return Some(CharRef {
            name: "oxDR;",
            characters: "\u{2554}",
        });
    }

    if first_char == 'b' && try_read("oxDl;") {
        return Some(CharRef {
            name: "oxDl;",
            characters: "\u{2556}",
        });
    }

    if first_char == 'b' && try_read("oxDr;") {
        return Some(CharRef {
            name: "oxDr;",
            characters: "\u{2553}",
        });
    }

    if first_char == 'b' && try_read("oxHD;") {
        return Some(CharRef {
            name: "oxHD;",
            characters: "\u{2566}",
        });
    }

    if first_char == 'b' && try_read("oxHU;") {
        return Some(CharRef {
            name: "oxHU;",
            characters: "\u{2569}",
        });
    }

    if first_char == 'b' && try_read("oxHd;") {
        return Some(CharRef {
            name: "oxHd;",
            characters: "\u{2564}",
        });
    }

    if first_char == 'b' && try_read("oxHu;") {
        return Some(CharRef {
            name: "oxHu;",
            characters: "\u{2567}",
        });
    }

    if first_char == 'b' && try_read("oxUL;") {
        return Some(CharRef {
            name: "oxUL;",
            characters: "\u{255d}",
        });
    }

    if first_char == 'b' && try_read("oxUR;") {
        return Some(CharRef {
            name: "oxUR;",
            characters: "\u{255a}",
        });
    }

    if first_char == 'b' && try_read("oxUl;") {
        return Some(CharRef {
            name: "oxUl;",
            characters: "\u{255c}",
        });
    }

    if first_char == 'b' && try_read("oxUr;") {
        return Some(CharRef {
            name: "oxUr;",
            characters: "\u{2559}",
        });
    }

    if first_char == 'b' && try_read("oxVH;") {
        return Some(CharRef {
            name: "oxVH;",
            characters: "\u{256c}",
        });
    }

    if first_char == 'b' && try_read("oxVL;") {
        return Some(CharRef {
            name: "oxVL;",
            characters: "\u{2563}",
        });
    }

    if first_char == 'b' && try_read("oxVR;") {
        return Some(CharRef {
            name: "oxVR;",
            characters: "\u{2560}",
        });
    }

    if first_char == 'b' && try_read("oxVh;") {
        return Some(CharRef {
            name: "oxVh;",
            characters: "\u{256b}",
        });
    }

    if first_char == 'b' && try_read("oxVl;") {
        return Some(CharRef {
            name: "oxVl;",
            characters: "\u{2562}",
        });
    }

    if first_char == 'b' && try_read("oxVr;") {
        return Some(CharRef {
            name: "oxVr;",
            characters: "\u{255f}",
        });
    }

    if first_char == 'b' && try_read("oxdL;") {
        return Some(CharRef {
            name: "oxdL;",
            characters: "\u{2555}",
        });
    }

    if first_char == 'b' && try_read("oxdR;") {
        return Some(CharRef {
            name: "oxdR;",
            characters: "\u{2552}",
        });
    }

    if first_char == 'b' && try_read("oxdl;") {
        return Some(CharRef {
            name: "oxdl;",
            characters: "\u{2510}",
        });
    }

    if first_char == 'b' && try_read("oxdr;") {
        return Some(CharRef {
            name: "oxdr;",
            characters: "\u{250c}",
        });
    }

    if first_char == 'b' && try_read("oxhD;") {
        return Some(CharRef {
            name: "oxhD;",
            characters: "\u{2565}",
        });
    }

    if first_char == 'b' && try_read("oxhU;") {
        return Some(CharRef {
            name: "oxhU;",
            characters: "\u{2568}",
        });
    }

    if first_char == 'b' && try_read("oxhd;") {
        return Some(CharRef {
            name: "oxhd;",
            characters: "\u{252c}",
        });
    }

    if first_char == 'b' && try_read("oxhu;") {
        return Some(CharRef {
            name: "oxhu;",
            characters: "\u{2534}",
        });
    }

    if first_char == 'b' && try_read("oxuL;") {
        return Some(CharRef {
            name: "oxuL;",
            characters: "\u{255b}",
        });
    }

    if first_char == 'b' && try_read("oxuR;") {
        return Some(CharRef {
            name: "oxuR;",
            characters: "\u{2558}",
        });
    }

    if first_char == 'b' && try_read("oxul;") {
        return Some(CharRef {
            name: "oxul;",
            characters: "\u{2518}",
        });
    }

    if first_char == 'b' && try_read("oxur;") {
        return Some(CharRef {
            name: "oxur;",
            characters: "\u{2514}",
        });
    }

    if first_char == 'b' && try_read("oxvH;") {
        return Some(CharRef {
            name: "oxvH;",
            characters: "\u{256a}",
        });
    }

    if first_char == 'b' && try_read("oxvL;") {
        return Some(CharRef {
            name: "oxvL;",
            characters: "\u{2561}",
        });
    }

    if first_char == 'b' && try_read("oxvR;") {
        return Some(CharRef {
            name: "oxvR;",
            characters: "\u{255e}",
        });
    }

    if first_char == 'b' && try_read("oxvh;") {
        return Some(CharRef {
            name: "oxvh;",
            characters: "\u{253c}",
        });
    }

    if first_char == 'b' && try_read("oxvl;") {
        return Some(CharRef {
            name: "oxvl;",
            characters: "\u{2524}",
        });
    }

    if first_char == 'b' && try_read("oxvr;") {
        return Some(CharRef {
            name: "oxvr;",
            characters: "\u{251c}",
        });
    }

    if first_char == 'b' && try_read("reve;") {
        return Some(CharRef {
            name: "reve;",
            characters: "\u{2d8}",
        });
    }

    if first_char == 'b' && try_read("rvbar") {
        return Some(CharRef {
            name: "rvbar",
            characters: "\u{a6}",
        });
    }

    if first_char == 'b' && try_read("semi;") {
        return Some(CharRef {
            name: "semi;",
            characters: "\u{204f}",
        });
    }

    if first_char == 'b' && try_read("sime;") {
        return Some(CharRef {
            name: "sime;",
            characters: "\u{22cd}",
        });
    }

    if first_char == 'b' && try_read("solb;") {
        return Some(CharRef {
            name: "solb;",
            characters: "\u{29c5}",
        });
    }

    if first_char == 'b' && try_read("umpE;") {
        return Some(CharRef {
            name: "umpE;",
            characters: "\u{2aae}",
        });
    }

    if first_char == 'b' && try_read("umpe;") {
        return Some(CharRef {
            name: "umpe;",
            characters: "\u{224f}",
        });
    }

    if first_char == 'c' && try_read("aret;") {
        return Some(CharRef {
            name: "aret;",
            characters: "\u{2041}",
        });
    }

    if first_char == 'c' && try_read("aron;") {
        return Some(CharRef {
            name: "aron;",
            characters: "\u{2c7}",
        });
    }

    if first_char == 'c' && try_read("caps;") {
        return Some(CharRef {
            name: "caps;",
            characters: "\u{2a4d}",
        });
    }

    if first_char == 'c' && try_read("cedil") {
        return Some(CharRef {
            name: "cedil",
            characters: "\u{e7}",
        });
    }

    if first_char == 'c' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{109}",
        });
    }

    if first_char == 'c' && try_read("cups;") {
        return Some(CharRef {
            name: "cups;",
            characters: "\u{2a4c}",
        });
    }

    if first_char == 'c' && try_read("edil;") {
        return Some(CharRef {
            name: "edil;",
            characters: "\u{b8}",
        });
    }

    if first_char == 'c' && try_read("heck;") {
        return Some(CharRef {
            name: "heck;",
            characters: "\u{2713}",
        });
    }

    if first_char == 'c' && try_read("lubs;") {
        return Some(CharRef {
            name: "lubs;",
            characters: "\u{2663}",
        });
    }

    if first_char == 'c' && try_read("olon;") {
        return Some(CharRef {
            name: "olon;",
            characters: "\u{3a}",
        });
    }

    if first_char == 'c' && try_read("omma;") {
        return Some(CharRef {
            name: "omma;",
            characters: "\u{2c}",
        });
    }

    if first_char == 'c' && try_read("rarr;") {
        return Some(CharRef {
            name: "rarr;",
            characters: "\u{21b5}",
        });
    }

    if first_char == 'c' && try_read("ross;") {
        return Some(CharRef {
            name: "ross;",
            characters: "\u{2717}",
        });
    }

    if first_char == 'c' && try_read("sube;") {
        return Some(CharRef {
            name: "sube;",
            characters: "\u{2ad1}",
        });
    }

    if first_char == 'c' && try_read("supe;") {
        return Some(CharRef {
            name: "supe;",
            characters: "\u{2ad2}",
        });
    }

    if first_char == 'c' && try_read("tdot;") {
        return Some(CharRef {
            name: "tdot;",
            characters: "\u{22ef}",
        });
    }

    if first_char == 'c' && try_read("uepr;") {
        return Some(CharRef {
            name: "uepr;",
            characters: "\u{22de}",
        });
    }

    if first_char == 'c' && try_read("uesc;") {
        return Some(CharRef {
            name: "uesc;",
            characters: "\u{22df}",
        });
    }

    if first_char == 'c' && try_read("upor;") {
        return Some(CharRef {
            name: "upor;",
            characters: "\u{2a45}",
        });
    }

    if first_char == 'c' && try_read("urren") {
        return Some(CharRef {
            name: "urren",
            characters: "\u{a4}",
        });
    }

    if first_char == 'c' && try_read("uvee;") {
        return Some(CharRef {
            name: "uvee;",
            characters: "\u{22ce}",
        });
    }

    if first_char == 'c' && try_read("uwed;") {
        return Some(CharRef {
            name: "uwed;",
            characters: "\u{22cf}",
        });
    }

    if first_char == 'c' && try_read("wint;") {
        return Some(CharRef {
            name: "wint;",
            characters: "\u{2231}",
        });
    }

    if first_char == 'd' && try_read("ashv;") {
        return Some(CharRef {
            name: "ashv;",
            characters: "\u{22a3}",
        });
    }

    if first_char == 'd' && try_read("blac;") {
        return Some(CharRef {
            name: "blac;",
            characters: "\u{2dd}",
        });
    }

    if first_char == 'd' && try_read("darr;") {
        return Some(CharRef {
            name: "darr;",
            characters: "\u{21ca}",
        });
    }

    if first_char == 'd' && try_read("elta;") {
        return Some(CharRef {
            name: "elta;",
            characters: "\u{3b4}",
        });
    }

    if first_char == 'd' && try_read("harl;") {
        return Some(CharRef {
            name: "harl;",
            characters: "\u{21c3}",
        });
    }

    if first_char == 'd' && try_read("harr;") {
        return Some(CharRef {
            name: "harr;",
            characters: "\u{21c2}",
        });
    }

    if first_char == 'd' && try_read("iams;") {
        return Some(CharRef {
            name: "iams;",
            characters: "\u{2666}",
        });
    }

    if first_char == 'd' && try_read("isin;") {
        return Some(CharRef {
            name: "isin;",
            characters: "\u{22f2}",
        });
    }

    if first_char == 'd' && try_read("ivide") {
        return Some(CharRef {
            name: "ivide",
            characters: "\u{f7}",
        });
    }

    if first_char == 'd' && try_read("oteq;") {
        return Some(CharRef {
            name: "oteq;",
            characters: "\u{2250}",
        });
    }

    if first_char == 'd' && try_read("tdot;") {
        return Some(CharRef {
            name: "tdot;",
            characters: "\u{22f1}",
        });
    }

    if first_char == 'd' && try_read("trif;") {
        return Some(CharRef {
            name: "trif;",
            characters: "\u{25be}",
        });
    }

    if first_char == 'd' && try_read("uarr;") {
        return Some(CharRef {
            name: "uarr;",
            characters: "\u{21f5}",
        });
    }

    if first_char == 'd' && try_read("uhar;") {
        return Some(CharRef {
            name: "uhar;",
            characters: "\u{296f}",
        });
    }

    if first_char == 'e' && try_read("DDot;") {
        return Some(CharRef {
            name: "DDot;",
            characters: "\u{2a77}",
        });
    }

    if first_char == 'e' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{e9}",
        });
    }

    if first_char == 'e' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{ea}",
        });
    }

    if first_char == 'e' && try_read("fDot;") {
        return Some(CharRef {
            name: "fDot;",
            characters: "\u{2252}",
        });
    }

    if first_char == 'e' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{e8}",
        });
    }

    if first_char == 'e' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{113}",
        });
    }

    if first_char == 'e' && try_read("mpty;") {
        return Some(CharRef {
            name: "mpty;",
            characters: "\u{2205}",
        });
    }

    if first_char == 'e' && try_read("ogon;") {
        return Some(CharRef {
            name: "ogon;",
            characters: "\u{119}",
        });
    }

    if first_char == 'e' && try_read("plus;") {
        return Some(CharRef {
            name: "plus;",
            characters: "\u{2a71}",
        });
    }

    if first_char == 'e' && try_read("psiv;") {
        return Some(CharRef {
            name: "psiv;",
            characters: "\u{3f5}",
        });
    }

    if first_char == 'e' && try_read("qsim;") {
        return Some(CharRef {
            name: "qsim;",
            characters: "\u{2242}",
        });
    }

    if first_char == 'e' && try_read("quiv;") {
        return Some(CharRef {
            name: "quiv;",
            characters: "\u{2261}",
        });
    }

    if first_char == 'e' && try_read("rDot;") {
        return Some(CharRef {
            name: "rDot;",
            characters: "\u{2253}",
        });
    }

    if first_char == 'e' && try_read("rarr;") {
        return Some(CharRef {
            name: "rarr;",
            characters: "\u{2971}",
        });
    }

    if first_char == 'e' && try_read("sdot;") {
        return Some(CharRef {
            name: "sdot;",
            characters: "\u{2250}",
        });
    }

    if first_char == 'e' && try_read("xist;") {
        return Some(CharRef {
            name: "xist;",
            characters: "\u{2203}",
        });
    }

    if first_char == 'f' && try_read("flig;") {
        return Some(CharRef {
            name: "flig;",
            characters: "\u{fb00}",
        });
    }

    if first_char == 'f' && try_read("ilig;") {
        return Some(CharRef {
            name: "ilig;",
            characters: "\u{fb01}",
        });
    }

    if first_char == 'f' && try_read("jlig;") {
        return Some(CharRef {
            name: "jlig;",
            characters: "\u{66}\u{6a}",
        });
    }

    if first_char == 'f' && try_read("llig;") {
        return Some(CharRef {
            name: "llig;",
            characters: "\u{fb02}",
        });
    }

    if first_char == 'f' && try_read("ltns;") {
        return Some(CharRef {
            name: "ltns;",
            characters: "\u{25b1}",
        });
    }

    if first_char == 'f' && try_read("orkv;") {
        return Some(CharRef {
            name: "orkv;",
            characters: "\u{2ad9}",
        });
    }

    if first_char == 'f' && try_read("rac12") {
        return Some(CharRef {
            name: "rac12",
            characters: "\u{bd}",
        });
    }

    if first_char == 'f' && try_read("rac14") {
        return Some(CharRef {
            name: "rac14",
            characters: "\u{bc}",
        });
    }

    if first_char == 'f' && try_read("rac34") {
        return Some(CharRef {
            name: "rac34",
            characters: "\u{be}",
        });
    }

    if first_char == 'f' && try_read("rasl;") {
        return Some(CharRef {
            name: "rasl;",
            characters: "\u{2044}",
        });
    }

    if first_char == 'f' && try_read("rown;") {
        return Some(CharRef {
            name: "rown;",
            characters: "\u{2322}",
        });
    }

    if first_char == 'g' && try_read("amma;") {
        return Some(CharRef {
            name: "amma;",
            characters: "\u{3b3}",
        });
    }

    if first_char == 'g' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{11d}",
        });
    }

    if first_char == 'g' && try_read("escc;") {
        return Some(CharRef {
            name: "escc;",
            characters: "\u{2aa9}",
        });
    }

    if first_char == 'g' && try_read("imel;") {
        return Some(CharRef {
            name: "imel;",
            characters: "\u{2137}",
        });
    }

    if first_char == 'g' && try_read("neqq;") {
        return Some(CharRef {
            name: "neqq;",
            characters: "\u{2269}",
        });
    }

    if first_char == 'g' && try_read("nsim;") {
        return Some(CharRef {
            name: "nsim;",
            characters: "\u{22e7}",
        });
    }

    if first_char == 'g' && try_read("rave;") {
        return Some(CharRef {
            name: "rave;",
            characters: "\u{60}",
        });
    }

    if first_char == 'g' && try_read("sime;") {
        return Some(CharRef {
            name: "sime;",
            characters: "\u{2a8e}",
        });
    }

    if first_char == 'g' && try_read("siml;") {
        return Some(CharRef {
            name: "siml;",
            characters: "\u{2a90}",
        });
    }

    if first_char == 'g' && try_read("tcir;") {
        return Some(CharRef {
            name: "tcir;",
            characters: "\u{2a7a}",
        });
    }

    if first_char == 'g' && try_read("tdot;") {
        return Some(CharRef {
            name: "tdot;",
            characters: "\u{22d7}",
        });
    }

    if first_char == 'h' && try_read("arrw;") {
        return Some(CharRef {
            name: "arrw;",
            characters: "\u{21ad}",
        });
    }

    if first_char == 'h' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{125}",
        });
    }

    if first_char == 'h' && try_read("oarr;") {
        return Some(CharRef {
            name: "oarr;",
            characters: "\u{21ff}",
        });
    }

    if first_char == 'i' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{ed}",
        });
    }

    if first_char == 'i' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{ee}",
        });
    }

    if first_char == 'i' && try_read("excl;") {
        return Some(CharRef {
            name: "excl;",
            characters: "\u{a1}",
        });
    }

    if first_char == 'i' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{ec}",
        });
    }

    if first_char == 'i' && try_read("iint;") {
        return Some(CharRef {
            name: "iint;",
            characters: "\u{222d}",
        });
    }

    if first_char == 'i' && try_read("iota;") {
        return Some(CharRef {
            name: "iota;",
            characters: "\u{2129}",
        });
    }

    if first_char == 'i' && try_read("jlig;") {
        return Some(CharRef {
            name: "jlig;",
            characters: "\u{133}",
        });
    }

    if first_char == 'i' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{12b}",
        });
    }

    if first_char == 'i' && try_read("mage;") {
        return Some(CharRef {
            name: "mage;",
            characters: "\u{2111}",
        });
    }

    if first_char == 'i' && try_read("math;") {
        return Some(CharRef {
            name: "math;",
            characters: "\u{131}",
        });
    }

    if first_char == 'i' && try_read("mped;") {
        return Some(CharRef {
            name: "mped;",
            characters: "\u{1b5}",
        });
    }

    if first_char == 'i' && try_read("nfin;") {
        return Some(CharRef {
            name: "nfin;",
            characters: "\u{221e}",
        });
    }

    if first_char == 'i' && try_read("ogon;") {
        return Some(CharRef {
            name: "ogon;",
            characters: "\u{12f}",
        });
    }

    if first_char == 'i' && try_read("prod;") {
        return Some(CharRef {
            name: "prod;",
            characters: "\u{2a3c}",
        });
    }

    if first_char == 'i' && try_read("quest") {
        return Some(CharRef {
            name: "quest",
            characters: "\u{bf}",
        });
    }

    if first_char == 'i' && try_read("sinE;") {
        return Some(CharRef {
            name: "sinE;",
            characters: "\u{22f9}",
        });
    }

    if first_char == 'i' && try_read("sins;") {
        return Some(CharRef {
            name: "sins;",
            characters: "\u{22f4}",
        });
    }

    if first_char == 'i' && try_read("sinv;") {
        return Some(CharRef {
            name: "sinv;",
            characters: "\u{2208}",
        });
    }

    if first_char == 'i' && try_read("ukcy;") {
        return Some(CharRef {
            name: "ukcy;",
            characters: "\u{456}",
        });
    }

    if first_char == 'j' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{135}",
        });
    }

    if first_char == 'j' && try_read("math;") {
        return Some(CharRef {
            name: "math;",
            characters: "\u{237}",
        });
    }

    if first_char == 'j' && try_read("ukcy;") {
        return Some(CharRef {
            name: "ukcy;",
            characters: "\u{454}",
        });
    }

    if first_char == 'k' && try_read("appa;") {
        return Some(CharRef {
            name: "appa;",
            characters: "\u{3ba}",
        });
    }

    if first_char == 'l' && try_read("Aarr;") {
        return Some(CharRef {
            name: "Aarr;",
            characters: "\u{21da}",
        });
    }

    if first_char == 'l' && try_read("Barr;") {
        return Some(CharRef {
            name: "Barr;",
            characters: "\u{290e}",
        });
    }

    if first_char == 'l' && try_read("angd;") {
        return Some(CharRef {
            name: "angd;",
            characters: "\u{2991}",
        });
    }

    if first_char == 'l' && try_read("aquo;") {
        return Some(CharRef {
            name: "aquo;",
            characters: "\u{ab}",
        });
    }

    if first_char == 'l' && try_read("arrb;") {
        return Some(CharRef {
            name: "arrb;",
            characters: "\u{21e4}",
        });
    }

    if first_char == 'l' && try_read("ates;") {
        return Some(CharRef {
            name: "ates;",
            characters: "\u{2aad}\u{fe00}",
        });
    }

    if first_char == 'l' && try_read("barr;") {
        return Some(CharRef {
            name: "barr;",
            characters: "\u{290c}",
        });
    }

    if first_char == 'l' && try_read("bbrk;") {
        return Some(CharRef {
            name: "bbrk;",
            characters: "\u{2772}",
        });
    }

    if first_char == 'l' && try_read("brke;") {
        return Some(CharRef {
            name: "brke;",
            characters: "\u{298b}",
        });
    }

    if first_char == 'l' && try_read("ceil;") {
        return Some(CharRef {
            name: "ceil;",
            characters: "\u{2308}",
        });
    }

    if first_char == 'l' && try_read("dquo;") {
        return Some(CharRef {
            name: "dquo;",
            characters: "\u{201c}",
        });
    }

    if first_char == 'l' && try_read("escc;") {
        return Some(CharRef {
            name: "escc;",
            characters: "\u{2aa8}",
        });
    }

    if first_char == 'l' && try_read("hard;") {
        return Some(CharRef {
            name: "hard;",
            characters: "\u{21bd}",
        });
    }

    if first_char == 'l' && try_read("haru;") {
        return Some(CharRef {
            name: "haru;",
            characters: "\u{21bc}",
        });
    }

    if first_char == 'l' && try_read("hblk;") {
        return Some(CharRef {
            name: "hblk;",
            characters: "\u{2584}",
        });
    }

    if first_char == 'l' && try_read("larr;") {
        return Some(CharRef {
            name: "larr;",
            characters: "\u{21c7}",
        });
    }

    if first_char == 'l' && try_read("ltri;") {
        return Some(CharRef {
            name: "ltri;",
            characters: "\u{25fa}",
        });
    }

    if first_char == 'l' && try_read("neqq;") {
        return Some(CharRef {
            name: "neqq;",
            characters: "\u{2268}",
        });
    }

    if first_char == 'l' && try_read("nsim;") {
        return Some(CharRef {
            name: "nsim;",
            characters: "\u{22e6}",
        });
    }

    if first_char == 'l' && try_read("oang;") {
        return Some(CharRef {
            name: "oang;",
            characters: "\u{27ec}",
        });
    }

    if first_char == 'l' && try_read("oarr;") {
        return Some(CharRef {
            name: "oarr;",
            characters: "\u{21fd}",
        });
    }

    if first_char == 'l' && try_read("obrk;") {
        return Some(CharRef {
            name: "obrk;",
            characters: "\u{27e6}",
        });
    }

    if first_char == 'l' && try_read("opar;") {
        return Some(CharRef {
            name: "opar;",
            characters: "\u{2985}",
        });
    }

    if first_char == 'l' && try_read("rarr;") {
        return Some(CharRef {
            name: "rarr;",
            characters: "\u{21c6}",
        });
    }

    if first_char == 'l' && try_read("rhar;") {
        return Some(CharRef {
            name: "rhar;",
            characters: "\u{21cb}",
        });
    }

    if first_char == 'l' && try_read("rtri;") {
        return Some(CharRef {
            name: "rtri;",
            characters: "\u{22bf}",
        });
    }

    if first_char == 'l' && try_read("sime;") {
        return Some(CharRef {
            name: "sime;",
            characters: "\u{2a8d}",
        });
    }

    if first_char == 'l' && try_read("simg;") {
        return Some(CharRef {
            name: "simg;",
            characters: "\u{2a8f}",
        });
    }

    if first_char == 'l' && try_read("squo;") {
        return Some(CharRef {
            name: "squo;",
            characters: "\u{2018}",
        });
    }

    if first_char == 'l' && try_read("tcir;") {
        return Some(CharRef {
            name: "tcir;",
            characters: "\u{2a79}",
        });
    }

    if first_char == 'l' && try_read("tdot;") {
        return Some(CharRef {
            name: "tdot;",
            characters: "\u{22d6}",
        });
    }

    if first_char == 'l' && try_read("trie;") {
        return Some(CharRef {
            name: "trie;",
            characters: "\u{22b4}",
        });
    }

    if first_char == 'l' && try_read("trif;") {
        return Some(CharRef {
            name: "trif;",
            characters: "\u{25c2}",
        });
    }

    if first_char == 'm' && try_read("DDot;") {
        return Some(CharRef {
            name: "DDot;",
            characters: "\u{223a}",
        });
    }

    if first_char == 'm' && try_read("dash;") {
        return Some(CharRef {
            name: "dash;",
            characters: "\u{2014}",
        });
    }

    if first_char == 'm' && try_read("icro;") {
        return Some(CharRef {
            name: "icro;",
            characters: "\u{b5}",
        });
    }

    if first_char == 'm' && try_read("iddot") {
        return Some(CharRef {
            name: "iddot",
            characters: "\u{b7}",
        });
    }

    if first_char == 'm' && try_read("inus;") {
        return Some(CharRef {
            name: "inus;",
            characters: "\u{2212}",
        });
    }

    if first_char == 'm' && try_read("umap;") {
        return Some(CharRef {
            name: "umap;",
            characters: "\u{22b8}",
        });
    }

    if first_char == 'n' && try_read("abla;") {
        return Some(CharRef {
            name: "abla;",
            characters: "\u{2207}",
        });
    }

    if first_char == 'n' && try_read("apid;") {
        return Some(CharRef {
            name: "apid;",
            characters: "\u{224b}\u{338}",
        });
    }

    if first_char == 'n' && try_read("apos;") {
        return Some(CharRef {
            name: "apos;",
            characters: "\u{149}",
        });
    }

    if first_char == 'n' && try_read("atur;") {
        return Some(CharRef {
            name: "atur;",
            characters: "\u{266e}",
        });
    }

    if first_char == 'n' && try_read("bump;") {
        return Some(CharRef {
            name: "bump;",
            characters: "\u{224e}\u{338}",
        });
    }

    if first_char == 'n' && try_read("cong;") {
        return Some(CharRef {
            name: "cong;",
            characters: "\u{2247}",
        });
    }

    if first_char == 'n' && try_read("dash;") {
        return Some(CharRef {
            name: "dash;",
            characters: "\u{2013}",
        });
    }

    if first_char == 'n' && try_read("eArr;") {
        return Some(CharRef {
            name: "eArr;",
            characters: "\u{21d7}",
        });
    }

    if first_char == 'n' && try_read("earr;") {
        return Some(CharRef {
            name: "earr;",
            characters: "\u{2197}",
        });
    }

    if first_char == 'n' && try_read("edot;") {
        return Some(CharRef {
            name: "edot;",
            characters: "\u{2250}\u{338}",
        });
    }

    if first_char == 'n' && try_read("esim;") {
        return Some(CharRef {
            name: "esim;",
            characters: "\u{2242}\u{338}",
        });
    }

    if first_char == 'n' && try_read("geqq;") {
        return Some(CharRef {
            name: "geqq;",
            characters: "\u{2267}\u{338}",
        });
    }

    if first_char == 'n' && try_read("gsim;") {
        return Some(CharRef {
            name: "gsim;",
            characters: "\u{2275}",
        });
    }

    if first_char == 'n' && try_read("hArr;") {
        return Some(CharRef {
            name: "hArr;",
            characters: "\u{21ce}",
        });
    }

    if first_char == 'n' && try_read("harr;") {
        return Some(CharRef {
            name: "harr;",
            characters: "\u{21ae}",
        });
    }

    if first_char == 'n' && try_read("hpar;") {
        return Some(CharRef {
            name: "hpar;",
            characters: "\u{2af2}",
        });
    }

    if first_char == 'n' && try_read("lArr;") {
        return Some(CharRef {
            name: "lArr;",
            characters: "\u{21cd}",
        });
    }

    if first_char == 'n' && try_read("larr;") {
        return Some(CharRef {
            name: "larr;",
            characters: "\u{219a}",
        });
    }

    if first_char == 'n' && try_read("leqq;") {
        return Some(CharRef {
            name: "leqq;",
            characters: "\u{2266}\u{338}",
        });
    }

    if first_char == 'n' && try_read("less;") {
        return Some(CharRef {
            name: "less;",
            characters: "\u{226e}",
        });
    }

    if first_char == 'n' && try_read("lsim;") {
        return Some(CharRef {
            name: "lsim;",
            characters: "\u{2274}",
        });
    }

    if first_char == 'n' && try_read("ltri;") {
        return Some(CharRef {
            name: "ltri;",
            characters: "\u{22ea}",
        });
    }

    if first_char == 'n' && try_read("otin;") {
        return Some(CharRef {
            name: "otin;",
            characters: "\u{2209}",
        });
    }

    if first_char == 'n' && try_read("otni;") {
        return Some(CharRef {
            name: "otni;",
            characters: "\u{220c}",
        });
    }

    if first_char == 'n' && try_read("part;") {
        return Some(CharRef {
            name: "part;",
            characters: "\u{2202}\u{338}",
        });
    }

    if first_char == 'n' && try_read("prec;") {
        return Some(CharRef {
            name: "prec;",
            characters: "\u{2280}",
        });
    }

    if first_char == 'n' && try_read("rArr;") {
        return Some(CharRef {
            name: "rArr;",
            characters: "\u{21cf}",
        });
    }

    if first_char == 'n' && try_read("rarr;") {
        return Some(CharRef {
            name: "rarr;",
            characters: "\u{219b}",
        });
    }

    if first_char == 'n' && try_read("rtri;") {
        return Some(CharRef {
            name: "rtri;",
            characters: "\u{22eb}",
        });
    }

    if first_char == 'n' && try_read("sime;") {
        return Some(CharRef {
            name: "sime;",
            characters: "\u{2244}",
        });
    }

    if first_char == 'n' && try_read("smid;") {
        return Some(CharRef {
            name: "smid;",
            characters: "\u{2224}",
        });
    }

    if first_char == 'n' && try_read("spar;") {
        return Some(CharRef {
            name: "spar;",
            characters: "\u{2226}",
        });
    }

    if first_char == 'n' && try_read("subE;") {
        return Some(CharRef {
            name: "subE;",
            characters: "\u{2ac5}\u{338}",
        });
    }

    if first_char == 'n' && try_read("sube;") {
        return Some(CharRef {
            name: "sube;",
            characters: "\u{2288}",
        });
    }

    if first_char == 'n' && try_read("succ;") {
        return Some(CharRef {
            name: "succ;",
            characters: "\u{2281}",
        });
    }

    if first_char == 'n' && try_read("supE;") {
        return Some(CharRef {
            name: "supE;",
            characters: "\u{2ac6}\u{338}",
        });
    }

    if first_char == 'n' && try_read("supe;") {
        return Some(CharRef {
            name: "supe;",
            characters: "\u{2289}",
        });
    }

    if first_char == 'n' && try_read("tilde") {
        return Some(CharRef {
            name: "tilde",
            characters: "\u{f1}",
        });
    }

    if first_char == 'n' && try_read("umsp;") {
        return Some(CharRef {
            name: "umsp;",
            characters: "\u{2007}",
        });
    }

    if first_char == 'n' && try_read("vsim;") {
        return Some(CharRef {
            name: "vsim;",
            characters: "\u{223c}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("wArr;") {
        return Some(CharRef {
            name: "wArr;",
            characters: "\u{21d6}",
        });
    }

    if first_char == 'n' && try_read("warr;") {
        return Some(CharRef {
            name: "warr;",
            characters: "\u{2196}",
        });
    }

    if first_char == 'o' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{f3}",
        });
    }

    if first_char == 'o' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{f4}",
        });
    }

    if first_char == 'o' && try_read("dash;") {
        return Some(CharRef {
            name: "dash;",
            characters: "\u{229d}",
        });
    }

    if first_char == 'o' && try_read("elig;") {
        return Some(CharRef {
            name: "elig;",
            characters: "\u{153}",
        });
    }

    if first_char == 'o' && try_read("fcir;") {
        return Some(CharRef {
            name: "fcir;",
            characters: "\u{29bf}",
        });
    }

    if first_char == 'o' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{f2}",
        });
    }

    if first_char == 'o' && try_read("hbar;") {
        return Some(CharRef {
            name: "hbar;",
            characters: "\u{29b5}",
        });
    }

    if first_char == 'o' && try_read("larr;") {
        return Some(CharRef {
            name: "larr;",
            characters: "\u{21ba}",
        });
    }

    if first_char == 'o' && try_read("lcir;") {
        return Some(CharRef {
            name: "lcir;",
            characters: "\u{29be}",
        });
    }

    if first_char == 'o' && try_read("line;") {
        return Some(CharRef {
            name: "line;",
            characters: "\u{203e}",
        });
    }

    if first_char == 'o' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{14d}",
        });
    }

    if first_char == 'o' && try_read("mega;") {
        return Some(CharRef {
            name: "mega;",
            characters: "\u{3c9}",
        });
    }

    if first_char == 'o' && try_read("perp;") {
        return Some(CharRef {
            name: "perp;",
            characters: "\u{29b9}",
        });
    }

    if first_char == 'o' && try_read("plus;") {
        return Some(CharRef {
            name: "plus;",
            characters: "\u{2295}",
        });
    }

    if first_char == 'o' && try_read("rarr;") {
        return Some(CharRef {
            name: "rarr;",
            characters: "\u{21bb}",
        });
    }

    if first_char == 'o' && try_read("rder;") {
        return Some(CharRef {
            name: "rder;",
            characters: "\u{2134}",
        });
    }

    if first_char == 'o' && try_read("slash") {
        return Some(CharRef {
            name: "slash",
            characters: "\u{f8}",
        });
    }

    if first_char == 'o' && try_read("tilde") {
        return Some(CharRef {
            name: "tilde",
            characters: "\u{f5}",
        });
    }

    if first_char == 'o' && try_read("vbar;") {
        return Some(CharRef {
            name: "vbar;",
            characters: "\u{233d}",
        });
    }

    if first_char == 'p' && try_read("arsl;") {
        return Some(CharRef {
            name: "arsl;",
            characters: "\u{2afd}",
        });
    }

    if first_char == 'p' && try_read("hone;") {
        return Some(CharRef {
            name: "hone;",
            characters: "\u{260e}",
        });
    }

    if first_char == 'p' && try_read("lusb;") {
        return Some(CharRef {
            name: "lusb;",
            characters: "\u{229e}",
        });
    }

    if first_char == 'p' && try_read("luse;") {
        return Some(CharRef {
            name: "luse;",
            characters: "\u{2a72}",
        });
    }

    if first_char == 'p' && try_read("lusmn") {
        return Some(CharRef {
            name: "lusmn",
            characters: "\u{b1}",
        });
    }

    if first_char == 'p' && try_read("ound;") {
        return Some(CharRef {
            name: "ound;",
            characters: "\u{a3}",
        });
    }

    if first_char == 'p' && try_read("rcue;") {
        return Some(CharRef {
            name: "rcue;",
            characters: "\u{227c}",
        });
    }

    if first_char == 'p' && try_read("rime;") {
        return Some(CharRef {
            name: "rime;",
            characters: "\u{2032}",
        });
    }

    if first_char == 'p' && try_read("rnap;") {
        return Some(CharRef {
            name: "rnap;",
            characters: "\u{2ab9}",
        });
    }

    if first_char == 'p' && try_read("rsim;") {
        return Some(CharRef {
            name: "rsim;",
            characters: "\u{227e}",
        });
    }

    if first_char == 'q' && try_read("uest;") {
        return Some(CharRef {
            name: "uest;",
            characters: "\u{3f}",
        });
    }

    if first_char == 'r' && try_read("Aarr;") {
        return Some(CharRef {
            name: "Aarr;",
            characters: "\u{21db}",
        });
    }

    if first_char == 'r' && try_read("Barr;") {
        return Some(CharRef {
            name: "Barr;",
            characters: "\u{290f}",
        });
    }

    if first_char == 'r' && try_read("adic;") {
        return Some(CharRef {
            name: "adic;",
            characters: "\u{221a}",
        });
    }

    if first_char == 'r' && try_read("angd;") {
        return Some(CharRef {
            name: "angd;",
            characters: "\u{2992}",
        });
    }

    if first_char == 'r' && try_read("ange;") {
        return Some(CharRef {
            name: "ange;",
            characters: "\u{29a5}",
        });
    }

    if first_char == 'r' && try_read("aquo;") {
        return Some(CharRef {
            name: "aquo;",
            characters: "\u{bb}",
        });
    }

    if first_char == 'r' && try_read("arrb;") {
        return Some(CharRef {
            name: "arrb;",
            characters: "\u{21e5}",
        });
    }

    if first_char == 'r' && try_read("arrc;") {
        return Some(CharRef {
            name: "arrc;",
            characters: "\u{2933}",
        });
    }

    if first_char == 'r' && try_read("arrw;") {
        return Some(CharRef {
            name: "arrw;",
            characters: "\u{219d}",
        });
    }

    if first_char == 'r' && try_read("atio;") {
        return Some(CharRef {
            name: "atio;",
            characters: "\u{2236}",
        });
    }

    if first_char == 'r' && try_read("barr;") {
        return Some(CharRef {
            name: "barr;",
            characters: "\u{290d}",
        });
    }

    if first_char == 'r' && try_read("bbrk;") {
        return Some(CharRef {
            name: "bbrk;",
            characters: "\u{2773}",
        });
    }

    if first_char == 'r' && try_read("brke;") {
        return Some(CharRef {
            name: "brke;",
            characters: "\u{298c}",
        });
    }

    if first_char == 'r' && try_read("ceil;") {
        return Some(CharRef {
            name: "ceil;",
            characters: "\u{2309}",
        });
    }

    if first_char == 'r' && try_read("dquo;") {
        return Some(CharRef {
            name: "dquo;",
            characters: "\u{201d}",
        });
    }

    if first_char == 'r' && try_read("eals;") {
        return Some(CharRef {
            name: "eals;",
            characters: "\u{211d}",
        });
    }

    if first_char == 'r' && try_read("hard;") {
        return Some(CharRef {
            name: "hard;",
            characters: "\u{21c1}",
        });
    }

    if first_char == 'r' && try_read("haru;") {
        return Some(CharRef {
            name: "haru;",
            characters: "\u{21c0}",
        });
    }

    if first_char == 'r' && try_read("larr;") {
        return Some(CharRef {
            name: "larr;",
            characters: "\u{21c4}",
        });
    }

    if first_char == 'r' && try_read("lhar;") {
        return Some(CharRef {
            name: "lhar;",
            characters: "\u{21cc}",
        });
    }

    if first_char == 'r' && try_read("nmid;") {
        return Some(CharRef {
            name: "nmid;",
            characters: "\u{2aee}",
        });
    }

    if first_char == 'r' && try_read("oang;") {
        return Some(CharRef {
            name: "oang;",
            characters: "\u{27ed}",
        });
    }

    if first_char == 'r' && try_read("oarr;") {
        return Some(CharRef {
            name: "oarr;",
            characters: "\u{21fe}",
        });
    }

    if first_char == 'r' && try_read("obrk;") {
        return Some(CharRef {
            name: "obrk;",
            characters: "\u{27e7}",
        });
    }

    if first_char == 'r' && try_read("opar;") {
        return Some(CharRef {
            name: "opar;",
            characters: "\u{2986}",
        });
    }

    if first_char == 'r' && try_read("rarr;") {
        return Some(CharRef {
            name: "rarr;",
            characters: "\u{21c9}",
        });
    }

    if first_char == 'r' && try_read("squo;") {
        return Some(CharRef {
            name: "squo;",
            characters: "\u{2019}",
        });
    }

    if first_char == 'r' && try_read("trie;") {
        return Some(CharRef {
            name: "trie;",
            characters: "\u{22b5}",
        });
    }

    if first_char == 'r' && try_read("trif;") {
        return Some(CharRef {
            name: "trif;",
            characters: "\u{25b8}",
        });
    }

    if first_char == 's' && try_read("bquo;") {
        return Some(CharRef {
            name: "bquo;",
            characters: "\u{201a}",
        });
    }

    if first_char == 's' && try_read("ccue;") {
        return Some(CharRef {
            name: "ccue;",
            characters: "\u{227d}",
        });
    }

    if first_char == 's' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{15d}",
        });
    }

    if first_char == 's' && try_read("cnap;") {
        return Some(CharRef {
            name: "cnap;",
            characters: "\u{2aba}",
        });
    }

    if first_char == 's' && try_read("csim;") {
        return Some(CharRef {
            name: "csim;",
            characters: "\u{227f}",
        });
    }

    if first_char == 's' && try_read("dotb;") {
        return Some(CharRef {
            name: "dotb;",
            characters: "\u{22a1}",
        });
    }

    if first_char == 's' && try_read("dote;") {
        return Some(CharRef {
            name: "dote;",
            characters: "\u{2a66}",
        });
    }

    if first_char == 's' && try_read("eArr;") {
        return Some(CharRef {
            name: "eArr;",
            characters: "\u{21d8}",
        });
    }

    if first_char == 's' && try_read("earr;") {
        return Some(CharRef {
            name: "earr;",
            characters: "\u{2198}",
        });
    }

    if first_char == 's' && try_read("etmn;") {
        return Some(CharRef {
            name: "etmn;",
            characters: "\u{2216}",
        });
    }

    if first_char == 's' && try_read("harp;") {
        return Some(CharRef {
            name: "harp;",
            characters: "\u{266f}",
        });
    }

    if first_char == 's' && try_read("igma;") {
        return Some(CharRef {
            name: "igma;",
            characters: "\u{3c3}",
        });
    }

    if first_char == 's' && try_read("imeq;") {
        return Some(CharRef {
            name: "imeq;",
            characters: "\u{2243}",
        });
    }

    if first_char == 's' && try_read("imgE;") {
        return Some(CharRef {
            name: "imgE;",
            characters: "\u{2aa0}",
        });
    }

    if first_char == 's' && try_read("imlE;") {
        return Some(CharRef {
            name: "imlE;",
            characters: "\u{2a9f}",
        });
    }

    if first_char == 's' && try_read("imne;") {
        return Some(CharRef {
            name: "imne;",
            characters: "\u{2246}",
        });
    }

    if first_char == 's' && try_read("larr;") {
        return Some(CharRef {
            name: "larr;",
            characters: "\u{2190}",
        });
    }

    if first_char == 's' && try_read("mile;") {
        return Some(CharRef {
            name: "mile;",
            characters: "\u{2323}",
        });
    }

    if first_char == 's' && try_read("mtes;") {
        return Some(CharRef {
            name: "mtes;",
            characters: "\u{2aac}\u{fe00}",
        });
    }

    if first_char == 's' && try_read("qcap;") {
        return Some(CharRef {
            name: "qcap;",
            characters: "\u{2293}",
        });
    }

    if first_char == 's' && try_read("qcup;") {
        return Some(CharRef {
            name: "qcup;",
            characters: "\u{2294}",
        });
    }

    if first_char == 's' && try_read("qsub;") {
        return Some(CharRef {
            name: "qsub;",
            characters: "\u{228f}",
        });
    }

    if first_char == 's' && try_read("qsup;") {
        return Some(CharRef {
            name: "qsup;",
            characters: "\u{2290}",
        });
    }

    if first_char == 's' && try_read("rarr;") {
        return Some(CharRef {
            name: "rarr;",
            characters: "\u{2192}",
        });
    }

    if first_char == 's' && try_read("tarf;") {
        return Some(CharRef {
            name: "tarf;",
            characters: "\u{2605}",
        });
    }

    if first_char == 's' && try_read("trns;") {
        return Some(CharRef {
            name: "trns;",
            characters: "\u{af}",
        });
    }

    if first_char == 's' && try_read("ubnE;") {
        return Some(CharRef {
            name: "ubnE;",
            characters: "\u{2acb}",
        });
    }

    if first_char == 's' && try_read("ubne;") {
        return Some(CharRef {
            name: "ubne;",
            characters: "\u{228a}",
        });
    }

    if first_char == 's' && try_read("upnE;") {
        return Some(CharRef {
            name: "upnE;",
            characters: "\u{2acc}",
        });
    }

    if first_char == 's' && try_read("upne;") {
        return Some(CharRef {
            name: "upne;",
            characters: "\u{228b}",
        });
    }

    if first_char == 's' && try_read("wArr;") {
        return Some(CharRef {
            name: "wArr;",
            characters: "\u{21d9}",
        });
    }

    if first_char == 's' && try_read("warr;") {
        return Some(CharRef {
            name: "warr;",
            characters: "\u{2199}",
        });
    }

    if first_char == 's' && try_read("zlig;") {
        return Some(CharRef {
            name: "zlig;",
            characters: "\u{df}",
        });
    }

    if first_char == 't' && try_read("heta;") {
        return Some(CharRef {
            name: "heta;",
            characters: "\u{3b8}",
        });
    }

    if first_char == 't' && try_read("hkap;") {
        return Some(CharRef {
            name: "hkap;",
            characters: "\u{2248}",
        });
    }

    if first_char == 't' && try_read("horn;") {
        return Some(CharRef {
            name: "horn;",
            characters: "\u{fe}",
        });
    }

    if first_char == 't' && try_read("ilde;") {
        return Some(CharRef {
            name: "ilde;",
            characters: "\u{2dc}",
        });
    }

    if first_char == 't' && try_read("imes;") {
        return Some(CharRef {
            name: "imes;",
            characters: "\u{d7}",
        });
    }

    if first_char == 't' && try_read("rade;") {
        return Some(CharRef {
            name: "rade;",
            characters: "\u{2122}",
        });
    }

    if first_char == 't' && try_read("risb;") {
        return Some(CharRef {
            name: "risb;",
            characters: "\u{29cd}",
        });
    }

    if first_char == 't' && try_read("shcy;") {
        return Some(CharRef {
            name: "shcy;",
            characters: "\u{45b}",
        });
    }

    if first_char == 't' && try_read("wixt;") {
        return Some(CharRef {
            name: "wixt;",
            characters: "\u{226c}",
        });
    }

    if first_char == 'u' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{fa}",
        });
    }

    if first_char == 'u' && try_read("brcy;") {
        return Some(CharRef {
            name: "brcy;",
            characters: "\u{45e}",
        });
    }

    if first_char == 'u' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{fb}",
        });
    }

    if first_char == 'u' && try_read("darr;") {
        return Some(CharRef {
            name: "darr;",
            characters: "\u{21c5}",
        });
    }

    if first_char == 'u' && try_read("dhar;") {
        return Some(CharRef {
            name: "dhar;",
            characters: "\u{296e}",
        });
    }

    if first_char == 'u' && try_read("grave") {
        return Some(CharRef {
            name: "grave",
            characters: "\u{f9}",
        });
    }

    if first_char == 'u' && try_read("harl;") {
        return Some(CharRef {
            name: "harl;",
            characters: "\u{21bf}",
        });
    }

    if first_char == 'u' && try_read("harr;") {
        return Some(CharRef {
            name: "harr;",
            characters: "\u{21be}",
        });
    }

    if first_char == 'u' && try_read("hblk;") {
        return Some(CharRef {
            name: "hblk;",
            characters: "\u{2580}",
        });
    }

    if first_char == 'u' && try_read("ltri;") {
        return Some(CharRef {
            name: "ltri;",
            characters: "\u{25f8}",
        });
    }

    if first_char == 'u' && try_read("macr;") {
        return Some(CharRef {
            name: "macr;",
            characters: "\u{16b}",
        });
    }

    if first_char == 'u' && try_read("ogon;") {
        return Some(CharRef {
            name: "ogon;",
            characters: "\u{173}",
        });
    }

    if first_char == 'u' && try_read("plus;") {
        return Some(CharRef {
            name: "plus;",
            characters: "\u{228e}",
        });
    }

    if first_char == 'u' && try_read("psih;") {
        return Some(CharRef {
            name: "psih;",
            characters: "\u{3d2}",
        });
    }

    if first_char == 'u' && try_read("ring;") {
        return Some(CharRef {
            name: "ring;",
            characters: "\u{16f}",
        });
    }

    if first_char == 'u' && try_read("rtri;") {
        return Some(CharRef {
            name: "rtri;",
            characters: "\u{25f9}",
        });
    }

    if first_char == 'u' && try_read("tdot;") {
        return Some(CharRef {
            name: "tdot;",
            characters: "\u{22f0}",
        });
    }

    if first_char == 'u' && try_read("trif;") {
        return Some(CharRef {
            name: "trif;",
            characters: "\u{25b4}",
        });
    }

    if first_char == 'u' && try_read("uarr;") {
        return Some(CharRef {
            name: "uarr;",
            characters: "\u{21c8}",
        });
    }

    if first_char == 'v' && try_read("Barv;") {
        return Some(CharRef {
            name: "Barv;",
            characters: "\u{2ae9}",
        });
    }

    if first_char == 'v' && try_read("Dash;") {
        return Some(CharRef {
            name: "Dash;",
            characters: "\u{22a8}",
        });
    }

    if first_char == 'v' && try_read("arpi;") {
        return Some(CharRef {
            name: "arpi;",
            characters: "\u{3d6}",
        });
    }

    if first_char == 'v' && try_read("dash;") {
        return Some(CharRef {
            name: "dash;",
            characters: "\u{22a2}",
        });
    }

    if first_char == 'v' && try_read("eeeq;") {
        return Some(CharRef {
            name: "eeeq;",
            characters: "\u{225a}",
        });
    }

    if first_char == 'v' && try_read("ltri;") {
        return Some(CharRef {
            name: "ltri;",
            characters: "\u{22b2}",
        });
    }

    if first_char == 'v' && try_read("nsub;") {
        return Some(CharRef {
            name: "nsub;",
            characters: "\u{2282}\u{20d2}",
        });
    }

    if first_char == 'v' && try_read("nsup;") {
        return Some(CharRef {
            name: "nsup;",
            characters: "\u{2283}\u{20d2}",
        });
    }

    if first_char == 'v' && try_read("prop;") {
        return Some(CharRef {
            name: "prop;",
            characters: "\u{221d}",
        });
    }

    if first_char == 'v' && try_read("rtri;") {
        return Some(CharRef {
            name: "rtri;",
            characters: "\u{22b3}",
        });
    }

    if first_char == 'w' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{175}",
        });
    }

    if first_char == 'w' && try_read("edge;") {
        return Some(CharRef {
            name: "edge;",
            characters: "\u{2227}",
        });
    }

    if first_char == 'x' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{25ef}",
        });
    }

    if first_char == 'x' && try_read("dtri;") {
        return Some(CharRef {
            name: "dtri;",
            characters: "\u{25bd}",
        });
    }

    if first_char == 'x' && try_read("hArr;") {
        return Some(CharRef {
            name: "hArr;",
            characters: "\u{27fa}",
        });
    }

    if first_char == 'x' && try_read("harr;") {
        return Some(CharRef {
            name: "harr;",
            characters: "\u{27f7}",
        });
    }

    if first_char == 'x' && try_read("lArr;") {
        return Some(CharRef {
            name: "lArr;",
            characters: "\u{27f8}",
        });
    }

    if first_char == 'x' && try_read("larr;") {
        return Some(CharRef {
            name: "larr;",
            characters: "\u{27f5}",
        });
    }

    if first_char == 'x' && try_read("odot;") {
        return Some(CharRef {
            name: "odot;",
            characters: "\u{2a00}",
        });
    }

    if first_char == 'x' && try_read("rArr;") {
        return Some(CharRef {
            name: "rArr;",
            characters: "\u{27f9}",
        });
    }

    if first_char == 'x' && try_read("rarr;") {
        return Some(CharRef {
            name: "rarr;",
            characters: "\u{27f6}",
        });
    }

    if first_char == 'x' && try_read("utri;") {
        return Some(CharRef {
            name: "utri;",
            characters: "\u{25b3}",
        });
    }

    if first_char == 'y' && try_read("acute") {
        return Some(CharRef {
            name: "acute",
            characters: "\u{fd}",
        });
    }

    if first_char == 'y' && try_read("circ;") {
        return Some(CharRef {
            name: "circ;",
            characters: "\u{177}",
        });
    }

    if first_char == 'A' && try_read("Elig") {
        return Some(CharRef {
            name: "Elig",
            characters: "\u{c6}",
        });
    }

    if first_char == 'A' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{c2}",
        });
    }

    if first_char == 'A' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d538}",
        });
    }

    if first_char == 'A' && try_read("ring") {
        return Some(CharRef {
            name: "ring",
            characters: "\u{c5}",
        });
    }

    if first_char == 'A' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d49c}",
        });
    }

    if first_char == 'A' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{c4}",
        });
    }

    if first_char == 'B' && try_read("arv;") {
        return Some(CharRef {
            name: "arv;",
            characters: "\u{2ae7}",
        });
    }

    if first_char == 'B' && try_read("eta;") {
        return Some(CharRef {
            name: "eta;",
            characters: "\u{392}",
        });
    }

    if first_char == 'B' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d539}",
        });
    }

    if first_char == 'B' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{212c}",
        });
    }

    if first_char == 'C' && try_read("Hcy;") {
        return Some(CharRef {
            name: "Hcy;",
            characters: "\u{427}",
        });
    }

    if first_char == 'C' && try_read("OPY;") {
        return Some(CharRef {
            name: "OPY;",
            characters: "\u{a9}",
        });
    }

    if first_char == 'C' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{10a}",
        });
    }

    if first_char == 'C' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{2102}",
        });
    }

    if first_char == 'C' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d49e}",
        });
    }

    if first_char == 'D' && try_read("Jcy;") {
        return Some(CharRef {
            name: "Jcy;",
            characters: "\u{402}",
        });
    }

    if first_char == 'D' && try_read("Scy;") {
        return Some(CharRef {
            name: "Scy;",
            characters: "\u{405}",
        });
    }

    if first_char == 'D' && try_read("Zcy;") {
        return Some(CharRef {
            name: "Zcy;",
            characters: "\u{40f}",
        });
    }

    if first_char == 'D' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{21a1}",
        });
    }

    if first_char == 'D' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d53b}",
        });
    }

    if first_char == 'D' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d49f}",
        });
    }

    if first_char == 'E' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{ca}",
        });
    }

    if first_char == 'E' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{116}",
        });
    }

    if first_char == 'E' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d53c}",
        });
    }

    if first_char == 'E' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{2130}",
        });
    }

    if first_char == 'E' && try_read("sim;") {
        return Some(CharRef {
            name: "sim;",
            characters: "\u{2a73}",
        });
    }

    if first_char == 'E' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{cb}",
        });
    }

    if first_char == 'F' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d53d}",
        });
    }

    if first_char == 'F' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{2131}",
        });
    }

    if first_char == 'G' && try_read("Jcy;") {
        return Some(CharRef {
            name: "Jcy;",
            characters: "\u{403}",
        });
    }

    if first_char == 'G' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{120}",
        });
    }

    if first_char == 'G' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d53e}",
        });
    }

    if first_char == 'G' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4a2}",
        });
    }

    if first_char == 'H' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{210d}",
        });
    }

    if first_char == 'H' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{210b}",
        });
    }

    if first_char == 'I' && try_read("Ecy;") {
        return Some(CharRef {
            name: "Ecy;",
            characters: "\u{415}",
        });
    }

    if first_char == 'I' && try_read("Ocy;") {
        return Some(CharRef {
            name: "Ocy;",
            characters: "\u{401}",
        });
    }

    if first_char == 'I' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{ce}",
        });
    }

    if first_char == 'I' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{130}",
        });
    }

    if first_char == 'I' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d540}",
        });
    }

    if first_char == 'I' && try_read("ota;") {
        return Some(CharRef {
            name: "ota;",
            characters: "\u{399}",
        });
    }

    if first_char == 'I' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{2110}",
        });
    }

    if first_char == 'I' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{cf}",
        });
    }

    if first_char == 'J' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d541}",
        });
    }

    if first_char == 'J' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4a5}",
        });
    }

    if first_char == 'K' && try_read("Hcy;") {
        return Some(CharRef {
            name: "Hcy;",
            characters: "\u{425}",
        });
    }

    if first_char == 'K' && try_read("Jcy;") {
        return Some(CharRef {
            name: "Jcy;",
            characters: "\u{40c}",
        });
    }

    if first_char == 'K' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d542}",
        });
    }

    if first_char == 'K' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4a6}",
        });
    }

    if first_char == 'L' && try_read("Jcy;") {
        return Some(CharRef {
            name: "Jcy;",
            characters: "\u{409}",
        });
    }

    if first_char == 'L' && try_read("ang;") {
        return Some(CharRef {
            name: "ang;",
            characters: "\u{27ea}",
        });
    }

    if first_char == 'L' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{219e}",
        });
    }

    if first_char == 'L' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d543}",
        });
    }

    if first_char == 'L' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{2112}",
        });
    }

    if first_char == 'M' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d544}",
        });
    }

    if first_char == 'M' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{2133}",
        });
    }

    if first_char == 'N' && try_read("Jcy;") {
        return Some(CharRef {
            name: "Jcy;",
            characters: "\u{40a}",
        });
    }

    if first_char == 'N' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{2115}",
        });
    }

    if first_char == 'N' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4a9}",
        });
    }

    if first_char == 'O' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{d4}",
        });
    }

    if first_char == 'O' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d546}",
        });
    }

    if first_char == 'O' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4aa}",
        });
    }

    if first_char == 'O' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{d6}",
        });
    }

    if first_char == 'P' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{2119}",
        });
    }

    if first_char == 'P' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4ab}",
        });
    }

    if first_char == 'Q' && try_read("UOT;") {
        return Some(CharRef {
            name: "UOT;",
            characters: "\u{22}",
        });
    }

    if first_char == 'Q' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{211a}",
        });
    }

    if first_char == 'Q' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4ac}",
        });
    }

    if first_char == 'R' && try_read("ang;") {
        return Some(CharRef {
            name: "ang;",
            characters: "\u{27eb}",
        });
    }

    if first_char == 'R' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{21a0}",
        });
    }

    if first_char == 'R' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{211d}",
        });
    }

    if first_char == 'R' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{211b}",
        });
    }

    if first_char == 'S' && try_read("Hcy;") {
        return Some(CharRef {
            name: "Hcy;",
            characters: "\u{428}",
        });
    }

    if first_char == 'S' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d54a}",
        });
    }

    if first_char == 'S' && try_read("qrt;") {
        return Some(CharRef {
            name: "qrt;",
            characters: "\u{221a}",
        });
    }

    if first_char == 'S' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4ae}",
        });
    }

    if first_char == 'S' && try_read("tar;") {
        return Some(CharRef {
            name: "tar;",
            characters: "\u{22c6}",
        });
    }

    if first_char == 'T' && try_read("HORN") {
        return Some(CharRef {
            name: "HORN",
            characters: "\u{de}",
        });
    }

    if first_char == 'T' && try_read("Scy;") {
        return Some(CharRef {
            name: "Scy;",
            characters: "\u{426}",
        });
    }

    if first_char == 'T' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d54b}",
        });
    }

    if first_char == 'T' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4af}",
        });
    }

    if first_char == 'U' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{219f}",
        });
    }

    if first_char == 'U' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{db}",
        });
    }

    if first_char == 'U' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d54c}",
        });
    }

    if first_char == 'U' && try_read("psi;") {
        return Some(CharRef {
            name: "psi;",
            characters: "\u{3d2}",
        });
    }

    if first_char == 'U' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b0}",
        });
    }

    if first_char == 'U' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{dc}",
        });
    }

    if first_char == 'V' && try_read("bar;") {
        return Some(CharRef {
            name: "bar;",
            characters: "\u{2aeb}",
        });
    }

    if first_char == 'V' && try_read("ert;") {
        return Some(CharRef {
            name: "ert;",
            characters: "\u{2016}",
        });
    }

    if first_char == 'V' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d54d}",
        });
    }

    if first_char == 'V' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b1}",
        });
    }

    if first_char == 'W' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d54e}",
        });
    }

    if first_char == 'W' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b2}",
        });
    }

    if first_char == 'X' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d54f}",
        });
    }

    if first_char == 'X' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b3}",
        });
    }

    if first_char == 'Y' && try_read("Acy;") {
        return Some(CharRef {
            name: "Acy;",
            characters: "\u{42f}",
        });
    }

    if first_char == 'Y' && try_read("Icy;") {
        return Some(CharRef {
            name: "Icy;",
            characters: "\u{407}",
        });
    }

    if first_char == 'Y' && try_read("Ucy;") {
        return Some(CharRef {
            name: "Ucy;",
            characters: "\u{42e}",
        });
    }

    if first_char == 'Y' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d550}",
        });
    }

    if first_char == 'Y' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b4}",
        });
    }

    if first_char == 'Y' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{178}",
        });
    }

    if first_char == 'Z' && try_read("Hcy;") {
        return Some(CharRef {
            name: "Hcy;",
            characters: "\u{416}",
        });
    }

    if first_char == 'Z' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{17b}",
        });
    }

    if first_char == 'Z' && try_read("eta;") {
        return Some(CharRef {
            name: "eta;",
            characters: "\u{396}",
        });
    }

    if first_char == 'Z' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{2124}",
        });
    }

    if first_char == 'Z' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b5}",
        });
    }

    if first_char == 'a' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{e2}",
        });
    }

    if first_char == 'a' && try_read("cute") {
        return Some(CharRef {
            name: "cute",
            characters: "\u{b4}",
        });
    }

    if first_char == 'a' && try_read("elig") {
        return Some(CharRef {
            name: "elig",
            characters: "\u{e6}",
        });
    }

    if first_char == 'a' && try_read("ndd;") {
        return Some(CharRef {
            name: "ndd;",
            characters: "\u{2a5c}",
        });
    }

    if first_char == 'a' && try_read("ndv;") {
        return Some(CharRef {
            name: "ndv;",
            characters: "\u{2a5a}",
        });
    }

    if first_char == 'a' && try_read("nge;") {
        return Some(CharRef {
            name: "nge;",
            characters: "\u{29a4}",
        });
    }

    if first_char == 'a' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d552}",
        });
    }

    if first_char == 'a' && try_read("pid;") {
        return Some(CharRef {
            name: "pid;",
            characters: "\u{224b}",
        });
    }

    if first_char == 'a' && try_read("pos;") {
        return Some(CharRef {
            name: "pos;",
            characters: "\u{27}",
        });
    }

    if first_char == 'a' && try_read("ring") {
        return Some(CharRef {
            name: "ring",
            characters: "\u{e5}",
        });
    }

    if first_char == 'a' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b6}",
        });
    }

    if first_char == 'a' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{e4}",
        });
    }

    if first_char == 'b' && try_read("Not;") {
        return Some(CharRef {
            name: "Not;",
            characters: "\u{2aed}",
        });
    }

    if first_char == 'b' && try_read("brk;") {
        return Some(CharRef {
            name: "brk;",
            characters: "\u{23b5}",
        });
    }

    if first_char == 'b' && try_read("eta;") {
        return Some(CharRef {
            name: "eta;",
            characters: "\u{3b2}",
        });
    }

    if first_char == 'b' && try_read("eth;") {
        return Some(CharRef {
            name: "eth;",
            characters: "\u{2136}",
        });
    }

    if first_char == 'b' && try_read("not;") {
        return Some(CharRef {
            name: "not;",
            characters: "\u{2310}",
        });
    }

    if first_char == 'b' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d553}",
        });
    }

    if first_char == 'b' && try_read("oxH;") {
        return Some(CharRef {
            name: "oxH;",
            characters: "\u{2550}",
        });
    }

    if first_char == 'b' && try_read("oxV;") {
        return Some(CharRef {
            name: "oxV;",
            characters: "\u{2551}",
        });
    }

    if first_char == 'b' && try_read("oxh;") {
        return Some(CharRef {
            name: "oxh;",
            characters: "\u{2500}",
        });
    }

    if first_char == 'b' && try_read("oxv;") {
        return Some(CharRef {
            name: "oxv;",
            characters: "\u{2502}",
        });
    }

    if first_char == 'b' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b7}",
        });
    }

    if first_char == 'b' && try_read("sim;") {
        return Some(CharRef {
            name: "sim;",
            characters: "\u{223d}",
        });
    }

    if first_char == 'b' && try_read("sol;") {
        return Some(CharRef {
            name: "sol;",
            characters: "\u{5c}",
        });
    }

    if first_char == 'b' && try_read("ull;") {
        return Some(CharRef {
            name: "ull;",
            characters: "\u{2022}",
        });
    }

    if first_char == 'b' && try_read("ump;") {
        return Some(CharRef {
            name: "ump;",
            characters: "\u{224e}",
        });
    }

    if first_char == 'c' && try_read("aps;") {
        return Some(CharRef {
            name: "aps;",
            characters: "\u{2229}\u{fe00}",
        });
    }

    if first_char == 'c' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{10b}",
        });
    }

    if first_char == 'c' && try_read("edil") {
        return Some(CharRef {
            name: "edil",
            characters: "\u{b8}",
        });
    }

    if first_char == 'c' && try_read("ent;") {
        return Some(CharRef {
            name: "ent;",
            characters: "\u{a2}",
        });
    }

    if first_char == 'c' && try_read("hcy;") {
        return Some(CharRef {
            name: "hcy;",
            characters: "\u{447}",
        });
    }

    if first_char == 'c' && try_read("irE;") {
        return Some(CharRef {
            name: "irE;",
            characters: "\u{29c3}",
        });
    }

    if first_char == 'c' && try_read("irc;") {
        return Some(CharRef {
            name: "irc;",
            characters: "\u{2c6}",
        });
    }

    if first_char == 'c' && try_read("ire;") {
        return Some(CharRef {
            name: "ire;",
            characters: "\u{2257}",
        });
    }

    if first_char == 'c' && try_read("omp;") {
        return Some(CharRef {
            name: "omp;",
            characters: "\u{2201}",
        });
    }

    if first_char == 'c' && try_read("ong;") {
        return Some(CharRef {
            name: "ong;",
            characters: "\u{2245}",
        });
    }

    if first_char == 'c' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d554}",
        });
    }

    if first_char == 'c' && try_read("opy;") {
        return Some(CharRef {
            name: "opy;",
            characters: "\u{a9}",
        });
    }

    if first_char == 'c' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b8}",
        });
    }

    if first_char == 'c' && try_read("sub;") {
        return Some(CharRef {
            name: "sub;",
            characters: "\u{2acf}",
        });
    }

    if first_char == 'c' && try_read("sup;") {
        return Some(CharRef {
            name: "sup;",
            characters: "\u{2ad0}",
        });
    }

    if first_char == 'c' && try_read("ups;") {
        return Some(CharRef {
            name: "ups;",
            characters: "\u{222a}\u{fe00}",
        });
    }

    if first_char == 'd' && try_read("Arr;") {
        return Some(CharRef {
            name: "Arr;",
            characters: "\u{21d3}",
        });
    }

    if first_char == 'd' && try_read("Har;") {
        return Some(CharRef {
            name: "Har;",
            characters: "\u{2965}",
        });
    }

    if first_char == 'd' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{2193}",
        });
    }

    if first_char == 'd' && try_read("ash;") {
        return Some(CharRef {
            name: "ash;",
            characters: "\u{2010}",
        });
    }

    if first_char == 'd' && try_read("iam;") {
        return Some(CharRef {
            name: "iam;",
            characters: "\u{22c4}",
        });
    }

    if first_char == 'd' && try_read("jcy;") {
        return Some(CharRef {
            name: "jcy;",
            characters: "\u{452}",
        });
    }

    if first_char == 'd' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d555}",
        });
    }

    if first_char == 'd' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4b9}",
        });
    }

    if first_char == 'd' && try_read("scy;") {
        return Some(CharRef {
            name: "scy;",
            characters: "\u{455}",
        });
    }

    if first_char == 'd' && try_read("sol;") {
        return Some(CharRef {
            name: "sol;",
            characters: "\u{29f6}",
        });
    }

    if first_char == 'd' && try_read("tri;") {
        return Some(CharRef {
            name: "tri;",
            characters: "\u{25bf}",
        });
    }

    if first_char == 'd' && try_read("zcy;") {
        return Some(CharRef {
            name: "zcy;",
            characters: "\u{45f}",
        });
    }

    if first_char == 'e' && try_read("Dot;") {
        return Some(CharRef {
            name: "Dot;",
            characters: "\u{2251}",
        });
    }

    if first_char == 'e' && try_read("cir;") {
        return Some(CharRef {
            name: "cir;",
            characters: "\u{2256}",
        });
    }

    if first_char == 'e' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{ea}",
        });
    }

    if first_char == 'e' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{117}",
        });
    }

    if first_char == 'e' && try_read("msp;") {
        return Some(CharRef {
            name: "msp;",
            characters: "\u{2003}",
        });
    }

    if first_char == 'e' && try_read("nsp;") {
        return Some(CharRef {
            name: "nsp;",
            characters: "\u{2002}",
        });
    }

    if first_char == 'e' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d556}",
        });
    }

    if first_char == 'e' && try_read("par;") {
        return Some(CharRef {
            name: "par;",
            characters: "\u{22d5}",
        });
    }

    if first_char == 'e' && try_read("psi;") {
        return Some(CharRef {
            name: "psi;",
            characters: "\u{3b5}",
        });
    }

    if first_char == 'e' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{212f}",
        });
    }

    if first_char == 'e' && try_read("sim;") {
        return Some(CharRef {
            name: "sim;",
            characters: "\u{2242}",
        });
    }

    if first_char == 'e' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{eb}",
        });
    }

    if first_char == 'e' && try_read("uro;") {
        return Some(CharRef {
            name: "uro;",
            characters: "\u{20ac}",
        });
    }

    if first_char == 'e' && try_read("xcl;") {
        return Some(CharRef {
            name: "xcl;",
            characters: "\u{21}",
        });
    }

    if first_char == 'f' && try_read("lat;") {
        return Some(CharRef {
            name: "lat;",
            characters: "\u{266d}",
        });
    }

    if first_char == 'f' && try_read("nof;") {
        return Some(CharRef {
            name: "nof;",
            characters: "\u{192}",
        });
    }

    if first_char == 'f' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d557}",
        });
    }

    if first_char == 'f' && try_read("ork;") {
        return Some(CharRef {
            name: "ork;",
            characters: "\u{22d4}",
        });
    }

    if first_char == 'f' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4bb}",
        });
    }

    if first_char == 'g' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{121}",
        });
    }

    if first_char == 'g' && try_read("eqq;") {
        return Some(CharRef {
            name: "eqq;",
            characters: "\u{2267}",
        });
    }

    if first_char == 'g' && try_read("esl;") {
        return Some(CharRef {
            name: "esl;",
            characters: "\u{22db}\u{fe00}",
        });
    }

    if first_char == 'g' && try_read("jcy;") {
        return Some(CharRef {
            name: "jcy;",
            characters: "\u{453}",
        });
    }

    if first_char == 'g' && try_read("nap;") {
        return Some(CharRef {
            name: "nap;",
            characters: "\u{2a8a}",
        });
    }

    if first_char == 'g' && try_read("neq;") {
        return Some(CharRef {
            name: "neq;",
            characters: "\u{2a88}",
        });
    }

    if first_char == 'g' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d558}",
        });
    }

    if first_char == 'g' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{210a}",
        });
    }

    if first_char == 'g' && try_read("sim;") {
        return Some(CharRef {
            name: "sim;",
            characters: "\u{2273}",
        });
    }

    if first_char == 'g' && try_read("tcc;") {
        return Some(CharRef {
            name: "tcc;",
            characters: "\u{2aa7}",
        });
    }

    if first_char == 'g' && try_read("vnE;") {
        return Some(CharRef {
            name: "vnE;",
            characters: "\u{2269}\u{fe00}",
        });
    }

    if first_char == 'h' && try_read("Arr;") {
        return Some(CharRef {
            name: "Arr;",
            characters: "\u{21d4}",
        });
    }

    if first_char == 'h' && try_read("alf;") {
        return Some(CharRef {
            name: "alf;",
            characters: "\u{bd}",
        });
    }

    if first_char == 'h' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{2194}",
        });
    }

    if first_char == 'h' && try_read("bar;") {
        return Some(CharRef {
            name: "bar;",
            characters: "\u{210f}",
        });
    }

    if first_char == 'h' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d559}",
        });
    }

    if first_char == 'h' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4bd}",
        });
    }

    if first_char == 'i' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{ee}",
        });
    }

    if first_char == 'i' && try_read("ecy;") {
        return Some(CharRef {
            name: "ecy;",
            characters: "\u{435}",
        });
    }

    if first_char == 'i' && try_read("excl") {
        return Some(CharRef {
            name: "excl",
            characters: "\u{a1}",
        });
    }

    if first_char == 'i' && try_read("mof;") {
        return Some(CharRef {
            name: "mof;",
            characters: "\u{22b7}",
        });
    }

    if first_char == 'i' && try_read("ocy;") {
        return Some(CharRef {
            name: "ocy;",
            characters: "\u{451}",
        });
    }

    if first_char == 'i' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d55a}",
        });
    }

    if first_char == 'i' && try_read("ota;") {
        return Some(CharRef {
            name: "ota;",
            characters: "\u{3b9}",
        });
    }

    if first_char == 'i' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4be}",
        });
    }

    if first_char == 'i' && try_read("sin;") {
        return Some(CharRef {
            name: "sin;",
            characters: "\u{2208}",
        });
    }

    if first_char == 'i' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{ef}",
        });
    }

    if first_char == 'j' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d55b}",
        });
    }

    if first_char == 'j' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4bf}",
        });
    }

    if first_char == 'k' && try_read("hcy;") {
        return Some(CharRef {
            name: "hcy;",
            characters: "\u{445}",
        });
    }

    if first_char == 'k' && try_read("jcy;") {
        return Some(CharRef {
            name: "jcy;",
            characters: "\u{45c}",
        });
    }

    if first_char == 'k' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d55c}",
        });
    }

    if first_char == 'k' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4c0}",
        });
    }

    if first_char == 'l' && try_read("Arr;") {
        return Some(CharRef {
            name: "Arr;",
            characters: "\u{21d0}",
        });
    }

    if first_char == 'l' && try_read("Har;") {
        return Some(CharRef {
            name: "Har;",
            characters: "\u{2962}",
        });
    }

    if first_char == 'l' && try_read("ang;") {
        return Some(CharRef {
            name: "ang;",
            characters: "\u{27e8}",
        });
    }

    if first_char == 'l' && try_read("aquo") {
        return Some(CharRef {
            name: "aquo",
            characters: "\u{ab}",
        });
    }

    if first_char == 'l' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{2190}",
        });
    }

    if first_char == 'l' && try_read("ate;") {
        return Some(CharRef {
            name: "ate;",
            characters: "\u{2aad}",
        });
    }

    if first_char == 'l' && try_read("cub;") {
        return Some(CharRef {
            name: "cub;",
            characters: "\u{7b}",
        });
    }

    if first_char == 'l' && try_read("dca;") {
        return Some(CharRef {
            name: "dca;",
            characters: "\u{2936}",
        });
    }

    if first_char == 'l' && try_read("dsh;") {
        return Some(CharRef {
            name: "dsh;",
            characters: "\u{21b2}",
        });
    }

    if first_char == 'l' && try_read("eqq;") {
        return Some(CharRef {
            name: "eqq;",
            characters: "\u{2266}",
        });
    }

    if first_char == 'l' && try_read("esg;") {
        return Some(CharRef {
            name: "esg;",
            characters: "\u{22da}\u{fe00}",
        });
    }

    if first_char == 'l' && try_read("jcy;") {
        return Some(CharRef {
            name: "jcy;",
            characters: "\u{459}",
        });
    }

    if first_char == 'l' && try_read("nap;") {
        return Some(CharRef {
            name: "nap;",
            characters: "\u{2a89}",
        });
    }

    if first_char == 'l' && try_read("neq;") {
        return Some(CharRef {
            name: "neq;",
            characters: "\u{2a87}",
        });
    }

    if first_char == 'l' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d55d}",
        });
    }

    if first_char == 'l' && try_read("ozf;") {
        return Some(CharRef {
            name: "ozf;",
            characters: "\u{29eb}",
        });
    }

    if first_char == 'l' && try_read("par;") {
        return Some(CharRef {
            name: "par;",
            characters: "\u{28}",
        });
    }

    if first_char == 'l' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4c1}",
        });
    }

    if first_char == 'l' && try_read("sim;") {
        return Some(CharRef {
            name: "sim;",
            characters: "\u{2272}",
        });
    }

    if first_char == 'l' && try_read("sqb;") {
        return Some(CharRef {
            name: "sqb;",
            characters: "\u{5b}",
        });
    }

    if first_char == 'l' && try_read("tcc;") {
        return Some(CharRef {
            name: "tcc;",
            characters: "\u{2aa6}",
        });
    }

    if first_char == 'l' && try_read("tri;") {
        return Some(CharRef {
            name: "tri;",
            characters: "\u{25c3}",
        });
    }

    if first_char == 'l' && try_read("vnE;") {
        return Some(CharRef {
            name: "vnE;",
            characters: "\u{2268}\u{fe00}",
        });
    }

    if first_char == 'm' && try_read("acr;") {
        return Some(CharRef {
            name: "acr;",
            characters: "\u{af}",
        });
    }

    if first_char == 'm' && try_read("ale;") {
        return Some(CharRef {
            name: "ale;",
            characters: "\u{2642}",
        });
    }

    if first_char == 'm' && try_read("alt;") {
        return Some(CharRef {
            name: "alt;",
            characters: "\u{2720}",
        });
    }

    if first_char == 'm' && try_read("icro") {
        return Some(CharRef {
            name: "icro",
            characters: "\u{b5}",
        });
    }

    if first_char == 'm' && try_read("lcp;") {
        return Some(CharRef {
            name: "lcp;",
            characters: "\u{2adb}",
        });
    }

    if first_char == 'm' && try_read("ldr;") {
        return Some(CharRef {
            name: "ldr;",
            characters: "\u{2026}",
        });
    }

    if first_char == 'm' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d55e}",
        });
    }

    if first_char == 'm' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4c2}",
        });
    }

    if first_char == 'n' && try_read("Gtv;") {
        return Some(CharRef {
            name: "Gtv;",
            characters: "\u{226b}\u{338}",
        });
    }

    if first_char == 'n' && try_read("Ltv;") {
        return Some(CharRef {
            name: "Ltv;",
            characters: "\u{226a}\u{338}",
        });
    }

    if first_char == 'n' && try_read("ang;") {
        return Some(CharRef {
            name: "ang;",
            characters: "\u{2220}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("apE;") {
        return Some(CharRef {
            name: "apE;",
            characters: "\u{2a70}\u{338}",
        });
    }

    if first_char == 'n' && try_read("bsp;") {
        return Some(CharRef {
            name: "bsp;",
            characters: "\u{a0}",
        });
    }

    if first_char == 'n' && try_read("cap;") {
        return Some(CharRef {
            name: "cap;",
            characters: "\u{2a43}",
        });
    }

    if first_char == 'n' && try_read("cup;") {
        return Some(CharRef {
            name: "cup;",
            characters: "\u{2a42}",
        });
    }

    if first_char == 'n' && try_read("geq;") {
        return Some(CharRef {
            name: "geq;",
            characters: "\u{2271}",
        });
    }

    if first_char == 'n' && try_read("ges;") {
        return Some(CharRef {
            name: "ges;",
            characters: "\u{2a7e}\u{338}",
        });
    }

    if first_char == 'n' && try_read("gtr;") {
        return Some(CharRef {
            name: "gtr;",
            characters: "\u{226f}",
        });
    }

    if first_char == 'n' && try_read("isd;") {
        return Some(CharRef {
            name: "isd;",
            characters: "\u{22fa}",
        });
    }

    if first_char == 'n' && try_read("jcy;") {
        return Some(CharRef {
            name: "jcy;",
            characters: "\u{45a}",
        });
    }

    if first_char == 'n' && try_read("ldr;") {
        return Some(CharRef {
            name: "ldr;",
            characters: "\u{2025}",
        });
    }

    if first_char == 'n' && try_read("leq;") {
        return Some(CharRef {
            name: "leq;",
            characters: "\u{2270}",
        });
    }

    if first_char == 'n' && try_read("les;") {
        return Some(CharRef {
            name: "les;",
            characters: "\u{2a7d}\u{338}",
        });
    }

    if first_char == 'n' && try_read("mid;") {
        return Some(CharRef {
            name: "mid;",
            characters: "\u{2224}",
        });
    }

    if first_char == 'n' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d55f}",
        });
    }

    if first_char == 'n' && try_read("par;") {
        return Some(CharRef {
            name: "par;",
            characters: "\u{2226}",
        });
    }

    if first_char == 'n' && try_read("pre;") {
        return Some(CharRef {
            name: "pre;",
            characters: "\u{2aaf}\u{338}",
        });
    }

    if first_char == 'n' && try_read("sce;") {
        return Some(CharRef {
            name: "sce;",
            characters: "\u{2ab0}\u{338}",
        });
    }

    if first_char == 'n' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4c3}",
        });
    }

    if first_char == 'n' && try_read("sim;") {
        return Some(CharRef {
            name: "sim;",
            characters: "\u{2241}",
        });
    }

    if first_char == 'n' && try_read("sub;") {
        return Some(CharRef {
            name: "sub;",
            characters: "\u{2284}",
        });
    }

    if first_char == 'n' && try_read("sup;") {
        return Some(CharRef {
            name: "sup;",
            characters: "\u{2285}",
        });
    }

    if first_char == 'n' && try_read("tgl;") {
        return Some(CharRef {
            name: "tgl;",
            characters: "\u{2279}",
        });
    }

    if first_char == 'n' && try_read("tlg;") {
        return Some(CharRef {
            name: "tlg;",
            characters: "\u{2278}",
        });
    }

    if first_char == 'n' && try_read("vap;") {
        return Some(CharRef {
            name: "vap;",
            characters: "\u{224d}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("vge;") {
        return Some(CharRef {
            name: "vge;",
            characters: "\u{2265}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("vgt;") {
        return Some(CharRef {
            name: "vgt;",
            characters: "\u{3e}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("vle;") {
        return Some(CharRef {
            name: "vle;",
            characters: "\u{2264}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("vlt;") {
        return Some(CharRef {
            name: "vlt;",
            characters: "\u{3c}\u{20d2}",
        });
    }

    if first_char == 'o' && try_read("ast;") {
        return Some(CharRef {
            name: "ast;",
            characters: "\u{229b}",
        });
    }

    if first_char == 'o' && try_read("cir;") {
        return Some(CharRef {
            name: "cir;",
            characters: "\u{229a}",
        });
    }

    if first_char == 'o' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{f4}",
        });
    }

    if first_char == 'o' && try_read("div;") {
        return Some(CharRef {
            name: "div;",
            characters: "\u{2a38}",
        });
    }

    if first_char == 'o' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{2299}",
        });
    }

    if first_char == 'o' && try_read("gon;") {
        return Some(CharRef {
            name: "gon;",
            characters: "\u{2db}",
        });
    }

    if first_char == 'o' && try_read("int;") {
        return Some(CharRef {
            name: "int;",
            characters: "\u{222e}",
        });
    }

    if first_char == 'o' && try_read("mid;") {
        return Some(CharRef {
            name: "mid;",
            characters: "\u{29b6}",
        });
    }

    if first_char == 'o' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d560}",
        });
    }

    if first_char == 'o' && try_read("par;") {
        return Some(CharRef {
            name: "par;",
            characters: "\u{29b7}",
        });
    }

    if first_char == 'o' && try_read("rdf;") {
        return Some(CharRef {
            name: "rdf;",
            characters: "\u{aa}",
        });
    }

    if first_char == 'o' && try_read("rdm;") {
        return Some(CharRef {
            name: "rdm;",
            characters: "\u{ba}",
        });
    }

    if first_char == 'o' && try_read("ror;") {
        return Some(CharRef {
            name: "ror;",
            characters: "\u{2a56}",
        });
    }

    if first_char == 'o' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{2134}",
        });
    }

    if first_char == 'o' && try_read("sol;") {
        return Some(CharRef {
            name: "sol;",
            characters: "\u{2298}",
        });
    }

    if first_char == 'o' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{f6}",
        });
    }

    if first_char == 'p' && try_read("ara;") {
        return Some(CharRef {
            name: "ara;",
            characters: "\u{b6}",
        });
    }

    if first_char == 'p' && try_read("art;") {
        return Some(CharRef {
            name: "art;",
            characters: "\u{2202}",
        });
    }

    if first_char == 'p' && try_read("erp;") {
        return Some(CharRef {
            name: "erp;",
            characters: "\u{22a5}",
        });
    }

    if first_char == 'p' && try_read("hiv;") {
        return Some(CharRef {
            name: "hiv;",
            characters: "\u{3d5}",
        });
    }

    if first_char == 'p' && try_read("lus;") {
        return Some(CharRef {
            name: "lus;",
            characters: "\u{2b}",
        });
    }

    if first_char == 'p' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d561}",
        });
    }

    if first_char == 'p' && try_read("ound") {
        return Some(CharRef {
            name: "ound",
            characters: "\u{a3}",
        });
    }

    if first_char == 'p' && try_read("rap;") {
        return Some(CharRef {
            name: "rap;",
            characters: "\u{2ab7}",
        });
    }

    if first_char == 'p' && try_read("rec;") {
        return Some(CharRef {
            name: "rec;",
            characters: "\u{227a}",
        });
    }

    if first_char == 'p' && try_read("rnE;") {
        return Some(CharRef {
            name: "rnE;",
            characters: "\u{2ab5}",
        });
    }

    if first_char == 'p' && try_read("rod;") {
        return Some(CharRef {
            name: "rod;",
            characters: "\u{220f}",
        });
    }

    if first_char == 'p' && try_read("rop;") {
        return Some(CharRef {
            name: "rop;",
            characters: "\u{221d}",
        });
    }

    if first_char == 'p' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4c5}",
        });
    }

    if first_char == 'q' && try_read("int;") {
        return Some(CharRef {
            name: "int;",
            characters: "\u{2a0c}",
        });
    }

    if first_char == 'q' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d562}",
        });
    }

    if first_char == 'q' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4c6}",
        });
    }

    if first_char == 'q' && try_read("uot;") {
        return Some(CharRef {
            name: "uot;",
            characters: "\u{22}",
        });
    }

    if first_char == 'r' && try_read("Arr;") {
        return Some(CharRef {
            name: "Arr;",
            characters: "\u{21d2}",
        });
    }

    if first_char == 'r' && try_read("Har;") {
        return Some(CharRef {
            name: "Har;",
            characters: "\u{2964}",
        });
    }

    if first_char == 'r' && try_read("ace;") {
        return Some(CharRef {
            name: "ace;",
            characters: "\u{223d}\u{331}",
        });
    }

    if first_char == 'r' && try_read("ang;") {
        return Some(CharRef {
            name: "ang;",
            characters: "\u{27e9}",
        });
    }

    if first_char == 'r' && try_read("aquo") {
        return Some(CharRef {
            name: "aquo",
            characters: "\u{bb}",
        });
    }

    if first_char == 'r' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{2192}",
        });
    }

    if first_char == 'r' && try_read("cub;") {
        return Some(CharRef {
            name: "cub;",
            characters: "\u{7d}",
        });
    }

    if first_char == 'r' && try_read("dca;") {
        return Some(CharRef {
            name: "dca;",
            characters: "\u{2937}",
        });
    }

    if first_char == 'r' && try_read("dsh;") {
        return Some(CharRef {
            name: "dsh;",
            characters: "\u{21b3}",
        });
    }

    if first_char == 'r' && try_read("eal;") {
        return Some(CharRef {
            name: "eal;",
            characters: "\u{211c}",
        });
    }

    if first_char == 'r' && try_read("ect;") {
        return Some(CharRef {
            name: "ect;",
            characters: "\u{25ad}",
        });
    }

    if first_char == 'r' && try_read("hov;") {
        return Some(CharRef {
            name: "hov;",
            characters: "\u{3f1}",
        });
    }

    if first_char == 'r' && try_read("ing;") {
        return Some(CharRef {
            name: "ing;",
            characters: "\u{2da}",
        });
    }

    if first_char == 'r' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d563}",
        });
    }

    if first_char == 'r' && try_read("par;") {
        return Some(CharRef {
            name: "par;",
            characters: "\u{29}",
        });
    }

    if first_char == 'r' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4c7}",
        });
    }

    if first_char == 'r' && try_read("sqb;") {
        return Some(CharRef {
            name: "sqb;",
            characters: "\u{5d}",
        });
    }

    if first_char == 'r' && try_read("tri;") {
        return Some(CharRef {
            name: "tri;",
            characters: "\u{25b9}",
        });
    }

    if first_char == 's' && try_read("cap;") {
        return Some(CharRef {
            name: "cap;",
            characters: "\u{2ab8}",
        });
    }

    if first_char == 's' && try_read("cnE;") {
        return Some(CharRef {
            name: "cnE;",
            characters: "\u{2ab6}",
        });
    }

    if first_char == 's' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{22c5}",
        });
    }

    if first_char == 's' && try_read("ect;") {
        return Some(CharRef {
            name: "ect;",
            characters: "\u{a7}",
        });
    }

    if first_char == 's' && try_read("emi;") {
        return Some(CharRef {
            name: "emi;",
            characters: "\u{3b}",
        });
    }

    if first_char == 's' && try_read("ext;") {
        return Some(CharRef {
            name: "ext;",
            characters: "\u{2736}",
        });
    }

    if first_char == 's' && try_read("hcy;") {
        return Some(CharRef {
            name: "hcy;",
            characters: "\u{448}",
        });
    }

    if first_char == 's' && try_read("ime;") {
        return Some(CharRef {
            name: "ime;",
            characters: "\u{2243}",
        });
    }

    if first_char == 's' && try_read("img;") {
        return Some(CharRef {
            name: "img;",
            characters: "\u{2a9e}",
        });
    }

    if first_char == 's' && try_read("iml;") {
        return Some(CharRef {
            name: "iml;",
            characters: "\u{2a9d}",
        });
    }

    if first_char == 's' && try_read("mid;") {
        return Some(CharRef {
            name: "mid;",
            characters: "\u{2223}",
        });
    }

    if first_char == 's' && try_read("mte;") {
        return Some(CharRef {
            name: "mte;",
            characters: "\u{2aac}",
        });
    }

    if first_char == 's' && try_read("olb;") {
        return Some(CharRef {
            name: "olb;",
            characters: "\u{29c4}",
        });
    }

    if first_char == 's' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d564}",
        });
    }

    if first_char == 's' && try_read("par;") {
        return Some(CharRef {
            name: "par;",
            characters: "\u{2225}",
        });
    }

    if first_char == 's' && try_read("quf;") {
        return Some(CharRef {
            name: "quf;",
            characters: "\u{25aa}",
        });
    }

    if first_char == 's' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4c8}",
        });
    }

    if first_char == 's' && try_read("tar;") {
        return Some(CharRef {
            name: "tar;",
            characters: "\u{2606}",
        });
    }

    if first_char == 's' && try_read("ubE;") {
        return Some(CharRef {
            name: "ubE;",
            characters: "\u{2ac5}",
        });
    }

    if first_char == 's' && try_read("ube;") {
        return Some(CharRef {
            name: "ube;",
            characters: "\u{2286}",
        });
    }

    if first_char == 's' && try_read("ucc;") {
        return Some(CharRef {
            name: "ucc;",
            characters: "\u{227b}",
        });
    }

    if first_char == 's' && try_read("ung;") {
        return Some(CharRef {
            name: "ung;",
            characters: "\u{266a}",
        });
    }

    if first_char == 's' && try_read("up1;") {
        return Some(CharRef {
            name: "up1;",
            characters: "\u{b9}",
        });
    }

    if first_char == 's' && try_read("up2;") {
        return Some(CharRef {
            name: "up2;",
            characters: "\u{b2}",
        });
    }

    if first_char == 's' && try_read("up3;") {
        return Some(CharRef {
            name: "up3;",
            characters: "\u{b3}",
        });
    }

    if first_char == 's' && try_read("upE;") {
        return Some(CharRef {
            name: "upE;",
            characters: "\u{2ac6}",
        });
    }

    if first_char == 's' && try_read("upe;") {
        return Some(CharRef {
            name: "upe;",
            characters: "\u{2287}",
        });
    }

    if first_char == 's' && try_read("zlig") {
        return Some(CharRef {
            name: "zlig",
            characters: "\u{df}",
        });
    }

    if first_char == 't' && try_read("brk;") {
        return Some(CharRef {
            name: "brk;",
            characters: "\u{23b4}",
        });
    }

    if first_char == 't' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{20db}",
        });
    }

    if first_char == 't' && try_read("horn") {
        return Some(CharRef {
            name: "horn",
            characters: "\u{fe}",
        });
    }

    if first_char == 't' && try_read("imes") {
        return Some(CharRef {
            name: "imes",
            characters: "\u{d7}",
        });
    }

    if first_char == 't' && try_read("int;") {
        return Some(CharRef {
            name: "int;",
            characters: "\u{222d}",
        });
    }

    if first_char == 't' && try_read("oea;") {
        return Some(CharRef {
            name: "oea;",
            characters: "\u{2928}",
        });
    }

    if first_char == 't' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d565}",
        });
    }

    if first_char == 't' && try_read("osa;") {
        return Some(CharRef {
            name: "osa;",
            characters: "\u{2929}",
        });
    }

    if first_char == 't' && try_read("rie;") {
        return Some(CharRef {
            name: "rie;",
            characters: "\u{225c}",
        });
    }

    if first_char == 't' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4c9}",
        });
    }

    if first_char == 't' && try_read("scy;") {
        return Some(CharRef {
            name: "scy;",
            characters: "\u{446}",
        });
    }

    if first_char == 'u' && try_read("Arr;") {
        return Some(CharRef {
            name: "Arr;",
            characters: "\u{21d1}",
        });
    }

    if first_char == 'u' && try_read("Har;") {
        return Some(CharRef {
            name: "Har;",
            characters: "\u{2963}",
        });
    }

    if first_char == 'u' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{2191}",
        });
    }

    if first_char == 'u' && try_read("circ") {
        return Some(CharRef {
            name: "circ",
            characters: "\u{fb}",
        });
    }

    if first_char == 'u' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d566}",
        });
    }

    if first_char == 'u' && try_read("psi;") {
        return Some(CharRef {
            name: "psi;",
            characters: "\u{3c5}",
        });
    }

    if first_char == 'u' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4ca}",
        });
    }

    if first_char == 'u' && try_read("tri;") {
        return Some(CharRef {
            name: "tri;",
            characters: "\u{25b5}",
        });
    }

    if first_char == 'u' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{fc}",
        });
    }

    if first_char == 'v' && try_read("Arr;") {
        return Some(CharRef {
            name: "Arr;",
            characters: "\u{21d5}",
        });
    }

    if first_char == 'v' && try_read("Bar;") {
        return Some(CharRef {
            name: "Bar;",
            characters: "\u{2ae8}",
        });
    }

    if first_char == 'v' && try_read("arr;") {
        return Some(CharRef {
            name: "arr;",
            characters: "\u{2195}",
        });
    }

    if first_char == 'v' && try_read("ert;") {
        return Some(CharRef {
            name: "ert;",
            characters: "\u{7c}",
        });
    }

    if first_char == 'v' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d567}",
        });
    }

    if first_char == 'v' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4cb}",
        });
    }

    if first_char == 'w' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d568}",
        });
    }

    if first_char == 'w' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4cc}",
        });
    }

    if first_char == 'x' && try_read("cap;") {
        return Some(CharRef {
            name: "cap;",
            characters: "\u{22c2}",
        });
    }

    if first_char == 'x' && try_read("cup;") {
        return Some(CharRef {
            name: "cup;",
            characters: "\u{22c3}",
        });
    }

    if first_char == 'x' && try_read("map;") {
        return Some(CharRef {
            name: "map;",
            characters: "\u{27fc}",
        });
    }

    if first_char == 'x' && try_read("nis;") {
        return Some(CharRef {
            name: "nis;",
            characters: "\u{22fb}",
        });
    }

    if first_char == 'x' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d569}",
        });
    }

    if first_char == 'x' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4cd}",
        });
    }

    if first_char == 'x' && try_read("vee;") {
        return Some(CharRef {
            name: "vee;",
            characters: "\u{22c1}",
        });
    }

    if first_char == 'y' && try_read("acy;") {
        return Some(CharRef {
            name: "acy;",
            characters: "\u{44f}",
        });
    }

    if first_char == 'y' && try_read("icy;") {
        return Some(CharRef {
            name: "icy;",
            characters: "\u{457}",
        });
    }

    if first_char == 'y' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d56a}",
        });
    }

    if first_char == 'y' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4ce}",
        });
    }

    if first_char == 'y' && try_read("ucy;") {
        return Some(CharRef {
            name: "ucy;",
            characters: "\u{44e}",
        });
    }

    if first_char == 'y' && try_read("uml;") {
        return Some(CharRef {
            name: "uml;",
            characters: "\u{ff}",
        });
    }

    if first_char == 'z' && try_read("dot;") {
        return Some(CharRef {
            name: "dot;",
            characters: "\u{17c}",
        });
    }

    if first_char == 'z' && try_read("eta;") {
        return Some(CharRef {
            name: "eta;",
            characters: "\u{3b6}",
        });
    }

    if first_char == 'z' && try_read("hcy;") {
        return Some(CharRef {
            name: "hcy;",
            characters: "\u{436}",
        });
    }

    if first_char == 'z' && try_read("opf;") {
        return Some(CharRef {
            name: "opf;",
            characters: "\u{1d56b}",
        });
    }

    if first_char == 'z' && try_read("scr;") {
        return Some(CharRef {
            name: "scr;",
            characters: "\u{1d4cf}",
        });
    }

    if first_char == 'z' && try_read("wnj;") {
        return Some(CharRef {
            name: "wnj;",
            characters: "\u{200c}",
        });
    }

    if first_char == 'A' && try_read("MP;") {
        return Some(CharRef {
            name: "MP;",
            characters: "\u{26}",
        });
    }

    if first_char == 'A' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{410}",
        });
    }

    if first_char == 'A' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d504}",
        });
    }

    if first_char == 'A' && try_read("nd;") {
        return Some(CharRef {
            name: "nd;",
            characters: "\u{2a53}",
        });
    }

    if first_char == 'A' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{c4}",
        });
    }

    if first_char == 'B' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{411}",
        });
    }

    if first_char == 'B' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d505}",
        });
    }

    if first_char == 'C' && try_read("OPY") {
        return Some(CharRef {
            name: "OPY",
            characters: "\u{a9}",
        });
    }

    if first_char == 'C' && try_read("ap;") {
        return Some(CharRef {
            name: "ap;",
            characters: "\u{22d2}",
        });
    }

    if first_char == 'C' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{212d}",
        });
    }

    if first_char == 'C' && try_read("hi;") {
        return Some(CharRef {
            name: "hi;",
            characters: "\u{3a7}",
        });
    }

    if first_char == 'C' && try_read("up;") {
        return Some(CharRef {
            name: "up;",
            characters: "\u{22d3}",
        });
    }

    if first_char == 'D' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{414}",
        });
    }

    if first_char == 'D' && try_read("el;") {
        return Some(CharRef {
            name: "el;",
            characters: "\u{2207}",
        });
    }

    if first_char == 'D' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d507}",
        });
    }

    if first_char == 'D' && try_read("ot;") {
        return Some(CharRef {
            name: "ot;",
            characters: "\u{a8}",
        });
    }

    if first_char == 'E' && try_read("NG;") {
        return Some(CharRef {
            name: "NG;",
            characters: "\u{14a}",
        });
    }

    if first_char == 'E' && try_read("TH;") {
        return Some(CharRef {
            name: "TH;",
            characters: "\u{d0}",
        });
    }

    if first_char == 'E' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{42d}",
        });
    }

    if first_char == 'E' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d508}",
        });
    }

    if first_char == 'E' && try_read("ta;") {
        return Some(CharRef {
            name: "ta;",
            characters: "\u{397}",
        });
    }

    if first_char == 'E' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{cb}",
        });
    }

    if first_char == 'F' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{424}",
        });
    }

    if first_char == 'F' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d509}",
        });
    }

    if first_char == 'G' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{413}",
        });
    }

    if first_char == 'G' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d50a}",
        });
    }

    if first_char == 'H' && try_read("at;") {
        return Some(CharRef {
            name: "at;",
            characters: "\u{5e}",
        });
    }

    if first_char == 'H' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{210c}",
        });
    }

    if first_char == 'I' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{418}",
        });
    }

    if first_char == 'I' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{2111}",
        });
    }

    if first_char == 'I' && try_read("nt;") {
        return Some(CharRef {
            name: "nt;",
            characters: "\u{222c}",
        });
    }

    if first_char == 'I' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{cf}",
        });
    }

    if first_char == 'J' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{419}",
        });
    }

    if first_char == 'J' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d50d}",
        });
    }

    if first_char == 'K' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{41a}",
        });
    }

    if first_char == 'K' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d50e}",
        });
    }

    if first_char == 'L' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{41b}",
        });
    }

    if first_char == 'L' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d50f}",
        });
    }

    if first_char == 'L' && try_read("sh;") {
        return Some(CharRef {
            name: "sh;",
            characters: "\u{21b0}",
        });
    }

    if first_char == 'M' && try_read("ap;") {
        return Some(CharRef {
            name: "ap;",
            characters: "\u{2905}",
        });
    }

    if first_char == 'M' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{41c}",
        });
    }

    if first_char == 'M' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d510}",
        });
    }

    if first_char == 'N' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{41d}",
        });
    }

    if first_char == 'N' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d511}",
        });
    }

    if first_char == 'N' && try_read("ot;") {
        return Some(CharRef {
            name: "ot;",
            characters: "\u{2aec}",
        });
    }

    if first_char == 'O' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{41e}",
        });
    }

    if first_char == 'O' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d512}",
        });
    }

    if first_char == 'O' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{d6}",
        });
    }

    if first_char == 'P' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{41f}",
        });
    }

    if first_char == 'P' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d513}",
        });
    }

    if first_char == 'P' && try_read("hi;") {
        return Some(CharRef {
            name: "hi;",
            characters: "\u{3a6}",
        });
    }

    if first_char == 'P' && try_read("si;") {
        return Some(CharRef {
            name: "si;",
            characters: "\u{3a8}",
        });
    }

    if first_char == 'Q' && try_read("UOT") {
        return Some(CharRef {
            name: "UOT",
            characters: "\u{22}",
        });
    }

    if first_char == 'Q' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d514}",
        });
    }

    if first_char == 'R' && try_read("EG;") {
        return Some(CharRef {
            name: "EG;",
            characters: "\u{ae}",
        });
    }

    if first_char == 'R' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{420}",
        });
    }

    if first_char == 'R' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{211c}",
        });
    }

    if first_char == 'R' && try_read("ho;") {
        return Some(CharRef {
            name: "ho;",
            characters: "\u{3a1}",
        });
    }

    if first_char == 'R' && try_read("sh;") {
        return Some(CharRef {
            name: "sh;",
            characters: "\u{21b1}",
        });
    }

    if first_char == 'S' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{421}",
        });
    }

    if first_char == 'S' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d516}",
        });
    }

    if first_char == 'S' && try_read("ub;") {
        return Some(CharRef {
            name: "ub;",
            characters: "\u{22d0}",
        });
    }

    if first_char == 'S' && try_read("um;") {
        return Some(CharRef {
            name: "um;",
            characters: "\u{2211}",
        });
    }

    if first_char == 'S' && try_read("up;") {
        return Some(CharRef {
            name: "up;",
            characters: "\u{22d1}",
        });
    }

    if first_char == 'T' && try_read("ab;") {
        return Some(CharRef {
            name: "ab;",
            characters: "\u{9}",
        });
    }

    if first_char == 'T' && try_read("au;") {
        return Some(CharRef {
            name: "au;",
            characters: "\u{3a4}",
        });
    }

    if first_char == 'T' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{422}",
        });
    }

    if first_char == 'T' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d517}",
        });
    }

    if first_char == 'U' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{423}",
        });
    }

    if first_char == 'U' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d518}",
        });
    }

    if first_char == 'U' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{dc}",
        });
    }

    if first_char == 'V' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{412}",
        });
    }

    if first_char == 'V' && try_read("ee;") {
        return Some(CharRef {
            name: "ee;",
            characters: "\u{22c1}",
        });
    }

    if first_char == 'V' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d519}",
        });
    }

    if first_char == 'W' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d51a}",
        });
    }

    if first_char == 'X' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d51b}",
        });
    }

    if first_char == 'Y' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{42b}",
        });
    }

    if first_char == 'Y' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d51c}",
        });
    }

    if first_char == 'Z' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{417}",
        });
    }

    if first_char == 'Z' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{2128}",
        });
    }

    if first_char == 'a' && try_read("cE;") {
        return Some(CharRef {
            name: "cE;",
            characters: "\u{223e}\u{333}",
        });
    }

    if first_char == 'a' && try_read("cd;") {
        return Some(CharRef {
            name: "cd;",
            characters: "\u{223f}",
        });
    }

    if first_char == 'a' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{430}",
        });
    }

    if first_char == 'a' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d51e}",
        });
    }

    if first_char == 'a' && try_read("mp;") {
        return Some(CharRef {
            name: "mp;",
            characters: "\u{26}",
        });
    }

    if first_char == 'a' && try_read("nd;") {
        return Some(CharRef {
            name: "nd;",
            characters: "\u{2227}",
        });
    }

    if first_char == 'a' && try_read("ng;") {
        return Some(CharRef {
            name: "ng;",
            characters: "\u{2220}",
        });
    }

    if first_char == 'a' && try_read("pE;") {
        return Some(CharRef {
            name: "pE;",
            characters: "\u{2a70}",
        });
    }

    if first_char == 'a' && try_read("pe;") {
        return Some(CharRef {
            name: "pe;",
            characters: "\u{224a}",
        });
    }

    if first_char == 'a' && try_read("st;") {
        return Some(CharRef {
            name: "st;",
            characters: "\u{2a}",
        });
    }

    if first_char == 'a' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{e4}",
        });
    }

    if first_char == 'b' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{431}",
        });
    }

    if first_char == 'b' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d51f}",
        });
    }

    if first_char == 'b' && try_read("ne;") {
        return Some(CharRef {
            name: "ne;",
            characters: "\u{3d}\u{20e5}",
        });
    }

    if first_char == 'b' && try_read("ot;") {
        return Some(CharRef {
            name: "ot;",
            characters: "\u{22a5}",
        });
    }

    if first_char == 'c' && try_read("ap;") {
        return Some(CharRef {
            name: "ap;",
            characters: "\u{2229}",
        });
    }

    if first_char == 'c' && try_read("ent") {
        return Some(CharRef {
            name: "ent",
            characters: "\u{a2}",
        });
    }

    if first_char == 'c' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d520}",
        });
    }

    if first_char == 'c' && try_read("hi;") {
        return Some(CharRef {
            name: "hi;",
            characters: "\u{3c7}",
        });
    }

    if first_char == 'c' && try_read("ir;") {
        return Some(CharRef {
            name: "ir;",
            characters: "\u{25cb}",
        });
    }

    if first_char == 'c' && try_read("opy") {
        return Some(CharRef {
            name: "opy",
            characters: "\u{a9}",
        });
    }

    if first_char == 'c' && try_read("up;") {
        return Some(CharRef {
            name: "up;",
            characters: "\u{222a}",
        });
    }

    if first_char == 'd' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{434}",
        });
    }

    if first_char == 'd' && try_read("eg;") {
        return Some(CharRef {
            name: "eg;",
            characters: "\u{b0}",
        });
    }

    if first_char == 'd' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d521}",
        });
    }

    if first_char == 'd' && try_read("ie;") {
        return Some(CharRef {
            name: "ie;",
            characters: "\u{a8}",
        });
    }

    if first_char == 'd' && try_read("iv;") {
        return Some(CharRef {
            name: "iv;",
            characters: "\u{f7}",
        });
    }

    if first_char == 'd' && try_read("ot;") {
        return Some(CharRef {
            name: "ot;",
            characters: "\u{2d9}",
        });
    }

    if first_char == 'e' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{44d}",
        });
    }

    if first_char == 'e' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d522}",
        });
    }

    if first_char == 'e' && try_read("gs;") {
        return Some(CharRef {
            name: "gs;",
            characters: "\u{2a96}",
        });
    }

    if first_char == 'e' && try_read("ll;") {
        return Some(CharRef {
            name: "ll;",
            characters: "\u{2113}",
        });
    }

    if first_char == 'e' && try_read("ls;") {
        return Some(CharRef {
            name: "ls;",
            characters: "\u{2a95}",
        });
    }

    if first_char == 'e' && try_read("ng;") {
        return Some(CharRef {
            name: "ng;",
            characters: "\u{14b}",
        });
    }

    if first_char == 'e' && try_read("ta;") {
        return Some(CharRef {
            name: "ta;",
            characters: "\u{3b7}",
        });
    }

    if first_char == 'e' && try_read("th;") {
        return Some(CharRef {
            name: "th;",
            characters: "\u{f0}",
        });
    }

    if first_char == 'e' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{eb}",
        });
    }

    if first_char == 'f' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{444}",
        });
    }

    if first_char == 'f' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d523}",
        });
    }

    if first_char == 'g' && try_read("El;") {
        return Some(CharRef {
            name: "El;",
            characters: "\u{2a8c}",
        });
    }

    if first_char == 'g' && try_read("ap;") {
        return Some(CharRef {
            name: "ap;",
            characters: "\u{2a86}",
        });
    }

    if first_char == 'g' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{433}",
        });
    }

    if first_char == 'g' && try_read("el;") {
        return Some(CharRef {
            name: "el;",
            characters: "\u{22db}",
        });
    }

    if first_char == 'g' && try_read("eq;") {
        return Some(CharRef {
            name: "eq;",
            characters: "\u{2265}",
        });
    }

    if first_char == 'g' && try_read("es;") {
        return Some(CharRef {
            name: "es;",
            characters: "\u{2a7e}",
        });
    }

    if first_char == 'g' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d524}",
        });
    }

    if first_char == 'g' && try_read("gg;") {
        return Some(CharRef {
            name: "gg;",
            characters: "\u{22d9}",
        });
    }

    if first_char == 'g' && try_read("lE;") {
        return Some(CharRef {
            name: "lE;",
            characters: "\u{2a92}",
        });
    }

    if first_char == 'g' && try_read("la;") {
        return Some(CharRef {
            name: "la;",
            characters: "\u{2aa5}",
        });
    }

    if first_char == 'g' && try_read("lj;") {
        return Some(CharRef {
            name: "lj;",
            characters: "\u{2aa4}",
        });
    }

    if first_char == 'g' && try_read("nE;") {
        return Some(CharRef {
            name: "nE;",
            characters: "\u{2269}",
        });
    }

    if first_char == 'g' && try_read("ne;") {
        return Some(CharRef {
            name: "ne;",
            characters: "\u{2a88}",
        });
    }

    if first_char == 'h' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d525}",
        });
    }

    if first_char == 'i' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{438}",
        });
    }

    if first_char == 'i' && try_read("ff;") {
        return Some(CharRef {
            name: "ff;",
            characters: "\u{21d4}",
        });
    }

    if first_char == 'i' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d526}",
        });
    }

    if first_char == 'i' && try_read("nt;") {
        return Some(CharRef {
            name: "nt;",
            characters: "\u{222b}",
        });
    }

    if first_char == 'i' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{ef}",
        });
    }

    if first_char == 'j' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{439}",
        });
    }

    if first_char == 'j' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d527}",
        });
    }

    if first_char == 'k' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{43a}",
        });
    }

    if first_char == 'k' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d528}",
        });
    }

    if first_char == 'l' && try_read("Eg;") {
        return Some(CharRef {
            name: "Eg;",
            characters: "\u{2a8b}",
        });
    }

    if first_char == 'l' && try_read("ap;") {
        return Some(CharRef {
            name: "ap;",
            characters: "\u{2a85}",
        });
    }

    if first_char == 'l' && try_read("at;") {
        return Some(CharRef {
            name: "at;",
            characters: "\u{2aab}",
        });
    }

    if first_char == 'l' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{43b}",
        });
    }

    if first_char == 'l' && try_read("eg;") {
        return Some(CharRef {
            name: "eg;",
            characters: "\u{22da}",
        });
    }

    if first_char == 'l' && try_read("eq;") {
        return Some(CharRef {
            name: "eq;",
            characters: "\u{2264}",
        });
    }

    if first_char == 'l' && try_read("es;") {
        return Some(CharRef {
            name: "es;",
            characters: "\u{2a7d}",
        });
    }

    if first_char == 'l' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d529}",
        });
    }

    if first_char == 'l' && try_read("gE;") {
        return Some(CharRef {
            name: "gE;",
            characters: "\u{2a91}",
        });
    }

    if first_char == 'l' && try_read("nE;") {
        return Some(CharRef {
            name: "nE;",
            characters: "\u{2268}",
        });
    }

    if first_char == 'l' && try_read("ne;") {
        return Some(CharRef {
            name: "ne;",
            characters: "\u{2a87}",
        });
    }

    if first_char == 'l' && try_read("oz;") {
        return Some(CharRef {
            name: "oz;",
            characters: "\u{25ca}",
        });
    }

    if first_char == 'l' && try_read("rm;") {
        return Some(CharRef {
            name: "rm;",
            characters: "\u{200e}",
        });
    }

    if first_char == 'l' && try_read("sh;") {
        return Some(CharRef {
            name: "sh;",
            characters: "\u{21b0}",
        });
    }

    if first_char == 'm' && try_read("acr") {
        return Some(CharRef {
            name: "acr",
            characters: "\u{af}",
        });
    }

    if first_char == 'm' && try_read("ap;") {
        return Some(CharRef {
            name: "ap;",
            characters: "\u{21a6}",
        });
    }

    if first_char == 'm' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{43c}",
        });
    }

    if first_char == 'm' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d52a}",
        });
    }

    if first_char == 'm' && try_read("ho;") {
        return Some(CharRef {
            name: "ho;",
            characters: "\u{2127}",
        });
    }

    if first_char == 'm' && try_read("id;") {
        return Some(CharRef {
            name: "id;",
            characters: "\u{2223}",
        });
    }

    if first_char == 'n' && try_read("Gg;") {
        return Some(CharRef {
            name: "Gg;",
            characters: "\u{22d9}\u{338}",
        });
    }

    if first_char == 'n' && try_read("Gt;") {
        return Some(CharRef {
            name: "Gt;",
            characters: "\u{226b}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("Ll;") {
        return Some(CharRef {
            name: "Ll;",
            characters: "\u{22d8}\u{338}",
        });
    }

    if first_char == 'n' && try_read("Lt;") {
        return Some(CharRef {
            name: "Lt;",
            characters: "\u{226a}\u{20d2}",
        });
    }

    if first_char == 'n' && try_read("ap;") {
        return Some(CharRef {
            name: "ap;",
            characters: "\u{2249}",
        });
    }

    if first_char == 'n' && try_read("bsp") {
        return Some(CharRef {
            name: "bsp",
            characters: "\u{a0}",
        });
    }

    if first_char == 'n' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{43d}",
        });
    }

    if first_char == 'n' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d52b}",
        });
    }

    if first_char == 'n' && try_read("gE;") {
        return Some(CharRef {
            name: "gE;",
            characters: "\u{2267}\u{338}",
        });
    }

    if first_char == 'n' && try_read("ge;") {
        return Some(CharRef {
            name: "ge;",
            characters: "\u{2271}",
        });
    }

    if first_char == 'n' && try_read("gt;") {
        return Some(CharRef {
            name: "gt;",
            characters: "\u{226f}",
        });
    }

    if first_char == 'n' && try_read("is;") {
        return Some(CharRef {
            name: "is;",
            characters: "\u{22fc}",
        });
    }

    if first_char == 'n' && try_read("iv;") {
        return Some(CharRef {
            name: "iv;",
            characters: "\u{220b}",
        });
    }

    if first_char == 'n' && try_read("lE;") {
        return Some(CharRef {
            name: "lE;",
            characters: "\u{2266}\u{338}",
        });
    }

    if first_char == 'n' && try_read("le;") {
        return Some(CharRef {
            name: "le;",
            characters: "\u{2270}",
        });
    }

    if first_char == 'n' && try_read("lt;") {
        return Some(CharRef {
            name: "lt;",
            characters: "\u{226e}",
        });
    }

    if first_char == 'n' && try_read("ot;") {
        return Some(CharRef {
            name: "ot;",
            characters: "\u{ac}",
        });
    }

    if first_char == 'n' && try_read("pr;") {
        return Some(CharRef {
            name: "pr;",
            characters: "\u{2280}",
        });
    }

    if first_char == 'n' && try_read("sc;") {
        return Some(CharRef {
            name: "sc;",
            characters: "\u{2281}",
        });
    }

    if first_char == 'n' && try_read("um;") {
        return Some(CharRef {
            name: "um;",
            characters: "\u{23}",
        });
    }

    if first_char == 'o' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{43e}",
        });
    }

    if first_char == 'o' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d52c}",
        });
    }

    if first_char == 'o' && try_read("gt;") {
        return Some(CharRef {
            name: "gt;",
            characters: "\u{29c1}",
        });
    }

    if first_char == 'o' && try_read("hm;") {
        return Some(CharRef {
            name: "hm;",
            characters: "\u{3a9}",
        });
    }

    if first_char == 'o' && try_read("lt;") {
        return Some(CharRef {
            name: "lt;",
            characters: "\u{29c0}",
        });
    }

    if first_char == 'o' && try_read("rd;") {
        return Some(CharRef {
            name: "rd;",
            characters: "\u{2a5d}",
        });
    }

    if first_char == 'o' && try_read("rdf") {
        return Some(CharRef {
            name: "rdf",
            characters: "\u{aa}",
        });
    }

    if first_char == 'o' && try_read("rdm") {
        return Some(CharRef {
            name: "rdm",
            characters: "\u{ba}",
        });
    }

    if first_char == 'o' && try_read("rv;") {
        return Some(CharRef {
            name: "rv;",
            characters: "\u{2a5b}",
        });
    }

    if first_char == 'o' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{f6}",
        });
    }

    if first_char == 'p' && try_read("ar;") {
        return Some(CharRef {
            name: "ar;",
            characters: "\u{2225}",
        });
    }

    if first_char == 'p' && try_read("ara") {
        return Some(CharRef {
            name: "ara",
            characters: "\u{b6}",
        });
    }

    if first_char == 'p' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{43f}",
        });
    }

    if first_char == 'p' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d52d}",
        });
    }

    if first_char == 'p' && try_read("hi;") {
        return Some(CharRef {
            name: "hi;",
            characters: "\u{3c6}",
        });
    }

    if first_char == 'p' && try_read("iv;") {
        return Some(CharRef {
            name: "iv;",
            characters: "\u{3d6}",
        });
    }

    if first_char == 'p' && try_read("rE;") {
        return Some(CharRef {
            name: "rE;",
            characters: "\u{2ab3}",
        });
    }

    if first_char == 'p' && try_read("re;") {
        return Some(CharRef {
            name: "re;",
            characters: "\u{2aaf}",
        });
    }

    if first_char == 'p' && try_read("si;") {
        return Some(CharRef {
            name: "si;",
            characters: "\u{3c8}",
        });
    }

    if first_char == 'q' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d52e}",
        });
    }

    if first_char == 'q' && try_read("uot") {
        return Some(CharRef {
            name: "uot",
            characters: "\u{22}",
        });
    }

    if first_char == 'r' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{440}",
        });
    }

    if first_char == 'r' && try_read("eg;") {
        return Some(CharRef {
            name: "eg;",
            characters: "\u{ae}",
        });
    }

    if first_char == 'r' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d52f}",
        });
    }

    if first_char == 'r' && try_read("ho;") {
        return Some(CharRef {
            name: "ho;",
            characters: "\u{3c1}",
        });
    }

    if first_char == 'r' && try_read("lm;") {
        return Some(CharRef {
            name: "lm;",
            characters: "\u{200f}",
        });
    }

    if first_char == 'r' && try_read("sh;") {
        return Some(CharRef {
            name: "sh;",
            characters: "\u{21b1}",
        });
    }

    if first_char == 's' && try_read("cE;") {
        return Some(CharRef {
            name: "cE;",
            characters: "\u{2ab4}",
        });
    }

    if first_char == 's' && try_read("ce;") {
        return Some(CharRef {
            name: "ce;",
            characters: "\u{2ab0}",
        });
    }

    if first_char == 's' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{441}",
        });
    }

    if first_char == 's' && try_read("ect") {
        return Some(CharRef {
            name: "ect",
            characters: "\u{a7}",
        });
    }

    if first_char == 's' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d530}",
        });
    }

    if first_char == 's' && try_read("hy;") {
        return Some(CharRef {
            name: "hy;",
            characters: "\u{ad}",
        });
    }

    if first_char == 's' && try_read("im;") {
        return Some(CharRef {
            name: "im;",
            characters: "\u{223c}",
        });
    }

    if first_char == 's' && try_read("mt;") {
        return Some(CharRef {
            name: "mt;",
            characters: "\u{2aaa}",
        });
    }

    if first_char == 's' && try_read("ol;") {
        return Some(CharRef {
            name: "ol;",
            characters: "\u{2f}",
        });
    }

    if first_char == 's' && try_read("qu;") {
        return Some(CharRef {
            name: "qu;",
            characters: "\u{25a1}",
        });
    }

    if first_char == 's' && try_read("ub;") {
        return Some(CharRef {
            name: "ub;",
            characters: "\u{2282}",
        });
    }

    if first_char == 's' && try_read("um;") {
        return Some(CharRef {
            name: "um;",
            characters: "\u{2211}",
        });
    }

    if first_char == 's' && try_read("up1") {
        return Some(CharRef {
            name: "up1",
            characters: "\u{b9}",
        });
    }

    if first_char == 's' && try_read("up2") {
        return Some(CharRef {
            name: "up2",
            characters: "\u{b2}",
        });
    }

    if first_char == 's' && try_read("up3") {
        return Some(CharRef {
            name: "up3",
            characters: "\u{b3}",
        });
    }

    if first_char == 's' && try_read("up;") {
        return Some(CharRef {
            name: "up;",
            characters: "\u{2283}",
        });
    }

    if first_char == 't' && try_read("au;") {
        return Some(CharRef {
            name: "au;",
            characters: "\u{3c4}",
        });
    }

    if first_char == 't' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{442}",
        });
    }

    if first_char == 't' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d531}",
        });
    }

    if first_char == 't' && try_read("op;") {
        return Some(CharRef {
            name: "op;",
            characters: "\u{22a4}",
        });
    }

    if first_char == 'u' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{443}",
        });
    }

    if first_char == 'u' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d532}",
        });
    }

    if first_char == 'u' && try_read("ml;") {
        return Some(CharRef {
            name: "ml;",
            characters: "\u{a8}",
        });
    }

    if first_char == 'u' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{fc}",
        });
    }

    if first_char == 'v' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{432}",
        });
    }

    if first_char == 'v' && try_read("ee;") {
        return Some(CharRef {
            name: "ee;",
            characters: "\u{2228}",
        });
    }

    if first_char == 'v' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d533}",
        });
    }

    if first_char == 'w' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d534}",
        });
    }

    if first_char == 'x' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d535}",
        });
    }

    if first_char == 'y' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{44b}",
        });
    }

    if first_char == 'y' && try_read("en;") {
        return Some(CharRef {
            name: "en;",
            characters: "\u{a5}",
        });
    }

    if first_char == 'y' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d536}",
        });
    }

    if first_char == 'y' && try_read("uml") {
        return Some(CharRef {
            name: "uml",
            characters: "\u{ff}",
        });
    }

    if first_char == 'z' && try_read("cy;") {
        return Some(CharRef {
            name: "cy;",
            characters: "\u{437}",
        });
    }

    if first_char == 'z' && try_read("fr;") {
        return Some(CharRef {
            name: "fr;",
            characters: "\u{1d537}",
        });
    }

    if first_char == 'z' && try_read("wj;") {
        return Some(CharRef {
            name: "wj;",
            characters: "\u{200d}",
        });
    }

    if first_char == 'A' && try_read("MP") {
        return Some(CharRef {
            name: "MP",
            characters: "\u{26}",
        });
    }

    if first_char == 'D' && try_read("D;") {
        return Some(CharRef {
            name: "D;",
            characters: "\u{2145}",
        });
    }

    if first_char == 'E' && try_read("TH") {
        return Some(CharRef {
            name: "TH",
            characters: "\u{d0}",
        });
    }

    if first_char == 'G' && try_read("T;") {
        return Some(CharRef {
            name: "T;",
            characters: "\u{3e}",
        });
    }

    if first_char == 'G' && try_read("g;") {
        return Some(CharRef {
            name: "g;",
            characters: "\u{22d9}",
        });
    }

    if first_char == 'G' && try_read("t;") {
        return Some(CharRef {
            name: "t;",
            characters: "\u{226b}",
        });
    }

    if first_char == 'I' && try_read("m;") {
        return Some(CharRef {
            name: "m;",
            characters: "\u{2111}",
        });
    }

    if first_char == 'L' && try_read("T;") {
        return Some(CharRef {
            name: "T;",
            characters: "\u{3c}",
        });
    }

    if first_char == 'L' && try_read("l;") {
        return Some(CharRef {
            name: "l;",
            characters: "\u{22d8}",
        });
    }

    if first_char == 'L' && try_read("t;") {
        return Some(CharRef {
            name: "t;",
            characters: "\u{226a}",
        });
    }

    if first_char == 'M' && try_read("u;") {
        return Some(CharRef {
            name: "u;",
            characters: "\u{39c}",
        });
    }

    if first_char == 'N' && try_read("u;") {
        return Some(CharRef {
            name: "u;",
            characters: "\u{39d}",
        });
    }

    if first_char == 'O' && try_read("r;") {
        return Some(CharRef {
            name: "r;",
            characters: "\u{2a54}",
        });
    }

    if first_char == 'P' && try_read("i;") {
        return Some(CharRef {
            name: "i;",
            characters: "\u{3a0}",
        });
    }

    if first_char == 'P' && try_read("r;") {
        return Some(CharRef {
            name: "r;",
            characters: "\u{2abb}",
        });
    }

    if first_char == 'R' && try_read("EG") {
        return Some(CharRef {
            name: "EG",
            characters: "\u{ae}",
        });
    }

    if first_char == 'R' && try_read("e;") {
        return Some(CharRef {
            name: "e;",
            characters: "\u{211c}",
        });
    }

    if first_char == 'S' && try_read("c;") {
        return Some(CharRef {
            name: "c;",
            characters: "\u{2abc}",
        });
    }

    if first_char == 'X' && try_read("i;") {
        return Some(CharRef {
            name: "i;",
            characters: "\u{39e}",
        });
    }

    if first_char == 'a' && try_read("c;") {
        return Some(CharRef {
            name: "c;",
            characters: "\u{223e}",
        });
    }

    if first_char == 'a' && try_read("f;") {
        return Some(CharRef {
            name: "f;",
            characters: "\u{2061}",
        });
    }

    if first_char == 'a' && try_read("mp") {
        return Some(CharRef {
            name: "mp",
            characters: "\u{26}",
        });
    }

    if first_char == 'a' && try_read("p;") {
        return Some(CharRef {
            name: "p;",
            characters: "\u{2248}",
        });
    }

    if first_char == 'd' && try_read("d;") {
        return Some(CharRef {
            name: "d;",
            characters: "\u{2146}",
        });
    }

    if first_char == 'd' && try_read("eg") {
        return Some(CharRef {
            name: "eg",
            characters: "\u{b0}",
        });
    }

    if first_char == 'e' && try_read("e;") {
        return Some(CharRef {
            name: "e;",
            characters: "\u{2147}",
        });
    }

    if first_char == 'e' && try_read("g;") {
        return Some(CharRef {
            name: "g;",
            characters: "\u{2a9a}",
        });
    }

    if first_char == 'e' && try_read("l;") {
        return Some(CharRef {
            name: "l;",
            characters: "\u{2a99}",
        });
    }

    if first_char == 'e' && try_read("th") {
        return Some(CharRef {
            name: "th",
            characters: "\u{f0}",
        });
    }

    if first_char == 'g' && try_read("E;") {
        return Some(CharRef {
            name: "E;",
            characters: "\u{2267}",
        });
    }

    if first_char == 'g' && try_read("e;") {
        return Some(CharRef {
            name: "e;",
            characters: "\u{2265}",
        });
    }

    if first_char == 'g' && try_read("g;") {
        return Some(CharRef {
            name: "g;",
            characters: "\u{226b}",
        });
    }

    if first_char == 'g' && try_read("l;") {
        return Some(CharRef {
            name: "l;",
            characters: "\u{2277}",
        });
    }

    if first_char == 'g' && try_read("t;") {
        return Some(CharRef {
            name: "t;",
            characters: "\u{3e}",
        });
    }

    if first_char == 'i' && try_read("c;") {
        return Some(CharRef {
            name: "c;",
            characters: "\u{2063}",
        });
    }

    if first_char == 'i' && try_read("i;") {
        return Some(CharRef {
            name: "i;",
            characters: "\u{2148}",
        });
    }

    if first_char == 'i' && try_read("n;") {
        return Some(CharRef {
            name: "n;",
            characters: "\u{2208}",
        });
    }

    if first_char == 'i' && try_read("t;") {
        return Some(CharRef {
            name: "t;",
            characters: "\u{2062}",
        });
    }

    if first_char == 'l' && try_read("E;") {
        return Some(CharRef {
            name: "E;",
            characters: "\u{2266}",
        });
    }

    if first_char == 'l' && try_read("e;") {
        return Some(CharRef {
            name: "e;",
            characters: "\u{2264}",
        });
    }

    if first_char == 'l' && try_read("g;") {
        return Some(CharRef {
            name: "g;",
            characters: "\u{2276}",
        });
    }

    if first_char == 'l' && try_read("l;") {
        return Some(CharRef {
            name: "l;",
            characters: "\u{226a}",
        });
    }

    if first_char == 'l' && try_read("t;") {
        return Some(CharRef {
            name: "t;",
            characters: "\u{3c}",
        });
    }

    if first_char == 'm' && try_read("p;") {
        return Some(CharRef {
            name: "p;",
            characters: "\u{2213}",
        });
    }

    if first_char == 'm' && try_read("u;") {
        return Some(CharRef {
            name: "u;",
            characters: "\u{3bc}",
        });
    }

    if first_char == 'n' && try_read("e;") {
        return Some(CharRef {
            name: "e;",
            characters: "\u{2260}",
        });
    }

    if first_char == 'n' && try_read("i;") {
        return Some(CharRef {
            name: "i;",
            characters: "\u{220b}",
        });
    }

    if first_char == 'n' && try_read("ot") {
        return Some(CharRef {
            name: "ot",
            characters: "\u{ac}",
        });
    }

    if first_char == 'n' && try_read("u;") {
        return Some(CharRef {
            name: "u;",
            characters: "\u{3bd}",
        });
    }

    if first_char == 'o' && try_read("S;") {
        return Some(CharRef {
            name: "S;",
            characters: "\u{24c8}",
        });
    }

    if first_char == 'o' && try_read("r;") {
        return Some(CharRef {
            name: "r;",
            characters: "\u{2228}",
        });
    }

    if first_char == 'p' && try_read("i;") {
        return Some(CharRef {
            name: "i;",
            characters: "\u{3c0}",
        });
    }

    if first_char == 'p' && try_read("m;") {
        return Some(CharRef {
            name: "m;",
            characters: "\u{b1}",
        });
    }

    if first_char == 'p' && try_read("r;") {
        return Some(CharRef {
            name: "r;",
            characters: "\u{227a}",
        });
    }

    if first_char == 'r' && try_read("eg") {
        return Some(CharRef {
            name: "eg",
            characters: "\u{ae}",
        });
    }

    if first_char == 'r' && try_read("x;") {
        return Some(CharRef {
            name: "x;",
            characters: "\u{211e}",
        });
    }

    if first_char == 's' && try_read("c;") {
        return Some(CharRef {
            name: "c;",
            characters: "\u{227b}",
        });
    }

    if first_char == 's' && try_read("hy") {
        return Some(CharRef {
            name: "hy",
            characters: "\u{ad}",
        });
    }

    if first_char == 'u' && try_read("ml") {
        return Some(CharRef {
            name: "ml",
            characters: "\u{a8}",
        });
    }

    if first_char == 'w' && try_read("p;") {
        return Some(CharRef {
            name: "p;",
            characters: "\u{2118}",
        });
    }

    if first_char == 'w' && try_read("r;") {
        return Some(CharRef {
            name: "r;",
            characters: "\u{2240}",
        });
    }

    if first_char == 'x' && try_read("i;") {
        return Some(CharRef {
            name: "i;",
            characters: "\u{3be}",
        });
    }

    if first_char == 'y' && try_read("en") {
        return Some(CharRef {
            name: "en",
            characters: "\u{a5}",
        });
    }

    if first_char == 'G' && try_read("T") {
        return Some(CharRef {
            name: "T",
            characters: "\u{3e}",
        });
    }

    if first_char == 'L' && try_read("T") {
        return Some(CharRef {
            name: "T",
            characters: "\u{3c}",
        });
    }

    if first_char == 'g' && try_read("t") {
        return Some(CharRef {
            name: "t",
            characters: "\u{3e}",
        });
    }

    if first_char == 'l' && try_read("t") {
        return Some(CharRef {
            name: "t",
            characters: "\u{3c}",
        });
    }
    None
}