texlive[60519] Build/source/texk/web2c: [CWEB] Pre-release of version

commits+ascherer at tug.org commits+ascherer at tug.org
Thu Sep 16 13:13:15 CEST 2021


Revision: 60519
          http://tug.org/svn/texlive?view=revision&revision=60519
Author:   ascherer
Date:     2021-09-16 13:13:15 +0200 (Thu, 16 Sep 2021)
Log Message:
-----------
[CWEB] Pre-release of version 4.6.

This is a service update due to general demand:

* Option 'c' is OFF by default to avoid spurious entries in build.log.
* 'squash'/'reduce' have been straightened out for k=1,..,4.
* Code beautifications for 'make fullmanual'.
* Code cleanup for internal reasons.
* Cleanup in 'prod.w' (indentation et al.).
* New 'prod-cweave.w' (along 'prod-twill.w') for material from CWEBbin.
* Fixes for option '-o' (didn't work as advertised in border cases).
* New signature for the 'make_ministring' function in CTWILL.

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/ChangeLog
    trunk/Build/source/texk/web2c/Makefile.in
    trunk/Build/source/texk/web2c/am/cweb.am
    trunk/Build/source/texk/web2c/ctangleboot.cin
    trunk/Build/source/texk/web2c/cwebboot.cin
    trunk/Build/source/texk/web2c/cwebdir/ChangeLog
    trunk/Build/source/texk/web2c/cwebdir/comm-bs.ch
    trunk/Build/source/texk/web2c/cwebdir/comm-vms.ch
    trunk/Build/source/texk/web2c/cwebdir/comm-w2c.ch
    trunk/Build/source/texk/web2c/cwebdir/comm-w2c.h
    trunk/Build/source/texk/web2c/cwebdir/common.c
    trunk/Build/source/texk/web2c/cwebdir/common.h
    trunk/Build/source/texk/web2c/cwebdir/ctang-vms.ch
    trunk/Build/source/texk/web2c/cwebdir/ctangle.c
    trunk/Build/source/texk/web2c/cwebdir/ctangle.w
    trunk/Build/source/texk/web2c/cwebdir/ctwill-mini.ch
    trunk/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
    trunk/Build/source/texk/web2c/cwebdir/cweav-vms.ch
    trunk/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
    trunk/Build/source/texk/web2c/cwebdir/cweave.w
    trunk/Build/source/texk/web2c/cwebdir/cwebmac.tex
    trunk/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
    trunk/Build/source/texk/web2c/cwebdir/po/de/web2c-help.po
    trunk/Build/source/texk/web2c/cwebdir/po/web2c-help.pot
    trunk/Build/source/texk/web2c/cwebdir/prod-twill.w
    trunk/Build/source/texk/web2c/cwebdir/prod.w
    trunk/Build/source/texk/web2c/help.h
    trunk/Build/source/texk/web2c/man/ChangeLog
    trunk/Build/source/texk/web2c/man/ctwill.man
    trunk/Build/source/texk/web2c/man/cweb.man

Added Paths:
-----------
    trunk/Build/source/texk/web2c/cwebdir/prod-cweave.w

Modified: trunk/Build/source/texk/web2c/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/ChangeLog	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/ChangeLog	2021-09-16 11:13:15 UTC (rev 60519)
@@ -1,3 +1,11 @@
+2021-09-16  Andreas Scherer  <https://ascherer.github.io>
+
+	* Makefile.in,
+	* am/cweb.am,
+	* ctangleboot.cin,
+	* cwebboot.cin,
+	* help.h: CWEB 4.6 pre-release.
+
 2021-07-25  Karl Berry  <karl at freefriends.org>
 
 	* Makefile.am (proglib_sources): laboriously list all of lib/*.c

Modified: trunk/Build/source/texk/web2c/Makefile.in
===================================================================
--- trunk/Build/source/texk/web2c/Makefile.in	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/Makefile.in	2021-09-16 11:13:15 UTC (rev 60519)
@@ -21226,7 +21226,7 @@
 weave.log: weave$(EXEEXT)
 ctie.c: ctangle$(EXEEXT) ctiedir/ctie.w ctiedir/ctie-k.ch
 	$(ctangle_silent)CWEBINPUTS=$(srcdir)/ctiedir $(ctangle) ctie.w ctie-k.ch
-cweave.c: ctangle$(EXEEXT) cwebdir/comm-w2c.h cwebdir/cweave.w cwebdir/prod.w cwebdir/cweav-w2c.ch
+cweave.c: ctangle$(EXEEXT) cwebdir/comm-w2c.h cwebdir/cweave.w cwebdir/prod-cweave.w cwebdir/cweav-w2c.ch
 	$(ctangle_silent)CWEBINPUTS=$(srcdir)/cwebdir $(ctangle) cweave cweav-w2c
 ctwill.c: ctangle$(EXEEXT) cwebdir/comm-w2c.h cwebdir/cweave.w cwebdir/prod-twill.w cwebdir/ctwill-w2c.ch
 	$(ctangle_silent)CWEBINPUTS=$(srcdir)/cwebdir $(ctangle) cweave ctwill-w2c ctwill.c

Modified: trunk/Build/source/texk/web2c/am/cweb.am
===================================================================
--- trunk/Build/source/texk/web2c/am/cweb.am	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/am/cweb.am	2021-09-16 11:13:15 UTC (rev 60519)
@@ -15,7 +15,7 @@
 DISTCLEANFILES += ctie.c
 
 nodist_cweave_SOURCES = cweave.c cweb.c
-cweave.c: ctangle$(EXEEXT) cwebdir/comm-w2c.h cwebdir/cweave.w cwebdir/prod.w cwebdir/cweav-w2c.ch
+cweave.c: ctangle$(EXEEXT) cwebdir/comm-w2c.h cwebdir/cweave.w cwebdir/prod-cweave.w cwebdir/cweav-w2c.ch
 	$(ctangle_silent)CWEBINPUTS=$(srcdir)/cwebdir $(ctangle) cweave cweav-w2c
 DISTCLEANFILES += cweave.c
 

Modified: trunk/Build/source/texk/web2c/ctangleboot.cin
===================================================================
--- trunk/Build/source/texk/web2c/ctangleboot.cin	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/ctangleboot.cin	2021-09-16 11:13:15 UTC (rev 60519)
@@ -18,8 +18,8 @@
 #include <kpathsea/simpletypes.h>  
 #include <stddef.h>  
 #include <stdint.h>  
+#include <stdio.h>  
 #include <stdlib.h>  
-#include <stdio.h>  
 #include <string.h>  
 
 /*:4*/
@@ -1891,8 +1891,8 @@
 while(*loc!='@')loc++;
 if(loc++<=limit){
 char c= *loc++;
-if(ccode[(eight_bits)c]==new_section)break;
 switch(ccode[(eight_bits)c]){
+case new_section:return;
 case translit_code:/*102:*/
 #line 1516 "cwebdir/ctangle.w"
 

Modified: trunk/Build/source/texk/web2c/cwebboot.cin
===================================================================
--- trunk/Build/source/texk/web2c/cwebboot.cin	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebboot.cin	2021-09-16 11:13:15 UTC (rev 60519)
@@ -18,8 +18,8 @@
 #include <kpathsea/simpletypes.h>  
 #include <stddef.h>  
 #include <stdint.h>  
+#include <stdio.h>  
 #include <stdlib.h>  
-#include <stdio.h>  
 #include <string.h>  
 
 /*:3*//*89:*/
@@ -541,7 +541,7 @@
 #line 1139 "cwebdir/common.w"
 
 #line 454 "cwebdir/comm-w2c.ch"
-make_xrefs= check_for_change= true;
+make_xrefs= true;
 #line 1141 "cwebdir/common.w"
 
 /*:74*/

Modified: trunk/Build/source/texk/web2c/cwebdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ChangeLog	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/ChangeLog	2021-09-16 11:13:15 UTC (rev 60519)
@@ -1,3 +1,21 @@
+2021-09-16  Andreas Scherer  <https://ascherer.github.io>
+
+	* comm-{bs,vms,w2c,w32}.ch,
+	* common.c,
+	* common.h,
+	* ctang-vms.ch,
+	* ctangle.c,
+	* ctangle.w,
+	* ctwill-{mini,w2c}.ch,
+	* cweav-{vms,w2c}.ch,
+	* cweave.w,
+	* cwebmac.tex,
+	* cwebman-w2c.ch,
+	* po/de/web2c-help.po,
+	* po/web2c-help.pot,
+	* prod-{cweave,twill}.w,
+	* prod.w: CWEB 4.6 pre-release.
+
 2021-07-14  Andreas Scherer  <https://ascherer.github.io>
 
 	* Makefile,

Modified: trunk/Build/source/texk/web2c/cwebdir/comm-bs.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/comm-bs.ch	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/comm-bs.ch	2021-09-16 11:13:15 UTC (rev 60519)
@@ -183,7 +183,7 @@
 @x Section 63.
 static int section_name_cmp(
 char **pfirst, /* pointer to beginning of comparison string */
-int len, /* length of string */
+size_t len, /* length of string */
 name_pointer r) /* section name being compared */
 {
   char *first=*pfirst; /* beginning of comparison string */
@@ -192,7 +192,7 @@
 @y
 static int section_name_cmp(
 char huge** pfirst, /* pointer to beginning of comparison string */
-int len, /* length of string */
+size_t len, /* length of string */
 name_pointer r) /* section name being compared */
 {
   char huge* first=*pfirst; /* beginning of comparison string */

Modified: trunk/Build/source/texk/web2c/cwebdir/comm-vms.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/comm-vms.ch	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/comm-vms.ch	2021-09-16 11:13:15 UTC (rev 60519)
@@ -18,8 +18,8 @@
 #include <stdbool.h> /* definition of |@!bool|, |@!true| and |@!false| */
 #include <stddef.h> /* definition of |@!ptrdiff_t| */
 #include <stdint.h> /* definition of |@!uint8_t| and |@!uint16_t| */
+#include <stdio.h> /* definition of |@!printf| and friends */
 #include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
-#include <stdio.h> /* definition of |@!printf| and friends */
 #include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
 @y
 #include ctype /* definition of |@!isalpha|, |@!isdigit| and so on */
@@ -27,8 +27,8 @@
 #include stdbool /* definition of |@!bool|, |@!true| and |@!false| */
 #include stddef /* definition of |@!ptrdiff_t| */
 #include stdint /* definition of |@!uint8_t| and |@!uint16_t| */
+#include stdio /* definition of |@!printf| and friends */
 #include stdlib /* definition of |@!getenv| and |@!exit| */
-#include stdio /* definition of |@!printf| and friends */
 #include string /* definition of |@!strlen|, |@!strcmp| and so on */
 @z
 

Modified: trunk/Build/source/texk/web2c/cwebdir/comm-w2c.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/comm-w2c.ch	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/comm-w2c.ch	2021-09-16 11:13:15 UTC (rev 60519)
@@ -451,7 +451,7 @@
 @x
 show_banner=show_happiness=show_progress=make_xrefs=true;
 @y
-make_xrefs=check_for_change=true;
+make_xrefs=true;
 @z
 
 @x

Modified: trunk/Build/source/texk/web2c/cwebdir/comm-w2c.h
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/comm-w2c.h	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/comm-w2c.h	2021-09-16 11:13:15 UTC (rev 60519)
@@ -63,8 +63,8 @@
 #include <kpathsea/simpletypes.h> /* |@!boolean|, |@!true| and |@!false| */
 #include <stddef.h> /* definition of |@!ptrdiff_t| */
 #include <stdint.h> /* definition of |@!uint8_t| and |@!uint16_t| */
+#include <stdio.h> /* definition of |@!printf| and friends */
 #include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
-#include <stdio.h> /* definition of |@!printf| and friends */
 #include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
 
 @ Code related to the character set:

Modified: trunk/Build/source/texk/web2c/cwebdir/common.c
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/common.c	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/common.c	2021-09-16 11:13:15 UTC (rev 60519)
@@ -8,8 +8,8 @@
 #include <stdbool.h>  
 #include <stddef.h>  
 #include <stdint.h>  
+#include <stdio.h>  
 #include <stdlib.h>  
-#include <stdio.h>  
 #include <string.h>  
 
 /*:3*/

Modified: trunk/Build/source/texk/web2c/cwebdir/common.h
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/common.h	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/common.h	2021-09-16 11:13:15 UTC (rev 60519)
@@ -46,8 +46,8 @@
 #include <stdbool.h> /* definition of |@!bool|, |@!true| and |@!false| */
 #include <stddef.h> /* definition of |@!ptrdiff_t| */
 #include <stdint.h> /* definition of |@!uint8_t| and |@!uint16_t| */
+#include <stdio.h> /* definition of |@!printf| and friends */
 #include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
-#include <stdio.h> /* definition of |@!printf| and friends */
 #include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
 
 @ Code related to the character set:

Modified: trunk/Build/source/texk/web2c/cwebdir/ctang-vms.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ctang-vms.ch	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/ctang-vms.ch	2021-09-16 11:13:15 UTC (rev 60519)
@@ -20,8 +20,8 @@
 #include <stdbool.h> /* definition of |@!bool|, |@!true| and |@!false| */
 #include <stddef.h> /* definition of |@!ptrdiff_t| */
 #include <stdint.h> /* definition of |@!uint8_t| and |@!uint16_t| */
+#include <stdio.h> /* definition of |@!printf| and friends */
 #include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
-#include <stdio.h> /* definition of |@!printf| and friends */
 #include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
 @y
 #include ctype /* definition of |@!isalpha|, |@!isdigit| and so on */
@@ -29,7 +29,7 @@
 #include stdbool /* definition of |@!bool|, |@!true| and |@!false| */
 #include stddef /* definition of |@!ptrdiff_t| */
 #include stdint /* definition of |@!uint8_t| and |@!uint16_t| */
+#include stdio /* definition of |@!printf| and friends */
 #include stdlib /* definition of |@!getenv| and |@!exit| */
-#include stdio /* definition of |@!printf| and friends */
 #include string /* definition of |@!strlen|, |@!strcmp| and so on */
 @z

Modified: trunk/Build/source/texk/web2c/cwebdir/ctangle.c
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ctangle.c	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/ctangle.c	2021-09-16 11:13:15 UTC (rev 60519)
@@ -8,8 +8,8 @@
 #include <stdbool.h>  
 #include <stddef.h>  
 #include <stdint.h>  
+#include <stdio.h>  
 #include <stdlib.h>  
-#include <stdio.h>  
 #include <string.h>  
 
 /*:4*/
@@ -1583,8 +1583,8 @@
 while(*loc!='@')loc++;
 if(loc++<=limit){
 char c= *loc++;
-if(ccode[(eight_bits)c]==new_section)break;
 switch(ccode[(eight_bits)c]){
+case new_section:return;
 case translit_code:/*102:*/
 #line 1516 "ctangle.w"
 

Modified: trunk/Build/source/texk/web2c/cwebdir/ctangle.w
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ctangle.w	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/ctangle.w	2021-09-16 11:13:15 UTC (rev 60519)
@@ -1493,8 +1493,8 @@
     while (*loc!='@@') loc++;
     if (loc++<=limit) {
       char c=*loc++;
-      if (ccode[(eight_bits)c]==new_section) break;
       switch (ccode[(eight_bits)c]) {
+        case new_section: return;
         case translit_code: @<Read in transliteration of a character@>@; break;
         case format_code: case '@@': break;
         case control_text: if (c=='q' || c=='Q') {

Modified: trunk/Build/source/texk/web2c/cwebdir/ctwill-mini.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ctwill-mini.ch	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/ctwill-mini.ch	2021-09-16 11:13:15 UTC (rev 60519)
@@ -548,6 +548,15 @@
 @r @ Here is a list of the category codes that scraps can have.
 @z
 
+Section 108.
+
+ at x
+ at d print_cat(c) fputs(cat_name[c],stdout)
+ at y
+ at d print_cat(c) fputs(cat_name[c],stdout)
+ at -c@>
+ at z
+
 Section 109--110.
 
 @x
@@ -704,6 +713,7 @@
 {$\displaystyle\!\matrix{\strut\hbox{#1}\hfill\cr\hbox{#2}\hfill\cr
    \strut\hbox{#3}\hfill\cr}$}
 \yskip at -in@>
+@%@$dindent {CTWILL}110 =\T{\~226/}@>
 \prodno=27 \midcol=2.5in
 \def\theprodno{\number\prodno \global\advance\prodno by1\enspace}
 \def\dagit{\dag\theprodno}
@@ -717,9 +727,9 @@
 Section 120.
 
 @x l.75
-              \&{struct} \&{name\_info} $\{$\cr
+    & \&{struct} \&{name\_info} $\{$\cr
 @y
-              \&{struct} \&{name\_info} $\{$\cr
+    & \&{struct} \&{name\_info} $\{$\cr
 \endgroup
 
 @r @ Cont. at -z@>@-in@>@-x@>
@@ -749,9 +759,9 @@
 Section 121.
 
 @x l.164
-       $|force|\,E\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|$ & $\!\!$|else x=0;|\cr
+    & \&{else} $x=0;$\cr
 @y
-       $|force|\,E\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|$ & $\!\!$|else x=0;|\cr
+    & \&{else} $x=0;$\cr
 \endgroup
 
 @ Cont.
@@ -768,6 +778,7 @@
 {$\displaystyle\!\matrix{\strut\hbox{#1}\hfill\cr\hbox{#2}\hfill\cr
    \strut\hbox{#3}\hfill\cr}$}
 \yskip at -any@>@-z@>@-g@>@-a@>@-x@>@-y@>@-f@>
+@%@$dindent {CTWILL}110 =\T{\~226/}@>
 \prodno=61 \midcol=2.5in
 \def\theprodno{\number\prodno \global\advance\prodno by1\enspace}
 \def\dagit{\dag\theprodno}
@@ -906,15 +917,9 @@
 
 @x l.326
 \+& |alignas_like| |cast| & |attr| & |alignas(int)| \cr
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
+\vfill\break
 \parindent=0pt
+\everypar={\hangindent=2em}
 \dag{\bf Notes}
 @y
 \+& |alignas_like| |cast| & |attr| & |alignas(int)| \cr
@@ -1002,12 +1007,20 @@
 @-pp@>
 @z
 
+ at x
+example, `|squash(pp,3,exp,-2,3)|' is an abbreviation for `|big_app3(pp);
+reduce(pp,3,exp,-2,3)|'.
+ at y
+example, `|squash(pp,3,exp,-2,3)|' is an abbreviation for `|big_app3(pp)|'
+followed by `|reduce(pp,3,exp,-2,3)|'.
+ at z
+
 Section 133.
 
 @x
 The code below is an exact translation of the production rules into
 @y
- at r @ The code below is an exact translation of the production rules into
+@ The code below is an exact translation of the production rules into
 @-a@>
 @-c@>
 @-p@>
@@ -1223,9 +1236,21 @@
 @$make_underlined {CTWILL}141 \&{static} \&{void} (\,)@>
 @z
 
+ at x
+    return; /* this happens, for example, in |case found:| */
+ at y
+    return; /* this happens, for example, in \&{case} \\{found}: */
+ at z
+
 Section 144.
 
 @x
+    strcpy(ministring_buf,"label");
+ at y
+    strcpy(ministring_buf,"label");@/
+ at z
+
+ at x
 else if (cat1==attr) {
 @y
 else @/ if (cat1==attr) {
@@ -1242,11 +1267,11 @@
 Section 165.
 
 @x
-  else squash(pp,1,else_like,0,65);
+  else reduce(pp,0,else_like,0,65);
 }
 else if (cat1==attr) {
 @y
-  else squash(pp,1,else_like,0,65);
+  else reduce(pp,0,else_like,0,65);
 }
 @+ else @/ if (cat1==attr) {
 @z
@@ -1290,13 +1315,9 @@
 Section 198.
 
 @x
-static void squash(scrap_pointer,short,eight_bits,short,short);
-
-@ @c
+@ Now here's the |reduce| procedure used in our code for productions,
 @y
-static void squash(scrap_pointer,short,eight_bits,short,short);
-
- at r @ @c
+ at r @ Now here's the |reduce| procedure used in our code for productions,
 @z
 
 Section 203.
@@ -1466,12 +1487,6 @@
 Section 221.
 
 @x
-@ The |outer_parse| routine is to |C_parse| as |outer_xref|
- at y
- at r @ The |outer_parse| routine is to |C_parse| as |outer_xref|
- at z
-
- at x
 @d make_pb flags['e']
 @y
 @d make_pb flags['e']
@@ -1479,6 +1494,14 @@
 @$make_pb {CTWILL}221 =\\{flags}[\.{'e'}]@>
 @z
 
+Section 222.
+
+ at x
+@ @c
+ at y
+ at r @ @c
+ at z
+
 Section 225.
 
 @x
@@ -1519,12 +1542,6 @@
 Section 234--235.
 
 @x
-@ Here is \.{CWEAVE}'s major output handler.
- at y
- at r @ Here is \.{CWEAVE}'s major output handler.
- at z
-
- at x
     reswitch: switch(a) {
       case end_translation: return;
       case identifier: case res_word: @<Output an identifier@>@; break;
@@ -1994,12 +2011,13 @@
 Section 303.
 
 @x
-@ The trickiest part of \.{CTWILL} is the procedure |make_ministring(l)|,
+@ The trickiest part of \.{CTWILL} is the procedure |make_ministring(pp+l)|,
 @y
- at r @ The trickiest part of \.{CTWILL} is the procedure |make_ministring(l)|,
+ at r @ The trickiest part of \.{CTWILL} is the procedure |make_ministring(pp+l)|,
 @-a@>
 @-b@>
 @-c@>
+ at -l@>
 @-make_ministring@>
 @$make_ministring {CTWILL}303 \&{static} \&{void} (\,)@>
 @z
@@ -2007,9 +2025,9 @@
 Section 304.
 
 @x
-@ @<Predec...@>=@+static void make_ministring(int);
+@ @<Predec...@>=@+static void make_ministring(scrap_pointer);
 @y
-@ @<Predec...@>=@+static void make_ministring(int);
+@ @<Predec...@>=@+static void make_ministring(scrap_pointer);
 @-make_ministring@>
 @z
 

Modified: trunk/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch	2021-09-16 11:13:15 UTC (rev 60519)
@@ -473,7 +473,7 @@
 
 @<Start \TEX/...@>=
 out_ptr=out_buf+1; out_line=1; active_file=tex_file;
-*out_ptr='c'; tex_printf("\\input cwebma");
+tex_printf("\\input cwebma"); *out_ptr='c';
 @y
 @ In particular, the |finish_line| procedure is called near the very
 beginning of phase two. We initialize the output variables in a slightly
@@ -492,10 +492,11 @@
 @d proofing flags['P']
 
 @<Start \TEX/...@>=
-out_ptr=out_buf+1; out_line=1; active_file=tex_file; *out_ptr='c';
+out_ptr=out_buf+1; out_line=1; active_file=tex_file;
 tex_puts("\\input ");
 tex_printf(use_language);
 tex_puts(proofing?"ctproofma":"ctwima");
+*out_ptr='c';
 @z
 
 @x
@@ -676,7 +677,7 @@
 @y
 @<Cases for |exp|@>=
 if(cat1==lbrace || cat1==int_like || cat1==decl) {
-  make_underlined(pp); make_ministring(0); big_app1(pp);
+  make_underlined(pp); make_ministring(pp); big_app1(pp);
   if (indent_param_decl) big_app(dindent);
   reduce(pp,1,fn_decl,0,1);
 }
@@ -687,9 +688,8 @@
 @y
   make_underlined (pp);
   if (tok_loc>operator_found) {
-    name_pointer cn=((*tok_loc)%id_flag)+name_dir;
     strcpy(ministring_buf,"label");
-    new_meaning(cn);
+    new_meaning(((*tok_loc)%id_flag)+name_dir);
   }
   squash(pp,2,tag,-1,7);
 @z
@@ -710,7 +710,7 @@
   squash(pp,3,decl_head,-1,36);
 else if (cat1==cast) squash(pp,2,decl_head,-1,37);
 else if (cat1==lbrace || cat1==int_like || cat1==decl) {
-  big_app(dindent); big_app1(pp); reduce(pp,1,fn_decl,0,38);
+  big_app(dindent); squash(pp,1,fn_decl,0,38);
 }
 else if (cat1==semi) squash(pp,2,decl,-1,39);
 @y
@@ -723,8 +723,7 @@
   reduce(pp,2,decl_head,-1,34);
 }
 else if (cat1==exp && cat2!=lpar && cat2!=lbrack && cat2!=exp && cat2!=cast) {
-  make_underlined(pp+1);
-  make_ministring(1);
+  make_underlined(pp+1); make_ministring(pp+1);
   squash(pp,2,decl_head,-1,35);
 }
 else if ((cat1==binop||cat1==colon) && cat2==exp && (cat3==comma ||
@@ -732,8 +731,8 @@
   squash(pp,3,decl_head,-1,36);
 else if (cat1==cast) squash(pp,2,decl_head,-1,37);
 else if (cat1==lbrace || cat1==int_like || cat1==decl) {
-  if (indent_param_decl) big_app(dindent); big_app1(pp);
-  reduce(pp,1,fn_decl,0,38);
+  if (indent_param_decl) big_app(dindent);
+  squash(pp,1,fn_decl,0,38);
 }
 else if (cat1==semi) squash(pp,2,decl,-1,39);
 @z
@@ -760,8 +759,7 @@
 @x
     make_underlined(pp+1); make_reserved(pp+1);
 @y
-    make_underlined(pp+1); make_reserved(pp+1);
-    make_ministring(1);
+    make_underlined(pp+1); make_reserved(pp+1); make_ministring(pp+1);
 @z
 
 @x
@@ -795,6 +793,15 @@
 @z
 
 @x
+  big_app1_insert(pp, (cat1==function || cat1==decl) ? big_force :
+     force_lines ? force : break_space); reduce(pp,2,cat1,-1,76);
+ at y
+  big_app1_insert(pp, (cat1==function || cat1==decl) ? @|
+     ( order_decl_stmt ? big_force : force ) : @|
+     ( force_lines ? force : break_space ) ); reduce(pp,2,cat1,-1,76);
+ at z
+
+ at x
 if (cat1==define_like) make_underlined(pp+2);
 @y
 if (cat1==define_like) { /* \#\&{define} is analogous to \&{extern} */
@@ -807,11 +814,11 @@
 @z
 
 @x
-if (cat1==prelangle) squash(pp+1,1,langle,1,100);
-else squash(pp,1,exp,-2,101);
+if (cat1==prelangle) reduce(pp+1,0,langle,1,100);
+else reduce(pp,0,exp,-2,101);
 @y
-if (cat1==prelangle) squash(pp+1,1,langle,1,121);
-else squash(pp,1,exp,-2,122);
+if (cat1==prelangle) reduce(pp+1,0,langle,1,121);
+else reduce(pp,0,exp,-2,122);
 @z
 
 @x
@@ -823,7 +830,7 @@
 @x
 @ @<Cases for |typedef_like|@>=
 if ((cat1==int_like || cat1==cast) && (cat2==comma || cat2==semi))
-  squash(pp+1,1,exp,-1,115);
+  reduce(pp+1,0,exp,-1,115);
 else if (cat1==int_like) {
   big_app1_insert(pp,' '); reduce(pp,2,typedef_like,0,116);
 }
@@ -848,15 +855,14 @@
 @<Cases for |typedef_like|@>=
 if (cat1==decl_head) {
   if ((cat2==exp&&cat3!=lpar&&cat3!=exp)||cat2==int_like) {
-    make_underlined(pp+2); make_reserved(pp+2);
-    make_ministring(2);
-    big_app2(pp+1); reduce(pp+1,2,decl_head,0,200);
+    make_underlined(pp+2); make_reserved(pp+2); make_ministring(pp+2);
+    squash(pp+1,2,decl_head,0,200);
   }
   else if (cat2==semi) {
     big_app1(pp); big_app(' '); big_app2(pp+1); reduce(pp,3,decl,-1,201);
   }
 } else if (cat1==int_like && cat2==raw_int &&
-    (cat3==semi || cat3==comma)) squash(pp+2,1,exp,1,202);
+    (cat3==semi || cat3==comma)) reduce(pp+2,0,exp,1,202);
 @z
 
 @x
@@ -903,9 +909,9 @@
 @z
 
 @x
-        else err_print("! Double @@ should be used in strings");
+      else err_print("! Double @@ should be used in strings");
 @y
-        else err_print(_("! Double @@ should be used in strings"));
+      else err_print(_("! Double @@ should be used in strings"));
 @z
 
 @x
@@ -1664,38 +1670,35 @@
 @ @<Predec...@>=@+static boolean app_supp(text_pointer);
 
 @q Section 142->284. @>
-@ The trickiest part of \.{CTWILL} is the procedure |make_ministring(l)|,
-which tries to figure out a symbolic form of definition after
-|make_underlined(pp+l)| has been called. We rely heavily on the
-existing productions, which force the translated texts to have a
+@ The trickiest part of \.{CTWILL} is the procedure |make_ministring(pp+l)|,
+with offset $l\in\{0,1,2\}$, which tries to figure out a symbolic form of
+definition after |make_underlined(pp+l)| has been called. We rely heavily
+on the existing productions, which force the translated texts to have a
 structure that's decodable even though the underlying |cat| and |mathness|
 codes have disappeared.
 
 @c static void
-make_ministring(
-  int l) /* 0, 1, or 2 */
+make_ministring(scrap_pointer p)
 {
-  name_pointer cn;
   if (tok_loc<=operator_found) return;
-  cn=((*tok_loc)%id_flag)+name_dir;
   @<Append the type of the declaree; |return| if it begins with \&{extern}@>@;
-  null_scrap.mathness=(((pp+l)->mathness)%4)*5; big_app1(&null_scrap);
+  null_scrap.mathness=((p->mathness)%4)*5; big_app1(&null_scrap);
     /* now we're ready for the mathness that follows (I think);
        (without the mod 4 times 5, comments posed a problem,
        namely in cases like |int a(b,c)| followed by comment) */
-  ident_seen=false;@+app_supp((pp+l)->trans);
+  ident_seen=false;@+app_supp(p->trans);
   null_scrap.mathness=10; big_app1(&null_scrap);
    /* now |cur_mathness==no_math| */
   ms_mode=true; ministring_ptr=ministring_buf;
-  if (l==2) *ministring_ptr++='=';
+  if (p==pp+2) *ministring_ptr++='=';
   make_output(); /* translate the current text into a ministring */
   tok_ptr=*(--text_ptr); /* delete that text */
-  new_meaning(cn);
+  new_meaning(((*tok_loc)%id_flag)+name_dir);
   cur_mathness=maybe_math; /* restore it */
 }
 
 @q Section 285. @>
-@ @<Predec...@>=@+static void make_ministring(int);
+@ @<Predec...@>=@+static void make_ministring(scrap_pointer);
 
 @q Section 43->286. @>
 @ @<Private...@>=
@@ -1712,15 +1715,15 @@
 current meaning in other sections.
 
 @<Append the type of the declaree; |return| if it begins with \&{extern}@>=
-if (l==0) { app(int_loc+res_flag); app(' '); cur_mathness=no_math; }
+if (p==pp) { app(int_loc+res_flag); app(' '); cur_mathness=no_math; }
 else {
-  text_pointer q=(pp+l-1)->trans, r;
+  text_pointer q=(p-1)->trans, r;
   token t;
   int ast_count=0; /* asterisks preceding the expression */
   boolean non_ast_seen=false; /* have we seen a non-asterisk? */
   while (true) {
     if (*(q+1)==*q+1) {
-      r=q;@+break; /* e.g. \&{struct}; we're doing production 45 or 46 */
+      r=q;@+break; /* e.g., \&{struct}; we're doing production 45 or 46 */
     }
     if (**q<tok_flag) confusion(_("find type"));
     r=**q-tok_flag+tok_start;

Modified: trunk/Build/source/texk/web2c/cwebdir/cweav-vms.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/cweav-vms.ch	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/cweav-vms.ch	2021-09-16 11:13:15 UTC (rev 60519)
@@ -23,8 +23,8 @@
 #include <stdbool.h> /* definition of |@!bool|, |@!true| and |@!false| */
 #include <stddef.h> /* definition of |@!ptrdiff_t| */
 #include <stdint.h> /* definition of |@!uint8_t| and |@!uint16_t| */
+#include <stdio.h> /* definition of |@!printf| and friends */
 #include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
-#include <stdio.h> /* definition of |@!printf| and friends */
 #include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
 @y
 #include ctype /* definition of |@!isalpha|, |@!isdigit| and so on */
@@ -32,7 +32,7 @@
 #include stdbool /* definition of |@!bool|, |@!true| and |@!false| */
 #include stddef /* definition of |@!ptrdiff_t| */
 #include stdint /* definition of |@!uint8_t| and |@!uint16_t| */
+#include stdio /* definition of |@!printf| and friends */
 #include stdlib /* definition of |@!getenv| and |@!exit| */
-#include stdio /* definition of |@!printf| and friends */
 #include string /* definition of |@!strlen|, |@!strcmp| and so on */
 @z

Modified: trunk/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/cweav-w2c.ch	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/cweav-w2c.ch	2021-09-16 11:13:15 UTC (rev 60519)
@@ -199,7 +199,7 @@
 
 @<Start \TEX/...@>=
 out_ptr=out_buf+1; out_line=1; active_file=tex_file;
-*out_ptr='c'; tex_printf("\\input cwebma");
+tex_printf("\\input cwebma"); *out_ptr='c';
 @y
 @ In particular, the |finish_line| procedure is called near the very
 beginning of phase two. We initialize the output variables in a slightly
@@ -213,10 +213,11 @@
 `\.{\\input cwebmac}'.
 
 @<Start \TEX/...@>=
-out_ptr=out_buf+1; out_line=1; active_file=tex_file; *out_ptr='c';
+out_ptr=out_buf+1; out_line=1; active_file=tex_file;
 tex_puts("\\input ");
 tex_printf(use_language);
 tex_puts("cwebma");
+*out_ptr='c';
 @z
 
 @x
@@ -268,6 +269,12 @@
 @z
 
 @x
+ at i prod.w
+ at y
+ at i prod-cweave.w
+ at z
+
+ at x
 @d inner_tok_flag (5*id_flag) /* signifies a token list in `\pb' */
 
 @c
@@ -329,7 +336,7 @@
   squash(pp,3,decl_head,-1,36);
 else if (cat1==cast) squash(pp,2,decl_head,-1,37);
 else if (cat1==lbrace || cat1==int_like || cat1==decl) {
-  big_app(dindent); big_app1(pp); reduce(pp,1,fn_decl,0,38);
+  big_app(dindent); squash(pp,1,fn_decl,0,38);
 }
 else if (cat1==semi) squash(pp,2,decl,-1,39);
 @y
@@ -349,8 +356,8 @@
   squash(pp,3,decl_head,-1,36);
 else if (cat1==cast) squash(pp,2,decl_head,-1,37);
 else if (cat1==lbrace || cat1==int_like || cat1==decl) {
-  if (indent_param_decl) big_app(dindent); big_app1(pp);
-  reduce(pp,1,fn_decl,0,38);
+  if (indent_param_decl) big_app(dindent);
+  squash(pp,1,fn_decl,0,38);
 }
 else if (cat1==semi) squash(pp,2,decl,-1,39);
 @z
@@ -405,6 +412,15 @@
 @z
 
 @x
+  big_app1_insert(pp, (cat1==function || cat1==decl) ? big_force :
+     force_lines ? force : break_space); reduce(pp,2,cat1,-1,76);
+ at y
+  big_app1_insert(pp, (cat1==function || cat1==decl) ? @|
+     ( order_decl_stmt ? big_force : force ) : @|
+     ( force_lines ? force : break_space ) ); reduce(pp,2,cat1,-1,76);
+ at z
+
+ at x
     overflow("token");
 @y
     overflow(_("token"));
@@ -441,9 +457,9 @@
 @z
 
 @x
-        else err_print("! Double @@ should be used in strings");
+      else err_print("! Double @@ should be used in strings");
 @y
-        else err_print(_("! Double @@ should be used in strings"));
+      else err_print(_("! Double @@ should be used in strings"));
 @z
 
 @x

Modified: trunk/Build/source/texk/web2c/cwebdir/cweave.w
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/cweave.w	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/cweave.w	2021-09-16 11:13:15 UTC (rev 60519)
@@ -937,7 +937,7 @@
 whether there is more work to do.
 
 @<Get control code and possible section name@>=
-switch(ccode[(eight_bits)(c=*loc++)]) {
+switch(ccode[c=*loc++]) {
   case translit_code: err_print("! Use @@l in limbo only"); continue;
 @.Use @@l in limbo...@>
   case underline: xref_switch=def_flag; continue;
@@ -948,7 +948,7 @@
   case ord: @<Get a string@>@;
   case xref_roman: case xref_wildcard: case xref_typewriter: case noop:
   case TeX_string: skip_restricted(); /* fall through */
-  default: return ccode[(eight_bits)c];
+  default: return ccode[c];
 }
 
 @ The occurrence of a section name sets |xref_switch| to zero,
@@ -1002,7 +1002,7 @@
   if (c=='>') {
     loc+=2; break;
   }
-  if (ccode[(eight_bits)c]==new_section) {
+  if (ccode[c]==new_section) {
     err_print("! Section name didn't end"); break;
 @.Section name didn't end@>
   }
@@ -1126,7 +1126,7 @@
 {
   while (next_control<format_code || next_control==spec_ctrl) {
     if (next_control>=identifier && next_control<=xref_typewriter) {
-      if (next_control>identifier) @<Replace |"@@@@"| by |"@@"|@>@;
+      if (next_control>identifier) @<Replace `\.{@@@@}' by `\.{@@}'@>@;
       new_xref(id_lookup(id_first,id_loc,next_control-identifier));
     }
     if (next_control==section_name) {
@@ -1179,7 +1179,7 @@
     case noop: case section_name:
       loc-=2; next_control=get_next(); /* scan to \.{@@>} */
       if (next_control>=xref_roman && next_control<=xref_typewriter) {
-        @<Replace |"@@@@"| by |"@@"|@>@;
+        @<Replace `\.{@@@@}' by `\.{@@}'@>@;
         new_xref(id_lookup(id_first,id_loc,next_control-identifier));
       }
       break;
@@ -1187,7 +1187,7 @@
   if (next_control>=format_code) break;
 }
 
-@ @<Replace |"@@@@"| by |"@@"| @>=
+@ @<Replace `\.{@@@@}' by `\.{@@}'@>=
 {
   char *src=id_first,*dst=id_first;
   while(src<id_loc){
@@ -1410,7 +1410,7 @@
 
 @<Start \TEX/...@>=
 out_ptr=out_buf+1; out_line=1; active_file=tex_file;
-*out_ptr='c'; tex_printf("\\input cwebma");
+tex_printf("\\input cwebma"); *out_ptr='c';
 
 @ When we wish to append one character |c| to the output buffer, we write
 `|out(c)|'; this will cause the buffer to be emptied if it was already
@@ -1535,15 +1535,13 @@
 static void
 copy_limbo(void)
 {
-  char c;
   while (true) {
     if (loc>limit && (finish_line(), get_line()==false)) return;
     *(limit+1)='@@';
     while (*loc!='@@') out(*(loc++));
     if (loc++<=limit) {
-      c=*loc++;
-      if (ccode[(eight_bits)c]==new_section) break;
-      switch (ccode[(eight_bits)c]) {
+      switch (ccode[(eight_bits)*loc++]) {
+        case new_section: return;
         case translit_code: out_str("\\ATL"); break;
 @.\\ATL@>
         case '@@': out('@@'); break;
@@ -1766,7 +1764,7 @@
 @d attr_head 69 /* denotes beginning of attribute */
 
 @<Private...@>=
-static char cat_name[256][12];
+static char cat_name[256][12]; /* |12==strlen("struct_head")+1| */
 
 @ @<Set in...@>=
 {int c; for (c=0;c<256;c++) strcpy(cat_name[c],"UNKNOWN");}
@@ -1839,7 +1837,7 @@
 
 @ This code allows \.{CWEAVE} to display its parsing steps.
 
- at d print_cat(c) fputs(cat_name[(eight_bits)(c)],stdout)
+ at d print_cat(c) fputs(cat_name[c],stdout)
 
 @ The token lists for translated \TEX/ output contain some special control
 symbols as well as ordinary characters. These control symbols are
@@ -2126,9 +2124,9 @@
 \.{@@(@q)@>}\thinspace section name\thinspace\.{@@>}&|section_scrap|:
  \.{\\X}$n$\.{:\\.\{}section name with special characters
       quoted\.{\ \}\\X}&maybe\cr
-\.{/*}comment\.{*/}&|insert|: |cancel|
+\.{/*}\thinspace comment\thinspace\.{*/}&|insert|: |cancel|
       \.{\\C\{}translated comment\.\} |force|&no\cr
-\.{//}comment&|insert|: |cancel|
+\.{//}\thinspace comment&|insert|: |cancel|
       \.{\\SHC\{}translated comment\.\} |force|&no\cr
 }
 
@@ -2302,15 +2300,15 @@
 Before calling |reduce|, the program should have appended the tokens of
 the new translation to the |tok_mem| array. We commonly want to append
 copies of several existing translations, and macros are defined to
-simplify these common cases. For example, \\{app2}|(pp)| will append the
+simplify these common cases. For example, |big_app2(pp)| will append the
 translations of two consecutive scraps, |pp->trans| and |(pp+1)->trans|, to
 the current token list. If the entire new translation is formed in this
 way, we write `|squash(j,k,c,d,n)|' instead of `|reduce(j,k,c,d,n)|'. For
-example, `|squash(pp,3,exp,-2,3)|' is an abbreviation for `\\{app3}|(pp);
+example, `|squash(pp,3,exp,-2,3)|' is an abbreviation for `|big_app3(pp);
 reduce(pp,3,exp,-2,3)|'.
 
 A couple more words of explanation:
-Both |big_app| and |app| append a token (while |big_app1| to |big_app3|
+Both |big_app| and |app| append a token (while |big_app1| to |big_app4|
 append the specified number of scrap translations) to the current token list.
 The difference between |big_app| and |app| is simply that |big_app|
 checks whether there can be a conflict between math and non-math
@@ -2323,10 +2321,10 @@
 a fixed |mathness| (as in the original \.{WEAVE}) would multiply the
 number of necessary production rules.
 
-The low two bits (i.e. |mathness % 4|) control the left boundary.
+The low two bits (i.e., |mathness % 4|) control the left boundary.
 (We need two bits because we allow cases |yes_math|, |no_math| and
 |maybe_math|, which can go either way.)
-The next two bits (i.e. |mathness / 4|) control the right boundary.
+The next two bits (i.e., |mathness / 4|) control the right boundary.
 If we combine two scraps and the right boundary of the first has
 a different mathness from the left boundary of the second, we
 insert a \.{\$} in between.  Similarly, if at printing time some
@@ -2344,9 +2342,9 @@
 @d maybe_math 0 /* works in either horizontal or math mode */
 @d big_app2(a) big_app1(a);@+big_app1(a+1)
 @d big_app3(a) big_app2(a);@+big_app1(a+2)
+ at d big_app4(a) big_app3(a);@+big_app1(a+3)
 @d big_app1_insert(p,c) big_app1(p);@+big_app(c);@+big_app1(p+1)
 @d app(a) *(tok_ptr++)=(token)(a)
- at d app1(a) *(tok_ptr++)=(token)(tok_flag+(int)((a)->trans-tok_start))
 
 @<Private...@>=
 static int cur_mathness, init_mathness;
@@ -2427,8 +2425,8 @@
 if (cat1==end_arg && lhs_not_simple)
   if (pp->cat==begin_arg) squash(pp,2,exp,-2,124);
   else squash(pp,2,end_arg,-1,125);
-else if (pp->cat==rbrack) squash(pp,1,rpar,-3,130);
-else if (pp->cat==using_like) squash(pp,1,int_like,-3,140);
+else if (pp->cat==rbrack) reduce(pp,0,rpar,-3,130);
+else if (pp->cat==using_like) reduce(pp,0,int_like,-3,140);
 else if (cat1==insert) squash(pp,2,pp->cat,-2,0);
 else if (cat2==insert) squash(pp+1,2,(pp+1)->cat,-1,0);
 else if (cat3==insert) squash(pp+2,2,(pp+2)->cat,0,0);
@@ -2637,8 +2635,8 @@
 
 @ Now comes the code that tries to match each production starting
 with a particular type of scrap. Whenever a match is discovered,
-the |squash| or |reduce| macro will cause the appropriate action
-to be performed, followed by |goto found|.
+the |squash| or |reduce| function will cause the appropriate action
+to be performed.
 
 @<Cases for |exp|@>=
 if (cat1==lbrace || cat1==int_like || cat1==decl) {
@@ -2652,13 +2650,13 @@
   big_app2(pp);
   app(opt); app('9'); big_app1(pp+2); reduce(pp,3,exp,-2,4);
 }
-else if (cat1==lpar && cat2==rpar && cat3==colon) squash(pp+3,1,base,0,5);
-else if (cat1==cast && cat2==colon) squash(pp+2,1,base,0,5);
+else if (cat1==lpar && cat2==rpar && cat3==colon) reduce(pp+3,0,base,0,5);
+else if (cat1==cast && cat2==colon) reduce(pp+2,0,base,0,5);
 else if (cat1==semi) squash(pp,2,stmt,-1,6);
 else if (cat1==colon) {
   make_underlined (pp); squash(pp,2,tag,-1,7);
 }
-else if (cat1==rbrace) squash(pp,1,stmt,-1,8);
+else if (cat1==rbrace) reduce(pp,0,stmt,-1,8);
 else if (cat1==lpar && cat2==rpar && (cat3==const_like || cat3==case_like)) {
   big_app1_insert(pp+2,' '); reduce(pp+2,2,rpar,0,9);
 }
@@ -2714,7 +2712,7 @@
 else if (cat1==exp) {
   big_app1_insert(pp,' '); reduce(pp,2,exp,-2,21);
 }
-else if (cat1==semi) squash(pp,1,exp,-2,22);
+else if (cat1==semi) reduce(pp,0,exp,-2,22);
 
 @ @<Cases for |sizeof_like|@>=
 if (cat1==cast) squash(pp,2,exp,-2,23);
@@ -2731,11 +2729,11 @@
 else if (cat1==exp || cat1==ubinop || cat1==colon) {
   big_app1(pp); big_app(' '); reduce(pp,1,decl_head,-1,27);
 }
-else if (cat1==semi || cat1==binop) squash(pp,1,decl_head,0,28);
+else if (cat1==semi || cat1==binop) reduce(pp,0,decl_head,0,28);
 
 @ @<Cases for |public_like|@>=
 if (cat1==colon) squash(pp,2,tag,-1,29);
-else squash(pp,1,int_like,-2,30);
+else reduce(pp,0,int_like,-2,30);
 
 @ @<Cases for |colcol|@>=
 if (cat1==exp||cat1==int_like) {
@@ -2758,7 +2756,7 @@
   squash(pp,3,decl_head,-1,36);
 else if (cat1==cast) squash(pp,2,decl_head,-1,37);
 else if (cat1==lbrace || cat1==int_like || cat1==decl) {
-  big_app(dindent); big_app1(pp); reduce(pp,1,fn_decl,0,38);
+  big_app(dindent); squash(pp,1,fn_decl,0,38);
 }
 else if (cat1==semi) squash(pp,2,decl,-1,39);
 else if (cat1==attr) {
@@ -2798,7 +2796,7 @@
       big_app(' '); big_app1(pp+2);reduce(pp,3,struct_head,0,46);
     }
   }
-  else if (cat2==colon) squash(pp+2,1,base,2,47);
+  else if (cat2==colon) reduce(pp+2,0,base,2,47);
   else if (cat2!=base) {
     big_app1_insert(pp,' '); reduce(pp,2,int_like,-2,48);
   }
@@ -2861,8 +2859,8 @@
 }
 
 @ @<Cases for |else_like|@>=
-if (cat1==colon) squash(pp+1,1,base,1,58);
-else if (cat1==lbrace) squash(pp,1,else_head,0,59);
+if (cat1==colon) reduce(pp+1,0,base,1,58);
+else if (cat1==lbrace) reduce(pp,0,else_head,0,59);
 else if (cat1==stmt) {
   big_app(force); big_app1(pp); big_app(indent); big_app(break_space);
   big_app1(pp+1); big_app(outdent); big_app(force);
@@ -2877,7 +2875,7 @@
 }
 
 @ @<Cases for |if_clause|@>=
-if (cat1==lbrace) squash(pp,1,if_head,0,62);
+if (cat1==lbrace) reduce(pp,0,if_head,0,62);
 else if (cat1==stmt) {
   if (cat2==else_like) {
     big_app(force); big_app1(pp); big_app(indent); big_app(break_space);
@@ -2887,7 +2885,7 @@
     }
     else reduce(pp,3,else_like,0,64);
   }
-  else squash(pp,1,else_like,0,65);
+  else reduce(pp,0,else_like,0,65);
 }
 else if (cat1==attr) {
   big_app1_insert(pp,' '); reduce(pp,2,if_head,0,146);
@@ -2903,7 +2901,7 @@
     }
     else reduce(pp,3,else_like,0,67);
   }
-  else squash(pp,1,else_head,0,68);
+  else reduce(pp,0,else_head,0,68);
 }
 
 @ @<Cases for |do_like|@>=
@@ -2933,7 +2931,7 @@
   big_app(force); big_app(backup); big_app1_insert(pp,break_space);
   reduce(pp,2,cat1,-1,75);
 }
-else if (cat1==rbrace) squash(pp,1,decl,-1,156);
+else if (cat1==rbrace) reduce(pp,0,decl,-1,156);
 
 @ The user can decide at run-time whether short statements should be
 grouped together on the same line.
@@ -2950,7 +2948,7 @@
 }
 
 @ @<Cases for |semi|@>=
-big_app(' '); big_app1(pp); reduce(pp,1,stmt,-1,77);
+big_app(' '); squash(pp,1,stmt,-1,77);
 
 @ @<Cases for |lproc|@>=
 if (cat1==define_like) make_underlined(pp+2);
@@ -2957,13 +2955,13 @@
 if (cat1==else_like || cat1==if_like || cat1==define_like)
   squash(pp,2,lproc,0,78);
 else if (cat1==rproc) {
-  app(inserted); big_app2(pp); reduce(pp,2,insert,-1,79);
+  app(inserted); squash(pp,2,insert,-1,79);
 } else if (cat1==exp || cat1==function) {
   if (cat2==rproc) {
     app(inserted); big_app1(pp); big_app(' '); big_app2(pp+1);
     reduce(pp,3,insert,-1,80);
   }
-  else if (cat2==exp && cat3==rproc && cat1==exp) {
+  else if (cat1==exp && cat2==exp && cat3==rproc) {
     app(inserted); big_app1_insert(pp,' '); app_str("\\5");
 @.\\5@>
     big_app2(pp+2); reduce(pp,4,insert,-1,80);
@@ -2974,7 +2972,7 @@
 if (cat1==semi) {
   big_app2(pp); big_app(force); reduce(pp,2,stmt,-2,81);
 }
-else squash(pp,1,exp,-2,82);
+else reduce(pp,0,exp,-2,82);
 
 @ @<Cases for |insert|@>=
 if (cat1)
@@ -3013,7 +3011,7 @@
   }
 
 @ @<Cases for |template_like|@>=
-if (cat1==exp && cat2==prelangle) squash(pp+2,1,langle,2,89);
+if (cat1==exp && cat2==prelangle) reduce(pp+2,0,langle,2,89);
 else if (cat1==exp || cat1==raw_int) {
   big_app1_insert(pp,' '); reduce(pp,2,cat1,-2,90);
 }
@@ -3020,7 +3018,7 @@
 else if (cat1==cast && cat2==struct_like) {
   big_app1_insert(pp,' '); reduce(pp,2,struct_like,0,155);
 }
-else squash(pp,1,raw_int,0,91);
+else reduce(pp,0,raw_int,0,91);
 
 @ @<Cases for |new_like|@>=
 if (cat1==lpar && cat2==exp && cat3==rpar) squash(pp,4,new_like,0,92);
@@ -3027,7 +3025,7 @@
 else if (cat1==cast) {
   big_app1_insert(pp,' '); reduce(pp,2,exp,-2,93);
 }
-else if (cat1!=lpar) squash(pp,1,new_exp,0,94);
+else if (cat1!=lpar) reduce(pp,0,new_exp,0,94);
 
 @ @<Cases for |new_exp|@>=
 if (cat1==int_like || cat1==const_like) {
@@ -3040,16 +3038,16 @@
 else if (cat1==raw_ubin) {
   big_app1_insert(pp,'{'); big_app('}'); reduce(pp,2,new_exp,0,97);
 }
-else if (cat1==lpar) squash(pp,1,exp,-2,98);
+else if (cat1==lpar) reduce(pp,0,exp,-2,98);
 else if (cat1==exp) {
   big_app1(pp); big_app(' '); reduce(pp,1,exp,-2,98);
 }
 else if (cat1!=raw_int && cat1!=struct_like && cat1!=colcol)
-  squash(pp,1,exp,-2,99);
+  reduce(pp,0,exp,-2,99);
 
 @ @<Cases for |ftemplate|@>=
-if (cat1==prelangle) squash(pp+1,1,langle,1,100);
-else squash(pp,1,exp,-2,101);
+if (cat1==prelangle) reduce(pp+1,0,langle,1,100);
+else reduce(pp,0,exp,-2,101);
 
 @ @<Cases for |for_like|@>=
 if (cat1==exp) {
@@ -3061,18 +3059,18 @@
   big_app2(pp); app_str("\\ "); reduce(pp,2,raw_ubin,0,103);
 @.\\\ @>
 }
-else squash(pp,1,ubinop,-2,104);
+else reduce(pp,0,ubinop,-2,104);
 
 @ @<Cases for |const_like|@>=
-squash(pp,1,int_like,-2,105);
+reduce(pp,0,int_like,-2,105);
 
 @ @<Cases for |raw_int|@>=
-if (cat1==prelangle) squash(pp+1,1,langle,1,106);
+if (cat1==prelangle) reduce(pp+1,0,langle,1,106);
 else if (cat1==colcol) squash(pp,2,colcol,-1,107);
 else if (cat1==cast) squash(pp,2,raw_int,0,108);
-else if (cat1==lpar) squash(pp,1,exp,-2,109);
-else if (cat1==lbrack) squash(pp,1,exp,-2,144);
-else if (cat1!=langle) squash(pp,1,int_like,-3,110);
+else if (cat1==lpar) reduce(pp,0,exp,-2,109);
+else if (cat1==lbrack) reduce(pp,0,exp,-2,144);
+else if (cat1!=langle) reduce(pp,0,int_like,-3,110);
 
 @ @<Cases for |operator_like|@>=
 if (cat1==binop || cat1==unop || cat1==ubinop) {
@@ -3083,11 +3081,11 @@
   big_app1_insert(pp,' '); reduce(pp,2,exp,-2,112);
 }
 else if (cat1==comma) squash(pp,2,exp,-2,113);
-else if (cat1!=raw_ubin) squash(pp,1,new_exp,0,114);
+else if (cat1!=raw_ubin) reduce(pp,0,new_exp,0,114);
 
 @ @<Cases for |typedef_like|@>=
 if ((cat1==int_like || cat1==cast) && (cat2==comma || cat2==semi))
-  squash(pp+1,1,exp,-1,115);
+  reduce(pp+1,0,exp,-1,115);
 else if (cat1==int_like) {
   big_app1_insert(pp,' '); reduce(pp,2,typedef_like,0,116);
 }
@@ -3128,7 +3126,7 @@
 if (cat1==lbrack)
   if (cat2==rbrack && cat3==rbrack) squash(pp,4,exp,-2,147);
   else squash(pp,2,attr_head,-1,128);
-else squash(pp,1,lpar,-1,129);
+else reduce(pp,0,lpar,-1,129);
 
 @ @<Cases for |attr_head|@>=
 if (cat1==rbrack && cat2==rbrack) squash(pp,3,attr,-1,131);
@@ -3161,12 +3159,10 @@
 }
 
 @ @<Cases for |default_like|@>=
-if (cat1==colon) squash(pp,1,case_like,-3,149);
-else squash(pp,1,exp,-2,150);
+if (cat1==colon) reduce(pp,0,case_like,-3,149);
+else reduce(pp,0,exp,-2,150);
 
-@ Now here's the |reduce| procedure used in our code for productions.
-
-The `|freeze_text|' macro is used to give official status to a token list.
+@ The `|freeze_text|' macro is used to give official status to a token list.
 Before saying |freeze_text|, items are appended to the current token list,
 and we know that the eventual number of this token list will be the current
 value of |text_ptr|. But no list of that number really exists as yet,
@@ -3184,7 +3180,10 @@
 static void reduce(scrap_pointer,short,eight_bits,short,short);@/
 static void squash(scrap_pointer,short,eight_bits,short,short);
 
-@ @c
+@ Now here's the |reduce| procedure used in our code for productions,
+which takes advantage of the simplification that occurs when |k==0|.
+
+ at c
 static void
 reduce(
 scrap_pointer j, short k,
@@ -3192,9 +3191,12 @@
 short d, short n)
 {
   scrap_pointer i, i1; /* pointers into scrap memory */
-  j->cat=c; j->trans=text_ptr;
-  j->mathness=4*cur_mathness+init_mathness;
-  freeze_text;
+  j->cat=c;
+  if (k>0) {
+    j->trans=text_ptr;
+    j->mathness=4*cur_mathness+init_mathness;
+    freeze_text;
+  }
   if (k>1) {
     for (i=j+k, i1=j+1; i<=lo_ptr; i++, i1++) {
       i1->cat=i->cat; i1->trans=i->trans;
@@ -3207,8 +3209,8 @@
   pp--; /* we next say |pp++| */
 }
 
-@ Here's the |squash| procedure, which
-takes advantage of the simplification that occurs when |k==1|.
+@ And here's the |squash| procedure, which combines |big_app|${}_k$ and
+|reduce| for matching numbers~|k|.
 
 @c
 static void
@@ -3217,14 +3219,13 @@
 eight_bits c,
 short d, short n)
 {
-  scrap_pointer i; /* pointers into scrap memory */
-  if (k==1) {
-    j->cat=c; pp=(pp+d<scrap_base? scrap_base: pp+d);
-    @<Print a snapshot...@>@;
-    pp--; /* we next say |pp++| */
-    return;
+  switch (k) {
+  case 1: big_app1(j); break;
+  case 2: big_app2(j); break;
+  case 3: big_app3(j); break;
+  case 4: big_app4(j); break;
+  default: confusion("squash");
   }
-  for (i=j; i<j+k; i++) big_app1(i);
   reduce(j,k,c,d,n);
 }
 
@@ -3333,7 +3334,7 @@
 for (j=scrap_base; j<=lo_ptr; j++) {
   if (j!=scrap_base) app(' ');
   if (j->mathness % 4 == yes_math) app('$');
-  app1(j);
+  app(tok_flag+(int)(j->trans-tok_start));
   if (j->mathness / 4 == yes_math) app('$');
   if (tok_ptr+6>tok_mem_end) overflow("token");
 }
@@ -3533,28 +3534,22 @@
 @^special string characters@>
 
 @<Append a string or...@>={@+ int count=-1; /* characters remaining before string break */
-if (next_control==constant) app_str("\\T{"@q}@>);
+switch (next_control) {
+  case constant: app_str("\\T{"@q}@>); break;
 @.\\T@>
-else if (next_control==string) {
-  count=20; app_str("\\.{"@q}@>);
-}
+  case string: count=20; app_str("\\.{"@q}@>); break;
 @.\\.@>
-else app_str("\\vb{"@q}@>);
+  default: app_str("\\vb{"@q}@>);
 @.\\vb@>
+}
 while (id_first<id_loc) {
   if (count==0) { /* insert a discretionary break in a long string */
      app_str(@q(@>@q{@>"}\\)\\.{"@q}@>); count=20;
 @q(@>@.\\)@>
   }
-@^high-bit character handling@>
-  if((eight_bits)(*id_first)>0177) {
-    app_tok(quoted_char);
-    app_tok((eight_bits)(*id_first++));
-  }
-  else {
-    switch (*id_first) {
-      case ' ':case '\\':case '#':case '%':case '$':case '^':
-      case '{': case '}': case '~': case '&': case '_': app('\\'); break;
+  switch (*id_first) {
+    case ' ':case '\\':case '#':case '%':case '$':case '^':
+    case '{': case '}': case '~': case '&': case '_': app('\\'); break;
 @.\\\ @>
 @.\\\\@>
 @.\\\#@>
@@ -3566,12 +3561,16 @@
 @.\\\~@>
 @.\\\&@>
 @.\\\_@>
-      case '@@': if (*(id_first+1)=='@@') id_first++;
-        else err_print("! Double @@ should be used in strings");
+    case '@@': if (*(id_first+1)=='@@') id_first++;
+      else err_print("! Double @@ should be used in strings");
 @.Double @@ should be used...@>
+      break;
+    default: /* high-bit character handling */
+@^high-bit character handling@>
+      if((eight_bits)(*id_first)>0177)
+        app_tok(quoted_char)@t;@>@;
     }
-    app_tok(*id_first++);
-  }
+  app_tok(*id_first++);
   count--;
 }
 app(@q{@>'}');
@@ -3596,15 +3595,13 @@
 @<Append a \TEX/ string, without forming a scrap@>=
 app_str("\\hbox{"@q}@>);
 @^high-bit character handling@>
-while (id_first<id_loc)
-  if((eight_bits)(*id_first)>0177) {
-    app_tok(quoted_char);
-    app_tok((eight_bits)(*id_first++));
-  }
-  else {
+while (id_first<id_loc) {
+  if((eight_bits)(*id_first)>0177)
+    app_tok(quoted_char)@t;@>@;
+  else
     if (*id_first=='@@') id_first++;
-    app_tok(*id_first++);
-  }
+  app_tok(*id_first++);
+}
 app(@q{@>'}');
 
 @ The function |app_cur_id| appends the current identifier to the
@@ -4393,7 +4390,7 @@
   if (next_control==begin_C) next_control=get_next();
   else {
     this_section=cur_section;
-    @<Check that '=' or '==' follows this section name, and
+    @<Check that `\.{=}' or `\.{==}' follows this section name, and
       emit the scraps to start the section definition@>@;
   }
   while (next_control<=section_name) {
@@ -4406,7 +4403,7 @@
 @ The title of the section and an $\E$ or $\mathrel+\E$ are made
 into a scrap that should not take part in the parsing.
 
-@<Check that '='...@>=
+@<Check that `\.{=}'...@>=
 do next_control=get_next();
   while (next_control=='+'); /* allow optional `\.{+=}' */
 if (next_control!='=' && next_control!=eq_eq)
@@ -4836,7 +4833,7 @@
     section_print(p->llink); out_str("\\I");
 @.\\I@>
     tok_ptr=tok_mem+1; text_ptr=tok_start+1; scrap_ptr=scrap_info; init_stack;
-    app(p-name_dir+section_flag); make_output();
+    app(section_flag+(int)(p-name_dir)); make_output();
     footnote(cite_flag);
     footnote(0); /* |cur_xref| was set by |make_output| */
     finish_line();@/

Modified: trunk/Build/source/texk/web2c/cwebdir/cwebmac.tex
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/cwebmac.tex	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/cwebmac.tex	2021-09-16 11:13:15 UTC (rev 60519)
@@ -448,7 +448,7 @@
        \write\cont{\catcode `\noexpand\@=12\relax}   % \makeatother
   \closeout\cont % the contents information has been fully gathered
   \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi
-    \global\setbox\sbox=\page \global\pagesavedtrue}
+    \global\setbox\sbox=\page \global\pagesavedtrue \mark{\topmark}}
   \pagesavedfalse \eject % eject the page-so-far and predecessors
   \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box
   \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height

Modified: trunk/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch	2021-09-16 11:13:15 UTC (rev 60519)
@@ -169,8 +169,7 @@
 \cwebfootnote{This extended version of \.{CWEB} adds the following options
 to the list:
 \hfil\smallskip
-\option c Overwrite output files with temporary output only if changes occur.
-(On by default.)
+\option c Check temporary output files for changes.  (Off by default.)
 \hfil\vskip\normallineskip
 \option d Set the debugging variable \\{kpathsea\_debug} to the numeric
 value $N\in[0,127]$ of this option.  See section~93 % FIXME

Modified: trunk/Build/source/texk/web2c/cwebdir/po/de/web2c-help.po
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/po/de/web2c-help.po	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/po/de/web2c-help.po	2021-09-16 11:13:15 UTC (rev 60519)
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: CWEBbin 2021\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-03-24 12:04+0100\n"
-"PO-Revision-Date: 2021-03-24 12:04+0100\n"
+"POT-Creation-Date: 2021-07-27 09:00+0200\n"
+"PO-Revision-Date: 2021-07-27 09:00+0200\n"
 "Last-Translator: Andreas Scherer <andreas_github at freenet.de>\n"
 "Language-Team: German\n"
 "Language: de\n"
@@ -72,8 +72,8 @@
 msgstr "+/-v        Kurzform für '+bhp'; auch '--verbose'"
 
 #: help.h:64 help.h:85 help.h:112
-msgid "-c          ignore temporary output irrespective of changes"
-msgstr "-c          ignoriere temporäre Ausgabe unabhängig von Änderungen"
+msgid "+c          check temporary output for changes"
+msgstr "+c          prüfe temporäre Ausgabe auf Änderungen"
 
 #: help.h:66 help.h:93 help.h:121
 msgid "+s          print usage statistics"

Modified: trunk/Build/source/texk/web2c/cwebdir/po/web2c-help.pot
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/po/web2c-help.pot	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/po/web2c-help.pot	2021-09-16 11:13:15 UTC (rev 60519)
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: CWEBbin 2021\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-03-24 12:04+0100\n"
+"POT-Creation-Date: 2021-07-27 09:00+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -71,7 +71,7 @@
 msgstr ""
 
 #: help.h:64 help.h:85 help.h:112
-msgid "-c          ignore temporary output irrespective of changes"
+msgid "+c          check temporary output for changes"
 msgstr ""
 
 #: help.h:66 help.h:93 help.h:121

Copied: trunk/Build/source/texk/web2c/cwebdir/prod-cweave.w (from rev 60493, trunk/Build/source/texk/web2c/cwebdir/prod.w)
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/prod-cweave.w	                        (rev 0)
+++ trunk/Build/source/texk/web2c/cwebdir/prod-cweave.w	2021-09-16 11:13:15 UTC (rev 60519)
@@ -0,0 +1,372 @@
+% This file is part of CWEB.
+% This program by Silvio Levy and Donald E. Knuth
+% is based on a program by Knuth.
+% It is distributed WITHOUT ANY WARRANTY, express or implied.
+% Version 4.5 --- July 2021
+%
+@ Here is a table of all the productions.  Each production that
+combines two or more consecutive scraps implicitly inserts a {\tt \$}
+where necessary, that is, between scraps whose abutting boundaries
+have different |mathness|.  In this way we never get double {\tt\$\$}.
+
+% The following kludge is needed because \newcount, \newdimen, and \+
+% are "\outer" control sequences that cannot be used in skipped text!
+\fi \newcount\prodno \newdimen\midcol \let\+\relax \ifon
+
+\def\v{\char'174}
+\mathchardef\RA="3221 % right arrow
+\mathchardef\BA="3224 % double arrow
+
+A translation is provided when the resulting scrap is not merely a
+juxtaposition of the scraps it comes from.  An asterisk$^*$ next to a scrap
+means that its first identifier gets an underlined entry in the index,
+via the function |make_underlined|.  Two asterisks$^{**}$ means that both
+|make_underlined| and |make_reserved| are called; that is, the
+identifier's ilk becomes |raw_int|.  A dagger \dag\ before the
+production number refers to the notes at the end of this section,
+which deal with various exceptional cases.
+
+We use \\{in}, \\{out}, \\{back}, \\{bsp}, and \\{din} as shorthands for
+|indent|, |outdent|, |backup|, |break_space|, and |dindent|, respectively.
+
+\begingroup \lineskip=4pt
+\def\alt #1 #2
+{$\displaystyle\Bigl\{\!\matrix{\strut\hbox{#1}\cr
+   \strut\hbox{#2}\cr}\!\Bigr\}$ }
+\def\altt #1 #2 #3
+{$\displaystyle\Biggl\{\!\matrix{\strut\hbox{#1}\cr\hbox{#2}\cr
+   \strut\hbox{#3}\cr}\!\Biggr\}$ }
+\def\malt #1 #2
+{$\displaystyle\!\matrix{\strut\hbox{#1}\hfill\cr\strut\hbox{#2}\hfill\cr}$}
+\def\maltt #1 #2 #3
+{$\displaystyle\!\matrix{\strut\hbox{#1}\hfill\cr\hbox{#2}\hfill\cr
+   \strut\hbox{#3}\hfill\cr}$}
+\yskip
+\prodno=0 \midcol=2.5in
+\def\theprodno{\number\prodno \global\advance\prodno by1\enspace}
+\def\dagit{\dag\theprodno}
+\def\+#1&#2&#3&#4\cr{\def\next{#1}%
+ \line{\hbox to 2em{\hss
+  \ifx\next\empty\theprodno\else\next\fi}\strut
+  \ignorespaces#2\hfil\hbox to\midcol{$\RA$
+  \ignorespaces#3\hfil}\quad \hbox to1.45in{\ignorespaces#4\hfil}}}
+\+\relax & LHS & RHS \hfill Translation & Example\cr
+\yskip
+\+& \altt\\{any} {\\{any} \\{any}} {\\{any} \\{any} \\{any}}
+|insert| & \altt\\{any} {\\{any} \\{any}} {\\{any} \\{any} \\{any}}
+& stmt; \4\4 \C{comment}\cr
+\+\dagit& |exp| \altt|lbrace| |int_like| |decl|
+    & |fn_decl| \altt|lbrace| |int_like| |decl| \hfill $F=E^*\,\\{din}$
+    & \malt {\\{main}(\,) $\{$}
+            {$\\{main}(\\{ac},\\{av}){}$ \&{int} \\{ac};} \cr
+\+& |exp| |unop| & |exp| & $x\PP$ \cr
+\+& |exp| \alt |binop| |ubinop| |exp| & |exp| & \malt {$x/y$} {$x+y$} \cr
+\+& |exp| |comma| |exp| & |exp| \hfill $E_1C\,|opt|9\,E_2$ & $f(x,y)$ \cr
+\+& |exp| \alt {|lpar| |rpar|} |cast| |colon|
+    & |exp| \alt {|lpar| |rpar|} |cast| |base|
+    & \malt {\&C(\,) :} {\&C(\&{int} $i$) :} \cr
+\+& |exp| |semi| & |stmt| & $x=0;$ \cr
+\+& |exp| |colon| & |tag| \hfill $E^*C$ & \\{found}: \cr
+\+& |exp| |rbrace| & |stmt| |rbrace| & end of \&{enum} list\cr
+\+& |exp| \alt {|lpar| |rpar|} |cast| \alt|const_like| |case_like|
+    & |exp| \alt {|lpar| |rpar|} |cast| \hfill
+       \alt $R=R\.\ C$ $C_1=C_1\.\ C_2$
+    & \malt {$f$(\,) \&{const}} {$f$(\&{int}) \&{throw}} \cr
+\+& |exp| \alt |exp| |cast| & |exp| & \\{time}(\,) \cr
+\+& |lpar| \alt |exp| |ubinop| |rpar| & |exp| & \malt{($x$)} {$(*)$} \cr
+\+& |lpar| |rpar| & |exp| \hfill $L\.{\\,}R$ & functions, declarations\cr
+\+& |lpar| \altt |decl_head| |int_like| |cast| |rpar| & |cast| & |(char*)|\cr
+\+& |lpar| \altt |decl_head| |int_like| |exp| |comma| & |lpar| \hfill
+     $L$\,\altt $D$ $I$ $E$ \unskip $C$\,|opt|9 & |(int,|\cr
+\+& |lpar| \alt |stmt| |decl| & |lpar| \hfill \alt {$LS\.\ $} {$LD\.\ $}
+    & \malt {$(k=5;$} {(\&{int} $k=5;$} \cr
+\+& |unop| \alt |exp| |int_like| & |exp|
+    & \malt {$\R x$} {$\CM\&C$} \cr
+\+& |ubinop| |cast| |rpar| & |cast| |rpar| \hfill
+      $C=\.\{U\.\}C$ & |*|\&{CPtr}) \cr
+\+& |ubinop| \alt|exp| |int_like| & \alt|exp| |int_like| \hfill
+  \.\{$U$\.\}\alt$E$ $I$ & \malt {${*}x$} {${*}\&{CPtr}$} \cr
+\+& |ubinop| |binop| & |binop| \hfill $|math_rel|\,U\.\{B\.\}\.\}$ & |*=|\cr
+\+& |binop| |binop| & |binop| \hfill
+                        $|math_rel|\,\.\{B_1\.\}\.\{B_2\.\}\.\}$ & |>>=|\cr
+\+& |cast| \alt |lpar| |exp| & \alt |lpar| |exp| \hfill
+  \alt $CL$ $C\.\ E$ & \malt {$(\&{double})(x+2)$} {(\&{double}) $x$} \cr
+\+& |cast| |semi| & |exp| |semi| & |(int);|\cr
+\+& |sizeof_like| |cast| & |exp| & |sizeof (double)|\cr
+\+& |sizeof_like| |exp| & |exp| \hfill $S\.\ E$ & \&{sizeof} $x$\cr
+\+& |int_like| \alt|int_like| |struct_like| &
+        \alt|int_like| |struct_like| \hfill $I\.\ $\alt $I$ $S$
+        \unskip & |extern char|\cr
+\+& |int_like| |exp| \alt|raw_int| |struct_like| &
+         |int_like| \alt|raw_int| |struct_like| & |extern "Ada" int|\cr
+\+& |int_like| \altt|exp| |ubinop| |colon| &
+   |decl_head| \altt|exp| |ubinop| |colon| \hfill $D=I$\.\ %
+    & \maltt {\&{int} $x$} {\&{int} ${}{*}x$} {\&{unsigned} :} \cr
+\+& |int_like| \alt |semi| |binop| & |decl_head| \alt |semi| |binop|
+    & \malt {\&{int} $x$;} {\&{int} $f(\&{int}=4)$} \cr
+\+& |public_like| |colon| & |tag| & |private:|\cr
+\+& |public_like| & |int_like| & |private|\cr
+\+& |colcol| \alt|exp| |int_like| & \alt|exp| |int_like| \hfill
+     |qualifier| $C$\alt$E$ $I$ & \&C\DC$x$\cr
+\+& |colcol| |colcol| & |colcol| & \&C\DC\&B\DC\cr
+\+& |decl_head| |comma| & |decl_head| \hfill $DC\.\ $ & \&{int} $x,{}$ \cr
+\+& |decl_head| |ubinop| & |decl_head| \hfill $D\.\{U\.\}$ & |int *|\cr
+\+\dagit& |decl_head| |exp| & |decl_head| \hfill $DE^*$ & \&{int} $x$ \cr
+\+& |decl_head| \alt|binop| |colon| |exp| \altt|comma| |semi| |rpar| &
+     |decl_head| \altt|comma| |semi| |rpar| \hfill
+     $D=D$\alt $B$ $C$ \unskip $E$
+    & \malt {\&{int} $f(\&{int}\ x=2)$} {\&{int} $b$ : 1} \cr
+\+& |decl_head| |cast| & |decl_head| & \&{int} $f$(\&{int})\cr
+\+\dagit& |decl_head| \altt|int_like| |lbrace| |decl| & |fn_decl|
+                   \altt|int_like| |lbrace| |decl| \hfill $F=D\,\\{din}$
+    & \&{long} \\{time}(\,) $\{$\cr
+\+& |decl_head| |semi| & |decl| & \&{int} $n$;\cr
+\+& |decl| |decl| & |decl| \hfill $D_1\,|force|\,D_2$
+    & \&{int} $n$; \&{double} $x$;\cr
+\+\dagit& |decl| \alt|stmt| |function| & \alt|stmt| |function|
+        \hfill $D\,|big_force|\,$\alt $S$ $F$ \unskip
+    & \&{extern} $n$; \\{main}(\,) $\{\,\}$\cr
+\+& |base| \alt |int_like| |exp| |comma| & |base| \hfill
+     $B$\.\ \alt $I$ $E$ \unskip $C$\,|opt|9
+    & \malt {: \&{public} \&A,} {: $i$(5),} \cr
+\+& |base| \alt |int_like| |exp| |lbrace| & |lbrace| \hfill
+     $B$\.\ \alt $I$ $E$ \unskip \.\ $L$ & \&D : \&{public} \&A $\{$\cr
+\+& |struct_like| |lbrace| & |struct_head| \hfill $S\.\ L$ & |struct {|\cr
+\+& |struct_like| \alt|exp| |int_like| |semi| & |decl_head| |semi|
+     \hfill $S\.\ $\alt $E^{**}$ $I^{**}$ & \&{struct} \&{forward};\cr
+\+& |struct_like| \alt|exp| |int_like| |lbrace| & |struct_head| \hfill
+     $S\.\ $\alt $E^{**}$ $I^{**}$ \unskip $\.\ L$
+    & \&{struct} \&{name\_info} $\{$\cr
+\+& |struct_like| \alt|exp| |int_like| |colon| &
+    |struct_like| \alt|exp| |int_like| |base| & |class| \&C :\cr
+\+\dagit& |struct_like| \alt|exp| |int_like| & |int_like|
+        \hfill $S\.\ $\alt$E$ $I$ \unskip & \&{struct} \&{name\_info} $z$;\cr
+\+& |struct_head| \altt|decl| |stmt| |function| |rbrace| & |int_like|\hfill
+         $S\,\\{in}\,|force|$\altt$D$ $S$ $F$ \unskip $\\{out}\,|force|\,R$
+    & |struct {| declaration |}|\cr
+\+& |struct_head| |rbrace| & |int_like|\hfill $S\.{\\,}R$
+    & \&{class} \&C $\{\,\}$\cr
+\+& |fn_decl| |decl| & |fn_decl| \hfill $F\,|force|\,D$
+    & $f(z)$ \&{double} $z$; \cr
+\+\dagit& |fn_decl| |stmt| & |function| \hfill $F\,|out|\,|out|\,|force|\,S$
+    & \\{main}() {\dots}\cr
+\+& |function| \altt|stmt| |decl| |function| & \altt |stmt| |decl| |function|
+   \hfill $F\,|big_force|\,$\altt $S$ $D$ $F$ \unskip & outer block\cr
+\+& |lbrace| |rbrace| & |stmt| \hfill $L\.{\\,}R$ & empty statement\cr
+\advance\midcol35pt
+\+& |lbrace| \altt|stmt| |decl| |function| |rbrace| & |stmt| \hfill
+     $|force|\,L\,\\{in}\,|force|\,S\,
+                |force|\,\\{back}\,R\,\\{out}\,|force|$ & compound statement\cr
+\advance\midcol-20pt
+\+& |lbrace| |exp| [|comma|] |rbrace| & |exp| & initializer\cr
+\+& |if_like| |exp| & |if_clause| \hfill $I\.{\ }E$ & \&{if} ($z$)\cr
+\+& |else_like| |colon| & |else_like| |base| & |try :|\cr
+\+& |else_like| |lbrace| & |else_head| |lbrace| & |else {|\cr
+\+& |else_like| |stmt| & |stmt| \hfill
+       $|force|\,E\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|$
+    & \&{else} $x=0;$\cr
+\+& |else_head| \alt|stmt| |exp| & |stmt| \hfill
+       $|force|\,E\,\\{bsp}\,|noop|\,|cancel|\,S\,\\{bsp}$
+    & $\!\!$ \&{else} $\{x=0;\}$\cr
+\+& |if_clause| |lbrace| & |if_head| |lbrace| & \&{if} ($x$) $\{$\cr
+\+& |if_clause| |stmt| |else_like| |if_like| & |if_like| \hfill
+       $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E\,\.\ I$
+    & $\!\!$ \&{if} ($x$) $y$; \&{else} \&{if}\cr
+\+& |if_clause| |stmt| |else_like| & |else_like| \hfill
+       $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E$
+    & $\!\!$ \&{if} ($x$) $y$; \&{else}\cr
+\+& |if_clause| |stmt| & |else_like| |stmt| & $\!\!$ \&{if} ($x$) $y$;\cr
+\+& |if_head| \alt|stmt| |exp| |else_like| |if_like| & |if_like| \hfill
+       $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E\,\.\ I$
+    & $\!\!$ \&{if} ($x$) $\{\,y;\,\}$ \&{else} \&{if}\cr
+\+& |if_head| \alt|stmt| |exp| |else_like| & |else_like| \hfill
+       $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E$
+    & $\!\!$ \&{if} ($x$) $\{\,y;\,\}$ \&{else}\cr
+\+& |if_head| \alt|stmt| |exp| & |else_head| \alt|stmt| |exp|
+    & $\!\!$ \&{if} ($x$) ${}\{\,y\,\}{}$\cr
+\advance\midcol20pt
+\+& |do_like| |stmt| |else_like| |semi| & |stmt| \hfill
+      $D\,\\{bsp}\,|noop|\,|cancel|\,S\,|cancel|\,|noop|\,\\{bsp}\,ES$%
+      & \&{do} $f$($x$); \&{while} ($g$($x$));\cr
+\advance\midcol-20pt
+\+& |case_like| |semi| & |stmt| & |return;|\cr
+\+& |case_like| |colon| & |tag| & |default:|\cr
+\+& |case_like| |exp| & |exp| \hfill $C\.\ E$ & |return 0|\cr
+\+\dagit& |catch_like| \alt|cast| |exp| & |fn_decl| \hfill
+    $C$\alt $C$ $E$ \unskip \\{din} & |catch (...)|\cr
+\+& |tag| |tag| & |tag| \hfill $T_1\,\\{bsp}\,T_2$ & |case 0: case 1:|\cr
+\+& |tag| \altt|stmt| |decl| |function| & \altt|stmt| |decl| |function|
+       \hfill $|force|\,\\{back}\,T\,\\{bsp}\,S$
+    & $\!\!$ \&{case} 0: $z=0;$\cr
+\+\dagit& |stmt| \altt|stmt| |decl| |function| &
+   \altt|stmt| |decl| |function|
+      \hfill $S\,$\altt$|force|\,S$ $|big_force|\,D$ $|big_force|\,F$ \unskip
+    & $x=1;$ $y=2;$\cr
+\+& |semi| & |stmt| \hfill \.\ $S$& empty statement\cr
+\+\dagit& |lproc| \altt |if_like| |else_like| |define_like| & |lproc| &
+         \maltt {\#\&{include}} \#\&{else} \#\&{define} \cr
+\+& |lproc| |rproc| & |insert| & \#\&{endif} \cr
+\+& |lproc| \alt {|exp| [|exp|]} |function| |rproc| & |insert| \hfill
+    $I$\.\ \alt {$E{[\.{\ \\5}E]}$} {$F$} &
+ \malt{\#\&{define} $a$\enspace 1} {\#\&{define} $a$\enspace$\{\,b;\,\}$} \cr
+\+& |section_scrap| |semi| & |stmt|\hfill $MS$ |force|
+   &$\langle\,$section name$\,\rangle$;\cr
+\+& |section_scrap| & |exp| &$\langle\,$section name$\,\rangle$\cr
+\+& |insert| \\{any} & \\{any} & \.{\v\#include\v}\cr
+\+& |prelangle| & |binop| \hfill \.< & $<$ not in template\cr
+\+& |prerangle| & |binop| \hfill \.> & $>$ not in template\cr
+\+& |langle| |prerangle| & |cast| \hfill $L\.{\\,}P$ & $\langle\,\rangle$\cr
+\+& |langle| \altt|decl_head| |int_like| |exp| |prerangle| & |cast| &
+     $\langle\&{class}\,\&C\rangle$\cr
+\+& |langle| \altt|decl_head| |int_like| |exp| |comma| & |langle| \hfill
+     $L$\,\altt $D$ $I$ $E$ \unskip $C$\,|opt|9 & $\langle\&{class}\,\&C,$\cr
+\+& |template_like| |exp| |prelangle| & |template_like| |exp| |langle| &
+  \&{template} $a\langle100\rangle$\cr
+\+& |template_like| \alt|exp| |raw_int| & \alt|exp| |raw_int| \hfill
+    $T$\.\ \alt$E$ $R$ & \&C\DC\&{template} $a$(\,)\cr
+\+& |template_like| & |raw_int| & \&{template}$\langle\&{class}\,\&T\rangle$\cr
+\+& |new_like| |lpar| |exp| |rpar| & |new_like| & \&{new}(\\{nothrow})\cr
+\+& |new_like| |cast| & |exp| \hfill $N\.\ C$ & |new(int*)|\cr
+\+\dagit& |new_like| & |new_exp| & \&{new} \&C(\,)\cr
+\+& |new_exp| \alt|int_like| |const_like| & |new_exp| \hfill
+    $N$\.\ \alt $I$ $C$ & |new const int|\cr
+\+& |new_exp| |struct_like| \alt |exp| |int_like| & |new_exp| \hfill
+    $N\.\ S$\.\ \alt $E$ $I$ & \&{new} \&{struct} \&S\cr
+\+& |new_exp| |raw_ubin| & |new_exp| \hfill $N\.\{R\.\}$ & |new int*[2]|\cr
+\+& |new_exp| \alt |lpar| |exp| & |exp| \alt |lpar| |exp| \hfill
+    $E=N$\,\alt {} {\.\ } & \malt {|operator[](int)|} {|new int(2)|} \cr
+\+\dagit& |new_exp| & |exp| & |new int;|\cr
+\+& |ftemplate| |prelangle| & |ftemplate| |langle| & |make_pair<int,int>|\cr
+\+& |ftemplate| & |exp| & |make_pair(1,2)|\cr
+\+& |for_like| |exp| & |else_like| \hfill $F\.\ E$ & |while (1)|\cr
+\+& |raw_ubin| |const_like| & |raw_ubin| \hfill $RC$\.{\\\ }
+     & $*$\&{const} $x$\cr
+\+& |raw_ubin| & |ubinop| & $*$ $x$\cr
+\+& |const_like| & |int_like| & \&{const} $x$\cr
+\+& |raw_int| |prelangle| & |raw_int| |langle| & \&C$\langle$\cr
+\+& |raw_int| |colcol| & |colcol| & \&C\DC\cr
+\+& |raw_int| |cast| & |raw_int| & \&C$\langle\&{class}\ \&T\rangle$\cr
+\+& |raw_int| |lpar| & |exp| |lpar| & \&{complex}$(x,y)$\cr
+\+\dagit& |raw_int| & |int_like|   & \&{complex} $z$\cr
+\+\dagit& |operator_like| \altt|binop| |unop| |ubinop| & |exp|
+    \hfill $O$\.\{\altt $B$ $U$ $U$ \unskip \.\} & |operator+|\cr
+\+& |operator_like| \alt|new_like| |delete_like| & |exp| \hfill
+    $O$\.\ \alt $N$ $S$ & |operator delete|\cr
+\+& |operator_like| |comma| & |exp| & \&{operator},\cr
+\+\dagit& |operator_like| & |new_exp| & |operator char*|\cr
+\advance\midcol-8pt
+\+& |typedef_like| \alt|int_like| |cast| \alt|comma| |semi| &
+    |typedef_like| |exp| \alt|comma| |semi| & \&{typedef} \&{int} \&I,\cr
+\advance\midcol+8pt
+\+& |typedef_like| |int_like| & |typedef_like| \hfill $T\.\ I$ &
+    \&{typedef} \&{char}\cr
+\+\dagit& |typedef_like| |exp| & |typedef_like| \hfill $T\.\ E^{**}$ &
+    \&{typedef} \&I \.{@@[@@]} (|*|\&P)\cr
+\+& |typedef_like| |comma| & |typedef_like| \hfill $TC\.\ $ &
+    \&{typedef} \&{int} \&x,\cr
+\+& |typedef_like| |semi| & |decl| & \&{typedef} \&{int} $\&x,\&y$;\cr
+\+& |typedef_like| |ubinop| \alt |cast| |ubinop| &
+    |typedef_like| \alt |cast| |ubinop| \hfill
+    \alt $C=\.\{U\.\}C$ $U_2=\.\{U_1\.\}U_2$ \unskip &
+    \&{typedef} |*|{}|*|(\&{CPtr})\cr
+\+& |delete_like| |lpar| |rpar| & |delete_like|\hfill $DL\.{\\,}R$
+    & \&{delete}[\,] \cr
+\+& |delete_like| |exp| & |exp| \hfill $D\.\ E$ & \&{delete} $p$ \cr
+\+\dagit& |question| |exp| \alt |colon| |base| & |binop|
+    & \malt {$\?x:$} {$\?f(\,):$} \cr
+\+& |begin_arg| |end_arg| & |exp| & \.{@@[}\&{char}$*$\.{@@]}\cr
+\+& \\{any\_other} |end_arg| & |end_arg| &    \&{char}$*$\.{@@]}\cr
+\+& |alignas_like| |decl_head| & |attr| & \&{alignas}(\&{struct} $s$ ${*})$ \cr
+\+& |alignas_like| |exp| & |attr| & |alignas(8)| \cr
+\+& |lbrack| |lbrack| & |attr_head| & attribute begins \cr
+\+& |lbrack| & |lpar| & |[| elsewhere \cr
+\+& |rbrack| & |rpar| & |]| elsewhere \cr
+\+& |attr_head| |rbrack| |rbrack| & |attr| & |[[@t\dots@>]]| \cr
+\+& |attr_head| |exp| & |attr_head| & |[[deprecated| \cr
+\+& |attr_head| |using_like| |exp| |colon| & |attr_head|
+    & [[\&{using} \.{NS}: \cr
+\+& |attr| \alt|lbrace| |stmt| & \alt|lbrace| |stmt| \hfill
+       $A$\.\ \alt $S$ $L$ & |[[likely]] {|\cr
+\+& |attr| |tag| & |tag| \hfill $A\.\ T$ & |[[likely]] case 0:| \cr
+\+& |attr| |semi| & |stmt| & |[[fallthrough]];| \cr
+\+& |attr| |attr| & |attr| \hfill $A_1\.\ A_2$
+    & \&{alignas}($x$) [[\hbox{\dots}]] \cr
+\+& |attr| |decl_head| & |decl_head| & [[\\{nodiscard}]] $f$(\,) \cr
+\+& |decl_head| |attr| & |decl_head| & (\&{int} $x$ [[\\{deprecated}]])\cr
+\+& |using_like| & |int_like| & \&{using} not in attributes \cr
+\+& |struct_like| |attr| & |struct_like| \hfill $S\.\ A$
+    & \&{struct} [[\\{deprecated}]]\cr
+\+& |exp| |attr| & |attr| \hfill $E\.\ A$ & \&{enum} $\{x\ [[\ldots]]\}$ \cr
+\+& |attr| |typedef_like| & |typedef_like| \hfill $A\.\ T$
+    & |[[deprecated]] typedef| \cr
+\+& |raw_int| |lbrack| & |exp| & |int[3]| \cr
+\+& |attr_head| |comma| & |attr_head| & $[[x,y$ \cr
+\+& |if_head| |attr| & |if_head| \hfill $I\.\ A$
+    & \&{if} ($x$) [[\\{unlikely}]] $\{$ \cr
+\+& |lbrack| |lbrack| |rbrack| |rbrack| & |exp| & |[[]]| \cr
+\+& |attr| |function| & |function| \hfill $A\.\ F$
+    & attribute and function \cr
+\+& |default_like| |colon| & |case_like| |colon| & |default:| \cr
+\+& |default_like| & |exp| & $f(\,)=\&{default};$ \cr
+\+& |struct_like| |struct_like| & |struct_like| \hfill $S_1\.\ S_2$
+    & |enum class| \cr
+\+& |exp| |colcol| |int_like| & |int_like| & $\\{std}\DC\&{atomic}$ \cr
+\advance\midcol-30pt
+\+\dagit& |langle| |struct_like| \alt |exp| |int_like| |comma| &
+  |langle| \hfill $LS$\alt $E^{**}$ $I^{**}$ \unskip $C$
+   & $\langle$\&{typename} $t,$\cr
+\+\dagit& |langle| |struct_like| \alt |exp| |int_like| |prerangle| &
+  |cast| \hfill $LS$\alt $E^{**}$ $I^{**}$ \unskip $P$
+    & $\langle$\&{typename} $t\rangle$ \cr
+\advance\midcol30pt
+\+& |template_like| |cast| |struct_like| & |struct_like| \hfill $T\.\ CS$ &
+  |template<@t\dots@>> class| \cr
+\+& |tag| |rbrace| & |decl| |rbrace| & @q{@>|public: }| \cr
+\+& |fn_decl| |attr| & |fn_decl| \hfill $F\.\ A$
+    & \&{void} $f$(\,) \&{noexcept} \cr
+\+& |alignas_like| |cast| & |attr| & |alignas(int)| \cr
+\vfill\break
+\parindent=0pt
+\everypar={\hangindent=2em}
+\dag{\bf Notes}
+\yskip
+Rules 1, 38, 52, and 73: The \\{din}s and \\{out}s are suppressed if
+\.{CWEAVE} has been invoked with the \.{-i} option.
+
+Rule 35: The |exp| must not be immediately followed by |lpar|, |lbrack|,
+|exp|, or~|cast|.
+
+Rule 41: The |big_force| becomes |force| if \.{CWEAVE} has been invoked with the
+\.{-o} option.
+
+Rule 48: The |exp| or |int_like| must not be immediately followed by |base|.
+
+Rule 76: The |force| in the |stmt| line becomes \\{bsp} if \.{CWEAVE} has
+been invoked with the \.{-f} option, and the |big_force| in the |decl| and
+|function| lines becomes |force| if \.{CWEAVE} has been invoked with the
+\.{-o} option.
+
+Rule 78: The |define_like| case calls |make_underlined| on the following scrap.
+
+Rule 94: The |new_like| must not be immediately followed by |lpar|.
+
+Rule 99: The |new_exp| must not be immediately followed by |raw_int|,
+|struct_like|, or |colcol|.
+
+Rule 110: The |raw_int| must not be immediately followed by |langle|.
+
+Rule 111: The operator after |operator_like|
+must not be immediately followed by a |binop|.
+
+Rule 114: The |operator_like| must not be immediately followed by
+|raw_ubin|.
+
+Rule 117: The |exp| must not be immediately followed by |lpar|, |exp|,
+or |cast|.
+
+Rule 123: The mathness of the |colon| or |base| changes to `yes'.
+
+Rules 153, 154: |make_reserved| is called only if \.{CWEAVE} has been invoked
+with the \.{+t} option.
+
+\endgroup

Modified: trunk/Build/source/texk/web2c/cwebdir/prod-twill.w
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/prod-twill.w	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/prod-twill.w	2021-09-16 11:13:15 UTC (rev 60519)
@@ -54,101 +54,104 @@
 \yskip
 \+& \altt\\{any} {\\{any} \\{any}} {\\{any} \\{any} \\{any}}
 |insert| & \altt\\{any} {\\{any} \\{any}} {\\{any} \\{any} \\{any}}
-& stmt; \ /$\ast\,$comment$\,*$/\cr
-\+& |exp| \altt|lbrace| |int_like| |decl|
-    & |fn_decl| \altt|lbrace| |int_like| |decl|
-        \hfill $F=E^*\,\\{din}$ & \malt {\\{main}()$\{$}
-           {\\{main}$(\\{ac},\\{av})$ \&{int} \\{ac};} \cr
-\+& |exp| |unop| & |exp| & |x++|\cr
-\+& |exp| \alt |binop| |ubinop| |exp| & |exp| & \malt {|x/y|} {|x+y|} \cr
-\+& |exp| |comma| |exp| & |exp| \hfill $EC\,|opt|9\,E$& |f(x,y)|\cr
-\+& |exp| \alt {|lpar| |rpar|} |cast| |colon| &
-    |exp| \alt {|lpar| |rpar|} |cast| |base| &
-     \malt \&C|()|: {\&C|(int i)|:} \cr
-\+& |exp| |semi| & |stmt| & |x=0;|\cr
-\+& |exp| |colon| & |tag| \hfill $E^*C$ & |found:|\cr
+& stmt; \4\4 \C{comment}\cr
+\+\dagit& |exp| \altt|lbrace| |int_like| |decl|
+    & |fn_decl| \altt|lbrace| |int_like| |decl| \hfill $F=E^*\,\\{din}$
+    & \malt {\\{main}(\,) $\{$}
+            {$\\{main}(\\{ac},\\{av}){}$ \&{int} \\{ac};} \cr
+\+& |exp| |unop| & |exp| & $x\PP$ \cr
+\+& |exp| \alt |binop| |ubinop| |exp| & |exp| & \malt {$x/y$} {$x+y$} \cr
+\+& |exp| |comma| |exp| & |exp| \hfill $E_1C\,|opt|9\,E_2$ & $f(x,y)$ \cr
+\+& |exp| \alt {|lpar| |rpar|} |cast| |colon|
+    & |exp| \alt {|lpar| |rpar|} |cast| |base|
+    & \malt {\&C(\,) :} {\&C(\&{int} $i$) :} \cr
+\+& |exp| |semi| & |stmt| & $x=0;$ \cr
+\+& |exp| |colon| & |tag| \hfill $E^*C$ & \\{found}: \cr
 \+& |exp| |rbrace| & |stmt| |rbrace| & end of \&{enum} list\cr
-\+& |exp| \alt {|lpar| |rpar|} |cast| \alt|const_like| |case_like| &
-      |exp| \alt {|lpar| |rpar|} |cast| \hfill
-       \alt $R=R\.\ C$ $C_1=C_1\.\ C_2$ &
-      \malt {|f() const|} {|f(int) throw|} \cr
-\+& |exp| \alt |exp| |cast| & |exp| & |time()|\cr
-\+& |lpar| \alt |exp| |ubinop| |rpar| & |exp| & \malt{|(x)|} {|(*)|} \cr
+\+& |exp| \alt {|lpar| |rpar|} |cast| \alt|const_like| |case_like|
+    & |exp| \alt {|lpar| |rpar|} |cast| \hfill
+       \alt $R=R\.\ C$ $C_1=C_1\.\ C_2$
+    & \malt {$f$(\,) \&{const}} {$f$(\&{int}) \&{throw}} \cr
+\+& |exp| \alt |exp| |cast| & |exp| & \\{time}(\,) \cr
+\+& |lpar| \alt |exp| |ubinop| |rpar| & |exp| & \malt{($x$)} {$(*)$} \cr
 \+& |lpar| |rpar| & |exp| \hfill $L\.{\\,}R$ & functions, declarations\cr
 \+& |lpar| \altt |decl_head| |int_like| |cast| |rpar| & |cast| & |(char*)|\cr
 \+& |lpar| \altt |decl_head| |int_like| |exp| |comma| & |lpar| \hfill
-     $L$\,\altt $D$ $I$ $E$ $C$\,|opt|9 & |(int,|\cr
-\+& |lpar| \alt |stmt| |decl| & |lpar| \hfill \alt {$LS\.\ $} {$LD\.\ $} &
-    \malt {|(k=5;|} {|(int k=5;|} \cr
-\+& |unop| \alt |exp| |int_like| & |exp| &
-      \malt |!x| |~|\&C \cr
+     $L$\,\altt $D$ $I$ $E$ \unskip $C$\,|opt|9 & |(int,|\cr
+\+& |lpar| \alt |stmt| |decl| & |lpar| \hfill \alt {$LS\.\ $} {$LD\.\ $}
+    & \malt {$(k=5;$} {(\&{int} $k=5;$} \cr
+\+& |unop| \alt |exp| |int_like| & |exp|
+    & \malt {$\R x$} {$\CM\&C$} \cr
 \+& |ubinop| |cast| |rpar| & |cast| |rpar| \hfill
       $C=\.\{U\.\}C$ & |*|\&{CPtr}) \cr
 \+& |ubinop| \alt|exp| |int_like| & \alt|exp| |int_like| \hfill
-  \.\{$U$\.\}\alt$E$ $I$ & \malt |*x| |*|\&{CPtr} \cr
+  \.\{$U$\.\}\alt$E$ $I$ & \malt {${*}x$} {${*}\&{CPtr}$} \cr
 \+& |ubinop| |binop| & |binop| \hfill $|math_rel|\,U\.\{B\.\}\.\}$ & |*=|\cr
 \+& |binop| |binop| & |binop| \hfill
                         $|math_rel|\,\.\{B_1\.\}\.\{B_2\.\}\.\}$ & |>>=|\cr
 \+& |cast| \alt |lpar| |exp| & \alt |lpar| |exp| \hfill
-  \alt $CL$ $C\.\ E$ & \malt |(double)(x+2)| |(double)x| \cr
+  \alt $CL$ $C\.\ E$ & \malt {$(\&{double})(x+2)$} {(\&{double}) $x$} \cr
 \+& |cast| |semi| & |exp| |semi| & |(int);|\cr
 \+& |sizeof_like| |cast| & |exp| & |sizeof (double)|\cr
-\+& |sizeof_like| |exp| & |exp| \hfill $S\.\ E$ & |sizeof x|\cr
+\+& |sizeof_like| |exp| & |exp| \hfill $S\.\ E$ & \&{sizeof} $x$\cr
 \+& |int_like| \alt|int_like| |struct_like| &
         \alt|int_like| |struct_like| \hfill $I\.\ $\alt $I$ $S$
-        \unskip& |extern char|\cr
+        \unskip & |extern char|\cr
 \+& |int_like| |exp| \alt|raw_int| |struct_like| &
          |int_like| \alt|raw_int| |struct_like| & |extern "Ada" int|\cr
 \+& |int_like| \altt|exp| |ubinop| |colon| &
-   |decl_head| \altt|exp| |ubinop| |colon| \hfill
-         $D=I$\.\  & \maltt|int x| |int*x| |unsigned:| \cr
-\+& |int_like| \alt |semi| |binop| & |decl_head| \alt |semi| |binop| &
-        \malt |int x;| {\&{int} $f(\&{int}=4)$} \cr
-\+& |public_like| |colon| & |tag| & \&{private}:\cr
-\+& |public_like| & |int_like| & \&{private}\cr
+   |decl_head| \altt|exp| |ubinop| |colon| \hfill $D=I$\.\ %
+    & \maltt {\&{int} $x$} {\&{int} ${}{*}x$} {\&{unsigned} :} \cr
+\+& |int_like| \alt |semi| |binop| & |decl_head| \alt |semi| |binop|
+    & \malt {\&{int} $x$;} {\&{int} $f(\&{int}=4)$} \cr
+\+& |public_like| |colon| & |tag| & |private:|\cr
+\+& |public_like| & |int_like| & |private|\cr
 \+& |colcol| \alt|exp| |int_like| & \alt|exp| |int_like| \hfill
-     |qualifier| $C$ \alt$E$ $I$ & \&C\DC$x$\cr
+     |qualifier| $C$\alt$E$ $I$ & \&C\DC$x$\cr
 \+& |colcol| |colcol| & |colcol| & \&C\DC\&B\DC\cr
-\+& |decl_head| |comma| & |decl_head| \hfill $DC\.\ $ & |int x,|\cr
+\+& |decl_head| |comma| & |decl_head| \hfill $DC\.\ $ & \&{int} $x,{}$ \cr
 \+& |decl_head| |ubinop| & |decl_head| \hfill $D\.\{U\.\}$ & |int *|\cr
-\+\dagit& |decl_head| |exp| & |decl_head| \hfill $DE^*$ & |int x|\cr
+\+\dagit& |decl_head| |exp| & |decl_head| \hfill $DE^*$ & \&{int} $x$ \cr
 \+& |decl_head| \alt|binop| |colon| |exp| \altt|comma| |semi| |rpar| &
      |decl_head| \altt|comma| |semi| |rpar| \hfill
-     $D=D$\alt $B$ $C$ \unskip$E$ & \malt {\&{int} $f(\&{int}\ x=2)$} |int b:1| \cr
-\+& |decl_head| |cast| & |decl_head| & |int f(int)|\cr
-\+& |decl_head| \altt|int_like| |lbrace| |decl| & |fn_decl|
+     $D=D$\alt $B$ $C$ \unskip $E$
+    & \malt {\&{int} $f(\&{int}\ x=2)$} {\&{int} $b$ : 1} \cr
+\+& |decl_head| |cast| & |decl_head| & \&{int} $f$(\&{int})\cr
+\+\dagit& |decl_head| \altt|int_like| |lbrace| |decl| & |fn_decl|
                    \altt|int_like| |lbrace| |decl| \hfill $F=D\,\\{din}$
-                             & |long time () {|\cr
-\+& |decl_head| |semi| & |decl| & |int n;|\cr
-\+& |decl| |decl| & |decl| \hfill $D_1\,|force|\,D_2$ & |int n;double x;|\cr
-\+& |decl| \alt|stmt| |function| & \alt|stmt| |function|
-        \hfill $D\,|big_force|\,$\alt $S$ $F$ \unskip& \&{extern} $n$;
-            \\{main} ()|{}|\cr
+    & \&{long} \\{time}(\,) $\{$\cr
+\+& |decl_head| |semi| & |decl| & \&{int} $n$;\cr
+\+& |decl| |decl| & |decl| \hfill $D_1\,|force|\,D_2$
+    & \&{int} $n$; \&{double} $x$;\cr
+\+\dagit& |decl| \alt|stmt| |function| & \alt|stmt| |function|
+        \hfill $D\,|big_force|\,$\alt $S$ $F$ \unskip
+    & \&{extern} $n$; \\{main}(\,) $\{\,\}$\cr
 \+& |base| \alt |int_like| |exp| |comma| & |base| \hfill
-     $B$\.\ \alt $I$ $E$ \unskip$C$\,|opt|9
- & \malt {: \&{public} \&A,} {: $i(5)$,} \cr
+     $B$\.\ \alt $I$ $E$ \unskip $C$\,|opt|9
+    & \malt {: \&{public} \&A,} {: $i$(5),} \cr
 \+& |base| \alt |int_like| |exp| |lbrace| & |lbrace| \hfill
-     $B$\.\ \alt $I$ $E$ \unskip\.\ $L$ & \&D : \&{public} \&A $\{$\cr
+     $B$\.\ \alt $I$ $E$ \unskip \.\ $L$ & \&D : \&{public} \&A $\{$\cr
 \+& |struct_like| |lbrace| & |struct_head| \hfill $S\.\ L$ & |struct {|\cr
 \+& |struct_like| \alt|exp| |int_like| |semi| & |decl_head| |semi|
      \hfill $S\.\ $\alt $E^{**}$ $I^{**}$ & \&{struct} \&{forward};\cr
 \+& |struct_like| \alt|exp| |int_like| |lbrace| & |struct_head| \hfill
-     $S\.\ $\alt $E^{**}$ $I^{**}$ \unskip $\.\ L$ &
-              \&{struct} \&{name\_info} $\{$\cr
+     $S\.\ $\alt $E^{**}$ $I^{**}$ \unskip $\.\ L$
+    & \&{struct} \&{name\_info} $\{$\cr
 \+& |struct_like| \alt|exp| |int_like| |colon| &
     |struct_like| \alt|exp| |int_like| |base| & |class| \&C :\cr
 \+\dagit& |struct_like| \alt|exp| |int_like| & |int_like|
-        \hfill $S\.\ $\alt$E$ $I$ & \&{struct} \&{name\_info} $z$;\cr
+        \hfill $S\.\ $\alt$E$ $I$ \unskip & \&{struct} \&{name\_info} $z$;\cr
 \+& |struct_head| \altt|decl| |stmt| |function| |rbrace| & |int_like|\hfill
-         $S\,\\{in}\,|force|$\altt$D$ $S$ $F$ $\\{out}\,|force|\,R$ &
-                                        |struct {| declaration |}|\cr
-\+& |struct_head| |rbrace| & |int_like|\hfill $S\.{\\,}R$ & |class C{}|\cr
+         $S\,\\{in}\,|force|$\altt$D$ $S$ $F$ \unskip $\\{out}\,|force|\,R$
+    & |struct {| declaration |}|\cr
+\+& |struct_head| |rbrace| & |int_like|\hfill $S\.{\\,}R$
+    & \&{class} \&C $\{\,\}$\cr
 \+& |fn_decl| |decl| & |fn_decl| \hfill $F\,|force|\,D$
-                                       & $f(z)$ \&{double} $z$; \cr
-\+& |fn_decl| |stmt| & |function| \hfill $F\,|out|\,|out|\,|force|\,S$
-                                       & \\{main}() {\dots}\cr
+    & $f(z)$ \&{double} $z$; \cr
+\+\dagit& |fn_decl| |stmt| & |function| \hfill $F\,|out|\,|out|\,|force|\,S$
+    & \\{main}() {\dots}\cr
 \+& |function| \altt|stmt| |decl| |function| & \altt |stmt| |decl| |function|
-   \hfill $F\,|big_force|\,$\altt $S$ $D$ $F$ & outer block\cr
+   \hfill $F\,|big_force|\,$\altt $S$ $D$ $F$ \unskip & outer block\cr
 \+& |lbrace| |rbrace| & |stmt| \hfill $L\.{\\,}R$ & empty statement\cr
 \advance\midcol35pt
 \+& |lbrace| \altt|stmt| |decl| |function| |rbrace| & |stmt| \hfill
@@ -156,45 +159,49 @@
                 |force|\,\\{back}\,R\,\\{out}\,|force|$ & compound statement\cr
 \advance\midcol-20pt
 \+& |lbrace| |exp| [|comma|] |rbrace| & |exp| & initializer\cr
-\+& |if_like| |exp| & |if_clause| \hfill $I\.{\ }E$ & |if (z)|\cr
-\+& |else_like| |colon| & |else_like| |base| & \&{try} :\cr
-\+& |else_like| |lbrace| & |else_head| |lbrace| & \&{else} $\{$\cr
+\+& |if_like| |exp| & |if_clause| \hfill $I\.{\ }E$ & \&{if} ($z$)\cr
+\+& |else_like| |colon| & |else_like| |base| & |try :|\cr
+\+& |else_like| |lbrace| & |else_head| |lbrace| & |else {|\cr
 \+& |else_like| |stmt| & |stmt| \hfill
-       $|force|\,E\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|$ & $\!\!$|else x=0;|\cr
+       $|force|\,E\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|$
+    & \&{else} $x=0;$\cr
 \+& |else_head| \alt|stmt| |exp| & |stmt| \hfill
-      $|force|\,E\,\\{bsp}\,|noop|\,|cancel|\,S\,\\{bsp}$ & $\!\!$|else{x=0;}|\cr
-\+& |if_clause| |lbrace| & |if_head| |lbrace| & |if (x) {|\cr
+       $|force|\,E\,\\{bsp}\,|noop|\,|cancel|\,S\,\\{bsp}$
+    & $\!\!$ \&{else} $\{x=0;\}$\cr
+\+& |if_clause| |lbrace| & |if_head| |lbrace| & \&{if} ($x$) $\{$\cr
 \+& |if_clause| |stmt| |else_like| |if_like| & |if_like| \hfill
-    $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E\,\.\ I$ &
-     $\!\!$|if (x) y; else if|\cr
+       $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E\,\.\ I$
+    & $\!\!$ \&{if} ($x$) $y$; \&{else} \&{if}\cr
 \+& |if_clause| |stmt| |else_like| & |else_like| \hfill
-    $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E$ &
-   $\!\!$|if (x) y; else|\cr
-\+& |if_clause| |stmt| & |else_like| |stmt| & |if (x)|\cr
+       $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E$
+    & $\!\!$ \&{if} ($x$) $y$; \&{else}\cr
+\+& |if_clause| |stmt| & |else_like| |stmt| & $\!\!$ \&{if} ($x$) $y$;\cr
 \+& |if_head| \alt|stmt| |exp| |else_like| |if_like| & |if_like| \hfill
-    $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E\,\.\ I$ &
-     $\!\!$|if (x){y;}else if|\cr
+       $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E\,\.\ I$
+    & $\!\!$ \&{if} ($x$) $\{\,y;\,\}$ \&{else} \&{if}\cr
 \+& |if_head| \alt|stmt| |exp| |else_like| & |else_like| \hfill
-    $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E$ &
-   $\!\!$|if (x){y;}else|\cr
-\+& |if_head| \alt|stmt| |exp| & |else_head| \alt|stmt| |exp| & $\!\!$|if (x){y;}|\cr
+       $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E$
+    & $\!\!$ \&{if} ($x$) $\{\,y;\,\}$ \&{else}\cr
+\+& |if_head| \alt|stmt| |exp| & |else_head| \alt|stmt| |exp|
+    & $\!\!$ \&{if} ($x$) ${}\{\,y\,\}{}$\cr
 \advance\midcol20pt
 \+& |do_like| |stmt| |else_like| |semi| & |stmt| \hfill
       $D\,\\{bsp}\,|noop|\,|cancel|\,S\,|cancel|\,|noop|\,\\{bsp}\,ES$%
-      &       |do f(x); while (g(x));|\cr
+      & \&{do} $f$($x$); \&{while} ($g$($x$));\cr
 \advance\midcol-20pt
 \+& |case_like| |semi| & |stmt| & |return;|\cr
 \+& |case_like| |colon| & |tag| & |default:|\cr
 \+& |case_like| |exp| & |exp| \hfill $C\.\ E$ & |return 0|\cr
-\+& |catch_like| \alt|cast| |exp| & |fn_decl| \hfill
-    $C$\alt $C$ $E$ \\{in}\,\\{in} & |catch (...)|\cr
+\+\dagit& |catch_like| \alt|cast| |exp| & |fn_decl| \hfill
+    $C$\alt $C$ $E$ \unskip \\{din} & |catch (...)|\cr
 \+& |tag| |tag| & |tag| \hfill $T_1\,\\{bsp}\,T_2$ & |case 0: case 1:|\cr
 \+& |tag| \altt|stmt| |decl| |function| & \altt|stmt| |decl| |function|
-       \hfill $|force|\,\\{back}\,T\,\\{bsp}\,S$ & $\!\!$|case 0: z=0;|\cr
+       \hfill $|force|\,\\{back}\,T\,\\{bsp}\,S$
+    & $\!\!$ \&{case} 0: $z=0;$\cr
 \+\dagit& |stmt| \altt|stmt| |decl| |function| &
    \altt|stmt| |decl| |function|
-      \hfill $S\,$\altt$|force|\,S$ $|big_force|\,D$ $|big_force|\,F$ &
-      |x=1;y=2;|\cr
+      \hfill $S\,$\altt$|force|\,S$ $|big_force|\,D$ $|big_force|\,F$ \unskip
+    & $x=1;$ $y=2;$\cr
 \+& |semi| & |stmt| \hfill \.\ $S$& empty statement\cr
 \+\dagit& |lproc| \altt |if_like| |else_like| |define_like| & |lproc| &
          \maltt {\#\&{include}} \#\&{else} \#\&{define} \cr
@@ -205,7 +212,7 @@
 \+& |section_scrap| |semi| & |stmt|\hfill $MS$ |force|
    &$\langle\,$section name$\,\rangle$;\cr
 \+& |section_scrap| & |exp| &$\langle\,$section name$\,\rangle$\cr
-\+& |insert| |any| & |any| & \.{\v\#include\v}\cr
+\+& |insert| \\{any} & \\{any} & \.{\v\#include\v}\cr
 \+& |prelangle| & |binop| \hfill \.< & $<$ not in template\cr
 \+& |prerangle| & |binop| \hfill \.> & $>$ not in template\cr
 \+& |langle| |prerangle| & |cast| \hfill $L\.{\\,}P$ & $\langle\,\rangle$\cr
@@ -212,15 +219,15 @@
 \+& |langle| \altt|decl_head| |int_like| |exp| |prerangle| & |cast| &
      $\langle\&{class}\,\&C\rangle$\cr
 \+& |langle| \altt|decl_head| |int_like| |exp| |comma| & |langle| \hfill
-     $L$\,\altt $D$ $I$ $E$ $C$\,|opt|9 & $\langle\&{class}\,\&C,$\cr
+     $L$\,\altt $D$ $I$ $E$ \unskip $C$\,|opt|9 & $\langle\&{class}\,\&C,$\cr
 \+& |template_like| |exp| |prelangle| & |template_like| |exp| |langle| &
   \&{template} $a\langle100\rangle$\cr
 \+& |template_like| \alt|exp| |raw_int| & \alt|exp| |raw_int| \hfill
-    $T$\.\ \alt$E$ $R$ & \&C\DC\&{template} |a()|\cr
+    $T$\.\ \alt$E$ $R$ & \&C\DC\&{template} $a$(\,)\cr
 \+& |template_like| & |raw_int| & \&{template}$\langle\&{class}\,\&T\rangle$\cr
 \+& |new_like| |lpar| |exp| |rpar| & |new_like| & \&{new}(\\{nothrow})\cr
 \+& |new_like| |cast| & |exp| \hfill $N\.\ C$ & |new(int*)|\cr
-\+\dagit& |new_like| & |new_exp| & \&{new} \&C|()|\cr
+\+\dagit& |new_like| & |new_exp| & \&{new} \&C(\,)\cr
 \+& |new_exp| \alt|int_like| |const_like| & |new_exp| \hfill
     $N$\.\ \alt $I$ $C$ & |new const int|\cr
 \+& |new_exp| |struct_like| \alt |exp| |int_like| & |new_exp| \hfill
@@ -227,22 +234,22 @@
     $N\.\ S$\.\ \alt $E$ $I$ & \&{new} \&{struct} \&S\cr
 \+& |new_exp| |raw_ubin| & |new_exp| \hfill $N\.\{R\.\}$ & |new int*[2]|\cr
 \+& |new_exp| \alt |lpar| |exp| & |exp| \alt |lpar| |exp| \hfill
-    $E=N$\,\alt {} {\.\ } & \malt |operator[](int)| {|new int(2)|} \cr
+    $E=N$\,\alt {} {\.\ } & \malt {|operator[](int)|} {|new int(2)|} \cr
 \+\dagit& |new_exp| & |exp| & |new int;|\cr
 \+& |ftemplate| |prelangle| & |ftemplate| |langle| & |make_pair<int,int>|\cr
 \+& |ftemplate| & |exp| & |make_pair(1,2)|\cr
 \+& |for_like| |exp| & |else_like| \hfill $F\.\ E$ & |while (1)|\cr
 \+& |raw_ubin| |const_like| & |raw_ubin| \hfill $RC$\.{\\\ }
-     & $*$\&{const} |x|\cr
-\+& |raw_ubin| & |ubinop| & $*$ |x|\cr
-\+& |const_like| & |int_like| & \&{const} |x|\cr
+     & $*$\&{const} $x$\cr
+\+& |raw_ubin| & |ubinop| & $*$ $x$\cr
+\+& |const_like| & |int_like| & \&{const} $x$\cr
 \+& |raw_int| |prelangle| & |raw_int| |langle| & \&C$\langle$\cr
 \+& |raw_int| |colcol| & |colcol| & \&C\DC\cr
 \+& |raw_int| |cast| & |raw_int| & \&C$\langle\&{class}\ \&T\rangle$\cr
 \+& |raw_int| |lpar| & |exp| |lpar| & \&{complex}$(x,y)$\cr
-\+\dagit& |raw_int| & |int_like|   & \&{complex} |z|\cr
+\+\dagit& |raw_int| & |int_like|   & \&{complex} $z$\cr
 \+\dagit& |operator_like| \altt|binop| |unop| |ubinop| & |exp|
-    \hfill $O$\.\{\altt $B$ $U$ $U$ \unskip\.\} & |operator+|\cr
+    \hfill $O$\.\{\altt $B$ $U$ $U$ \unskip \.\} & |operator+|\cr
 \+& |operator_like| \alt|new_like| |delete_like| & |exp| \hfill
     $O$\.\ \alt $N$ $S$ & |operator delete|\cr
 \+& |operator_like| |comma| & |exp| & \&{operator},\cr
@@ -257,75 +264,82 @@
 \+\dag202\enspace& |typedef_like| |int_like| |raw_int| & |typedef_like| |int_like| |exp| &
   \&{typedef} \&{int} \&{foo}\cr
 \global\prodno=121
-\+& |delete_like| |lpar| |rpar| & |delete_like|\hfill $DL\.{\\,}R$ &
-    \&{delete}|[]| \cr
-\+& |delete_like| |exp| & |exp| \hfill $D\.\ E$ & |delete p| \cr
-\+\dagit& |question| |exp| \alt |colon| |base| & |binop| &
-    \malt |?x:| |?f():| \cr
+\+& |delete_like| |lpar| |rpar| & |delete_like|\hfill $DL\.{\\,}R$
+    & \&{delete}[\,] \cr
+\+& |delete_like| |exp| & |exp| \hfill $D\.\ E$ & \&{delete} $p$ \cr
+\+\dagit& |question| |exp| \alt |colon| |base| & |binop|
+    & \malt {$\?x:$} {$\?f(\,):$} \cr
 \+& |begin_arg| |end_arg| & |exp| & \.{@@[}\&{char}$*$\.{@@]}\cr
-\+& |any_other| |end_arg| & |end_arg| &    \&{char}$*$\.{@@]}\cr
-\+& |alignas_like| |decl_head| & |attr| & |alignas(struct s *)| \cr
+\+& \\{any\_other} |end_arg| & |end_arg| &    \&{char}$*$\.{@@]}\cr
+\+& |alignas_like| |decl_head| & |attr| & \&{alignas}(\&{struct} $s$ ${*})$ \cr
 \+& |alignas_like| |exp| & |attr| & |alignas(8)| \cr
 \+& |lbrack| |lbrack| & |attr_head| & attribute begins \cr
 \+& |lbrack| & |lpar| & |[| elsewhere \cr
 \+& |rbrack| & |rpar| & |]| elsewhere \cr
-\+& |attr_head| |rbrack| |rbrack| & |attr| & $[[\ldots]]$ \cr
-\+& |attr_head| |exp| & |attr_head| & $[[$|deprecated| \cr
-\+& |attr_head| |using_like| |exp| |colon| & |attr_head| & $[[$|using NS:| \cr
-\+& |attr| \alt|lbrace| |stmt| & \alt|lbrace| |stmt| \hfill $A\.\ $ \alt $S$ $L$ &
-  |[[likely]] {|\cr
+\+& |attr_head| |rbrack| |rbrack| & |attr| & |[[@t\dots@>]]| \cr
+\+& |attr_head| |exp| & |attr_head| & |[[deprecated| \cr
+\+& |attr_head| |using_like| |exp| |colon| & |attr_head|
+    & [[\&{using} \.{NS}: \cr
+\+& |attr| \alt|lbrace| |stmt| & \alt|lbrace| |stmt| \hfill
+       $A$\.\ \alt $S$ $L$ & |[[likely]] {|\cr
 \+& |attr| |tag| & |tag| \hfill $A\.\ T$ & |[[likely]] case 0:| \cr
 \+& |attr| |semi| & |stmt| & |[[fallthrough]];| \cr
-\+& |attr| |attr| & |attr| \hfill $A\.\ A$ & |alignas(x)| $[[\ldots]]$ \cr
-\+& |attr| |decl_head| & |decl_head| & |[[nodiscard]] f()| \cr
-\+& |decl_head| |attr| & |decl_head| & |(int x [[deprecated]])|\cr
+\+& |attr| |attr| & |attr| \hfill $A_1\.\ A_2$
+    & \&{alignas}($x$) [[\hbox{\dots}]] \cr
+\+& |attr| |decl_head| & |decl_head| & [[\\{nodiscard}]] $f$(\,) \cr
+\+& |decl_head| |attr| & |decl_head| & (\&{int} $x$ [[\\{deprecated}]])\cr
 \+& |using_like| & |int_like| & \&{using} not in attributes \cr
-\+& |struct_like| |attr| & |struct_like| \hfill $S\.\ A$ &
-  |struct [[deprecated]]|\cr
+\+& |struct_like| |attr| & |struct_like| \hfill $S\.\ A$
+    & \&{struct} [[\\{deprecated}]]\cr
 \+& |exp| |attr| & |attr| \hfill $E\.\ A$ & \&{enum} $\{x\ [[\ldots]]\}$ \cr
-\+& |attr| |typedef_like| & |typedef_like| \hfill $A\.\ T$ &
-  |[[deprecated]] typedef| \cr
+\+& |attr| |typedef_like| & |typedef_like| \hfill $A\.\ T$
+    & |[[deprecated]] typedef| \cr
 \+& |raw_int| |lbrack| & |exp| & |int[3]| \cr
-\+& |attr_head| |comma| & |attr_head| & $[[$|x, y| \cr
-\+& |if_head| |attr| & |if_head| \hfill $I\.\ A$ & |if (x) [[unlikely]] {| \cr
+\+& |attr_head| |comma| & |attr_head| & $[[x,y$ \cr
+\+& |if_head| |attr| & |if_head| \hfill $I\.\ A$
+    & \&{if} ($x$) [[\\{unlikely}]] $\{$ \cr
 \+& |lbrack| |lbrack| |rbrack| |rbrack| & |exp| & |[[]]| \cr
-\+& |attr| |function| & |function| \hfill $A\.\ F$ &
-  attribute and function \cr
+\+& |attr| |function| & |function| \hfill $A\.\ F$
+    & attribute and function \cr
 \+& |default_like| |colon| & |case_like| |colon| & |default:| \cr
-\+& |default_like| & |exp| & |f()=default;| \cr
-\+& |struct_like| |struct_like| & |struct_like| \hfill $S\.\ S$ &
-  |enum class| \cr
+\+& |default_like| & |exp| & $f(\,)=\&{default};$ \cr
+\+& |struct_like| |struct_like| & |struct_like| \hfill $S_1\.\ S_2$
+    & |enum class| \cr
 \+& |exp| |colcol| |int_like| & |int_like| & $\\{std}\DC\&{atomic}$ \cr
-\advance\midcol-60pt
+\advance\midcol-30pt
 \+\dagit& |langle| |struct_like| \alt |exp| |int_like| |comma| &
-  |langle| \hfill $LS$\alt $E^{**}$ $I^{**}$ $C$ & $\langle$\&{typename} $t,$\cr
+  |langle| \hfill $LS$\alt $E^{**}$ $I^{**}$ \unskip $C$
+   & $\langle$\&{typename} $t,$\cr
 \+\dagit& |langle| |struct_like| \alt |exp| |int_like| |prerangle| &
-  |cast| \hfill $LS$\alt $E^{**}$ $I^{**}$ $P$ &
-  \hbox{$\langle$\&{typename} $t\rangle$} \hss \cr
-\advance\midcol60pt
+  |cast| \hfill $LS$\alt $E^{**}$ $I^{**}$ \unskip $P$
+    & $\langle$\&{typename} $t\rangle$ \cr
+\advance\midcol30pt
 \+& |template_like| |cast| |struct_like| & |struct_like| \hfill $T\.\ CS$ &
   |template<@t\dots@>> class| \cr
 \+& |tag| |rbrace| & |decl| |rbrace| & @q{@>|public: }| \cr
-\+& |fn_decl| |attr| & |fn_decl| \hfill $F\.\ A$ & |void f() noexcept| \cr
+\+& |fn_decl| |attr| & |fn_decl| \hfill $F\.\ A$
+    & \&{void} $f$(\,) \&{noexcept} \cr
 \+& |alignas_like| |cast| & |attr| & |alignas(int)| \cr
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
+\vfill\break
 \parindent=0pt
+\everypar={\hangindent=2em}
 \dag{\bf Notes}
 \yskip
+Rules 1, 38, 52, and 73: The \\{din}s and \\{out}s are suppressed if
+\.{CWEAVE} has been invoked with the \.{-i} option.
+
 Rule 35: The |exp| must not be immediately followed by |lpar|, |lbrack|,
 |exp|, or~|cast|.
 
+Rule 41: The |big_force| becomes |force| if \.{CWEAVE} has been invoked with the
+\.{-o} option.
+
 Rule 48: The |exp| or |int_like| must not be immediately followed by |base|.
 
 Rule 76: The |force| in the |stmt| line becomes \\{bsp} if \.{CWEAVE} has
-been invoked with the \.{-f} option.
+been invoked with the \.{-f} option, and the |big_force| in the |decl| and
+|function| lines becomes |force| if \.{CWEAVE} has been invoked with the
+\.{-o} option.
 
 Rule 78: The |define_like| case calls |make_underlined| on the following scrap.
 
@@ -344,8 +358,8 @@
 
 Rule 123: The mathness of the |colon| or |base| changes to `yes'.
 
-Rules 153, 154: |make_reserved| is called only if the \.{+t} option is given
-to \.{CWEAVE}.
+Rules 153, 154: |make_reserved| is called only if \.{CWEAVE} has been invoked
+with the \.{+t} option.
 
 Rule 200: The |exp| must not be immediately followed by |lpar| or~|exp|.
 

Modified: trunk/Build/source/texk/web2c/cwebdir/prod.w
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/prod.w	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/cwebdir/prod.w	2021-09-16 11:13:15 UTC (rev 60519)
@@ -54,101 +54,104 @@
 \yskip
 \+& \altt\\{any} {\\{any} \\{any}} {\\{any} \\{any} \\{any}}
 |insert| & \altt\\{any} {\\{any} \\{any}} {\\{any} \\{any} \\{any}}
-& stmt; \ /$\ast\,$comment$\,*$/\cr
+& stmt; \4\4 \C{comment}\cr
 \+& |exp| \altt|lbrace| |int_like| |decl|
-    & |fn_decl| \altt|lbrace| |int_like| |decl|
-        \hfill $F=E^*\,\\{din}$ & \malt {\\{main}()$\{$}
-           {\\{main}$(\\{ac},\\{av})$ \&{int} \\{ac};} \cr
-\+& |exp| |unop| & |exp| & |x++|\cr
-\+& |exp| \alt |binop| |ubinop| |exp| & |exp| & \malt {|x/y|} {|x+y|} \cr
-\+& |exp| |comma| |exp| & |exp| \hfill $EC\,|opt|9\,E$& |f(x,y)|\cr
-\+& |exp| \alt {|lpar| |rpar|} |cast| |colon| &
-    |exp| \alt {|lpar| |rpar|} |cast| |base| &
-     \malt \&C|()|: {\&C|(int i)|:} \cr
-\+& |exp| |semi| & |stmt| & |x=0;|\cr
-\+& |exp| |colon| & |tag| \hfill $E^*C$ & |found:|\cr
+    & |fn_decl| \altt|lbrace| |int_like| |decl| \hfill $F=E^*\,\\{din}$
+    & \malt {\\{main}(\,) $\{$}
+            {$\\{main}(\\{ac},\\{av}){}$ \&{int} \\{ac};} \cr
+\+& |exp| |unop| & |exp| & $x\PP$ \cr
+\+& |exp| \alt |binop| |ubinop| |exp| & |exp| & \malt {$x/y$} {$x+y$} \cr
+\+& |exp| |comma| |exp| & |exp| \hfill $E_1C\,|opt|9\,E_2$ & $f(x,y)$ \cr
+\+& |exp| \alt {|lpar| |rpar|} |cast| |colon|
+    & |exp| \alt {|lpar| |rpar|} |cast| |base|
+    & \malt {\&C(\,) :} {\&C(\&{int} $i$) :} \cr
+\+& |exp| |semi| & |stmt| & $x=0;$ \cr
+\+& |exp| |colon| & |tag| \hfill $E^*C$ & \\{found}: \cr
 \+& |exp| |rbrace| & |stmt| |rbrace| & end of \&{enum} list\cr
-\+& |exp| \alt {|lpar| |rpar|} |cast| \alt|const_like| |case_like| &
-      |exp| \alt {|lpar| |rpar|} |cast| \hfill
-       \alt $R=R\.\ C$ $C_1=C_1\.\ C_2$ & 
-      \malt {|f() const|} {|f(int) throw|} \cr
-\+& |exp| \alt |exp| |cast| & |exp| & |time()|\cr
-\+& |lpar| \alt |exp| |ubinop| |rpar| & |exp| & \malt{|(x)|} {|(*)|} \cr
+\+& |exp| \alt {|lpar| |rpar|} |cast| \alt|const_like| |case_like|
+    & |exp| \alt {|lpar| |rpar|} |cast| \hfill
+       \alt $R=R\.\ C$ $C_1=C_1\.\ C_2$
+    & \malt {$f$(\,) \&{const}} {$f$(\&{int}) \&{throw}} \cr
+\+& |exp| \alt |exp| |cast| & |exp| & \\{time}(\,) \cr
+\+& |lpar| \alt |exp| |ubinop| |rpar| & |exp| & \malt{($x$)} {$(*)$} \cr
 \+& |lpar| |rpar| & |exp| \hfill $L\.{\\,}R$ & functions, declarations\cr
 \+& |lpar| \altt |decl_head| |int_like| |cast| |rpar| & |cast| & |(char*)|\cr
 \+& |lpar| \altt |decl_head| |int_like| |exp| |comma| & |lpar| \hfill
-     $L$\,\altt $D$ $I$ $E$ $C$\,|opt|9 & |(int,|\cr
-\+& |lpar| \alt |stmt| |decl| & |lpar| \hfill \alt {$LS\.\ $} {$LD\.\ $} &
-    \malt {|(k=5;|} {|(int k=5;|} \cr
-\+& |unop| \alt |exp| |int_like| & |exp| &
-      \malt |!x| |~|\&C \cr
+     $L$\,\altt $D$ $I$ $E$ \unskip $C$\,|opt|9 & |(int,|\cr
+\+& |lpar| \alt |stmt| |decl| & |lpar| \hfill \alt {$LS\.\ $} {$LD\.\ $}
+    & \malt {$(k=5;$} {(\&{int} $k=5;$} \cr
+\+& |unop| \alt |exp| |int_like| & |exp|
+    & \malt {$\R x$} {$\CM\&C$} \cr
 \+& |ubinop| |cast| |rpar| & |cast| |rpar| \hfill
       $C=\.\{U\.\}C$ & |*|\&{CPtr}) \cr
 \+& |ubinop| \alt|exp| |int_like| & \alt|exp| |int_like| \hfill
-  \.\{$U$\.\}\alt$E$ $I$ & \malt |*x| |*|\&{CPtr} \cr
+  \.\{$U$\.\}\alt$E$ $I$ & \malt {${*}x$} {${*}\&{CPtr}$} \cr
 \+& |ubinop| |binop| & |binop| \hfill $|math_rel|\,U\.\{B\.\}\.\}$ & |*=|\cr
 \+& |binop| |binop| & |binop| \hfill
                         $|math_rel|\,\.\{B_1\.\}\.\{B_2\.\}\.\}$ & |>>=|\cr
 \+& |cast| \alt |lpar| |exp| & \alt |lpar| |exp| \hfill
-  \alt $CL$ $C\.\ E$ & \malt |(double)(x+2)| |(double)x| \cr
+  \alt $CL$ $C\.\ E$ & \malt {$(\&{double})(x+2)$} {(\&{double}) $x$} \cr
 \+& |cast| |semi| & |exp| |semi| & |(int);|\cr
 \+& |sizeof_like| |cast| & |exp| & |sizeof (double)|\cr
-\+& |sizeof_like| |exp| & |exp| \hfill $S\.\ E$ & |sizeof x|\cr
+\+& |sizeof_like| |exp| & |exp| \hfill $S\.\ E$ & \&{sizeof} $x$\cr
 \+& |int_like| \alt|int_like| |struct_like| &
         \alt|int_like| |struct_like| \hfill $I\.\ $\alt $I$ $S$
-        \unskip& |extern char|\cr
+        \unskip & |extern char|\cr
 \+& |int_like| |exp| \alt|raw_int| |struct_like| &
          |int_like| \alt|raw_int| |struct_like| & |extern "Ada" int|\cr
 \+& |int_like| \altt|exp| |ubinop| |colon| &
-   |decl_head| \altt|exp| |ubinop| |colon| \hfill
-         $D=I$\.\  & \maltt|int x| |int*x| |unsigned:| \cr
-\+& |int_like| \alt |semi| |binop| & |decl_head| \alt |semi| |binop| &
-        \malt |int x;| {\&{int} $f(\&{int}=4)$} \cr
-\+& |public_like| |colon| & |tag| & \&{private}:\cr
-\+& |public_like| & |int_like| & \&{private}\cr
+   |decl_head| \altt|exp| |ubinop| |colon| \hfill $D=I$\.\ %
+    & \maltt {\&{int} $x$} {\&{int} ${}{*}x$} {\&{unsigned} :} \cr
+\+& |int_like| \alt |semi| |binop| & |decl_head| \alt |semi| |binop|
+    & \malt {\&{int} $x$;} {\&{int} $f(\&{int}=4)$} \cr
+\+& |public_like| |colon| & |tag| & |private:|\cr
+\+& |public_like| & |int_like| & |private|\cr
 \+& |colcol| \alt|exp| |int_like| & \alt|exp| |int_like| \hfill
-     |qualifier| $C$ \alt$E$ $I$ & \&C\DC$x$\cr
+     |qualifier| $C$\alt$E$ $I$ & \&C\DC$x$\cr
 \+& |colcol| |colcol| & |colcol| & \&C\DC\&B\DC\cr
-\+& |decl_head| |comma| & |decl_head| \hfill $DC\.\ $ & |int x,|\cr
+\+& |decl_head| |comma| & |decl_head| \hfill $DC\.\ $ & \&{int} $x,{}$ \cr
 \+& |decl_head| |ubinop| & |decl_head| \hfill $D\.\{U\.\}$ & |int *|\cr
-\+\dagit& |decl_head| |exp| & |decl_head| \hfill $DE^*$ & |int x|\cr
+\+\dagit& |decl_head| |exp| & |decl_head| \hfill $DE^*$ & \&{int} $x$ \cr
 \+& |decl_head| \alt|binop| |colon| |exp| \altt|comma| |semi| |rpar| &
      |decl_head| \altt|comma| |semi| |rpar| \hfill
-     $D=D$\alt $B$ $C$ \unskip$E$ & \malt {\&{int} $f(\&{int}\ x=2)$} |int b:1| \cr
-\+& |decl_head| |cast| & |decl_head| & |int f(int)|\cr
+     $D=D$\alt $B$ $C$ \unskip $E$
+    & \malt {\&{int} $f(\&{int}\ x=2)$} {\&{int} $b$ : 1} \cr
+\+& |decl_head| |cast| & |decl_head| & \&{int} $f$(\&{int})\cr
 \+& |decl_head| \altt|int_like| |lbrace| |decl| & |fn_decl|
                    \altt|int_like| |lbrace| |decl| \hfill $F=D\,\\{din}$
-                             & |long time () {|\cr
-\+& |decl_head| |semi| & |decl| & |int n;|\cr
-\+& |decl| |decl| & |decl| \hfill $D_1\,|force|\,D_2$ & |int n;double x;|\cr
+    & \&{long} \\{time}(\,) $\{$\cr
+\+& |decl_head| |semi| & |decl| & \&{int} $n$;\cr
+\+& |decl| |decl| & |decl| \hfill $D_1\,|force|\,D_2$
+    & \&{int} $n$; \&{double} $x$;\cr
 \+& |decl| \alt|stmt| |function| & \alt|stmt| |function|
-        \hfill $D\,|big_force|\,$\alt $S$ $F$ \unskip& \&{extern} $n$;
-            \\{main} ()|{}|\cr
+        \hfill $D\,|big_force|\,$\alt $S$ $F$ \unskip
+    & \&{extern} $n$; \\{main}(\,) $\{\,\}$\cr
 \+& |base| \alt |int_like| |exp| |comma| & |base| \hfill
-     $B$\.\ \alt $I$ $E$ \unskip$C$\,|opt|9
- & \malt {: \&{public} \&A,} {: $i(5)$,} \cr
+     $B$\.\ \alt $I$ $E$ \unskip $C$\,|opt|9
+    & \malt {: \&{public} \&A,} {: $i$(5),} \cr
 \+& |base| \alt |int_like| |exp| |lbrace| & |lbrace| \hfill
-     $B$\.\ \alt $I$ $E$ \unskip\.\ $L$ & \&D : \&{public} \&A $\{$\cr
+     $B$\.\ \alt $I$ $E$ \unskip \.\ $L$ & \&D : \&{public} \&A $\{$\cr
 \+& |struct_like| |lbrace| & |struct_head| \hfill $S\.\ L$ & |struct {|\cr
 \+& |struct_like| \alt|exp| |int_like| |semi| & |decl_head| |semi|
      \hfill $S\.\ $\alt $E^{**}$ $I^{**}$ & \&{struct} \&{forward};\cr
 \+& |struct_like| \alt|exp| |int_like| |lbrace| & |struct_head| \hfill
-     $S\.\ $\alt $E^{**}$ $I^{**}$ \unskip $\.\ L$ &
-              \&{struct} \&{name\_info} $\{$\cr
+     $S\.\ $\alt $E^{**}$ $I^{**}$ \unskip $\.\ L$
+    & \&{struct} \&{name\_info} $\{$\cr
 \+& |struct_like| \alt|exp| |int_like| |colon| &
     |struct_like| \alt|exp| |int_like| |base| & |class| \&C :\cr
 \+\dagit& |struct_like| \alt|exp| |int_like| & |int_like|
-        \hfill $S\.\ $\alt$E$ $I$ & \&{struct} \&{name\_info} $z$;\cr
+        \hfill $S\.\ $\alt$E$ $I$ \unskip & \&{struct} \&{name\_info} $z$;\cr
 \+& |struct_head| \altt|decl| |stmt| |function| |rbrace| & |int_like|\hfill
-         $S\,\\{in}\,|force|$\altt$D$ $S$ $F$ $\\{out}\,|force|\,R$ &
-                                        |struct {| declaration |}|\cr
-\+& |struct_head| |rbrace| & |int_like|\hfill $S\.{\\,}R$ & |class C{}|\cr
+         $S\,\\{in}\,|force|$\altt$D$ $S$ $F$ \unskip $\\{out}\,|force|\,R$
+    & |struct {| declaration |}|\cr
+\+& |struct_head| |rbrace| & |int_like|\hfill $S\.{\\,}R$
+    & \&{class} \&C $\{\,\}$\cr
 \+& |fn_decl| |decl| & |fn_decl| \hfill $F\,|force|\,D$
-                                       & $f(z)$ \&{double} $z$; \cr
+    & $f(z)$ \&{double} $z$; \cr
 \+& |fn_decl| |stmt| & |function| \hfill $F\,|out|\,|out|\,|force|\,S$
-                                       & \\{main}() {\dots}\cr
+    & \\{main}() {\dots}\cr
 \+& |function| \altt|stmt| |decl| |function| & \altt |stmt| |decl| |function|
-   \hfill $F\,|big_force|\,$\altt $S$ $D$ $F$ & outer block\cr
+   \hfill $F\,|big_force|\,$\altt $S$ $D$ $F$ \unskip & outer block\cr
 \+& |lbrace| |rbrace| & |stmt| \hfill $L\.{\\,}R$ & empty statement\cr
 \advance\midcol35pt
 \+& |lbrace| \altt|stmt| |decl| |function| |rbrace| & |stmt| \hfill
@@ -156,45 +159,49 @@
                 |force|\,\\{back}\,R\,\\{out}\,|force|$ & compound statement\cr
 \advance\midcol-20pt
 \+& |lbrace| |exp| [|comma|] |rbrace| & |exp| & initializer\cr
-\+& |if_like| |exp| & |if_clause| \hfill $I\.{\ }E$ & |if (z)|\cr
-\+& |else_like| |colon| & |else_like| |base| & \&{try} :\cr
-\+& |else_like| |lbrace| & |else_head| |lbrace| & \&{else} $\{$\cr
+\+& |if_like| |exp| & |if_clause| \hfill $I\.{\ }E$ & \&{if} ($z$)\cr
+\+& |else_like| |colon| & |else_like| |base| & |try :|\cr
+\+& |else_like| |lbrace| & |else_head| |lbrace| & |else {|\cr
 \+& |else_like| |stmt| & |stmt| \hfill
-       $|force|\,E\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|$ & $\!\!$|else x=0;|\cr
+       $|force|\,E\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|$
+    & \&{else} $x=0;$\cr
 \+& |else_head| \alt|stmt| |exp| & |stmt| \hfill
-      $|force|\,E\,\\{bsp}\,|noop|\,|cancel|\,S\,\\{bsp}$ & $\!\!$|else{x=0;}|\cr
-\+& |if_clause| |lbrace| & |if_head| |lbrace| & |if (x) {|\cr
+       $|force|\,E\,\\{bsp}\,|noop|\,|cancel|\,S\,\\{bsp}$
+    & $\!\!$ \&{else} $\{x=0;\}$\cr
+\+& |if_clause| |lbrace| & |if_head| |lbrace| & \&{if} ($x$) $\{$\cr
 \+& |if_clause| |stmt| |else_like| |if_like| & |if_like| \hfill
-    $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E\,\.\ I$ &
-     $\!\!$|if (x) y; else if|\cr
+       $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E\,\.\ I$
+    & $\!\!$ \&{if} ($x$) $y$; \&{else} \&{if}\cr
 \+& |if_clause| |stmt| |else_like| & |else_like| \hfill
-    $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E$ &
-   $\!\!$|if (x) y; else|\cr
-\+& |if_clause| |stmt| & |else_like| |stmt| & |if (x)|\cr
+       $|force|\,I\,\\{in}\,\\{bsp}\,S\,\\{out}\,|force|\,E$
+    & $\!\!$ \&{if} ($x$) $y$; \&{else}\cr
+\+& |if_clause| |stmt| & |else_like| |stmt| & $\!\!$ \&{if} ($x$) $y$;\cr
 \+& |if_head| \alt|stmt| |exp| |else_like| |if_like| & |if_like| \hfill
-    $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E\,\.\ I$ &
-     $\!\!$|if (x){y;}else if|\cr
+       $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E\,\.\ I$
+    & $\!\!$ \&{if} ($x$) $\{\,y;\,\}$ \&{else} \&{if}\cr
 \+& |if_head| \alt|stmt| |exp| |else_like| & |else_like| \hfill
-    $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E$ &
-   $\!\!$|if (x){y;}else|\cr
-\+& |if_head| \alt|stmt| |exp| & |else_head| \alt|stmt| |exp| & $\!\!$|if (x){y;}|\cr
+       $|force|\,I\,\\{bsp}\,|noop|\,|cancel|\,S\,|force|\,E$
+    & $\!\!$ \&{if} ($x$) $\{\,y;\,\}$ \&{else}\cr
+\+& |if_head| \alt|stmt| |exp| & |else_head| \alt|stmt| |exp|
+    & $\!\!$ \&{if} ($x$) ${}\{\,y\,\}{}$\cr
 \advance\midcol20pt
 \+& |do_like| |stmt| |else_like| |semi| & |stmt| \hfill
       $D\,\\{bsp}\,|noop|\,|cancel|\,S\,|cancel|\,|noop|\,\\{bsp}\,ES$%
-      &       |do f(x); while (g(x));|\cr
+      & \&{do} $f$($x$); \&{while} ($g$($x$));\cr
 \advance\midcol-20pt
 \+& |case_like| |semi| & |stmt| & |return;|\cr
 \+& |case_like| |colon| & |tag| & |default:|\cr
 \+& |case_like| |exp| & |exp| \hfill $C\.\ E$ & |return 0|\cr
 \+& |catch_like| \alt|cast| |exp| & |fn_decl| \hfill
-    $C$\alt $C$ $E$ \\{in}\,\\{in} & |catch (...)|\cr
+    $C$\alt $C$ $E$ \unskip \\{din} & |catch (...)|\cr
 \+& |tag| |tag| & |tag| \hfill $T_1\,\\{bsp}\,T_2$ & |case 0: case 1:|\cr
 \+& |tag| \altt|stmt| |decl| |function| & \altt|stmt| |decl| |function|
-       \hfill $|force|\,\\{back}\,T\,\\{bsp}\,S$ & $\!\!$|case 0: z=0;|\cr
+       \hfill $|force|\,\\{back}\,T\,\\{bsp}\,S$
+    & $\!\!$ \&{case} 0: $z=0;$\cr
 \+\dagit& |stmt| \altt|stmt| |decl| |function| &
    \altt|stmt| |decl| |function|
-      \hfill $S\,$\altt$|force|\,S$ $|big_force|\,D$ $|big_force|\,F$ &
-      |x=1;y=2;|\cr
+      \hfill $S\,$\altt$|force|\,S$ $|big_force|\,D$ $|big_force|\,F$ \unskip
+    & $x=1;$ $y=2;$\cr
 \+& |semi| & |stmt| \hfill \.\ $S$& empty statement\cr
 \+\dagit& |lproc| \altt |if_like| |else_like| |define_like| & |lproc| &
          \maltt {\#\&{include}} \#\&{else} \#\&{define} \cr
@@ -205,7 +212,7 @@
 \+& |section_scrap| |semi| & |stmt|\hfill $MS$ |force|
    &$\langle\,$section name$\,\rangle$;\cr
 \+& |section_scrap| & |exp| &$\langle\,$section name$\,\rangle$\cr
-\+& |insert| |any| & |any| & \.{\v\#include\v}\cr
+\+& |insert| \\{any} & \\{any} & \.{\v\#include\v}\cr
 \+& |prelangle| & |binop| \hfill \.< & $<$ not in template\cr
 \+& |prerangle| & |binop| \hfill \.> & $>$ not in template\cr
 \+& |langle| |prerangle| & |cast| \hfill $L\.{\\,}P$ & $\langle\,\rangle$\cr
@@ -212,15 +219,15 @@
 \+& |langle| \altt|decl_head| |int_like| |exp| |prerangle| & |cast| &
      $\langle\&{class}\,\&C\rangle$\cr
 \+& |langle| \altt|decl_head| |int_like| |exp| |comma| & |langle| \hfill
-     $L$\,\altt $D$ $I$ $E$ $C$\,|opt|9 & $\langle\&{class}\,\&C,$\cr
+     $L$\,\altt $D$ $I$ $E$ \unskip $C$\,|opt|9 & $\langle\&{class}\,\&C,$\cr
 \+& |template_like| |exp| |prelangle| & |template_like| |exp| |langle| &
   \&{template} $a\langle100\rangle$\cr
 \+& |template_like| \alt|exp| |raw_int| & \alt|exp| |raw_int| \hfill
-    $T$\.\ \alt$E$ $R$ & \&C\DC\&{template} |a()|\cr
+    $T$\.\ \alt$E$ $R$ & \&C\DC\&{template} $a$(\,)\cr
 \+& |template_like| & |raw_int| & \&{template}$\langle\&{class}\,\&T\rangle$\cr
 \+& |new_like| |lpar| |exp| |rpar| & |new_like| & \&{new}(\\{nothrow})\cr
 \+& |new_like| |cast| & |exp| \hfill $N\.\ C$ & |new(int*)|\cr
-\+\dagit& |new_like| & |new_exp| & \&{new} \&C|()|\cr
+\+\dagit& |new_like| & |new_exp| & \&{new} \&C(\,)\cr
 \+& |new_exp| \alt|int_like| |const_like| & |new_exp| \hfill
     $N$\.\ \alt $I$ $C$ & |new const int|\cr
 \+& |new_exp| |struct_like| \alt |exp| |int_like| & |new_exp| \hfill
@@ -227,22 +234,22 @@
     $N\.\ S$\.\ \alt $E$ $I$ & \&{new} \&{struct} \&S\cr
 \+& |new_exp| |raw_ubin| & |new_exp| \hfill $N\.\{R\.\}$ & |new int*[2]|\cr
 \+& |new_exp| \alt |lpar| |exp| & |exp| \alt |lpar| |exp| \hfill
-    $E=N$\,\alt {} {\.\ } & \malt |operator[](int)| {|new int(2)|} \cr
+    $E=N$\,\alt {} {\.\ } & \malt {|operator[](int)|} {|new int(2)|} \cr
 \+\dagit& |new_exp| & |exp| & |new int;|\cr
 \+& |ftemplate| |prelangle| & |ftemplate| |langle| & |make_pair<int,int>|\cr
 \+& |ftemplate| & |exp| & |make_pair(1,2)|\cr
 \+& |for_like| |exp| & |else_like| \hfill $F\.\ E$ & |while (1)|\cr
 \+& |raw_ubin| |const_like| & |raw_ubin| \hfill $RC$\.{\\\ }
-     & $*$\&{const} |x|\cr
-\+& |raw_ubin| & |ubinop| & $*$ |x|\cr
-\+& |const_like| & |int_like| & \&{const} |x|\cr
+     & $*$\&{const} $x$\cr
+\+& |raw_ubin| & |ubinop| & $*$ $x$\cr
+\+& |const_like| & |int_like| & \&{const} $x$\cr
 \+& |raw_int| |prelangle| & |raw_int| |langle| & \&C$\langle$\cr
 \+& |raw_int| |colcol| & |colcol| & \&C\DC\cr
 \+& |raw_int| |cast| & |raw_int| & \&C$\langle\&{class}\ \&T\rangle$\cr
 \+& |raw_int| |lpar| & |exp| |lpar| & \&{complex}$(x,y)$\cr
-\+\dagit& |raw_int| & |int_like|   & \&{complex} |z|\cr
+\+\dagit& |raw_int| & |int_like|   & \&{complex} $z$\cr
 \+\dagit& |operator_like| \altt|binop| |unop| |ubinop| & |exp|
-    \hfill $O$\.\{\altt $B$ $U$ $U$ \unskip\.\} & |operator+|\cr
+    \hfill $O$\.\{\altt $B$ $U$ $U$ \unskip \.\} & |operator+|\cr
 \+& |operator_like| \alt|new_like| |delete_like| & |exp| \hfill
     $O$\.\ \alt $N$ $S$ & |operator delete|\cr
 \+& |operator_like| |comma| & |exp| & \&{operator},\cr
@@ -262,65 +269,63 @@
     |typedef_like| \alt |cast| |ubinop| \hfill
     \alt $C=\.\{U\.\}C$ $U_2=\.\{U_1\.\}U_2$ \unskip &
     \&{typedef} |*|{}|*|(\&{CPtr})\cr
-\+& |delete_like| |lpar| |rpar| & |delete_like|\hfill $DL\.{\\,}R$ &
-    \&{delete}|[]| \cr
-\+& |delete_like| |exp| & |exp| \hfill $D\.\ E$ & |delete p| \cr
-\+\dagit& |question| |exp| \alt |colon| |base| & |binop| &
-    \malt |?x:| |?f():| \cr
+\+& |delete_like| |lpar| |rpar| & |delete_like|\hfill $DL\.{\\,}R$
+    & \&{delete}[\,] \cr
+\+& |delete_like| |exp| & |exp| \hfill $D\.\ E$ & \&{delete} $p$ \cr
+\+\dagit& |question| |exp| \alt |colon| |base| & |binop|
+    & \malt {$\?x:$} {$\?f(\,):$} \cr
 \+& |begin_arg| |end_arg| & |exp| & \.{@@[}\&{char}$*$\.{@@]}\cr
-\+& |any_other| |end_arg| & |end_arg| &    \&{char}$*$\.{@@]}\cr
-\+& |alignas_like| |decl_head| & |attr| & |alignas(struct s *)| \cr
+\+& \\{any\_other} |end_arg| & |end_arg| &    \&{char}$*$\.{@@]}\cr
+\+& |alignas_like| |decl_head| & |attr| & \&{alignas}(\&{struct} $s$ ${*})$ \cr
 \+& |alignas_like| |exp| & |attr| & |alignas(8)| \cr
 \+& |lbrack| |lbrack| & |attr_head| & attribute begins \cr
 \+& |lbrack| & |lpar| & |[| elsewhere \cr
 \+& |rbrack| & |rpar| & |]| elsewhere \cr
-\+& |attr_head| |rbrack| |rbrack| & |attr| & $[[\ldots]]$ \cr
-\+& |attr_head| |exp| & |attr_head| & $[[$|deprecated| \cr
-\+& |attr_head| |using_like| |exp| |colon| & |attr_head| & $[[$|using NS:| \cr
-\+& |attr| \alt|lbrace| |stmt| & \alt|lbrace| |stmt| \hfill $A\.\ $ \alt $S$ $L$ &
-  |[[likely]] {|\cr
+\+& |attr_head| |rbrack| |rbrack| & |attr| & |[[@t\dots@>]]| \cr
+\+& |attr_head| |exp| & |attr_head| & |[[deprecated| \cr
+\+& |attr_head| |using_like| |exp| |colon| & |attr_head|
+    & [[\&{using} \.{NS}: \cr
+\+& |attr| \alt|lbrace| |stmt| & \alt|lbrace| |stmt| \hfill
+       $A$\.\ \alt $S$ $L$ & |[[likely]] {|\cr
 \+& |attr| |tag| & |tag| \hfill $A\.\ T$ & |[[likely]] case 0:| \cr
 \+& |attr| |semi| & |stmt| & |[[fallthrough]];| \cr
-\+& |attr| |attr| & |attr| \hfill $A\.\ A$ & |alignas(x)| $[[\ldots]]$ \cr
-\+& |attr| |decl_head| & |decl_head| & |[[nodiscard]] f()| \cr
-\+& |decl_head| |attr| & |decl_head| & |(int x [[deprecated]])|\cr
+\+& |attr| |attr| & |attr| \hfill $A_1\.\ A_2$
+    & \&{alignas}($x$) [[\hbox{\dots}]] \cr
+\+& |attr| |decl_head| & |decl_head| & [[\\{nodiscard}]] $f$(\,) \cr
+\+& |decl_head| |attr| & |decl_head| & (\&{int} $x$ [[\\{deprecated}]])\cr
 \+& |using_like| & |int_like| & \&{using} not in attributes \cr
-\+& |struct_like| |attr| & |struct_like| \hfill $S\.\ A$ &
-  |struct [[deprecated]]|\cr
+\+& |struct_like| |attr| & |struct_like| \hfill $S\.\ A$
+    & \&{struct} [[\\{deprecated}]]\cr
 \+& |exp| |attr| & |attr| \hfill $E\.\ A$ & \&{enum} $\{x\ [[\ldots]]\}$ \cr
-\+& |attr| |typedef_like| & |typedef_like| \hfill $A\.\ T$ &
-  |[[deprecated]] typedef| \cr
+\+& |attr| |typedef_like| & |typedef_like| \hfill $A\.\ T$
+    & |[[deprecated]] typedef| \cr
 \+& |raw_int| |lbrack| & |exp| & |int[3]| \cr
-\+& |attr_head| |comma| & |attr_head| & $[[$|x, y| \cr
-\+& |if_head| |attr| & |if_head| \hfill $I\.\ A$ & |if (x) [[unlikely]] {| \cr
+\+& |attr_head| |comma| & |attr_head| & $[[x,y$ \cr
+\+& |if_head| |attr| & |if_head| \hfill $I\.\ A$
+    & \&{if} ($x$) [[\\{unlikely}]] $\{$ \cr
 \+& |lbrack| |lbrack| |rbrack| |rbrack| & |exp| & |[[]]| \cr
-\+& |attr| |function| & |function| \hfill $A\.\ F$ &
-  attribute and function \cr
+\+& |attr| |function| & |function| \hfill $A\.\ F$
+    & attribute and function \cr
 \+& |default_like| |colon| & |case_like| |colon| & |default:| \cr
-\+& |default_like| & |exp| & |f()=default;| \cr
-\+& |struct_like| |struct_like| & |struct_like| \hfill $S\.\ S$ &
-  |enum class| \cr
+\+& |default_like| & |exp| & $f(\,)=\&{default};$ \cr
+\+& |struct_like| |struct_like| & |struct_like| \hfill $S_1\.\ S_2$
+    & |enum class| \cr
 \+& |exp| |colcol| |int_like| & |int_like| & $\\{std}\DC\&{atomic}$ \cr
-\advance\midcol-60pt
+\advance\midcol-30pt
 \+\dagit& |langle| |struct_like| \alt |exp| |int_like| |comma| &
-  |langle| \hfill $LS$\alt $E^{**}$ $I^{**}$ $C$ & $\langle$\&{typename} $t,$\cr
+  |langle| \hfill $LS$\alt $E^{**}$ $I^{**}$ \unskip $C$
+   & $\langle$\&{typename} $t,$\cr
 \+\dagit& |langle| |struct_like| \alt |exp| |int_like| |prerangle| &
-  |cast| \hfill $LS$\alt $E^{**}$ $I^{**}$ $P$ &
-  \hbox{$\langle$\&{typename} $t\rangle$} \hss \cr
-\advance\midcol60pt
+  |cast| \hfill $LS$\alt $E^{**}$ $I^{**}$ \unskip $P$
+    & $\langle$\&{typename} $t\rangle$ \cr
+\advance\midcol30pt
 \+& |template_like| |cast| |struct_like| & |struct_like| \hfill $T\.\ CS$ &
   |template<@t\dots@>> class| \cr
 \+& |tag| |rbrace| & |decl| |rbrace| & @q{@>|public: }| \cr
-\+& |fn_decl| |attr| & |fn_decl| \hfill $F\.\ A$ & |void f() noexcept| \cr
+\+& |fn_decl| |attr| & |fn_decl| \hfill $F\.\ A$
+    & \&{void} $f$(\,) \&{noexcept} \cr
 \+& |alignas_like| |cast| & |attr| & |alignas(int)| \cr
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
-\yskip
+\vfill\break
 \parindent=0pt
 \dag{\bf Notes}
 \yskip
@@ -352,7 +357,7 @@
 
 Rule 123: The mathness of the |colon| or |base| changes to `yes'.
 
-Rules 153, 154: |make_reserved| is called only if the \.{+t} option is given
-to \.{CWEAVE}.
+Rules 153, 154: |make_reserved| is called only if \.{CWEAVE} has been invoked
+with the \.{+t} option.
 
 \endgroup

Modified: trunk/Build/source/texk/web2c/help.h
===================================================================
--- trunk/Build/source/texk/web2c/help.h	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/help.h	2021-09-16 11:13:15 UTC (rev 60519)
@@ -61,7 +61,7 @@
     "+p          print progress report messages",
     "+/-q        shortcut for '-bhp'; also '--quiet' (default)",
     "+/-v        shortcut for '+bhp'; also '--verbose'",
-    "-c          ignore temporary output irrespective of changes",
+    "+c          check temporary output for changes",
     "-dN         set 'kpathsea_debug' to N (0..127)",
     "+k          keep separators in numeric literals in the output",
     "+s          print usage statistics",
@@ -83,7 +83,7 @@
     "+p          print progress report messages",
     "+/-q        shortcut for '-bhp'; also '--quiet' (default)",
     "+/-v        shortcut for '+bhp'; also '--verbose'",
-    "-c          ignore temporary output irrespective of changes",
+    "+c          check temporary output for changes",
     "-dN         set 'kpathsea_debug' to N (0..127)",
     "-e          do not enclose C material in \\PB{...}",
     "-f          do not force a newline after every C statement in output",
@@ -111,7 +111,7 @@
     "+p          print progress report messages",
     "+/-q        shortcut for '-bhp'; also '--quiet' (default)",
     "+/-v        shortcut for '+bhp'; also '--verbose'",
-    "-c          ignore temporary output irrespective of changes",
+    "+c          check temporary output for changes",
     "-dN         set 'kpathsea_debug' to N (0..127)",
     "-e          do not enclose C material in \\PB{...}",
     "-f          do not force a newline after every C statement in output",

Modified: trunk/Build/source/texk/web2c/man/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/man/ChangeLog	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/man/ChangeLog	2021-09-16 11:13:15 UTC (rev 60519)
@@ -1,3 +1,8 @@
+2021-09-16  Andreas Scherer  <https://ascherer.github.io>
+
+	* ctwill.man,
+	* cweb.man: CWEB 4.6 pre-release.
+
 2021-08-08  Hironobu Yamashita  <h.y.acetaminophen at gmail.com>
 
 	* ptex.man: mention ptex-manual.

Modified: trunk/Build/source/texk/web2c/man/ctwill.man
===================================================================
--- trunk/Build/source/texk/web2c/man/ctwill.man	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/man/ctwill.man	2021-09-16 11:13:15 UTC (rev 60519)
@@ -1,6 +1,6 @@
-.\" Automatically generated by Pandoc 2.14
+.\" Automatically generated by Pandoc 2.14.2
 .\"
-.TH "CTWILL" "1" "June 6, 2021" "Web2c @VERSION@" "General Commands Manual"
+.TH "CTWILL" "1" "July 27, 2021" "Web2c @VERSION@" "General Commands Manual"
 .hy
 .SH NAME
 .PP
@@ -117,7 +117,7 @@
 and the macro files with \f[B]ct\f[R] for technical reasons.
 .IP \[bu] 2
 Options \f[B]--help\f[R], \f[B]--quiet\f[R], \f[B]--verbose\f[R],
-\f[B]--version\f[R], and flags \f[B]-c\f[R], \f[B]-i\f[R], \f[B]-o\f[R],
+\f[B]--version\f[R], and flags \f[B]+c\f[R], \f[B]-i\f[R], \f[B]-o\f[R],
 and \f[B]+lX\f[R] are new in CWEBbin and TeX\ Live.
 .IP \[bu] 2
 Option \f[B]+lX\f[R] is accompanied by example wrapper files for
@@ -158,7 +158,7 @@
 \f[B]+v\f[R]/\f[B]-v\f[R]: shortcut for \f[B]+bhp\f[R]; also
 \f[B]--verbose\f[R]
 .IP \[bu] 2
-\f[B]-c\f[R]: ignore temporary output irrespective of changes
+\f[B]+c\f[R]: check temporary output for changes
 .IP \[bu] 2
 \f[B]-e\f[R]: do not enclose C/C++\ material in \f[B]\[rs]PB{\&...}\f[R]
 .IP \[bu] 2

Modified: trunk/Build/source/texk/web2c/man/cweb.man
===================================================================
--- trunk/Build/source/texk/web2c/man/cweb.man	2021-09-15 23:48:27 UTC (rev 60518)
+++ trunk/Build/source/texk/web2c/man/cweb.man	2021-09-16 11:13:15 UTC (rev 60519)
@@ -1,6 +1,6 @@
-.\" Automatically generated by Pandoc 2.14
+.\" Automatically generated by Pandoc 2.14.2
 .\"
-.TH "CWEB" "1" "June 6, 2021" "Web2c @VERSION@" "General Commands Manual"
+.TH "CWEB" "1" "July 27, 2021" "Web2c @VERSION@" "General Commands Manual"
 .hy
 .SH NAME
 .PP
@@ -55,7 +55,7 @@
 There are, however, a few differences worth noting:
 .IP \[bu] 2
 Options \f[B]--help\f[R], \f[B]--quiet\f[R], \f[B]--verbose\f[R],
-\f[B]--version\f[R], and flags \f[B]-c\f[R], \f[B]-i\f[R], \f[B]-o\f[R],
+\f[B]--version\f[R], and flags \f[B]+c\f[R], \f[B]-i\f[R], \f[B]-o\f[R],
 and \f[B]+lX\f[R] are new in CWEBbin and TeX\ Live.
 .IP \[bu] 2
 Option \f[B]+lX\f[R] is accompanied by several wrapper files for
@@ -95,7 +95,7 @@
 \f[B]+v\f[R]/\f[B]-v\f[R]: shortcut for \f[B]+bhp\f[R]; also
 \f[B]--verbose\f[R]
 .IP \[bu] 2
-\f[B]-c\f[R]: ignore temporary output irrespective of changes
+\f[B]+c\f[R]: check temporary output for changes
 .IP \[bu] 2
 \f[B]+s\f[R]: print usage statistics
 .IP \[bu] 2



More information about the tex-live-commits mailing list.