Echo Writes Code

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