math-core 0.6.1

Convert LaTeX equations to MathML Core
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
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, *},
};

// These function names are essentially just passed-through, wrapped in a token.
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), // from "stix"
    "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), // should be Ord, but FF has a bug
    "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}"), // Unicode variation selector
    ]),
    "emptyset" => CustomCmd(0, &[
        Transform(MathVariant::Normal),
        InternalStringLiteral("\u{FE00}"), // Unicode variation selector
    ]),
    "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), // from "stix"
    "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), // from "stix"
    "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), // from "stix"
    "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), // from "stix"
    "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), // from "stix"
    "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), // from "stix"
    "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), // italicized
    "varGamma" => Letter(symbol::GREEK_CAPITAL_LETTER_GAMMA, Mode::Math), // italicized
    "varLambda" => Letter(symbol::GREEK_CAPITAL_LETTER_LAMBDA, Mode::Math), // italicized
    "varOmega" => Letter(symbol::GREEK_CAPITAL_LETTER_OMEGA, Mode::Math), // italicized
    "varPhi" => Letter(symbol::GREEK_CAPITAL_LETTER_PHI, Mode::Math), // italicized
    "varPi" => Letter(symbol::GREEK_CAPITAL_LETTER_PI, Mode::Math), // italicized
    "varPsi" => Letter(symbol::GREEK_CAPITAL_LETTER_PSI, Mode::Math), // italicized
    "varSigma" => Letter(symbol::GREEK_CAPITAL_LETTER_SIGMA, Mode::Math), // italicized
    "varTheta" => Letter(symbol::GREEK_CAPITAL_LETTER_THETA, Mode::Math), // italicized
    "varUpsilon" => Letter(symbol::GREEK_CAPITAL_LETTER_UPSILON, Mode::Math), // italicized
    "varXi" => Letter(symbol::GREEK_CAPITAL_LETTER_XI, Mode::Math), // italicized
    "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), // from "stix"
    "venus" => Letter(symbol::FEMALE_SIGN, Mode::Math),
    "vert" => Ord(symbol::VERTICAL_LINE),
    "wedge" => BinaryOp(symbol::LOGICAL_AND),
    "wedgeq" => Relation(symbol::ESTIMATES), // from "stix"
    "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,
    }
}