//! Constants needed to parse markdown.
//!
//! Most of these constants are magic numbers, such as the number of markers
//! needed to parse [code (fenced)][code_fenced]
//! ([`CODE_FENCED_SEQUENCE_SIZE_MIN`][]) or the max number of allowed markers
//! in a [heading (atx)][heading_atx]
//! ([`HEADING_ATX_OPENING_FENCE_SIZE_MAX`][]).
//!
//! Some constants are instead lists of things, such as the list of tag names
//! considered in the **raw** production of [HTML (flow)][html_flow]
//! ([`HTML_RAW_NAMES`][]), or the list of allowed named character references
//! ([`CHARACTER_REFERENCE_NAMES`][]).
//!
//! [code_fenced]: crate::construct::code_fenced
//! [heading_atx]: crate::construct::heading_atx
//! [html_flow]: crate::construct::html_flow
/// The number of characters allowed in a protocol of an [autolink][].
///
/// The protocol part is the `xxx` in `<xxx://example.com>`.
/// 32 characters is fine, 33 is too many.
///
/// [autolink]: crate::construct::autolink
pub const AUTOLINK_SCHEME_SIZE_MAX: usize = 32;
/// The number of characters allowed in a domain of an email [autolink][].
///
/// There can be multiple “domains”.
/// A domain part is each `xxx` in `<example@xxx.xxx.xxx>`.
/// 63 characters is fine, 64 is too many.
///
/// [autolink]: crate::construct::autolink
pub const AUTOLINK_DOMAIN_SIZE_MAX: usize = 63;
/// The max number of characters in a decimal numeric
/// [character reference][character_reference].
///
/// To illustrate, this allows `�` and disallows `�`.
/// This limit is imposed because all bigger numbers are invalid.
///
/// [character_reference]: crate::construct::character_reference
pub const CHARACTER_REFERENCE_DECIMAL_SIZE_MAX: usize = 7;
/// The max number of characters in a hexadecimal numeric
/// [character reference][character_reference].
///
/// To illustrate, this allows `�` and disallows `�`.
/// This limit is imposed because all bigger numbers are invalid.
///
/// [character_reference]: crate::construct::character_reference
pub const CHARACTER_REFERENCE_HEXADECIMAL_SIZE_MAX: usize = 6;
/// The max number of characters in a named
/// [character reference][character_reference].
///
/// This is the number of the longest name in [`CHARACTER_REFERENCE_NAMES`][].
/// It allows `∳` and prevents the parser from
/// continuing for eons.
///
/// [character_reference]: crate::construct::character_reference
pub const CHARACTER_REFERENCE_NAMED_SIZE_MAX: usize = 31;
/// The number of markers needed for [code (fenced)][code_fenced] to form.
///
/// Like many things in markdown, the number is `3`.
///
/// [code_fenced]: crate::construct::code_fenced
pub const CODE_FENCED_SEQUENCE_SIZE_MIN: usize = 3;
/// The number of spaces needed, before a line ending, for a [hard break
/// (trailing)][hard_break_trailing] to form.
///
/// [hard_break_trailing]: crate::construct::hard_break_trailing
pub const HARD_BREAK_PREFIX_SIZE_MIN: usize = 2;
/// The max number of markers allowed to form a [heading (atx)][heading_atx].
///
/// This limitation is imposed by HTML, which imposes a max heading rank of
/// `6`.
///
/// [heading_atx]: crate::construct::heading_atx
pub const HEADING_ATX_OPENING_FENCE_SIZE_MAX: usize = 6;
/// List of HTML tag names that form the **basic** production of
/// [HTML (flow)][html_flow].
///
/// The **basic** production allows interleaving HTML and markdown with blank
/// lines and allows flow (block) elements to interrupt definitions, paragraphs,
/// and heading (setext).
/// Tag name matching must be performed insensitive to case, and thus this list
/// includes lowercase tag names.
///
/// Tag names not on this list result in the **complete** production.
///
/// > 👉 **Note**: `source` was removed on `main` of the `CommonMark` spec and
/// > is slated to be released in `CommonMark@0.31`.
///
/// ## References
///
/// * [*§ 4.6 HTML blocks* in `CommonMark`](https://spec.commonmark.org/0.30/#html-blocks)
/// * [*Remove source element as HTML block start condition* as `commonmark/commonmark-spec#710`](https://github.com/commonmark/commonmark-spec/pull/710)
///
/// [html_flow]: crate::construct::html_flow
pub const HTML_BLOCK_NAMES: [&str; 61] = [
"address",
"article",
"aside",
"base",
"basefont",
"blockquote",
"body",
"caption",
"center",
"col",
"colgroup",
"dd",
"details",
"dialog",
"dir",
"div",
"dl",
"dt",
"fieldset",
"figcaption",
"figure",
"footer",
"form",
"frame",
"frameset",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"head",
"header",
"hr",
"html",
"iframe",
"legend",
"li",
"link",
"main",
"menu",
"menuitem",
"nav",
"noframes",
"ol",
"optgroup",
"option",
"p",
"param",
"section",
"summary",
"table",
"tbody",
"td",
"tfoot",
"th",
"thead",
"title",
"tr",
"track",
"ul",
];
/// List of HTML tag names that form the **raw** production of
/// [HTML (flow)][html_flow].
///
/// The **raw** production allows blank lines and thus no interleaving with
/// markdown.
/// Tag name matching must be performed insensitive to case, and thus this list
/// includes lowercase tag names.
///
/// The number of the longest tag name is also stored as a constant in
/// [`HTML_RAW_SIZE_MAX`][].
///
/// > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.
///
/// ## References
///
/// * [*§ 4.6 HTML blocks* in `CommonMark`](https://spec.commonmark.org/0.30/#html-blocks)
///
/// [html_flow]: crate::construct::html_flow
pub const HTML_RAW_NAMES: [&str; 4] = ["pre", "script", "style", "textarea"];
/// The number of the longest tag name in [`HTML_RAW_NAMES`][].
///
/// This is currently the size of `textarea`.
pub const HTML_RAW_SIZE_MAX: usize = 8;
/// To safeguard performance, labels are capped at a large number: `999`.
pub const LINK_REFERENCE_SIZE_MAX: usize = 999;
/// To do.
/// See: <https://spec.commonmark.org/0.30/#ordered-list-marker>
pub const LIST_ITEM_VALUE_SIZE_MAX: usize = 10;
/// Maximum allowed unbalanced parens in destination.
///
/// There can be many balanced parens, but if there are 33 opens that were not
/// yet closed, the destination does not parse.
/// `CommonMark` requires that at least 3 opening parens are allowed.
/// See: <https://spec.commonmark.org/0.30/#link-destination>,
/// In practice, this is quite low, and several places instead cap it at 32.
/// See: <https://github.com/remarkjs/react-markdown/issues/658#issuecomment-984345577>.
pub const RESOURCE_DESTINATION_BALANCE_MAX: usize = 32;
/// List of protocols allowed, when operating safely, as `href` on `a`.
///
/// This list is based on what is allowed by GitHub.
pub const SAFE_PROTOCOL_HREF: [&str; 6] = ["http", "https", "irc", "ircs", "mailto", "xmpp"];
/// List of protocols allowed, when operating safely, as `src` on `img`.
///
/// This list is based on what is allowed by GitHub.
pub const SAFE_PROTOCOL_SRC: [&str; 2] = ["http", "https"];
/// The number of characters that form a tab stop.
///
/// This relates to the number of whitespace characters needed to form certain
/// constructs in markdown, most notable the whitespace required to form
/// [code (indented)][code_indented].
///
/// > 👉 **Note**: each [`Code::VirtualSpace`][vs] and `Code::Char('\t' | ' ')`
/// > counts.
///
/// [code_indented]: crate::construct::code_indented
/// [vs]: crate::tokenizer::Code::VirtualSpace
pub const TAB_SIZE: usize = 4;
/// The number of markers needed for a [thematic break][thematic_break] to form.
///
/// Like many things in markdown, the number is `3`.
///
/// [thematic_break]: crate::construct::thematic_break
pub const THEMATIC_BREAK_MARKER_COUNT_MIN: usize = 3;
// Important: please touch the below lists as few times as possible to keep Git small.
/// List of names that can form a named
/// [character reference][character_reference].
///
/// This list is sensitive to casing.
///
/// The number of the longest name (`CounterClockwiseContourIntegral`) is also
/// stored as a constant in [`CHARACTER_REFERENCE_NAMED_SIZE_MAX`][].
///
/// The corresponding values of this list are stored in
/// [`CHARACTER_REFERENCE_VALUES`][].
/// They correspond through their index.
///
/// ## References
///
/// * [*§ 2.5 Entity and numeric character references* in `CommonMark`](https://spec.commonmark.org/0.30/#entity-and-numeric-character-references)
///
/// [character_reference]: crate::construct::character_reference
pub const CHARACTER_REFERENCE_NAMES: [&str; 2125] = [
"AElig",
"AMP",
"Aacute",
"Abreve",
"Acirc",
"Acy",
"Afr",
"Agrave",
"Alpha",
"Amacr",
"And",
"Aogon",
"Aopf",
"ApplyFunction",
"Aring",
"Ascr",
"Assign",
"Atilde",
"Auml",
"Backslash",
"Barv",
"Barwed",
"Bcy",
"Because",
"Bernoullis",
"Beta",
"Bfr",
"Bopf",
"Breve",
"Bscr",
"Bumpeq",
"CHcy",
"COPY",
"Cacute",
"Cap",
"CapitalDifferentialD",
"Cayleys",
"Ccaron",
"Ccedil",
"Ccirc",
"Cconint",
"Cdot",
"Cedilla",
"CenterDot",
"Cfr",
"Chi",
"CircleDot",
"CircleMinus",
"CirclePlus",
"CircleTimes",
"ClockwiseContourIntegral",
"CloseCurlyDoubleQuote",
"CloseCurlyQuote",
"Colon",
"Colone",
"Congruent",
"Conint",
"ContourIntegral",
"Copf",
"Coproduct",
"CounterClockwiseContourIntegral",
"Cross",
"Cscr",
"Cup",
"CupCap",
"DD",
"DDotrahd",
"DJcy",
"DScy",
"DZcy",
"Dagger",
"Darr",
"Dashv",
"Dcaron",
"Dcy",
"Del",
"Delta",
"Dfr",
"DiacriticalAcute",
"DiacriticalDot",
"DiacriticalDoubleAcute",
"DiacriticalGrave",
"DiacriticalTilde",
"Diamond",
"DifferentialD",
"Dopf",
"Dot",
"DotDot",
"DotEqual",
"DoubleContourIntegral",
"DoubleDot",
"DoubleDownArrow",
"DoubleLeftArrow",
"DoubleLeftRightArrow",
"DoubleLeftTee",
"DoubleLongLeftArrow",
"DoubleLongLeftRightArrow",
"DoubleLongRightArrow",
"DoubleRightArrow",
"DoubleRightTee",
"DoubleUpArrow",
"DoubleUpDownArrow",
"DoubleVerticalBar",
"DownArrow",
"DownArrowBar",
"DownArrowUpArrow",
"DownBreve",
"DownLeftRightVector",
"DownLeftTeeVector",
"DownLeftVector",
"DownLeftVectorBar",
"DownRightTeeVector",
"DownRightVector",
"DownRightVectorBar",
"DownTee",
"DownTeeArrow",
"Downarrow",
"Dscr",
"Dstrok",
"ENG",
"ETH",
"Eacute",
"Ecaron",
"Ecirc",
"Ecy",
"Edot",
"Efr",
"Egrave",
"Element",
"Emacr",
"EmptySmallSquare",
"EmptyVerySmallSquare",
"Eogon",
"Eopf",
"Epsilon",
"Equal",
"EqualTilde",
"Equilibrium",
"Escr",
"Esim",
"Eta",
"Euml",
"Exists",
"ExponentialE",
"Fcy",
"Ffr",
"FilledSmallSquare",
"FilledVerySmallSquare",
"Fopf",
"ForAll",
"Fouriertrf",
"Fscr",
"GJcy",
"GT",
"Gamma",
"Gammad",
"Gbreve",
"Gcedil",
"Gcirc",
"Gcy",
"Gdot",
"Gfr",
"Gg",
"Gopf",
"GreaterEqual",
"GreaterEqualLess",
"GreaterFullEqual",
"GreaterGreater",
"GreaterLess",
"GreaterSlantEqual",
"GreaterTilde",
"Gscr",
"Gt",
"HARDcy",
"Hacek",
"Hat",
"Hcirc",
"Hfr",
"HilbertSpace",
"Hopf",
"HorizontalLine",
"Hscr",
"Hstrok",
"HumpDownHump",
"HumpEqual",
"IEcy",
"IJlig",
"IOcy",
"Iacute",
"Icirc",
"Icy",
"Idot",
"Ifr",
"Igrave",
"Im",
"Imacr",
"ImaginaryI",
"Implies",
"Int",
"Integral",
"Intersection",
"InvisibleComma",
"InvisibleTimes",
"Iogon",
"Iopf",
"Iota",
"Iscr",
"Itilde",
"Iukcy",
"Iuml",
"Jcirc",
"Jcy",
"Jfr",
"Jopf",
"Jscr",
"Jsercy",
"Jukcy",
"KHcy",
"KJcy",
"Kappa",
"Kcedil",
"Kcy",
"Kfr",
"Kopf",
"Kscr",
"LJcy",
"LT",
"Lacute",
"Lambda",
"Lang",
"Laplacetrf",
"Larr",
"Lcaron",
"Lcedil",
"Lcy",
"LeftAngleBracket",
"LeftArrow",
"LeftArrowBar",
"LeftArrowRightArrow",
"LeftCeiling",
"LeftDoubleBracket",
"LeftDownTeeVector",
"LeftDownVector",
"LeftDownVectorBar",
"LeftFloor",
"LeftRightArrow",
"LeftRightVector",
"LeftTee",
"LeftTeeArrow",
"LeftTeeVector",
"LeftTriangle",
"LeftTriangleBar",
"LeftTriangleEqual",
"LeftUpDownVector",
"LeftUpTeeVector",
"LeftUpVector",
"LeftUpVectorBar",
"LeftVector",
"LeftVectorBar",
"Leftarrow",
"Leftrightarrow",
"LessEqualGreater",
"LessFullEqual",
"LessGreater",
"LessLess",
"LessSlantEqual",
"LessTilde",
"Lfr",
"Ll",
"Lleftarrow",
"Lmidot",
"LongLeftArrow",
"LongLeftRightArrow",
"LongRightArrow",
"Longleftarrow",
"Longleftrightarrow",
"Longrightarrow",
"Lopf",
"LowerLeftArrow",
"LowerRightArrow",
"Lscr",
"Lsh",
"Lstrok",
"Lt",
"Map",
"Mcy",
"MediumSpace",
"Mellintrf",
"Mfr",
"MinusPlus",
"Mopf",
"Mscr",
"Mu",
"NJcy",
"Nacute",
"Ncaron",
"Ncedil",
"Ncy",
"NegativeMediumSpace",
"NegativeThickSpace",
"NegativeThinSpace",
"NegativeVeryThinSpace",
"NestedGreaterGreater",
"NestedLessLess",
"NewLine",
"Nfr",
"NoBreak",
"NonBreakingSpace",
"Nopf",
"Not",
"NotCongruent",
"NotCupCap",
"NotDoubleVerticalBar",
"NotElement",
"NotEqual",
"NotEqualTilde",
"NotExists",
"NotGreater",
"NotGreaterEqual",
"NotGreaterFullEqual",
"NotGreaterGreater",
"NotGreaterLess",
"NotGreaterSlantEqual",
"NotGreaterTilde",
"NotHumpDownHump",
"NotHumpEqual",
"NotLeftTriangle",
"NotLeftTriangleBar",
"NotLeftTriangleEqual",
"NotLess",
"NotLessEqual",
"NotLessGreater",
"NotLessLess",
"NotLessSlantEqual",
"NotLessTilde",
"NotNestedGreaterGreater",
"NotNestedLessLess",
"NotPrecedes",
"NotPrecedesEqual",
"NotPrecedesSlantEqual",
"NotReverseElement",
"NotRightTriangle",
"NotRightTriangleBar",
"NotRightTriangleEqual",
"NotSquareSubset",
"NotSquareSubsetEqual",
"NotSquareSuperset",
"NotSquareSupersetEqual",
"NotSubset",
"NotSubsetEqual",
"NotSucceeds",
"NotSucceedsEqual",
"NotSucceedsSlantEqual",
"NotSucceedsTilde",
"NotSuperset",
"NotSupersetEqual",
"NotTilde",
"NotTildeEqual",
"NotTildeFullEqual",
"NotTildeTilde",
"NotVerticalBar",
"Nscr",
"Ntilde",
"Nu",
"OElig",
"Oacute",
"Ocirc",
"Ocy",
"Odblac",
"Ofr",
"Ograve",
"Omacr",
"Omega",
"Omicron",
"Oopf",
"OpenCurlyDoubleQuote",
"OpenCurlyQuote",
"Or",
"Oscr",
"Oslash",
"Otilde",
"Otimes",
"Ouml",
"OverBar",
"OverBrace",
"OverBracket",
"OverParenthesis",
"PartialD",
"Pcy",
"Pfr",
"Phi",
"Pi",
"PlusMinus",
"Poincareplane",
"Popf",
"Pr",
"Precedes",
"PrecedesEqual",
"PrecedesSlantEqual",
"PrecedesTilde",
"Prime",
"Product",
"Proportion",
"Proportional",
"Pscr",
"Psi",
"QUOT",
"Qfr",
"Qopf",
"Qscr",
"RBarr",
"REG",
"Racute",
"Rang",
"Rarr",
"Rarrtl",
"Rcaron",
"Rcedil",
"Rcy",
"Re",
"ReverseElement",
"ReverseEquilibrium",
"ReverseUpEquilibrium",
"Rfr",
"Rho",
"RightAngleBracket",
"RightArrow",
"RightArrowBar",
"RightArrowLeftArrow",
"RightCeiling",
"RightDoubleBracket",
"RightDownTeeVector",
"RightDownVector",
"RightDownVectorBar",
"RightFloor",
"RightTee",
"RightTeeArrow",
"RightTeeVector",
"RightTriangle",
"RightTriangleBar",
"RightTriangleEqual",
"RightUpDownVector",
"RightUpTeeVector",
"RightUpVector",
"RightUpVectorBar",
"RightVector",
"RightVectorBar",
"Rightarrow",
"Ropf",
"RoundImplies",
"Rrightarrow",
"Rscr",
"Rsh",
"RuleDelayed",
"SHCHcy",
"SHcy",
"SOFTcy",
"Sacute",
"Sc",
"Scaron",
"Scedil",
"Scirc",
"Scy",
"Sfr",
"ShortDownArrow",
"ShortLeftArrow",
"ShortRightArrow",
"ShortUpArrow",
"Sigma",
"SmallCircle",
"Sopf",
"Sqrt",
"Square",
"SquareIntersection",
"SquareSubset",
"SquareSubsetEqual",
"SquareSuperset",
"SquareSupersetEqual",
"SquareUnion",
"Sscr",
"Star",
"Sub",
"Subset",
"SubsetEqual",
"Succeeds",
"SucceedsEqual",
"SucceedsSlantEqual",
"SucceedsTilde",
"SuchThat",
"Sum",
"Sup",
"Superset",
"SupersetEqual",
"Supset",
"THORN",
"TRADE",
"TSHcy",
"TScy",
"Tab",
"Tau",
"Tcaron",
"Tcedil",
"Tcy",
"Tfr",
"Therefore",
"Theta",
"ThickSpace",
"ThinSpace",
"Tilde",
"TildeEqual",
"TildeFullEqual",
"TildeTilde",
"Topf",
"TripleDot",
"Tscr",
"Tstrok",
"Uacute",
"Uarr",
"Uarrocir",
"Ubrcy",
"Ubreve",
"Ucirc",
"Ucy",
"Udblac",
"Ufr",
"Ugrave",
"Umacr",
"UnderBar",
"UnderBrace",
"UnderBracket",
"UnderParenthesis",
"Union",
"UnionPlus",
"Uogon",
"Uopf",
"UpArrow",
"UpArrowBar",
"UpArrowDownArrow",
"UpDownArrow",
"UpEquilibrium",
"UpTee",
"UpTeeArrow",
"Uparrow",
"Updownarrow",
"UpperLeftArrow",
"UpperRightArrow",
"Upsi",
"Upsilon",
"Uring",
"Uscr",
"Utilde",
"Uuml",
"VDash",
"Vbar",
"Vcy",
"Vdash",
"Vdashl",
"Vee",
"Verbar",
"Vert",
"VerticalBar",
"VerticalLine",
"VerticalSeparator",
"VerticalTilde",
"VeryThinSpace",
"Vfr",
"Vopf",
"Vscr",
"Vvdash",
"Wcirc",
"Wedge",
"Wfr",
"Wopf",
"Wscr",
"Xfr",
"Xi",
"Xopf",
"Xscr",
"YAcy",
"YIcy",
"YUcy",
"Yacute",
"Ycirc",
"Ycy",
"Yfr",
"Yopf",
"Yscr",
"Yuml",
"ZHcy",
"Zacute",
"Zcaron",
"Zcy",
"Zdot",
"ZeroWidthSpace",
"Zeta",
"Zfr",
"Zopf",
"Zscr",
"aacute",
"abreve",
"ac",
"acE",
"acd",
"acirc",
"acute",
"acy",
"aelig",
"af",
"afr",
"agrave",
"alefsym",
"aleph",
"alpha",
"amacr",
"amalg",
"amp",
"and",
"andand",
"andd",
"andslope",
"andv",
"ang",
"ange",
"angle",
"angmsd",
"angmsdaa",
"angmsdab",
"angmsdac",
"angmsdad",
"angmsdae",
"angmsdaf",
"angmsdag",
"angmsdah",
"angrt",
"angrtvb",
"angrtvbd",
"angsph",
"angst",
"angzarr",
"aogon",
"aopf",
"ap",
"apE",
"apacir",
"ape",
"apid",
"apos",
"approx",
"approxeq",
"aring",
"ascr",
"ast",
"asymp",
"asympeq",
"atilde",
"auml",
"awconint",
"awint",
"bNot",
"backcong",
"backepsilon",
"backprime",
"backsim",
"backsimeq",
"barvee",
"barwed",
"barwedge",
"bbrk",
"bbrktbrk",
"bcong",
"bcy",
"bdquo",
"becaus",
"because",
"bemptyv",
"bepsi",
"bernou",
"beta",
"beth",
"between",
"bfr",
"bigcap",
"bigcirc",
"bigcup",
"bigodot",
"bigoplus",
"bigotimes",
"bigsqcup",
"bigstar",
"bigtriangledown",
"bigtriangleup",
"biguplus",
"bigvee",
"bigwedge",
"bkarow",
"blacklozenge",
"blacksquare",
"blacktriangle",
"blacktriangledown",
"blacktriangleleft",
"blacktriangleright",
"blank",
"blk12",
"blk14",
"blk34",
"block",
"bne",
"bnequiv",
"bnot",
"bopf",
"bot",
"bottom",
"bowtie",
"boxDL",
"boxDR",
"boxDl",
"boxDr",
"boxH",
"boxHD",
"boxHU",
"boxHd",
"boxHu",
"boxUL",
"boxUR",
"boxUl",
"boxUr",
"boxV",
"boxVH",
"boxVL",
"boxVR",
"boxVh",
"boxVl",
"boxVr",
"boxbox",
"boxdL",
"boxdR",
"boxdl",
"boxdr",
"boxh",
"boxhD",
"boxhU",
"boxhd",
"boxhu",
"boxminus",
"boxplus",
"boxtimes",
"boxuL",
"boxuR",
"boxul",
"boxur",
"boxv",
"boxvH",
"boxvL",
"boxvR",
"boxvh",
"boxvl",
"boxvr",
"bprime",
"breve",
"brvbar",
"bscr",
"bsemi",
"bsim",
"bsime",
"bsol",
"bsolb",
"bsolhsub",
"bull",
"bullet",
"bump",
"bumpE",
"bumpe",
"bumpeq",
"cacute",
"cap",
"capand",
"capbrcup",
"capcap",
"capcup",
"capdot",
"caps",
"caret",
"caron",
"ccaps",
"ccaron",
"ccedil",
"ccirc",
"ccups",
"ccupssm",
"cdot",
"cedil",
"cemptyv",
"cent",
"centerdot",
"cfr",
"chcy",
"check",
"checkmark",
"chi",
"cir",
"cirE",
"circ",
"circeq",
"circlearrowleft",
"circlearrowright",
"circledR",
"circledS",
"circledast",
"circledcirc",
"circleddash",
"cire",
"cirfnint",
"cirmid",
"cirscir",
"clubs",
"clubsuit",
"colon",
"colone",
"coloneq",
"comma",
"commat",
"comp",
"compfn",
"complement",
"complexes",
"cong",
"congdot",
"conint",
"copf",
"coprod",
"copy",
"copysr",
"crarr",
"cross",
"cscr",
"csub",
"csube",
"csup",
"csupe",
"ctdot",
"cudarrl",
"cudarrr",
"cuepr",
"cuesc",
"cularr",
"cularrp",
"cup",
"cupbrcap",
"cupcap",
"cupcup",
"cupdot",
"cupor",
"cups",
"curarr",
"curarrm",
"curlyeqprec",
"curlyeqsucc",
"curlyvee",
"curlywedge",
"curren",
"curvearrowleft",
"curvearrowright",
"cuvee",
"cuwed",
"cwconint",
"cwint",
"cylcty",
"dArr",
"dHar",
"dagger",
"daleth",
"darr",
"dash",
"dashv",
"dbkarow",
"dblac",
"dcaron",
"dcy",
"dd",
"ddagger",
"ddarr",
"ddotseq",
"deg",
"delta",
"demptyv",
"dfisht",
"dfr",
"dharl",
"dharr",
"diam",
"diamond",
"diamondsuit",
"diams",
"die",
"digamma",
"disin",
"div",
"divide",
"divideontimes",
"divonx",
"djcy",
"dlcorn",
"dlcrop",
"dollar",
"dopf",
"dot",
"doteq",
"doteqdot",
"dotminus",
"dotplus",
"dotsquare",
"doublebarwedge",
"downarrow",
"downdownarrows",
"downharpoonleft",
"downharpoonright",
"drbkarow",
"drcorn",
"drcrop",
"dscr",
"dscy",
"dsol",
"dstrok",
"dtdot",
"dtri",
"dtrif",
"duarr",
"duhar",
"dwangle",
"dzcy",
"dzigrarr",
"eDDot",
"eDot",
"eacute",
"easter",
"ecaron",
"ecir",
"ecirc",
"ecolon",
"ecy",
"edot",
"ee",
"efDot",
"efr",
"eg",
"egrave",
"egs",
"egsdot",
"el",
"elinters",
"ell",
"els",
"elsdot",
"emacr",
"empty",
"emptyset",
"emptyv",
"emsp13",
"emsp14",
"emsp",
"eng",
"ensp",
"eogon",
"eopf",
"epar",
"eparsl",
"eplus",
"epsi",
"epsilon",
"epsiv",
"eqcirc",
"eqcolon",
"eqsim",
"eqslantgtr",
"eqslantless",
"equals",
"equest",
"equiv",
"equivDD",
"eqvparsl",
"erDot",
"erarr",
"escr",
"esdot",
"esim",
"eta",
"eth",
"euml",
"euro",
"excl",
"exist",
"expectation",
"exponentiale",
"fallingdotseq",
"fcy",
"female",
"ffilig",
"fflig",
"ffllig",
"ffr",
"filig",
"fjlig",
"flat",
"fllig",
"fltns",
"fnof",
"fopf",
"forall",
"fork",
"forkv",
"fpartint",
"frac12",
"frac13",
"frac14",
"frac15",
"frac16",
"frac18",
"frac23",
"frac25",
"frac34",
"frac35",
"frac38",
"frac45",
"frac56",
"frac58",
"frac78",
"frasl",
"frown",
"fscr",
"gE",
"gEl",
"gacute",
"gamma",
"gammad",
"gap",
"gbreve",
"gcirc",
"gcy",
"gdot",
"ge",
"gel",
"geq",
"geqq",
"geqslant",
"ges",
"gescc",
"gesdot",
"gesdoto",
"gesdotol",
"gesl",
"gesles",
"gfr",
"gg",
"ggg",
"gimel",
"gjcy",
"gl",
"glE",
"gla",
"glj",
"gnE",
"gnap",
"gnapprox",
"gne",
"gneq",
"gneqq",
"gnsim",
"gopf",
"grave",
"gscr",
"gsim",
"gsime",
"gsiml",
"gt",
"gtcc",
"gtcir",
"gtdot",
"gtlPar",
"gtquest",
"gtrapprox",
"gtrarr",
"gtrdot",
"gtreqless",
"gtreqqless",
"gtrless",
"gtrsim",
"gvertneqq",
"gvnE",
"hArr",
"hairsp",
"half",
"hamilt",
"hardcy",
"harr",
"harrcir",
"harrw",
"hbar",
"hcirc",
"hearts",
"heartsuit",
"hellip",
"hercon",
"hfr",
"hksearow",
"hkswarow",
"hoarr",
"homtht",
"hookleftarrow",
"hookrightarrow",
"hopf",
"horbar",
"hscr",
"hslash",
"hstrok",
"hybull",
"hyphen",
"iacute",
"ic",
"icirc",
"icy",
"iecy",
"iexcl",
"iff",
"ifr",
"igrave",
"ii",
"iiiint",
"iiint",
"iinfin",
"iiota",
"ijlig",
"imacr",
"image",
"imagline",
"imagpart",
"imath",
"imof",
"imped",
"in",
"incare",
"infin",
"infintie",
"inodot",
"int",
"intcal",
"integers",
"intercal",
"intlarhk",
"intprod",
"iocy",
"iogon",
"iopf",
"iota",
"iprod",
"iquest",
"iscr",
"isin",
"isinE",
"isindot",
"isins",
"isinsv",
"isinv",
"it",
"itilde",
"iukcy",
"iuml",
"jcirc",
"jcy",
"jfr",
"jmath",
"jopf",
"jscr",
"jsercy",
"jukcy",
"kappa",
"kappav",
"kcedil",
"kcy",
"kfr",
"kgreen",
"khcy",
"kjcy",
"kopf",
"kscr",
"lAarr",
"lArr",
"lAtail",
"lBarr",
"lE",
"lEg",
"lHar",
"lacute",
"laemptyv",
"lagran",
"lambda",
"lang",
"langd",
"langle",
"lap",
"laquo",
"larr",
"larrb",
"larrbfs",
"larrfs",
"larrhk",
"larrlp",
"larrpl",
"larrsim",
"larrtl",
"lat",
"latail",
"late",
"lates",
"lbarr",
"lbbrk",
"lbrace",
"lbrack",
"lbrke",
"lbrksld",
"lbrkslu",
"lcaron",
"lcedil",
"lceil",
"lcub",
"lcy",
"ldca",
"ldquo",
"ldquor",
"ldrdhar",
"ldrushar",
"ldsh",
"le",
"leftarrow",
"leftarrowtail",
"leftharpoondown",
"leftharpoonup",
"leftleftarrows",
"leftrightarrow",
"leftrightarrows",
"leftrightharpoons",
"leftrightsquigarrow",
"leftthreetimes",
"leg",
"leq",
"leqq",
"leqslant",
"les",
"lescc",
"lesdot",
"lesdoto",
"lesdotor",
"lesg",
"lesges",
"lessapprox",
"lessdot",
"lesseqgtr",
"lesseqqgtr",
"lessgtr",
"lesssim",
"lfisht",
"lfloor",
"lfr",
"lg",
"lgE",
"lhard",
"lharu",
"lharul",
"lhblk",
"ljcy",
"ll",
"llarr",
"llcorner",
"llhard",
"lltri",
"lmidot",
"lmoust",
"lmoustache",
"lnE",
"lnap",
"lnapprox",
"lne",
"lneq",
"lneqq",
"lnsim",
"loang",
"loarr",
"lobrk",
"longleftarrow",
"longleftrightarrow",
"longmapsto",
"longrightarrow",
"looparrowleft",
"looparrowright",
"lopar",
"lopf",
"loplus",
"lotimes",
"lowast",
"lowbar",
"loz",
"lozenge",
"lozf",
"lpar",
"lparlt",
"lrarr",
"lrcorner",
"lrhar",
"lrhard",
"lrm",
"lrtri",
"lsaquo",
"lscr",
"lsh",
"lsim",
"lsime",
"lsimg",
"lsqb",
"lsquo",
"lsquor",
"lstrok",
"lt",
"ltcc",
"ltcir",
"ltdot",
"lthree",
"ltimes",
"ltlarr",
"ltquest",
"ltrPar",
"ltri",
"ltrie",
"ltrif",
"lurdshar",
"luruhar",
"lvertneqq",
"lvnE",
"mDDot",
"macr",
"male",
"malt",
"maltese",
"map",
"mapsto",
"mapstodown",
"mapstoleft",
"mapstoup",
"marker",
"mcomma",
"mcy",
"mdash",
"measuredangle",
"mfr",
"mho",
"micro",
"mid",
"midast",
"midcir",
"middot",
"minus",
"minusb",
"minusd",
"minusdu",
"mlcp",
"mldr",
"mnplus",
"models",
"mopf",
"mp",
"mscr",
"mstpos",
"mu",
"multimap",
"mumap",
"nGg",
"nGt",
"nGtv",
"nLeftarrow",
"nLeftrightarrow",
"nLl",
"nLt",
"nLtv",
"nRightarrow",
"nVDash",
"nVdash",
"nabla",
"nacute",
"nang",
"nap",
"napE",
"napid",
"napos",
"napprox",
"natur",
"natural",
"naturals",
"nbsp",
"nbump",
"nbumpe",
"ncap",
"ncaron",
"ncedil",
"ncong",
"ncongdot",
"ncup",
"ncy",
"ndash",
"ne",
"neArr",
"nearhk",
"nearr",
"nearrow",
"nedot",
"nequiv",
"nesear",
"nesim",
"nexist",
"nexists",
"nfr",
"ngE",
"nge",
"ngeq",
"ngeqq",
"ngeqslant",
"nges",
"ngsim",
"ngt",
"ngtr",
"nhArr",
"nharr",
"nhpar",
"ni",
"nis",
"nisd",
"niv",
"njcy",
"nlArr",
"nlE",
"nlarr",
"nldr",
"nle",
"nleftarrow",
"nleftrightarrow",
"nleq",
"nleqq",
"nleqslant",
"nles",
"nless",
"nlsim",
"nlt",
"nltri",
"nltrie",
"nmid",
"nopf",
"not",
"notin",
"notinE",
"notindot",
"notinva",
"notinvb",
"notinvc",
"notni",
"notniva",
"notnivb",
"notnivc",
"npar",
"nparallel",
"nparsl",
"npart",
"npolint",
"npr",
"nprcue",
"npre",
"nprec",
"npreceq",
"nrArr",
"nrarr",
"nrarrc",
"nrarrw",
"nrightarrow",
"nrtri",
"nrtrie",
"nsc",
"nsccue",
"nsce",
"nscr",
"nshortmid",
"nshortparallel",
"nsim",
"nsime",
"nsimeq",
"nsmid",
"nspar",
"nsqsube",
"nsqsupe",
"nsub",
"nsubE",
"nsube",
"nsubset",
"nsubseteq",
"nsubseteqq",
"nsucc",
"nsucceq",
"nsup",
"nsupE",
"nsupe",
"nsupset",
"nsupseteq",
"nsupseteqq",
"ntgl",
"ntilde",
"ntlg",
"ntriangleleft",
"ntrianglelefteq",
"ntriangleright",
"ntrianglerighteq",
"nu",
"num",
"numero",
"numsp",
"nvDash",
"nvHarr",
"nvap",
"nvdash",
"nvge",
"nvgt",
"nvinfin",
"nvlArr",
"nvle",
"nvlt",
"nvltrie",
"nvrArr",
"nvrtrie",
"nvsim",
"nwArr",
"nwarhk",
"nwarr",
"nwarrow",
"nwnear",
"oS",
"oacute",
"oast",
"ocir",
"ocirc",
"ocy",
"odash",
"odblac",
"odiv",
"odot",
"odsold",
"oelig",
"ofcir",
"ofr",
"ogon",
"ograve",
"ogt",
"ohbar",
"ohm",
"oint",
"olarr",
"olcir",
"olcross",
"oline",
"olt",
"omacr",
"omega",
"omicron",
"omid",
"ominus",
"oopf",
"opar",
"operp",
"oplus",
"or",
"orarr",
"ord",
"order",
"orderof",
"ordf",
"ordm",
"origof",
"oror",
"orslope",
"orv",
"oscr",
"oslash",
"osol",
"otilde",
"otimes",
"otimesas",
"ouml",
"ovbar",
"par",
"para",
"parallel",
"parsim",
"parsl",
"part",
"pcy",
"percnt",
"period",
"permil",
"perp",
"pertenk",
"pfr",
"phi",
"phiv",
"phmmat",
"phone",
"pi",
"pitchfork",
"piv",
"planck",
"planckh",
"plankv",
"plus",
"plusacir",
"plusb",
"pluscir",
"plusdo",
"plusdu",
"pluse",
"plusmn",
"plussim",
"plustwo",
"pm",
"pointint",
"popf",
"pound",
"pr",
"prE",
"prap",
"prcue",
"pre",
"prec",
"precapprox",
"preccurlyeq",
"preceq",
"precnapprox",
"precneqq",
"precnsim",
"precsim",
"prime",
"primes",
"prnE",
"prnap",
"prnsim",
"prod",
"profalar",
"profline",
"profsurf",
"prop",
"propto",
"prsim",
"prurel",
"pscr",
"psi",
"puncsp",
"qfr",
"qint",
"qopf",
"qprime",
"qscr",
"quaternions",
"quatint",
"quest",
"questeq",
"quot",
"rAarr",
"rArr",
"rAtail",
"rBarr",
"rHar",
"race",
"racute",
"radic",
"raemptyv",
"rang",
"rangd",
"range",
"rangle",
"raquo",
"rarr",
"rarrap",
"rarrb",
"rarrbfs",
"rarrc",
"rarrfs",
"rarrhk",
"rarrlp",
"rarrpl",
"rarrsim",
"rarrtl",
"rarrw",
"ratail",
"ratio",
"rationals",
"rbarr",
"rbbrk",
"rbrace",
"rbrack",
"rbrke",
"rbrksld",
"rbrkslu",
"rcaron",
"rcedil",
"rceil",
"rcub",
"rcy",
"rdca",
"rdldhar",
"rdquo",
"rdquor",
"rdsh",
"real",
"realine",
"realpart",
"reals",
"rect",
"reg",
"rfisht",
"rfloor",
"rfr",
"rhard",
"rharu",
"rharul",
"rho",
"rhov",
"rightarrow",
"rightarrowtail",
"rightharpoondown",
"rightharpoonup",
"rightleftarrows",
"rightleftharpoons",
"rightrightarrows",
"rightsquigarrow",
"rightthreetimes",
"ring",
"risingdotseq",
"rlarr",
"rlhar",
"rlm",
"rmoust",
"rmoustache",
"rnmid",
"roang",
"roarr",
"robrk",
"ropar",
"ropf",
"roplus",
"rotimes",
"rpar",
"rpargt",
"rppolint",
"rrarr",
"rsaquo",
"rscr",
"rsh",
"rsqb",
"rsquo",
"rsquor",
"rthree",
"rtimes",
"rtri",
"rtrie",
"rtrif",
"rtriltri",
"ruluhar",
"rx",
"sacute",
"sbquo",
"sc",
"scE",
"scap",
"scaron",
"sccue",
"sce",
"scedil",
"scirc",
"scnE",
"scnap",
"scnsim",
"scpolint",
"scsim",
"scy",
"sdot",
"sdotb",
"sdote",
"seArr",
"searhk",
"searr",
"searrow",
"sect",
"semi",
"seswar",
"setminus",
"setmn",
"sext",
"sfr",
"sfrown",
"sharp",
"shchcy",
"shcy",
"shortmid",
"shortparallel",
"shy",
"sigma",
"sigmaf",
"sigmav",
"sim",
"simdot",
"sime",
"simeq",
"simg",
"simgE",
"siml",
"simlE",
"simne",
"simplus",
"simrarr",
"slarr",
"smallsetminus",
"smashp",
"smeparsl",
"smid",
"smile",
"smt",
"smte",
"smtes",
"softcy",
"sol",
"solb",
"solbar",
"sopf",
"spades",
"spadesuit",
"spar",
"sqcap",
"sqcaps",
"sqcup",
"sqcups",
"sqsub",
"sqsube",
"sqsubset",
"sqsubseteq",
"sqsup",
"sqsupe",
"sqsupset",
"sqsupseteq",
"squ",
"square",
"squarf",
"squf",
"srarr",
"sscr",
"ssetmn",
"ssmile",
"sstarf",
"star",
"starf",
"straightepsilon",
"straightphi",
"strns",
"sub",
"subE",
"subdot",
"sube",
"subedot",
"submult",
"subnE",
"subne",
"subplus",
"subrarr",
"subset",
"subseteq",
"subseteqq",
"subsetneq",
"subsetneqq",
"subsim",
"subsub",
"subsup",
"succ",
"succapprox",
"succcurlyeq",
"succeq",
"succnapprox",
"succneqq",
"succnsim",
"succsim",
"sum",
"sung",
"sup1",
"sup2",
"sup3",
"sup",
"supE",
"supdot",
"supdsub",
"supe",
"supedot",
"suphsol",
"suphsub",
"suplarr",
"supmult",
"supnE",
"supne",
"supplus",
"supset",
"supseteq",
"supseteqq",
"supsetneq",
"supsetneqq",
"supsim",
"supsub",
"supsup",
"swArr",
"swarhk",
"swarr",
"swarrow",
"swnwar",
"szlig",
"target",
"tau",
"tbrk",
"tcaron",
"tcedil",
"tcy",
"tdot",
"telrec",
"tfr",
"there4",
"therefore",
"theta",
"thetasym",
"thetav",
"thickapprox",
"thicksim",
"thinsp",
"thkap",
"thksim",
"thorn",
"tilde",
"times",
"timesb",
"timesbar",
"timesd",
"tint",
"toea",
"top",
"topbot",
"topcir",
"topf",
"topfork",
"tosa",
"tprime",
"trade",
"triangle",
"triangledown",
"triangleleft",
"trianglelefteq",
"triangleq",
"triangleright",
"trianglerighteq",
"tridot",
"trie",
"triminus",
"triplus",
"trisb",
"tritime",
"trpezium",
"tscr",
"tscy",
"tshcy",
"tstrok",
"twixt",
"twoheadleftarrow",
"twoheadrightarrow",
"uArr",
"uHar",
"uacute",
"uarr",
"ubrcy",
"ubreve",
"ucirc",
"ucy",
"udarr",
"udblac",
"udhar",
"ufisht",
"ufr",
"ugrave",
"uharl",
"uharr",
"uhblk",
"ulcorn",
"ulcorner",
"ulcrop",
"ultri",
"umacr",
"uml",
"uogon",
"uopf",
"uparrow",
"updownarrow",
"upharpoonleft",
"upharpoonright",
"uplus",
"upsi",
"upsih",
"upsilon",
"upuparrows",
"urcorn",
"urcorner",
"urcrop",
"uring",
"urtri",
"uscr",
"utdot",
"utilde",
"utri",
"utrif",
"uuarr",
"uuml",
"uwangle",
"vArr",
"vBar",
"vBarv",
"vDash",
"vangrt",
"varepsilon",
"varkappa",
"varnothing",
"varphi",
"varpi",
"varpropto",
"varr",
"varrho",
"varsigma",
"varsubsetneq",
"varsubsetneqq",
"varsupsetneq",
"varsupsetneqq",
"vartheta",
"vartriangleleft",
"vartriangleright",
"vcy",
"vdash",
"vee",
"veebar",
"veeeq",
"vellip",
"verbar",
"vert",
"vfr",
"vltri",
"vnsub",
"vnsup",
"vopf",
"vprop",
"vrtri",
"vscr",
"vsubnE",
"vsubne",
"vsupnE",
"vsupne",
"vzigzag",
"wcirc",
"wedbar",
"wedge",
"wedgeq",
"weierp",
"wfr",
"wopf",
"wp",
"wr",
"wreath",
"wscr",
"xcap",
"xcirc",
"xcup",
"xdtri",
"xfr",
"xhArr",
"xharr",
"xi",
"xlArr",
"xlarr",
"xmap",
"xnis",
"xodot",
"xopf",
"xoplus",
"xotime",
"xrArr",
"xrarr",
"xscr",
"xsqcup",
"xuplus",
"xutri",
"xvee",
"xwedge",
"yacute",
"yacy",
"ycirc",
"ycy",
"yen",
"yfr",
"yicy",
"yopf",
"yscr",
"yucy",
"yuml",
"zacute",
"zcaron",
"zcy",
"zdot",
"zeetrf",
"zeta",
"zfr",
"zhcy",
"zigrarr",
"zopf",
"zscr",
"zwj",
"zwnj",
];
/// List of values corresponding to names of named
/// [character references][character_reference].
///
/// The corresponding names of this list are stored in
/// [`CHARACTER_REFERENCE_NAMES`][].
/// They correspond through their index.
///
/// ## References
///
/// * [*§ 2.5 Entity and numeric character references* in `CommonMark`](https://spec.commonmark.org/0.30/#entity-and-numeric-character-references)
///
/// [character_reference]: crate::construct::character_reference
pub const CHARACTER_REFERENCE_VALUES: [&str; 2125] = [
"Æ", "&", "Á", "Ă", "Â", "А", "𝔄", "À", "Α", "Ā", "⩓", "Ą", "𝔸", "", "Å", "𝒜", "≔", "Ã", "Ä",
"∖", "⫧", "⌆", "Б", "∵", "ℬ", "Β", "𝔅", "𝔹", "˘", "ℬ", "≎", "Ч", "©", "Ć", "⋒", "ⅅ", "ℭ", "Č",
"Ç", "Ĉ", "∰", "Ċ", "¸", "·", "ℭ", "Χ", "⊙", "⊖", "⊕", "⊗", "∲", "”", "’", "∷", "⩴", "≡", "∯",
"∮", "ℂ", "∐", "∳", "⨯", "𝒞", "⋓", "≍", "ⅅ", "⤑", "Ђ", "Ѕ", "Џ", "‡", "↡", "⫤", "Ď", "Д", "∇",
"Δ", "𝔇", "´", "˙", "˝", "`", "˜", "⋄", "ⅆ", "𝔻", "¨", "⃜", "≐", "∯", "¨", "⇓", "⇐", "⇔", "⫤",
"⟸", "⟺", "⟹", "⇒", "⊨", "⇑", "⇕", "∥", "↓", "⤓", "⇵", "̑", "⥐", "⥞", "↽", "⥖", "⥟", "⇁", "⥗",
"⊤", "↧", "⇓", "𝒟", "Đ", "Ŋ", "Ð", "É", "Ě", "Ê", "Э", "Ė", "𝔈", "È", "∈", "Ē", "◻", "▫", "Ę",
"𝔼", "Ε", "⩵", "≂", "⇌", "ℰ", "⩳", "Η", "Ë", "∃", "ⅇ", "Ф", "𝔉", "◼", "▪", "𝔽", "∀", "ℱ", "ℱ",
"Ѓ", ">", "Γ", "Ϝ", "Ğ", "Ģ", "Ĝ", "Г", "Ġ", "𝔊", "⋙", "𝔾", "≥", "⋛", "≧", "⪢", "≷", "⩾", "≳",
"𝒢", "≫", "Ъ", "ˇ", "^", "Ĥ", "ℌ", "ℋ", "ℍ", "─", "ℋ", "Ħ", "≎", "≏", "Е", "IJ", "Ё", "Í", "Î",
"И", "İ", "ℑ", "Ì", "ℑ", "Ī", "ⅈ", "⇒", "∬", "∫", "⋂", "", "", "Į", "𝕀", "Ι", "ℐ", "Ĩ", "І",
"Ï", "Ĵ", "Й", "𝔍", "𝕁", "𝒥", "Ј", "Є", "Х", "Ќ", "Κ", "Ķ", "К", "𝔎", "𝕂", "𝒦", "Љ", "<", "Ĺ",
"Λ", "⟪", "ℒ", "↞", "Ľ", "Ļ", "Л", "⟨", "←", "⇤", "⇆", "⌈", "⟦", "⥡", "⇃", "⥙", "⌊", "↔", "⥎",
"⊣", "↤", "⥚", "⊲", "⧏", "⊴", "⥑", "⥠", "↿", "⥘", "↼", "⥒", "⇐", "⇔", "⋚", "≦", "≶", "⪡", "⩽",
"≲", "𝔏", "⋘", "⇚", "Ŀ", "⟵", "⟷", "⟶", "⟸", "⟺", "⟹", "𝕃", "↙", "↘", "ℒ", "↰", "Ł", "≪", "⤅",
"М", " ", "ℳ", "𝔐", "∓", "𝕄", "ℳ", "Μ", "Њ", "Ń", "Ň", "Ņ", "Н", "\u{200B}", "\u{200B}",
"\u{200B}", "\u{200B}", "≫", "≪", "\n", "𝔑", "\u{2060}", " ", "ℕ", "⫬", "≢", "≭", "∦", "∉",
"≠", "≂̸", "∄", "≯", "≱", "≧̸", "≫̸", "≹", "⩾̸", "≵", "≎̸", "≏̸", "⋪", "⧏̸", "⋬", "≮", "≰", "≸", "≪̸",
"⩽̸", "≴", "⪢̸", "⪡̸", "⊀", "⪯̸", "⋠", "∌", "⋫", "⧐̸", "⋭", "⊏̸", "⋢", "⊐̸", "⋣", "⊂⃒", "⊈", "⊁", "⪰̸",
"⋡", "≿̸", "⊃⃒", "⊉", "≁", "≄", "≇", "≉", "∤", "𝒩", "Ñ", "Ν", "Œ", "Ó", "Ô", "О", "Ő", "𝔒", "Ò",
"Ō", "Ω", "Ο", "𝕆", "“", "‘", "⩔", "𝒪", "Ø", "Õ", "⨷", "Ö", "‾", "⏞", "⎴", "⏜", "∂", "П", "𝔓",
"Φ", "Π", "±", "ℌ", "ℙ", "⪻", "≺", "⪯", "≼", "≾", "″", "∏", "∷", "∝", "𝒫", "Ψ", "\"", "𝔔", "ℚ",
"𝒬", "⤐", "®", "Ŕ", "⟫", "↠", "⤖", "Ř", "Ŗ", "Р", "ℜ", "∋", "⇋", "⥯", "ℜ", "Ρ", "⟩", "→", "⇥",
"⇄", "⌉", "⟧", "⥝", "⇂", "⥕", "⌋", "⊢", "↦", "⥛", "⊳", "⧐", "⊵", "⥏", "⥜", "↾", "⥔", "⇀", "⥓",
"⇒", "ℝ", "⥰", "⇛", "ℛ", "↱", "⧴", "Щ", "Ш", "Ь", "Ś", "⪼", "Š", "Ş", "Ŝ", "С", "𝔖", "↓", "←",
"→", "↑", "Σ", "∘", "𝕊", "√", "□", "⊓", "⊏", "⊑", "⊐", "⊒", "⊔", "𝒮", "⋆", "⋐", "⋐", "⊆", "≻",
"⪰", "≽", "≿", "∋", "∑", "⋑", "⊃", "⊇", "⋑", "Þ", "™", "Ћ", "Ц", "\t", "Τ", "Ť", "Ţ", "Т", "𝔗",
"∴", "Θ", " ", " ", "∼", "≃", "≅", "≈", "𝕋", "⃛", "𝒯", "Ŧ", "Ú", "↟", "⥉", "Ў", "Ŭ", "Û", "У",
"Ű", "𝔘", "Ù", "Ū", "_", "⏟", "⎵", "⏝", "⋃", "⊎", "Ų", "𝕌", "↑", "⤒", "⇅", "↕", "⥮", "⊥", "↥",
"⇑", "⇕", "↖", "↗", "ϒ", "Υ", "Ů", "𝒰", "Ũ", "Ü", "⊫", "⫫", "В", "⊩", "⫦", "⋁", "‖", "‖", "∣",
"|", "❘", "≀", " ", "𝔙", "𝕍", "𝒱", "⊪", "Ŵ", "⋀", "𝔚", "𝕎", "𝒲", "𝔛", "Ξ", "𝕏", "𝒳", "Я", "Ї",
"Ю", "Ý", "Ŷ", "Ы", "𝔜", "𝕐", "𝒴", "Ÿ", "Ж", "Ź", "Ž", "З", "Ż", "\u{200B}", "Ζ", "ℨ", "ℤ",
"𝒵", "á", "ă", "∾", "∾̳", "∿", "â", "´", "а", "æ", "", "𝔞", "à", "ℵ", "ℵ", "α", "ā", "⨿", "&",
"∧", "⩕", "⩜", "⩘", "⩚", "∠", "⦤", "∠", "∡", "⦨", "⦩", "⦪", "⦫", "⦬", "⦭", "⦮", "⦯", "∟", "⊾",
"⦝", "∢", "Å", "⍼", "ą", "𝕒", "≈", "⩰", "⩯", "≊", "≋", "'", "≈", "≊", "å", "𝒶", "*", "≈", "≍",
"ã", "ä", "∳", "⨑", "⫭", "≌", "϶", "‵", "∽", "⋍", "⊽", "⌅", "⌅", "⎵", "⎶", "≌", "б", "„", "∵",
"∵", "⦰", "϶", "ℬ", "β", "ℶ", "≬", "𝔟", "⋂", "◯", "⋃", "⨀", "⨁", "⨂", "⨆", "★", "▽", "△", "⨄",
"⋁", "⋀", "⤍", "⧫", "▪", "▴", "▾", "◂", "▸", "␣", "▒", "░", "▓", "█", "=⃥", "≡⃥", "⌐", "𝕓", "⊥",
"⊥", "⋈", "╗", "╔", "╖", "╓", "═", "╦", "╩", "╤", "╧", "╝", "╚", "╜", "╙", "║", "╬", "╣", "╠",
"╫", "╢", "╟", "⧉", "╕", "╒", "┐", "┌", "─", "╥", "╨", "┬", "┴", "⊟", "⊞", "⊠", "╛", "╘", "┘",
"└", "│", "╪", "╡", "╞", "┼", "┤", "├", "‵", "˘", "¦", "𝒷", "⁏", "∽", "⋍", "\\", "⧅", "⟈", "•",
"•", "≎", "⪮", "≏", "≏", "ć", "∩", "⩄", "⩉", "⩋", "⩇", "⩀", "∩︀", "⁁", "ˇ", "⩍", "č", "ç", "ĉ",
"⩌", "⩐", "ċ", "¸", "⦲", "¢", "·", "𝔠", "ч", "✓", "✓", "χ", "○", "⧃", "ˆ", "≗", "↺", "↻", "®",
"Ⓢ", "⊛", "⊚", "⊝", "≗", "⨐", "⫯", "⧂", "♣", "♣", ":", "≔", "≔", ",", "@", "∁", "∘", "∁", "ℂ",
"≅", "⩭", "∮", "𝕔", "∐", "©", "℗", "↵", "✗", "𝒸", "⫏", "⫑", "⫐", "⫒", "⋯", "⤸", "⤵", "⋞", "⋟",
"↶", "⤽", "∪", "⩈", "⩆", "⩊", "⊍", "⩅", "∪︀", "↷", "⤼", "⋞", "⋟", "⋎", "⋏", "¤", "↶", "↷", "⋎",
"⋏", "∲", "∱", "⌭", "⇓", "⥥", "†", "ℸ", "↓", "‐", "⊣", "⤏", "˝", "ď", "д", "ⅆ", "‡", "⇊", "⩷",
"°", "δ", "⦱", "⥿", "𝔡", "⇃", "⇂", "⋄", "⋄", "♦", "♦", "¨", "ϝ", "⋲", "÷", "÷", "⋇", "⋇", "ђ",
"⌞", "⌍", "$", "𝕕", "˙", "≐", "≑", "∸", "∔", "⊡", "⌆", "↓", "⇊", "⇃", "⇂", "⤐", "⌟", "⌌", "𝒹",
"ѕ", "⧶", "đ", "⋱", "▿", "▾", "⇵", "⥯", "⦦", "џ", "⟿", "⩷", "≑", "é", "⩮", "ě", "≖", "ê", "≕",
"э", "ė", "ⅇ", "≒", "𝔢", "⪚", "è", "⪖", "⪘", "⪙", "⏧", "ℓ", "⪕", "⪗", "ē", "∅", "∅", "∅", " ",
" ", " ", "ŋ", " ", "ę", "𝕖", "⋕", "⧣", "⩱", "ε", "ε", "ϵ", "≖", "≕", "≂", "⪖", "⪕", "=", "≟",
"≡", "⩸", "⧥", "≓", "⥱", "ℯ", "≐", "≂", "η", "ð", "ë", "€", "!", "∃", "ℰ", "ⅇ", "≒", "ф", "♀",
"ffi", "ff", "ffl", "𝔣", "fi", "fj", "♭", "fl", "▱", "ƒ", "𝕗", "∀", "⋔", "⫙", "⨍", "½", "⅓", "¼", "⅕",
"⅙", "⅛", "⅔", "⅖", "¾", "⅗", "⅜", "⅘", "⅚", "⅝", "⅞", "⁄", "⌢", "𝒻", "≧", "⪌", "ǵ", "γ", "ϝ",
"⪆", "ğ", "ĝ", "г", "ġ", "≥", "⋛", "≥", "≧", "⩾", "⩾", "⪩", "⪀", "⪂", "⪄", "⋛︀", "⪔", "𝔤", "≫",
"⋙", "ℷ", "ѓ", "≷", "⪒", "⪥", "⪤", "≩", "⪊", "⪊", "⪈", "⪈", "≩", "⋧", "𝕘", "`", "ℊ", "≳", "⪎",
"⪐", ">", "⪧", "⩺", "⋗", "⦕", "⩼", "⪆", "⥸", "⋗", "⋛", "⪌", "≷", "≳", "≩︀", "≩︀", "⇔", " ", "½",
"ℋ", "ъ", "↔", "⥈", "↭", "ℏ", "ĥ", "♥", "♥", "…", "⊹", "𝔥", "⤥", "⤦", "⇿", "∻", "↩", "↪", "𝕙",
"―", "𝒽", "ℏ", "ħ", "⁃", "‐", "í", "", "î", "и", "е", "¡", "⇔", "𝔦", "ì", "ⅈ", "⨌", "∭", "⧜",
"℩", "ij", "ī", "ℑ", "ℐ", "ℑ", "ı", "⊷", "Ƶ", "∈", "℅", "∞", "⧝", "ı", "∫", "⊺", "ℤ", "⊺", "⨗",
"⨼", "ё", "į", "𝕚", "ι", "⨼", "¿", "𝒾", "∈", "⋹", "⋵", "⋴", "⋳", "∈", "", "ĩ", "і", "ï", "ĵ",
"й", "𝔧", "ȷ", "𝕛", "𝒿", "ј", "є", "κ", "ϰ", "ķ", "к", "𝔨", "ĸ", "х", "ќ", "𝕜", "𝓀", "⇚", "⇐",
"⤛", "⤎", "≦", "⪋", "⥢", "ĺ", "⦴", "ℒ", "λ", "⟨", "⦑", "⟨", "⪅", "«", "←", "⇤", "⤟", "⤝", "↩",
"↫", "⤹", "⥳", "↢", "⪫", "⤙", "⪭", "⪭︀", "⤌", "❲", "{", "[", "⦋", "⦏", "⦍", "ľ", "ļ", "⌈", "{",
"л", "⤶", "“", "„", "⥧", "⥋", "↲", "≤", "←", "↢", "↽", "↼", "⇇", "↔", "⇆", "⇋", "↭", "⋋", "⋚",
"≤", "≦", "⩽", "⩽", "⪨", "⩿", "⪁", "⪃", "⋚︀", "⪓", "⪅", "⋖", "⋚", "⪋", "≶", "≲", "⥼", "⌊", "𝔩",
"≶", "⪑", "↽", "↼", "⥪", "▄", "љ", "≪", "⇇", "⌞", "⥫", "◺", "ŀ", "⎰", "⎰", "≨", "⪉", "⪉", "⪇",
"⪇", "≨", "⋦", "⟬", "⇽", "⟦", "⟵", "⟷", "⟼", "⟶", "↫", "↬", "⦅", "𝕝", "⨭", "⨴", "∗", "_", "◊",
"◊", "⧫", "(", "⦓", "⇆", "⌟", "⇋", "⥭", "", "⊿", "‹", "𝓁", "↰", "≲", "⪍", "⪏", "[", "‘", "‚",
"ł", "<", "⪦", "⩹", "⋖", "⋋", "⋉", "⥶", "⩻", "⦖", "◃", "⊴", "◂", "⥊", "⥦", "≨︀", "≨︀", "∺", "¯",
"♂", "✠", "✠", "↦", "↦", "↧", "↤", "↥", "▮", "⨩", "м", "—", "∡", "𝔪", "℧", "µ", "∣", "*", "⫰",
"·", "−", "⊟", "∸", "⨪", "⫛", "…", "∓", "⊧", "𝕞", "∓", "𝓂", "∾", "μ", "⊸", "⊸", "⋙̸", "≫⃒", "≫̸",
"⇍", "⇎", "⋘̸", "≪⃒", "≪̸", "⇏", "⊯", "⊮", "∇", "ń", "∠⃒", "≉", "⩰̸", "≋̸", "ʼn", "≉", "♮", "♮", "ℕ",
" ", "≎̸", "≏̸", "⩃", "ň", "ņ", "≇", "⩭̸", "⩂", "н", "–", "≠", "⇗", "⤤", "↗", "↗", "≐̸", "≢", "⤨",
"≂̸", "∄", "∄", "𝔫", "≧̸", "≱", "≱", "≧̸", "⩾̸", "⩾̸", "≵", "≯", "≯", "⇎", "↮", "⫲", "∋", "⋼", "⋺",
"∋", "њ", "⇍", "≦̸", "↚", "‥", "≰", "↚", "↮", "≰", "≦̸", "⩽̸", "⩽̸", "≮", "≴", "≮", "⋪", "⋬", "∤",
"𝕟", "¬", "∉", "⋹̸", "⋵̸", "∉", "⋷", "⋶", "∌", "∌", "⋾", "⋽", "∦", "∦", "⫽⃥", "∂̸", "⨔", "⊀", "⋠",
"⪯̸", "⊀", "⪯̸", "⇏", "↛", "⤳̸", "↝̸", "↛", "⋫", "⋭", "⊁", "⋡", "⪰̸", "𝓃", "∤", "∦", "≁", "≄", "≄",
"∤", "∦", "⋢", "⋣", "⊄", "⫅̸", "⊈", "⊂⃒", "⊈", "⫅̸", "⊁", "⪰̸", "⊅", "⫆̸", "⊉", "⊃⃒", "⊉", "⫆̸", "≹",
"ñ", "≸", "⋪", "⋬", "⋫", "⋭", "ν", "#", "№", " ", "⊭", "⤄", "≍⃒", "⊬", "≥⃒", ">⃒", "⧞", "⤂", "≤⃒",
"<⃒", "⊴⃒", "⤃", "⊵⃒", "∼⃒", "⇖", "⤣", "↖", "↖", "⤧", "Ⓢ", "ó", "⊛", "⊚", "ô", "о", "⊝", "ő", "⨸",
"⊙", "⦼", "œ", "⦿", "𝔬", "˛", "ò", "⧁", "⦵", "Ω", "∮", "↺", "⦾", "⦻", "‾", "⧀", "ō", "ω", "ο",
"⦶", "⊖", "𝕠", "⦷", "⦹", "⊕", "∨", "↻", "⩝", "ℴ", "ℴ", "ª", "º", "⊶", "⩖", "⩗", "⩛", "ℴ", "ø",
"⊘", "õ", "⊗", "⨶", "ö", "⌽", "∥", "¶", "∥", "⫳", "⫽", "∂", "п", "%", ".", "‰", "⊥", "‱", "𝔭",
"φ", "ϕ", "ℳ", "☎", "π", "⋔", "ϖ", "ℏ", "ℎ", "ℏ", "+", "⨣", "⊞", "⨢", "∔", "⨥", "⩲", "±", "⨦",
"⨧", "±", "⨕", "𝕡", "£", "≺", "⪳", "⪷", "≼", "⪯", "≺", "⪷", "≼", "⪯", "⪹", "⪵", "⋨", "≾", "′",
"ℙ", "⪵", "⪹", "⋨", "∏", "⌮", "⌒", "⌓", "∝", "∝", "≾", "⊰", "𝓅", "ψ", " ", "𝔮", "⨌", "𝕢", "⁗",
"𝓆", "ℍ", "⨖", "?", "≟", "\"", "⇛", "⇒", "⤜", "⤏", "⥤", "∽̱", "ŕ", "√", "⦳", "⟩", "⦒", "⦥", "⟩",
"»", "→", "⥵", "⇥", "⤠", "⤳", "⤞", "↪", "↬", "⥅", "⥴", "↣", "↝", "⤚", "∶", "ℚ", "⤍", "❳", "}",
"]", "⦌", "⦎", "⦐", "ř", "ŗ", "⌉", "}", "р", "⤷", "⥩", "”", "”", "↳", "ℜ", "ℛ", "ℜ", "ℝ", "▭",
"®", "⥽", "⌋", "𝔯", "⇁", "⇀", "⥬", "ρ", "ϱ", "→", "↣", "⇁", "⇀", "⇄", "⇌", "⇉", "↝", "⋌", "˚",
"≓", "⇄", "⇌", "", "⎱", "⎱", "⫮", "⟭", "⇾", "⟧", "⦆", "𝕣", "⨮", "⨵", ")", "⦔", "⨒", "⇉", "›",
"𝓇", "↱", "]", "’", "’", "⋌", "⋊", "▹", "⊵", "▸", "⧎", "⥨", "℞", "ś", "‚", "≻", "⪴", "⪸", "š",
"≽", "⪰", "ş", "ŝ", "⪶", "⪺", "⋩", "⨓", "≿", "с", "⋅", "⊡", "⩦", "⇘", "⤥", "↘", "↘", "§", ";",
"⤩", "∖", "∖", "✶", "𝔰", "⌢", "♯", "щ", "ш", "∣", "∥", "\u{AD}", "σ", "ς", "ς", "∼", "⩪", "≃",
"≃", "⪞", "⪠", "⪝", "⪟", "≆", "⨤", "⥲", "←", "∖", "⨳", "⧤", "∣", "⌣", "⪪", "⪬", "⪬︀", "ь", "/",
"⧄", "⌿", "𝕤", "♠", "♠", "∥", "⊓", "⊓︀", "⊔", "⊔︀", "⊏", "⊑", "⊏", "⊑", "⊐", "⊒", "⊐", "⊒", "□",
"□", "▪", "▪", "→", "𝓈", "∖", "⌣", "⋆", "☆", "★", "ϵ", "ϕ", "¯", "⊂", "⫅", "⪽", "⊆", "⫃", "⫁",
"⫋", "⊊", "⪿", "⥹", "⊂", "⊆", "⫅", "⊊", "⫋", "⫇", "⫕", "⫓", "≻", "⪸", "≽", "⪰", "⪺", "⪶", "⋩",
"≿", "∑", "♪", "¹", "²", "³", "⊃", "⫆", "⪾", "⫘", "⊇", "⫄", "⟉", "⫗", "⥻", "⫂", "⫌", "⊋", "⫀",
"⊃", "⊇", "⫆", "⊋", "⫌", "⫈", "⫔", "⫖", "⇙", "⤦", "↙", "↙", "⤪", "ß", "⌖", "τ", "⎴", "ť", "ţ",
"т", "⃛", "⌕", "𝔱", "∴", "∴", "θ", "ϑ", "ϑ", "≈", "∼", " ", "≈", "∼", "þ", "˜", "×", "⊠", "⨱",
"⨰", "∭", "⤨", "⊤", "⌶", "⫱", "𝕥", "⫚", "⤩", "‴", "™", "▵", "▿", "◃", "⊴", "≜", "▹", "⊵", "◬",
"≜", "⨺", "⨹", "⧍", "⨻", "⏢", "𝓉", "ц", "ћ", "ŧ", "≬", "↞", "↠", "⇑", "⥣", "ú", "↑", "ў", "ŭ",
"û", "у", "⇅", "ű", "⥮", "⥾", "𝔲", "ù", "↿", "↾", "▀", "⌜", "⌜", "⌏", "◸", "ū", "¨", "ų", "𝕦",
"↑", "↕", "↿", "↾", "⊎", "υ", "ϒ", "υ", "⇈", "⌝", "⌝", "⌎", "ů", "◹", "𝓊", "⋰", "ũ", "▵", "▴",
"⇈", "ü", "⦧", "⇕", "⫨", "⫩", "⊨", "⦜", "ϵ", "ϰ", "∅", "ϕ", "ϖ", "∝", "↕", "ϱ", "ς", "⊊︀", "⫋︀",
"⊋︀", "⫌︀", "ϑ", "⊲", "⊳", "в", "⊢", "∨", "⊻", "≚", "⋮", "|", "|", "𝔳", "⊲", "⊂⃒", "⊃⃒", "𝕧", "∝",
"⊳", "𝓋", "⫋︀", "⊊︀", "⫌︀", "⊋︀", "⦚", "ŵ", "⩟", "∧", "≙", "℘", "𝔴", "𝕨", "℘", "≀", "≀", "𝓌", "⋂",
"◯", "⋃", "▽", "𝔵", "⟺", "⟷", "ξ", "⟸", "⟵", "⟼", "⋻", "⨀", "𝕩", "⨁", "⨂", "⟹", "⟶", "𝓍", "⨆",
"⨄", "△", "⋁", "⋀", "ý", "я", "ŷ", "ы", "¥", "𝔶", "ї", "𝕪", "𝓎", "ю", "ÿ", "ź", "ž", "з", "ż",
"ℨ", "ζ", "𝔷", "ж", "⇝", "𝕫", "𝓏", "", "",
];
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn constants() {
assert_eq!(
CHARACTER_REFERENCE_DECIMAL_SIZE_MAX,
format!("{}", 0x10ffff).len(),
"`CHARACTER_REFERENCE_DECIMAL_SIZE_MAX`"
);
assert_eq!(
CHARACTER_REFERENCE_HEXADECIMAL_SIZE_MAX,
format!("{:x}", 0x10ffff).len(),
"`CHARACTER_REFERENCE_HEXADECIMAL_SIZE_MAX`"
);
assert_eq!(
CHARACTER_REFERENCE_NAMED_SIZE_MAX,
longest(&CHARACTER_REFERENCE_NAMES).unwrap().len(),
"`CHARACTER_REFERENCE_NAMED_SIZE_MAX`"
);
assert_eq!(
HTML_RAW_SIZE_MAX,
longest(&HTML_RAW_NAMES).unwrap().len(),
"`HTML_RAW_SIZE_MAX`"
);
}
fn longest<'a>(list: &[&'a str]) -> Option<&'a str> {
let mut max = 0;
let mut result = None;
for name in list.iter() {
let len = name.len();
if len > max {
max = len;
result = Some(*name);
}
}
result
}
}