• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use crate::reader::error::SyntaxError;
2 use crate::reader::lexer::Token;
3 use crate::{common::is_whitespace_char, reader::events::XmlEvent};
4 
5 use super::{PullParser, Result, State};
6 
7 impl PullParser {
inside_cdata(&mut self, t: Token) -> Option<Result>8     pub fn inside_cdata(&mut self, t: Token) -> Option<Result> {
9         match t {
10             Token::CDataEnd => {
11                 let event = if self.config.c.cdata_to_characters {
12                     // start called push_pos, but there will be no event to pop it
13                     if self.buf.is_empty() {
14                         self.next_pos();
15                     }
16                     None
17                 } else {
18                     let data = self.take_buf();
19                     Some(Ok(XmlEvent::CData(data)))
20                 };
21                 self.into_state(State::OutsideTag, event)
22             }
23 
24             Token::Character(c) if !self.is_valid_xml_char(c) => {
25                 Some(self.error(SyntaxError::InvalidCharacterEntity(c as u32)))
26             },
27             Token::Character(c) => {
28                 if !is_whitespace_char(c) {
29                     self.inside_whitespace = false;
30                 }
31                 self.buf.push(c);
32                 None
33             }
34 
35             _ => unreachable!(),
36         }
37     }
38 }
39