use mathml_renderer::attribute::{
FracAttr, HtmlTextStyle, Notation, OpAttrs, Size, Style, TextTransform,
};
use mathml_renderer::symbol::{self, Rel};
use crate::character_class::{MathVariant, ParenType};
use crate::predefined;
use crate::specifications::LatexUnit;
use crate::token::{
InfixDelim, Mode, TextToken,
Token::{self, *},
};
static FUNCTIONS: phf::Set<&'static str> = phf::phf_set!(
"arccos", "arcsin", "arctan", "arg", "cos", "cosh", "cot", "coth", "csc", "deg", "det", "dim",
"erf", "erfc", "exp", "hom", "ker", "lg", "ln", "log", "sec", "sgn", "sin", "sinh", "tan",
"tanh"
);
static COMMANDS: phf::Map<&'static str, Token> = phf::phf_map! {
" " => MathOrTextMode(&NonBreakingSpace, symbol::NO_BREAK_SPACE),
"#" => Letter(symbol::NUMBER_SIGN, Mode::MathOrText),
"$" => Letter(symbol::DOLLAR_SIGN, Mode::MathOrText),
"%" => Letter(symbol::PERCENT_SIGN, Mode::MathOrText),
"&" => OpAmpersand,
"'" => TextMode(TextToken::Accent(symbol::COMBINING_ACUTE_ACCENT)),
"," => MathOrTextMode(&Space(LatexUnit::Mu.length_with_unit(3.0)), symbol::THIN_SPACE),
"." => TextMode(TextToken::Accent(symbol::COMBINING_DOT_ABOVE)),
":" => MathOrTextMode(&Space(LatexUnit::Mu.length_with_unit(4.0)), symbol::MEDIUM_MATHEMATICAL_SPACE),
";" => MathOrTextMode(&Space(LatexUnit::Mu.length_with_unit(5.0)), symbol::THREE_PER_EM_SPACE),
"=" => TextMode(TextToken::Accent(symbol::COMBINING_MACRON)),
">" => MathOrTextMode(&Space(LatexUnit::Mu.length_with_unit(4.0)), symbol::MEDIUM_MATHEMATICAL_SPACE),
"AA" => TextMode(TextToken::Letter('Å')),
"AE" => TextMode(TextToken::Letter('Æ')),
"Alpha" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_ALPHA),
"And" => CustomCmd(0, &predefined::AND),
"Angstrom" => Letter(symbol::ANGSTROM_SIGN, Mode::Math),
"Bbb" => Transform(MathVariant::Transform(TextTransform::DoubleStruck)),
"Bbbk" => Letter(TextTransform::DoubleStruck.transform('k', false), Mode::Math),
"Beta" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_BETA),
"Big" => Big(Size::Scale2, None),
"Bigg" => Big(Size::Scale4, None),
"Biggl" => Big(Size::Scale4, Some(ParenType::Left)),
"Biggm" => Big(Size::Scale4, Some(ParenType::Middle)),
"Biggr" => Big(Size::Scale4, Some(ParenType::Right)),
"Bigl" => Big(Size::Scale2, Some(ParenType::Left)),
"Bigm" => Big(Size::Scale2, Some(ParenType::Middle)),
"Bigr" => Big(Size::Scale2, Some(ParenType::Right)),
"Box" => Letter(symbol::WHITE_MEDIUM_SQUARE, Mode::Math),
"Bumpeq" => Relation(symbol::GEOMETRICALLY_EQUIVALENT_TO),
"Cap" => BinaryOp(symbol::DOUBLE_INTERSECTION),
"Chi" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_CHI),
"Colon" => Relation(symbol::PROPORTION),
"Complex" => Letter(symbol::DOUBLE_STRUCK_CAPITAL_C, Mode::Math),
"Cup" => BinaryOp(symbol::DOUBLE_UNION),
"DH" => TextMode(TextToken::Letter('Ð')),
"DJ" => TextMode(TextToken::Letter('Ð')),
"Dagger" => Letter(symbol::DOUBLE_DAGGER, Mode::Math),
"Darr" => Relation(symbol::DOWNWARDS_DOUBLE_ARROW),
"Delta" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_DELTA),
"Diamond" => Letter(symbol::LOZENGE, Mode::Math),
"Doteq" => Relation(symbol::GEOMETRICALLY_EQUAL_TO),
"Downarrow" => Relation(symbol::DOWNWARDS_DOUBLE_ARROW),
"Epsilon" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_EPSILON),
"Eta" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_ETA),
"Finv" => Letter(symbol::TURNED_CAPITAL_F, Mode::Math),
"Game" => Letter(symbol::TURNED_SANS_SERIF_CAPITAL_G, Mode::Math),
"Gamma" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_GAMMA),
"H" => TextMode(TextToken::Accent(symbol::COMBINING_DOUBLE_ACUTE_ACCENT)),
"Harr" => Relation(symbol::LEFT_RIGHT_DOUBLE_ARROW),
"Im" => Letter(symbol::BLACK_LETTER_CAPITAL_I, Mode::Math),
"Iota" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_IOTA),
"Join" => Relation(symbol::BOWTIE),
"Kappa" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_KAPPA),
"L" => TextMode(TextToken::Letter('Ł')),
"Lambda" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_LAMBDA),
"Larr" => Relation(symbol::LEFTWARDS_DOUBLE_ARROW),
"Leftarrow" => Relation(symbol::LEFTWARDS_DOUBLE_ARROW),
"Leftrightarrow" => Relation(symbol::LEFT_RIGHT_DOUBLE_ARROW),
"Lleftarrow" => Relation(symbol::LEFTWARDS_TRIPLE_ARROW),
"Longleftarrow" => Relation(symbol::LONG_LEFTWARDS_DOUBLE_ARROW),
"Longleftrightarrow" => Relation(symbol::LONG_LEFT_RIGHT_DOUBLE_ARROW),
"Longrightarrow" => Relation(symbol::LONG_RIGHTWARDS_DOUBLE_ARROW),
"Lrarr" => Relation(symbol::LEFT_RIGHT_DOUBLE_ARROW),
"Lsh" => Relation(symbol::UPWARDS_ARROW_WITH_TIP_LEFTWARDS),
"Mu" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_MU),
"N" => Letter(symbol::DOUBLE_STRUCK_CAPITAL_N, Mode::Math),
"NG" => TextMode(TextToken::Letter('Ŋ')),
"Nu" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_NU),
"O" => TextMode(TextToken::Letter('Ø')),
"OE" => TextMode(TextToken::Letter('Œ')),
"Omega" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_OMEGA),
"Omicron" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_OMICRON),
"P" => Letter(symbol::PILCROW_SIGN, Mode::Math),
"Phi" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_PHI),
"Pi" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_PI),
"Pr" => PseudoOperatorLimits("Pr"),
"Psi" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_PSI),
"R" => Letter(symbol::DOUBLE_STRUCK_CAPITAL_R, Mode::Math),
"Rarr" => Relation(symbol::RIGHTWARDS_DOUBLE_ARROW),
"Re" => Letter(symbol::BLACK_LETTER_CAPITAL_R, Mode::Math),
"Reals" => Letter(symbol::DOUBLE_STRUCK_CAPITAL_R, Mode::Math),
"Rho" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_RHO),
"Rightarrow" => Relation(symbol::RIGHTWARDS_DOUBLE_ARROW),
"Rrightarrow" => Relation(symbol::RIGHTWARDS_TRIPLE_ARROW),
"Rsh" => Relation(symbol::UPWARDS_ARROW_WITH_TIP_RIGHTWARDS),
"S" => Letter(symbol::SECTION_SIGN, Mode::Math),
"Sigma" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_SIGMA),
"Subset" => Relation(symbol::DOUBLE_SUBSET),
"Supset" => Relation(symbol::DOUBLE_SUPERSET),
"TH" => TextMode(TextToken::Letter('Þ')),
"Tau" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_TAU),
"Theta" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_THETA),
"Uarr" => Relation(symbol::UPWARDS_DOUBLE_ARROW),
"Uparrow" => Relation(symbol::UPWARDS_DOUBLE_ARROW),
"Updownarrow" => Relation(symbol::UP_DOWN_DOUBLE_ARROW),
"Upsilon" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_UPSILON),
"VDash" => Relation(symbol::DOUBLE_VERTICAL_BAR_DOUBLE_RIGHT_TURNSTILE),
"Vdash" => Relation(symbol::FORCES),
"Vert" => Ord(symbol::DOUBLE_VERTICAL_LINE),
"Vvdash" => Relation(symbol::TRIPLE_VERTICAL_BAR_RIGHT_TURNSTILE),
"Xi" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_XI),
"Yleft" => Relation(symbol::LEFTWARDS_ARROW_TAIL),
"Yright" => Relation(symbol::RIGHTWARDS_ARROW_TAIL),
"Z" => Letter(symbol::DOUBLE_STRUCK_CAPITAL_Z, Mode::Math),
"Zeta" => UprightLetter(symbol::GREEK_CAPITAL_LETTER_ZETA),
"\"" => TextMode(TextToken::Accent(symbol::COMBINING_DIAERESIS)),
"\\" => NewLine,
"^" => TextMode(TextToken::Accent(symbol::COMBINING_CIRCUMFLEX_ACCENT.as_char())),
"_" => Letter(symbol::LOW_LINE.as_op().as_char(), Mode::MathOrText),
"`" => TextMode(TextToken::Accent(symbol::COMBINING_GRAVE_ACCENT)),
"aa" => TextMode(TextToken::Letter('å')),
"acute" => Accent(symbol::ACUTE_ACCENT, true, OpAttrs::empty()),
"ae" => TextMode(TextToken::Letter('æ')),
"alef" => Letter(symbol::ALEF_SYMBOL, Mode::Math),
"alefsym" => Letter(symbol::ALEF_SYMBOL, Mode::Math),
"aleph" => Letter(symbol::ALEF_SYMBOL, Mode::Math),
"alpha" => Letter(symbol::GREEK_SMALL_LETTER_ALPHA, Mode::Math),
"amalg" => Relation(symbol::AMALGAMATION_OR_COPRODUCT),
"angle" => Letter(symbol::ANGLE, Mode::Math),
"approx" => Relation(symbol::ALMOST_EQUAL_TO),
"approxeq" => Relation(symbol::ALMOST_EQUAL_OR_EQUAL_TO),
"arceq" => Relation(symbol::CORRESPONDS_TO), "argmax" => PseudoOperatorLimits("arg\u{2009}max"),
"argmin" => PseudoOperatorLimits("arg\u{2009}min"),
"ascnode" => Letter(symbol::ASCENDING_NODE, Mode::Math),
"ast" => ForceBinaryOp(symbol::ASTERISK_OPERATOR.as_op()),
"astrosun" => Letter(symbol::SUN, Mode::Math),
"asymp" => Relation(symbol::EQUIVALENT_TO),
"atop" => InfixGenFrac { with_line: false, delim: None },
"awint" => Op(symbol::ANTICLOCKWISE_INTEGRATION),
"backdprime" => Ord(symbol::REVERSED_DOUBLE_PRIME),
"backepsilon" => Letter(symbol::GREEK_REVERSED_LUNATE_EPSILON_SYMBOL, Mode::Math),
"backprime" => Ord(symbol::REVERSED_PRIME),
"backsim" => Relation(symbol::REVERSED_TILDE),
"backsimeq" => Relation(symbol::REVERSED_TILDE_EQUALS),
"backslash" => Ord(symbol::REVERSE_SOLIDUS),
"backtrprime" => Ord(symbol::REVERSED_TRIPLE_PRIME),
"bar" => Accent(symbol::MACRON, true, OpAttrs::STRETCHY_FALSE),
"barwedge" => BinaryOp(symbol::NAND),
"bcancel" => Enclose(Notation::DOWN_DIAGONAL),
"because" => Relation(symbol::BECAUSE),
"beta" => Letter(symbol::GREEK_SMALL_LETTER_BETA, Mode::Math),
"beth" => Letter(symbol::BET_SYMBOL, Mode::Math),
"between" => Relation(symbol::BETWEEN),
"bf" => TransformSwitch(MathVariant::Transform(TextTransform::Bold)),
"big" => Big(Size::Scale1, None),
"bigcap" => Op(symbol::N_ARY_INTERSECTION),
"bigcirc" => Letter(symbol::LARGE_CIRCLE, Mode::Math),
"bigcup" => Op(symbol::N_ARY_UNION),
"bigcupdot" => Op(symbol::N_ARY_UNION_OPERATOR_WITH_DOT),
"bigdoublevee" => Op(symbol::TWO_LOGICAL_OR_OPERATOR),
"bigdoublewedge" => Op(symbol::TWO_LOGICAL_AND_OPERATOR),
"bigg" => Big(Size::Scale3, None),
"biggl" => Big(Size::Scale3, Some(ParenType::Left)),
"biggm" => Big(Size::Scale3, Some(ParenType::Middle)),
"biggr" => Big(Size::Scale3, Some(ParenType::Right)),
"bigl" => Big(Size::Scale1, Some(ParenType::Left)),
"bigm" => Big(Size::Scale1, Some(ParenType::Middle)),
"bigodot" => Op(symbol::N_ARY_CIRCLED_DOT_OPERATOR),
"bigoplus" => Op(symbol::N_ARY_CIRCLED_PLUS_OPERATOR),
"bigotimes" => Op(symbol::N_ARY_CIRCLED_TIMES_OPERATOR),
"bigr" => Big(Size::Scale1, Some(ParenType::Right)),
"bigsqcap" => Op(symbol::N_ARY_SQUARE_INTERSECTION_OPERATOR),
"bigsqcup" => Op(symbol::N_ARY_SQUARE_UNION_OPERATOR),
"bigstar" => Letter(symbol::BLACK_STAR, Mode::Math),
"bigtimes" => Op(symbol::N_ARY_TIMES_OPERATOR),
"bigtriangledown" => Letter(symbol::WHITE_DOWN_POINTING_TRIANGLE, Mode::Math),
"bigtriangleup" => Letter(symbol::WHITE_UP_POINTING_TRIANGLE, Mode::Math),
"biguplus" => Op(symbol::N_ARY_UNION_OPERATOR_WITH_PLUS),
"bigvee" => Op(symbol::N_ARY_LOGICAL_OR),
"bigwedge" => Op(symbol::N_ARY_LOGICAL_AND),
"binom" => Binom(None),
"blacklozenge" => Letter(symbol::BLACK_LOZENGE, Mode::Math),
"blacksquare" => Letter(symbol::BLACK_SQUARE, Mode::Math),
"blacktriangle" => Letter(symbol::BLACK_UP_POINTING_TRIANGLE, Mode::Math),
"blacktriangledown" => Letter(symbol::BLACK_DOWN_POINTING_TRIANGLE, Mode::Math),
"blacktriangleleft" => Letter(symbol::BLACK_LEFT_POINTING_TRIANGLE, Mode::Math),
"blacktriangleright" => Letter(symbol::BLACK_RIGHT_POINTING_TRIANGLE, Mode::Math),
"bm" => Transform(MathVariant::Transform(TextTransform::BoldItalic)),
"bmod" => CustomCmd(0, &predefined::BMOD),
"bold" => Transform(MathVariant::Transform(TextTransform::Bold)),
"boldsymbol" => Transform(MathVariant::Transform(TextTransform::BoldItalic)),
"bot" => Letter(symbol::UP_TACK, Mode::Math),
"botdoteq" => Relation(symbol::EQUALS_SIGN_WITH_DOT_BELOW),
"boxbox" => ForceBinaryOp(symbol::SQUARED_SQUARE.as_op()),
"boxbslash" => BinaryOp(symbol::SQUARED_FALLING_DIAGONAL_SLASH),
"boxdot" => ForceBinaryOp(symbol::SQUARED_DOT_OPERATOR.as_op()),
"boxminus" => BinaryOp(symbol::SQUARED_MINUS),
"boxplus" => BinaryOp(symbol::SQUARED_PLUS),
"boxslash" => BinaryOp(symbol::SQUARED_RISING_DIAGONAL_SLASH),
"boxtimes" => ForceBinaryOp(symbol::SQUARED_TIMES.as_op()),
"bra" => CustomCmd(1, &predefined::BRA),
"brace" => InfixGenFrac { with_line: false, delim: Some(InfixDelim::Brace) },
"brack" => InfixGenFrac { with_line: false, delim: Some(InfixDelim::Brack) },
"breve" => Accent(symbol::BREVE, true, OpAttrs::empty()),
"bull" => ForceBinaryOp(symbol::BULLET_OPERATOR.as_op()),
"bullet" => ForceBinaryOp(symbol::BULLET_OPERATOR.as_op()),
"bumpeq" => Relation(symbol::DIFFERENCE_BETWEEN),
"c" => TextMode(TextToken::Accent(symbol::COMBINING_CEDILLA)),
"cal" => TransformSwitch(MathVariant::Transform(TextTransform::ScriptChancery)),
"cancel" => Enclose(Notation::UP_DIAGONAL),
"cap" => BinaryOp(symbol::INTERSECTION),
"cdot" => ForceBinaryOp(symbol::MIDDLE_DOT.as_op()),
"cdots" => CustomCmd(0, &predefined::CDOTS),
"cfrac" => Frac(Some(FracAttr::CFracStyle)),
"check" => Accent(symbol::CARON, true, OpAttrs::STRETCHY_FALSE),
"checkmark" => Letter(symbol::CHECK_MARK, Mode::Math),
"chi" => Letter(symbol::GREEK_SMALL_LETTER_CHI, Mode::Math),
"choose" => InfixGenFrac { with_line: false, delim: Some(InfixDelim::Paren) },
"circ" => ForceBinaryOp(symbol::RING_OPERATOR.as_op()),
"circeq" => Relation(symbol::RING_EQUAL_TO),
"circlearrowleft" => Relation(symbol::ANTICLOCKWISE_OPEN_CIRCLE_ARROW),
"circlearrowright" => Relation(symbol::CLOCKWISE_OPEN_CIRCLE_ARROW),
"circledR" => Letter(symbol::CIRCLED_LATIN_CAPITAL_LETTER_R, Mode::Math),
"circledS" => Letter(symbol::CIRCLED_LATIN_CAPITAL_LETTER_S, Mode::Math),
"circledast" => ForceBinaryOp(symbol::CIRCLED_ASTERISK_OPERATOR.as_op()),
"circledcirc" => ForceBinaryOp(symbol::CIRCLED_RING_OPERATOR.as_op()),
"circleddash" => ForceBinaryOp(symbol::CIRCLED_DASH.as_op()),
"cirfnint" => Op(symbol::CIRCULATION_FUNCTION),
"clubs" => Letter(symbol::BLACK_CLUB_SUIT, Mode::Math),
"clubsuit" => Letter(symbol::BLACK_CLUB_SUIT, Mode::Math),
"cnums" => Letter(symbol::DOUBLE_STRUCK_CAPITAL_C, Mode::Math),
"colon" => Letter(symbol::COLON.as_op().as_char(), Mode::Math),
"coloneq" => Relation(symbol::COLON_EQUALS),
"coloneqq" => Relation(symbol::COLON_EQUALS),
"color" => Color,
"complement" => Letter(symbol::COMPLEMENT.as_op().as_char(), Mode::Math), "cong" => Relation(symbol::APPROXIMATELY_EQUAL_TO),
"coprod" => Op(symbol::N_ARY_COPRODUCT),
"copyright" => Letter(symbol::COPYRIGHT_SIGN, Mode::Math),
"cup" => BinaryOp(symbol::UNION),
"curlyeqprec" => Relation(symbol::EQUAL_TO_OR_PRECEDES),
"curlyeqsucc" => Relation(symbol::EQUAL_TO_OR_SUCCEEDS),
"curlyvee" => BinaryOp(symbol::CURLY_LOGICAL_OR),
"curlywedge" => BinaryOp(symbol::CURLY_LOGICAL_AND),
"curvearrowleft" => Relation(symbol::ANTICLOCKWISE_TOP_SEMICIRCLE_ARROW),
"curvearrowright" => Relation(symbol::CLOCKWISE_TOP_SEMICIRCLE_ARROW),
"dArr" => Relation(symbol::DOWNWARDS_DOUBLE_ARROW),
"dag" => Letter(symbol::DAGGER, Mode::MathOrText),
"dagger" => Letter(symbol::DAGGER, Mode::Math),
"daleth" => Letter(symbol::DALET_SYMBOL, Mode::Math),
"darr" => Relation(symbol::DOWNWARDS_ARROW),
"dashcolon" => Relation(symbol::EXCESS),
"dashv" => Relation(symbol::LEFT_TACK),
"dbinom" => Binom(Some(FracAttr::DisplayStyleTrue)),
"dblcolon" => Relation(symbol::PROPORTION),
"ddag" => Letter(symbol::DOUBLE_DAGGER, Mode::MathOrText),
"ddagger" => Letter(symbol::DOUBLE_DAGGER, Mode::Math),
"ddddot" => Accent(symbol::COMBINING_FOUR_DOTS_ABOVE, true, OpAttrs::empty()),
"dddot" => Accent(symbol::COMBINING_THREE_DOTS_ABOVE, true, OpAttrs::empty()),
"ddot" => Accent(symbol::DIAERESIS, true, OpAttrs::empty()),
"ddots" => Relation(symbol::DOWN_RIGHT_DIAGONAL_ELLIPSIS),
"delta" => Letter(symbol::GREEK_SMALL_LETTER_DELTA, Mode::Math),
"dfrac" => Frac(Some(FracAttr::DisplayStyleTrue)),
"dh" => TextMode(TextToken::Letter('ð')),
"diamond" => ForceBinaryOp(symbol::DIAMOND_OPERATOR.as_op()),
"diamonds" => Letter(symbol::WHITE_DIAMOND_SUIT, Mode::Math),
"diamondsuit" => Letter(symbol::WHITE_DIAMOND_SUIT, Mode::Math),
"digamma" => Letter(symbol::GREEK_SMALL_LETTER_DIGAMMA, Mode::Math),
"displaystyle" => Style(Style::Display),
"div" => BinaryOp(symbol::DIVISION_SIGN),
"divideontimes" => ForceBinaryOp(symbol::DIVISION_TIMES.as_op()),
"dj" => TextMode(TextToken::Letter('đ')),
"dot" => Accent(symbol::DOT_ABOVE, true, OpAttrs::empty()),
"doteq" => Relation(symbol::APPROACHES_THE_LIMIT),
"doteqdot" => Relation(symbol::GEOMETRICALLY_EQUAL_TO),
"dotplus" => BinaryOp(symbol::DOT_PLUS),
"dots" => MathOrTextMode(&CustomCmd(0, &predefined::DOTS), symbol::HORIZONTAL_ELLIPSIS),
"dotsminusdots" => Relation(symbol::GEOMETRIC_PROPORTION),
"doublebarwedge" => Relation(symbol::LOGICAL_AND_WITH_DOUBLE_OVERBAR),
"downarrow" => Relation(symbol::DOWNWARDS_ARROW),
"downdownarrows" => Relation(symbol::DOWNWARDS_PAIRED_ARROWS),
"downharpoonleft" => Relation(symbol::DOWNWARDS_HARPOON_WITH_BARB_LEFTWARDS),
"downharpoonright" => Relation(symbol::DOWNWARDS_HARPOON_WITH_BARB_RIGHTWARDS),
"dprime" => Ord(symbol::DOUBLE_PRIME),
"earth" => Letter(symbol::EARTH, Mode::Math),
"ell" => Letter(symbol::SCRIPT_SMALL_L, Mode::Math),
"emph" => Text(Some(HtmlTextStyle::Emphasis)),
"empty" => CustomCmd(0, &[
Transform(MathVariant::Normal),
InternalStringLiteral("∅\u{FE00}"), ]),
"emptyset" => CustomCmd(0, &[
Transform(MathVariant::Normal),
InternalStringLiteral("∅\u{FE00}"), ]),
"epsilon" => Letter(symbol::GREEK_LUNATE_EPSILON_SYMBOL, Mode::Math),
"eqcirc" => Relation(symbol::RING_IN_EQUAL_TO),
"eqcolon" => Relation(symbol::EQUALS_COLON),
"eqdef" => Relation(symbol::EQUAL_TO_BY_DEFINITION), "eqqcolon" => Relation(symbol::EQUALS_COLON),
"eqref" => EqRef,
"eqsim" => Relation(symbol::MINUS_TILDE),
"eqslantgtr" => Relation(symbol::SLANTED_EQUAL_TO_OR_GREATER_THAN),
"eqslantless" => Relation(symbol::SLANTED_EQUAL_TO_OR_LESS_THAN),
"equiv" => Relation(symbol::IDENTICAL_TO),
"eta" => Letter(symbol::GREEK_SMALL_LETTER_ETA, Mode::Math),
"eth" => Letter(symbol::LATIN_SMALL_LETTER_ETH, Mode::Math),
"exist" => Ord(symbol::THERE_EXISTS),
"exists" => Ord(symbol::THERE_EXISTS),
"fallingdotseq" => Relation(symbol::APPROXIMATELY_EQUAL_TO_OR_THE_IMAGE_OF),
"fcmp" => Relation(symbol::Z_NOTATION_SCHEMA_COMPOSITION),
"fint" => Op(symbol::INTEGRAL_AVERAGE_WITH_SLASH),
"flat" => Letter(symbol::MUSIC_FLAT_SIGN, Mode::Math),
"forall" => Ord(symbol::FOR_ALL),
"frac" => Frac(None),
"frak" => Transform(MathVariant::Transform(TextTransform::Fraktur)),
"frown" => Relation(symbol::FROWN),
"gamma" => Letter(symbol::GREEK_SMALL_LETTER_GAMMA, Mode::Math),
"gcd" => PseudoOperatorLimits("gcd"),
"ge" => Relation(symbol::GREATER_THAN_OR_EQUAL_TO),
"genfrac" => Genfrac,
"geq" => Relation(symbol::GREATER_THAN_OR_EQUAL_TO),
"geqq" => Relation(symbol::GREATER_THAN_OVER_EQUAL_TO),
"geqslant" => Relation(symbol::GREATER_THAN_OR_SLANTED_EQUAL_TO),
"gets" => Relation(symbol::LEFTWARDS_ARROW),
"gg" => Relation(symbol::MUCH_GREATER_THAN),
"gimel" => Letter(symbol::GIMEL_SYMBOL, Mode::Math),
"gnapprox" => Relation(symbol::GREATER_THAN_AND_NOT_APPROXIMATE),
"gneq" => Relation(symbol::GREATER_THAN_AND_SINGLE_LINE_NOT_EQUAL_TO),
"gneqq" => Relation(symbol::GREATER_THAN_BUT_NOT_EQUAL_TO),
"gnsim" => Relation(symbol::GREATER_THAN_BUT_NOT_EQUIVALENT_TO),
"grave" => Accent(symbol::GRAVE_ACCENT, true, OpAttrs::empty()),
"gt" => OpGreaterThan,
"gtrapprox" => Relation(symbol::GREATER_THAN_OR_APPROXIMATE),
"gtreqless" => Relation(symbol::GREATER_THAN_EQUAL_TO_OR_LESS_THAN),
"gtreqqless" => Relation(symbol::GREATER_THAN_ABOVE_DOUBLE_LINE_EQUAL_ABOVE_LESS_THAN),
"gtrless" => Relation(symbol::GREATER_THAN_OR_LESS_THAN),
"gtrsim" => Relation(symbol::GREATER_THAN_OR_EQUIVALENT_TO),
"hArr" => Relation(symbol::LEFT_RIGHT_DOUBLE_ARROW),
"harr" => Relation(symbol::LEFT_RIGHT_ARROW),
"hat" => Accent(symbol::MODIFIER_LETTER_CIRCUMFLEX_ACCENT, true, OpAttrs::STRETCHY_FALSE),
"hbar" => Letter(symbol::PLANCK_CONSTANT_OVER_TWO_PI, Mode::Math),
"hearts" => Letter(symbol::WHITE_HEART_SUIT, Mode::Math),
"heartsuit" => Letter(symbol::WHITE_HEART_SUIT, Mode::Math),
"hookleftarrow" => Relation(symbol::LEFTWARDS_ARROW_WITH_HOOK),
"hookrightarrow" => Relation(symbol::RIGHTWARDS_ARROW_WITH_HOOK),
"hslash" => Letter(symbol::PLANCK_CONSTANT_OVER_TWO_PI, Mode::Math),
"hspace" => CustomSpace,
"i" => TextMode(TextToken::Letter('ı')),
"idotsint" => CustomCmd(0, &predefined::IDOTSINT),
"iff" => CustomCmd(0, &predefined::IFF),
"iiiint" => Op(symbol::QUADRUPLE_INTEGRAL_OPERATOR),
"iiint" => Op(symbol::TRIPLE_INTEGRAL),
"iint" => Op(symbol::DOUBLE_INTEGRAL),
"image" => Letter(symbol::BLACK_LETTER_CAPITAL_I, Mode::Math),
"imath" => Letter(symbol::LATIN_SMALL_LETTER_DOTLESS_I, Mode::Math),
"impliedby" => CustomCmd(0, &predefined::IMPLIEDBY),
"implies" => CustomCmd(0, &predefined::IMPLIES),
"in" => Relation(symbol::ELEMENT_OF),
"inf" => PseudoOperatorLimits("inf"),
"infin" => Letter(symbol::INFINITY, Mode::Math),
"infty" => Letter(symbol::INFINITY, Mode::Math),
"int" => Op(symbol::INTEGRAL),
"intBar" => Op(symbol::INTEGRAL_WITH_DOUBLE_STROKE),
"intbar" => Op(symbol::FINITE_PARTL_INTEGRAL),
"intclockwise" => Op(symbol::CLOCKWISE_INTEGRAL),
"intercal" => Relation(symbol::INTERCALATE),
"iota" => Letter(symbol::GREEK_SMALL_LETTER_IOTA, Mode::Math),
"isin" => Relation(symbol::ELEMENT_OF),
"it" => TransformSwitch(MathVariant::Transform(TextTransform::Italic)),
"j" => TextMode(TextToken::Letter('ȷ')),
"jmath" => Letter(symbol::LATIN_SMALL_LETTER_DOTLESS_J, Mode::Math),
"jupiter" => Letter(symbol::JUPITER, Mode::Math),
"kappa" => Letter(symbol::GREEK_SMALL_LETTER_KAPPA, Mode::Math),
"kernelcontraction" => Relation(symbol::HOMOTHETIC),
"ket" => CustomCmd(1, &predefined::KET),
"l" => TextMode(TextToken::Letter('ł')),
"lAngle" => Open(symbol::MATHEMATICAL_LEFT_DOUBLE_ANGLE_BRACKET),
"lArr" => Relation(symbol::LEFTWARDS_DOUBLE_ARROW),
"lBrace" => Open(symbol::LEFT_WHITE_CURLY_BRACKET),
"lVert" => Open(symbol::DOUBLE_VERTICAL_LINE),
"label" => Label,
"lambda" => Letter(symbol::GREEK_SMALL_LETTER_LAMBDA, Mode::Math),
"land" => BinaryOp(symbol::LOGICAL_AND),
"lang" => Open(symbol::MATHEMATICAL_LEFT_ANGLE_BRACKET),
"langle" => Open(symbol::MATHEMATICAL_LEFT_ANGLE_BRACKET),
"larr" => Relation(symbol::LEFTWARDS_ARROW),
"lbrace" => Open(symbol::LEFT_CURLY_BRACKET),
"lbrack" => Open(symbol::LEFT_SQUARE_BRACKET),
"lceil" => Open(symbol::LEFT_CEILING),
"ldots" => MathOrTextMode(&CustomCmd(0, &predefined::DOTS), symbol::HORIZONTAL_ELLIPSIS),
"le" => Relation(symbol::LESS_THAN_OR_EQUAL_TO),
"left" => Left,
"leftarrow" => Relation(symbol::LEFTWARDS_ARROW),
"leftarrowtail" => Relation(symbol::LEFTWARDS_ARROW_WITH_TAIL),
"leftharpoondown" => Relation(symbol::LEFTWARDS_HARPOON_WITH_BARB_DOWNWARDS),
"leftharpoonup" => Relation(symbol::LEFTWARDS_HARPOON_WITH_BARB_UPWARDS),
"leftleftarrows" => Relation(symbol::LEFTWARDS_PAIRED_ARROWS),
"leftrightarrow" => Relation(symbol::LEFT_RIGHT_ARROW),
"leftrightarrows" => Relation(symbol::LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW),
"leftrightharpoons" => Relation(symbol::LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON),
"leftrightsquigarrow" => Relation(symbol::LEFT_RIGHT_WAVE_ARROW),
"leftthreetimes" => ForceBinaryOp(symbol::LEFT_SEMIDIRECT_PRODUCT.as_op()),
"leq" => Relation(symbol::LESS_THAN_OR_EQUAL_TO),
"leqq" => Relation(symbol::LESS_THAN_OVER_EQUAL_TO),
"leqslant" => Relation(symbol::LESS_THAN_OR_SLANTED_EQUAL_TO),
"lessapprox" => Relation(symbol::LESS_THAN_OR_APPROXIMATE),
"lessdot" => Relation(symbol::LESS_THAN_WITH_DOT),
"lesseqgtr" => Relation(symbol::LESS_THAN_EQUAL_TO_OR_GREATER_THAN),
"lesseqqgtr" => Relation(symbol::LESS_THAN_ABOVE_DOUBLE_LINE_EQUAL_ABOVE_GREATER_THAN),
"lessgtr" => Relation(symbol::LESS_THAN_OR_GREATER_THAN),
"lesssim" => Relation(symbol::LESS_THAN_OR_EQUIVALENT_TO),
"lfloor" => Open(symbol::LEFT_FLOOR),
"lgroup" => Open(symbol::MATHEMATICAL_LEFT_FLATTENED_PARENTHESIS),
"lhd" => Relation(symbol::NORMAL_SUBGROUP_OF),
"lightning" => Relation(symbol::DOWNWARDS_ZIGZAG_ARROW),
"lim" => PseudoOperatorLimits("lim"),
"liminf" => PseudoOperatorLimits("lim\u{2009}inf"),
"limits" => Limits,
"limsup" => PseudoOperatorLimits("lim\u{2009}sup"),
"ll" => Relation(symbol::MUCH_LESS_THAN),
"llangle" => Open(symbol::Z_NOTATION_LEFT_BINDING_BRACKET), "llbracket" => Open(symbol::MATHEMATICAL_LEFT_WHITE_SQUARE_BRACKET),
"llcorner" => Letter(symbol::BOTTOM_LEFT_CORNER, Mode::Math),
"lll" => Relation(symbol::VERY_MUCH_LESS_THAN),
"llless" => Relation(symbol::VERY_MUCH_LESS_THAN),
"llparenthesis" => Open(symbol::Z_NOTATION_LEFT_IMAGE_BRACKET),
"lnapprox" => Relation(symbol::LESS_THAN_AND_NOT_APPROXIMATE),
"lneq" => Relation(symbol::LESS_THAN_AND_SINGLE_LINE_NOT_EQUAL_TO),
"lneqq" => Relation(symbol::LESS_THAN_BUT_NOT_EQUAL_TO),
"lnot" => Ord(symbol::NOT_SIGN),
"lnsim" => Relation(symbol::LESS_THAN_BUT_NOT_EQUIVALENT_TO),
"longleftarrow" => Relation(symbol::LONG_LEFTWARDS_ARROW),
"longleftrightarrow" => Relation(symbol::LONG_LEFT_RIGHT_ARROW),
"longmapsto" => Relation(symbol::LONG_RIGHTWARDS_ARROW_FROM_BAR),
"longrightarrow" => Relation(symbol::LONG_RIGHTWARDS_ARROW),
"looparrowleft" => Relation(symbol::LEFTWARDS_ARROW_WITH_LOOP),
"looparrowright" => Relation(symbol::RIGHTWARDS_ARROW_WITH_LOOP),
"lor" => BinaryOp(symbol::LOGICAL_OR),
"lozenge" => Letter(symbol::LOZENGE, Mode::Math),
"lrArr" => Relation(symbol::LEFT_RIGHT_DOUBLE_ARROW),
"lrarr" => Relation(symbol::LEFT_RIGHT_ARROW),
"lrcorner" => Letter(symbol::BOTTOM_RIGHT_CORNER, Mode::Math),
"lt" => OpLessThan,
"ltimes" => ForceBinaryOp(symbol::LEFT_NORMAL_FACTOR_SEMIDIRECT_PRODUCT.as_op()),
"lvert" => Open(symbol::VERTICAL_LINE),
"maltese" => Letter(symbol::MALTESE_CROSS, Mode::Math),
"mapsto" => Relation(symbol::RIGHTWARDS_ARROW_FROM_BAR),
"mars" => Letter(symbol::MALE_SIGN, Mode::Math),
"mathbb" => Transform(MathVariant::Transform(TextTransform::DoubleStruck)),
"mathbf" => Transform(MathVariant::Transform(TextTransform::Bold)),
"mathbin" => Mathbin,
"mathcal" => Transform(MathVariant::Transform(TextTransform::ScriptChancery)),
"mathfrak" => Transform(MathVariant::Transform(TextTransform::Fraktur)),
"mathit" => Transform(MathVariant::Transform(TextTransform::Italic)),
"mathring" => Accent(symbol::RING_ABOVE, true, OpAttrs::empty()),
"mathrm" => Transform(MathVariant::Normal),
"mathscr" => Transform(MathVariant::Transform(TextTransform::ScriptRoundhand)),
"mathsf" => Transform(MathVariant::Transform(TextTransform::SansSerif)),
"mathsterling" => Letter(symbol::POUND_SIGN, Mode::Math),
"mathstrut" => HardcodedMathML(r#"<mpadded width="0" style="visibility:hidden"><mo stretchy="false">(</mo></mpadded>"#),
"mathtt" => Transform(MathVariant::Transform(TextTransform::Monospace)),
"max" => PseudoOperatorLimits("max"),
"measeq" => Relation(symbol::MEASURED_BY), "measuredangle" => Letter(symbol::MEASURED_ANGLE, Mode::Math),
"medspace" => Space(LatexUnit::Mu.length_with_unit(4.0)),
"mercury" => Letter(symbol::MERCURY, Mode::Math),
"mho" => Letter(symbol::INVERTED_OHM_SIGN, Mode::Math),
"mid" => Relation(symbol::DIVIDES),
"middle" => Middle,
"min" => PseudoOperatorLimits("min"),
"mod" => CustomCmd(0, &predefined::MOD),
"models" => Relation(symbol::TRUE),
"mp" => BinaryOp(symbol::MINUS_OR_PLUS_SIGN),
"mspace" => CustomSpace,
"mu" => Letter(symbol::GREEK_SMALL_LETTER_MU, Mode::Math),
"multimap" => Relation(symbol::MULTIMAP),
"nLeftarrow" => Relation(symbol::LEFTWARDS_DOUBLE_ARROW_WITH_STROKE),
"nLeftrightarrow" => Relation(symbol::LEFT_RIGHT_DOUBLE_ARROW_WITH_STROKE),
"nRightarrow" => Relation(symbol::RIGHTWARDS_DOUBLE_ARROW_WITH_STROKE),
"nVDash" => Relation(symbol::NEGATED_DOUBLE_VERTICAL_BAR_DOUBLE_RIGHT_TURNSTILE),
"nVdash" => Relation(symbol::DOES_NOT_FORCE),
"nabla" => UprightLetter(symbol::NABLA),
"natnums" => Letter(symbol::DOUBLE_STRUCK_CAPITAL_N, Mode::Math),
"natural" => Letter(symbol::MUSIC_NATURAL_SIGN, Mode::Math),
"ne" => Relation(symbol::NOT_EQUAL_TO),
"nearrow" => Relation(symbol::NORTH_EAST_ARROW),
"neg" => Ord(symbol::NOT_SIGN),
"neptune" => Letter(symbol::NEPTUNE, Mode::Math),
"neq" => Relation(symbol::NOT_EQUAL_TO),
"nequiv" => Relation(symbol::NOT_IDENTICAL_TO),
"newline" => NewLine,
"nexists" => Ord(symbol::THERE_DOES_NOT_EXIST),
"ng" => TextMode(TextToken::Letter('ŋ')),
"ngeq" => Relation(symbol::NEITHER_GREATER_THAN_NOR_EQUAL_TO),
"ngtr" => Relation(symbol::NOT_GREATER_THAN),
"ngtrless" => Relation(symbol::NEITHER_GREATER_THAN_NOR_LESS_THAN),
"ngtrsim" => Relation(symbol::NEITHER_GREATER_THAN_NOR_EQUIVALENT_TO),
"ni" => Relation(symbol::CONTAINS_AS_MEMBER),
"nleftarrow" => Relation(symbol::LEFTWARDS_ARROW_WITH_STROKE),
"nleftrightarrow" => Relation(symbol::LEFT_RIGHT_ARROW_WITH_STROKE),
"nleq" => Relation(symbol::NEITHER_LESS_THAN_NOR_EQUAL_TO),
"nless" => Relation(symbol::NOT_LESS_THAN),
"nlessgt" => Relation(symbol::NEITHER_LESS_THAN_NOR_GREATER_THAN),
"nlesssim" => Relation(symbol::NEITHER_LESS_THAN_NOR_EQUIVALENT_TO),
"nmid" => Relation(symbol::DOES_NOT_DIVIDE),
"nonumber" => NoNumber,
"not" => Not,
"notag" => NoNumber,
"notin" => Relation(symbol::NOT_AN_ELEMENT_OF),
"nparallel" => Relation(symbol::NOT_PARALLEL_TO),
"nprec" => Relation(symbol::DOES_NOT_PRECEDE),
"npreceq" => Relation(symbol::DOES_NOT_PRECEDE_OR_EQUAL),
"nrightarrow" => Relation(symbol::RIGHTWARDS_ARROW_WITH_STROKE),
"nsim" => Relation(symbol::NOT_TILDE),
"nsubset" => Relation(symbol::NOT_A_SUBSET_OF),
"nsubseteq" => Relation(symbol::NEITHER_A_SUBSET_OF_NOR_EQUAL_TO),
"nsucc" => Relation(symbol::DOES_NOT_SUCCEED),
"nsucceq" => Relation(symbol::DOES_NOT_SUCCEED_OR_EQUAL),
"nsupset" => Relation(symbol::NOT_A_SUPERSET_OF),
"nsupseteq" => Relation(symbol::NEITHER_A_SUPERSET_OF_NOR_EQUAL_TO),
"nu" => Letter(symbol::GREEK_SMALL_LETTER_NU, Mode::Math),
"nvDash" => Relation(symbol::NOT_TRUE),
"nvdash" => Relation(symbol::DOES_NOT_PROVE),
"nwarrow" => Relation(symbol::NORTH_WEST_ARROW),
"o" => TextMode(TextToken::Letter('ø')),
"odot" => ForceBinaryOp(symbol::CIRCLED_DOT_OPERATOR.as_op()),
"odv" => CustomCmd(2, &predefined::ODV),
"oe" => TextMode(TextToken::Letter('œ')),
"oiiint" => Op(symbol::VOLUME_INTEGRAL),
"oiint" => Op(symbol::SURFACE_INTEGRAL),
"oint" => Op(symbol::CONTOUR_INTEGRAL),
"ointctrclockwise" => Op(symbol::ANTICLOCKWISE_CONTOUR_INTEGRAL),
"omega" => Letter(symbol::GREEK_SMALL_LETTER_OMEGA, Mode::Math),
"omicron" => Letter(symbol::GREEK_SMALL_LETTER_OMICRON, Mode::Math),
"ominus" => BinaryOp(symbol::CIRCLED_MINUS),
"operatorname" => OperatorName { with_limits: false },
"operatorname*" => OperatorName { with_limits: true },
"oplus" => BinaryOp(symbol::CIRCLED_PLUS),
"oslash" => BinaryOp(symbol::CIRCLED_DIVISION_SLASH),
"otimes" => ForceBinaryOp(symbol::CIRCLED_TIMES.as_op()),
"over" => InfixGenFrac { with_line: true, delim: None },
"overbrace" => OverUnderBrace(symbol::TOP_CURLY_BRACKET, true),
"overbracket" => OverUnderBrace(symbol::TOP_SQUARE_BRACKET, true),
"overleftarrow" => Accent(symbol::LEFTWARDS_ARROW.as_op(), true, OpAttrs::empty()),
"overline" => Accent(symbol::COMBINING_LOW_LINE, true, OpAttrs::STRETCHY_TRUE),
"overparen" => OverUnderBrace(symbol::TOP_PARENTHESIS, true),
"overrightarrow" => Accent(symbol::RIGHTWARDS_ARROW.as_op(), true, OpAttrs::empty()),
"overset" => Overset,
"owns" => Relation(symbol::CONTAINS_AS_MEMBER),
"parallel" => Relation(symbol::PARALLEL_TO),
"partial" => Letter(symbol::PARTIAL_DIFFERENTIAL, Mode::Math),
"perp" => Relation(symbol::PERPENDICULAR),
"phi" => Letter(symbol::GREEK_PHI_SYMBOL, Mode::Math),
"pi" => Letter(symbol::GREEK_SMALL_LETTER_PI, Mode::Math),
"pitchfork" => Relation(symbol::PITCHFORK),
"plusmn" => BinaryOp(symbol::PLUS_MINUS_SIGN),
"pm" => BinaryOp(symbol::PLUS_MINUS_SIGN),
"pmod" => CustomCmd(1, &predefined::PMOD),
"pounds" => Letter(symbol::POUND_SIGN, Mode::Math),
"prec" => Relation(symbol::PRECEDES),
"precapprox" => Relation(symbol::PRECEDES_ABOVE_ALMOST_EQUAL_TO),
"preccurlyeq" => Relation(symbol::PRECEDES_OR_EQUAL_TO),
"preceq" => Relation(symbol::PRECEDES_ABOVE_SINGLE_LINE_EQUALS_SIGN),
"precnapprox" => Relation(symbol::PRECEDES_ABOVE_NOT_ALMOST_EQUAL_TO),
"precneqq" => Relation(symbol::PRECEDES_ABOVE_NOT_EQUAL_TO),
"precnsim" => Relation(symbol::PRECEDES_BUT_NOT_EQUIVALENT_TO),
"precsim" => Relation(symbol::PRECEDES_OR_EQUIVALENT_TO),
"prime" => Ord(symbol::PRIME),
"prod" => Op(symbol::N_ARY_PRODUCT),
"propto" => Relation(symbol::PROPORTIONAL_TO),
"psi" => Letter(symbol::GREEK_SMALL_LETTER_PSI, Mode::Math),
"qprime" => Ord(symbol::QUADRUPLE_PRIME),
"qquad" => Space(LatexUnit::Em.length_with_unit(2.0)),
"quad" => Space(LatexUnit::Em.length_with_unit(1.0)),
"questeq" => Relation(symbol::QUESTIONED_EQUAL_TO), "r" => TextMode(TextToken::Accent(symbol::COMBINING_RING_ABOVE)),
"rAngle" => Close(symbol::MATHEMATICAL_RIGHT_DOUBLE_ANGLE_BRACKET),
"rArr" => Relation(symbol::RIGHTWARDS_DOUBLE_ARROW),
"rBrace" => Close(symbol::RIGHT_WHITE_CURLY_BRACKET),
"rVert" => Close(symbol::DOUBLE_VERTICAL_LINE),
"rang" => Close(symbol::MATHEMATICAL_RIGHT_ANGLE_BRACKET),
"rangle" => Close(symbol::MATHEMATICAL_RIGHT_ANGLE_BRACKET),
"rarr" => Relation(symbol::RIGHTWARDS_ARROW),
"rbrace" => Close(symbol::RIGHT_CURLY_BRACKET),
"rbrack" => Close(symbol::RIGHT_SQUARE_BRACKET),
"rceil" => Close(symbol::RIGHT_CEILING),
"real" => Letter(symbol::BLACK_LETTER_CAPITAL_R, Mode::Math),
"reals" => Letter(symbol::DOUBLE_STRUCK_CAPITAL_R, Mode::Math),
"rfloor" => Close(symbol::RIGHT_FLOOR),
"rgroup" => Close(symbol::MATHEMATICAL_RIGHT_FLATTENED_PARENTHESIS),
"rhd" => Relation(symbol::CONTAINS_AS_NORMAL_SUBGROUP),
"rho" => Letter(symbol::GREEK_SMALL_LETTER_RHO, Mode::Math),
"right" => Right,
"rightarrow" => Relation(symbol::RIGHTWARDS_ARROW),
"rightarrowtail" => Relation(symbol::RIGHTWARDS_ARROW_WITH_TAIL),
"rightharpoondown" => Relation(symbol::RIGHTWARDS_HARPOON_WITH_BARB_DOWNWARDS),
"rightharpoonup" => Relation(symbol::RIGHTWARDS_HARPOON_WITH_BARB_UPWARDS),
"rightleftarrows" => Relation(symbol::RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW),
"rightleftharpoons" => Relation(symbol::RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON),
"rightrightarrows" => Relation(symbol::RIGHTWARDS_PAIRED_ARROWS),
"rightsquigarrow" => Relation(symbol::RIGHTWARDS_SQUIGGLE_ARROW),
"rightthreetimes" => ForceBinaryOp(symbol::RIGHT_SEMIDIRECT_PRODUCT.as_op()),
"risingdotseq" => Relation(symbol::IMAGE_OF_OR_APPROXIMATELY_EQUAL_TO),
"rm" => TransformSwitch(MathVariant::Normal),
"rq" => Letter(symbol::RIGHT_SINGLE_QUOTATION_MARK, Mode::MathOrText),
"rrangle" => Close(symbol::Z_NOTATION_RIGHT_BINDING_BRACKET), "rrbracket" => Close(symbol::MATHEMATICAL_RIGHT_WHITE_SQUARE_BRACKET),
"rrparenthesis" => Close(symbol::Z_NOTATION_RIGHT_IMAGE_BRACKET),
"rtimes" => ForceBinaryOp(symbol::RIGHT_NORMAL_FACTOR_SEMIDIRECT_PRODUCT.as_op()),
"rupee" => Letter('₹', Mode::Math),
"rvert" => Close(symbol::VERTICAL_LINE),
"saturn" => Letter(symbol::SATURN, Mode::Math),
"scriptscriptstyle" => Style(Style::ScriptScript),
"scriptstyle" => Style(Style::Script),
"searrow" => Relation(symbol::SOUTH_EAST_ARROW),
"setminus" => BinaryOp(symbol::SET_MINUS),
"sf" => TransformSwitch(MathVariant::Transform(TextTransform::SansSerif)),
"sharp" => Letter(symbol::MUSIC_SHARP_SIGN, Mode::Math),
"sigma" => Letter(symbol::GREEK_SMALL_LETTER_SIGMA, Mode::Math),
"sim" => Relation(symbol::TILDE_OPERATOR),
"simeq" => Relation(symbol::ASYMPTOTICALLY_EQUAL_TO),
"slashed" => Slashed,
"smile" => Relation(symbol::SMILE),
"sout" => Enclose(Notation::HORIZONTAL),
"space" => NonBreakingSpace,
"spades" => Letter(symbol::BLACK_SPADE_SUIT, Mode::Math),
"spadesuit" => Letter(symbol::BLACK_SPADE_SUIT, Mode::Math),
"sphericalangle" => Letter(symbol::SPHERICAL_ANGLE, Mode::Math),
"sqcap" => BinaryOp(symbol::SQUARE_CAP),
"sqcup" => BinaryOp(symbol::SQUARE_CUP),
"sqrt" => Sqrt,
"sqsubset" => Relation(symbol::SQUARE_IMAGE_OF),
"sqsubseteq" => Relation(symbol::SQUARE_IMAGE_OF_OR_EQUAL_TO),
"sqsupset" => Relation(symbol::SQUARE_ORIGINAL_OF),
"sqsupseteq" => Relation(symbol::SQUARE_ORIGINAL_OF_OR_EQUAL_TO),
"square" => Letter(symbol::WHITE_SQUARE, Mode::Math),
"ss" => TextMode(TextToken::Letter('ß')),
"stackrel" => Overset,
"star" => ForceBinaryOp(symbol::STAR_OPERATOR.as_op()),
"stareq" => Relation(symbol::STAR_EQUALS), "sub" => Relation(symbol::SUBSET_OF),
"sube" => Relation(symbol::SUBSET_OF_OR_EQUAL_TO),
"subset" => Relation(symbol::SUBSET_OF),
"subseteq" => Relation(symbol::SUBSET_OF_OR_EQUAL_TO),
"subsetneq" => Relation(symbol::SUBSET_OF_WITH_NOT_EQUAL_TO),
"subsetneqq" => Relation(symbol::SUBSET_OF_ABOVE_NOT_EQUAL_TO),
"succ" => Relation(symbol::SUCCEEDS),
"succapprox" => Relation(symbol::SUCCEEDS_ABOVE_ALMOST_EQUAL_TO),
"succcurlyeq" => Relation(symbol::SUCCEEDS_OR_EQUAL_TO),
"succeq" => Relation(symbol::SUCCEEDS_ABOVE_SINGLE_LINE_EQUALS_SIGN),
"succnapprox" => Relation(symbol::SUCCEEDS_ABOVE_NOT_ALMOST_EQUAL_TO),
"succneqq" => Relation(symbol::SUCCEEDS_ABOVE_NOT_EQUAL_TO),
"succnsim" => Relation(symbol::SUCCEEDS_BUT_NOT_EQUIVALENT_TO),
"succsim" => Relation(symbol::SUCCEEDS_OR_EQUIVALENT_TO),
"sum" => Op(symbol::N_ARY_SUMMATION),
"sumint" => Op(symbol::SUMMATION_WITH_INTEGRAL),
"sun" => Letter(symbol::WHITE_SUN_WITH_RAYS, Mode::Math),
"sup" => PseudoOperatorLimits("sup"),
"supe" => Relation(symbol::SUPERSET_OF_OR_EQUAL_TO),
"supset" => Relation(symbol::SUPERSET_OF),
"supseteq" => Relation(symbol::SUPERSET_OF_OR_EQUAL_TO),
"supsetneq" => Relation(symbol::SUPERSET_OF_WITH_NOT_EQUAL_TO),
"supsetneqq" => Relation(symbol::SUPERSET_OF_ABOVE_NOT_EQUAL_TO),
"swarrow" => Relation(symbol::SOUTH_WEST_ARROW),
"symbf" => Transform(MathVariant::Transform(TextTransform::BoldItalic)),
"tag" => Tag,
"tau" => Letter(symbol::GREEK_SMALL_LETTER_TAU, Mode::Math),
"tbinom" => Binom(Some(FracAttr::DisplayStyleFalse)),
"text" => Text(None),
"textbackslash" => TextMode(TextToken::Letter('\\')),
"textbf" => Text(Some(HtmlTextStyle::Bold)),
"textit" => Text(Some(HtmlTextStyle::Italic)),
"textrm" => Text(Some(HtmlTextStyle::Serif)),
"textsc" => Text(Some(HtmlTextStyle::SmallCaps)),
"textsf" => Text(Some(HtmlTextStyle::SansSerif)),
"textstyle" => Style(Style::Text),
"texttt" => Text(Some(HtmlTextStyle::Typewriter)),
"textyen" => TextMode(TextToken::Letter(symbol::YEN_SIGN)),
"tfrac" => Frac(Some(FracAttr::DisplayStyleFalse)),
"th" => TextMode(TextToken::Letter(symbol::LATIN_SMALL_LETTER_THORN)),
"therefore" => Relation(symbol::THEREFORE),
"theta" => Letter(symbol::GREEK_SMALL_LETTER_THETA, Mode::Math),
"thickspace" => Space(LatexUnit::Mu.length_with_unit(5.0)),
"thinspace" => Space(LatexUnit::Mu.length_with_unit(3.0)),
"tilde" => Accent(symbol::SMALL_TILDE, true, OpAttrs::STRETCHY_FALSE),
"times" => ForceBinaryOp(symbol::MULTIPLICATION_SIGN.as_op()),
"to" => Relation(symbol::RIGHTWARDS_ARROW),
"top" => Letter(symbol::DOWN_TACK, Mode::Math),
"triangle" => Letter(symbol::WHITE_UP_POINTING_TRIANGLE, Mode::Math),
"triangledown" => Letter(symbol::WHITE_DOWN_POINTING_TRIANGLE, Mode::Math),
"triangleleft" => Letter(symbol::WHITE_LEFT_POINTING_TRIANGLE, Mode::Math),
"triangleq" => Relation(symbol::DELTA_EQUAL_TO),
"triangleright" => Letter(symbol::WHITE_RIGHT_POINTING_TRIANGLE, Mode::Math),
"trprime" => Ord(symbol::TRIPLE_PRIME),
"tt" => TransformSwitch(MathVariant::Transform(TextTransform::Monospace)),
"twoheadleftarrow" => Relation(symbol::LEFTWARDS_TWO_HEADED_ARROW),
"twoheadrightarrow" => Relation(symbol::RIGHTWARDS_TWO_HEADED_ARROW),
"u" => TextMode(TextToken::Accent(symbol::COMBINING_BREVE)),
"uArr" => Relation(symbol::UPWARDS_DOUBLE_ARROW),
"uarr" => Relation(symbol::UPWARDS_ARROW),
"ulcorner" => Letter(symbol::TOP_LEFT_CORNER, Mode::Math),
"underbrace" => OverUnderBrace(symbol::BOTTOM_CURLY_BRACKET, false),
"underbracket" => OverUnderBrace(symbol::BOTTOM_SQUARE_BRACKET, false),
"underline" => Accent(symbol::COMBINING_LOW_LINE, false, OpAttrs::STRETCHY_TRUE),
"underparen" => OverUnderBrace(symbol::BOTTOM_PARENTHESIS, false),
"underset" => Underset,
"unlhd" => Relation(symbol::NORMAL_SUBGROUP_OF_OR_EQUAL_TO),
"unrhd" => Relation(symbol::CONTAINS_AS_NORMAL_SUBGROUP_OR_EQUAL_TO),
"uparrow" => Relation(symbol::UPWARDS_ARROW),
"updownarrow" => Relation(symbol::UP_DOWN_ARROW),
"upharpoonleft" => Relation(symbol::UPWARDS_HARPOON_WITH_BARB_LEFTWARDS),
"upharpoonright" => Relation(symbol::UPWARDS_HARPOON_WITH_BARB_RIGHTWARDS),
"uplus" => BinaryOp(symbol::MULTISET_UNION),
"upsilon" => Letter(symbol::GREEK_SMALL_LETTER_UPSILON, Mode::Math),
"upuparrows" => Relation(symbol::UPWARDS_PAIRED_ARROWS),
"uranus" => Letter(symbol::URANUS, Mode::Math),
"urcorner" => Letter(symbol::TOP_RIGHT_CORNER, Mode::Math),
"v" => TextMode(TextToken::Accent(symbol::COMBINING_CARON)),
"vDash" => Relation(symbol::TRUE),
"varDelta" => Letter(symbol::GREEK_CAPITAL_LETTER_DELTA, Mode::Math), "varGamma" => Letter(symbol::GREEK_CAPITAL_LETTER_GAMMA, Mode::Math), "varLambda" => Letter(symbol::GREEK_CAPITAL_LETTER_LAMBDA, Mode::Math), "varOmega" => Letter(symbol::GREEK_CAPITAL_LETTER_OMEGA, Mode::Math), "varPhi" => Letter(symbol::GREEK_CAPITAL_LETTER_PHI, Mode::Math), "varPi" => Letter(symbol::GREEK_CAPITAL_LETTER_PI, Mode::Math), "varPsi" => Letter(symbol::GREEK_CAPITAL_LETTER_PSI, Mode::Math), "varSigma" => Letter(symbol::GREEK_CAPITAL_LETTER_SIGMA, Mode::Math), "varTheta" => Letter(symbol::GREEK_CAPITAL_LETTER_THETA, Mode::Math), "varUpsilon" => Letter(symbol::GREEK_CAPITAL_LETTER_UPSILON, Mode::Math), "varXi" => Letter(symbol::GREEK_CAPITAL_LETTER_XI, Mode::Math), "varepsilon" => Letter(symbol::GREEK_SMALL_LETTER_EPSILON, Mode::Math),
"varkappa" => Letter(symbol::GREEK_KAPPA_SYMBOL, Mode::Math),
"varnothing" => Letter(symbol::EMPTY_SET, Mode::Math),
"varointclockwise" => Op(symbol::CLOCKWISE_CONTOUR_INTEGRAL),
"varphi" => Letter(symbol::GREEK_SMALL_LETTER_PHI, Mode::Math),
"varpi" => Letter(symbol::GREEK_PI_SYMBOL, Mode::Math),
"varrho" => Letter(symbol::GREEK_RHO_SYMBOL, Mode::Math),
"varsigma" => Letter(symbol::GREEK_SMALL_LETTER_FINAL_SIGMA, Mode::Math),
"vartheta" => Letter(symbol::GREEK_THETA_SYMBOL, Mode::Math),
"vartriangle" => Letter(symbol::WHITE_UP_POINTING_TRIANGLE, Mode::Math),
"vdash" => Relation(symbol::RIGHT_TACK),
"vdots" => Relation(symbol::VERTICAL_ELLIPSIS),
"vec" => Accent(symbol::COMBINING_RIGHT_ARROW_ABOVE, true, OpAttrs::STRETCHY_FALSE),
"vee" => BinaryOp(symbol::LOGICAL_OR),
"veebar" => BinaryOp(symbol::XOR),
"veeeq" => Relation(symbol::EQUIANGULAR_TO), "venus" => Letter(symbol::FEMALE_SIGN, Mode::Math),
"vert" => Ord(symbol::VERTICAL_LINE),
"wedge" => BinaryOp(symbol::LOGICAL_AND),
"wedgeq" => Relation(symbol::ESTIMATES), "weierp" => Letter(symbol::SCRIPT_CAPITAL_P, Mode::Math),
"widehat" => Accent(symbol::COMBINING_CIRCUMFLEX_ACCENT, true, OpAttrs::STRETCHY_TRUE),
"wideparen" => OverUnderBrace(symbol::TOP_PARENTHESIS, true),
"wp" => Letter(symbol::SCRIPT_CAPITAL_P, Mode::Math),
"wr" => ForceBinaryOp(symbol::WREATH_PRODUCT.as_op()),
"xLeftarrow" => XArrow(symbol::LEFTWARDS_DOUBLE_ARROW),
"xLeftrightarrow" => XArrow(symbol::LEFT_RIGHT_DOUBLE_ARROW),
"xRightarrow" => XArrow(symbol::RIGHTWARDS_DOUBLE_ARROW),
"xcancel" => Enclose(Notation::UP_DIAGONAL.union(Notation::DOWN_DIAGONAL)),
"xhookleftarrow" => XArrow(symbol::LEFTWARDS_ARROW_WITH_HOOK),
"xhookrightarrow" => XArrow(symbol::RIGHTWARDS_ARROW_WITH_HOOK),
"xi" => Letter(symbol::GREEK_SMALL_LETTER_XI, Mode::Math),
"xleftarrow" => XArrow(symbol::LEFTWARDS_ARROW),
"xleftharpoondown" => XArrow(symbol::LEFTWARDS_HARPOON_WITH_BARB_DOWNWARDS),
"xleftharpoonup" => XArrow(symbol::LEFTWARDS_HARPOON_WITH_BARB_UPWARDS),
"xleftrightarrow" => XArrow(symbol::LEFT_RIGHT_ARROW),
"xleftrightharpoons" => XArrow(symbol::LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON),
"xlongequal" => XArrow(symbol::EQUALS_SIGN),
"xmapsto" => XArrow(symbol::RIGHTWARDS_ARROW_FROM_BAR),
"xrightarrow" => XArrow(symbol::RIGHTWARDS_ARROW),
"xrightharpoondown" => XArrow(symbol::RIGHTWARDS_HARPOON_WITH_BARB_DOWNWARDS),
"xrightharpoonup" => XArrow(symbol::RIGHTWARDS_HARPOON_WITH_BARB_UPWARDS),
"xrightleftharpoons" => XArrow(symbol::RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON),
"xtofrom" => XArrow(symbol::RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW),
"xtwoheadleftarrow" => XArrow(symbol::LEFTWARDS_TWO_HEADED_ARROW),
"xtwoheadrightarrow" => XArrow(symbol::RIGHTWARDS_TWO_HEADED_ARROW),
"zeta" => Letter(symbol::GREEK_SMALL_LETTER_ZETA, Mode::Math),
"{" => MathOrTextMode(&Open(symbol::LEFT_CURLY_BRACKET), '{'),
"|" => Ord(symbol::DOUBLE_VERTICAL_LINE),
"}" => MathOrTextMode(&Close(symbol::RIGHT_CURLY_BRACKET), '}'),
"~" => TextMode(TextToken::Accent(symbol::COMBINING_TILDE)),
};
pub fn get_command(command: &str) -> Option<Token<'static>> {
if let Some(token) = COMMANDS.get(command) {
Some(*token)
} else {
if let Some(function) = FUNCTIONS.get_key(command) {
return Some(PseudoOperator(function));
}
None
}
}
pub fn get_negated_op(op: Rel) -> Option<Rel> {
match op {
symbol::EQUALS_SIGN => Some(symbol::NOT_EQUAL_TO),
symbol::ALMOST_EQUAL_TO => Some(symbol::NOT_ALMOST_EQUAL_TO),
symbol::APPROXIMATELY_EQUAL_TO => Some(symbol::NOT_ASYMPTOTICALLY_EQUAL_TO),
symbol::DOUBLE_VERTICAL_BAR_DOUBLE_RIGHT_TURNSTILE => {
Some(symbol::NEGATED_DOUBLE_VERTICAL_BAR_DOUBLE_RIGHT_TURNSTILE)
}
symbol::ELEMENT_OF => Some(symbol::NOT_AN_ELEMENT_OF),
symbol::FORCES => Some(symbol::DOES_NOT_FORCE),
symbol::GREATER_THAN_OVER_EQUAL_TO => Some(symbol::NEITHER_GREATER_THAN_NOR_EQUAL_TO),
symbol::LESS_THAN_OR_EQUAL_TO => Some(symbol::NEITHER_LESS_THAN_NOR_EQUAL_TO),
symbol::PRECEDES => Some(symbol::DOES_NOT_PRECEDE),
symbol::RIGHT_TACK => Some(symbol::DOES_NOT_PROVE),
symbol::SUBSET_OF => Some(symbol::NOT_A_SUBSET_OF),
symbol::SUBSET_OF_OR_EQUAL_TO => Some(symbol::NEITHER_A_SUBSET_OF_NOR_EQUAL_TO),
symbol::SUCCEEDS => Some(symbol::DOES_NOT_SUCCEED),
symbol::SUPERSET_OF => Some(symbol::NOT_A_SUPERSET_OF),
symbol::SUPERSET_OF_OR_EQUAL_TO => Some(symbol::NEITHER_A_SUPERSET_OF_NOR_EQUAL_TO),
symbol::TRUE => Some(symbol::NOT_TRUE),
_ => None,
}
}