URL:
  <https://savannah.gnu.org/bugs/?67401>

                 Summary: [ms] footer line misplaced by one vee
                   Group: GNU roff
               Submitter: gbranden
               Submitted: Thu 07 Aug 2025 06:26:32 AM GMT
                Category: Macro package ms
                Severity: 3 - Normal
              Item Group: Feature change
                  Status: In Progress
                 Privacy: Public
             Assigned to: gbranden
             Open/Closed: Open
         Discussion Lock: Any
         Planned Release: None


    _______________________________________________________

Follow-up Comments:


-------------------------------------------------------
Date: Thu 07 Aug 2025 06:26:32 AM GMT By: G. Branden Robinson <gbranden>
This is an old bug, affecting _groff ms_ as far back as 1.22.3.

Unfortunately it's also a well-entrenched one and could change formatting of
user documents, so I'm marking it as a "Feature change"; I'll have to "NEWS"
it. 

Observe:


$ cat ATTIC/footer-placement.ms
.nr LL 65n
.nr PO 0
.P1
.ds CH Header
.ds CF Footer
.de pp
.LP
Sed ut perspiciatis, unde omnis iste natus error sit voluptatem
accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab
illo inventore veritatis et quasi architecto beatae vitae dicta sunt,
explicabo.  Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur
aut odit aut fugit, sed quia consequuntur magni dolores eos, qui ratione
voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum,
quia dolor sit amet consectetur adipiscivelit, sed quia non-numquam eius
modi tempora incidunt, ut labore et dolore magnam aliquam quaerat
voluptatem.  Ut enim ad minima veniam, quis nostrum exercitationem ullam
corporis suscipitlaboriosam, nisi ut aliquid ex ea commodi consequatur?
Quis autem vel eum iure reprehenderit, qui inea voluptate velit esse,
quam nihil molestiae consequatur, vel illum, qui dolorem eum fugiat, quo
voluptas nulla pariatur?  At vero eos et accusamus et iusto odio
dignissimos ducimus, qui blanditiis praesentium voluptatum deleniti
atque corrupti, quos dolores et quas molestias excepturi sint, obcaecati
cupiditate non-provident, similique sunt in culpa, qui officia deserunt
mollitia animi, id est laborum et dolorum fuga.  Et harum quidem rerum
facilis est et expedita distinctio.  Nam libero tempore, cum soluta
nobis est eligendi optio, cumque nihil impedit, quo minus id, quod
maxime placeat, facere possimus, omnis voluptas assumenda est, omnis
dolor repellendus.  Temporibus autem quibusdam et aut officiis debitis
aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae
sint et molestiae non-recusandae.
..
.pp
.pp
$ ~/groff-HEAD/bin/nroff -ms ATTIC/footer-placement.ms | nl -ba | tail
    57  sint et molestiae non‐recusandae.
    58
    59
    60
    61
    62
    63
    64                                Footer
    65
    66


There is a (nominally) half-inch margin (=3v at 10-on-12 point type) at the
top of the page but at the bottom, the margin is less.

The bug lingers...


$ ~/groff-1.22.4/bin/nroff -ms ATTIC/footer-placement.ms | nl -ba | tail
    57  sint et molestiae non‐recusandae.
    58
    59
    60
    61
    62
    63
    64                                Footer
    65
    66
$ ~/groff-1.23.0/bin/nroff -ms ATTIC/footer-placement.ms | nl -ba | tail
    57  sint et molestiae non‐recusandae.
    58
    59
    60
    61
    62
    63
    64                                Footer
    65
    66


...and affects HEAD.


$ ~/groff-HEAD/bin/nroff -ms ATTIC/footer-placement.ms | nl -ba | tail
    57  sint et molestiae non‐recusandae.
    58
    59
    60
    61
    62
    63
    64                                Footer
    65
    66


What do other _troff_s do?


$ ./bin/nroff -ms ./footer-placement.ms | nl -ba | tail # Heirloom
    57  repudiandae sint et molestiae non-recusandae.
    58
    59
    60
    61
    62
    63
    64                               Footer
    65
    66
$ DWBHOME=. ./bin/nroff -ms ./footer-placement.ms | nl -ba | tail
   123
   124
   125
   126
   127
   128
   129                               Footer
   130
   131
   132


DWB gets the footer placement right.  (It formats the text on two pages
because it doesn't honor the `PO` register setting.  We don't have that
documented as a GNU (or even Berkeley) extension so I guess I get to research
its history.)

What about Seventh Edition Unix?

The foregoing technique is not possible on that platform because:

1.  _nl_(1) doesn't exist; and
2.  _sed_(1) is **CRAPTASTIC**.  Its `s` command cannot handle even the
simplest of regexes in the matcher part of its argument.  I had no idea _sed_
was ever this anemic.

But Version 7 Unix *did* have _awk_(1), so I reimplemented `nl -ba` in it.
Cheers to A, W, and K!


$ cat nl.awk
BEGIN { lineno = 1 }
{ print lineno, "\t", $0; lineno++ }
$ nroff -ms footerplac.ms | awk -f ./nl.awk
1        
2        
3        
4        
5        
6        
7        Sed ut perspiciatis, unde omnis iste natus error  sit  voluptatem
8        accusantium  doloremque laudantium, totam rem aperiam eaque ipsa,
9        quae ab illo inventore veritatis et quasi architecto beatae vitae
10       dicta sunt, explicabo.  Nemo enim ipsam voluptatem, quia voluptas
11       sit, aspernatur aut odit aut fugit, sed quia  consequuntur  magni
12       dolores  eos,  qui ratione voluptatem sequi nesciunt, neque porro
13       quisquam est, qui dolorem ipsum, quia dolor sit amet  consectetur
14       adipiscivelit,  sed  quia non-numquam eius modi tempora incidunt,
15       ut labore et dolore magnam aliquam quaerat voluptatem.   Ut  enim
16       ad minima veniam, quis nostrum exercitationem ullam corporis sus-
17       cipitlaboriosam, nisi ut aliquid ex ea commodi consequatur?  Quis
18       autem  vel eum iure reprehenderit, qui inea voluptate velit esse,
19       quam nihil molestiae consequatur,  vel  illum,  qui  dolorem  eum
20       fugiat, quo voluptas nulla pariatur?  At vero eos et accusamus et
21       iusto odio dignissimos ducimus, qui blanditiis praesentium volup-
22       tatum  deleniti  atque  corrupti,  quos dolores et quas molestias
23       excepturi sint,  obcaecati  cupiditate  non-provident,  similique
24       sunt  in  culpa,  qui  officia  deserunt  mollitia  animi, id est
25       laborum et dolorum fuga.  Et harum quidem rerum  facilis  est  et
26       expedita  distinctio.   Nam  libero tempore, cum soluta nobis est
27       eligendi optio, cumque nihil impedit, quo minus id,  quod  maxime
28       placeat,  facere  possimus,  omnis  voluptas assumenda est, omnis
29       dolor repellendus.  Temporibus autem quibusdam  et  aut  officiis
30       debitis   aut   rerum  necessitatconsoledmr9#=Gut  et  voluptates
31       repudiandae sint et molestiae non-recusandae.
32       
33       Sed ut perspiciatis, unde omnis iste natus error  sit  voluptatem
34       accusantium  doloremque laudantium, totam rem aperiam eaque ipsa,
35       quae ab illo inventore veritatis et quasi architecto beatae vitae
36       dicta sunt, explicabo.  Nemo enim ipsam voluptatem, quia voluptas
37       sit, aspernatur aut odit aut fugit, sed quia  consequuntur  magni
38       dolores  eos,  qui ratione voluptatem sequi nesciunt, neque porro
39       quisquam est, qui dolorem ipsum, quia dolor sit amet  consectetur
40       adipiscivelit,  sed  quia non-numquam eius modi tempora incidunt,
41       ut labore et dolore magnam aliquam quaerat voluptatem.   Ut  enim
42       ad minima veniam, quis nostrum exercitationem ullam corporis sus-
43       cipitlaboriosam, nisi ut aliquid ex ea commodi consequatur?  Quis
44       autem  vel eum iure reprehenderit, qui inea voluptate velit esse,
45       quam nihil molestiae consequatur,  vel  illum,  qui  dolorem  eum
46       fugiat, quo voluptas nulla pariatur?  At vero eos et accusamus et
47       iusto odio dignissimos ducimus, qui blanditiis praesentium volup-
48       tatum  deleniti  atque  corrupti,  quos dolores et quas molestias
49       excepturi sint,  obcaecati  cupiditate  non-provident,  similique
50       sunt  in  culpa,  qui  officia  deserunt  mollitia  animi, id est
51       laborum et dolorum fuga.  Et harum quidem rerum  facilis  est  et
52       expedita  distinctio.   Nam  libero tempore, cum soluta nobis est
53       eligendi optio, cumque nihil impedit, quo minus id,  quod  maxime
54       placeat,  facere  possimus,  omnis  voluptas assumenda est, omnis
55       dolor repellendus.  Temporibus autem quibusdam  et  aut  officiis
56       debitis   aut   rerum  necessitatconsoledmr9#=Gut  et  voluptates
57       repudiandae sint et molestiae non-recusandae.
58       
59       
60       
61       
62       
63       
64                                    Footer
65       
66       


(There's no header on page 1 because it's page 1, and AT&T _ms_ didn't support
Berkeley's `P1` extension.)

Well, that's interesting.  But I think DWB found and fixed a bug in _ms_, a
fix that unfortunately did not propagate into _groff_ in early days.  I
suspect Heirloom copied _groff_'s behavior.

It's worth noting that _me_(7) had (and retains to this day) symmetric
vertical page margins.

Finally, the input document is pure ASCII:


$ file ATTIC/footer-placement.ms 
ATTIC/footer-placement.ms: troff or preprocessor input, ASCII text


And yet we get some surprising output.  I ain't touchin' that
"necessitatconsoledmr9#=Gut" stuff with a ten-foot pole.  Not my 50-year-old
circus, not my geriatric monkeys.







    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?67401>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to