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
62
63
64
65
66
67
68
|
use std::{
fs,
path::Path,
time::{SystemTime, UNIX_EPOCH},
};
use anyhow::Context;
use chrono::{DateTime, Local};
use convert_case::{Case, Casing};
use log::debug;
use crate::{
config_file::Config,
file_tree::{FileTree, GeneratedFile},
new::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 new_section_text = config
.templates
.section
.replace("REPLACMENT_SECTION_TITLE", &name)
.replace(
"DATE",
&format!(
"{}",
// FIXME: The time is not really precise enough to display the time. <2024-03-31>
DateTime::<Local>::from(SystemTime::now()).format("%Y-%m-%d (%_H:%_S)")
),
);
let new_section_file = GeneratedFile::new(
chapter_root
.join("sections")
.join(format!("{}.tex", MangledName::new(&name))),
new_section_text,
);
file_tree.add_file(new_section_file);
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)
}
|