inline: extract ahead_container_attributes
This commit is contained in:
		
					parent
					
						
							
								1eb3bd12d0
							
						
					
				
			
			
				commit
				
					
						418bb38f82
					
				
			
		
					 1 changed files with 28 additions and 25 deletions
				
			
		| 
						 | 
					@ -493,41 +493,25 @@ impl<I: Iterator<Item = char> + Clone> Parser<I> {
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    let mut ahead = self.lexer.chars();
 | 
					                    if let Some((non_empty, span)) = self.ahead_attributes() {
 | 
				
			||||||
                    let (mut attr_len, mut has_attr) = attr::valid(&mut ahead);
 | 
					                        if non_empty {
 | 
				
			||||||
                    if attr_len > 0 {
 | 
					 | 
				
			||||||
                        let span_closer = self.span;
 | 
					 | 
				
			||||||
                        self.span = self.span.empty_after();
 | 
					 | 
				
			||||||
                        while attr_len > 0 {
 | 
					 | 
				
			||||||
                            self.span = self.span.extend(attr_len);
 | 
					 | 
				
			||||||
                            self.lexer = lex::Lexer::new(ahead.clone());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            let (l, non_empty) = attr::valid(&mut ahead);
 | 
					 | 
				
			||||||
                            has_attr |= non_empty;
 | 
					 | 
				
			||||||
                            attr_len = l;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        if has_attr {
 | 
					 | 
				
			||||||
                            self.events[e_attr] = Event {
 | 
					                            self.events[e_attr] = Event {
 | 
				
			||||||
                                kind: EventKind::Attributes,
 | 
					                                kind: EventKind::Attributes,
 | 
				
			||||||
                                span: self.span,
 | 
					                                span,
 | 
				
			||||||
                            };
 | 
					                            };
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        if event_closer.is_none() {
 | 
					                        if event_closer.is_none() {
 | 
				
			||||||
                            if has_attr {
 | 
					                            self.events[e_opener].kind = EventKind::Enter(Container::Span);
 | 
				
			||||||
                                self.events[e_opener].kind = EventKind::Enter(Container::Span);
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            event_closer = Some(Event {
 | 
					                            event_closer = Some(Event {
 | 
				
			||||||
                                kind: if has_attr {
 | 
					                                kind: EventKind::Exit(Container::Span),
 | 
				
			||||||
                                    EventKind::Exit(Container::Span)
 | 
					                                span: self.span,
 | 
				
			||||||
                                } else {
 | 
					 | 
				
			||||||
                                    EventKind::Str
 | 
					 | 
				
			||||||
                                },
 | 
					 | 
				
			||||||
                                span: span_closer,
 | 
					 | 
				
			||||||
                            });
 | 
					                            });
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        self.span = span;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    event_closer
 | 
					                    event_closer
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
                .or_else(|| {
 | 
					                .or_else(|| {
 | 
				
			||||||
| 
						 | 
					@ -574,6 +558,25 @@ impl<I: Iterator<Item = char> + Clone> Parser<I> {
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn ahead_attributes(&mut self) -> Option<(bool, Span)> {
 | 
				
			||||||
 | 
					        let mut span = self.span.empty_after();
 | 
				
			||||||
 | 
					        let mut ahead = self.lexer.chars();
 | 
				
			||||||
 | 
					        let (mut attr_len, mut has_attr) = attr::valid(&mut ahead);
 | 
				
			||||||
 | 
					        if attr_len > 0 {
 | 
				
			||||||
 | 
					            while attr_len > 0 {
 | 
				
			||||||
 | 
					                span = span.extend(attr_len);
 | 
				
			||||||
 | 
					                self.lexer = lex::Lexer::new(ahead.clone());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let (l, non_empty) = attr::valid(&mut ahead);
 | 
				
			||||||
 | 
					                has_attr |= non_empty;
 | 
				
			||||||
 | 
					                attr_len = l;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            Some((has_attr, span))
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            None
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn post_span(&mut self, ty: SpanType, opener_event: usize) -> Option<Event> {
 | 
					    fn post_span(&mut self, ty: SpanType, opener_event: usize) -> Option<Event> {
 | 
				
			||||||
        let mut ahead = self.lexer.chars();
 | 
					        let mut ahead = self.lexer.chars();
 | 
				
			||||||
        match ahead.next() {
 | 
					        match ahead.next() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue