Subject: Re: bug#46422: 'pr' screws up tabstops in multicolumn outpt?

From: Leonard Janis Robert König <[email-masked]>
Date: Wed, 10 Feb 2021 19:31:49 +0100

On Wed, 2021-02-10 at 17:06 +0100, Erik Auerswald wrote:
> Hi,
> 
> On Wed, Feb 10, 2021 at 01:42:29PM +0100, Leonard Janis Robert König
> wrote:
> > I'm sorry if I this is not a bug but to be expected, but I thnk pr
> > doesn't get the alignment of tabs in multicolumn output right.
> > [...]
> > Unfortunately the POSIX spec is, in my reading, a bit unclear here.
> 
> I do not think so:
> 
> -column
>   Produce multi-column output that is arranged in column
> columns[...].
>   The options -e and -i shall be assumed for multiple text-column
> output.
> 
> -e[char][gap]
>   Expand each input <tab> to the next greater column position[...].
> 
> -i[char][gap]
>   In output, replace multiple <space>s with <tab>s wherever[...].
> 
> https://pubs.opengroup.org/onlinepubs/009695399/utilities/pr.html
> https://pubs.opengroup.org/onlinepubs/9699919799/utilities/pr.html
> 
> The way I read the POSIX spec, "pr" needs to account for the column
> separation by adjusting whitespace while still using tab characters
> in
> the output.

What's unclear however, whether this adjusting whitespace (replacing
space by tab, as is the default) should happen on input or after
arranging the text into columns.  The former produces something
resembling the GNU output as the tabs in the input files are kept,
despite not aligning to 8 characters anymore.  The latter produces the
SunOS/FreeBSD output, as first the text is arranged and then tabs
recalculated.

> > But I think the behavior of GNU/pr is rather unexpected when
> > printing
> > multicolumn source code and not in line what the original authors
> > intended.
> 
> I concur.

This makes tabs as input while using column or merge basically unusable
though, as the characters are completely misaligned.  This is
especially bad for code.  My use case is a script that prints the UNIX
v6 source code in fashion of John Lion (see v6.cuzoco.com) and it
breaks under GNU pr, but not on BSD, Solaris.  And it seems to have
worked also on Amdahl UTS in the late 80s for that matter.  

With regards to the original intent, I just tested this on Research
UNIX v6 with SIMH
(https://gunkies.org/wiki/Installing_Unix_v6_(PDP-11)_on_SIMH), and
indeed the output is like the SunOS and FreeBSD version do:

# pr -t -2 foo
123456781234567812345678123456781   123456781234567812345678123456781
x       x       x       x       x   x       x       x       x       x

N.B. that the input file must be little longer since the original
version didn't produce identical vertical lengths as is allowed as per
the standard:

> Whether or not text  columns  are produced with identical vertical
> lengths is unspecified [...] .

At least to me this behavior of GNU pr came as a big surprise, maybe
this should be described in the FAQ/Gotchas or the BUGS section of the
manual?

~ leo