bug-groff
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #61019] [me] using PS and n1 together produces a lot of diagnostic


From: G. Branden Robinson
Subject: [bug #61019] [me] using PS and n1 together produces a lot of diagnostic noise
Date: Sat, 7 Aug 2021 14:12:43 -0400 (EDT)
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

Follow-up Comment #2, bug #61019 (project groff):

Thanks, Bjarni.

I already reached the same conclusion; that's why I marked the status as "In
Progress".

Here's the current state in my working tree.  I haven't pushed this yet.


diff --git a/ChangeLog b/ChangeLog
index f04a058a..1f9e566d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2021-08-08  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       [me]: Fix PS/n1 combination diagnostic spew and apparent logic
+       error.
+
+       * tmac/e.tmac (@h): Place comment escape sequence immediately
+       after macro argument.  (When redefining a request, one needs to
+       remember that request arguments are not parsed exactly as macro
+       arguments are.)
+       (n2): Prefix with `do` requests using long register names.
+       (n2): Add macro-local register `|l` to store length of first
+       argument.  Don't attempt to extract a substring beyond its
+       bounds, which produces a warning diagnostic.
+       (&&): Define no-op macro for use as end macro in nested macro
+       definition.
+       (PS): Fix unbalanced-else diagnostic by changing `if` to `ie`.
+       (PS): Initialize `PS_nm_cnt` register to 0 instead of relying on
+       implicit definition.
+       (PS): Prefix with `do` definition of long macro name.
+       (PS): Indent call of end macro.
+       (PS): Add comment after escaped space.
+       (PS, PE): Prefix with `do` call of long macro name.
+
+       Fixes <https://savannah.gnu.org/bugs/?61019>.
+
 2021-08-08  G. Branden Robinson <g.branden.robinson@gmail.com>
 
        * src/utils/grog/grog.pl (do_line): Recognize `n1` and `n2` as
diff --git a/tmac/e.tmac b/tmac/e.tmac
index 47aaff21..e9f4bd87 100644
--- a/tmac/e.tmac
+++ b/tmac/e.tmac
@@ -288,7 +288,7 @@
 .      sp |\\n(tmu             \" move to top of text
 .ev
 .mk _k                         \" for columned output
-.if \\n(?n=1 .nm 1             \" restore line numbering if n1 mode
+.if \\n(?n=1 .nm 1\"           restore line numbering if n1 mode
 .nr $c 1                       \" set first column
 .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
 .ie \\n(?s \
@@ -577,14 +577,16 @@
 \{\
 .              ds |i \\$1
 .              ds |j \\$1
+.              nr |l 0
 .              \" Pick off leading char and rest to check.
 .              do substring |i 0 0  \"
-.              do substring |j 1    \" for +N / -N
+.              do length |l \\$1
+.              if \\n(|l>1 .do substring |j 1  \" for +N / -N
 .              ie `\\*(|i`+` \
-.                      nr ln (\\n[_ln])+\\*(|j
+.                      do nr ln (\\n[_ln])+\\*(|j
 .              el \
 .                      ie `\\*(|i`-` \
-.                              nr ln (\\n[_ln])-\\*(|j
+.                              do nr ln (\\n[_ln])-\\*(|j
 .                      el \
 .                              nr ln \\$1  \" unsigned N
 .              do nr _#p \\n(.s
@@ -592,6 +594,7 @@
 .              nm \\n(ln
 .              nr ?n 2
 .              rm |i |j
+.              rr |l
 .\}
 .      el \
 .              tm Line \\n(.c -- Bad .n2 value
@@ -599,7 +602,7 @@
 .el \
 \{\
 .      nm
-.      nr _ln \\n(ln
+.      do nr _ln \\n(ln
 .      po +\w'0000'u
 .      ll \\n($lu
 .      nr ?n 0
@@ -1325,6 +1328,9 @@
 .ls
 ..
 .
+.de && \" no-op so we can define and end one macro inside another
+..
+.
 .\"
 .\"    PIC
 .\"
@@ -1336,9 +1342,10 @@
 .ne \\$1u
 .nr g7 \\n(.u
 .ls 1
-.if \\n(?n \
+.ie \\n(?n \
 \{\
-.      de PS_nm_check && \" define macro to emit .nm at top diversion
+.      do nr PS_nm_cnt 0
+.      do de PS_nm_check && \" define macro to emit .nm at top diversion
 .      if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z
PS_nm_cnt=\\\\n[PS_nm_cnt]
 .      \" Multiple .PS/.PE in a keep.
 .      if `\\\\$2`init` \
@@ -1359,18 +1366,18 @@
 .\}
 .\}
 .el \!.PS_nm_check \\\\$1
-.&&
+.      &&
 .      mk _q           \" emit a single numbered line for PS picture
 .      rs
-\&\ 
+\&\ \" space
 .      br
 .      rt \\n(_qu
-.      PS_nm_check suspend init
+.      do PS_nm_check suspend init
 .\}
 ..
 .
 .de PE                 \" *** end picture
-.if \\n(?n .PS_nm_check resume
+.if \\n(?n .do PS_nm_check resume
 .ls
 .in
 .if \\n(g7 .fi


    _______________________________________________________

Reply to this item at:

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

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]