summaryrefslogtreecommitdiff
path: root/Build/source/texk
diff options
context:
space:
mode:
authorAndreas Scherer <andreas_tex@freenet.de>2021-09-16 11:13:15 +0000
committerAndreas Scherer <andreas_tex@freenet.de>2021-09-16 11:13:15 +0000
commit7babe2030a984be601d710791466ef924d86aa15 (patch)
tree7161702cf9a7ed3b1ed998363e62401c2dd64aee /Build/source/texk
parent5efc5b488d9d9fba35ad0884b6a900c681945ffa (diff)
[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. git-svn-id: svn://tug.org/texlive/trunk@60519 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk')
-rw-r--r--Build/source/texk/web2c/ChangeLog8
-rw-r--r--Build/source/texk/web2c/Makefile.in2
-rw-r--r--Build/source/texk/web2c/am/cweb.am2
-rw-r--r--Build/source/texk/web2c/ctangleboot.cin4
-rw-r--r--Build/source/texk/web2c/cwebboot.cin4
-rw-r--r--Build/source/texk/web2c/cwebdir/ChangeLog18
-rw-r--r--Build/source/texk/web2c/cwebdir/comm-bs.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/comm-vms.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/comm-w2c.ch2
-rw-r--r--Build/source/texk/web2c/cwebdir/comm-w2c.h2
-rw-r--r--Build/source/texk/web2c/cwebdir/common.c2
-rw-r--r--Build/source/texk/web2c/cwebdir/common.h2
-rw-r--r--Build/source/texk/web2c/cwebdir/ctang-vms.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/ctangle.c4
-rw-r--r--Build/source/texk/web2c/cwebdir/ctangle.w2
-rw-r--r--Build/source/texk/web2c/cwebdir/ctwill-mini.ch92
-rw-r--r--Build/source/texk/web2c/cwebdir/ctwill-w2c.ch81
-rw-r--r--Build/source/texk/web2c/cwebdir/cweav-vms.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/cweav-w2c.ch30
-rw-r--r--Build/source/texk/web2c/cwebdir/cweave.w211
-rw-r--r--Build/source/texk/web2c/cwebdir/cwebmac.tex2
-rw-r--r--Build/source/texk/web2c/cwebdir/cwebman-w2c.ch3
-rw-r--r--Build/source/texk/web2c/cwebdir/po/de/web2c-help.po8
-rw-r--r--Build/source/texk/web2c/cwebdir/po/web2c-help.pot4
-rw-r--r--Build/source/texk/web2c/cwebdir/prod-cweave.w372
-rw-r--r--Build/source/texk/web2c/cwebdir/prod-twill.w282
-rw-r--r--Build/source/texk/web2c/cwebdir/prod.w261
-rw-r--r--Build/source/texk/web2c/help.h6
-rw-r--r--Build/source/texk/web2c/man/ChangeLog5
-rw-r--r--Build/source/texk/web2c/man/ctwill.man8
-rw-r--r--Build/source/texk/web2c/man/cweb.man8
31 files changed, 948 insertions, 493 deletions
diff --git a/Build/source/texk/web2c/ChangeLog b/Build/source/texk/web2c/ChangeLog
index 38d2e23e8e5..480f59239f6 100644
--- a/Build/source/texk/web2c/ChangeLog
+++ b/Build/source/texk/web2c/ChangeLog
@@ -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@freefriends.org>
* Makefile.am (proglib_sources): laboriously list all of lib/*.c
diff --git a/Build/source/texk/web2c/Makefile.in b/Build/source/texk/web2c/Makefile.in
index 1009b0548ac..eab99a2e180 100644
--- a/Build/source/texk/web2c/Makefile.in
+++ b/Build/source/texk/web2c/Makefile.in
@@ -21226,7 +21226,7 @@ weave.p: tangle$(EXEEXT) weave.web weave.ch
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
diff --git a/Build/source/texk/web2c/am/cweb.am b/Build/source/texk/web2c/am/cweb.am
index 00446a7dbd4..09ca66acbe8 100644
--- a/Build/source/texk/web2c/am/cweb.am
+++ b/Build/source/texk/web2c/am/cweb.am
@@ -15,7 +15,7 @@ ctie.c: ctangle$(EXEEXT) ctiedir/ctie.w ctiedir/ctie-k.ch
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
diff --git a/Build/source/texk/web2c/ctangleboot.cin b/Build/source/texk/web2c/ctangleboot.cin
index bdd9262516b..8ada08ca02e 100644
--- a/Build/source/texk/web2c/ctangleboot.cin
+++ b/Build/source/texk/web2c/ctangleboot.cin
@@ -18,8 +18,8 @@
#include <kpathsea/simpletypes.h>
#include <stddef.h>
#include <stdint.h>
-#include <stdlib.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
/*:4*/
@@ -1891,8 +1891,8 @@ if(loc> limit&&get_line()==false)return;
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"
diff --git a/Build/source/texk/web2c/cwebboot.cin b/Build/source/texk/web2c/cwebboot.cin
index 821f88c1707..0e0dedba9f4 100644
--- a/Build/source/texk/web2c/cwebboot.cin
+++ b/Build/source/texk/web2c/cwebboot.cin
@@ -18,8 +18,8 @@
#include <kpathsea/simpletypes.h>
#include <stddef.h>
#include <stdint.h>
-#include <stdlib.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
/*:3*//*89:*/
@@ -541,7 +541,7 @@ textdomain("cweb");
#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*/
diff --git a/Build/source/texk/web2c/cwebdir/ChangeLog b/Build/source/texk/web2c/cwebdir/ChangeLog
index 16de59bc9d4..fa004fb9664 100644
--- a/Build/source/texk/web2c/cwebdir/ChangeLog
+++ b/Build/source/texk/web2c/cwebdir/ChangeLog
@@ -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,
diff --git a/Build/source/texk/web2c/cwebdir/comm-bs.ch b/Build/source/texk/web2c/cwebdir/comm-bs.ch
index d121e3d602c..b5e1d21b9b4 100644
--- a/Build/source/texk/web2c/cwebdir/comm-bs.ch
+++ b/Build/source/texk/web2c/cwebdir/comm-bs.ch
@@ -183,7 +183,7 @@ boolean ispref) /* are we adding a prefix or a full name? */
@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 @@ name_pointer r) /* section name being compared */
@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 */
diff --git a/Build/source/texk/web2c/cwebdir/comm-vms.ch b/Build/source/texk/web2c/cwebdir/comm-vms.ch
index 9be9b2bf6b1..a5ddc252f35 100644
--- a/Build/source/texk/web2c/cwebdir/comm-vms.ch
+++ b/Build/source/texk/web2c/cwebdir/comm-vms.ch
@@ -18,8 +18,8 @@ modified:
#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 <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <stdio.h> /* definition of |@!printf| and friends */
+#include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
@y
#include ctype /* definition of |@!isalpha|, |@!isdigit| and so on */
@@ -27,8 +27,8 @@ modified:
#include stdbool /* definition of |@!bool|, |@!true| and |@!false| */
#include stddef /* definition of |@!ptrdiff_t| */
#include stdint /* definition of |@!uint8_t| and |@!uint16_t| */
-#include stdlib /* definition of |@!getenv| and |@!exit| */
#include stdio /* definition of |@!printf| and friends */
+#include stdlib /* definition of |@!getenv| and |@!exit| */
#include string /* definition of |@!strlen|, |@!strcmp| and so on */
@z
diff --git a/Build/source/texk/web2c/cwebdir/comm-w2c.ch b/Build/source/texk/web2c/cwebdir/comm-w2c.ch
index f0aa10ca7bf..264d2b2f1e4 100644
--- a/Build/source/texk/web2c/cwebdir/comm-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/comm-w2c.ch
@@ -451,7 +451,7 @@ char check_file_name[max_file_name_length]; /* name of |check_file| */
@x
show_banner=show_happiness=show_progress=make_xrefs=true;
@y
-make_xrefs=check_for_change=true;
+make_xrefs=true;
@z
@x
diff --git a/Build/source/texk/web2c/cwebdir/comm-w2c.h b/Build/source/texk/web2c/cwebdir/comm-w2c.h
index 02f9477a926..2199329a1b1 100644
--- a/Build/source/texk/web2c/cwebdir/comm-w2c.h
+++ b/Build/source/texk/web2c/cwebdir/comm-w2c.h
@@ -63,8 +63,8 @@ internationalization.
#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 <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <stdio.h> /* definition of |@!printf| and friends */
+#include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
@ Code related to the character set:
diff --git a/Build/source/texk/web2c/cwebdir/common.c b/Build/source/texk/web2c/cwebdir/common.c
index 5f3b490d2ba..9e77c55f317 100644
--- a/Build/source/texk/web2c/cwebdir/common.c
+++ b/Build/source/texk/web2c/cwebdir/common.c
@@ -8,8 +8,8 @@
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
-#include <stdlib.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
/*:3*/
diff --git a/Build/source/texk/web2c/cwebdir/common.h b/Build/source/texk/web2c/cwebdir/common.h
index 4f0c4d26770..50604e815dc 100644
--- a/Build/source/texk/web2c/cwebdir/common.h
+++ b/Build/source/texk/web2c/cwebdir/common.h
@@ -46,8 +46,8 @@ extern int phase; /* which phase are we in? */
#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 <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <stdio.h> /* definition of |@!printf| and friends */
+#include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
@ Code related to the character set:
diff --git a/Build/source/texk/web2c/cwebdir/ctang-vms.ch b/Build/source/texk/web2c/cwebdir/ctang-vms.ch
index 10cf9879a47..cfe2f222847 100644
--- a/Build/source/texk/web2c/cwebdir/ctang-vms.ch
+++ b/Build/source/texk/web2c/cwebdir/ctang-vms.ch
@@ -20,8 +20,8 @@ created:
#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 <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <stdio.h> /* definition of |@!printf| and friends */
+#include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
@y
#include ctype /* definition of |@!isalpha|, |@!isdigit| and so on */
@@ -29,7 +29,7 @@ created:
#include stdbool /* definition of |@!bool|, |@!true| and |@!false| */
#include stddef /* definition of |@!ptrdiff_t| */
#include stdint /* definition of |@!uint8_t| and |@!uint16_t| */
-#include stdlib /* definition of |@!getenv| and |@!exit| */
#include stdio /* definition of |@!printf| and friends */
+#include stdlib /* definition of |@!getenv| and |@!exit| */
#include string /* definition of |@!strlen|, |@!strcmp| and so on */
@z
diff --git a/Build/source/texk/web2c/cwebdir/ctangle.c b/Build/source/texk/web2c/cwebdir/ctangle.c
index 6016fcc0b9f..b0400a3fae7 100644
--- a/Build/source/texk/web2c/cwebdir/ctangle.c
+++ b/Build/source/texk/web2c/cwebdir/ctangle.c
@@ -8,8 +8,8 @@
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
-#include <stdlib.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
/*:4*/
@@ -1583,8 +1583,8 @@ if(loc> limit&&get_line()==false)return;
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"
diff --git a/Build/source/texk/web2c/cwebdir/ctangle.w b/Build/source/texk/web2c/cwebdir/ctangle.w
index c8ec64de25e..006e3e61993 100644
--- a/Build/source/texk/web2c/cwebdir/ctangle.w
+++ b/Build/source/texk/web2c/cwebdir/ctangle.w
@@ -1493,8 +1493,8 @@ skip_limbo(void)
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') {
diff --git a/Build/source/texk/web2c/cwebdir/ctwill-mini.ch b/Build/source/texk/web2c/cwebdir/ctwill-mini.ch
index 4448b1a3d59..68e53899e00 100644
--- a/Build/source/texk/web2c/cwebdir/ctwill-mini.ch
+++ b/Build/source/texk/web2c/cwebdir/ctwill-mini.ch
@@ -548,6 +548,15 @@ Section 106.
@r @ Here is a list of the category codes that scraps can have.
@z
+Section 108.
+
+@x
+@d print_cat(c) fputs(cat_name[c],stdout)
+@y
+@d print_cat(c) fputs(cat_name[c],stdout)
+@-c@>
+@z
+
Section 109--110.
@x
@@ -704,6 +713,7 @@ Section 119.
{$\displaystyle\!\matrix{\strut\hbox{#1}\hfill\cr\hbox{#2}\hfill\cr
\strut\hbox{#3}\hfill\cr}$}
\yskip@-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 119.
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.@-z@>@-in@>@-x@>
@@ -749,9 +759,9 @@ Section 120.
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 @@ Section 121.
{$\displaystyle\!\matrix{\strut\hbox{#1}\hfill\cr\hbox{#2}\hfill\cr
\strut\hbox{#3}\hfill\cr}$}
\yskip@-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 @@ Section 125.
@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 @@ Section 132.
@-pp@>
@z
+@x
+example, `|squash(pp,3,exp,-2,3)|' is an abbreviation for `|big_app3(pp);
+reduce(pp,3,exp,-2,3)|'.
+@y
+example, `|squash(pp,3,exp,-2,3)|' is an abbreviation for `|big_app3(pp)|'
+followed by `|reduce(pp,3,exp,-2,3)|'.
+@z
+
Section 133.
@x
The code below is an exact translation of the production rules into
@y
-@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 @@ scrap_pointer p)
@$make_underlined {CTWILL}141 \&{static} \&{void} (\,)@>
@z
+@x
+ return; /* this happens, for example, in |case found:| */
+@y
+ return; /* this happens, for example, in \&{case} \\{found}: */
+@z
+
Section 144.
@x
+ strcpy(ministring_buf,"label");
+@y
+ strcpy(ministring_buf,"label");@/
+@z
+
+@x
else if (cat1==attr) {
@y
else @/ if (cat1==attr) {
@@ -1242,11 +1267,11 @@ Section 158.
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 @@ else if (cat1==raw_ubin) {
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);
-
-@r @ @c
+@r @ Now here's the |reduce| procedure used in our code for productions,
@z
Section 203.
@@ -1466,12 +1487,6 @@ Section 213--214.
Section 221.
@x
-@ The |outer_parse| routine is to |C_parse| as |outer_xref|
-@y
-@r @ The |outer_parse| routine is to |C_parse| as |outer_xref|
-@z
-
-@x
@d make_pb flags['e']
@y
@d make_pb flags['e']
@@ -1479,6 +1494,14 @@ Section 221.
@$make_pb {CTWILL}221 =\\{flags}[\.{'e'}]@>
@z
+Section 222.
+
+@x
+@ @c
+@y
+@r @ @c
+@z
+
Section 225.
@x
@@ -1519,12 +1542,6 @@ This subroutine will never be called when |stack_ptr==1|.
Section 234--235.
@x
-@ Here is \.{CWEAVE}'s major output handler.
-@y
-@r @ Here is \.{CWEAVE}'s major output handler.
-@z
-
-@x
reswitch: switch(a) {
case end_translation: return;
case identifier: case res_word: @<Output an identifier@>@; break;
@@ -1994,12 +2011,13 @@ Section 302.
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
-@r @ The trickiest part of \.{CTWILL} is the procedure |make_ministring(l)|,
+@r @ The trickiest part of \.{CTWILL} is the procedure |make_ministring(pp+l)|,
@-a@>
@-b@>
@-c@>
+@-l@>
@-make_ministring@>
@$make_ministring {CTWILL}303 \&{static} \&{void} (\,)@>
@z
@@ -2007,9 +2025,9 @@ Section 303.
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
diff --git a/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch b/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
index 7597b797aaa..1add5c76364 100644
--- a/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
@@ -473,7 +473,7 @@ tricky way so that the first line of the output file will be
@<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 @@ debugging mini-index entries.
@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 @@ if (cat1==lbrace || cat1==int_like || cat1==decl) {
@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 @@ if(cat1==lbrace || cat1==int_like || cat1==decl) {
@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 @@ else if ((cat1==binop||cat1==colon) && cat2==exp && (cat3==comma ||
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 @@ else if (cat1==ubinop) {
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 @@ else if ((cat1==binop||cat1==colon) && cat2==exp && (cat3==comma ||
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 @@ else if (cat1==stmt || cat1==function) {
@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 @@ else if (cat1==stmt) {
@z
@x
+ big_app1_insert(pp, (cat1==function || cat1==decl) ? big_force :
+ force_lines ? force : break_space); reduce(pp,2,cat1,-1,76);
+@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);
+@z
+
+@x
if (cat1==define_like) make_underlined(pp+2);
@y
if (cat1==define_like) { /* \#\&{define} is analogous to \&{extern} */
@@ -807,11 +814,11 @@ if (cat1==define_like) { /* \#\&{define} is analogous to \&{extern} */
@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 @@ else squash(pp,1,exp,-2,122);
@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 @@ less friendly to \CPLUSPLUS/ but good enough for me.
@<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 @@ if (cat1==decl_head) {
@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 @@ catch14: return *(*(p+1)-1)=='9'; /* was production 14 used? */
@ @<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 @@ its current meaning, but we do suppress mini-index entries to its
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;
diff --git a/Build/source/texk/web2c/cwebdir/cweav-vms.ch b/Build/source/texk/web2c/cwebdir/cweav-vms.ch
index 09fbd23b8a1..6423cb631f9 100644
--- a/Build/source/texk/web2c/cwebdir/cweav-vms.ch
+++ b/Build/source/texk/web2c/cwebdir/cweav-vms.ch
@@ -23,8 +23,8 @@ modified:
#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 <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <stdio.h> /* definition of |@!printf| and friends */
+#include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
#include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
@y
#include ctype /* definition of |@!isalpha|, |@!isdigit| and so on */
@@ -32,7 +32,7 @@ modified:
#include stdbool /* definition of |@!bool|, |@!true| and |@!false| */
#include stddef /* definition of |@!ptrdiff_t| */
#include stdint /* definition of |@!uint8_t| and |@!uint16_t| */
-#include stdlib /* definition of |@!getenv| and |@!exit| */
#include stdio /* definition of |@!printf| and friends */
+#include stdlib /* definition of |@!getenv| and |@!exit| */
#include string /* definition of |@!strlen|, |@!strcmp| and so on */
@z
diff --git a/Build/source/texk/web2c/cwebdir/cweav-w2c.ch b/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
index b7521b74de3..6eb45064430 100644
--- a/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
@@ -199,7 +199,7 @@ tricky way so that the first line of the output file will be
@<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 @@ Without this option the first line of the output file will be
`\.{\\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 @@ tex_puts("cwebma");
@z
@x
+@i prod.w
+@y
+@i prod-cweave.w
+@z
+
+@x
@d inner_tok_flag (5*id_flag) /* signifies a token list in `\pb' */
@c
@@ -329,7 +336,7 @@ else if ((cat1==binop||cat1==colon) && cat2==exp && (cat3==comma ||
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 @@ else if ((cat1==binop||cat1==colon) && cat2==exp && (cat3==comma ||
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 @@ else if (cat1==stmt) {
@z
@x
+ big_app1_insert(pp, (cat1==function || cat1==decl) ? big_force :
+ force_lines ? force : break_space); reduce(pp,2,cat1,-1,76);
+@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);
+@z
+
+@x
overflow("token");
@y
overflow(_("token"));
@@ -441,9 +457,9 @@ else if (cat1==stmt) {
@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
diff --git a/Build/source/texk/web2c/cwebdir/cweave.w b/Build/source/texk/web2c/cwebdir/cweave.w
index 71e5ee3df8a..db5b4f250f5 100644
--- a/Build/source/texk/web2c/cwebdir/cweave.w
+++ b/Build/source/texk/web2c/cwebdir/cweave.w
@@ -937,7 +937,7 @@ convention, but do not allow the string to be longer than |longest_name|.
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 @@ switch(ccode[(eight_bits)(c=*loc++)]) {
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=='@@') {
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 @@ C_xref( /* makes cross-references for \CEE/ identifiers */
{
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 @@ while (true) {
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 @@ while (true) {
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 @@ tricky way so that the first line of the output file will be
@<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 int copy_comment(boolean,int);
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 @@ same initial letter; these subscripts are assigned from left to right.
@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 @@ static char cat_name[256][12];
@ This code allows \.{CWEAVE} to display its parsing steps.
-@d print_cat(c) fputs(cat_name[(eight_bits)(c)],stdout)
+@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 @@ identifier&|exp|: \.{\\\\\{}identifier with underlines and
\.{@@(@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 @@ the production just mentioned.
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 @@ to be printed in a math mode context or not. It is separate from the
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 @@ productions as they were listed earlier.
@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)
+@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)
-@d app1(a) *(tok_ptr++)=(token)(tok_flag+(int)((a)->trans-tok_start))
@<Private...@>=
static int cur_mathness, init_mathness;
@@ -2427,8 +2425,8 @@ code needs to be provided with a proper environment.
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 @@ r->num=m; /* everything from |q| on is left undisturbed */
@ 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 @@ else if (cat1==comma && cat2==exp) {
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 @@ if (cat1==lpar) squash(pp,2,lpar,-1,21);
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 && (cat2==raw_int||cat2==struct_like))
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 @@ else if ((cat1==binop||cat1==colon) && cat2==exp && (cat3==comma ||
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 @@ else if (cat1==exp||cat1==int_like) {
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 @@ if (cat1==exp) {
}
@ @<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 @@ if (cat1==stmt || cat1==exp) {
}
@ @<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 if (cat1==stmt) {
}
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 @@ if (cat1==stmt || cat1==exp) {
}
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 @@ else if (cat1==stmt||cat1==decl||cat1==function) {
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,20 +2948,20 @@ if (cat1==stmt||cat1==decl||cat1==function) {
}
@ @<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);
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 @@ else if (cat1==rproc) {
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,21 +3011,21 @@ else if ((cat1==struct_like) @|
}
@ @<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);
}
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);
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==struct_like && (cat2==exp || cat2==int_like)) {
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 @@ if (cat1==const_like) {
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 @@ else if (cat1==new_like || cat1==delete_like) {
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 @@ else if (cat1==cast) squash(pp,2,attr,-1,158);
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 @@ else if (cat1==function) {
}
@ @<Cases for |default_like|@>=
-if (cat1==colon) squash(pp,1,case_like,-3,149);
-else squash(pp,1,exp,-2,150);
-
-@ Now here's the |reduce| procedure used in our code for productions.
+if (cat1==colon) reduce(pp,0,case_like,-3,149);
+else reduce(pp,0,exp,-2,150);
-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 @@ too large, since it is assumed that this test was done beforehand.
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|.
+
+@c
static void
reduce(
scrap_pointer j, short k,
@@ -3192,9 +3191,12 @@ eight_bits c,
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 @@ short d, short n)
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 @@ scrap_pointer j, short k,
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 @@ where appropriate.
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 @@ Many of the special characters in a string must be prefixed by `\.\\' so that
@^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 @@ while (id_first<id_loc) {
@.\\\~@>
@.\\\&@>
@.\\\_@>
- 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 @@ the \TEX/ string is treated as an expression.
@<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<=section_name) {
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 @@ if (next_control<=section_name) {
@ 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 @@ name_pointer p)
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();@/
diff --git a/Build/source/texk/web2c/cwebdir/cwebmac.tex b/Build/source/texk/web2c/cwebdir/cwebmac.tex
index 4f93a15557d..191f6c27a69 100644
--- a/Build/source/texk/web2c/cwebdir/cwebmac.tex
+++ b/Build/source/texk/web2c/cwebdir/cwebmac.tex
@@ -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
diff --git a/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch b/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
index 1b29ce9258c..31f02453afe 100644
--- a/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
@@ -169,8 +169,7 @@ options are currently implemented:%
\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
diff --git a/Build/source/texk/web2c/cwebdir/po/de/web2c-help.po b/Build/source/texk/web2c/cwebdir/po/de/web2c-help.po
index 485a88d715e..2b230af81e3 100644
--- a/Build/source/texk/web2c/cwebdir/po/de/web2c-help.po
+++ b/Build/source/texk/web2c/cwebdir/po/de/web2c-help.po
@@ -7,8 +7,8 @@ msgid ""
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@freenet.de>\n"
"Language-Team: German\n"
"Language: de\n"
@@ -72,8 +72,8 @@ msgid "+/-v shortcut for '+bhp'; also '--verbose'"
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"
diff --git a/Build/source/texk/web2c/cwebdir/po/web2c-help.pot b/Build/source/texk/web2c/cwebdir/po/web2c-help.pot
index ae370062ba1..03e347c38ee 100644
--- a/Build/source/texk/web2c/cwebdir/po/web2c-help.pot
+++ b/Build/source/texk/web2c/cwebdir/po/web2c-help.pot
@@ -8,7 +8,7 @@ msgid ""
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@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -71,7 +71,7 @@ msgid "+/-v shortcut for '+bhp'; also '--verbose'"
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
diff --git a/Build/source/texk/web2c/cwebdir/prod-cweave.w b/Build/source/texk/web2c/cwebdir/prod-cweave.w
new file mode 100644
index 00000000000..ea4ddf89f8e
--- /dev/null
+++ b/Build/source/texk/web2c/cwebdir/prod-cweave.w
@@ -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
diff --git a/Build/source/texk/web2c/cwebdir/prod-twill.w b/Build/source/texk/web2c/cwebdir/prod-twill.w
index 3afccf18a4a..48a985465b3 100644
--- a/Build/source/texk/web2c/cwebdir/prod-twill.w
+++ b/Build/source/texk/web2c/cwebdir/prod-twill.w
@@ -54,101 +54,104 @@ We use \\{in}, \\{out}, \\{back}, \\{bsp}, and \\{din} as shorthands for
\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 @@ We use \\{in}, \\{out}, \\{back}, \\{bsp}, and \\{din} as shorthands for
|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,44 +212,44 @@ We use \\{in}, \\{out}, \\{back}, \\{bsp}, and \\{din} as shorthands for
\+& |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
\+& |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
$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 @@ We use \\{in}, \\{out}, \\{back}, \\{bsp}, and \\{din} as shorthands for
\+\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 114: The |operator_like| must not be immediately followed by
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|.
diff --git a/Build/source/texk/web2c/cwebdir/prod.w b/Build/source/texk/web2c/cwebdir/prod.w
index 975dfe51279..e8311b12d6a 100644
--- a/Build/source/texk/web2c/cwebdir/prod.w
+++ b/Build/source/texk/web2c/cwebdir/prod.w
@@ -54,101 +54,104 @@ We use \\{in}, \\{out}, \\{back}, \\{bsp}, and \\{din} as shorthands for
\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 @@ We use \\{in}, \\{out}, \\{back}, \\{bsp}, and \\{din} as shorthands for
|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,44 +212,44 @@ We use \\{in}, \\{out}, \\{back}, \\{bsp}, and \\{din} as shorthands for
\+& |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
\+& |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
$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 @@ We use \\{in}, \\{out}, \\{back}, \\{bsp}, and \\{din} as shorthands for
|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 @@ or |cast|.
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
diff --git a/Build/source/texk/web2c/help.h b/Build/source/texk/web2c/help.h
index d6078658d29..de87af618bb 100644
--- a/Build/source/texk/web2c/help.h
+++ b/Build/source/texk/web2c/help.h
@@ -61,7 +61,7 @@ const_string CTANGLEHELP[] = {
"+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 @@ const_string CWEAVEHELP[] = {
"+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 @@ const_string CTWILLHELP[] = {
"+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",
diff --git a/Build/source/texk/web2c/man/ChangeLog b/Build/source/texk/web2c/man/ChangeLog
index 4108f4bd552..f2d601596a7 100644
--- a/Build/source/texk/web2c/man/ChangeLog
+++ b/Build/source/texk/web2c/man/ChangeLog
@@ -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@gmail.com>
* ptex.man: mention ptex-manual.
diff --git a/Build/source/texk/web2c/man/ctwill.man b/Build/source/texk/web2c/man/ctwill.man
index 8fbd2634dfb..dd45bb8e70d 100644
--- a/Build/source/texk/web2c/man/ctwill.man
+++ b/Build/source/texk/web2c/man/ctwill.man
@@ -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 @@ In TeX\ Live the utility programs are prefixed with \f[B]ctwill-\f[R]
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 @@ leave out the \f[B]happy message\f[R] (\f[B]-h\f[R]).
\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
diff --git a/Build/source/texk/web2c/man/cweb.man b/Build/source/texk/web2c/man/cweb.man
index 23fb8c824e7..5c2ea9ac47e 100644
--- a/Build/source/texk/web2c/man/cweb.man
+++ b/Build/source/texk/web2c/man/cweb.man
@@ -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 @@ the resulting output.
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 @@ The first batch of options are common to both \f[B]ctangle\f[R] and
\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