mathml_core/operators/
display.rs1use super::*;
2
3impl Display for MathOperator {
4 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
5 write_tag_start(f, self)?;
6 safe_html_str(f, &self.operator)?;
7 write_tag_close(f, self)
8 }
9}
10
11impl Display for MathSpace {
12 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
13 write_tag_self_close(f, self)
14 }
15}
16
17impl Display for MathSqrt {
18 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
19 match &self.surd {
20 Some(power) => {
21 write!(f, "<mroot>{}{}</mroot>", self.base, power)
22 }
23 None => {
24 write!(f, "<msqrt>{}</msqrt>", self.base)
25 }
26 }
27 }
28}
29
30impl Display for MathFenced {
31 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
32 let last = self.separators.chars().last().unwrap_or(',');
33 let mut separators = self.separators.chars().chain(repeat(last));
34 f.write_str("<mrow><mo stretchy=\"true\" form=\"prefix\">")?;
35 safe_html_char(f, self.open)?;
36 f.write_str("</mo>")?;
37 for (i, item) in self.base.iter().enumerate() {
38 if i == 0 {
39 write!(f, "{}", item)?;
40 }
41 else {
42 let split = unsafe { separators.next().unwrap_unchecked() };
44 f.write_str("<mo>")?;
45 safe_html_char(f, split)?;
46 f.write_str("</mo>")?;
47 write!(f, "{}", item)?;
48 }
49 }
50 f.write_str("<mo stretchy=\"true\" form=\"postfix\">")?;
51 safe_html_char(f, self.close)?;
52 f.write_str("</mo></mrow>")
53 }
54}
55
56impl Display for MathMultiScript {
57 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
58 write_tag_start(f, self)?;
59 Display::fmt(&self.base, f)?;
60 if self.is_sub_super_script() {
61 unsafe {
63 Display::fmt(self.rd.get_unchecked(0), f)?;
64 Display::fmt(self.ru.get_unchecked(0), f)?;
65 }
66 }
67 else if self.is_sub_script() {
68 unsafe {
70 Display::fmt(self.rd.get_unchecked(0), f)?;
71 }
72 }
73 else if self.is_super_script() {
74 unsafe {
76 Display::fmt(self.ru.get_unchecked(0), f)?;
77 }
78 }
79 else {
80 let r_max = self.ru.len().max(self.rd.len());
81 for i in 0..r_max {
82 match self.rd.get(i) {
83 Some(s) => write!(f, "{}", s)?,
84 None => f.write_str("<mrow/>")?,
85 }
86 match self.ru.get(i) {
87 Some(s) => write!(f, "{}", s)?,
88 None => f.write_str("<mrow/>")?,
89 }
90 }
91 f.write_str("<mprescripts/>")?;
92 let l_max = self.lu.len().max(self.ld.len());
93 for i in 0..l_max {
94 match self.ld.get(i) {
95 Some(s) => write!(f, "{}", s)?,
96 None => f.write_str("<mrow/>")?,
97 }
98 match self.lu.get(i) {
99 Some(s) => write!(f, "{}", s)?,
100 None => f.write_str("<mrow/>")?,
101 }
102 }
103 }
104 write_tag_close(f, self)
105 }
106}
107
108impl Display for MathUnderOver {
109 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
110 write_tag_start(f, self)?;
111 write!(f, "{}", self.base)?;
112 if let Some(under) = &self.under {
113 write!(f, "{}", under)?;
114 }
115 if let Some(over) = &self.over {
116 write!(f, "{}", over)?;
117 }
118 write_tag_close(f, self)
119 }
120}