//! Types for all standard HTML5 elements. #![allow(non_camel_case_types)] use typed_html_macros::declare_elements; use crate::OutputType; use crate::dom::{Node, TextNode}; use crate::types::*; // Marker traits for element content groups macro_rules! marker_trait { ($trait:ident) => { marker_trait!($trait, Node); }; ($trait:ident, $parent:ident) => { pub trait $trait: $parent {} impl IntoIterator for Box> where T: OutputType { type Item = Box>; type IntoIter = std::vec::IntoIter>>; fn into_iter(self) -> Self::IntoIter { vec![self].into_iter() } } }; } marker_trait!(MetadataContent); marker_trait!(FlowContent); marker_trait!(SectioningContent); marker_trait!(HeadingContent); // Phrasing content seems to be entirely a subclass of FlowContent marker_trait!(PhrasingContent, FlowContent); marker_trait!(EmbeddedContent); marker_trait!(InteractiveContent); marker_trait!(FormContent); // Traits for elements that are more picky about their children marker_trait!(DescriptionListContent); marker_trait!(HGroupContent); marker_trait!(MapContent); marker_trait!(MediaContent); //