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
use super::*;
impl LowerHex for ASTNode {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
ASTNode::Sequence(e) => { LowerHex::fmt(e, f) }
ASTNode::List(_) => { todo!() }
ASTNode::Variable(e) => { Display::fmt(e, f) }
ASTNode::Function(_, _) => { todo!() }
ASTNode::Evaluated(e) => { LowerHex::fmt(&**e, f) }
}
}
}
impl LowerHex for Sequence {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
for i in &self.inner {
LowerHex::fmt(i, f)?;
}
Ok(())
}
}
impl MaybeParentheses {
fn need_parentheses(&self) -> bool {
if self.rest.len() != 1 {
return true;
}
false
}
}
impl LowerHex for MaybeParentheses {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self.operator_name {
true =>
write!(f, "\\operatorname{{{}}}", self.head)?,
false =>
write!(f, "\\{}", self.head)?
}
let parentheses = self.need_parentheses();
let count = self.rest.len();
f.write_char('{')?;
if parentheses {
f.write_str("\\left(")?;
}
for (i, ast) in self.rest.iter().enumerate() {
write!(f, "{:x}", ast)?;
if i != count - 1 {
f.write_char(',')?;
}
}
if parentheses {
f.write_str("\\right)")?;
}
f.write_char('}')
}
}