diff --git a/src/config.rs b/src/config.rs index 371a901..d2fb9b9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -25,4 +25,8 @@ pub struct Config { /// Generate index file with given name #[arg(short, long)] pub index: Option, + + /// Append reference to original source (mirrors) + #[arg(short, long)] + pub refer: Vec, } diff --git a/src/main.rs b/src/main.rs index 6d395f2..acf9a43 100644 --- a/src/main.rs +++ b/src/main.rs @@ -119,8 +119,27 @@ fn main() -> Result<()> { path })?; for discussion in &discussions { - file.write_all(format!("* [{}]({}.md)\n", discussion.title, discussion.id).as_bytes())?; + file.write_all( + format!( + "* [{}]({}.md)\n", + discussion + .title + .replace("[", "\\[") + .replace("]", "\\]") + .replace("(", "\\(") + .replace(")", "\\)"), + discussion.id + ) + .as_bytes(), + )?; } + let mut footer = Vec::new(); + footer.push("\n---\n".into()); + footer.push(format!("Generated at {}\n", Utc::now())); + for refer in &config.refer { + footer.push(format!("* {refer}")); + } + file.write_all(footer.join("\n").as_bytes())? } for discussion in discussions { @@ -176,6 +195,14 @@ fn main() -> Result<()> { } content.push("---\n".into()) } + content.push(format!("Generated at {}\n", Utc::now())); + for refer in &config.refer { + content.push(format!( + "* {}/d/{}", + refer.trim_end_matches("/"), + discussion.id + )); + } content.join("\n") }); page.join("\n")