xrust/parser/xml/dtd/
elementdecl.rs

1use crate::item::Node;
2use crate::parser::combinators::tag::tag;
3use crate::parser::combinators::tuple::tuple7;
4use crate::parser::combinators::whitespace::{whitespace0, whitespace1};
5use crate::parser::xml::dtd::misc::contentspec;
6use crate::parser::xml::qname::qualname;
7use crate::parser::{ParseError, ParseInput};
8
9//elementdecl	   ::=   	'<!ELEMENT' S Name S contentspec S? '>'
10pub(crate) fn elementdecl<N: Node>()
11-> impl Fn(ParseInput<N>) -> Result<(ParseInput<N>, ()), ParseError> {
12    move |input| match tuple7(
13        tag("<!ELEMENT"),
14        whitespace1(),
15        qualname(),
16        whitespace1(),
17        contentspec(), //contentspec - TODO Build out.
18        whitespace0(),
19        tag(">"),
20    )(input)
21    {
22        Ok(((input2, mut state2), (_, _, n, _, s, _, _))) => {
23            state2.dtd.elements.insert(n, s);
24            Ok(((input2, state2), ()))
25        }
26        Err(err) => Err(err),
27    }
28}