@@ -137,39 +137,6 @@ impl ReaderState {
137137 Ok ( Event :: End ( BytesEnd :: wrap ( name. into ( ) ) ) )
138138 }
139139
140- /// Converts content of a tag to a `Start` or an `Empty` event
141- ///
142- /// # Parameters
143- /// - `content`: Content of a tag between `<` and `>`
144- pub fn emit_start < ' b > ( & mut self , content : & ' b [ u8 ] ) -> Result < Event < ' b > > {
145- let len = content. len ( ) ;
146- let name_end = content
147- . iter ( )
148- . position ( |& b| is_whitespace ( b) )
149- . unwrap_or ( len) ;
150- if let Some ( & b'/' ) = content. last ( ) {
151- // This is self-closed tag `<something/>`
152- let name_len = if name_end < len { name_end } else { len - 1 } ;
153- let event = BytesStart :: wrap ( & content[ ..len - 1 ] , name_len) ;
154-
155- if self . config . expand_empty_elements {
156- self . pending = true ;
157- self . opened_starts . push ( self . opened_buffer . len ( ) ) ;
158- self . opened_buffer . extend ( & content[ ..name_len] ) ;
159- Ok ( Event :: Start ( event) )
160- } else {
161- Ok ( Event :: Empty ( event) )
162- }
163- } else {
164- // #514: Always store names event when .check_end_names == false,
165- // because checks can be temporary disabled and when they would be
166- // enabled, we should have that information
167- self . opened_starts . push ( self . opened_buffer . len ( ) ) ;
168- self . opened_buffer . extend ( & content[ ..name_end] ) ;
169- Ok ( Event :: Start ( BytesStart :: wrap ( content, name_end) ) )
170- }
171- }
172-
173140 /// Get the decoder, used to decode bytes, read by this reader, to the strings.
174141 ///
175142 /// If [`encoding`] feature is enabled, the used encoding may change after
@@ -388,13 +355,41 @@ impl ReaderState {
388355 debug_assert ! ( content. starts_with( b"<" ) , "{:?}" , Bytes ( content) ) ;
389356 debug_assert ! ( content. ends_with( b"/>" ) , "{:?}" , Bytes ( content) ) ;
390357
391- self . emit_start ( & content[ 1 ..content. len ( ) - 1 ] )
358+ let content = & content[ 1 ..content. len ( ) - 1 ] ;
359+ let len = content. len ( ) ;
360+ let name_end = content
361+ . iter ( )
362+ . position ( |& b| is_whitespace ( b) )
363+ . unwrap_or ( len) ;
364+ // This is self-closed tag `<something/>`
365+ let name_len = if name_end < len { name_end } else { len - 1 } ;
366+ let event = BytesStart :: wrap ( & content[ ..len - 1 ] , name_len) ;
367+
368+ if self . config . expand_empty_elements {
369+ self . pending = true ;
370+ self . opened_starts . push ( self . opened_buffer . len ( ) ) ;
371+ self . opened_buffer . extend ( & content[ ..name_len] ) ;
372+ Ok ( Event :: Start ( event) )
373+ } else {
374+ Ok ( Event :: Empty ( event) )
375+ }
392376 }
393377 FeedResult :: EmitStartTag ( _) => {
394378 debug_assert ! ( content. starts_with( b"<" ) , "{:?}" , Bytes ( content) ) ;
395379 debug_assert ! ( content. ends_with( b">" ) , "{:?}" , Bytes ( content) ) ;
396380
397- self . emit_start ( & content[ 1 ..content. len ( ) - 1 ] )
381+ let content = & content[ 1 ..content. len ( ) - 1 ] ;
382+ let len = content. len ( ) ;
383+ let name_end = content
384+ . iter ( )
385+ . position ( |& b| is_whitespace ( b) )
386+ . unwrap_or ( len) ;
387+ // #514: Always store names event when .check_end_names == false,
388+ // because checks can be temporary disabled and when they would be
389+ // enabled, we should have that information
390+ self . opened_starts . push ( self . opened_buffer . len ( ) ) ;
391+ self . opened_buffer . extend ( & content[ ..name_end] ) ;
392+ Ok ( Event :: Start ( BytesStart :: wrap ( content, name_end) ) )
398393 }
399394 FeedResult :: EmitEndTag ( _) => {
400395 debug_assert ! ( content. starts_with( b"</" ) , "{:?}" , Bytes ( content) ) ;
0 commit comments