inline: fix label of empty multi-line ref links
e.g.
    [some
    text][]
    [some text]: url
	
	
This commit is contained in:
		
					parent
					
						
							
								253d1d2d4b
							
						
					
				
			
			
				commit
				
					
						b60650dd0d
					
				
			
		
					 2 changed files with 59 additions and 24 deletions
				
			
		| 
						 | 
					@ -732,29 +732,27 @@ impl<'s> Parser<'s> {
 | 
				
			||||||
                        image,
 | 
					                        image,
 | 
				
			||||||
                    } => {
 | 
					                    } => {
 | 
				
			||||||
                        let span_spec = self.events[e_opener].span.end..self.input.span.start;
 | 
					                        let span_spec = self.events[e_opener].span.end..self.input.span.start;
 | 
				
			||||||
                        let multiline =
 | 
					                        let multiline_spec =
 | 
				
			||||||
                            self.events[e_opener].span.start < self.input.span_line.start;
 | 
					                            self.events[e_opener].span.start < self.input.span_line.start;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        let spec: CowStr = if span_spec.is_empty() && !inline {
 | 
					                        let spec: CowStr = if span_spec.is_empty() && !inline {
 | 
				
			||||||
                            let span_spec = self.events[event_span].span.end
 | 
					 | 
				
			||||||
                                ..self.events[e_opener - 1].span.start;
 | 
					 | 
				
			||||||
                            let events_text = self
 | 
					                            let events_text = self
 | 
				
			||||||
                                .events
 | 
					                                .events
 | 
				
			||||||
                                .iter()
 | 
					                                .iter()
 | 
				
			||||||
                                .skip(event_span + 1)
 | 
					                                .skip(event_span + 1)
 | 
				
			||||||
                                .take(e_opener - event_span - 2);
 | 
					                                .take(e_opener - event_span - 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            if multiline
 | 
					 | 
				
			||||||
                                || events_text.clone().any(|ev| {
 | 
					 | 
				
			||||||
                                    !matches!(ev.kind, EventKind::Str | EventKind::Atom(..))
 | 
					 | 
				
			||||||
                                })
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                            let mut spec = String::new();
 | 
					                            let mut spec = String::new();
 | 
				
			||||||
                            let mut span = 0..0;
 | 
					                            let mut span = 0..0;
 | 
				
			||||||
                            for ev in events_text.filter(|ev| {
 | 
					                            for ev in events_text.filter(|ev| {
 | 
				
			||||||
                                matches!(ev.kind, EventKind::Str | EventKind::Atom(..))
 | 
					                                matches!(ev.kind, EventKind::Str | EventKind::Atom(..))
 | 
				
			||||||
 | 
					                                    && !matches!(ev.kind, EventKind::Atom(Escape))
 | 
				
			||||||
                            }) {
 | 
					                            }) {
 | 
				
			||||||
                                    if span.end == ev.span.start {
 | 
					                                if matches!(ev.kind, EventKind::Atom(Softbreak | Hardbreak)) {
 | 
				
			||||||
 | 
					                                    spec.push_str(&self.input.src[span.clone()]);
 | 
				
			||||||
 | 
					                                    spec.push(' ');
 | 
				
			||||||
 | 
					                                    span = ev.span.end..ev.span.end;
 | 
				
			||||||
 | 
					                                } else if span.end == ev.span.start {
 | 
				
			||||||
                                    span.end = ev.span.end;
 | 
					                                    span.end = ev.span.end;
 | 
				
			||||||
                                } else {
 | 
					                                } else {
 | 
				
			||||||
                                    spec.push_str(&self.input.src[span.clone()]);
 | 
					                                    spec.push_str(&self.input.src[span.clone()]);
 | 
				
			||||||
| 
						 | 
					@ -763,10 +761,7 @@ impl<'s> Parser<'s> {
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            spec.push_str(&self.input.src[span]);
 | 
					                            spec.push_str(&self.input.src[span]);
 | 
				
			||||||
                            spec.into()
 | 
					                            spec.into()
 | 
				
			||||||
                            } else {
 | 
					                        } else if multiline_spec {
 | 
				
			||||||
                                self.input.src[span_spec].into()
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        } else if multiline {
 | 
					 | 
				
			||||||
                            let mut spec = String::new();
 | 
					                            let mut spec = String::new();
 | 
				
			||||||
                            let mut first_part = true;
 | 
					                            let mut first_part = true;
 | 
				
			||||||
                            let mut span =
 | 
					                            let mut span =
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										40
									
								
								src/lib.rs
									
										
									
									
									
								
							
							
						
						
									
										40
									
								
								src/lib.rs
									
										
									
									
									
								
							| 
						 | 
					@ -1697,6 +1697,46 @@ mod test {
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn link_reference_multiline_empty() {
 | 
				
			||||||
 | 
					        test_parse!(
 | 
				
			||||||
 | 
					            concat!(
 | 
				
			||||||
 | 
					                "> [a\n",       //
 | 
				
			||||||
 | 
					                "> b][]\n",     //
 | 
				
			||||||
 | 
					                "> [a\\\n",     //
 | 
				
			||||||
 | 
					                "> b][]\n",     //
 | 
				
			||||||
 | 
					                "\n",           //
 | 
				
			||||||
 | 
					                "[a b]: url\n", //
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					            Start(Blockquote, Attributes::new()),
 | 
				
			||||||
 | 
					            Start(Paragraph, Attributes::new()),
 | 
				
			||||||
 | 
					            Start(
 | 
				
			||||||
 | 
					                Link("url".into(), LinkType::Span(SpanLinkType::Reference)),
 | 
				
			||||||
 | 
					                Attributes::new()
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					            Str("a".into()),
 | 
				
			||||||
 | 
					            Softbreak,
 | 
				
			||||||
 | 
					            Str("b".into()),
 | 
				
			||||||
 | 
					            End(Link("url".into(), LinkType::Span(SpanLinkType::Reference))),
 | 
				
			||||||
 | 
					            Softbreak,
 | 
				
			||||||
 | 
					            Start(
 | 
				
			||||||
 | 
					                Link("url".into(), LinkType::Span(SpanLinkType::Reference)),
 | 
				
			||||||
 | 
					                Attributes::new()
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					            Str("a".into()),
 | 
				
			||||||
 | 
					            Escape,
 | 
				
			||||||
 | 
					            Hardbreak,
 | 
				
			||||||
 | 
					            Str("b".into()),
 | 
				
			||||||
 | 
					            End(Link("url".into(), LinkType::Span(SpanLinkType::Reference))),
 | 
				
			||||||
 | 
					            End(Paragraph),
 | 
				
			||||||
 | 
					            End(Blockquote),
 | 
				
			||||||
 | 
					            Blankline,
 | 
				
			||||||
 | 
					            Start(LinkDefinition { label: "a b" }, Attributes::new()),
 | 
				
			||||||
 | 
					            Str("url".into()),
 | 
				
			||||||
 | 
					            End(LinkDefinition { label: "a b" }),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    fn link_definition_multiline() {
 | 
					    fn link_definition_multiline() {
 | 
				
			||||||
        test_parse!(
 | 
					        test_parse!(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue