@@ -128,7 +128,6 @@ impl PullParser {
128128 Token :: ProcessingInstructionStart =>
129129 self . into_state ( State :: InsideProcessingInstruction ( ProcessingInstructionSubstate :: PIInsideName ) , next_event) ,
130130
131-
132131 Token :: CDataStart if self . depth ( ) > 0 => {
133132 self . into_state ( State :: InsideCData , next_event)
134133 } ,
@@ -138,4 +137,55 @@ impl PullParser {
138137 }
139138 }
140139 }
140+
141+ pub fn document_start ( & mut self , t : Token ) -> Option < Result > {
142+ debug_assert ! ( self . encountered < Encountered :: Declaration ) ;
143+
144+ match t {
145+ Token :: Character ( c) => {
146+ let next_event = self . set_encountered ( Encountered :: AnyChars ) ;
147+
148+ if !is_whitespace_char ( c) {
149+ return Some ( self . error ( SyntaxError :: UnexpectedTokenOutsideRoot ( t) ) ) ;
150+ }
151+ self . inside_whitespace = true ;
152+
153+ // skip whitespace outside of the root element
154+ if ( self . config . c . trim_whitespace && self . buf . is_empty ( ) ) ||
155+ ( self . depth ( ) == 0 && self . config . c . ignore_root_level_whitespace ) {
156+ return self . into_state ( State :: OutsideTag , next_event) ;
157+ }
158+
159+ self . push_pos ( ) ;
160+ self . buf . push ( c) ;
161+ self . into_state ( State :: OutsideTag , next_event)
162+ } ,
163+
164+ Token :: CommentStart => {
165+ let next_event = self . set_encountered ( Encountered :: Comment ) ;
166+ self . into_state ( State :: InsideComment , next_event)
167+ }
168+
169+ Token :: OpeningTagStart => {
170+ let next_event = self . set_encountered ( Encountered :: Element ) ;
171+ self . nst . push_empty ( ) ;
172+ self . into_state ( State :: InsideOpeningTag ( OpeningTagSubstate :: InsideName ) , next_event)
173+ } ,
174+
175+ Token :: DoctypeStart => {
176+ let next_event = self . set_encountered ( Encountered :: Doctype ) ;
177+ // We don't have a doctype event so skip this position
178+ // FIXME: update when we have a doctype event
179+ self . next_pos ( ) ;
180+ self . into_state ( State :: InsideDoctype ( DoctypeSubstate :: Outside ) , next_event)
181+ } ,
182+
183+ Token :: ProcessingInstructionStart => {
184+ self . push_pos ( ) ;
185+ self . into_state_continue ( State :: InsideProcessingInstruction ( ProcessingInstructionSubstate :: PIInsideName ) )
186+ } ,
187+
188+ _ => Some ( self . error ( SyntaxError :: UnexpectedToken ( t) ) ) ,
189+ }
190+ }
141191}
0 commit comments