1use std::fmt::Debug;
2
3#[cfg(feature = "serde")]
4use serde::Serialize;
5
6#[derive(Debug, Clone, PartialEq, Eq, Copy)]
11#[cfg_attr(feature = "serde", derive(Serialize))]
12#[repr(transparent)]
13#[cfg_attr(feature = "serde", serde(transparent))]
14pub struct MathMLOperator(char);
15
16impl MathMLOperator {
17 #[inline(always)]
18 pub const fn as_char(&self) -> char {
19 self.0
20 }
21}
22
23impl From<MathMLOperator> for char {
24 #[inline]
25 fn from(op: MathMLOperator) -> Self {
26 op.0
27 }
28}
29
30impl From<&MathMLOperator> for char {
31 #[inline]
32 fn from(op: &MathMLOperator) -> Self {
33 op.0
34 }
35}
36
37#[derive(Clone, PartialEq, Eq, Copy)]
42struct PseudoUtf16 {
43 char: u16,
44}
45
46impl PseudoUtf16 {
47 const fn new(ch: char) -> Self {
48 assert!(ch as u32 <= u16::MAX as u32);
49 PseudoUtf16 { char: ch as u16 }
50 }
51
52 #[inline(always)]
53 pub const fn as_char(&self) -> char {
54 debug_assert!(char::from_u32(self.char as u32).is_some());
55 unsafe { char::from_u32_unchecked(self.char as u32) }
56 }
57}
58
59impl Debug for PseudoUtf16 {
61 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
62 f.write_fmt(format_args!("{:?}", self.as_char()))
63 }
64}
65
66macro_rules! make_character_class {
67 ($(#[$meta:meta])* $struct_name:ident, $cat_type:ty, $const_fn_name:ident) => {
68 $(#[$meta])*
69 #[derive(Debug, Clone, PartialEq, Eq, Copy)]
70 pub struct $struct_name {
71 char: PseudoUtf16,
72 pub cat: $cat_type,
73 }
74
75 const fn $const_fn_name(ch: char, cat: $cat_type) -> $struct_name {
77 $struct_name {
78 char: PseudoUtf16::new(ch),
79 cat,
80 }
81 }
82
83 impl $struct_name {
84 #[inline(always)]
85 pub const fn as_op(&self) -> MathMLOperator {
86 MathMLOperator(self.char.as_char())
87 }
88 }
89 };
90}
91
92#[derive(Debug, Clone, Copy, PartialEq, Eq)]
93pub enum OrdCategory {
94 FGandForceDefault,
100 OnlyB,
102 OnlyD,
104 OnlyE,
106 OnlyI,
108 OnlyK,
110}
111
112make_character_class!(
113 OrdLike, OrdCategory, ord
115);
116
117impl OrdLike {
118 #[inline(always)]
119 pub const fn as_stretchable_op(&self) -> Option<StretchableOp> {
120 let (stretchy, nonzero_spacing) = match self.cat {
121 OrdCategory::FGandForceDefault => (Stretchy::PrePostfix, true),
123 OrdCategory::OnlyB => (Stretchy::Never, true),
124 OrdCategory::OnlyK => (Stretchy::Never, false),
125 _ => {
126 return None;
127 }
128 };
129 Some(StretchableOp {
130 char: self.char,
131 stretchy,
132 nonzero_spacing,
133 })
134 }
135}
136
137#[derive(Debug, Clone, Copy, PartialEq, Eq)]
138pub enum OpCategory {
139 OnlyC,
141 OnlyH,
143 OnlyJ,
146}
147
148make_character_class!(
149 Op, OpCategory, op
151);
152
153#[derive(Debug, Clone, Copy, PartialEq, Eq)]
154pub enum BinCategory {
155 OnlyB,
157 BD,
159}
160
161make_character_class!(
162 Bin, BinCategory, bin
165);
166
167#[derive(Debug, Clone, Copy, PartialEq, Eq)]
168pub enum RelCategory {
169 Default,
170 OnlyA,
172}
173
174make_character_class!(
175 Rel, RelCategory, rel
177);
178
179impl Rel {
180 #[inline(always)]
181 pub const fn as_stretchable_op(&self) -> Option<StretchableOp> {
182 match self.cat {
183 RelCategory::OnlyA => Some(StretchableOp {
184 char: self.char,
185 stretchy: Stretchy::AlwaysAsymmetric,
186 nonzero_spacing: true,
187 }),
188 _ => None,
189 }
190 }
191}
192
193#[derive(Debug, Clone, PartialEq, Eq, Copy)]
195#[repr(transparent)]
196pub struct Punct(char);
197
198impl Punct {
199 #[inline(always)]
200 pub const fn as_op(&self) -> MathMLOperator {
201 MathMLOperator(self.0)
202 }
203}
204
205#[derive(Debug, Clone, PartialEq, Eq, Copy)]
208#[repr(transparent)]
209pub struct Fence(char);
210
211impl Fence {
212 #[inline(always)]
213 pub const fn as_op(&self) -> StretchableOp {
214 StretchableOp {
215 char: PseudoUtf16::new(self.0),
216 stretchy: Stretchy::Always,
217 nonzero_spacing: false,
218 }
219 }
220}
221
222#[derive(Debug, Clone, Copy, PartialEq, Eq)]
223#[cfg_attr(feature = "serde", derive(Serialize))]
224pub enum Stretchy {
225 Always = 1,
227 PrePostfix,
229 Never,
231 AlwaysAsymmetric,
233}
234
235#[derive(Debug, Clone, PartialEq, Eq, Copy)]
236pub struct StretchableOp {
237 char: PseudoUtf16,
238 pub stretchy: Stretchy,
239 pub nonzero_spacing: bool,
240}
241
242#[cfg(feature = "serde")]
243impl Serialize for StretchableOp {
244 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
245 where
246 S: serde::Serializer,
247 {
248 use serde::ser::SerializeTupleStruct;
249
250 let mut state = serializer.serialize_tuple_struct("StretchableOp", 2)?;
251 state.serialize_field(&char::from(*self))?;
252 state.serialize_field(&self.stretchy)?;
253 state.end()
254 }
255}
256
257impl StretchableOp {
258 #[inline]
261 pub fn ordinary_spacing(&self) -> bool {
262 matches!(self.stretchy, Stretchy::Never | Stretchy::PrePostfix)
263 }
264}
265
266impl From<StretchableOp> for char {
267 #[inline]
268 fn from(op: StretchableOp) -> Self {
269 op.char.as_char()
270 }
271}
272
273pub const EXCLAMATION_MARK: MathMLOperator = MathMLOperator('!');
277pub const NUMBER_SIGN: char = '#';
279pub const DOLLAR_SIGN: char = '$';
280pub const PERCENT_SIGN: char = '%';
281pub const AMPERSAND: OrdLike = ord('&', OrdCategory::OnlyE);
282pub const LEFT_PARENTHESIS: Fence = Fence('(');
284pub const RIGHT_PARENTHESIS: Fence = Fence(')');
285pub const PLUS_SIGN: Bin = bin('+', BinCategory::BD);
287pub const COMMA: Punct = Punct(',');
288pub const FULL_STOP: Op = op('.', OpCategory::OnlyC);
289pub const SOLIDUS: OrdLike = ord('/', OrdCategory::OnlyB); pub const COLON: Punct = Punct(':');
292pub const SEMICOLON: Punct = Punct(';');
293pub const EQUALS_SIGN: Rel = rel('=', RelCategory::Default);
295pub const LEFT_SQUARE_BRACKET: Fence = Fence('[');
300pub const REVERSE_SOLIDUS: OrdLike = ord('\\', OrdCategory::OnlyK);
301pub const RIGHT_SQUARE_BRACKET: Fence = Fence(']');
302pub const LOW_LINE: Rel = rel('_', RelCategory::Default);
304pub const GRAVE_ACCENT: Rel = rel('`', RelCategory::Default);
305
306pub const LEFT_CURLY_BRACKET: Fence = Fence('{');
307pub const VERTICAL_LINE: OrdLike = ord('|', OrdCategory::FGandForceDefault);
308pub const RIGHT_CURLY_BRACKET: Fence = Fence('}');
309pub const TILDE: Rel = rel('~', RelCategory::Default);
310
311pub const SECTION_SIGN: char = '§';
315pub const DIAERESIS: Rel = rel('¨', RelCategory::Default);
316pub const COPYRIGHT_SIGN: char = '©';
317
318pub const NOT_SIGN: OrdLike = ord('¬', OrdCategory::OnlyD);
319
320pub const MACRON: Rel = rel('¯', RelCategory::Default);
321
322pub const PLUS_MINUS_SIGN: Bin = bin('±', BinCategory::BD);
323
324pub const ACUTE_ACCENT: Rel = rel('´', RelCategory::Default);
325
326pub const PILCROW_SIGN: char = '¶';
327pub const MIDDLE_DOT: Op = op('·', OpCategory::OnlyC);
328
329pub const MULTIPLICATION_SIGN: Op = op('×', OpCategory::OnlyC);
330
331pub const LATIN_SMALL_LETTER_ETH: char = 'ð';
332
333pub const DIVISION_SIGN: Bin = bin('÷', BinCategory::BD);
334
335pub const LATIN_SMALL_LETTER_THORN: char = 'þ';
336
337pub const LATIN_SMALL_LETTER_DOTLESS_I: char = 'ı';
341
342pub const LATIN_SMALL_LETTER_DOTLESS_J: char = 'ȷ';
346
347pub const CARON: Rel = rel('ˇ', RelCategory::Default);
351pub const BREVE: Rel = rel('˘', RelCategory::Default);
352pub const DOT_ABOVE: Rel = rel('˙', RelCategory::Default);
353
354pub const COMBINING_GRAVE_ACCENT: char = '\u{300}';
358pub const COMBINING_ACUTE_ACCENT: char = '\u{301}';
359pub const COMBINING_CIRCUMFLEX_ACCENT: Rel = rel('\u{302}', RelCategory::Default);
360pub const COMBINING_TILDE: Rel = rel('\u{303}', RelCategory::Default);
361pub const COMBINING_OVERLINE: char = '\u{305}';
363pub const COMBINING_BREVE: char = '\u{306}';
364pub const COMBINING_DOT_ABOVE: char = '\u{307}';
365pub const COMBINING_DIAERESIS: char = '\u{308}';
366pub const COMBINING_RING_ABOVE: char = '\u{30A}';
368pub const COMBINING_DOUBLE_ACUTE_ACCENT: char = '\u{30B}';
369pub const COMBINING_CARON: Rel = rel('\u{30C}', RelCategory::Default);
370
371pub const COMBINING_CEDILLA: char = '\u{327}';
372
373pub const GREEK_CAPITAL_LETTER_ALPHA: char = 'Α';
377pub const GREEK_CAPITAL_LETTER_BETA: char = 'Β';
378pub const GREEK_CAPITAL_LETTER_GAMMA: char = 'Γ';
379pub const GREEK_CAPITAL_LETTER_DELTA: char = 'Δ';
380pub const GREEK_CAPITAL_LETTER_EPSILON: char = 'Ε';
381pub const GREEK_CAPITAL_LETTER_ZETA: char = 'Ζ';
382pub const GREEK_CAPITAL_LETTER_ETA: char = 'Η';
383pub const GREEK_CAPITAL_LETTER_THETA: char = 'Θ';
384pub const GREEK_CAPITAL_LETTER_IOTA: char = 'Ι';
385pub const GREEK_CAPITAL_LETTER_KAPPA: char = 'Κ';
386pub const GREEK_CAPITAL_LETTER_LAMBDA: char = 'Λ';
387pub const GREEK_CAPITAL_LETTER_MU: char = 'Μ';
388pub const GREEK_CAPITAL_LETTER_NU: char = 'Ν';
389pub const GREEK_CAPITAL_LETTER_XI: char = 'Ξ';
390pub const GREEK_CAPITAL_LETTER_OMICRON: char = 'Ο';
391pub const GREEK_CAPITAL_LETTER_PI: char = 'Π';
392pub const GREEK_CAPITAL_LETTER_RHO: char = 'Ρ';
393pub const GREEK_CAPITAL_LETTER_SIGMA: char = 'Σ';
394pub const GREEK_CAPITAL_LETTER_TAU: char = 'Τ';
395pub const GREEK_CAPITAL_LETTER_UPSILON: char = 'Υ';
396pub const GREEK_CAPITAL_LETTER_PHI: char = 'Φ';
397pub const GREEK_CAPITAL_LETTER_CHI: char = 'Χ';
398pub const GREEK_CAPITAL_LETTER_PSI: char = 'Ψ';
399pub const GREEK_CAPITAL_LETTER_OMEGA: char = 'Ω';
400
401pub const GREEK_SMALL_LETTER_ALPHA: char = 'α';
402pub const GREEK_SMALL_LETTER_BETA: char = 'β';
403pub const GREEK_SMALL_LETTER_GAMMA: char = 'γ';
404pub const GREEK_SMALL_LETTER_DELTA: char = 'δ';
405pub const GREEK_SMALL_LETTER_EPSILON: char = 'ε';
406pub const GREEK_SMALL_LETTER_ZETA: char = 'ζ';
407pub const GREEK_SMALL_LETTER_ETA: char = 'η';
408pub const GREEK_SMALL_LETTER_THETA: char = 'θ';
409pub const GREEK_SMALL_LETTER_IOTA: char = 'ι';
410pub const GREEK_SMALL_LETTER_KAPPA: char = 'κ';
411pub const GREEK_SMALL_LETTER_LAMBDA: char = 'λ';
412pub const GREEK_SMALL_LETTER_MU: char = 'μ';
413pub const GREEK_SMALL_LETTER_NU: char = 'ν';
414pub const GREEK_SMALL_LETTER_XI: char = 'ξ';
415pub const GREEK_SMALL_LETTER_OMICRON: char = 'ο';
416pub const GREEK_SMALL_LETTER_PI: char = 'π';
417pub const GREEK_SMALL_LETTER_RHO: char = 'ρ';
418pub const GREEK_SMALL_LETTER_FINAL_SIGMA: char = 'ς';
419pub const GREEK_SMALL_LETTER_SIGMA: char = 'σ';
420pub const GREEK_SMALL_LETTER_TAU: char = 'τ';
421pub const GREEK_SMALL_LETTER_UPSILON: char = 'υ';
422pub const GREEK_SMALL_LETTER_PHI: char = 'φ';
423pub const GREEK_SMALL_LETTER_CHI: char = 'χ';
424pub const GREEK_SMALL_LETTER_PSI: char = 'ψ';
425pub const GREEK_SMALL_LETTER_OMEGA: char = 'ω';
426
427pub const GREEK_THETA_SYMBOL: char = 'ϑ';
428pub const GREEK_PHI_SYMBOL: char = 'ϕ';
431pub const GREEK_PI_SYMBOL: char = 'ϖ';
432
433pub const GREEK_SMALL_LETTER_DIGAMMA: char = 'ϝ';
435
436pub const GREEK_KAPPA_SYMBOL: char = 'ϰ';
437pub const GREEK_RHO_SYMBOL: char = 'ϱ';
438
439pub const GREEK_LUNATE_EPSILON_SYMBOL: char = 'ϵ';
442pub const GREEK_REVERSED_LUNATE_EPSILON_SYMBOL: char = '϶';
443
444pub const DOUBLE_VERTICAL_LINE: OrdLike = ord('‖', OrdCategory::FGandForceDefault); pub const DAGGER: char = '†';
450pub const DOUBLE_DAGGER: char = '‡';
451
452pub const HORIZONTAL_ELLIPSIS: char = '…';
453pub const PRIME: OrdLike = ord('′', OrdCategory::OnlyE);
454pub const DOUBLE_PRIME: OrdLike = ord('″', OrdCategory::OnlyE);
455pub const TRIPLE_PRIME: OrdLike = ord('‴', OrdCategory::OnlyE);
456pub const REVERSED_PRIME: OrdLike = ord('‵', OrdCategory::OnlyE);
457pub const REVERSED_DOUBLE_PRIME: OrdLike = ord('‶', OrdCategory::OnlyE);
458pub const REVERSED_TRIPLE_PRIME: OrdLike = ord('‷', OrdCategory::OnlyE);
459pub const OVERLINE: Rel = rel('‾', RelCategory::Default);
466
467pub const QUADRUPLE_PRIME: OrdLike = ord('⁗', OrdCategory::OnlyE);
468
469pub const COMBINING_RIGHT_ARROW_ABOVE: Rel = rel('\u{20D7}', RelCategory::Default);
473
474pub const COMBINING_THREE_DOTS_ABOVE: Rel = rel('\u{20DB}', RelCategory::Default);
475pub const COMBINING_FOUR_DOTS_ABOVE: Rel = rel('\u{20DC}', RelCategory::Default);
476
477pub const PLANCK_CONSTANT_OVER_TWO_PI: char = 'ℏ';
481pub const BLACK_LETTER_CAPITAL_I: char = 'ℑ';
483pub const SCRIPT_SMALL_L: char = 'ℓ';
485
486pub const SCRIPT_CAPITAL_P: char = '℘';
487
488pub const BLACK_LETTER_CAPITAL_R: char = 'ℜ';
489pub const DOUBLE_STRUCK_CAPITAL_R: char = 'ℝ';
490
491pub const INVERTED_OHM_SIGN: char = '℧';
492
493pub const ANGSTROM_SIGN: char = 'Å';
494
495pub const TURNED_CAPITAL_F: char = 'Ⅎ';
496
497pub const ALEF_SYMBOL: char = 'ℵ';
498pub const BET_SYMBOL: char = 'ℶ';
499pub const GIMEL_SYMBOL: char = 'ℷ';
500pub const DALET_SYMBOL: char = 'ℸ';
501
502pub const TURNED_SANS_SERIF_CAPITAL_G: char = '⅁';
503
504pub const LEFTWARDS_ARROW: Rel = rel('←', RelCategory::Default);
508pub const UPWARDS_ARROW: Rel = rel('↑', RelCategory::OnlyA);
509pub const RIGHTWARDS_ARROW: Rel = rel('→', RelCategory::Default);
510pub const DOWNWARDS_ARROW: Rel = rel('↓', RelCategory::OnlyA);
511pub const LEFT_RIGHT_ARROW: Rel = rel('↔', RelCategory::Default);
512pub const UP_DOWN_ARROW: Rel = rel('↕', RelCategory::OnlyA);
513pub const NORTH_WEST_ARROW: Rel = rel('↖', RelCategory::Default);
514pub const NORTH_EAST_ARROW: Rel = rel('↗', RelCategory::Default);
515pub const SOUTH_EAST_ARROW: Rel = rel('↘', RelCategory::Default);
516pub const SOUTH_WEST_ARROW: Rel = rel('↙', RelCategory::Default);
517pub const LEFTWARDS_ARROW_WITH_STROKE: Rel = rel('↚', RelCategory::Default);
518pub const RIGHTWARDS_ARROW_WITH_STROKE: Rel = rel('↛', RelCategory::Default);
519pub const LEFTWARDS_TWO_HEADED_ARROW: Rel = rel('↞', RelCategory::Default);
522pub const RIGHTWARDS_TWO_HEADED_ARROW: Rel = rel('↠', RelCategory::Default);
524pub const LEFTWARDS_ARROW_WITH_TAIL: Rel = rel('↢', RelCategory::Default);
526pub const RIGHTWARDS_ARROW_WITH_TAIL: Rel = rel('↣', RelCategory::Default);
527pub const RIGHTWARDS_ARROW_FROM_BAR: Rel = rel('↦', RelCategory::Default);
530pub const LEFTWARDS_ARROW_WITH_HOOK: Rel = rel('↩', RelCategory::Default);
533pub const RIGHTWARDS_ARROW_WITH_HOOK: Rel = rel('↪', RelCategory::Default);
534pub const LEFTWARDS_ARROW_WITH_LOOP: Rel = rel('↫', RelCategory::Default);
535pub const RIGHTWARDS_ARROW_WITH_LOOP: Rel = rel('↬', RelCategory::Default);
536pub const LEFT_RIGHT_WAVE_ARROW: Rel = rel('↭', RelCategory::Default);
537pub const LEFT_RIGHT_ARROW_WITH_STROKE: Rel = rel('↮', RelCategory::Default);
538pub const DOWNWARDS_ZIGZAG_ARROW: Rel = rel('↯', RelCategory::Default);
539pub const UPWARDS_ARROW_WITH_TIP_LEFTWARDS: Rel = rel('↰', RelCategory::Default);
540pub const UPWARDS_ARROW_WITH_TIP_RIGHTWARDS: Rel = rel('↱', RelCategory::Default);
541pub const ANTICLOCKWISE_TOP_SEMICIRCLE_ARROW: Rel = rel('↶', RelCategory::Default);
546pub const CLOCKWISE_TOP_SEMICIRCLE_ARROW: Rel = rel('↷', RelCategory::Default);
547pub const ANTICLOCKWISE_OPEN_CIRCLE_ARROW: Rel = rel('↺', RelCategory::Default);
550pub const CLOCKWISE_OPEN_CIRCLE_ARROW: Rel = rel('↻', RelCategory::Default);
551pub const LEFTWARDS_HARPOON_WITH_BARB_UPWARDS: Rel = rel('↼', RelCategory::Default);
552pub const LEFTWARDS_HARPOON_WITH_BARB_DOWNWARDS: Rel = rel('↽', RelCategory::Default);
553pub const UPWARDS_HARPOON_WITH_BARB_RIGHTWARDS: Rel = rel('↾', RelCategory::Default);
554pub const UPWARDS_HARPOON_WITH_BARB_LEFTWARDS: Rel = rel('↿', RelCategory::Default);
555pub const RIGHTWARDS_HARPOON_WITH_BARB_UPWARDS: Rel = rel('⇀', RelCategory::Default);
556pub const RIGHTWARDS_HARPOON_WITH_BARB_DOWNWARDS: Rel = rel('⇁', RelCategory::Default);
557pub const DOWNWARDS_HARPOON_WITH_BARB_RIGHTWARDS: Rel = rel('⇂', RelCategory::Default);
558pub const DOWNWARDS_HARPOON_WITH_BARB_LEFTWARDS: Rel = rel('⇃', RelCategory::Default);
559pub const RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW: Rel = rel('⇄', RelCategory::Default);
560pub const LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW: Rel = rel('⇆', RelCategory::Default);
562pub const LEFTWARDS_PAIRED_ARROWS: Rel = rel('⇇', RelCategory::Default);
563pub const UPWARDS_PAIRED_ARROWS: Rel = rel('⇈', RelCategory::Default);
564pub const RIGHTWARDS_PAIRED_ARROWS: Rel = rel('⇉', RelCategory::Default);
565pub const DOWNWARDS_PAIRED_ARROWS: Rel = rel('⇊', RelCategory::Default);
566pub const LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON: Rel = rel('⇋', RelCategory::Default);
567pub const RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON: Rel = rel('⇌', RelCategory::Default);
568pub const LEFTWARDS_DOUBLE_ARROW_WITH_STROKE: Rel = rel('⇍', RelCategory::Default);
569pub const LEFT_RIGHT_DOUBLE_ARROW_WITH_STROKE: Rel = rel('⇎', RelCategory::Default);
570pub const RIGHTWARDS_DOUBLE_ARROW_WITH_STROKE: Rel = rel('⇏', RelCategory::Default);
571pub const LEFTWARDS_DOUBLE_ARROW: Rel = rel('⇐', RelCategory::Default);
572pub const UPWARDS_DOUBLE_ARROW: Rel = rel('⇑', RelCategory::OnlyA);
573pub const RIGHTWARDS_DOUBLE_ARROW: Rel = rel('⇒', RelCategory::Default);
574pub const DOWNWARDS_DOUBLE_ARROW: Rel = rel('⇓', RelCategory::OnlyA);
575pub const LEFT_RIGHT_DOUBLE_ARROW: Rel = rel('⇔', RelCategory::Default);
576pub const UP_DOWN_DOUBLE_ARROW: Rel = rel('⇕', RelCategory::OnlyA);
577pub const LEFTWARDS_TRIPLE_ARROW: Rel = rel('⇚', RelCategory::Default);
582pub const RIGHTWARDS_TRIPLE_ARROW: Rel = rel('⇛', RelCategory::Default);
583pub const RIGHTWARDS_SQUIGGLE_ARROW: Rel = rel('⇝', RelCategory::Default);
585pub const FOR_ALL: OrdLike = ord('∀', OrdCategory::OnlyD);
624pub const COMPLEMENT: OrdLike = ord('∁', OrdCategory::OnlyD);
625pub const PARTIAL_DIFFERENTIAL: char = '∂'; pub const THERE_EXISTS: OrdLike = ord('∃', OrdCategory::OnlyD);
627pub const THERE_DOES_NOT_EXIST: OrdLike = ord('∄', OrdCategory::OnlyD);
628pub const EMPTY_SET: char = '∅';
629pub const NABLA: char = '∇'; pub const ELEMENT_OF: Rel = rel('∈', RelCategory::Default);
632pub const NOT_AN_ELEMENT_OF: Rel = rel('∉', RelCategory::Default);
633pub const CONTAINS_AS_MEMBER: Rel = rel('∋', RelCategory::Default);
635pub const N_ARY_PRODUCT: Op = op('∏', OpCategory::OnlyJ);
639pub const N_ARY_COPRODUCT: Op = op('∐', OpCategory::OnlyJ);
640pub const N_ARY_SUMMATION: Op = op('∑', OpCategory::OnlyJ);
641pub const MINUS_SIGN: Bin = bin('−', BinCategory::BD);
642pub const MINUS_OR_PLUS_SIGN: Bin = bin('∓', BinCategory::BD);
643pub const DOT_PLUS: Bin = bin('∔', BinCategory::BD);
644pub const SET_MINUS: Bin = bin('∖', BinCategory::BD);
646pub const ASTERISK_OPERATOR: Bin = bin('∗', BinCategory::BD);
647pub const RING_OPERATOR: Op = op('∘', OpCategory::OnlyC);
648pub const BULLET_OPERATOR: Op = op('∙', OpCategory::OnlyC);
649pub const PROPORTIONAL_TO: Rel = rel('∝', RelCategory::Default);
653pub const INFINITY: char = '∞';
654pub const ANGLE: char = '∠';
656pub const MEASURED_ANGLE: char = '∡';
657pub const SPHERICAL_ANGLE: char = '∢';
658pub const DIVIDES: Rel = rel('∣', RelCategory::Default);
659pub const DOES_NOT_DIVIDE: Rel = rel('∤', RelCategory::Default);
660pub const PARALLEL_TO: Rel = rel('∥', RelCategory::Default);
661pub const NOT_PARALLEL_TO: Rel = rel('∦', RelCategory::Default);
662pub const LOGICAL_AND: Bin = bin('∧', BinCategory::BD);
663pub const LOGICAL_OR: Bin = bin('∨', BinCategory::BD);
664pub const INTERSECTION: Bin = bin('∩', BinCategory::BD);
665pub const UNION: Bin = bin('∪', BinCategory::BD);
666pub const INTEGRAL: Op = op('∫', OpCategory::OnlyH);
667pub const DOUBLE_INTEGRAL: Op = op('∬', OpCategory::OnlyH);
668pub const TRIPLE_INTEGRAL: Op = op('∭', OpCategory::OnlyH);
669pub const CONTOUR_INTEGRAL: Op = op('∮', OpCategory::OnlyH);
670pub const SURFACE_INTEGRAL: Op = op('∯', OpCategory::OnlyH);
671pub const VOLUME_INTEGRAL: Op = op('∰', OpCategory::OnlyH);
672pub const CLOCKWISE_INTEGRAL: Op = op('∱', OpCategory::OnlyH);
673pub const CLOCKWISE_CONTOUR_INTEGRAL: Op = op('∲', OpCategory::OnlyH);
674pub const ANTICLOCKWISE_CONTOUR_INTEGRAL: Op = op('∳', OpCategory::OnlyH);
675pub const THEREFORE: Rel = rel('∴', RelCategory::Default);
676pub const BECAUSE: Rel = rel('∵', RelCategory::Default);
677pub const PROPORTION: Rel = rel('∷', RelCategory::Default);
679pub const EXCESS: Rel = rel('∹', RelCategory::Default);
681pub const GEOMETRIC_PROPORTION: Rel = rel('∺', RelCategory::Default);
682pub const HOMOTHETIC: Rel = rel('∻', RelCategory::Default);
683pub const TILDE_OPERATOR: Rel = rel('∼', RelCategory::Default);
684pub const REVERSED_TILDE: Rel = rel('∽', RelCategory::Default);
685pub const WREATH_PRODUCT: Op = op('≀', OpCategory::OnlyC);
688pub const NOT_TILDE: Rel = rel('≁', RelCategory::Default);
689pub const MINUS_TILDE: Rel = rel('≂', RelCategory::Default);
690pub const ASYMPTOTICALLY_EQUAL_TO: Rel = rel('≃', RelCategory::Default);
691pub const NOT_ASYMPTOTICALLY_EQUAL_TO: Rel = rel('≄', RelCategory::Default);
692pub const APPROXIMATELY_EQUAL_TO: Rel = rel('≅', RelCategory::Default);
693pub const ALMOST_EQUAL_TO: Rel = rel('≈', RelCategory::Default);
696pub const NOT_ALMOST_EQUAL_TO: Rel = rel('≉', RelCategory::Default);
697pub const ALMOST_EQUAL_OR_EQUAL_TO: Rel = rel('≊', RelCategory::Default);
698pub const EQUIVALENT_TO: Rel = rel('≍', RelCategory::Default);
701pub const GEOMETRICALLY_EQUIVALENT_TO: Rel = rel('≎', RelCategory::Default);
702pub const DIFFERENCE_BETWEEN: Rel = rel('≏', RelCategory::Default);
703pub const APPROACHES_THE_LIMIT: Rel = rel('≐', RelCategory::Default);
704pub const GEOMETRICALLY_EQUAL_TO: Rel = rel('≑', RelCategory::Default);
705pub const APPROXIMATELY_EQUAL_TO_OR_THE_IMAGE_OF: Rel = rel('≒', RelCategory::Default);
706pub const IMAGE_OF_OR_APPROXIMATELY_EQUAL_TO: Rel = rel('≓', RelCategory::Default);
707pub const COLON_EQUALS: Rel = rel('≔', RelCategory::Default);
708pub const EQUALS_COLON: Rel = rel('≕', RelCategory::Default);
709pub const RING_IN_EQUAL_TO: Rel = rel('≖', RelCategory::Default);
710pub const RING_EQUAL_TO: Rel = rel('≗', RelCategory::Default);
711pub const CORRESPONDS_TO: Rel = rel('≘', RelCategory::Default);
712pub const ESTIMATES: Rel = rel('≙', RelCategory::Default);
713pub const EQUIANGULAR_TO: Rel = rel('≚', RelCategory::Default);
714pub const STAR_EQUALS: Rel = rel('≛', RelCategory::Default);
715pub const DELTA_EQUAL_TO: Rel = rel('≜', RelCategory::Default);
716pub const EQUAL_TO_BY_DEFINITION: Rel = rel('≝', RelCategory::Default);
717pub const MEASURED_BY: Rel = rel('≞', RelCategory::Default);
718pub const QUESTIONED_EQUAL_TO: Rel = rel('≟', RelCategory::Default);
719pub const NOT_EQUAL_TO: Rel = rel('≠', RelCategory::Default);
720pub const IDENTICAL_TO: Rel = rel('≡', RelCategory::Default);
721pub const NOT_IDENTICAL_TO: Rel = rel('≢', RelCategory::Default);
722pub const LESS_THAN_OR_EQUAL_TO: Rel = rel('≤', RelCategory::Default);
724pub const GREATER_THAN_OR_EQUAL_TO: Rel = rel('≥', RelCategory::Default);
725pub const LESS_THAN_OVER_EQUAL_TO: Rel = rel('≦', RelCategory::Default);
726pub const GREATER_THAN_OVER_EQUAL_TO: Rel = rel('≧', RelCategory::Default);
727pub const LESS_THAN_BUT_NOT_EQUAL_TO: Rel = rel('≨', RelCategory::Default);
728pub const GREATER_THAN_BUT_NOT_EQUAL_TO: Rel = rel('≩', RelCategory::Default);
729pub const MUCH_LESS_THAN: Rel = rel('≪', RelCategory::Default);
730pub const MUCH_GREATER_THAN: Rel = rel('≫', RelCategory::Default);
731pub const BETWEEN: Rel = rel('≬', RelCategory::Default);
732pub const NOT_LESS_THAN: Rel = rel('≮', RelCategory::Default);
734pub const NOT_GREATER_THAN: Rel = rel('≯', RelCategory::Default);
735pub const NEITHER_LESS_THAN_NOR_EQUAL_TO: Rel = rel('≰', RelCategory::Default);
736pub const NEITHER_GREATER_THAN_NOR_EQUAL_TO: Rel = rel('≱', RelCategory::Default);
737pub const LESS_THAN_OR_EQUIVALENT_TO: Rel = rel('≲', RelCategory::Default);
738pub const GREATER_THAN_OR_EQUIVALENT_TO: Rel = rel('≳', RelCategory::Default);
739pub const NEITHER_LESS_THAN_NOR_EQUIVALENT_TO: Rel = rel('≴', RelCategory::Default);
740pub const NEITHER_GREATER_THAN_NOR_EQUIVALENT_TO: Rel = rel('≵', RelCategory::Default);
741pub const LESS_THAN_OR_GREATER_THAN: Rel = rel('≶', RelCategory::Default);
742pub const GREATER_THAN_OR_LESS_THAN: Rel = rel('≷', RelCategory::Default);
743pub const NEITHER_LESS_THAN_NOR_GREATER_THAN: Rel = rel('≸', RelCategory::Default);
744pub const NEITHER_GREATER_THAN_NOR_LESS_THAN: Rel = rel('≹', RelCategory::Default);
745pub const PRECEDES: Rel = rel('≺', RelCategory::Default);
746pub const SUCCEEDS: Rel = rel('≻', RelCategory::Default);
747pub const PRECEDES_OR_EQUAL_TO: Rel = rel('≼', RelCategory::Default);
748pub const SUCCEEDS_OR_EQUAL_TO: Rel = rel('≽', RelCategory::Default);
749pub const PRECEDES_OR_EQUIVALENT_TO: Rel = rel('≾', RelCategory::Default);
750pub const SUCCEEDS_OR_EQUIVALENT_TO: Rel = rel('≿', RelCategory::Default);
751pub const DOES_NOT_PRECEDE: Rel = rel('⊀', RelCategory::Default);
752pub const DOES_NOT_SUCCEED: Rel = rel('⊁', RelCategory::Default);
753pub const SUBSET_OF: Rel = rel('⊂', RelCategory::Default);
754pub const SUPERSET_OF: Rel = rel('⊃', RelCategory::Default);
755pub const NOT_A_SUBSET_OF: Rel = rel('⊄', RelCategory::Default);
756pub const NOT_A_SUPERSET_OF: Rel = rel('⊅', RelCategory::Default);
757pub const SUBSET_OF_OR_EQUAL_TO: Rel = rel('⊆', RelCategory::Default);
758pub const SUPERSET_OF_OR_EQUAL_TO: Rel = rel('⊇', RelCategory::Default);
759pub const NEITHER_A_SUBSET_OF_NOR_EQUAL_TO: Rel = rel('⊈', RelCategory::Default);
760pub const NEITHER_A_SUPERSET_OF_NOR_EQUAL_TO: Rel = rel('⊉', RelCategory::Default);
761pub const SUBSET_OF_WITH_NOT_EQUAL_TO: Rel = rel('⊊', RelCategory::Default);
762pub const SUPERSET_OF_WITH_NOT_EQUAL_TO: Rel = rel('⊋', RelCategory::Default);
763pub const MULTISET_UNION: Bin = bin('⊎', BinCategory::BD);
766pub const SQUARE_IMAGE_OF: Rel = rel('⊏', RelCategory::Default);
767pub const SQUARE_ORIGINAL_OF: Rel = rel('⊐', RelCategory::Default);
768pub const SQUARE_IMAGE_OF_OR_EQUAL_TO: Rel = rel('⊑', RelCategory::Default);
769pub const SQUARE_ORIGINAL_OF_OR_EQUAL_TO: Rel = rel('⊒', RelCategory::Default);
770pub const SQUARE_CAP: Bin = bin('⊓', BinCategory::BD);
771pub const SQUARE_CUP: Bin = bin('⊔', BinCategory::BD);
772pub const CIRCLED_PLUS: Bin = bin('⊕', BinCategory::BD);
773pub const CIRCLED_MINUS: Bin = bin('⊖', BinCategory::BD);
774pub const CIRCLED_TIMES: Op = op('⊗', OpCategory::OnlyC);
775pub const CIRCLED_DIVISION_SLASH: Bin = bin('⊘', BinCategory::BD);
776pub const CIRCLED_DOT_OPERATOR: Op = op('⊙', OpCategory::OnlyC);
777pub const CIRCLED_RING_OPERATOR: Op = op('⊚', OpCategory::OnlyC);
778pub const CIRCLED_ASTERISK_OPERATOR: Op = op('⊛', OpCategory::OnlyC);
779pub const CIRCLED_DASH: Bin = bin('⊝', BinCategory::BD);
781pub const SQUARED_PLUS: Bin = bin('⊞', BinCategory::BD);
782pub const SQUARED_MINUS: Bin = bin('⊟', BinCategory::BD);
783pub const SQUARED_TIMES: Op = op('⊠', OpCategory::OnlyC);
784pub const SQUARED_DOT_OPERATOR: Op = op('⊡', OpCategory::OnlyC);
785pub const RIGHT_TACK: Rel = rel('⊢', RelCategory::Default);
786pub const LEFT_TACK: Rel = rel('⊣', RelCategory::Default);
787pub const DOWN_TACK: char = '⊤';
788pub const UP_TACK: char = '⊥';
789pub const TRUE: Rel = rel('⊨', RelCategory::Default);
792pub const FORCES: Rel = rel('⊩', RelCategory::Default);
793pub const TRIPLE_VERTICAL_BAR_RIGHT_TURNSTILE: Rel = rel('⊪', RelCategory::Default);
794pub const DOUBLE_VERTICAL_BAR_DOUBLE_RIGHT_TURNSTILE: Rel = rel('⊫', RelCategory::Default);
795pub const DOES_NOT_PROVE: Rel = rel('⊬', RelCategory::Default);
796pub const NOT_TRUE: Rel = rel('⊭', RelCategory::Default);
797pub const DOES_NOT_FORCE: Rel = rel('⊮', RelCategory::Default);
798pub const NEGATED_DOUBLE_VERTICAL_BAR_DOUBLE_RIGHT_TURNSTILE: Rel = rel('⊯', RelCategory::Default);
799pub const NORMAL_SUBGROUP_OF: Rel = rel('⊲', RelCategory::Default);
802pub const CONTAINS_AS_NORMAL_SUBGROUP: Rel = rel('⊳', RelCategory::Default);
803pub const NORMAL_SUBGROUP_OF_OR_EQUAL_TO: Rel = rel('⊴', RelCategory::Default);
804pub const CONTAINS_AS_NORMAL_SUBGROUP_OR_EQUAL_TO: Rel = rel('⊵', RelCategory::Default);
805pub const MULTIMAP: Rel = rel('⊸', RelCategory::Default);
808pub const INTERCALATE: Rel = rel('⊺', RelCategory::Default);
810pub const XOR: Bin = bin('⊻', BinCategory::BD);
811pub const NAND: Bin = bin('⊼', BinCategory::BD);
812pub const N_ARY_LOGICAL_AND: Op = op('⋀', OpCategory::OnlyJ);
816pub const N_ARY_LOGICAL_OR: Op = op('⋁', OpCategory::OnlyJ);
817pub const N_ARY_INTERSECTION: Op = op('⋂', OpCategory::OnlyJ);
818pub const N_ARY_UNION: Op = op('⋃', OpCategory::OnlyJ);
819pub const DIAMOND_OPERATOR: Op = op('⋄', OpCategory::OnlyC);
820pub const STAR_OPERATOR: Op = op('⋆', OpCategory::OnlyC);
822pub const DIVISION_TIMES: Op = op('⋇', OpCategory::OnlyC);
823pub const BOWTIE: Rel = rel('⋈', RelCategory::Default);
824pub const LEFT_NORMAL_FACTOR_SEMIDIRECT_PRODUCT: Op = op('⋉', OpCategory::OnlyC);
825pub const RIGHT_NORMAL_FACTOR_SEMIDIRECT_PRODUCT: Op = op('⋊', OpCategory::OnlyC);
826pub const LEFT_SEMIDIRECT_PRODUCT: Op = op('⋋', OpCategory::OnlyC);
827pub const RIGHT_SEMIDIRECT_PRODUCT: Op = op('⋌', OpCategory::OnlyC);
828pub const REVERSED_TILDE_EQUALS: Rel = rel('⋍', RelCategory::Default);
829pub const CURLY_LOGICAL_OR: Bin = bin('⋎', BinCategory::BD);
830pub const CURLY_LOGICAL_AND: Bin = bin('⋏', BinCategory::BD);
831pub const DOUBLE_SUBSET: Rel = rel('⋐', RelCategory::Default);
832pub const DOUBLE_SUPERSET: Rel = rel('⋑', RelCategory::Default);
833pub const DOUBLE_INTERSECTION: Bin = bin('⋒', BinCategory::BD);
834pub const DOUBLE_UNION: Bin = bin('⋓', BinCategory::BD);
835pub const PITCHFORK: Rel = rel('⋔', RelCategory::Default);
836pub const LESS_THAN_WITH_DOT: Rel = rel('⋖', RelCategory::Default);
838pub const VERY_MUCH_LESS_THAN: Rel = rel('⋘', RelCategory::Default);
840pub const LESS_THAN_EQUAL_TO_OR_GREATER_THAN: Rel = rel('⋚', RelCategory::Default);
842pub const GREATER_THAN_EQUAL_TO_OR_LESS_THAN: Rel = rel('⋛', RelCategory::Default);
843pub const EQUAL_TO_OR_PRECEDES: Rel = rel('⋞', RelCategory::Default);
846pub const EQUAL_TO_OR_SUCCEEDS: Rel = rel('⋟', RelCategory::Default);
847pub const DOES_NOT_PRECEDE_OR_EQUAL: Rel = rel('⋠', RelCategory::Default);
848pub const DOES_NOT_SUCCEED_OR_EQUAL: Rel = rel('⋡', RelCategory::Default);
849pub const LESS_THAN_BUT_NOT_EQUIVALENT_TO: Rel = rel('⋦', RelCategory::Default);
854pub const GREATER_THAN_BUT_NOT_EQUIVALENT_TO: Rel = rel('⋧', RelCategory::Default);
855pub const PRECEDES_BUT_NOT_EQUIVALENT_TO: Rel = rel('⋨', RelCategory::Default);
856pub const SUCCEEDS_BUT_NOT_EQUIVALENT_TO: Rel = rel('⋩', RelCategory::Default);
857pub const VERTICAL_ELLIPSIS: Rel = rel('⋮', RelCategory::Default);
862pub const DOWN_RIGHT_DIAGONAL_ELLIPSIS: Rel = rel('⋱', RelCategory::Default);
865pub const LEFT_CEILING: Fence = Fence('⌈');
884pub const RIGHT_CEILING: Fence = Fence('⌉');
885pub const LEFT_FLOOR: Fence = Fence('⌊');
886pub const RIGHT_FLOOR: Fence = Fence('⌋');
887pub const TOP_LEFT_CORNER: char = '⌜';
888pub const TOP_RIGHT_CORNER: char = '⌝';
889pub const BOTTOM_LEFT_CORNER: char = '⌞';
890pub const BOTTOM_RIGHT_CORNER: char = '⌟';
891pub const FROWN: Rel = rel('⌢', RelCategory::Default);
892pub const SMILE: Rel = rel('⌣', RelCategory::Default);
893pub const TOP_SQUARE_BRACKET: OrdLike = ord('⎴', OrdCategory::OnlyI);
894pub const BOTTOM_SQUARE_BRACKET: OrdLike = ord('⎵', OrdCategory::OnlyI);
895pub const TOP_PARENTHESIS: OrdLike = ord('⏜', OrdCategory::OnlyI);
896pub const BOTTOM_PARENTHESIS: OrdLike = ord('⏝', OrdCategory::OnlyI);
897pub const TOP_CURLY_BRACKET: OrdLike = ord('⏞', OrdCategory::OnlyI);
898pub const BOTTOM_CURLY_BRACKET: OrdLike = ord('⏟', OrdCategory::OnlyI);
899
900pub const CIRCLED_LATIN_CAPITAL_LETTER_R: char = 'Ⓡ'; pub const CIRCLED_LATIN_CAPITAL_LETTER_S: char = 'Ⓢ'; pub const BLACK_SQUARE: char = '■';
910pub const WHITE_SQUARE: char = '□';
911
912pub const BLACK_UP_POINTING_TRIANGLE: char = '▲';
913pub const WHITE_UP_POINTING_TRIANGLE: char = '△';
914
915pub const BLACK_RIGHT_POINTING_TRIANGLE: char = '▶';
916pub const WHITE_RIGHT_POINTING_TRIANGLE: char = '▷';
917
918pub const BLACK_DOWN_POINTING_TRIANGLE: char = '▼';
919pub const WHITE_DOWN_POINTING_TRIANGLE: char = '▽';
920
921pub const BLACK_LEFT_POINTING_TRIANGLE: char = '◀';
922pub const WHITE_LEFT_POINTING_TRIANGLE: char = '◁';
923
924pub const LOZENGE: char = '◊';
925
926pub const LARGE_CIRCLE: char = '◯';
927
928pub const WHITE_MEDIUM_SQUARE: char = '◻';
929
930pub const BLACK_STAR: char = '★';
934
935pub const SUN: char = '☉';
936pub const ASCENDING_NODE: char = '☊';
937
938pub const WHITE_SUN_WITH_RAYS: char = '☼';
939
940pub const MERCURY: char = '☿';
941pub const FEMALE_SIGN: char = '♀';
942pub const EARTH: char = '♁';
943pub const MALE_SIGN: char = '♂';
944pub const JUPITER: char = '♃';
945pub const SATURN: char = '♄';
946pub const URANUS: char = '♅';
947pub const NEPTUNE: char = '♆';
948pub const BLACK_SPADE_SUIT: char = '♠';
951pub const WHITE_HEART_SUIT: char = '♡';
952pub const WHITE_DIAMOND_SUIT: char = '♢';
953pub const BLACK_CLUB_SUIT: char = '♣';
954pub const MALTESE_CROSS: char = '✠';
963
964pub const PERPENDICULAR: Rel = rel('⟂', RelCategory::Default);
968
969pub const MATHEMATICAL_LEFT_WHITE_SQUARE_BRACKET: Fence = Fence('⟦');
970pub const MATHEMATICAL_RIGHT_WHITE_SQUARE_BRACKET: Fence = Fence('⟧');
971pub const MATHEMATICAL_LEFT_ANGLE_BRACKET: Fence = Fence('⟨');
972pub const MATHEMATICAL_RIGHT_ANGLE_BRACKET: Fence = Fence('⟩');
973pub const MATHEMATICAL_LEFT_DOUBLE_ANGLE_BRACKET: Fence = Fence('⟪');
974pub const MATHEMATICAL_RIGHT_DOUBLE_ANGLE_BRACKET: Fence = Fence('⟫');
975pub const MATHEMATICAL_LEFT_FLATTENED_PARENTHESIS: Fence = Fence('⟮');
978pub const MATHEMATICAL_RIGHT_FLATTENED_PARENTHESIS: Fence = Fence('⟯');
979
980pub const LONG_LEFTWARDS_ARROW: Rel = rel('⟵', RelCategory::Default);
984pub const LONG_RIGHTWARDS_ARROW: Rel = rel('⟶', RelCategory::Default);
985pub const LONG_LEFT_RIGHT_ARROW: Rel = rel('⟷', RelCategory::Default);
986pub const LONG_LEFTWARDS_DOUBLE_ARROW: Rel = rel('⟸', RelCategory::Default);
987pub const LONG_RIGHTWARDS_DOUBLE_ARROW: Rel = rel('⟹', RelCategory::Default);
988pub const LONG_LEFT_RIGHT_DOUBLE_ARROW: Rel = rel('⟺', RelCategory::Default);
989pub const LONG_RIGHTWARDS_ARROW_FROM_BAR: Rel = rel('⟼', RelCategory::Default);
991
992pub const LEFTWARDS_ARROW_TAIL: Rel = rel('⤙', RelCategory::Default);
996pub const RIGHTWARDS_ARROW_TAIL: Rel = rel('⤚', RelCategory::Default);
997
998pub const LEFT_WHITE_CURLY_BRACKET: Fence = Fence('⦃');
1002pub const RIGHT_WHITE_CURLY_BRACKET: Fence = Fence('⦄');
1003pub const Z_NOTATION_LEFT_IMAGE_BRACKET: Fence = Fence('⦇');
1006pub const Z_NOTATION_RIGHT_IMAGE_BRACKET: Fence = Fence('⦈');
1007pub const Z_NOTATION_LEFT_BINDING_BRACKET: Fence = Fence('⦉');
1008pub const Z_NOTATION_RIGHT_BINDING_BRACKET: Fence = Fence('⦊');
1009
1010pub const SQUARED_RISING_DIAGONAL_SLASH: Bin = bin('⧄', BinCategory::BD);
1011pub const SQUARED_FALLING_DIAGONAL_SLASH: Bin = bin('⧅', BinCategory::BD);
1012pub const SQUARED_SQUARE: Bin = bin('⧈', BinCategory::BD);
1013pub const BLACK_LOZENGE: char = '⧫';
1014
1015pub const N_ARY_CIRCLED_DOT_OPERATOR: Op = op('⨀', OpCategory::OnlyJ);
1021pub const N_ARY_CIRCLED_PLUS_OPERATOR: Op = op('⨁', OpCategory::OnlyJ);
1022pub const N_ARY_CIRCLED_TIMES_OPERATOR: Op = op('⨂', OpCategory::OnlyJ);
1023pub const N_ARY_UNION_OPERATOR_WITH_DOT: Op = op('⨃', OpCategory::OnlyJ);
1024pub const N_ARY_UNION_OPERATOR_WITH_PLUS: Op = op('⨄', OpCategory::OnlyJ);
1025pub const N_ARY_SQUARE_INTERSECTION_OPERATOR: Op = op('⨅', OpCategory::OnlyJ);
1026pub const N_ARY_SQUARE_UNION_OPERATOR: Op = op('⨆', OpCategory::OnlyJ);
1027pub const TWO_LOGICAL_AND_OPERATOR: Op = op('⨇', OpCategory::OnlyJ);
1028pub const TWO_LOGICAL_OR_OPERATOR: Op = op('⨈', OpCategory::OnlyJ);
1029pub const N_ARY_TIMES_OPERATOR: Op = op('⨉', OpCategory::OnlyJ);
1030pub const SUMMATION_WITH_INTEGRAL: Op = op('⨋', OpCategory::OnlyH);
1032pub const QUADRUPLE_INTEGRAL_OPERATOR: Op = op('⨌', OpCategory::OnlyH);
1033pub const FINITE_PARTL_INTEGRAL: Op = op('⨍', OpCategory::OnlyH);
1034pub const INTEGRAL_WITH_DOUBLE_STROKE: Op = op('⨎', OpCategory::OnlyH);
1035pub const INTEGRAL_AVERAGE_WITH_SLASH: Op = op('⨏', OpCategory::OnlyH);
1036pub const CIRCULATION_FUNCTION: Op = op('⨐', OpCategory::OnlyH);
1037pub const ANTICLOCKWISE_INTEGRATION: Op = op('⨑', OpCategory::OnlyH);
1038pub const Z_NOTATION_SCHEMA_COMPOSITION: Rel = rel('⨟', RelCategory::Default);
1052pub const AMALGAMATION_OR_COPRODUCT: Rel = rel('⨿', RelCategory::Default);
1084pub const LOGICAL_AND_WITH_DOUBLE_OVERBAR: Rel = rel('⩞', RelCategory::Default);
1115pub const EQUALS_SIGN_WITH_DOT_BELOW: Rel = rel('⩦', RelCategory::Default);
1123pub const LESS_THAN_OR_SLANTED_EQUAL_TO: Rel = rel('⩽', RelCategory::Default);
1146pub const GREATER_THAN_OR_SLANTED_EQUAL_TO: Rel = rel('⩾', RelCategory::Default);
1147pub const LESS_THAN_OR_APPROXIMATE: Rel = rel('⪅', RelCategory::Default);
1154pub const GREATER_THAN_OR_APPROXIMATE: Rel = rel('⪆', RelCategory::Default);
1155pub const LESS_THAN_AND_SINGLE_LINE_NOT_EQUAL_TO: Rel = rel('⪇', RelCategory::Default);
1156pub const GREATER_THAN_AND_SINGLE_LINE_NOT_EQUAL_TO: Rel = rel('⪈', RelCategory::Default);
1157pub const LESS_THAN_AND_NOT_APPROXIMATE: Rel = rel('⪉', RelCategory::Default);
1158pub const GREATER_THAN_AND_NOT_APPROXIMATE: Rel = rel('⪊', RelCategory::Default);
1159pub const LESS_THAN_ABOVE_DOUBLE_LINE_EQUAL_ABOVE_GREATER_THAN: Rel =
1160 rel('⪋', RelCategory::Default);
1161pub const GREATER_THAN_ABOVE_DOUBLE_LINE_EQUAL_ABOVE_LESS_THAN: Rel =
1162 rel('⪌', RelCategory::Default);
1163pub const SLANTED_EQUAL_TO_OR_LESS_THAN: Rel = rel('⪕', RelCategory::Default);
1172pub const SLANTED_EQUAL_TO_OR_GREATER_THAN: Rel = rel('⪖', RelCategory::Default);
1173pub const PRECEDES_ABOVE_SINGLE_LINE_EQUALS_SIGN: Rel = rel('⪯', RelCategory::Default);
1198pub const SUCCEEDS_ABOVE_SINGLE_LINE_EQUALS_SIGN: Rel = rel('⪰', RelCategory::Default);
1199pub const PRECEDES_ABOVE_NOT_EQUAL_TO: Rel = rel('⪵', RelCategory::Default);
1204pub const SUCCEEDS_ABOVE_NOT_EQUAL_TO: Rel = rel('⪶', RelCategory::Default);
1205pub const PRECEDES_ABOVE_ALMOST_EQUAL_TO: Rel = rel('⪷', RelCategory::Default);
1206pub const SUCCEEDS_ABOVE_ALMOST_EQUAL_TO: Rel = rel('⪸', RelCategory::Default);
1207pub const PRECEDES_ABOVE_NOT_ALMOST_EQUAL_TO: Rel = rel('⪹', RelCategory::Default);
1208pub const SUCCEEDS_ABOVE_NOT_ALMOST_EQUAL_TO: Rel = rel('⪺', RelCategory::Default);
1209pub const SUBSET_OF_ABOVE_NOT_EQUAL_TO: Rel = rel('⫋', RelCategory::Default);
1226pub const SUPERSET_OF_ABOVE_NOT_EQUAL_TO: Rel = rel('⫌', RelCategory::Default);
1227
1228