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)) }