From 5e6829c2fb79c2b7f59e38f924e2b2900c52b5d5 Mon Sep 17 00:00:00 2001 From: Titus Wormer Date: Fri, 19 Aug 2022 17:09:16 +0200 Subject: Refactor to move more things to `util/` --- src/compiler.rs | 2 +- src/constant.rs | 2449 -------------------------------- src/construct/autolink.rs | 6 +- src/construct/block_quote.rs | 2 +- src/construct/character_reference.rs | 14 +- src/construct/code_fenced.rs | 6 +- src/construct/code_indented.rs | 2 +- src/construct/frontmatter.rs | 2 +- src/construct/heading_atx.rs | 2 +- src/construct/heading_setext.rs | 3 +- src/construct/html_flow.rs | 12 +- src/construct/html_text.rs | 2 +- src/construct/label_end.rs | 2 +- src/construct/list_item.rs | 2 +- src/construct/partial_label.rs | 4 +- src/construct/partial_whitespace.rs | 8 +- src/construct/thematic_break.rs | 2 +- src/lib.rs | 2 - src/tokenizer.rs | 3 +- src/unicode.rs | 838 ----------- src/util/classify_character.rs | 2 +- src/util/constant.rs | 2449 ++++++++++++++++++++++++++++++++ src/util/decode_character_reference.rs | 2 +- src/util/mod.rs | 2 + src/util/slice.rs | 2 +- src/util/unicode.rs | 838 +++++++++++ 26 files changed, 3331 insertions(+), 3327 deletions(-) delete mode 100644 src/constant.rs delete mode 100644 src/unicode.rs create mode 100644 src/util/constant.rs create mode 100644 src/util/unicode.rs (limited to 'src') diff --git a/src/compiler.rs b/src/compiler.rs index ac68504..2e13294 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -1,7 +1,7 @@ //! Turn events into a string of HTML. -use crate::constant::{SAFE_PROTOCOL_HREF, SAFE_PROTOCOL_SRC}; use crate::event::{Event, Kind, Name}; use crate::util::{ + constant::{SAFE_PROTOCOL_HREF, SAFE_PROTOCOL_SRC}, decode_character_reference::{decode_named, decode_numeric}, encode::encode, normalize_identifier::normalize_identifier, diff --git a/src/constant.rs b/src/constant.rs deleted file mode 100644 index 0c82378..0000000 --- a/src/constant.rs +++ /dev/null @@ -1,2449 +0,0 @@ -//! 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 named character references -//! ([`CHARACTER_REFERENCES`][]). -//! -//! [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 ``. -/// 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 ``. -/// 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_REFERENCES`][]. -/// 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 markers needed for [frontmatter][] to form. -/// -/// Like many things in markdown, the number is `3`. -/// -/// [frontmatter]: crate::construct::frontmatter -pub const FRONTMATTER_SEQUENCE_SIZE: usize = 3; - -/// The number of preceding spaces needed for a [hard break -/// (trailing)][whitespace] to form. -/// -/// [whitespace]: crate::construct::partial_whitespace -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", -]; - -/// Magic string of CDATA (after ` 👉 **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; - -/// The max number of decimals allowed to form an (ordered) -/// [list item][list-item]. -/// -/// `CommonMark` caps this at 10 digits (9 is fine, 10 not). -/// This limit is imposed because bigger numbers result in integer overflows -/// in some browsers. -/// -/// ## References -/// -/// * [*§ 5.2 List items* in `CommonMark`](https://spec.commonmark.org/0.30/#ordered-list-marker) -/// -/// [list-item]: crate::construct::list_item -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: , -/// In practice, this is quite low, and several places instead cap it at 32. -/// See: . -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]. -/// -/// [code_indented]: crate::construct::code_indented -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 and values that form named [character reference][character_reference]s. -/// -/// 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`][]. -/// -/// ## 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_REFERENCES: [(&str, &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", "IJ"), - ("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", "\u{200B}"), - ("NegativeThickSpace", "\u{200B}"), - ("NegativeThinSpace", "\u{200B}"), - ("NegativeVeryThinSpace", "\u{200B}"), - ("NestedGreaterGreater", "≫"), - ("NestedLessLess", "≪"), - ("NewLine", "\n"), - ("Nfr", "𝔑"), - ("NoBreak", "\u{2060}"), - ("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", "\t"), - ("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", "\u{200B}"), - ("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", "ffi"), - ("fflig", "ff"), - ("ffllig", "ffl"), - ("ffr", "𝔣"), - ("filig", "fi"), - ("fjlig", "fj"), - ("flat", "♭"), - ("fllig", "fl"), - ("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", "ij"), - ("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", "ʼn"), - ("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", "\u{AD}"), - ("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", "‌"), -]; - -#[cfg(test)] -mod tests { - use super::*; - use alloc::format; - - #[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_REFERENCES.map(|d| d.0)).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 - } -} diff --git a/src/construct/autolink.rs b/src/construct/autolink.rs index b25dc32..4ecd580 100644 --- a/src/construct/autolink.rs +++ b/src/construct/autolink.rs @@ -116,15 +116,15 @@ //! [definition]: crate::construct::definition //! [label_start_link]: crate::construct::label_start_link //! [label_end]: crate::construct::label_end -//! [autolink_scheme_size_max]: crate::constant::AUTOLINK_SCHEME_SIZE_MAX -//! [autolink_domain_size_max]: crate::constant::AUTOLINK_DOMAIN_SIZE_MAX +//! [autolink_scheme_size_max]: crate::util::constant::AUTOLINK_SCHEME_SIZE_MAX +//! [autolink_domain_size_max]: crate::util::constant::AUTOLINK_DOMAIN_SIZE_MAX //! [sanitize_uri]: crate::util::sanitize_uri //! [html_a]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element -use crate::constant::{AUTOLINK_DOMAIN_SIZE_MAX, AUTOLINK_SCHEME_SIZE_MAX}; use crate::event::Name; use crate::state::{Name as StateName, State}; use crate::tokenizer::Tokenizer; +use crate::util::constant::{AUTOLINK_DOMAIN_SIZE_MAX, AUTOLINK_SCHEME_SIZE_MAX}; /// Start of autolink. /// diff --git a/src/construct/block_quote.rs b/src/construct/block_quote.rs index 8d7e227..039c839 100644 --- a/src/construct/block_quote.rs +++ b/src/construct/block_quote.rs @@ -46,11 +46,11 @@ //! [html-blockquote]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-blockquote-element //! [commonmark-block]: https://spec.commonmark.org/0.30/#phase-1-block-structure -use crate::constant::TAB_SIZE; use crate::construct::partial_space_or_tab::space_or_tab_min_max; use crate::event::Name; use crate::state::{Name as StateName, State}; use crate::tokenizer::Tokenizer; +use crate::util::constant::TAB_SIZE; /// Start of block quote. /// diff --git a/src/construct/character_reference.rs b/src/construct/character_reference.rs index 3bdc636..4669836 100644 --- a/src/construct/character_reference.rs +++ b/src/construct/character_reference.rs @@ -65,17 +65,19 @@ //! [text]: crate::construct::text //! [character_escape]: crate::construct::character_reference //! [decode_numeric]: crate::util::decode_character_reference::decode_numeric -//! [character_references]: crate::constant::CHARACTER_REFERENCES +//! [character_references]: crate::util::constant::CHARACTER_REFERENCES //! [html]: https://html.spec.whatwg.org/multipage/parsing.html#character-reference-state -use crate::constant::{ - CHARACTER_REFERENCES, CHARACTER_REFERENCE_DECIMAL_SIZE_MAX, - CHARACTER_REFERENCE_HEXADECIMAL_SIZE_MAX, CHARACTER_REFERENCE_NAMED_SIZE_MAX, -}; use crate::event::Name; use crate::state::{Name as StateName, State}; use crate::tokenizer::Tokenizer; -use crate::util::slice::Slice; +use crate::util::{ + constant::{ + CHARACTER_REFERENCES, CHARACTER_REFERENCE_DECIMAL_SIZE_MAX, + CHARACTER_REFERENCE_HEXADECIMAL_SIZE_MAX, CHARACTER_REFERENCE_NAMED_SIZE_MAX, + }, + slice::Slice, +}; /// Start of character reference. /// diff --git a/src/construct/code_fenced.rs b/src/construct/code_fenced.rs index 748e38f..bfd15dc 100644 --- a/src/construct/code_fenced.rs +++ b/src/construct/code_fenced.rs @@ -110,12 +110,14 @@ //! [html_code]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-code-element //! [html_pre]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element -use crate::constant::{CODE_FENCED_SEQUENCE_SIZE_MIN, TAB_SIZE}; use crate::construct::partial_space_or_tab::{space_or_tab, space_or_tab_min_max}; use crate::event::{Content, Link, Name}; use crate::state::{Name as StateName, State}; use crate::tokenizer::Tokenizer; -use crate::util::slice::{Position, Slice}; +use crate::util::{ + constant::{CODE_FENCED_SEQUENCE_SIZE_MIN, TAB_SIZE}, + slice::{Position, Slice}, +}; /// Start of fenced code. /// diff --git a/src/construct/code_indented.rs b/src/construct/code_indented.rs index c5439f1..866c78e 100644 --- a/src/construct/code_indented.rs +++ b/src/construct/code_indented.rs @@ -53,11 +53,11 @@ //! [html_code]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-code-element //! [html_pre]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element -use crate::constant::TAB_SIZE; use crate::construct::partial_space_or_tab::{space_or_tab, space_or_tab_min_max}; use crate::event::Name; use crate::state::{Name as StateName, State}; use crate::tokenizer::Tokenizer; +use crate::util::constant::TAB_SIZE; /// Start of code (indented). /// diff --git a/src/construct/frontmatter.rs b/src/construct/frontmatter.rs index dc47bee..74006f6 100644 --- a/src/construct/frontmatter.rs +++ b/src/construct/frontmatter.rs @@ -56,11 +56,11 @@ //! //! [constructs]: crate::Constructs -use crate::constant::FRONTMATTER_SEQUENCE_SIZE; use crate::construct::partial_space_or_tab::space_or_tab; use crate::event::Name; use crate::state::{Name as StateName, State}; use crate::tokenizer::Tokenizer; +use crate::util::constant::FRONTMATTER_SEQUENCE_SIZE; /// Start of frontmatter. /// diff --git a/src/construct/heading_atx.rs b/src/construct/heading_atx.rs index 4ff0143..dd09f74 100644 --- a/src/construct/heading_atx.rs +++ b/src/construct/heading_atx.rs @@ -62,12 +62,12 @@ //! [wiki_setext]: https://en.wikipedia.org/wiki/Setext //! [atx]: http://www.aaronsw.com/2002/atx/ -use crate::constant::{HEADING_ATX_OPENING_FENCE_SIZE_MAX, TAB_SIZE}; use crate::construct::partial_space_or_tab::{space_or_tab, space_or_tab_min_max}; use crate::event::{Content, Event, Kind, Link, Name}; use crate::resolve::Name as ResolveName; use crate::state::{Name as StateName, State}; use crate::tokenizer::Tokenizer; +use crate::util::constant::{HEADING_ATX_OPENING_FENCE_SIZE_MAX, TAB_SIZE}; use alloc::vec; /// Start of a heading (atx). diff --git a/src/construct/heading_setext.rs b/src/construct/heading_setext.rs index 3adeb38..19d2dda 100644 --- a/src/construct/heading_setext.rs +++ b/src/construct/heading_setext.rs @@ -69,13 +69,12 @@ //! [wiki_setext]: https://en.wikipedia.org/wiki/Setext //! [atx]: http://www.aaronsw.com/2002/atx/ -use crate::constant::TAB_SIZE; use crate::construct::partial_space_or_tab::{space_or_tab, space_or_tab_min_max}; use crate::event::{Kind, Name}; use crate::resolve::Name as ResolveName; use crate::state::{Name as StateName, State}; use crate::tokenizer::Tokenizer; -use crate::util::skip::opt_back as skip_opt_back; +use crate::util::{constant::TAB_SIZE, skip::opt_back as skip_opt_back}; use alloc::vec; /// At start of heading (setext) underline. diff --git a/src/construct/html_flow.rs b/src/construct/html_flow.rs index bd41aa9..edb500e 100644 --- a/src/construct/html_flow.rs +++ b/src/construct/html_flow.rs @@ -94,20 +94,20 @@ //! [flow]: crate::construct::flow //! [html_text]: crate::construct::html_text //! [paragraph]: crate::construct::paragraph -//! [html_raw_names]: crate::constant::HTML_RAW_NAMES -//! [html_block_names]: crate::constant::HTML_BLOCK_NAMES +//! [html_raw_names]: crate::util::constant::HTML_RAW_NAMES +//! [html_block_names]: crate::util::constant::HTML_BLOCK_NAMES //! [html_parsing]: https://html.spec.whatwg.org/multipage/parsing.html#parsing -use crate::constant::{ - HTML_BLOCK_NAMES, HTML_CDATA_PREFIX, HTML_RAW_NAMES, HTML_RAW_SIZE_MAX, TAB_SIZE, -}; use crate::construct::partial_space_or_tab::{ space_or_tab_with_options, Options as SpaceOrTabOptions, }; use crate::event::Name; use crate::state::{Name as StateName, State}; use crate::tokenizer::Tokenizer; -use crate::util::slice::Slice; +use crate::util::{ + constant::{HTML_BLOCK_NAMES, HTML_CDATA_PREFIX, HTML_RAW_NAMES, HTML_RAW_SIZE_MAX, TAB_SIZE}, + slice::Slice, +}; /// Symbol for `