@@ -245,18 +245,23 @@ static MARKDOWN_EXTENSIONS: [&str; 7] =
245245/// use cargo_registry_markdown::text_to_html;
246246///
247247/// let text = "[Rust](https://rust-lang.org/) is an awesome *systems programming* language!";
248- /// let rendered = text_to_html(text, "README.md", None);
248+ /// let rendered = text_to_html(text, "README.md", None, None );
249249/// assert_eq!(rendered, "<p><a href=\"https://rust-lang.org/\" rel=\"nofollow noopener noreferrer\">Rust</a> is an awesome <em>systems programming</em> language!</p>\n");
250250/// ```
251- pub fn text_to_html ( text : & str , path : & str , base_url : Option < & str > ) -> String {
252- let path = Path :: new ( path) ;
253- let base_dir = path. parent ( ) . and_then ( |p| p. to_str ( ) ) . unwrap_or ( "" ) ;
254-
255- if path. extension ( ) . is_none ( ) {
251+ pub fn text_to_html (
252+ text : & str ,
253+ readme_path_in_pkg : & str ,
254+ base_url : Option < & str > ,
255+ pkg_path_in_vcs : Option < & str > ,
256+ ) -> String {
257+ let path_in_vcs = Path :: new ( pkg_path_in_vcs. unwrap_or ( "" ) ) . join ( readme_path_in_pkg) ;
258+ let base_dir = path_in_vcs. parent ( ) . and_then ( |p| p. to_str ( ) ) . unwrap_or ( "" ) ;
259+
260+ if path_in_vcs. extension ( ) . is_none ( ) {
256261 return markdown_to_html ( text, base_url, base_dir) ;
257262 }
258263
259- if let Some ( ext) = path . extension ( ) . and_then ( |ext| ext. to_str ( ) ) {
264+ if let Some ( ext) = path_in_vcs . extension ( ) . and_then ( |ext| ext. to_str ( ) ) {
260265 if MARKDOWN_EXTENSIONS . contains ( & ext. to_lowercase ( ) . as_str ( ) ) {
261266 return markdown_to_html ( text, base_url, base_dir) ;
262267 }
@@ -477,30 +482,38 @@ mod tests {
477482 "s1/s2/readme.md" ,
478483 ] {
479484 assert_eq ! (
480- text_to_html( "*lobster*" , f, None ) ,
485+ text_to_html( "*lobster*" , f, None , None ) ,
481486 "<p><em>lobster</em></p>\n "
482487 ) ;
483488 }
484489
485490 assert_eq ! (
486- text_to_html( "*[lobster](docs/lobster)*" , "readme.md" , Some ( "https://github.com/rust-lang/test" ) ) ,
491+ text_to_html( "*[lobster](docs/lobster)*" , "readme.md" , Some ( "https://github.com/rust-lang/test" ) , None ) ,
487492 "<p><em><a href=\" https://github.com/rust-lang/test/blob/HEAD/docs/lobster\" rel=\" nofollow noopener noreferrer\" >lobster</a></em></p>\n "
488493 ) ;
489494 assert_eq ! (
490- text_to_html( "*[lobster](docs/lobster)*" , "s/readme.md" , Some ( "https://github.com/rust-lang/test" ) ) ,
495+ text_to_html( "*[lobster](docs/lobster)*" , "s/readme.md" , Some ( "https://github.com/rust-lang/test" ) , None ) ,
491496 "<p><em><a href=\" https://github.com/rust-lang/test/blob/HEAD/s/docs/lobster\" rel=\" nofollow noopener noreferrer\" >lobster</a></em></p>\n "
492497 ) ;
493498 assert_eq ! (
494- text_to_html( "*[lobster](docs/lobster)*" , "s1/s2/readme.md" , Some ( "https://github.com/rust-lang/test" ) ) ,
499+ text_to_html( "*[lobster](docs/lobster)*" , "s1/s2/readme.md" , Some ( "https://github.com/rust-lang/test" ) , None ) ,
495500 "<p><em><a href=\" https://github.com/rust-lang/test/blob/HEAD/s1/s2/docs/lobster\" rel=\" nofollow noopener noreferrer\" >lobster</a></em></p>\n "
496501 ) ;
502+ assert_eq ! (
503+ text_to_html( "*[lobster](docs/lobster)*" , "s1/s2/readme.md" , Some ( "https://github.com/rust-lang/test" ) , Some ( "path/in/vcs/" ) ) ,
504+ "<p><em><a href=\" https://github.com/rust-lang/test/blob/HEAD/path/in/vcs/s1/s2/docs/lobster\" rel=\" nofollow noopener noreferrer\" >lobster</a></em></p>\n "
505+ ) ;
506+ assert_eq ! (
507+ text_to_html( "*[lobster](docs/lobster)*" , "s1/s2/readme.md" , Some ( "https://github.com/rust-lang/test" ) , Some ( "path/in/vcs" ) ) ,
508+ "<p><em><a href=\" https://github.com/rust-lang/test/blob/HEAD/path/in/vcs/s1/s2/docs/lobster\" rel=\" nofollow noopener noreferrer\" >lobster</a></em></p>\n "
509+ ) ;
497510 }
498511
499512 #[ test]
500513 fn text_to_html_renders_other_things ( ) {
501514 for f in & [ "readme.exe" , "readem.org" , "blah.adoc" ] {
502515 assert_eq ! (
503- text_to_html( "<script>lobster</script>\n \n is my friend\n " , f, None ) ,
516+ text_to_html( "<script>lobster</script>\n \n is my friend\n " , f, None , None ) ,
504517 "<script>lobster</script><br>\n <br>\n is my friend<br>\n "
505518 ) ;
506519 }
0 commit comments