From 7babe2030a984be601d710791466ef924d86aa15 Mon Sep 17 00:00:00 2001 From: Andreas Scherer Date: Thu, 16 Sep 2021 11:13:15 +0000 Subject: [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 --- Build/source/texk/web2c/ChangeLog | 8 + Build/source/texk/web2c/Makefile.in | 2 +- Build/source/texk/web2c/am/cweb.am | 2 +- Build/source/texk/web2c/ctangleboot.cin | 4 +- Build/source/texk/web2c/cwebboot.cin | 4 +- Build/source/texk/web2c/cwebdir/ChangeLog | 18 + Build/source/texk/web2c/cwebdir/comm-bs.ch | 4 +- Build/source/texk/web2c/cwebdir/comm-vms.ch | 4 +- Build/source/texk/web2c/cwebdir/comm-w2c.ch | 2 +- Build/source/texk/web2c/cwebdir/comm-w2c.h | 2 +- Build/source/texk/web2c/cwebdir/common.c | 2 +- Build/source/texk/web2c/cwebdir/common.h | 2 +- Build/source/texk/web2c/cwebdir/ctang-vms.ch | 4 +- Build/source/texk/web2c/cwebdir/ctangle.c | 4 +- Build/source/texk/web2c/cwebdir/ctangle.w | 2 +- Build/source/texk/web2c/cwebdir/ctwill-mini.ch | 92 +++-- Build/source/texk/web2c/cwebdir/ctwill-w2c.ch | 81 ++--- Build/source/texk/web2c/cwebdir/cweav-vms.ch | 4 +- Build/source/texk/web2c/cwebdir/cweav-w2c.ch | 30 +- Build/source/texk/web2c/cwebdir/cweave.w | 211 ++++++------ Build/source/texk/web2c/cwebdir/cwebmac.tex | 2 +- Build/source/texk/web2c/cwebdir/cwebman-w2c.ch | 3 +- .../source/texk/web2c/cwebdir/po/de/web2c-help.po | 8 +- Build/source/texk/web2c/cwebdir/po/web2c-help.pot | 4 +- Build/source/texk/web2c/cwebdir/prod-cweave.w | 372 +++++++++++++++++++++ Build/source/texk/web2c/cwebdir/prod-twill.w | 282 ++++++++-------- Build/source/texk/web2c/cwebdir/prod.w | 261 ++++++++------- Build/source/texk/web2c/help.h | 6 +- Build/source/texk/web2c/man/ChangeLog | 5 + Build/source/texk/web2c/man/ctwill.man | 8 +- Build/source/texk/web2c/man/cweb.man | 8 +- 31 files changed, 948 insertions(+), 493 deletions(-) create mode 100644 Build/source/texk/web2c/cwebdir/prod-cweave.w 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 + + * Makefile.in, + * am/cweb.am, + * ctangleboot.cin, + * cwebboot.cin, + * help.h: CWEB 4.6 pre-release. + 2021-07-25 Karl Berry * 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 #include #include -#include #include +#include #include /*: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 #include #include -#include #include +#include #include /*: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 + + * 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 * 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 /* definition of |@!bool|, |@!true| and |@!false| */ #include /* definition of |@!ptrdiff_t| */ #include /* definition of |@!uint8_t| and |@!uint16_t| */ -#include /* definition of |@!getenv| and |@!exit| */ #include /* definition of |@!printf| and friends */ +#include /* definition of |@!getenv| and |@!exit| */ #include /* 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 /* |@!boolean|, |@!true| and |@!false| */ #include /* definition of |@!ptrdiff_t| */ #include /* definition of |@!uint8_t| and |@!uint16_t| */ -#include /* definition of |@!getenv| and |@!exit| */ #include /* definition of |@!printf| and friends */ +#include /* definition of |@!getenv| and |@!exit| */ #include /* 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 #include #include -#include #include +#include #include /*: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 /* definition of |@!bool|, |@!true| and |@!false| */ #include /* definition of |@!ptrdiff_t| */ #include /* definition of |@!uint8_t| and |@!uint16_t| */ -#include /* definition of |@!getenv| and |@!exit| */ #include /* definition of |@!printf| and friends */ +#include /* definition of |@!getenv| and |@!exit| */ #include /* 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 /* definition of |@!bool|, |@!true| and |@!false| */ #include /* definition of |@!ptrdiff_t| */ #include /* definition of |@!uint8_t| and |@!uint16_t| */ -#include /* definition of |@!getenv| and |@!exit| */ #include /* definition of |@!printf| and friends */ +#include /* definition of |@!getenv| and |@!exit| */ #include /* 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 #include #include -#include #include +#include #include /*: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: @@; 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,8 +1236,20 @@ 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 @@ -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. @@ -1465,12 +1486,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 @@ -1479,6 +1494,14 @@ Section 221. @$make_pb {CTWILL}221 =\\{flags}[\.{'e'}]@> @z +Section 222. + +@x +@ @c +@y +@r @ @c +@z + Section 225. @x @@ -1518,12 +1541,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; @@ -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 -@ @=@+static void make_ministring(int); +@ @=@+static void make_ministring(scrap_pointer); @y -@ @=@+static void make_ministring(int); +@ @=@+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 @= 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'] @= -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 @= 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 @@ -794,6 +792,15 @@ else if (cat1==stmt) { big_app1(pp+1); reduce(pp,2,fn_decl,0,73); @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 @@ -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 @ @= 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. @= 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? */ @ @=@+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; @@; - 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. @> -@ @=@+static void make_ministring(int); +@ @=@+static void make_ministring(scrap_pointer); @q Section 43->286. @> @ @= @@ -1712,15 +1715,15 @@ its current meaning, but we do suppress mini-index entries to its current meaning in other sections. @= -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 /* definition of |@!bool|, |@!true| and |@!false| */ #include /* definition of |@!ptrdiff_t| */ #include /* definition of |@!uint8_t| and |@!uint16_t| */ -#include /* definition of |@!getenv| and |@!exit| */ #include /* definition of |@!printf| and friends */ +#include /* definition of |@!getenv| and |@!exit| */ #include /* 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 @= 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}'. @= -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 @@ -267,6 +268,12 @@ tex_puts("cwebma"); err_print(_("! Illegal use of @@ in comment")); @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' */ @@ -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 @@ -404,6 +411,15 @@ else if (cat1==stmt) { big_app1(pp+1); reduce(pp,2,fn_decl,0,73); @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 @@ -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. @= -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: @@; 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=identifier && next_control<=xref_typewriter) { - if (next_control>identifier) @@; + if (next_control>identifier) @@; 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) { - @@; + @@; new_xref(id_lookup(id_first,id_loc,next_control-identifier)); } break; @@ -1187,7 +1187,7 @@ while (true) { if (next_control>=format_code) break; } -@ @= +@ @= { char *src=id_first,*dst=id_first; while(src= 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 */ @= -static char cat_name[256][12]; +static char cat_name[256][12]; /* |12==strlen("struct_head")+1| */ @ @= {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)) @= 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. @= 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); @ @= 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); @ @= 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); @ @= 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) { } @ @= -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) { } @ @= -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); } @ @= @@ -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) { } @ @= -big_app(' '); big_app1(pp); reduce(pp,1,stmt,-1,77); +big_app(' '); squash(pp,1,stmt,-1,77); @ @= 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); @ @= if (cat1) @@ -3013,21 +3011,21 @@ else if ((cat1==struct_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); @ @= 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); @ @= 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); @ @= -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); @ @= 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); @ @= -squash(pp,1,int_like,-2,105); +reduce(pp,0,int_like,-2,105); @ @= -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); @ @= 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); @ @= 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); @ @= if (cat1==rbrack && cat2==rbrack) squash(pp,3,attr,-1,131); @@ -3161,12 +3159,10 @@ else if (cat1==function) { } @ @= -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@; - 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; imathness % 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@> @={@+ 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@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 @.\\\&@> @.\\\_@> - 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. @= app_str("\\hbox{"@q}@>); @^high-bit character handling@> -while (id_first0177) { - app_tok(quoted_char); - app_tok((eight_bits)(*id_first++)); - } - else { +while (id_first0177) + 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; - @@; } 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. -@= 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 \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 \n" "Language-Team: LANGUAGE \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\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|\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|\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|\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 + + * ctwill.man, + * cweb.man: CWEB 4.6 pre-release. + 2021-08-08 Hironobu Yamashita * 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 -- cgit v1.2.3