aboutsummaryrefslogtreecommitdiffstats
path: root/src/new
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/new/chapter.rs7
-rw-r--r--src/new/mod.rs5
-rw-r--r--src/new/replacement.rs47
-rw-r--r--src/new/section.rs63
4 files changed, 67 insertions, 55 deletions
diff --git a/src/new/chapter.rs b/src/new/chapter.rs
index 887855b..fcc075d 100644
--- a/src/new/chapter.rs
+++ b/src/new/chapter.rs
@@ -7,7 +7,7 @@ use crate::{
file_tree::{FileTree, GeneratedFile},
};
-use super::MangledName;
+use super::{replacement::untemplatize_chapter, MangledName};
pub struct ChapterName {
name: MangledName,
@@ -125,10 +125,7 @@ fn new_chapter_file(
project_root: &Path,
last_chapter_number: u32,
) -> GeneratedFile {
- let chapter_text = config
- .templates
- .chapter
- .replace("REPLACEMENT_CHAPTER", &name);
+ let chapter_text = untemplatize_chapter(&config.templates.chapter, &name);
GeneratedFile::new(
project_root
diff --git a/src/new/mod.rs b/src/new/mod.rs
index 8d8193c..04b75ef 100644
--- a/src/new/mod.rs
+++ b/src/new/mod.rs
@@ -4,6 +4,7 @@ use convert_case::{Case, Casing};
use deunicode::deunicode;
pub mod chapter;
+pub mod replacement;
pub mod section;
#[derive(PartialEq, Eq, PartialOrd, Ord)]
@@ -29,6 +30,10 @@ impl MangledName {
pub fn as_str(&self) -> &str {
&self.0
}
+
+ pub fn try_unmangle(self) -> String {
+ self.0.to_case(Case::Title)
+ }
}
impl Display for MangledName {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
diff --git a/src/new/replacement.rs b/src/new/replacement.rs
new file mode 100644
index 0000000..6878e61
--- /dev/null
+++ b/src/new/replacement.rs
@@ -0,0 +1,47 @@
+use std::time::{SystemTime, UNIX_EPOCH};
+
+use chrono::{Local, TimeDelta, TimeZone};
+use log::debug;
+
+use crate::constants::{
+ DATE, REPLACEMENT_CHAPTER, REPLACEMENT_CHAPTER_SECTION, REPLACMENT_SECTION_TITLE,
+};
+
+fn get_current_date() -> String {
+ let start = SystemTime::now();
+ let seconds_since_epoch: TimeDelta = TimeDelta::from_std(
+ start
+ .duration_since(UNIX_EPOCH)
+ .expect("Time went backwards"),
+ )
+ .expect("Time does not go backwards");
+
+ debug!(
+ "Adding a date with timestamp: {}",
+ seconds_since_epoch.num_seconds()
+ );
+
+ let our_date = format!(
+ "{}",
+ Local
+ .timestamp_opt(seconds_since_epoch.num_seconds(), 0)
+ // only has unwrap, no expect. But should always work
+ .unwrap()
+ .format("%Y-%m-%d %H:%M:%S%.f %:z")
+ );
+
+ our_date
+}
+
+pub fn untemplatize_section(input: &str, new_section_name: &str, new_chapter_name: &str) -> String {
+ input
+ .replace(REPLACEMENT_CHAPTER_SECTION, &new_chapter_name)
+ .replace(REPLACMENT_SECTION_TITLE, &new_section_name)
+ .replace(DATE, &get_current_date())
+}
+
+pub fn untemplatize_chapter(input: &str, new_chapter_name: &str) -> String {
+ input
+ .replace(REPLACEMENT_CHAPTER, &new_chapter_name)
+ .replace(DATE, &get_current_date())
+}
diff --git a/src/new/section.rs b/src/new/section.rs
index 5e9f08c..a350f71 100644
--- a/src/new/section.rs
+++ b/src/new/section.rs
@@ -1,57 +1,14 @@
-use std::{
- fs,
- path::Path,
- time::{SystemTime, UNIX_EPOCH},
-};
+use std::{fs, path::Path};
use anyhow::Context;
-use chrono::{Local, TimeDelta, TimeZone};
use log::debug;
use crate::{
config_file::Config,
file_tree::{FileTree, GeneratedFile},
- new::MangledName,
+ new::{replacement::untemplatize_section, MangledName},
};
-fn get_current_date() -> String {
- let start = SystemTime::now();
- let seconds_since_epoch: TimeDelta = TimeDelta::from_std(
- start
- .duration_since(UNIX_EPOCH)
- .expect("Time went backwards"),
- )
- .expect("Time does not go backwards");
-
- debug!(
- "Adding a date with timestamp: {}",
- seconds_since_epoch.num_seconds()
- );
-
- let our_date = format!(
- "{}",
- Local
- .timestamp_opt(seconds_since_epoch.num_seconds(), 0)
- // only has unwrap, no expect. But should always work
- .unwrap()
- .format("%Y-%m-%d %H:%M:%S%.f %:z")
- );
-
- // let date = Command::new("date")
- // .args(["-d", &format!("@{}", seconds_since_epoch.num_seconds())])
- // .output()
- // .unwrap()
- // .stdout;
-
- // info!(
- // "This is dated: '{}' vs. our date: '{}'",
- // String::from_utf8(date).unwrap().strip_suffix('\n').unwrap(),
- // our_date
- // );
-
- our_date
-}
-
pub fn generate_new_section(
config: &Config,
name: String,
@@ -63,11 +20,17 @@ pub fn generate_new_section(
let mut file_tree = FileTree::new();
- let new_section_text = config
- .templates
- .section
- .replace("REPLACMENT_SECTION_TITLE", &name)
- .replace("DATE", &get_current_date());
+ 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