use std::io::Write;
const EXTRA: &str = include_str!("man_extra.roff");
pub fn render(out: &mut dyn Write) -> std::io::Result<()> {
let cli = crate::dispatch::build_cli();
let cmd = cli
.find_subcommand("rustyfi")
.expect("the compiler personality")
.clone()
.version(env!("CARGO_PKG_VERSION"));
let man = clap_mangen::Man::new(cmd)
.title("RUSTYFI")
.section("1")
.date(" ")
.manual("User Commands");
let mut buf = Vec::new();
man.render_title(&mut buf)?;
man.render_name_section(&mut buf)?;
man.render_synopsis_section(&mut buf)?;
man.render_description_section(&mut buf)?;
man.render_options_section(&mut buf)?;
man.render_subcommands_section(&mut buf)?;
buf.extend_from_slice(EXTRA.as_bytes());
man.render_version_section(&mut buf)?;
out.write_all(collapse_preamble(&buf).as_bytes())
}
fn collapse_preamble(buf: &[u8]) -> String {
const PREAMBLE: [&str; 2] = [r".ie \n(.g .ds Aq \(aq", r".el .ds Aq '"];
let text = String::from_utf8_lossy(buf);
let mut seen = false;
let mut out = String::with_capacity(text.len());
for line in text.lines() {
if PREAMBLE.contains(&line) {
if seen {
continue;
}
if line == PREAMBLE[1] {
seen = true;
}
}
out.push_str(line);
out.push('\n');
}
out
}