@@ -245,18 +245,23 @@ static MARKDOWN_EXTENSIONS: [&str; 7] =
245
245
/// use cargo_registry_markdown::text_to_html;
246
246
///
247
247
/// 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 );
249
249
/// 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");
250
250
/// ```
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 ( ) {
256
261
return markdown_to_html ( text, base_url, base_dir) ;
257
262
}
258
263
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 ( ) ) {
260
265
if MARKDOWN_EXTENSIONS . contains ( & ext. to_lowercase ( ) . as_str ( ) ) {
261
266
return markdown_to_html ( text, base_url, base_dir) ;
262
267
}
@@ -477,30 +482,38 @@ mod tests {
477
482
"s1/s2/readme.md" ,
478
483
] {
479
484
assert_eq ! (
480
- text_to_html( "*lobster*" , f, None ) ,
485
+ text_to_html( "*lobster*" , f, None , None ) ,
481
486
"<p><em>lobster</em></p>\n "
482
487
) ;
483
488
}
484
489
485
490
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 ) ,
487
492
"<p><em><a href=\" https://github.com/rust-lang/test/blob/HEAD/docs/lobster\" rel=\" nofollow noopener noreferrer\" >lobster</a></em></p>\n "
488
493
) ;
489
494
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 ) ,
491
496
"<p><em><a href=\" https://github.com/rust-lang/test/blob/HEAD/s/docs/lobster\" rel=\" nofollow noopener noreferrer\" >lobster</a></em></p>\n "
492
497
) ;
493
498
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 ) ,
495
500
"<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 "
496
501
) ;
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
+ ) ;
497
510
}
498
511
499
512
#[ test]
500
513
fn text_to_html_renders_other_things ( ) {
501
514
for f in & [ "readme.exe" , "readem.org" , "blah.adoc" ] {
502
515
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 ) ,
504
517
"<script>lobster</script><br>\n <br>\n is my friend<br>\n "
505
518
) ;
506
519
}
0 commit comments