use crate::formula::ast::*;
use crate::formula::omml::elements::ElementContext;
use crate::formula::omml::attributes::{get_attribute_value, parse_space_type};
use crate::formula::omml::properties::parse_spacing_properties;
use quick_xml::events::BytesStart;
pub struct SpacingHandler;
impl SpacingHandler {
pub fn handle_start<'arena>(
elem: &BytesStart,
context: &mut ElementContext<'arena>,
_arena: &'arena bumpalo::Bump,
) {
let attrs: Vec<_> = elem.attributes().filter_map(|a| a.ok()).collect();
context.properties = parse_spacing_properties(&attrs);
let spacing_val = get_attribute_value(&attrs, "val");
if let Some(val) = spacing_val {
context.properties.spacing = Some(val);
}
}
pub fn handle_end<'arena>(
context: &mut ElementContext<'arena>,
parent_context: Option<&mut ElementContext<'arena>>,
_arena: &'arena bumpalo::Bump,
) {
if let Some(spacing) = &context.properties.spacing {
let space_type = parse_space_type(Some(spacing))
.unwrap_or(SpaceType::Thin);
let node = MathNode::Space(space_type);
if let Some(parent) = parent_context {
parent.children.push(node);
}
}
}
}