Improve rendering of examples.

- Join adjacent code blocks, prevent wrapping in HTML.
This commit is contained in:
Justus Winter 2024-01-11 13:41:51 +01:00
parent 479aeaec22
commit 0f3a796bc1
No known key found for this signature in database
GPG Key ID: 686F55B4AB2B3386
3 changed files with 32 additions and 5 deletions

View File

@ -242,7 +242,7 @@ pages:
- mkdir public - mkdir public
- mv -v target/doc public/impl - mv -v target/doc public/impl
- for M in /tmp/assets/man-pages/*; do pandoc -s $M -L src/man-pandoc.lua -o $M.html ; done - for M in /tmp/assets/man-pages/*; do pandoc -s $M -L src/man-pandoc.lua -H src/man-pandoc.inc.html -o $M.html ; done
- mkdir public/man - mkdir public/man
- mv -v /tmp/assets/man-pages/*.html public/man - mv -v /tmp/assets/man-pages/*.html public/man

5
src/man-pandoc.inc.html Normal file
View File

@ -0,0 +1,5 @@
<style>
code {
white-space: pre;
}
</style>

View File

@ -550,6 +550,9 @@ impl CommandOption {
pub struct ManualPage { pub struct ManualPage {
filename: PathBuf, filename: PathBuf,
roff: Roff, roff: Roff,
// Are we in code mode (emitted .nf)?
in_code: bool,
} }
impl ManualPage { impl ManualPage {
@ -557,6 +560,7 @@ impl ManualPage {
Self { Self {
filename, filename,
roff: Roff::new(), roff: Roff::new(),
in_code: false,
} }
} }
@ -577,6 +581,22 @@ impl ManualPage {
self.roff.text([roman(&format!("{} - {}", name, summary))]); self.roff.text([roman(&format!("{} - {}", name, summary))]);
} }
/// Typeset code blocks, joining adjacent blocks.
fn code(&mut self, code: bool) {
match (self.in_code, code) {
(false, false) => (),
(false, true) => {
self.roff.control("nf", []);
self.in_code = true;
},
(true, false) => {
self.roff.control("fi", []);
self.in_code = false;
},
(true, true) => (),
}
}
/// Typeset the synopsis of a command. This is going to be part of /// Typeset the synopsis of a command. This is going to be part of
/// the SYNOPSIS section. There are conventions for how it should /// the SYNOPSIS section. There are conventions for how it should
/// be typeset. For sq, we simplify them by summarizing options /// be typeset. For sq, we simplify them by summarizing options
@ -690,6 +710,7 @@ impl ManualPage {
TARGET_LINE_LENGTH - 3 * RS_INDENTATION; TARGET_LINE_LENGTH - 3 * RS_INDENTATION;
if let Some(line) = line.strip_prefix("# ") { if let Some(line) = line.strip_prefix("# ") {
self.code(false);
self.roff.text([roman(line)]); self.roff.text([roman(line)]);
} else if let Some(line) = line.strip_prefix("$ ") { } else if let Some(line) = line.strip_prefix("$ ") {
let line = line.trim(); let line = line.trim();
@ -698,11 +719,10 @@ impl ManualPage {
EXAMPLE_COMMAND_MAX_WIDTH); EXAMPLE_COMMAND_MAX_WIDTH);
fail!("{}", line); fail!("{}", line);
} }
self.roff.control("nf", []); self.code(true);
self.roff.control("RS", []); self.roff.control("RS", []);
self.roff.text([roman(line)]); self.roff.text([roman(line)]);
self.roff.control("RE", []); self.roff.control("RE", []);
self.roff.control("fi", []);
} else if continuation { } else if continuation {
let line = line.trim(); let line = line.trim();
if line.len() > EXAMPLE_CONTINUATION_MAX_WIDTH { if line.len() > EXAMPLE_CONTINUATION_MAX_WIDTH {
@ -710,14 +730,14 @@ impl ManualPage {
EXAMPLE_CONTINUATION_MAX_WIDTH); EXAMPLE_CONTINUATION_MAX_WIDTH);
fail!("{}", line); fail!("{}", line);
} }
self.roff.control("nf", []); self.code(true);
self.roff.control("RS", []); self.roff.control("RS", []);
self.roff.control("RS", []); self.roff.control("RS", []);
self.roff.text([roman(line)]); self.roff.text([roman(line)]);
self.roff.control("RE", []); self.roff.control("RE", []);
self.roff.control("RE", []); self.roff.control("RE", []);
self.roff.control("fi", []);
} else { } else {
self.code(false);
self.roff.text([roman(line)]); self.roff.text([roman(line)]);
} }
@ -733,6 +753,8 @@ impl ManualPage {
need_para = true; need_para = true;
} }
} }
self.code(false);
} }
} }
} }