@@ -128,7 +128,6 @@ impl PullParser {
128
128
Token :: ProcessingInstructionStart =>
129
129
self . into_state ( State :: InsideProcessingInstruction ( ProcessingInstructionSubstate :: PIInsideName ) , next_event) ,
130
130
131
-
132
131
Token :: CDataStart if self . depth ( ) > 0 => {
133
132
self . into_state ( State :: InsideCData , next_event)
134
133
} ,
@@ -138,4 +137,55 @@ impl PullParser {
138
137
}
139
138
}
140
139
}
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
+ }
141
191
}
0 commit comments