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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
use std::{fs, path::Path};
use anyhow::Context;
use log::debug;
use crate::{
config_file::Config,
file_tree::{FileTree, GeneratedFile},
new::{replacement::untemplatize_section, MangledName},
};
pub fn generate_new_section(
config: &Config,
name: String,
project_root: &Path,
chapter_name: &str,
) -> anyhow::Result<FileTree> {
let chapter_root = project_root.join("content").join(chapter_name);
debug!("Chapter root is: {}", chapter_root.display());
let mut file_tree = FileTree::new();
let display_chapter_name = MangledName::from_str_unsafe(
chapter_name
.chars()
.skip_while(|a: &char| a.is_digit(10) || *(a) == '_')
.collect::<String>()
.as_str(),
)
.try_unmangle();
let new_section_text =
untemplatize_section(&config.templates.section, &name, &display_chapter_name);
file_tree.add_file(GeneratedFile::new_clobber(
chapter_root
.join("sections")
.join(format!("{}.tex", MangledName::new(&name))),
new_section_text,
false,
));
let chapter_file_path = chapter_root.join("chapter.tex");
let mut chapter_file_text = fs::read_to_string(&chapter_file_path).with_context(|| {
format!(
"Failed to read the chapter main file ('{}') to string",
&chapter_file_path.display(),
)
})?;
chapter_file_text.push_str(&format!(
"\\input{{content/{}/sections/{}}}\n",
chapter_name,
&MangledName::new(&name)
));
let chapter_file = GeneratedFile::new(chapter_file_path, chapter_file_text);
file_tree.add_file(chapter_file);
Ok(file_tree)
}
|