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
use unidok_repr::ir::html::{HtmlElem, HtmlNode}; use unidok_repr::ir::IrState; use super::helpers::elem_content_ir_into_nodes; use super::macros::apply_post_annotations; use crate::{Element, IntoNode, Node}; impl<'a> IntoNode<'a> for HtmlNode<'a> { fn into_node(self, state: &IrState<'a>) -> Node<'a> { match self { HtmlNode::Element(e) => e.into_node(state), HtmlNode::CData(c) => Node::Cdata(c), HtmlNode::Comment(c) => Node::Comment(c), HtmlNode::Doctype(d) => Node::Doctype(d), } } } impl<'a> IntoNode<'a> for HtmlElem<'a> { fn into_node(self, state: &IrState<'a>) -> Node<'a> { let content = self.content.map(|c| elem_content_ir_into_nodes(c, state)); let contains_blocks = content.as_ref().map(|c| c.iter().any(Node::is_block_level)).unwrap_or(false); let mut node = Node::Element(Element { name: self.name, attrs: self.attrs, content, is_block_level: self.name.is_block_level(), contains_blocks, }); apply_post_annotations(self.macros, &mut node, state); node } }