@@ -34,6 +34,7 @@ use std::fmt::Write;
3434use std:: ops:: Range ;
3535use std:: str;
3636
37+ use crate :: clean:: RenderedLink ;
3738use crate :: doctest;
3839use crate :: html:: highlight;
3940use crate :: html:: toc:: TocBuilder ;
@@ -52,7 +53,7 @@ fn opts() -> Options {
5253pub struct Markdown < ' a > (
5354 pub & ' a str ,
5455 /// A list of link replacements.
55- pub & ' a [ ( String , String ) ] ,
56+ pub & ' a [ RenderedLink ] ,
5657 /// The current list of used header IDs.
5758 pub & ' a mut IdMap ,
5859 /// Whether to allow the use of explicit error codes in doctest lang strings.
@@ -78,7 +79,7 @@ pub struct MarkdownHtml<'a>(
7879 pub & ' a Option < Playground > ,
7980) ;
8081/// A tuple struct like `Markdown` that renders only the first paragraph.
81- pub struct MarkdownSummaryLine < ' a > ( pub & ' a str , pub & ' a [ ( String , String ) ] ) ;
82+ pub struct MarkdownSummaryLine < ' a > ( pub & ' a str , pub & ' a [ RenderedLink ] ) ;
8283
8384#[ derive( Copy , Clone , PartialEq , Debug ) ]
8485pub enum ErrorCodes {
@@ -339,11 +340,11 @@ impl<'a, I: Iterator<Item = Event<'a>>> Iterator for CodeBlocks<'_, 'a, I> {
339340/// Make headings links with anchor IDs and build up TOC.
340341struct LinkReplacer < ' a , ' b , I : Iterator < Item = Event < ' a > > > {
341342 inner : I ,
342- links : & ' b [ ( String , String ) ] ,
343+ links : & ' b [ RenderedLink ] ,
343344}
344345
345346impl < ' a , ' b , I : Iterator < Item = Event < ' a > > > LinkReplacer < ' a , ' b , I > {
346- fn new ( iter : I , links : & ' b [ ( String , String ) ] ) -> Self {
347+ fn new ( iter : I , links : & ' b [ RenderedLink ] ) -> Self {
347348 LinkReplacer { inner : iter, links }
348349 }
349350}
@@ -354,8 +355,8 @@ impl<'a, 'b, I: Iterator<Item = Event<'a>>> Iterator for LinkReplacer<'a, 'b, I>
354355 fn next ( & mut self ) -> Option < Self :: Item > {
355356 let event = self . inner . next ( ) ;
356357 if let Some ( Event :: Start ( Tag :: Link ( kind, dest, text) ) ) = event {
357- if let Some ( & ( _ , ref replace ) ) = self . links . iter ( ) . find ( |link| link. 0 == * dest) {
358- Some ( Event :: Start ( Tag :: Link ( kind, replace . to_owned ( ) . into ( ) , text) ) )
358+ if let Some ( link ) = self . links . iter ( ) . find ( |link| link. original_text == * dest) {
359+ Some ( Event :: Start ( Tag :: Link ( kind, link . href . clone ( ) . into ( ) , text) ) )
359360 } else {
360361 Some ( Event :: Start ( Tag :: Link ( kind, dest, text) ) )
361362 }
@@ -855,8 +856,8 @@ impl Markdown<'_> {
855856 return String :: new ( ) ;
856857 }
857858 let replacer = |_: & str , s : & str | {
858- if let Some ( & ( _ , ref replace ) ) = links. iter ( ) . find ( |link| & * link. 0 == s) {
859- Some ( ( replace . clone ( ) , s . to_owned ( ) ) )
859+ if let Some ( link ) = links. iter ( ) . find ( |link| & * link. original_text == s) {
860+ Some ( ( link . original_text . clone ( ) , link . href . clone ( ) ) )
860861 } else {
861862 None
862863 }
@@ -933,8 +934,8 @@ impl MarkdownSummaryLine<'_> {
933934 }
934935
935936 let replacer = |_: & str , s : & str | {
936- if let Some ( & ( _ , ref replace ) ) = links. iter ( ) . find ( |link| & * link. 0 == s) {
937- Some ( ( replace . clone ( ) , s . to_owned ( ) ) )
937+ if let Some ( rendered_link ) = links. iter ( ) . find ( |link| & * link. original_text == s) {
938+ Some ( ( rendered_link . original_text . clone ( ) , rendered_link . href . clone ( ) ) )
938939 } else {
939940 None
940941 }
0 commit comments