inline: span with attributes
This commit is contained in:
		
					parent
					
						
							
								6bd30f1a58
							
						
					
				
			
			
				commit
				
					
						b937b4f71e
					
				
			
		
					 1 changed files with 38 additions and 1 deletions
				
			
		| 
						 | 
					@ -259,7 +259,7 @@ impl<I: Iterator<Item = char> + Clone> Parser<I> {
 | 
				
			||||||
                        let (d, e) = self.openers[o];
 | 
					                        let (d, e) = self.openers[o];
 | 
				
			||||||
                        let e_attr = e;
 | 
					                        let e_attr = e;
 | 
				
			||||||
                        let e_opener = e + 1;
 | 
					                        let e_opener = e + 1;
 | 
				
			||||||
                        let event = match Container::try_from(d) {
 | 
					                        let mut event = match Container::try_from(d) {
 | 
				
			||||||
                            Ok(cont) => {
 | 
					                            Ok(cont) => {
 | 
				
			||||||
                                self.events[e_opener].kind = EventKind::Enter(cont);
 | 
					                                self.events[e_opener].kind = EventKind::Enter(cont);
 | 
				
			||||||
                                Some(Event {
 | 
					                                Some(Event {
 | 
				
			||||||
| 
						 | 
					@ -273,6 +273,7 @@ impl<I: Iterator<Item = char> + Clone> Parser<I> {
 | 
				
			||||||
                        let mut ahead = self.lexer.inner().clone();
 | 
					                        let mut ahead = self.lexer.inner().clone();
 | 
				
			||||||
                        let mut attr_len = attr::valid(&mut ahead);
 | 
					                        let mut attr_len = attr::valid(&mut ahead);
 | 
				
			||||||
                        if attr_len > 0 {
 | 
					                        if attr_len > 0 {
 | 
				
			||||||
 | 
					                            let span_closer = self.span;
 | 
				
			||||||
                            self.events[e_attr].span = Span::empty_at(self.span.end());
 | 
					                            self.events[e_attr].span = Span::empty_at(self.span.end());
 | 
				
			||||||
                            self.events[e_attr].kind = EventKind::Attributes;
 | 
					                            self.events[e_attr].kind = EventKind::Attributes;
 | 
				
			||||||
                            while attr_len > 0 {
 | 
					                            while attr_len > 0 {
 | 
				
			||||||
| 
						 | 
					@ -281,6 +282,14 @@ impl<I: Iterator<Item = char> + Clone> Parser<I> {
 | 
				
			||||||
                                self.events[e_attr].span = self.span;
 | 
					                                self.events[e_attr].span = self.span;
 | 
				
			||||||
                                attr_len = attr::valid(&mut ahead);
 | 
					                                attr_len = attr::valid(&mut ahead);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            if event.is_none() {
 | 
				
			||||||
 | 
					                                self.events[e_opener].kind = EventKind::Enter(Container::Span);
 | 
				
			||||||
 | 
					                                event = Some(Event {
 | 
				
			||||||
 | 
					                                    kind: EventKind::Exit(Container::Span),
 | 
				
			||||||
 | 
					                                    span: span_closer,
 | 
				
			||||||
 | 
					                                });
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        event
 | 
					                        event
 | 
				
			||||||
                    } else {
 | 
					                    } else {
 | 
				
			||||||
| 
						 | 
					@ -680,6 +689,34 @@ mod test {
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn span_url_empty() {
 | 
				
			||||||
 | 
					        test_parse!(
 | 
				
			||||||
 | 
					            "before [text]() after",
 | 
				
			||||||
 | 
					            (Str, "before "),
 | 
				
			||||||
 | 
					            (Enter(InlineLink), ""),
 | 
				
			||||||
 | 
					            (Str, "text"),
 | 
				
			||||||
 | 
					            (Exit(InlineLink), ""),
 | 
				
			||||||
 | 
					            (Str, " after"),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn span() {
 | 
				
			||||||
 | 
					        test_parse!("[abc]", (Str, "[abc]"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn span_attr() {
 | 
				
			||||||
 | 
					        test_parse!(
 | 
				
			||||||
 | 
					            "[abc]{.def}",
 | 
				
			||||||
 | 
					            (Attributes, "{.def}"),
 | 
				
			||||||
 | 
					            (Enter(Span), "["),
 | 
				
			||||||
 | 
					            (Str, "abc"),
 | 
				
			||||||
 | 
					            (Exit(Span), "]"),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    fn autolink() {
 | 
					    fn autolink() {
 | 
				
			||||||
        test_parse!(
 | 
					        test_parse!(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue