readme.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use crate::errors::{ Result };
use crate::git::{ CommitReference, Repository, RepositoryExtensions };
use crate::state::{ Gitten };
pub(crate) fn load_and_render(state: &Gitten, repository: &Repository, commit: &CommitReference) -> Result<Option<String>> {
let mut readme_md = None;
for readme_path in ["README.md", "README.markdown", "readme.md", "readme.markdown", "README.txt", "readme.txt", "README", "readme"] {
if let Ok(blob_text) = repository.find_blob_text_by_path(commit, readme_path) {
readme_md = Some(blob_text);
break;
}
}
let Some(readme_md) = readme_md else {
return Ok(None);
};
// Add one level to all headings so we never have an h1
let readme_md = state
.shared_regexes
.markdown_heading_regex
.replace_all(&readme_md, "#$heading");
// Any heading of level 7 or more becomes an h6 (since there is no h7 and above)
let readme_md = state
.shared_regexes
.too_long_heading_regex
.replace_all(&readme_md, "######");
let parser = pulldown_cmark::Parser::new(&readme_md);
let mut readme_html = String::new();
pulldown_cmark::html::push_html(&mut readme_html, parser);
Ok(Some(readme_html))
}