From 41c7c145377c8de98ab31b4328b21221255e95c2 Mon Sep 17 00:00:00 2001 From: trivernis Date: Fri, 21 Aug 2020 16:44:51 +0200 Subject: [PATCH] Fix elements being enclosed when not needed (part 2) --- Cargo.toml | 2 +- src/elements/mod.rs | 14 ++++++++++++++ src/parsing/tree_parser.rs | 26 ++++++++------------------ 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 87b4431..401b499 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "asciimath-rs" description = "AsciiMath parser" repository = "https://github.com/trivernis/asciimath-rs" -version = "0.5.3" +version = "0.5.4" authors = ["trivernis "] edition = "2018" readme = "README.md" diff --git a/src/elements/mod.rs b/src/elements/mod.rs index e3dc875..cc1d152 100644 --- a/src/elements/mod.rs +++ b/src/elements/mod.rs @@ -18,3 +18,17 @@ pub enum 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() + } + } +} diff --git a/src/parsing/tree_parser.rs b/src/parsing/tree_parser.rs index ac30a66..f09057c 100644 --- a/src/parsing/tree_parser.rs +++ b/src/parsing/tree_parser.rs @@ -402,12 +402,7 @@ impl TreeParser { self.step(); self.step(); if let Some(element) = self.parse_element() { - if let Element::Group(g) = &element { - if let Some(ne) = g.to_non_enclosed() { - return Some(Element::Group(ne).boxed()); - } - } - Some(element.boxed()) + Some(element.to_non_enclosed().boxed()) } else { None } @@ -421,12 +416,7 @@ impl TreeParser { self.step(); self.step(); if let Some(element) = self.parse_element() { - if let Element::Group(g) = &element { - if let Some(ne) = g.to_non_enclosed() { - return Some(Element::Group(ne).boxed()); - } - } - Some(element.boxed()) + Some(element.to_non_enclosed().boxed()) } else { None } @@ -441,8 +431,8 @@ impl TreeParser { self.step(); self.step(); Some(Pow { - base: previous.clone().boxed(), - exp: self.parse_element().unwrap().boxed(), + base: previous.to_non_enclosed().boxed(), + exp: self.parse_element().unwrap().to_non_enclosed().boxed(), }) } else { None @@ -455,8 +445,8 @@ impl TreeParser { self.step(); self.step(); Some(Sub { - base: previous.clone().boxed(), - lower: self.parse_element().unwrap().boxed(), + base: previous.to_non_enclosed().boxed(), + lower: self.parse_element().unwrap().to_non_enclosed().boxed(), }) } else { None @@ -469,8 +459,8 @@ impl TreeParser { self.step(); self.step(); Some(Frac { - top: previous.clone().boxed(), - bottom: self.parse_element().unwrap().boxed(), + top: previous.to_non_enclosed().boxed(), + bottom: self.parse_element().unwrap().to_non_enclosed().boxed(), }) } else { None