[Libguestfs] [PATCH nbdkit v2 4/5] docs: Fix POD verbatim paragraphs

Laszlo Ersek lersek at redhat.com
Wed May 25 05:52:03 UTC 2022


On 05/24/22 16:16, Richard W.M. Jones wrote:
> POD verbatim paragraphs are introduced by a line starting with
> whitespace and continue to the next line containing only whitespace
> (or empty).  In the output they appear as preformatted text (like
> <pre/> in HTML).  We use them extensively, but also as it turns out,
> wrongly.
> 
> I previously assumed that all lines of the verbatim paragraph had to
> be indented, but this is not true.  More seriously, adjacent verbatim
> paragraphs are always grouped together into a single preformatted
> block of output, whether or not there is a line containing whitespace
> between the paragraphs.  As an example, these three pieces of POD
> would be formatted identically (I have used “|” to mark the beginning
> and end of each line to make whitespace clear):
> 
>         (1)                  (2)                  (3)
>   | nbdkit foo \|      | nbdkit foo \|      | nbdkit foo \|
>   | --dump-plugin|     |--dump-plugin|      | --dump-plugin|
>   | |                  | |                  ||
>   | nbdkit bar|        | nbdkit bar|        | nbdkit bar|
> 
> In all cases, there are two verbatim paragraphs, the first paragraph
> has two lines and the second has one line.  The output is 4 lines of
> preformatted text, grouped together.  In HTML output that would mean a
> single <pre/> element.
> 
> In previous usage, we assumed that a space on a line on its own would
> cause the adjacent verbatim paragraphs to be grouped together, but a
> completely empty line (no whitespace) would cause the two verbatim
> paragraphs to be split.  As you can see in case (3) above, this does
> not work.
> 
> It is in fact possible to have adjacent verbatim paragraphs not be
> grouped together.  It involves inserting an empty, zero length
> ordinary paragraph between the two, which can be done using the
> “=for paragraph” syntax:
> 
>  nbdkit foo \
>  --dump-plugin
> 
>  =for paragraph
> 
>  nbdkit bar
> 
> In HTML output this will be formatted as two adjacent <pre/> elements.
> Note that the blank lines before and after “=for paragraph” are
> necessary.
> 
> This commit reformats all existing POD documentation in nbdkit to
> conform.  There are two main changes:
> 
> (a) Completely empty lines occurring between two verbatim paragraphs
> are replaced with “\n=for paragraph\n\n”, which as explained above
> stops the verbatim paragraphs from running together.
> 
> (b) Lines which contain only whitespace (ie. those we previously used
> to mean “group these verbatim paragraphs together”) are replaced with
> completely empty lines.
> 
> The following commit adds syntax checking to podwrapper to identify
> trailing whitespace in POD files, so that we don't introduce this kind
> of error in future.
> 
> Note that I don't try to unindent the verbatim paragraphs, because
> that looks weird and also makes it harder for us to parse the POD in
> case we needed to in future.
> 
> This change was made mechanically using this Perl script:
> 
>  #!/usr/bin/perl -w
>  use strict;
> 
>  foreach my $input (@ARGV) {
>     my $content;
>     { local $/ = undef;
>       open FILE, "<:encoding(UTF-8)", $input or die "$input: $!";
>       $content = <FILE> }
>     # Verbatim paragraphs separated by empty line, means do not group.
>     my $oldcontent;
>     do {
>         $oldcontent = $content;
>         $content =~ s/(\n [^\n]*)\n\n /$1\n\n=for paragraph\n\n /g;
>     } until ($oldcontent eq $content);
>     # Any remaining lines containing only whitespace, group.
>     $content =~ s/\n[ \t]+\n/\n\n/g;
>     rename ($input, "$input.bak");
>     open FILE, ">:encoding(UTF-8)", $input or die "$input: $!";
>     print FILE $content;
>  }
> 
> Thanks: Laszlo Ersek
> See-also: https://listman.redhat.com/archives/libguestfs/2022-May/thread.html#28902
> ---
>  docs/nbdkit-captive.pod                        |  2 ++
>  docs/nbdkit-filter.pod                         | 14 +++++++-------
>  docs/nbdkit-plugin.pod                         | 12 +++++++-----
>  docs/nbdkit-probing.pod                        |  8 ++++++++
>  docs/nbdkit-service.pod                        |  4 ++--
>  docs/nbdkit.pod                                |  2 ++
>  .../checkwrite/nbdkit-checkwrite-filter.pod    |  2 ++
>  filters/ddrescue/nbdkit-ddrescue-filter.pod    |  2 ++
>  filters/delay/nbdkit-delay-filter.pod          |  4 ++++
>  filters/ext2/nbdkit-ext2-filter.pod            |  2 ++
>  filters/readahead/nbdkit-readahead-filter.pod  |  4 ++++
>  filters/scan/nbdkit-scan-filter.pod            |  4 ++++
>  filters/stats/nbdkit-stats-filter.pod          |  8 ++++----
>  filters/swab/nbdkit-swab-filter.pod            |  4 ++++
>  filters/xz/nbdkit-xz-filter.pod                |  2 ++
>  plugins/S3/nbdkit-S3-plugin.pod                |  2 +-
>  plugins/cc/nbdkit-cc-plugin.pod                | 18 +++++++++---------
>  plugins/curl/nbdkit-curl-plugin.pod            |  4 ++--
>  plugins/data/nbdkit-data-plugin.pod            |  8 ++++++++
>  plugins/file/nbdkit-file-plugin.pod            |  2 ++
>  plugins/golang/nbdkit-golang-plugin.pod        |  8 ++++----
>  plugins/guestfs/nbdkit-guestfs-plugin.pod      |  4 ++++
>  plugins/info/nbdkit-info-plugin.pod            |  2 ++
>  plugins/memory/nbdkit-memory-plugin.pod        |  4 ++--
>  plugins/nbd/nbdkit-nbd-plugin.pod              |  4 ++++
>  plugins/ocaml/nbdkit-ocaml-plugin.pod          |  6 ++++--
>  plugins/ondemand/nbdkit-ondemand-plugin.pod    |  4 ++++
>  plugins/rust/nbdkit-rust-plugin.pod            |  6 +++---
>  plugins/sh/nbdkit-sh-plugin.pod                |  4 ++++
>  plugins/tmpdisk/nbdkit-tmpdisk-plugin.pod      |  2 ++
>  30 files changed, 111 insertions(+), 41 deletions(-)

Acked-by: Laszlo Ersek <lersek at redhat.com>



More information about the Libguestfs mailing list