use std::path::PathBuf;
fn fix_subcommand_crossrefs(troff: &str) -> String {
let mut out = troff.to_string();
let pairs = [
("crabmate\\-serve(1)", "\\fBserve\\fR"),
("crabmate\\-bench(1)", "\\fBbench\\fR"),
("crabmate\\-config(1)", "\\fBconfig\\fR"),
("crabmate\\-doctor(1)", "\\fBdoctor\\fR"),
("crabmate\\-models(1)", "\\fBmodels\\fR"),
("crabmate\\-probe(1)", "\\fBprobe\\fR"),
("crabmate\\-save\\-session(1)", "\\fBsave-session\\fR"),
];
for (from, to) in pairs {
out = out.replace(from, to);
}
out.replace(
".TP\ncrabmate\\-help(1)\nPrint this message or the help of the given subcommand(s)\n",
".PP\nUse \\fBcrabmate \\-\\-help\\fR or \\fBcrabmate \\fIsubcommand\\fR \\fB\\-\\-help\\fR.\n",
)
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let cmd = crabmate::root_clap_command_for_man_page();
let man = clap_mangen::Man::new(cmd)
.title("CRABMATE")
.section("1")
.source(format!("crabmate {}", env!("CARGO_PKG_VERSION")))
.manual("CrabMate User Commands");
let dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("man");
std::fs::create_dir_all(&dir)?;
let path = dir.join("crabmate.1");
let mut raw = Vec::<u8>::new();
man.render(&mut raw)?;
let fixed = fix_subcommand_crossrefs(&String::from_utf8(raw)?);
std::fs::write(&path, fixed.as_bytes())?;
eprintln!("Wrote {}", path.display());
Ok(())
}