xml/reader/parser/
inside_cdata.rs
1use crate::common::is_whitespace_char;
2use crate::reader::error::SyntaxError;
3use crate::reader::events::XmlEvent;
4use crate::reader::lexer::Token;
5
6use super::{PullParser, Result, State};
7
8impl PullParser {
9 pub fn inside_cdata(&mut self, t: Token) -> Option<Result> {
10 match t {
11 Token::CDataEnd => {
12 let event = if self.config.c.cdata_to_characters {
13 if self.buf.is_empty() {
15 self.next_pos();
16 }
17 None
18 } else {
19 let data = self.take_buf();
20 Some(Ok(XmlEvent::CData(data)))
21 };
22 self.into_state(State::OutsideTag, event)
23 },
24
25 Token::Character(c) if !self.is_valid_xml_char(c) => {
26 Some(self.error(SyntaxError::InvalidCharacterEntity(c as u32)))
27 },
28 Token::Character(c) => {
29 if !is_whitespace_char(c) {
30 self.inside_whitespace = false;
31 }
32 self.buf.push(c);
33 None
34 },
35 _ => {
36 debug_assert!(false, "unreachable");
37 None
38 },
39 }
40 }
41}