Fix elements being enclosed when not needed (part 2)

pull/9/head
trivernis 4 years ago
parent 7ecfd23495
commit 41c7c14537

@ -2,7 +2,7 @@
name = "asciimath-rs" name = "asciimath-rs"
description = "AsciiMath parser" description = "AsciiMath parser"
repository = "https://github.com/trivernis/asciimath-rs" repository = "https://github.com/trivernis/asciimath-rs"
version = "0.5.3" version = "0.5.4"
authors = ["trivernis <trivernis@protonmail.com>"] authors = ["trivernis <trivernis@protonmail.com>"]
edition = "2018" edition = "2018"
readme = "README.md" readme = "README.md"

@ -18,3 +18,17 @@ pub enum Element {
} }
impl Boxed for Element {} impl Boxed for Element {}
impl Element {
pub fn to_non_enclosed(&self) -> Self {
if let Element::Group(g) = self {
if let Some(ne) = g.to_non_enclosed() {
Element::Group(ne)
} else {
Element::Group(g.clone())
}
} else {
self.clone()
}
}
}

@ -402,12 +402,7 @@ impl TreeParser {
self.step(); self.step();
self.step(); self.step();
if let Some(element) = self.parse_element() { if let Some(element) = self.parse_element() {
if let Element::Group(g) = &element { Some(element.to_non_enclosed().boxed())
if let Some(ne) = g.to_non_enclosed() {
return Some(Element::Group(ne).boxed());
}
}
Some(element.boxed())
} else { } else {
None None
} }
@ -421,12 +416,7 @@ impl TreeParser {
self.step(); self.step();
self.step(); self.step();
if let Some(element) = self.parse_element() { if let Some(element) = self.parse_element() {
if let Element::Group(g) = &element { Some(element.to_non_enclosed().boxed())
if let Some(ne) = g.to_non_enclosed() {
return Some(Element::Group(ne).boxed());
}
}
Some(element.boxed())
} else { } else {
None None
} }
@ -441,8 +431,8 @@ impl TreeParser {
self.step(); self.step();
self.step(); self.step();
Some(Pow { Some(Pow {
base: previous.clone().boxed(), base: previous.to_non_enclosed().boxed(),
exp: self.parse_element().unwrap().boxed(), exp: self.parse_element().unwrap().to_non_enclosed().boxed(),
}) })
} else { } else {
None None
@ -455,8 +445,8 @@ impl TreeParser {
self.step(); self.step();
self.step(); self.step();
Some(Sub { Some(Sub {
base: previous.clone().boxed(), base: previous.to_non_enclosed().boxed(),
lower: self.parse_element().unwrap().boxed(), lower: self.parse_element().unwrap().to_non_enclosed().boxed(),
}) })
} else { } else {
None None
@ -469,8 +459,8 @@ impl TreeParser {
self.step(); self.step();
self.step(); self.step();
Some(Frac { Some(Frac {
top: previous.clone().boxed(), top: previous.to_non_enclosed().boxed(),
bottom: self.parse_element().unwrap().boxed(), bottom: self.parse_element().unwrap().to_non_enclosed().boxed(),
}) })
} else { } else {
None None

Loading…
Cancel
Save