summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c')
-rw-r--r--Build/source/texk/web2c/ChangeLog19
-rw-r--r--Build/source/texk/web2c/ctangleboot.cin2
-rw-r--r--Build/source/texk/web2c/cwebdir/ChangeLog65
-rw-r--r--Build/source/texk/web2c/cwebdir/Makefile6
-rw-r--r--Build/source/texk/web2c/cwebdir/comm-mac.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/comm-mini.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/comm-ql.ch8
-rw-r--r--Build/source/texk/web2c/cwebdir/comm-w2c.ch22
-rw-r--r--Build/source/texk/web2c/cwebdir/comm-w2c.h2
-rw-r--r--Build/source/texk/web2c/cwebdir/common.h2
-rw-r--r--Build/source/texk/web2c/cwebdir/common.w6
-rw-r--r--Build/source/texk/web2c/cwebdir/ctang-bs.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/ctang-pc.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/ctang-ql.ch8
-rw-r--r--Build/source/texk/web2c/cwebdir/ctang-vms.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/ctang-w2c.ch12
-rw-r--r--Build/source/texk/web2c/cwebdir/ctang-w32.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/ctangle.c2
-rw-r--r--Build/source/texk/web2c/cwebdir/ctangle.w8
-rw-r--r--Build/source/texk/web2c/cwebdir/ctwill-w2c.ch282
-rw-r--r--Build/source/texk/web2c/cwebdir/cweav-bs.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/cweav-pc.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/cweav-ql.ch8
-rw-r--r--Build/source/texk/web2c/cwebdir/cweav-vms.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/cweav-w2c.ch156
-rw-r--r--Build/source/texk/web2c/cwebdir/cweav-w32.ch4
-rw-r--r--Build/source/texk/web2c/cwebdir/cweave.w9
-rw-r--r--Build/source/texk/web2c/cwebdir/cwebacromac.tex104
-rw-r--r--Build/source/texk/web2c/cwebdir/cwebmac.tex80
-rw-r--r--Build/source/texk/web2c/cwebdir/cwebman-w2c.ch76
-rw-r--r--Build/source/texk/web2c/cwebdir/cwebman.tex13
-rw-r--r--Build/source/texk/web2c/cwebdir/po/cweb-tl.pot10
-rw-r--r--Build/source/texk/web2c/cwebdir/po/cweb.pot6
-rw-r--r--Build/source/texk/web2c/cwebdir/po/de/cweb-tl.po20
-rw-r--r--Build/source/texk/web2c/cwebdir/po/de/cweb.po12
-rw-r--r--Build/source/texk/web2c/cwebdir/po/it/cweb.po20
-rw-r--r--Build/source/texk/web2c/cwebdir/prod-cweave.w2
-rw-r--r--Build/source/texk/web2c/cwebdir/prod-twill.w2
-rw-r--r--Build/source/texk/web2c/cwebdir/prod.w2
-rw-r--r--Build/source/texk/web2c/cwebdir/texinputs/dcwebmac.tex2
-rw-r--r--Build/source/texk/web2c/cwebdir/texinputs/fcwebmac.tex2
-rw-r--r--Build/source/texk/web2c/cwebdir/texinputs/icwebmac.tex14
-rw-r--r--Build/source/texk/web2c/cwebdir/texinputs/pdfctproofmac.tex76
-rw-r--r--Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex57
-rw-r--r--Build/source/texk/web2c/gftopk.ch2
-rw-r--r--Build/source/texk/web2c/gftype.ch2
-rw-r--r--Build/source/texk/web2c/hitexdir/hitex.w708
-rw-r--r--Build/source/texk/web2c/luatexdir/luaffi/README2
-rw-r--r--Build/source/texk/web2c/luatexdir/luaffi/ffi.c2
-rw-r--r--Build/source/texk/web2c/man/ChangeLog4
-rw-r--r--Build/source/texk/web2c/man/ctwill.man4
-rw-r--r--Build/source/texk/web2c/pdftexdir/ChangeLog10
-rw-r--r--Build/source/texk/web2c/pdftexdir/pdftex.ch4
-rw-r--r--Build/source/texk/web2c/pdftexdir/pdftoepdf.cc6
-rw-r--r--Build/source/texk/web2c/pktogf.ch2
-rw-r--r--Build/source/texk/web2c/pktype.ch4
-rw-r--r--Build/source/texk/web2c/showstream.ch26
-rw-r--r--Build/source/texk/web2c/weav-twill.ch4
58 files changed, 1011 insertions, 924 deletions
diff --git a/Build/source/texk/web2c/ChangeLog b/Build/source/texk/web2c/ChangeLog
index c9203566413..ab0d6888111 100644
--- a/Build/source/texk/web2c/ChangeLog
+++ b/Build/source/texk/web2c/ChangeLog
@@ -1,3 +1,22 @@
+2024-08-23 Andreas Scherer <https://ascherer.github.io>
+
+ * gftopk.ch,
+ * gftype.ch,
+ * pktogf.ch,
+ * pktype.ch: Fix a few spaces.
+
+2024-08-21 Andreas Scherer <https://ascherer.github.io>
+
+ * weav-twill.ch: Prime the title page.
+
+2024-08-16 Andreas Scherer <https://ascherer.github.io>
+
+ * showstream.ch: Restore section numbering as far as possible.
+
+2024-08-12 Andreas Scherer <https://ascherer.github.io>
+
+ * ctangleboot.cin: CWEB 4.12 release.
+
2024-07-14 Andreas Scherer <https://ascherer.github.io>
* mft.ch: Preserve Metafont logo on title page.
diff --git a/Build/source/texk/web2c/ctangleboot.cin b/Build/source/texk/web2c/ctangleboot.cin
index eefec8569c5..3483628ef0c 100644
--- a/Build/source/texk/web2c/ctangleboot.cin
+++ b/Build/source/texk/web2c/ctangleboot.cin
@@ -28,7 +28,7 @@
/*:5*/
#line 67 "cwebdir/ctangle.w"
-#define banner "This is CTANGLE, Version 4.11" \
+#define banner "This is CTANGLE, Version 4.12" \
\
#define _(s) gettext(s) \
diff --git a/Build/source/texk/web2c/cwebdir/ChangeLog b/Build/source/texk/web2c/cwebdir/ChangeLog
index dbfba96a73d..7bb17212989 100644
--- a/Build/source/texk/web2c/cwebdir/ChangeLog
+++ b/Build/source/texk/web2c/cwebdir/ChangeLog
@@ -1,3 +1,68 @@
+2024-08-12 Andreas Scherer <https://ascherer.github.io>
+
+ * Makefile
+ * comm-{mac,mini,ql,w2c}.ch
+ * comm-w2c.h
+ * common.h
+ * common.w
+ * ctang-{bs,pc,ql,vms,w2c,w32}.ch
+ * ctangle.c
+ * ctangle.w
+ * ctwill-w2c.ch
+ * cweav-{bs,pc,ql,vms,w2c,w32}.ch
+ * cweave.w
+ * cwebman-w2c.ch
+ * cwebman.tex
+ * po/cweb-tl.pot
+ * po/cweb.pot
+ * po/de/cweb-tl.po
+ * po/de/cweb.po
+ * po/it/cweb.po
+ * prod-{cweave,twill}.w
+ * prod.w: CWEB 4.12 release.
+
+2024-08-10 Andreas Scherer <https://ascherer.github.io>
+
+ * cwebacromac.tex,
+ * cwebmac.tex,
+ * texinputs/icwebmac.tex,
+ * texinputs/pdfctproofmac.tex,
+ * texinputs/pdfctwimac.tex: Apply new scanning macros.
+
+2024-08-08 Andreas Scherer <https://ascherer.github.io>
+
+ * comm-mini.ch,
+ * comm-w2c.ch: Demote 'Extensions' and subsections.
+
+2024-08-07 Andreas Scherer <https://ascherer.github.io>
+
+ * comm-mini.ch,
+ * comm-w2c.ch: The Index is not an Extension.
+
+2024-08-06 Andreas Scherer <https://ascherer.github.io>
+
+ * cwebacromac.tex,
+ * cwebmac.tex,
+ * cwebman.tex,
+ * texinputs/pdfctproofmac.tex,
+ * texinputs/pdfctwimac.tex: Refine PDF-related macros.
+
+2024-08-02 Andreas Scherer <https://ascherer.github.io>
+
+ * ctwill-w2c.ch,
+ * cweav-w2c.ch,
+ * cweave.w: Remove unused 'kludge'.
+
+2024-07-26 Andreas Scherer <https://ascherer.github.io>
+
+ * cwebmac.tex: Reshuffle '\note' macro.
+
+2024-07-24 Andreas Scherer <https://ascherer.github.io>
+
+ * cwebmac.tex,
+ * cwebman-w2c.ch,
+ * cwebman.tex: Recollect '\font' declarations.
+
2024-07-23 Andreas Scherer <https://ascherer.github.io>
* cwebman-w2c.ch,
diff --git a/Build/source/texk/web2c/cwebdir/Makefile b/Build/source/texk/web2c/cwebdir/Makefile
index 28ea97d5540..a11936f9894 100644
--- a/Build/source/texk/web2c/cwebdir/Makefile
+++ b/Build/source/texk/web2c/cwebdir/Makefile
@@ -1,6 +1,6 @@
# This file is part of CWEB.
# It is distributed WITHOUT ANY WARRANTY, express or implied.
-# Version 4.11 --- December 2023
+# Version 4.12 --- August 2024
# Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -216,6 +216,6 @@ tarball:
tar zcvhf /tmp/cweb.tgz $(ALL) examples
ctan:
- git archive -o ~/cweb-4.11.zip --prefix=cweb/ cweb-4.11
+ git archive -o ~/cweb-4.12.zip --prefix=cweb/ cweb-4.12
make PDF=pdf usermanual
- cd ..; zip -r ~/cweb-4.11.zip cweb/cwebman.pdf
+ cd ..; zip -r ~/cweb-4.12.zip cweb/cwebman.pdf
diff --git a/Build/source/texk/web2c/cwebdir/comm-mac.ch b/Build/source/texk/web2c/cwebdir/comm-mac.ch
index 79b1ec945e8..1540a9a4e21 100644
--- a/Build/source/texk/web2c/cwebdir/comm-mac.ch
+++ b/Build/source/texk/web2c/cwebdir/comm-mac.ch
@@ -4,9 +4,9 @@ No changes to CTANGLE or CWEAVE are needed.
(Contributed 13 Oct 2000 by AndPio@aol.com; slightly edited by Don Knuth)
@x in limbo, change the title page document to specify Mac version
- \centerline{(Version 4.11)}
+ \centerline{(Version 4.12)}
@y
- \centerline{(Version 4.11 for MacOS)}
+ \centerline{(Version 4.12 for MacOS)}
@z
@x section 23: Make input_ln accept \n, \r, \n\r, or \r\n as line endings
diff --git a/Build/source/texk/web2c/cwebdir/comm-mini.ch b/Build/source/texk/web2c/cwebdir/comm-mini.ch
index d1bd623b2a2..adf9fc0c28e 100644
--- a/Build/source/texk/web2c/cwebdir/comm-mini.ch
+++ b/Build/source/texk/web2c/cwebdir/comm-mini.ch
@@ -1,9 +1,9 @@
Limbo.
@x
-\def\title{Common code for CTANGLE and CWEAVE (4.11 [\TeX~Live])}
+\def\title{Common code for CTANGLE and CWEAVE (4.12 [\TeX~Live])}
@y
-\def\title{COMMON (4.11 [\TeX~Live])}
+\def\title{COMMON (4.12 [\TeX~Live])}
\def\contentspagenumber{0}
@z
diff --git a/Build/source/texk/web2c/cwebdir/comm-ql.ch b/Build/source/texk/web2c/cwebdir/comm-ql.ch
index 44cc39ec45f..8510fc093a2 100644
--- a/Build/source/texk/web2c/cwebdir/comm-ql.ch
+++ b/Build/source/texk/web2c/cwebdir/comm-ql.ch
@@ -10,24 +10,24 @@ ex <dev_>cc;'-v -h -c -=500000 -DCWEBINPUTS=flp2_ common_c'
@x
\def\v{\char'174} % vertical (|) in typewriter font
-\def\title{Common code for CTANGLE and CWEAVE (Version 4.11)}
+\def\title{Common code for CTANGLE and CWEAVE (Version 4.12)}
\def\topofcontents{\null\vfill
\centerline{\titlefont Common code for {\ttitlefont CTANGLE} and
{\ttitlefont CWEAVE}}
\vskip 15pt
- \centerline{(Version 4.11)}
+ \centerline{(Version 4.12)}
\vfill}
\def\botofcontents{\vfill
\noindent
@y
\def\v{\char'174} % vertical (|) in typewriter font
-\def\title{Common code for CTANGLE and CWEAVE (QL Version 4.11)}
+\def\title{Common code for CTANGLE and CWEAVE (QL Version 4.12)}
\def\topofcontents{\null\vfill
\centerline{\titlefont Common code for {\ttitlefont CTANGLE} and
{\ttitlefont CWEAVE}}
\vskip 15pt
- \centerline{(Version 4.11)}
+ \centerline{(Version 4.12)}
\vfill}
\def\botofcontents{\vfill
\noindent
diff --git a/Build/source/texk/web2c/cwebdir/comm-w2c.ch b/Build/source/texk/web2c/cwebdir/comm-w2c.ch
index 4035a633ffb..f0d5b6a8034 100644
--- a/Build/source/texk/web2c/cwebdir/comm-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/comm-w2c.ch
@@ -17,16 +17,16 @@
@q Please send comments, suggestions, etc. to tex-k@@tug.org. @>
@x [0.0] l.25
-\def\title{Common code for CTANGLE and CWEAVE (Version 4.11)}
+\def\title{Common code for CTANGLE and CWEAVE (Version 4.12)}
@y
\def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}} \ifacro\sanitizecommand\Kpathsea{KPATHSEA}\fi
-\def\title{Common code for CTANGLE and CWEAVE (4.11 [\TeX~Live])}
+\def\title{Common code for CTANGLE and CWEAVE (4.12 [\TeX~Live])}
@z
@x [0.0] l.30
- \centerline{(Version 4.11)}
+ \centerline{(Version 4.12)}
@y
- \centerline{(Version 4.11 [\TeX~Live])}
+ \centerline{(Version 4.12 [\TeX~Live])}
@z
@x [0.0] l.32
@@ -616,21 +616,21 @@ else {
@x [9.85] l.1286
@* Index.
@y
-@** Extensions to {\tentex CWEB}. The following sections introduce new or
+@* Extensions to {\tentex CWEB}. The following sections introduce new or
improved features that have been created by numerous contributors over the
course of a quarter century.
Care has been taken to keep the original section numbering intact, so this new
material should nicely integrate with the original ``\&{85.~Index}.''
-@* Language setting. This global variable is set by the argument of the
+@*1 Language setting. This global variable is set by the argument of the
`\.{+l}' (or `\.{-l}') command-line option.
@<Global var...@>=
const char *use_language=""; /* prefix of \.{cwebmac.tex} in \TEX/ output */
-@* User communication. The |scan_args| and |cb_show_banner| routines and the
+@*1 User communication. The |scan_args| and |cb_show_banner| routines and the
|bindtextdomain| argument string need a few extra variables.
@d max_banner 50
@@ -647,7 +647,7 @@ string texmf_locale;@/
#endif
char separators[]=SEPARATORS;
-@* Temporary file output. Most \CEE/ projects are controlled by a \.{Makefile}
+@*1 Temporary file output. Most \CEE/ projects are controlled by a \.{Makefile}
that automatically takes care of the temporal dependencies between the different
source modules. It may be convenient that \.{CWEB} doesn't create new output
for all existing files, when there are only changes to some of them. Thus the
@@ -696,7 +696,7 @@ if(check_file) fclose(check_file);
if(strlen(check_file_name)) /* Delete the temporary file in case of a break */
remove(check_file_name);
-@* Internationalization. If translation catalogs for your personal
+@*1 Internationalization. If translation catalogs for your personal
\.{LANGUAGE} are installed at the appropriate place, \.{CTANGLE} and \.{CWEAVE}
will talk to you in your favorite language. Catalog \.{cweb} contains all
strings from ``plain \.{CWEB},'' catalog \.{cweb-tl} contains a few extra
@@ -759,7 +759,7 @@ free(texmf_locale);
textdomain("cweb"); /* the majority of |"strings"| come from ``plain \.{CWEB}'' */
@.cweb.mo@>
-@* File lookup with \Kpathsea/. The \.{CTANGLE} and \.{CWEAVE} programs from
+@*1 File lookup with \Kpathsea/. The \.{CTANGLE} and \.{CWEAVE} programs from
the original \.{CWEB} package use the compile-time default directory or the
value of the environment variable \.{CWEBINPUTS} as an alternative place to be
searched for files, if they could not be found in the current directory.
@@ -816,7 +816,7 @@ numbers.
Debugging output is always written to |stderr|, and begins with the string
`\.{kdebug:}'.
-@* System dependent changes. The most volatile stuff comes at the very end.
+@*1 System dependent changes. The most volatile stuff comes at the very end.
Modules for dealing with help messages and version info.
diff --git a/Build/source/texk/web2c/cwebdir/comm-w2c.h b/Build/source/texk/web2c/cwebdir/comm-w2c.h
index c2743c1a388..154371c4fa7 100644
--- a/Build/source/texk/web2c/cwebdir/comm-w2c.h
+++ b/Build/source/texk/web2c/cwebdir/comm-w2c.h
@@ -2,7 +2,7 @@
% 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.11 --- December 2023 (works also with later versions)
+% Version 4.12 --- August 2024 (works also with later versions)
% Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth
diff --git a/Build/source/texk/web2c/cwebdir/common.h b/Build/source/texk/web2c/cwebdir/common.h
index 97fda82e75a..2e02af934f4 100644
--- a/Build/source/texk/web2c/cwebdir/common.h
+++ b/Build/source/texk/web2c/cwebdir/common.h
@@ -2,7 +2,7 @@
% 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.11 --- December 2023 (works also with later versions)
+% Version 4.12 --- August 2024 (works also with later versions)
% Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth
diff --git a/Build/source/texk/web2c/cwebdir/common.w b/Build/source/texk/web2c/cwebdir/common.w
index 88932f3118b..1c077736bb2 100644
--- a/Build/source/texk/web2c/cwebdir/common.w
+++ b/Build/source/texk/web2c/cwebdir/common.w
@@ -2,7 +2,7 @@
% 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.11 --- December 2023
+% Version 4.12 --- August 2024
% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -22,12 +22,12 @@
\def\v{\char'174} % vertical (|) in typewriter font
-\def\title{Common code for CTANGLE and CWEAVE (Version 4.11)}
+\def\title{Common code for CTANGLE and CWEAVE (Version 4.12)}
\def\topofcontents{\null\vfill
\centerline{\titlefont Common code for {\ttitlefont CTANGLE} and
{\ttitlefont CWEAVE}}
\vskip 15pt
- \centerline{(Version 4.11)}
+ \centerline{(Version 4.12)}
\vfill}
\def\botofcontents{\vfill
\noindent
diff --git a/Build/source/texk/web2c/cwebdir/ctang-bs.ch b/Build/source/texk/web2c/cwebdir/ctang-bs.ch
index c70a87fe1d0..234f41039e0 100644
--- a/Build/source/texk/web2c/cwebdir/ctang-bs.ch
+++ b/Build/source/texk/web2c/cwebdir/ctang-bs.ch
@@ -17,12 +17,12 @@ by using "huge" pointers.
The ``banner line'' defined here should be changed whenever \.{CTANGLE}
is modified.
-@d banner "This is CTANGLE (Version 4.11)"
+@d banner "This is CTANGLE (Version 4.12)"
@y
The ``banner line'' defined here should be changed whenever \.{CTANGLE}
is modified.
-@d banner "This is CTANGLE (Version 4.11pc/big)"
+@d banner "This is CTANGLE (Version 4.12pc/big)"
@z
diff --git a/Build/source/texk/web2c/cwebdir/ctang-pc.ch b/Build/source/texk/web2c/cwebdir/ctang-pc.ch
index 3e6e7ac5ef2..61db92aa7e4 100644
--- a/Build/source/texk/web2c/cwebdir/ctang-pc.ch
+++ b/Build/source/texk/web2c/cwebdir/ctang-pc.ch
@@ -9,9 +9,9 @@ that allows >64K arrays. If you need lots of bytes and toks, try the
alternate change files with -bs suffix instead of -pc.
@x section 1
-@d banner "This is CTANGLE (Version 4.11)"
+@d banner "This is CTANGLE (Version 4.12)"
@y
-@d banner "This is CTANGLE (Version 4.11pc)"
+@d banner "This is CTANGLE (Version 4.12pc)"
@z
@x section 17
@d max_bytes 100000 /* the number of bytes in identifiers,
diff --git a/Build/source/texk/web2c/cwebdir/ctang-ql.ch b/Build/source/texk/web2c/cwebdir/ctang-ql.ch
index 8072aff51ab..41831c850d9 100644
--- a/Build/source/texk/web2c/cwebdir/ctang-ql.ch
+++ b/Build/source/texk/web2c/cwebdir/ctang-ql.ch
@@ -7,15 +7,15 @@ ex <dev_>cc;"-v -h -c -=500000 ctangle_c"
@x
-\def\title{CTANGLE (Version 4.11)}
+\def\title{CTANGLE (Version 4.12)}
@y
-\def\title{CTANGLE (QL Version 4.11)}
+\def\title{CTANGLE (QL Version 4.12)}
@z
@x section 1
-@d banner "This is CTANGLE (Version 4.11)"
+@d banner "This is CTANGLE (Version 4.12)"
@y
-@d banner "This is CTANGLE (QL Version 4.11)"
+@d banner "This is CTANGLE (QL Version 4.12)"
@z
@x
diff --git a/Build/source/texk/web2c/cwebdir/ctang-vms.ch b/Build/source/texk/web2c/cwebdir/ctang-vms.ch
index 2c4df3bf60e..7f142df49a7 100644
--- a/Build/source/texk/web2c/cwebdir/ctang-vms.ch
+++ b/Build/source/texk/web2c/cwebdir/ctang-vms.ch
@@ -10,9 +10,9 @@ created:
(these changes not necessary for initial bootstrapping)
@x section 1 (01-FEB-1992 ST)
-@d banner "This is CTANGLE (Version 4.11)"
+@d banner "This is CTANGLE (Version 4.12)"
@y
-@d banner "This is CTANGLE (VAX/VMS Version 4.11)"
+@d banner "This is CTANGLE (VAX/VMS Version 4.12)"
@z
@x section 5 (01-FEB-1992 ST)
diff --git a/Build/source/texk/web2c/cwebdir/ctang-w2c.ch b/Build/source/texk/web2c/cwebdir/ctang-w2c.ch
index 177daac7ab2..61eea96a0de 100644
--- a/Build/source/texk/web2c/cwebdir/ctang-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/ctang-w2c.ch
@@ -17,15 +17,15 @@
@q Please send comments, suggestions, etc. to tex-k@@tug.org. @>
@x [0.0] l.30
-\def\title{CTANGLE (Version 4.11)}
+\def\title{CTANGLE (Version 4.12)}
@y
-\def\title{CTANGLE (Version 4.11 [\TeX~Live])}
+\def\title{CTANGLE (Version 4.12 [\TeX~Live])}
@z
@x [0.0] l.34
- \centerline{(Version 4.11)}
+ \centerline{(Version 4.12)}
@y
- \centerline{(Version 4.11 [\TeX~Live])}
+ \centerline{(Version 4.12 [\TeX~Live])}
@z
@x [0.0] l.36
@@ -41,9 +41,9 @@
@z
@x [1.1] l.64
-@d banner "This is CTANGLE (Version 4.11)"
+@d banner "This is CTANGLE (Version 4.12)"
@y
-@d banner "This is CTANGLE, Version 4.11"
+@d banner "This is CTANGLE, Version 4.12"
/* will be extended by the \TeX~Live |versionstring| */
@z
diff --git a/Build/source/texk/web2c/cwebdir/ctang-w32.ch b/Build/source/texk/web2c/cwebdir/ctang-w32.ch
index c0384b48881..2a5c6f11868 100644
--- a/Build/source/texk/web2c/cwebdir/ctang-w32.ch
+++ b/Build/source/texk/web2c/cwebdir/ctang-w32.ch
@@ -4,9 +4,9 @@ This is the change file for CWEB's CTANGLE under Win32
Changes necessary for compiling with Borland C/C++
@x section 1
-@d banner "This is CTANGLE (Version 4.11)"
+@d banner "This is CTANGLE (Version 4.12)"
@y
-@d banner "This is CTANGLE (Version 4.11win32)"
+@d banner "This is CTANGLE (Version 4.12win32)"
@z
@x section 24
diff --git a/Build/source/texk/web2c/cwebdir/ctangle.c b/Build/source/texk/web2c/cwebdir/ctangle.c
index 58e37b27b41..d1cf6c67694 100644
--- a/Build/source/texk/web2c/cwebdir/ctangle.c
+++ b/Build/source/texk/web2c/cwebdir/ctangle.c
@@ -15,7 +15,7 @@
/*:5*/
#line 67 "ctangle.w"
-#define banner "This is CTANGLE (Version 4.11)" \
+#define banner "This is CTANGLE (Version 4.12)" \
#define ctangle false
#define cweave true \
diff --git a/Build/source/texk/web2c/cwebdir/ctangle.w b/Build/source/texk/web2c/cwebdir/ctangle.w
index 37b09e7fc02..b42595baa9e 100644
--- a/Build/source/texk/web2c/cwebdir/ctangle.w
+++ b/Build/source/texk/web2c/cwebdir/ctangle.w
@@ -2,7 +2,7 @@
% 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.11 --- December 2023
+% Version 4.12 --- August 2024
% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -27,11 +27,11 @@
\mathchardef\RA="3221 % right arrow
\mathchardef\BA="3224 % double arrow
-\def\title{CTANGLE (Version 4.11)}
+\def\title{CTANGLE (Version 4.12)}
\def\topofcontents{\null\vfill
\centerline{\titlefont The {\ttitlefont CTANGLE} processor}
\vskip 15pt
- \centerline{(Version 4.11)}
+ \centerline{(Version 4.12)}
\vfill}
\def\botofcontents{\vfill
\noindent
@@ -61,7 +61,7 @@ Joachim Schrod, Lee Wittenberg, and others who have contributed improvements.
The ``banner line'' defined here should be changed whenever \.{CTANGLE}
is modified.
-@d banner "This is CTANGLE (Version 4.11)"
+@d banner "This is CTANGLE (Version 4.12)"
@c
@<Include files@>@/
diff --git a/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch b/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
index 70616695efb..664254dee08 100644
--- a/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
@@ -34,38 +34,38 @@
\datethis % Put timestamp before section 1
@z
-@x [0.0] l.35
-\def\title{CWEAVE (Version 4.11)}
+@x [0.0] l.34
+\def\title{CWEAVE (Version 4.12)}
@y
\def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}} \ifacro\sanitizecommand\Kpathsea{KPATHSEA}\fi
-\def\title{CTWILL (Version 4.11 [\TeX~Live])}
+\def\title{CTWILL (Version 4.12 [\TeX~Live])}
@z
-@x [0.0] l.37
+@x [0.0] l.36
\centerline{\titlefont The {\ttitlefont CWEAVE} processor}
@y
\centerline{\titlefont The {\ttitlefont CTWILL} processor}
@z
-@x [0.0] l.39
- \centerline{(Version 4.11)}
+@x [0.0] l.38
+ \centerline{(Version 4.12)}
@y
- \centerline{(Version 4.11 [\TeX~Live])}
+ \centerline{(Version 4.12 [\TeX~Live])}
@z
-@x [0.0] l.41
+@x [0.0] l.40
\def\botofcontents{\vfill
@y
\def\covernote{\vbox{%
@z
-@x [0.0] l.54
+@x [0.0] l.53
}
@y
}}
@z
-@x [1.1] l.59
+@x [1.1] l.58
This is the \.{CWEAVE} program by Silvio Levy and Donald E. Knuth,
based on \.{WEAVE} by Knuth.
We are thankful to Steve Avery,
@@ -77,7 +77,7 @@ Crusius, and others who have contributed improvements.
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 4.11)"
+@d banner "This is CWEAVE (Version 4.12)"
@y
This is the \.{CTWILL} program by D. E. Knuth, based
on \.{CWEAVE} by Silvio Levy and D.~E. Knuth. It is also based on
@@ -101,29 +101,29 @@ Until then, \.{CWEAVE}'s sequence of sections will be preserved.
The ``banner line'' defined here should be changed whenever \.{CTWILL} is
modified. The version number parallels the corresponding version of \.{CWEAVE}.
-@d banner "This is CTWILL, Version 4.11"
+@d banner "This is CTWILL, Version 4.12"
/* will be extended by the \TeX~Live |versionstring| */
@z
-@x [1.2] l.94
+@x [1.2] l.93
program=cweave;
@y
program=ctwill;
@z
-@x [1.2] l.98
+@x [1.2] l.97
if (show_banner) puts(banner); /* print a ``banner line'' */
@y
if (show_banner) cb_show_banner(); /* print a ``banner line'' */
@z
-@x [1.3] l.112
+@x [1.3] l.111
@i common.h
@y
@i comm-w2c.h
@z
-@x [2.21] l.183
+@x [2.21] l.182
turned on during the first phase.
@<Private...@>=
@@ -132,19 +132,19 @@ static boolean change_exists; /* has any section changed? */
turned on during the first phase---NOT!
@z
-@x [2.23] l.217
+@x [2.23] l.216
@ @d max_refs 30000 /* number of cross-references; must be less than 65536 */
@y
@ @d max_refs 65535 /* number of cross-references; must be less than 65536 */
@z
-@x [2.25] l.246
+@x [2.25] l.245
@d append_xref(c) if (xref_ptr==xmem_end) overflow("cross-reference");
@y
@d append_xref(c) if (xref_ptr==xmem_end) overflow(_("cross-reference"));
@z
-@x [2.30] l.337
+@x [2.30] l.336
@d max_toks 30000 /* number of symbols in \CEE/ texts being parsed;
must be less than 65536 */
@d max_texts 8000 /* number of phrases in \CEE/ texts being parsed;
@@ -156,14 +156,14 @@ turned on during the first phase---NOT!
must be less than 10240 */
@z
-@x [2.32] l.357
+@x [2.32] l.356
@ Here are the two procedures needed to complete |id_lookup|:
@y
@ Here are the two procedures needed to complete |id_lookup|:
@s perm_meaning int
@z
-@x [2.32] l.374
+@x [2.32] l.373
p->xref=(void *)xmem;
@y
p->xref=(void *)xmem;
@@ -177,7 +177,7 @@ turned on during the first phase---NOT!
}
@z
-@x [2.33] l.377
+@x [2.33] l.376
@ And here's a small helper function to simplify the code.
@d update_node(p) (p)->xref=(void *)xref_ptr
@@ -188,7 +188,7 @@ turned on during the first phase---NOT!
@d get_meaning(p) (p)-name_dir+cur_meaning
@z
-@x [2.34] l.436
+@x [2.34] l.435
id_lookup("extern",NULL,int_like);
@y
@#
@@ -196,7 +196,7 @@ ext_loc=id_lookup("extern",NULL,int_like)-name_dir;
@#
@z
-@x [2.34] l.449
+@x [2.34] l.448
id_lookup("int",NULL,raw_int);
@y
@#
@@ -204,7 +204,7 @@ int_loc=id_lookup("int",NULL,raw_int)-name_dir;
@#
@z
-@x [3.36] l.544
+@x [3.36] l.543
@d ord 0207 /* control code for `\.{@@'}' */
@d join 0210 /* control code for `\.{@@\&}' */
@d thin_space 0211 /* control code for `\.{@@,}' */
@@ -248,7 +248,7 @@ int_loc=id_lookup("int",NULL,raw_int)-name_dir;
@d new_section 0235 /* control code for `\.{@@\ }' and `\.{@@*}' */
@z
-@x [3.38] l.587
+@x [3.38] l.586
ccode['\'']=ord;
@y
ccode['\'']=ord;
@@ -256,7 +256,7 @@ ccode['$']=meaning; ccode['%']=temp_meaning; ccode['-']=suppress;
ccode['r']=ccode['R']=right_start;
@z
-@x [3.40] l.608
+@x [3.40] l.607
static eight_bits skip_TeX(void);
@ @c
@@ -269,7 +269,7 @@ part of all meanings.
@c
@z
-@x [3.41] l.614
+@x [3.41] l.613
if (loc>limit && get_line()==false) return;
@y
if (loc>limit && get_line()==false) return;
@@ -279,44 +279,44 @@ part of all meanings.
}
@z
-@x [4.43] l.670
+@x [4.43] l.669
\yskip\hang |xref_roman|, |xref_wildcard|, |xref_typewriter|, |TeX_string|,
@y
\yskip\hang |xref_roman|, |xref_wildcard|, |xref_typewriter|, |TeX_string|,
|meaning|, |suppress|,
@z
-@x [4.46] l.731
+@x [4.46] l.730
@d right_preproc 0217 /* ends a preprocessor command */
@y
@d right_preproc 0223 /* ends a preprocessor command */
@z
-@x [4.57] l.888
+@x [4.57] l.887
err_print("! String didn't end"); loc=limit; break;
@y
err_print(_("! String didn't end")); loc=limit; break;
@z
-@x [4.57] l.892
+@x [4.57] l.891
err_print("! Input ended in middle of string"); loc=buffer; break;
@y
err_print(_("! Input ended in middle of string")); loc=buffer; break;
@z
-@x [4.57] l.911
+@x [4.57] l.910
printf("%s","\n! String too long: ");
@y
printf("%s",_("\n! String too long: "));
@z
-@x [4.59] l.930
+@x [4.59] l.929
case translit_code: err_print("! Use @@l in limbo only"); continue;
@y
case translit_code: err_print(_("! Use @@l in limbo only")); continue;
@z
-@x [4.59] l.932
+@x [4.59] l.931
case underline: xref_switch=def_flag; continue;
@y
case underline: xref_switch=def_flag; continue;
@@ -324,38 +324,38 @@ part of all meanings.
case right_start: right_start_switch=true; continue;
@z
-@x [4.59] l.938
+@x [4.59] l.937
case xref_roman: case xref_wildcard: case xref_typewriter: case noop:
@y
case xref_roman: case xref_wildcard: case xref_typewriter: case noop:
case meaning: case suppress:
@z
-@x [4.62] l.968
+@x [4.62] l.967
err_print("! Input ended in section name");
@y
err_print(_("! Input ended in section name"));
@z
-@x [4.62] l.981
+@x [4.62] l.980
printf("%s","\n! Section name too long: ");
@y
printf("%s",_("\n! Section name too long: "));
@z
-@x [4.63] l.995
+@x [4.63] l.994
err_print("! Section name didn't end"); break;
@y
err_print(_("! Section name didn't end")); break;
@z
-@x [4.63] l.999
+@x [4.63] l.998
err_print("! Control codes are forbidden in section name"); break;
@y
err_print(_("! Control codes are forbidden in section name")); break;
@z
-@x [4.64] l.1009
+@x [4.64] l.1008
skip_restricted(void)
{
@y
@@ -363,19 +363,19 @@ skip_restricted(void)
{ int c=ccode[(eight_bits)*(loc-1)];
@z
-@x [4.64] l.1016
+@x [4.64] l.1015
err_print("! Control text didn't end"); loc=limit;
@y
err_print(_("! Control text didn't end")); loc=limit;
@z
-@x [4.64] l.1021
+@x [4.64] l.1020
err_print("! Control codes are forbidden in control text");
@y
err_print(_("! Control codes are forbidden in control text"));
@z
-@x [4.64] l.1022
+@x [4.64] l.1021
@.Control codes are forbidden...@>
@y
@.Control codes are forbidden...@>
@@ -383,68 +383,68 @@ skip_restricted(void)
else if (c==suppress && phase==2) @<Suppress mini-index entry@>@;
@z
-@x [4.66] l.1036
+@x [4.66] l.1035
if (loc>=limit) err_print("! Verbatim string didn't end");
@y
if (loc>=limit) err_print(_("! Verbatim string didn't end"));
@z
-@x [5.68] l.1061
+@x [5.68] l.1060
skip_limbo(); change_exists=false;
@y
skip_limbo();
@<Give a default title to the program, if necessary@>@;
@z
-@x [5.68] l.1064
+@x [5.68] l.1063
changed_section[section_count]=change_exists;
/* the index changes if anything does */
@y
@z
-@x [5.70] l.1073
+@x [5.70] l.1072
if (++section_count==max_sections) overflow("section number");
@y
if (++section_count==max_sections) overflow(_("section number"));
@z
-@x [5.70] l.1074
+@x [5.70] l.1073
changed_section[section_count]=changing;
/* it will become |true| if any line changes */
@y
@z
-@x [5.70] l.1083
+@x [5.70] l.1082
if (changed_section[section_count]) change_exists=true;
@y
@z
-@x [5.74] l.1162
+@x [5.74] l.1161
case translit_code: err_print("! Use @@l in limbo only"); continue;
@y
case translit_code: err_print(_("! Use @@l in limbo only")); continue;
@z
-@x [5.74] l.1167
+@x [5.74] l.1166
case xref_roman: case xref_wildcard: case xref_typewriter:
@y
case xref_roman: case xref_wildcard: case xref_typewriter:
case meaning: case suppress:
@z
-@x [5.79] l.1249
+@x [5.79] l.1248
err_print("! Missing left identifier of @@s");
@y
err_print(_("! Missing left identifier of @@s"));
@z
-@x [5.79] l.1254
+@x [5.79] l.1253
err_print("! Missing right identifier of @@s");
@y
err_print(_("! Missing right identifier of @@s"));
@z
-@x [5.82] l.1302
+@x [5.82] l.1301
printf("%s","\n! Never defined: <");
print_section_name(p); putchar('>'); mark_harmless();
@y
@@ -452,7 +452,7 @@ if (loc>=limit) err_print(_("! Verbatim string didn't end"));
print_section_name(p); putchar('>'); mark_harmless();
@z
-@x [5.82] l.1308
+@x [5.82] l.1307
printf("%s","\n! Never used: <");
print_section_name(p); putchar('>'); mark_harmless();
@y
@@ -460,7 +460,7 @@ if (loc>=limit) err_print(_("! Verbatim string didn't end"));
print_section_name(p); putchar('>'); mark_harmless();
@z
-@x [6.89] l.1397
+@x [6.89] l.1396
@ In particular, the |finish_line| procedure is called near the very
beginning of phase two. We initialize the output variables in a slightly
tricky way so that the first line of the output file will be
@@ -494,7 +494,7 @@ tex_puts(proofing?"ctproofma":"ctwima");
*out_ptr='c';
@z
-@x [6.90] l.1414
+@x [6.90] l.1413
@d out(c) {if (out_ptr>=out_buf_end) break_out(); *(++out_ptr)=c;}
@y
@d out(c)
@@ -508,102 +508,102 @@ tex_puts(proofing?"ctproofma":"ctwima");
}
@z
-@x [6.94] l.1462
+@x [6.94] l.1461
printf("\n! Line had to be broken (output l. %d):\n",out_line);
@y
printf(_("\n! Line had to be broken (output l. %d):\n"),out_line);
@z
-@x [6.95] l.1471
+@x [6.95] l.1470
|def_flag|, so it cannot have more than five decimal digits. If
the section is changed, we output `\.{\\*}' just after the number.
@y
|def_flag|, so it cannot have more than five decimal digits.
@z
-@x [6.96] l.1485
+@x [6.96] l.1484
if (changed_section[n]) out_str("\\*");
@.\\*@>
@y
@z
-@x [7.99] l.1543
+@x [7.99] l.1542
default: err_print("! Double @@ should be used in limbo");
@y
case right_start: right_start_switch=true; break;
default: err_print(_("! Double @@ should be used in limbo"));
@z
-@x [7.101] l.1585
+@x [7.101] l.1584
@d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow("token"); *(tok_ptr++)=c;}
@y
@d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow(_("token")); *(tok_ptr++)=c;}
@z
-@x [7.101] l.1597
+@x [7.101] l.1596
err_print("! Input ended in mid-comment");
@y
err_print(_("! Input ended in mid-comment"));
@z
-@x [7.101] l.1602
+@x [7.101] l.1601
if (bal>1) err_print("! Missing } in comment");
@y
if (bal>1) err_print(_("! Missing } in comment"));
@z
-@x [7.101] l.1618
+@x [7.101] l.1617
else {err_print("! Extra } in comment");
@y
else {err_print(_("! Extra } in comment"));
@z
-@x [7.102] l.1630
+@x [7.102] l.1629
if (bal>1) err_print("! Missing } in comment");
@y
if (bal>1) err_print(_("! Missing } in comment"));
@z
-@x [7.103] l.1638
+@x [7.103] l.1637
err_print("! Illegal use of @@ in comment");
@y
err_print(_("! Illegal use of @@ in comment"));
@z
-@x [8.106] l.1755
+@x [8.106] l.1754
@d attr_head 69 /* denotes beginning of attribute */
@y
@d attr_head 69 /* denotes beginning of attribute */
@d title 70 /* program name or header name in a ``meaning'' */
@z
-@x [8.110] l.2129
+@x [8.110] l.2128
@i prod.w
@y
@i prod-twill.w
@z
-@x [9.113] l.2179
+@x [9.113] l.2178
static scrap scrap_info[max_scraps]; /* memory array for scraps */
@y
static scrap scrap_info[max_scraps]; /* memory array for scraps */
static scrap null_scrap; /* a scrap with empty translation */
@z
-@x [9.114] l.2188
+@x [9.114] l.2187
@ @<Set init...@>=
@y
@ @<Set init...@>=
null_scrap.trans=&tok_start[0];
@z
-@x [9.116] l.2249
+@x [9.116] l.2248
update_terminal();
@y
puts("|"); update_terminal();
@z
-@x [9.124] l.2560
+@x [9.124] l.2559
the |for| loop below.
@c
@@ -618,7 +618,7 @@ static token_pointer tok_loc; /* where the first identifier appears */
@#
@z
-@x [9.124] l.2568
+@x [9.124] l.2567
token_pointer tok_loc; /* pointer to |tok_value| */
if ((tok_loc=find_first_ident(p->trans))<=operator_found)
return; /* this should not happen */
@@ -626,12 +626,12 @@ static token_pointer tok_loc; /* where the first identifier appears */
if (tok_loc<=operator_found) return; /* this should not happen */
@z
-@x [9.125] l.2597
+@x [9.125] l.2596
token_pointer tok_loc; /* where the first identifier appears */
@y
@z
-@x [9.128] l.2651
+@x [9.128] l.2650
@<Cases for |exp|@>=
if (cat1==lbrace || cat1==int_like || cat1==decl) {
make_underlined(pp); big_app(dindent); big_app1(pp);
@@ -646,7 +646,7 @@ if(cat1==lbrace || cat1==int_like || cat1==decl) {
}
@z
-@x [9.128] l.2666
+@x [9.128] l.2665
make_underlined (pp); squash(pp,2,tag,-1,7);
@y
make_underlined (pp);
@@ -657,7 +657,7 @@ if(cat1==lbrace || cat1==int_like || cat1==decl) {
squash(pp,2,tag,-1,7);
@z
-@x [9.138] l.2755
+@x [9.138] l.2754
@ @<Cases for |decl_head|@>=
if (cat1==comma) {
big_app2(pp); app(opt); app('9'); reduce(pp,2,decl_head,-1,33);
@@ -700,7 +700,7 @@ else if (cat1==int_like || cat1==lbrace || cat1==decl) {
else if (cat1==semi) squash(pp,2,decl,-1,39);
@z
-@x [9.139] l.2777
+@x [9.139] l.2776
@ @<Cases for |decl|@>=
if (cat1==decl) {
big_app1_insert(pp,force); reduce(pp,2,decl,-1,40);
@@ -719,13 +719,13 @@ else if (cat1==stmt || cat1==function) {
}
@z
-@x [9.141] l.2803
+@x [9.141] l.2802
make_underlined(pp+1); make_reserved(pp+1);
@y
make_underlined(pp+1); make_reserved(pp+1); make_ministring(pp+1);
@z
-@x [9.143] l.2834
+@x [9.143] l.2833
@ @<Cases for |fn_decl|@>=
if (cat1==decl) {
big_app1_insert(pp,force); reduce(pp,2,fn_decl,0,51);
@@ -748,14 +748,14 @@ else if (cat1==stmt) {
}
@z
-@x [9.153] l.2938
+@x [9.153] l.2937
big_app1_insert(pp,dindent); reduce(pp,2,fn_decl,0,73);
@y
big_app1(pp); if (indent_param_decl) big_app(dindent);
big_app1(pp+1); reduce(pp,2,fn_decl,0,73);
@z
-@x [9.156] l.2964
+@x [9.156] l.2963
big_app1_insert(pp, (cat1==decl || cat1==function) ? big_force :
force_lines ? force : break_space); reduce(pp,2,cat1,-1,76);
@y
@@ -764,7 +764,7 @@ else if (cat1==stmt) {
( force_lines ? force : break_space ) ); reduce(pp,2,cat1,-1,76);
@z
-@x [9.158] l.2972
+@x [9.158] l.2971
if (cat1==define_like) make_underlined(pp+2);
@y
if (cat1==define_like) { /* \#\&{define} is analogous to \&{extern} */
@@ -776,7 +776,7 @@ if (cat1==define_like) { /* \#\&{define} is analogous to \&{extern} */
}
@z
-@x [9.167] l.3069
+@x [9.167] l.3068
if (cat1==prelangle) reduce(pp+1,0,langle,1,100);
else reduce(pp,0,exp,-2,101);
@y
@@ -784,13 +784,13 @@ if (cat1==prelangle) reduce(pp+1,0,langle,1,121);
else reduce(pp,0,exp,-2,122);
@z
-@x [9.168] l.3074
+@x [9.168] l.3073
big_app1_insert(pp,' '); reduce(pp,2,else_like,-2,102);
@y
big_app1_insert(pp,' '); reduce(pp,2,else_like,-2,123);
@z
-@x [9.173] l.3106
+@x [9.173] l.3105
@ @<Cases for |typedef_like|@>=
if ((cat1==int_like || cat1==cast) && (cat2==comma || cat2==semi))
reduce(pp+1,0,exp,-1,115);
@@ -826,56 +826,56 @@ if (cat1==decl_head) {
(cat3==semi || cat3==comma)) reduce(pp+2,0,exp,1,202);
@z
-@x [9.186] l.3293
+@x [9.186] l.3292
overflow("token");
@y
overflow(_("token"));
@z
-@x [9.186] l.3297
+@x [9.186] l.3296
overflow("text");
@y
overflow(_("text"));
@z
-@x [9.190] l.3352
+@x [9.190] l.3351
if (tok_ptr+6>tok_mem_end) overflow("token");
@y
if (tok_ptr+6>tok_mem_end) overflow(_("token"));
@z
-@x [9.191] l.3358
+@x [9.191] l.3357
printf("\nIrreducible scrap sequence in section %d:",(int)section_count);
@y
printf(_("\nIrreducible scrap sequence in section %d:"),(int)section_count);
@z
-@x [9.192] l.3368
+@x [9.192] l.3367
printf("\nTracing after l. %d:\n",cur_line); mark_harmless();
@y
printf(_("\nTracing after l. %d:\n"),cur_line); mark_harmless();
@z
-@x [10.196] l.3454
+@x [10.196] l.3453
case ignore: case xref_roman: case xref_wildcard:
@y
case ignore: case xref_roman: case xref_wildcard:
case meaning: case suppress:
@z
-@x [10.197] l.3500
+@x [10.197] l.3499
overflow("scrap/token/text");
@y
overflow(_("scrap/token/text"));
@z
-@x [10.199] l.3585
+@x [10.199] l.3584
else err_print("! Double @@ should be used in strings");
@y
else err_print(_("! Double @@ should be used in strings"));
@z
-@x [10.202] l.3650
+@x [10.202] l.3649
else app_scrap(p->ilk,maybe_math);
}
}
@@ -886,62 +886,62 @@ if (cat1==decl_head) {
@<Flag the usage of this identifier, for the mini-index@>@;
@z
-@x [10.203] l.3668
+@x [10.203] l.3667
if (next_control!='|') err_print("! Missing '|' after C text");
@y
if (next_control!='|') err_print(_("! Missing '|' after C text"));
@z
-@x [10.204] l.3683
+@x [10.204] l.3682
to \.{\\PB}. Although \.{cwebmac} ignores \.{\\PB}, other macro packages
@y
to \.{\\PB}. Although \.{ctwimac} ignores \.{\\PB}, other macro packages
@z
-@x [10.205] l.3713
+@x [10.205] l.3712
app(tok_flag+(int)(p-tok_start));
@y
app(tok_flag+(int)(p-tok_start));
app(inserted);
@z
-@x [11.211] l.3809
+@x [11.211] l.3808
if (stack_ptr==stack_end) overflow("stack");
@y
if (stack_ptr==stack_end) overflow(_("stack"));
@z
-@x [11.224] l.4132
+@x [11.224] l.4131
printf("%s","\n! Illegal control code in section name: <");
@y
printf("%s",_("\n! Illegal control code in section name: <"));
@z
-@x [11.225] l.4147
+@x [11.225] l.4146
printf("%s","\n! C text in section name didn't end: <");
@y
printf("%s",_("\n! C text in section name didn't end: <"));
@z
-@x [11.225] l.4159
+@x [11.225] l.4158
if (j>buffer+long_buf_size-3) overflow("buffer");
@y
if (j>buffer+long_buf_size-3) overflow(_("buffer"));
@z
-@x [11.226] l.4167
+@x [11.226] l.4166
if (j>buffer+long_buf_size-4) overflow("buffer");
@y
if (j>buffer+long_buf_size-4) overflow(_("buffer"));
@z
-@x [12.227] l.4182
+@x [12.227] l.4181
if (show_progress) printf("%s","\nWriting the output file...");
@y
if (show_progress) printf("%s",_("\nWriting the output file..."));
@z
-@x [12.227] l.4184
+@x [12.227] l.4183
section_count=0; format_visible=true; copy_limbo();
@y
temp_switch=false; temp_meaning_ptr=temp_meaning_stack;
@@ -949,7 +949,7 @@ temp_switch=false; temp_meaning_ptr=temp_meaning_stack;
section_count=0; format_visible=true; right_start_switch=false; copy_limbo();
@z
-@x [12.229] l.4213
+@x [12.229] l.4212
static boolean group_found=false; /* has a starred section occurred? */
@ @<Translate the current section@>= {
@@ -966,12 +966,12 @@ static boolean temp_switch; /* has `\.{@@\%}' occurred recently? */
top_usage=usage_sentinel;
@z
-@x [12.231] l.4231
+@x [12.231] l.4230
If the section has changed, we put \.{\\*} just after the section number.
@y
@z
-@x [12.231] l.4234
+@x [12.231] l.4233
if (*(loc-1)!='*') out_str("\\M");
@y
if (*(loc-1)!='*') {
@@ -983,7 +983,7 @@ if (*(loc-1)!='*') {
}
@z
-@x [12.231] l.4249
+@x [12.231] l.4248
@.\\N@>
@y
@.\\N@>
@@ -993,14 +993,14 @@ if (*(loc-1)!='*') {
}
@z
-@x [12.231] l.4256
+@x [12.231] l.4255
out('{'); out_section(section_count); out('}');
@y
out('{'); out_section(section_count); out('}');
flush_buffer(out_ptr,false,false);
@z
-@x [12.232] l.4264
+@x [12.232] l.4263
case '@@': out('@@'); break;
@y
case '@@': out('@@'); break;
@@ -1008,26 +1008,26 @@ flush_buffer(out_ptr,false,false);
case right_start: right_start_switch=true; break;
@z
-@x [12.232] l.4267
+@x [12.232] l.4266
case section_name: loc-=2; next_control=get_next(); /* skip to \.{@@>} */
@y
case meaning: case suppress:
case section_name: loc-=2; next_control=get_next(); /* reprocess */
@z
-@x [12.232] l.4269
+@x [12.232] l.4268
err_print("! TeX string should be in C text only"); break;
@y
err_print(_("! TeX string should be in C text only")); break;
@z
-@x [12.232] l.4275
+@x [12.232] l.4274
err_print("! You can't do that in TeX text"); break;
@y
err_print(_("! You can't do that in TeX text")); break;
@z
-@x [12.233] l.4289
+@x [12.233] l.4288
outer_parse(); finish_C(format_visible); format_visible=true;
doing_format=false;
}
@@ -1039,20 +1039,20 @@ flush_buffer(out_ptr,false,false);
}
@z
-@x [12.236] l.4341
+@x [12.236] l.4340
@<Start a macro...@>= {
@y
@<Start a macro...@>= {
is_macro=true;
@z
-@x [12.236] l.4347
+@x [12.236] l.4346
err_print("! Improper macro definition");
@y
err_print(_("! Improper macro definition"));
@z
-@x [12.236] l.4348
+@x [12.236] l.4347
@.Improper macro definition@>
else {
app('$'); app_cur_id(false);
@@ -1064,7 +1064,7 @@ flush_buffer(out_ptr,false,false);
def_diff=(*loc!='(');
@z
-@x [12.236] l.4360
+@x [12.236] l.4359
} @=/* otherwise fall through */@>@;
default: err_print("! Improper macro definition"); break;
@y
@@ -1072,7 +1072,7 @@ flush_buffer(out_ptr,false,false);
default: err_print(_("! Improper macro definition")); break;
@z
-@x [12.237] l.4370
+@x [12.237] l.4369
@ @<Start a format...@>= {
doing_format=true;
@y
@@ -1081,25 +1081,25 @@ flush_buffer(out_ptr,false,false);
is_macro=false;
@z
-@x [12.237] l.4387
+@x [12.237] l.4386
if (scrap_ptr!=scrap_info+2) err_print("! Improper format definition");
@y
if (scrap_ptr!=scrap_info+2) err_print(_("! Improper format definition"));
@z
-@x [12.240] l.4422
+@x [12.240] l.4421
err_print("! You need an = sign after the section name");
@y
err_print(_("! You need an = sign after the section name"));
@z
-@x [12.241] l.4444
+@x [12.241] l.4443
err_print("! You can't do that in C text");
@y
err_print(_("! You can't do that in C text"));
@z
-@x [12.246] l.4514
+@x [12.246] l.4513
out_str("\\fi"); finish_line();
@.\\fi@>
@y
@@ -1110,13 +1110,13 @@ out_str("}\\FI"); finish_line();
@.\\FI@>
@z
-@x [13.247] l.4535
+@x [13.247] l.4534
if (show_progress) printf("%s","\nWriting the index...");
@y
if (show_progress) printf("%s",_("\nWriting the index..."));
@z
-@x [13.247] l.4537
+@x [13.247] l.4536
if (change_exists) {
@<Tell about changed sections@>@;
finish_line(); flush_buffer(out_buf,false,false);
@@ -1125,32 +1125,32 @@ out_str("}\\FI"); finish_line();
@y
@z
-@x [13.247] l.4546
+@x [13.247] l.4545
fatal("! Cannot open index file ",idx_file_name);
@y
fatal(_("! Cannot open index file "),idx_file_name);
@z
-@x [13.247] l.4558
+@x [13.247] l.4557
fatal("! Cannot open section file ",scn_file_name);
@y
fatal(_("! Cannot open section file "),scn_file_name);
@z
-@x [13.247] l.4570
+@x [13.247] l.4569
fclose(active_file);
@y
fclose(active_file); active_file=tex_file=NULL;
if (check_for_change) @<Update the result when it has changed@>@;
@z
-@x [13.247] l.4573
+@x [13.247] l.4572
printf("%s","Done.");
@y
printf("%s",_("Done."));
@z
-@x [13.249] l.4581
+@x [13.249] l.4580
the index section itself.
@<Tell about changed sections@>=
@@ -1169,13 +1169,13 @@ out('.');
the index section itself---NOT!
@z
-@x [13.257] l.4725
+@x [13.257] l.4724
if (sort_ptr>=scrap_info_end) overflow("sorting");
@y
if (sort_ptr>=scrap_info_end) overflow(_("sorting"));
@z
-@x [13.262] l.4770
+@x [13.262] l.4769
@ @<Output the name...@>=
switch (cur_name->ilk) {@+char *p; /* index into |byte_mem| */@+@t}\6{\4@>
@y
@@ -1186,20 +1186,20 @@ rest of the job. Compare this code with section |@<Mini-output...@>|.
switch (cur_name->ilk) {
@z
-@x [13.262] l.4772
+@x [13.262] l.4771
case normal: case func_template:
@y
case normal:
@z
-@x [13.262] l.4774
+@x [13.262] l.4773
else {@+boolean all_caps=true;@+@t}\6{@>
@y
else {@+boolean all_caps=true;@+char *p;
/* index into |byte_mem| */ @+@t}\6{@>
@z
-@x [13.262] l.4789
+@x [13.262] l.4788
case roman: not_an_identifier: out_name(cur_name,false); goto name_done;
case custom:
out_str("$\\");
@@ -1214,13 +1214,13 @@ not_an_identifier: out_name(cur_name,false); goto name_done;
@.\\\$@>
@z
-@x [13.262] l.4799
+@x [13.262] l.4798
out_name(cur_name,true);
@y
out_name(cur_name,proofing);
@z
-@x [13.269] l.4862
+@x [13.269] l.4861
puts("\nMemory usage statistics:");
@.Memory usage statistics:@>
printf("%td names (out of %ld)\n",@^system dependencies@>
@@ -1269,7 +1269,7 @@ out_name(cur_name,proofing);
(ptrdiff_t)(max_sort_ptr-scrap_info),(long)max_scraps);
@z
-@x [14.270] l.4884
+@x [14.270] l.4883
@** Index.
@y
@q Section 270. @>
diff --git a/Build/source/texk/web2c/cwebdir/cweav-bs.ch b/Build/source/texk/web2c/cwebdir/cweav-bs.ch
index c2f3214c793..458a0a7e60c 100644
--- a/Build/source/texk/web2c/cwebdir/cweav-bs.ch
+++ b/Build/source/texk/web2c/cwebdir/cweav-bs.ch
@@ -20,12 +20,12 @@ This file contributed by Barry Schwartz, trashman@crud.mn.org, 28 Jun 94.
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 4.11)"
+@d banner "This is CWEAVE (Version 4.12)"
@y
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 4.11pc/big)"
+@d banner "This is CWEAVE (Version 4.12pc/big)"
@z
diff --git a/Build/source/texk/web2c/cwebdir/cweav-pc.ch b/Build/source/texk/web2c/cwebdir/cweav-pc.ch
index 165b8a54eeb..ae1fb9f45c7 100644
--- a/Build/source/texk/web2c/cwebdir/cweav-pc.ch
+++ b/Build/source/texk/web2c/cwebdir/cweav-pc.ch
@@ -11,9 +11,9 @@ that allows >64K arrays. (If you need lots more bytes, try the alternate
change files that have -bs in their name instead of -pc.)
@x section 1
-@d banner "This is CWEAVE (Version 4.11)"
+@d banner "This is CWEAVE (Version 4.12)"
@y
-@d banner "This is CWEAVE (Version 4.11pc)"
+@d banner "This is CWEAVE (Version 4.12pc)"
@z
@x section 17
diff --git a/Build/source/texk/web2c/cwebdir/cweav-ql.ch b/Build/source/texk/web2c/cwebdir/cweav-ql.ch
index 31bd6138a29..fd369064deb 100644
--- a/Build/source/texk/web2c/cwebdir/cweav-ql.ch
+++ b/Build/source/texk/web2c/cwebdir/cweav-ql.ch
@@ -7,15 +7,15 @@ ex <dev_>cc;"-v -h -c =500000 cweave_c"
@x
-\def\title{CWEAVE (Version 4.11)}
+\def\title{CWEAVE (Version 4.12)}
@y
-\def\title{CWEAVE (QL Version 4.11)}
+\def\title{CWEAVE (QL Version 4.12)}
@z
@x section 1
-@d banner "This is CWEAVE (Version 4.11)"
+@d banner "This is CWEAVE (Version 4.12)"
@y
-@d banner "This is CWEAVE (QL Version 4.11)"
+@d banner "This is CWEAVE (QL Version 4.12)"
@z
@x
diff --git a/Build/source/texk/web2c/cwebdir/cweav-vms.ch b/Build/source/texk/web2c/cwebdir/cweav-vms.ch
index b944f838153..f4630f98661 100644
--- a/Build/source/texk/web2c/cwebdir/cweav-vms.ch
+++ b/Build/source/texk/web2c/cwebdir/cweav-vms.ch
@@ -13,9 +13,9 @@ modified:
(also modified by Don Knuth to keep version numbers uptodate)
@x section 1 (01-FEB-1992 ST)
-@d banner "This is CWEAVE (Version 4.11)"
+@d banner "This is CWEAVE (Version 4.12)"
@y
-@d banner "This is CWEAVE (VAX/VMS Version 4.11)"
+@d banner "This is CWEAVE (VAX/VMS Version 4.12)"
@z
@x section 5 (01-FEB-1992 ST)
diff --git a/Build/source/texk/web2c/cwebdir/cweav-w2c.ch b/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
index 73b9ab4b2c9..6d350fc405a 100644
--- a/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
@@ -16,62 +16,62 @@
@q Please send comments, suggestions, etc. to tex-k@@tug.org. @>
-@x [0.0] l.35
-\def\title{CWEAVE (Version 4.11)}
+@x [0.0] l.34
+\def\title{CWEAVE (Version 4.12)}
@y
-\def\title{CWEAVE (Version 4.11 [\TeX~Live])}
+\def\title{CWEAVE (Version 4.12 [\TeX~Live])}
@z
-@x [0.0] l.39
- \centerline{(Version 4.11)}
+@x [0.0] l.38
+ \centerline{(Version 4.12)}
@y
- \centerline{(Version 4.11 [\TeX~Live])}
+ \centerline{(Version 4.12 [\TeX~Live])}
@z
-@x [0.0] l.41
+@x [0.0] l.40
\def\botofcontents{\vfill
@y
\def\covernote{\vbox{%
@z
-@x [0.0] l.54
+@x [0.0] l.53
}
@y
}}\datecontentspage
@z
-@x [1.1] l.70
-@d banner "This is CWEAVE (Version 4.11)"
+@x [1.1] l.69
+@d banner "This is CWEAVE (Version 4.12)"
@y
-@d banner "This is CWEAVE, Version 4.11"
+@d banner "This is CWEAVE, Version 4.12"
/* will be extended by the \TeX~Live |versionstring| */
@z
-@x [1.2] l.98
+@x [1.2] l.97
if (show_banner) puts(banner); /* print a ``banner line'' */
@y
if (show_banner) cb_show_banner(); /* print a ``banner line'' */
@z
-@x [1.3] l.112
+@x [1.3] l.111
@i common.h
@y
@i comm-w2c.h
@z
-@x [2.23] l.217
+@x [2.23] l.216
@ @d max_refs 30000 /* number of cross-references; must be less than 65536 */
@y
@ @d max_refs 65535 /* number of cross-references; must be less than 65536 */
@z
-@x [2.25] l.246
+@x [2.25] l.245
@d append_xref(c) if (xref_ptr==xmem_end) overflow("cross-reference");
@y
@d append_xref(c) if (xref_ptr==xmem_end) overflow(_("cross-reference"));
@z
-@x [2.30] l.337
+@x [2.30] l.336
@d max_toks 30000 /* number of symbols in \CEE/ texts being parsed;
must be less than 65536 */
@d max_texts 8000 /* number of phrases in \CEE/ texts being parsed;
@@ -83,97 +83,97 @@
must be less than 10240 */
@z
-@x [4.57] l.888
+@x [4.57] l.887
err_print("! String didn't end"); loc=limit; break;
@y
err_print(_("! String didn't end")); loc=limit; break;
@z
-@x [4.57] l.892
+@x [4.57] l.891
err_print("! Input ended in middle of string"); loc=buffer; break;
@y
err_print(_("! Input ended in middle of string")); loc=buffer; break;
@z
-@x [4.57] l.911
+@x [4.57] l.910
printf("%s","\n! String too long: ");
@y
printf("%s",_("\n! String too long: "));
@z
-@x [4.59] l.930
+@x [4.59] l.929
case translit_code: err_print("! Use @@l in limbo only"); continue;
@y
case translit_code: err_print(_("! Use @@l in limbo only")); continue;
@z
-@x [4.62] l.968
+@x [4.62] l.967
err_print("! Input ended in section name");
@y
err_print(_("! Input ended in section name"));
@z
-@x [4.62] l.981
+@x [4.62] l.980
printf("%s","\n! Section name too long: ");
@y
printf("%s",_("\n! Section name too long: "));
@z
-@x [4.63] l.995
+@x [4.63] l.994
err_print("! Section name didn't end"); break;
@y
err_print(_("! Section name didn't end")); break;
@z
-@x [4.63] l.999
+@x [4.63] l.998
err_print("! Control codes are forbidden in section name"); break;
@y
err_print(_("! Control codes are forbidden in section name")); break;
@z
-@x [4.64] l.1016
+@x [4.64] l.1015
err_print("! Control text didn't end"); loc=limit;
@y
err_print(_("! Control text didn't end")); loc=limit;
@z
-@x [4.64] l.1021
+@x [4.64] l.1020
err_print("! Control codes are forbidden in control text");
@y
err_print(_("! Control codes are forbidden in control text"));
@z
-@x [4.66] l.1036
+@x [4.66] l.1035
if (loc>=limit) err_print("! Verbatim string didn't end");
@y
if (loc>=limit) err_print(_("! Verbatim string didn't end"));
@z
-@x [5.70] l.1073
+@x [5.70] l.1072
if (++section_count==max_sections) overflow("section number");
@y
if (++section_count==max_sections) overflow(_("section number"));
@z
-@x [5.74] l.1162
+@x [5.74] l.1161
case translit_code: err_print("! Use @@l in limbo only"); continue;
@y
case translit_code: err_print(_("! Use @@l in limbo only")); continue;
@z
-@x [5.79] l.1249
+@x [5.79] l.1248
err_print("! Missing left identifier of @@s");
@y
err_print(_("! Missing left identifier of @@s"));
@z
-@x [5.79] l.1254
+@x [5.79] l.1253
err_print("! Missing right identifier of @@s");
@y
err_print(_("! Missing right identifier of @@s"));
@z
-@x [5.82] l.1302
+@x [5.82] l.1301
printf("%s","\n! Never defined: <");
print_section_name(p); putchar('>'); mark_harmless();
@y
@@ -181,7 +181,7 @@ if (loc>=limit) err_print(_("! Verbatim string didn't end"));
print_section_name(p); putchar('>'); mark_harmless();
@z
-@x [5.82] l.1308
+@x [5.82] l.1307
printf("%s","\n! Never used: <");
print_section_name(p); putchar('>'); mark_harmless();
@y
@@ -189,7 +189,7 @@ if (loc>=limit) err_print(_("! Verbatim string didn't end"));
print_section_name(p); putchar('>'); mark_harmless();
@z
-@x [6.89] l.1397
+@x [6.89] l.1396
@ In particular, the |finish_line| procedure is called near the very
beginning of phase two. We initialize the output variables in a slightly
tricky way so that the first line of the output file will be
@@ -218,61 +218,61 @@ tex_puts("cwebma");
*out_ptr='c';
@z
-@x [6.94] l.1462
+@x [6.94] l.1461
printf("\n! Line had to be broken (output l. %d):\n",out_line);
@y
printf(_("\n! Line had to be broken (output l. %d):\n"),out_line);
@z
-@x [7.99] l.1543
+@x [7.99] l.1542
default: err_print("! Double @@ should be used in limbo");
@y
default: err_print(_("! Double @@ should be used in limbo"));
@z
-@x [7.101] l.1585
+@x [7.101] l.1584
@d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow("token"); *(tok_ptr++)=c;}
@y
@d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow(_("token")); *(tok_ptr++)=c;}
@z
-@x [7.101] l.1597
+@x [7.101] l.1596
err_print("! Input ended in mid-comment");
@y
err_print(_("! Input ended in mid-comment"));
@z
-@x [7.101] l.1602
+@x [7.101] l.1601
if (bal>1) err_print("! Missing } in comment");
@y
if (bal>1) err_print(_("! Missing } in comment"));
@z
-@x [7.101] l.1618
+@x [7.101] l.1617
else {err_print("! Extra } in comment");
@y
else {err_print(_("! Extra } in comment"));
@z
-@x [7.102] l.1630
+@x [7.102] l.1629
if (bal>1) err_print("! Missing } in comment");
@y
if (bal>1) err_print(_("! Missing } in comment"));
@z
-@x [7.103] l.1638
+@x [7.103] l.1637
err_print("! Illegal use of @@ in comment");
@y
err_print(_("! Illegal use of @@ in comment"));
@z
-@x [8.110] l.2129
+@x [8.110] l.2128
@i prod.w
@y
@i prod-cweave.w
@z
-@x [9.128] l.2651
+@x [9.128] l.2650
@<Cases for |exp|@>=
if (cat1==lbrace || cat1==int_like || cat1==decl) {
make_underlined(pp); big_app(dindent); big_app1(pp);
@@ -286,7 +286,7 @@ if(cat1==lbrace || cat1==int_like || cat1==decl) {
}
@z
-@x [9.138] l.2755
+@x [9.138] l.2754
@ @<Cases for |decl_head|@>=
if (cat1==comma) {
big_app2(pp); app(opt); app('9'); reduce(pp,2,decl_head,-1,33);
@@ -328,7 +328,7 @@ else if (cat1==int_like || cat1==lbrace || cat1==decl) {
else if (cat1==semi) squash(pp,2,decl,-1,39);
@z
-@x [9.139] l.2777
+@x [9.139] l.2776
@ @<Cases for |decl|@>=
if (cat1==decl) {
big_app1_insert(pp,force); reduce(pp,2,decl,-1,40);
@@ -347,7 +347,7 @@ else if (cat1==stmt || cat1==function) {
}
@z
-@x [9.143] l.2834
+@x [9.143] l.2833
@ @<Cases for |fn_decl|@>=
if (cat1==decl) {
big_app1_insert(pp,force); reduce(pp,2,fn_decl,0,51);
@@ -370,14 +370,14 @@ else if (cat1==stmt) {
}
@z
-@x [9.153] l.2938
+@x [9.153] l.2937
big_app1_insert(pp,dindent); reduce(pp,2,fn_decl,0,73);
@y
big_app1(pp); if (indent_param_decl) big_app(dindent);
big_app1(pp+1); reduce(pp,2,fn_decl,0,73);
@z
-@x [9.156] l.2964
+@x [9.156] l.2963
big_app1_insert(pp, (cat1==decl || cat1==function) ? big_force :
force_lines ? force : break_space); reduce(pp,2,cat1,-1,76);
@y
@@ -386,109 +386,109 @@ else if (cat1==stmt) {
( force_lines ? force : break_space ) ); reduce(pp,2,cat1,-1,76);
@z
-@x [9.186] l.3293
+@x [9.186] l.3292
overflow("token");
@y
overflow(_("token"));
@z
-@x [9.186] l.3297
+@x [9.186] l.3296
overflow("text");
@y
overflow(_("text"));
@z
-@x [9.190] l.3352
+@x [9.190] l.3351
if (tok_ptr+6>tok_mem_end) overflow("token");
@y
if (tok_ptr+6>tok_mem_end) overflow(_("token"));
@z
-@x [9.191] l.3358
+@x [9.191] l.3357
printf("\nIrreducible scrap sequence in section %d:",(int)section_count);
@y
printf(_("\nIrreducible scrap sequence in section %d:"),(int)section_count);
@z
-@x [9.192] l.3368
+@x [9.192] l.3367
printf("\nTracing after l. %d:\n",cur_line); mark_harmless();
@y
printf(_("\nTracing after l. %d:\n"),cur_line); mark_harmless();
@z
-@x [10.197] l.3500
+@x [10.197] l.3499
overflow("scrap/token/text");
@y
overflow(_("scrap/token/text"));
@z
-@x [10.199] l.3585
+@x [10.199] l.3584
else err_print("! Double @@ should be used in strings");
@y
else err_print(_("! Double @@ should be used in strings"));
@z
-@x [10.203] l.3668
+@x [10.203] l.3667
if (next_control!='|') err_print("! Missing '|' after C text");
@y
if (next_control!='|') err_print(_("! Missing '|' after C text"));
@z
-@x [11.211] l.3809
+@x [11.211] l.3808
if (stack_ptr==stack_end) overflow("stack");
@y
if (stack_ptr==stack_end) overflow(_("stack"));
@z
-@x [11.224] l.4132
+@x [11.224] l.4131
printf("%s","\n! Illegal control code in section name: <");
@y
printf("%s",_("\n! Illegal control code in section name: <"));
@z
-@x [11.225] l.4147
+@x [11.225] l.4146
printf("%s","\n! C text in section name didn't end: <");
@y
printf("%s",_("\n! C text in section name didn't end: <"));
@z
-@x [11.225] l.4159
+@x [11.225] l.4158
if (j>buffer+long_buf_size-3) overflow("buffer");
@y
if (j>buffer+long_buf_size-3) overflow(_("buffer"));
@z
-@x [11.226] l.4167
+@x [11.226] l.4166
if (j>buffer+long_buf_size-4) overflow("buffer");
@y
if (j>buffer+long_buf_size-4) overflow(_("buffer"));
@z
-@x [12.227] l.4182
+@x [12.227] l.4181
if (show_progress) printf("%s","\nWriting the output file...");
@y
if (show_progress) printf("%s",_("\nWriting the output file..."));
@z
-@x [12.232] l.4269
+@x [12.232] l.4268
err_print("! TeX string should be in C text only"); break;
@y
err_print(_("! TeX string should be in C text only")); break;
@z
-@x [12.232] l.4275
+@x [12.232] l.4274
err_print("! You can't do that in TeX text"); break;
@y
err_print(_("! You can't do that in TeX text")); break;
@z
-@x [12.236] l.4347
+@x [12.236] l.4346
err_print("! Improper macro definition");
@y
err_print(_("! Improper macro definition"));
@z
-@x [12.236] l.4360
+@x [12.236] l.4359
} @=/* otherwise fall through */@>@;
default: err_print("! Improper macro definition"); break;
@y
@@ -496,62 +496,62 @@ if (show_progress) printf("%s",_("\nWriting the output file..."));
default: err_print(_("! Improper macro definition")); break;
@z
-@x [12.237] l.4387
+@x [12.237] l.4386
if (scrap_ptr!=scrap_info+2) err_print("! Improper format definition");
@y
if (scrap_ptr!=scrap_info+2) err_print(_("! Improper format definition"));
@z
-@x [12.240] l.4422
+@x [12.240] l.4421
err_print("! You need an = sign after the section name");
@y
err_print(_("! You need an = sign after the section name"));
@z
-@x [12.241] l.4444
+@x [12.241] l.4443
err_print("! You can't do that in C text");
@y
err_print(_("! You can't do that in C text"));
@z
-@x [13.247] l.4535
+@x [13.247] l.4534
if (show_progress) printf("%s","\nWriting the index...");
@y
if (show_progress) printf("%s",_("\nWriting the index..."));
@z
-@x [13.247] l.4546
+@x [13.247] l.4545
fatal("! Cannot open index file ",idx_file_name);
@y
fatal(_("! Cannot open index file "),idx_file_name);
@z
-@x [13.247] l.4558
+@x [13.247] l.4557
fatal("! Cannot open section file ",scn_file_name);
@y
fatal(_("! Cannot open section file "),scn_file_name);
@z
-@x [13.247] l.4570
+@x [13.247] l.4569
fclose(active_file);
@y
fclose(active_file); active_file=tex_file=NULL;
if (check_for_change) @<Update the result when it has changed@>@;
@z
-@x [13.247] l.4573
+@x [13.247] l.4572
printf("%s","Done.");
@y
printf("%s",_("Done."));
@z
-@x [13.257] l.4725
+@x [13.257] l.4724
if (sort_ptr>=scrap_info_end) overflow("sorting");
@y
if (sort_ptr>=scrap_info_end) overflow(_("sorting"));
@z
-@x [13.269] l.4862
+@x [13.269] l.4861
puts("\nMemory usage statistics:");
@.Memory usage statistics:@>
printf("%td names (out of %ld)\n",@^system dependencies@>
@@ -595,7 +595,7 @@ if (check_for_change) @<Update the result when it has changed@>@;
(ptrdiff_t)(max_sort_ptr-scrap_info),(long)max_scraps);
@z
-@x [14.270] l.4884
+@x [14.270] l.4883
@** Index.
@y
@** Extensions to {\tentex CWEB}. The following sections introduce new or
diff --git a/Build/source/texk/web2c/cwebdir/cweav-w32.ch b/Build/source/texk/web2c/cwebdir/cweav-w32.ch
index 1bf1471e18e..2f9a2127ac5 100644
--- a/Build/source/texk/web2c/cwebdir/cweav-w32.ch
+++ b/Build/source/texk/web2c/cwebdir/cweav-w32.ch
@@ -2,9 +2,9 @@ This is the change file for CWEB's CWEAVE under Win32
(Contributed by Fabrice Popineau, February 2002)
@x section 1
-@d banner "This is CWEAVE (Version 4.11)"
+@d banner "This is CWEAVE (Version 4.12)"
@y
-@d banner "This is CWEAVE (Version 4.11win32)"
+@d banner "This is CWEAVE (Version 4.12win32)"
@z
@x section 32
diff --git a/Build/source/texk/web2c/cwebdir/cweave.w b/Build/source/texk/web2c/cwebdir/cweave.w
index 808d46cc7eb..627fa1fa815 100644
--- a/Build/source/texk/web2c/cwebdir/cweave.w
+++ b/Build/source/texk/web2c/cwebdir/cweave.w
@@ -2,7 +2,7 @@
% 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.11 --- December 2023
+% Version 4.12 --- August 2024
% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -27,16 +27,15 @@
\def\dleft{[\![} \def\dright{]\!]} % double brackets
\mathchardef\RA="3221 % right arrow
\mathchardef\BA="3224 % double arrow
-\def\({} % ) kludge for alphabetizing certain section names
\def\TeXxstring{\\{\TEX/\_string}}
\def\skipxTeX{\\{skip\_\TEX/}}
\def\copyxTeX{\\{copy\_\TEX/}}
-\def\title{CWEAVE (Version 4.11)}
+\def\title{CWEAVE (Version 4.12)}
\def\topofcontents{\null\vfill
\centerline{\titlefont The {\ttitlefont CWEAVE} processor}
\vskip 15pt
- \centerline{(Version 4.11)}
+ \centerline{(Version 4.12)}
\vfill}
\def\botofcontents{\vfill
\noindent
@@ -67,7 +66,7 @@ Crusius, and others who have contributed improvements.
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 4.11)"
+@d banner "This is CWEAVE (Version 4.12)"
@c
@<Include files@>@/
diff --git a/Build/source/texk/web2c/cwebdir/cwebacromac.tex b/Build/source/texk/web2c/cwebdir/cwebacromac.tex
index f8462d06a37..3e8baad77c1 100644
--- a/Build/source/texk/web2c/cwebdir/cwebacromac.tex
+++ b/Build/source/texk/web2c/cwebdir/cwebacromac.tex
@@ -1,6 +1,8 @@
% hypertext macros for CWEB listings (in addition to cwebmac.tex)
-% Version 2.0 --- May 2024
+% Used in cwebmac.tex, pdfctwimac.tex, pdfproofmac.tex
+% Version 3.0 --- August 2024
\ifx\ifacrohint\undefined\endinput\fi % these are not standalone macros
+
\ifluatex % LuaTeX is almost like pdfTeX
\protected\def\pdfliteral {\pdfextension literal}
\protected\def\pdfstartlink {\pdfextension startlink\space}
@@ -15,7 +17,6 @@
\let\pdfoutput=\outputmode
\fi % end of LuaTeX->pdfTeX redirection macros
-% Used in cwebmac.tex, pdfctwimac.tex, pdfproofmac.tex
\def\tocpages{1} % Most programs have one-page Table-of-Contents
\def\startpdf{\def\pagemode{/PageMode /UseOutlines}
\ifnum\contentspagenumber=0 \advance \pageno by -\tocpages
@@ -24,9 +25,53 @@
\else \twodigits=\pageno \pageno=\contentspagenumber
\advance \pageno by \tocpages \advance \twodigits by -\pageno
\def\pagelabels{/PageLabels << /Nums [ 0 << /S/D/St \the\pageno >>
- \the\twodigits << /S/D/St \contentspagenumber >> ] >>} \fi
+ \the\twodigits << /S/D/St \contentspagenumber >> ] >>}
+ \fi
\ifpdflua\pdfcatalog{\pagemode\space\pagelabels}
- \else \special{pdf: docview << \pagemode\space\pagelabels >>}\fi}
+ \else\special{pdf: docview << \pagemode\space\pagelabels >>}\fi}
+\ifacrohint\def\digits{\pdflink{\the\countA}\scan}
+\else\def\digits{{\the\countA}\scan}\fi
+\def\scan#1{\begingroup
+ \ifx!#1% exit on exclamation point
+ \else\ifx,#1,\space\aftergroup\scan % insert ,\space}\scan ...
+ \else\ifx\[#1\aftergroup#1% insert }\[...
+ \else\ifx\*#1\aftergroup\lapstar\aftergroup\scan % insert }\lapstar\scan ...
+ \else\ifnum`#1>`9#1\aftergroup\scan % insert #1}\scan ...
+ \else\ifnum`#1<`0#1\aftergroup\scan % insert #1}\scan ...
+ \else
+ \afterassignment\digits \aftergroup\countA
+ \aftergroup#1% insert }\countA=#1...\digits ...
+ \fi\fi\fi\fi\fi \fi
+ \endgroup}
+
+% Local variables; there are a few externals like '\toksA' and '\countA'
+\newtoks\toksB \newtoks\toksC \newtoks\toksD \newtoks\toksF \newtoks\sanitizer
+\newif\iftokprocessed \newif\ifTnum \newif\ifinstr \newif\ifhavenum
+
+\ifacrohint % Common macros for \ifacro and \ifhint to create \pdflink's
+\def\pdfnote#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}\maketoks}\the\toksA}
+\def\firstsecno#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}%
+ \def\makenote{\addtokens\toksB{\the\toksC}\def\makenote{\let\space\empty
+ \toksC={}\toksD={}}\makenote}\maketoks}}
+\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+\def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}%
+ \ifcat\noexpand\first0\countB=`#1\else\countB=0\fi}
+\def\maketoks{\expandafter\poptoks\the\toksA|ENDTOKS|%
+ \let\next=\maketoks % continue processing by default
+ \ifnum\countB>`9 \countB=0 \fi
+ \ifnum\countB<`0
+ \ifhavenum\makenote\fi
+ \ifx\first.\let\next=\maketoksdone % fullstop
+ \else \addtokens\toksB{\the\toksD} \ifx\first,\addtokens\toksB{\space}\fi
+ \fi
+ \else \addtokens\toksC{\the\toksD}\global\havenumtrue
+ \fi
+ \next
+}
+\def\makenote{\addtokens\toksB
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\havenumfalse}
+\def\maketoksdone{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\fi % End of common pdf/hint macros
\ifacro % The following are general pdf macros
\def\thewidth{\the\wd0 \space}
@@ -34,13 +79,14 @@
\def\thedepth{\the\dp\strutbox\space}
\ifpdflua
\ifx\pdfannotlink\undefined\let\pdfannotlink\pdfstartlink\fi% for pdfTeX 0.14
- \def\pdflink#1#2{\hbox{\pdfannotlink height \theheight depth \thedepth
+ \def\pdflink#1{\hbox{\pdfannotlink height \theheight depth \thedepth
attr{/Border [0 0 0]} goto num #1 \Blue #1\Black\pdfendlink}} % changed 3.69
-\else\def\pdflink#1#2{\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}%
+\else\def\pdflink#1{\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}%
\special{pdf: ec}}\special{pdf: ann width \thewidth height \theheight
- depth \thedepth << /Type /Annot /Subtype /Link
- /Border [0 0 0] /A << /S /GoTo /D (#2) >> >>}\box0\relax}\fi
-\def\sanitizecommand#1#2{\addtokens\usersanitizer
+ depth \thedepth << /Type /Annot /Subtype /Link /Border [0 0 0]
+ /A << /S /GoTo /D (\romannumeral#1) >> >>}\box0\relax}
+\fi
+\def\sanitizecommand#1#2{\addtokens\sanitizer
{\noexpand\dosanitizecommand\noexpand#1{#2}}}
\def\dosanitizecommand#1#2{\ifx\nxt#1\addF{#2}\fi}
@@ -49,7 +95,8 @@
\catcode`\[=12 \catcode`\]=12 \catcode`\{=1 \catcode`\}=2
\catcode`\~=12 \def\tildechar{~} \catcode`\~=13
\catcode`\|=0 |catcode`|\=12 |def|bschar{\} |catcode`|\=0 \catcode`\|=12
-\def\makeoutlinetoks{\Tnumfalse\afterassignment\makeolproctok\let\nxt= }
+\def\makeoutlinetoks{\toksF={}\Tnumfalse
+ \afterassignment\makeolproctok\let\nxt= }
\def\makeolnexttok{\afterassignment\makeolproctok\let\nxt= }
\def\makeolgobbletok{\afterassignment\makeolnexttok\let\nxt= }
\def\addF#1{\addtokens\toksF{#1}\tokprocessedtrue}
@@ -64,7 +111,7 @@
\else\if\noexpand\nxt\relax % we have a control sequence; is it one we know?
\ifx\nxt~\addF\space
\else\ifx\nxt\onespace\addF\space
- \else\the\usersanitizer
+ \else\the\sanitizer
\iftokprocessed\else\makeolproctokctli
\iftokprocessed\else\makeolproctokctlii
\iftokprocessed\else\makeolproctokctliii % if not recognised, skip it
@@ -141,48 +188,19 @@
\fi\fi\fi\fi\fi
}
\def\outlinedone{\edef\outlinest{\global\noexpand\toksE={\the\toksF}}%
- \outlinest\let\outlinedone=\relax}
+ \outlinest\let\outlinedone=\relax\outlinedone}
\fi % End of pdf macros
\ifhint
-% The following uses HINT primitives to implement:
+% The following top level macros use HINT primitives to implement:
% \HINThome to mark the position of the home page
% \HINTlabel to attach a label to the top of a section
% \HINTlink to link a section number to the section label
% \HINTcontents to produce an 'outline' item
-% These are the top level HINT macros that are used in this file
-% No HINT primitives are used directly.
\def\HINThome{\HINTdest name {HINT.home}%
\HINToutline goto name {HINT.home} depth 1 {Table of Contents}}
\def\HINTlabel{{\let\*=\empty\HINTdest num \secstar top}}
-\def\HINTlink#1#2{\HINTstartlink goto num #1 {#1}\HINTendlink}% #2 not used ???
+\def\HINTlink#1{\HINTstartlink goto num #1 {#1}\HINTendlink}
\def\HINTcontents#1#2#3{\HINToutline goto num #3 depth #2 {#1}}
\let\pdflink=\HINTlink
\fi % End of HINT macros
-
-% Common macros for \ifacro and \ifhint
-\ifacrohint
-\def\pdfnote#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}\maketoks}\the\toksA}
-\def\firstsecno#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}%
- \def\makenote{\addtokens\toksB{\the\toksC}\def\makenote{\toksD={}
- \toksC={}\let\space\empty}\makenote}\maketoks}}
-\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-\def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}%
- \ifcat\noexpand\first0\countB=`#1\else\countB=0\fi\toksA={#2}}
-\def\maketoks{\expandafter\poptoks\the\toksA|ENDTOKS|%
- \ifnum\countB>`9 \countB=0 \fi
- \ifnum\countB<`0
- \ifnum0=\countC\else\makenote\fi
- \ifx\first.\let\next=\maketoksdone\else
- \let\next=\maketoks
- \addtokens\toksB{\the\toksD}
- \ifx\first,\addtokens\toksB{\space}\fi
- \fi
- \else \addtokens\toksC{\the\toksD}\global\countC=1\let\next=\maketoks
- \fi
- \next
-}
-\def\makenote{\addtokens\toksB
- {\noexpand\pdflink{\the\toksC}{\romannumeral\the\toksC}}\toksC={}\global\countC=0}
-\def\maketoksdone{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-\fi % End of common macros
diff --git a/Build/source/texk/web2c/cwebdir/cwebmac.tex b/Build/source/texk/web2c/cwebdir/cwebmac.tex
index 99e899476ce..a46dc4b782f 100644
--- a/Build/source/texk/web2c/cwebdir/cwebmac.tex
+++ b/Build/source/texk/web2c/cwebdir/cwebmac.tex
@@ -1,26 +1,14 @@
% standard macros for CWEB listings (in addition to plain.tex)
-% Version 4.12 --- May 2024
+% Version 4.12 --- August 2024
\ifx\renewenvironment\undefined\else\endinput\fi % LaTeX will use other macros
\xdef\fmtversion{\fmtversion+CWEB4.12}
\chardef\cwebversion=4 \chardef\cwebrevision=12
-\let\:=\. % preserve a way to get the dot accent
- % (all other accents will still work as usual)
-
\parskip 0pt % no stretch between paragraphs
\parindent 1em % for paragraphs and for the first line of C text
\font\ninerm=cmr9
\let\mc=\ninerm % medium caps
-\def\CEE/{{\mc C\spacefactor1000}}
-\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}}
-\def\TEX/{\TeX}
-\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}}
-\def\Cee{\CEE/} % for backward compatibility
-\def\Cpp{\CPLUSPLUS/} % for backward compatibility
-\def\9#1{}
- % with this definition of \9 you can say @:sort key}{TeX code@>
- % to alphabetize an index entry by the sort key but format with the TeX code
\font\eightrm=cmr8
\let\sc=\eightrm % for smallish caps (NOT a caps-and-small-caps font)
\let\mainfont=\tenrm
@@ -31,6 +19,17 @@
\font\tentex=cmtex10 % TeX extended character set (used in strings)
\fontdimen7\tentex=0pt % no double space after sentences
+\def\CEE/{{\mc C\spacefactor1000}}
+\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}}
+\def\TEX/{\TeX}
+\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}}
+\def\Cee{\CEE/} % for backward compatibility
+\def\Cpp{\CPLUSPLUS/} % for backward compatibility
+\def\9#1{} % with this definition of \9 you can say @:sort key}{TeX code@>
+ % to alphabetize an index entry by the sort key but format with the TeX code
+\let\:=\. % preserve a way to get the dot accent
+ % (all other accents will still work as usual)
+
\def\\#1{\leavevmode\hbox{\it#1\/\kern.05em}} % italic type for identifiers
\def\|#1{\leavevmode\hbox{$#1$}} % one-letter identifiers look better this way
\def\&#1{\leavevmode\hbox{\bf
@@ -112,14 +111,10 @@
\let\yskip=\smallskip
\def\?{\mathrel?}
\def\,{\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}
-\def\note#1#2.{\Y\noindent{\hangindent2em%
- \baselineskip10pt\eightrm#1~\ifacrohint{\pdfnote#2.}\else#2\fi.\par}}
-\newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD
-\newtoks\toksE \newtoks\toksF \newtoks\usersanitizer
+\newtoks\toksA \newtoks\toksE
\newcount\countA \countA=0 \newcount\countB \countB=0
-\newcount\countC \countC=0 \newcount\countD \countD=0
-\newif\iftokprocessed \newif\ifTnum \newif\ifinstr
+\newcount\countNOS \countNOS=0
{\def\\{\global\let\spacechar= }\\ }
% Here we decide the output format, depending on the TeX engine in use:
@@ -136,7 +131,7 @@
\def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too
\def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}}
\fi
-\ifacrohint \input cwebacromac \fi % load hypertext macros
+\input cwebacromac % load hypertext macros
\def\pdfURL#1#2{\ifpdf \ifpdflua\pdfannotlink height \theheight depth \thedepth
attr {/Border [0 0 0]} user { /Type /Annot /Subtype /Link /A
<< /S /URI /URI (#2) >>}\Blue #1\Black \pdfendlink % changed in 3.69
@@ -159,6 +154,8 @@
[ @thispage /FitH @ypos ]}\fi}}\fi}
\let\startsection=\stsec
\def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % begin `define' or `format'
+\def\note#1#2.{\Y\noindent{\hangindent2em\baselineskip10pt%
+ \eightrm#1~\ifacrohint{\pdfnote#2.}\else#2\fi.\par}}
\def\A{\note{See also section}} % xref for doubly defined section name
\def\As{\note{See also sections}} % xref for multiply defined section name
\def\B{\rightskip=0pt plus 100pt minus 10pt % go into C mode
@@ -186,7 +183,7 @@
\outer\def\M#1{\MN{#1}\ifon\vfil\penalty-100\vfilneg % beginning of section
\vskip\intersecskip\startsection\ignorespaces}
\outer\def\N#1#2#3.{% beginning of starred section
- \ifacro{\toksF={}\makeoutlinetoks#3\outlinedone\outlinedone}\fi
+ \ifacro{\makeoutlinetoks#3\outlinedone}\fi
\gdepth=#1\gtitle={#3}\MN{#2}%
\ifon\ifnum#1<\secpagedepth \vfil\eject % force page break if depth is small
\else\vfil\penalty-100\vfilneg\vskip\intersecskip\fi\fi
@@ -240,9 +237,8 @@
\def\oct{\hbox{$^\circ$\kern-.1em\it\aftergroup\?\aftergroup}} % CWEB style
\def\hex{\hbox{$^{\scriptscriptstyle\#}$\tt\aftergroup}} % CWEB style
\def\bin{\hbox{$^{\scriptscriptstyle b}$\tt\aftergroup}} % new in CWEB 4.3
-\def\vb#1{\leavevmode\hbox{\kern2pt\vrule\vtop{\vbox{\hrule
- \hbox{\strut\kern2pt\.{#1}\kern2pt}}
- \hrule}\vrule\kern2pt}} % verbatim string
+\def\vb#1{\leavevmode\hbox{\kern2pt\vrule\vtop{\vbox{\hrule\hbox{\strut
+ \kern2pt\.{#1}\kern2pt}}\hrule}\vrule\kern2pt}} % verbatim string
\def\p#1{\cdot 2^{#1}} % power of two (hex exponent)
\def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue
@@ -317,9 +313,7 @@
\vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height
\hsize=.5\pagewidth \advance\hsize by -10pt
% column width for the index (20pt between cols)
- \ifhint\else
- \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
- \fi
+ \ifhint\else\parfillskip 0pt plus .6\hsize\fi % avoid almost empty lines
\def\lr{L} % this tells whether the left or right column is next
\output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R}
\else\normaloutput{\vbox to\pageheight{\box\sbox\vss
@@ -328,9 +322,9 @@
\message{Index:}
\parskip 0pt plus .5pt
\outer\def\I##1, ##2.{\par\hangindent2em\noindent##1:\kern1em
- \ifacrohint\pdfnote##2.\else##2\fi.} % index entry
- \def\[##1]{$\underline{##1}$} % underlined index item
- \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar
+ \scan##2!.} % index entry
+ \def\[##1]{$\underline{\scan##1!}$\scan} % underlined index item
+ \rm \rightskip0pt plus 2.5em \tolerance 10000
\hyphenpenalty 10000 \parindent0pt
\readindex}
\def\fin{\par\vfill\eject % this is done when we are ending the index
@@ -353,23 +347,21 @@
\ifacro \def\outsecname{Names of the sections} \let\Xpdf\X
% \ifpdflua \makebookmarks \pdfdest name {NOS} fitb % in versions < 3.68
\ifpdflua \pdfdest name {NOS} fith % changed in version 3.69
- \pdfoutline goto name {NOS} count -\the\countD {\outsecname}
- \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
- {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
- \pdfoutline goto num \the\toksA \expandafter{\the\toksE}}
+ \pdfoutline goto name {NOS} count -\the\countNOS {\outsecname}
\else \special{pdf: outline -1 << /Title (\outsecname)
- /Dest [ @thispage /FitH @ypos ] >>}
- \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
- {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
- \special{pdf: outline 0 << /Title (\the\toksE)
- /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}}
- \fi\fi
+ /Dest [ @thispage /FitH @ypos ] >>}\fi
+ \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
+ {\makeoutlinetoks##2\outlinedone}%
+ \ifpdflua \pdfoutline goto num \the\toksA \expandafter{\the\toksE}
+ \else \special{pdf: outline 0 << /Title (\the\toksE)
+ /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}\fi}
+ \fi % \ifacro
\readsections}
\def\makebookmarks{\let\ZZ=\writebookmarkline \readcontents\relax}
\def\countsections{\message{Number of named sections:}
- {\def\I{\global\advance\countD by 1}\def\X##1\X{\relax}
+ {\def\I{\global\advance\countNOS by 1}\def\X##1\X{\relax}
\def\Q##1.{\relax}\def\Qs##1.{\relax}\def\U##1.{\relax}\def\Us##1.{\relax}
- \readsections\relax}\message{\the\countD}}
+ \readsections\relax}\message{\the\countNOS}}
\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
\else \csname#1\endcsname \fi} % Petr Olsak's macros from texinfo.tex
\def\advancenumber#1{\countA=\expnumber{#1}\relax \advance\countA by1
@@ -395,9 +387,9 @@
\line{\consetup{#2}#1
\rm\leaders\hbox to .5em{.\hfil}\hfil
\ \ifhint
- \HINTlink{#3}{\romannumeral#3}% No page numbers in HINT
+ \HINTlink{#3}% No page numbers in HINT
\HINTcontents{#1}{#2}{#3}%
- \else\ifacro\pdflink{#3}{\romannumeral#3}\else#3\fi
+ \else\ifacro\pdflink{#3}\else#3\fi
\hbox to3em{\hss#4}\fi}}
\def\consetup#1{\ifcase#1 \bf % depth -1 (@**)
\or % depth 0 (@*)
diff --git a/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch b/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
index 30e21842f09..ad478b81019 100644
--- a/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
@@ -33,7 +33,7 @@
\advance\footnotecount by 1\relax}
@z
-@x l.29
+@x l.28
\outer\def\section #1.{\penalty-500\bigskip
\centerline{\sectionfont\def\.##1{{\twelvett##1}} #1}\nobreak\vskip 6pt
\everypar{\hskip-\parindent\everypar{}}}
@@ -93,21 +93,21 @@
\fi}
@z
-@x l.35
-\def\runninghead{{\ninett CWEB} USER MANUAL (VERSION 4.11)}
+@x l.34
+\def\runninghead{{\ninett CWEB} USER MANUAL (VERSION 4.12)}
@y
\def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}}
-\def\runninghead{{\ninett CWEB} USER MANUAL (Version 4.11 [\TeX~Live])}
+\def\runninghead{{\ninett CWEB} USER MANUAL (Version 4.12 [\TeX~Live])}
@z
-@x l.49
-\vskip 18pt\centerline{(Version 4.11 --- December 2023)}
+@x l.48
+\vskip 18pt\centerline{(Version 4.12 --- August 2024)}
@y
-\vskip 18pt\centerline{(Version 4.11 --- December 2023)%
-\footnote*{This document describes the extended \.{CWEB} (Version 4.11 [\TeX~Live]).}}
+\vskip 18pt\centerline{(Version 4.12 --- August 2024)%
+\footnote*{This document describes the extended \.{CWEB} (Version 4.12 [\TeX~Live]).}}
@z
-@x l.80
+@x l.79
Internet page \.{http://www-cs-faculty.stanford.edu/\char`\~knuth/cweb.html}
@y
Internet page
@@ -115,7 +115,7 @@ Internet page
{http://www-cs-faculty.stanford.edu/\TILDE/knuth/cweb.html}
@z
-@x l.85
+@x l.84
\.{https://github.com/ascherer/cweb} with the really current news.
@y
\pdfURL{\.{https://github.com/ascherer/cweb}}%
@@ -123,7 +123,7 @@ Internet page
with the really current news.
@z
-@x l.103
+@x l.102
should be sent to the \TeX-related mailing list \.{tex-k@tug.org}.
@y
should be sent to the \TeX-related mailing list
@@ -131,7 +131,7 @@ should be sent to the \TeX-related mailing list
{mailto:tex-k@tug.org}.
@z
-@x l.105
+@x l.104
Readers who are familiar with Knuth's memo ``The \.{WEB} System of Structured
Documentation'' will be able
@y
@@ -139,7 +139,7 @@ Readers who are familiar with Knuth's memo ``\pdfURL{The \.{WEB} System of
Structured Documentation}{../web/webman.pdf}'' will be able
@z
-@x l.524
+@x l.523
email address in a \.{CWEB} file (e.g., \.{tex-k@@tug.org}).
@y
email address in a \.{CWEB} file (e.g.,
@@ -147,7 +147,7 @@ email address in a \.{CWEB} file (e.g.,
{mailto:tex-k@tug.org}).
@z
-@x l.919
+@x l.918
it cannot find them in the current directory.
@y
it cannot find them in the current directory.%
@@ -160,7 +160,7 @@ for it.
(This is true for any other input or change file lookup.)}
@z
-@x l.1026
+@x l.1025
except for error messages.
@y
except for error messages.%
@@ -168,7 +168,7 @@ except for error messages.%
options `\.{b}', `\.{h}', and `\.{p}' are `off' by default.}
@z
-@x l.1032
+@x l.1031
options are currently implemented:
\yskip
@@ -202,7 +202,7 @@ argument to switch between different user languages and macro packages.
\yskip
@z
-@x l.1068
+@x l.1067
\option x Include indexes and a table of contents in the \TEX/ file
output by \.{CWEAVE}. (On by default.) (Has no effect on \.{CTANGLE}.)
@y
@@ -212,14 +212,14 @@ output by \.{CWEAVE}. (On by default.) (\.{CWEAVE} only.)
\vfill\eject
@z
-@x l.1124
+@x l.1123
Sometimes things don't work as smoothly, and you get a bunch of
@y
\pdffalse\acrohintfalse
Sometimes things don't work as smoothly, and you get a bunch of
@z
-@x l.1132
+@x l.1131
`$\\{main}(\\{argc},\39\\{argv}{}$)'.
@y
`$\\{main}(\\{argc},\39\\{argv}{}$)'.
@@ -228,7 +228,7 @@ Sometimes things don't work as smoothly, and you get a bunch of
\ifpdf\acrohinttrue\fi \ifhint\acrohinttrue\fi
@z
-@x l.1142
+@x l.1141
the `\.{@\#}' will put extra space after `$\langle\,$Other locals$\,\rangle$'.
@y
the `\.{@\#}' will put extra space after `$\langle\,$Other locals$\,\rangle$'.%
@@ -236,14 +236,14 @@ the `\.{@\#}' will put extra space after `$\langle\,$Other locals$\,\rangle$'.%
to suppress the extra space globally.}
@z
-@x l.1144
+@x l.1143
\section Hypertext and hyperdocumentation.
@y
\vfill\eject
\section Hypertext and hyperdocumentation.
@z
-@x l.1168
+@x l.1167
from \.{https://hint.userweb.mwn.de/hint/hintview.html}.
@y
from
@@ -251,7 +251,7 @@ from
{https://hint.userweb.mwn.de/hint/hintview.html}.%
@z
-@x l.1177
+@x l.1176
the program sources at \.{ftp://ftp.cs.stanford.edu/pub/ctwill}.
@y
the program sources at
@@ -261,13 +261,13 @@ the program sources at
\.{ctwill} executable -- and its associated helpers -- out of the box.}
@z
-@x l.1181
+@x l.1180
As an example of a real program written in \.{CWEB}, Appendix~A
@y
As an example of a real program written in \.{CWEB}, \Appendix A
@z
-@x l.1186
+@x l.1185
Appendix B displays the files that set \TEX/ up to accept
the output of \.{CWEAVE}, and Appendix~C discusses how to use some of those
@y
@@ -275,7 +275,7 @@ the output of \.{CWEAVE}, and Appendix~C discusses how to use some of those
the output of \.{CWEAVE}, and \Appendix C discusses how to use some of those
@z
-@x l.1192
+@x l.1191
appendices D, E, and~F, which exhibit the complete source code for
\.{CTANGLE} and \.{CWEAVE}.
@@ -291,7 +291,7 @@ exhibits the source code for \.{CTWILL}, which is based on \.{CWEAVE}.}
\vfill\eject\titletrue
@z
-@x l.1198
+@x l.1197
\section Appendix A: Excerpts from a \.{CWEB} Program.
@y
\def\subsections{4}
@@ -299,28 +299,28 @@ exhibits the source code for \.{CTWILL}, which is based on \.{CWEAVE}.}
\subsection CWEB file format.
@z
-@x l.1202
+@x l.1201
generated sections 27--31 of the file \.{common.w}, which contains
@y
generated sections 27--31 of the file
\pdfURL{\.{common.w}}{common.pdf}, which contains
@z
-@x l.1273
+@x l.1272
\def\runninghead{APPENDIX A --- TRANSLATION BY {\ninett CTANGLE}}
@y
\def\runninghead{APPENDIX A --- TRANSLATION BY {\ninett CTANGLE}}
\subsection Translation by CTANGLE.
@z
-@x l.1341
+@x l.1340
\def\runninghead{APPENDIX A --- TRANSLATION BY {\ninett CWEAVE}}
@y
\def\runninghead{APPENDIX A --- TRANSLATION BY {\ninett CWEAVE}}
\subsection Translation by CWEAVE.
@z
-@x l.1430
+@x l.1429
\def\runninghead{APPENDIX A --- FINAL DOCUMENT}
And here's what the same excerpt looks like when typeset.
@@ -337,7 +337,7 @@ And here's what the same excerpt looks like when typeset.
\def\C#1{\5\5\quad$\triangleright\,${\cmntfont#1}$\,\triangleleft$}
@z
-@x l.1512
+@x l.1511
\vfil\eject\titletrue
@y
\vfill\eject\titletrue
@@ -346,13 +346,13 @@ And here's what the same excerpt looks like when typeset.
\ifacro\acrohinttrue\fi \ifhint\acrohinttrue\fi
@z
-@x l.1614
- \.{ { }\\vskip 15pt \\centerline\{(Version 4.11)\}{ }\\vfill\}}\cr}$$
+@x l.1613
+ \.{ { }\\vskip 15pt \\centerline\{(Version 4.12)\}{ }\\vfill\}}\cr}$$
@y
- \.{ { }\\vskip 15pt \\centerline\{(Version 4.11)\}{ }\\vfill\}}\cr}$$
+ \.{ { }\\vskip 15pt \\centerline\{(Version 4.12)\}{ }\\vfill\}}\cr}$$
@z
-@x l.1729
+@x l.1728
if you have a duplex printer. Appendices D, E, and F of the complete
version of this manual are printed using a commented-out option that
substitutes `$\gets$' for `$=$' in the program listings. Looking at those
@@ -366,14 +366,14 @@ also make use of the alternative format for \CEE/ comments.}
Looking at those
@z
-@x l.1781
+@x l.1780
\point 20. Furthermore, group titles can be converted to an arbitrary
@y
\vfill\eject
\point 20. Furthermore, group titles can be converted to an arbitrary
@z
-@x l.1792
+@x l.1791
\bye
@y
\point 21. With modern \TeX\ engines like `\.{luatex}', `\.{pdftex}', and
diff --git a/Build/source/texk/web2c/cwebdir/cwebman.tex b/Build/source/texk/web2c/cwebdir/cwebman.tex
index d47c46ff166..25654a53172 100644
--- a/Build/source/texk/web2c/cwebdir/cwebman.tex
+++ b/Build/source/texk/web2c/cwebdir/cwebman.tex
@@ -7,7 +7,6 @@
\parskip 0pt plus 1pt
\def\RA{\char'31 } % right arrow
\def\hang{\hangindent 4em\ignorespaces}
-\font\eightrm=cmr8
\font\eighttt=cmtt8
\font\ninett=cmtt9
\font\twelvett=cmtt12
@@ -32,7 +31,7 @@
\def\lheader{\mainfont\the\pageno\hfill\sc\runninghead\hfill}
\def\rheader{\hfill\sc\runninghead\hfill\mainfont\the\pageno}
-\def\runninghead{{\ninett CWEB} USER MANUAL (VERSION 4.11)}
+\def\runninghead{{\ninett CWEB} USER MANUAL (VERSION 4.12)}
% This verbatim mode assumes that ! marks are !! in the text being copied.
\def\verbatim{\begingroup
@@ -46,7 +45,7 @@
\null\vfill
\centerline{\titlefont The {\ttitlefont CWEB} System of
Structured Documentation}
-\vskip 18pt\centerline{(Version 4.11 --- December 2023)}
+\vskip 18pt\centerline{(Version 4.12 --- August 2024)}
\vskip 24pt
\centerline{\authorfont Donald E. Knuth and Silvio Levy}
\vfill
@@ -1528,9 +1527,9 @@ features needed by the output of \.{CWEAVE}.
\printmacs{\empty}
\vskip6pt \baselineskip12pt
-\noindent And here comes the file that extends \.{cwebmac.tex} in order to
-support the ``hypertext'' features needed by the enhanced \TEX/ engines when
-processing the output of \.{CWEAVE}.
+\noindent And here comes the file \.{cwebacromac.tex} that extends
+\.{cwebmac.tex} in order to support the ``hypertext'' features needed
+by the enhanced \TEX/ engines when processing the output of \.{CWEAVE}.
\vskip6pt \baselineskip9pt
\printmacs{acro}
@@ -1611,7 +1610,7 @@ $$\lpile{\.{\\def\\topofcontents\{\\null\\vfill}\cr
\.{ { }\\titlefalse \% include headline on the contents page}\cr
\.{ { }\\def\\rheader\{\\mainfont The \{\\tt CWEAVE\}{ }processor\\hfil\}}\cr
\.{ { }\\centerline\{\\titlefont The \{\\ttitlefont CWEAVE\}{ }processor\}}\cr
- \.{ { }\\vskip 15pt \\centerline\{(Version 4.11)\}{ }\\vfill\}}\cr}$$
+ \.{ { }\\vskip 15pt \\centerline\{(Version 4.12)\}{ }\\vfill\}}\cr}$$
Redefining \.{\\rheader}, which is the headline for right-hand pages,
suffices in this case to put the desired information at the top of the
contents page.
diff --git a/Build/source/texk/web2c/cwebdir/po/cweb-tl.pot b/Build/source/texk/web2c/cwebdir/po/cweb-tl.pot
index 19c348da56a..9ba80115a93 100644
--- a/Build/source/texk/web2c/cwebdir/po/cweb-tl.pot
+++ b/Build/source/texk/web2c/cwebdir/po/cweb-tl.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: CWEBbin 2023\n"
+"Project-Id-Version: CWEBbin 2024\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-12-02 13:08+0100\n"
+"POT-Creation-Date: 2024-08-12 13:10+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,15 +30,15 @@ msgid "%s: Need one to three file arguments.\n"
msgstr ""
#: ctang-texlive.ch:39
-msgid "This is CTANGLE, Version 4.11"
+msgid "This is CTANGLE, Version 4.12"
msgstr ""
#: ctwill-texlive.ch:39
-msgid "This is CTWILL, Version 4.11"
+msgid "This is CTWILL, Version 4.12"
msgstr ""
#: cweav-texlive.ch:39
-msgid "This is CWEAVE, Version 4.11"
+msgid "This is CWEAVE, Version 4.12"
msgstr ""
#: comm-texlive.ch:512
diff --git a/Build/source/texk/web2c/cwebdir/po/cweb.pot b/Build/source/texk/web2c/cwebdir/po/cweb.pot
index 8db3c5a3168..f451101937c 100644
--- a/Build/source/texk/web2c/cwebdir/po/cweb.pot
+++ b/Build/source/texk/web2c/cwebdir/po/cweb.pot
@@ -523,15 +523,15 @@ msgid "Sorting:"
msgstr ""
#: ctang-i18n.ch:17
-msgid "This is CTANGLE (Version 4.11 [CWEBbin 2023])"
+msgid "This is CTANGLE (Version 4.12 [CWEBbin 2024])"
msgstr ""
#: cweav-twill.ch:61
-msgid "This is CTWILL (Version 4.11 [CWEBbin 2023])"
+msgid "This is CTWILL (Version 4.12 [CWEBbin 2024])"
msgstr ""
#: cweav-i18n.ch:17 cweav-twill.ch:42
-msgid "This is CWEAVE (Version 4.11 [CWEBbin 2023])"
+msgid "This is CWEAVE (Version 4.12 [CWEBbin 2024])"
msgstr ""
#: cweav-i18n.ch:301 cweav-i18n.ch:309
diff --git a/Build/source/texk/web2c/cwebdir/po/de/cweb-tl.po b/Build/source/texk/web2c/cwebdir/po/de/cweb-tl.po
index 7d875bdd177..b1412747cbf 100644
--- a/Build/source/texk/web2c/cwebdir/po/de/cweb-tl.po
+++ b/Build/source/texk/web2c/cwebdir/po/de/cweb-tl.po
@@ -1,14 +1,14 @@
# International version of CWEB (CWEBbin, TeXLive).
-# Copyright (C) 2023 Andreas Scherer et al.
+# Copyright (C) 2024 Andreas Scherer et al.
# This file is distributed under the same license as the CWEB package.
# Andreas Scherer <https://ascherer.github.io>.
#
msgid ""
msgstr ""
-"Project-Id-Version: CWEBbin 2023\n"
+"Project-Id-Version: CWEBbin 2024\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-12-02 13:10+0100\n"
-"PO-Revision-Date: 2023-12-02 13:10+0100\n"
+"POT-Creation-Date: 2024-08-12 13:10+0200\n"
+"PO-Revision-Date: 2024-08-12 13:10+0200\n"
"Last-Translator: Andreas Scherer <andreas_github@freenet.de>\n"
"Language-Team: German\n"
"Language: de\n"
@@ -33,16 +33,16 @@ msgid "%s: Need one to three file arguments.\n"
msgstr "%s: Benötige ein bis drei Dateiargumente.\n"
#: ctang-texlive.ch:39
-msgid "This is CTANGLE, Version 4.11"
-msgstr "Dies ist CTANGLE, Version 4.11"
+msgid "This is CTANGLE, Version 4.12"
+msgstr "Dies ist CTANGLE, Version 4.12"
#: ctwill-texlive.ch:39
-msgid "This is CTWILL, Version 4.11"
-msgstr "Dies ist CTWILL, Version 4.11"
+msgid "This is CTWILL, Version 4.12"
+msgstr "Dies ist CTWILL, Version 4.12"
#: cweav-texlive.ch:39
-msgid "This is CWEAVE, Version 4.11"
-msgstr "Dies ist CWEAVE, Version 4.11"
+msgid "This is CWEAVE, Version 4.12"
+msgstr "Dies ist CWEAVE, Version 4.12"
#: comm-texlive.ch:512
#, c-format
diff --git a/Build/source/texk/web2c/cwebdir/po/de/cweb.po b/Build/source/texk/web2c/cwebdir/po/de/cweb.po
index f93952f9a06..0b459e1b01b 100644
--- a/Build/source/texk/web2c/cwebdir/po/de/cweb.po
+++ b/Build/source/texk/web2c/cwebdir/po/de/cweb.po
@@ -603,16 +603,16 @@ msgid "Sorting:"
msgstr "Sortieren:"
#: ctang-i18n.ch:17
-msgid "This is CTANGLE (Version 4.11 [CWEBbin 2023])"
-msgstr "Dies ist CTANGLE (Version 4.11 [CWEBbin 2023])"
+msgid "This is CTANGLE (Version 4.12 [CWEBbin 2024])"
+msgstr "Dies ist CTANGLE (Version 4.12 [CWEBbin 2024])"
#: cweav-twill.ch:61
-msgid "This is CTWILL (Version 4.11 [CWEBbin 2023])"
-msgstr "Dies ist CTWILL (Version 4.11 [CWEBbin 2023])"
+msgid "This is CTWILL (Version 4.12 [CWEBbin 2024])"
+msgstr "Dies ist CTWILL (Version 4.12 [CWEBbin 2024])"
#: cweav-i18n.ch:17 cweav-twill.ch:42
-msgid "This is CWEAVE (Version 4.11 [CWEBbin 2023])"
-msgstr "Dies ist CWEAVE (Version 4.11 [CWEBbin 2023])"
+msgid "This is CWEAVE (Version 4.12 [CWEBbin 2024])"
+msgstr "Dies ist CWEAVE (Version 4.12 [CWEBbin 2024])"
#: cweav-i18n.ch:301 cweav-i18n.ch:309
msgid "buffer"
diff --git a/Build/source/texk/web2c/cwebdir/po/it/cweb.po b/Build/source/texk/web2c/cwebdir/po/it/cweb.po
index a171f020d28..2cf95a994d3 100644
--- a/Build/source/texk/web2c/cwebdir/po/it/cweb.po
+++ b/Build/source/texk/web2c/cwebdir/po/it/cweb.po
@@ -1,14 +1,14 @@
# International version of CWEB (CWEBbin, TeXLive).
-# Copyright (C) 2023 Andreas Scherer et al.
+# Copyright (C) 2024 Andreas Scherer et al.
# This file is distributed under the same license as the CWEB package.
# Andreas Scherer <https://ascherer/github.io>.
#
msgid ""
msgstr ""
-"Project-Id-Version: CWEBbin 2023\n"
+"Project-Id-Version: CWEBbin 2024\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-12-02 13:10+0100\n"
-"PO-Revision-Date: 2023-12-02 13:10+0100\n"
+"POT-Creation-Date: 2024-08-12 13:10+0200\n"
+"PO-Revision-Date: 2024-08-12 13:10+0200\n"
"Last-Translator: Andreas Scherer <andreas_github@freenet.de>\n"
"Language-Team: Italian\n"
"Language: it\n"
@@ -598,16 +598,16 @@ msgid "Sorting:"
msgstr "Ordinamento:"
#: ctang-i18n.ch:17
-msgid "This is CTANGLE (Version 4.11 [CWEBbin 2023])"
-msgstr "Questo è CTANGLE (Versione 4.11 [CWEBbin 2023])"
+msgid "This is CTANGLE (Version 4.12 [CWEBbin 2024])"
+msgstr "Questo è CTANGLE (Versione 4.12 [CWEBbin 2024])"
#: cweav-i18n.ch:17
-msgid "This is CWEAVE (Version 4.11 [CWEBbin 2023])"
-msgstr "Questo è CWEAVE (Versione 4.11 [CWEBbin 2023])"
+msgid "This is CWEAVE (Version 4.12 [CWEBbin 2024])"
+msgstr "Questo è CWEAVE (Versione 4.12 [CWEBbin 2024])"
#: cweav-twill.ch:68
-msgid "This is CTWILL (Version 4.11 [CWEBbin 2023])"
-msgstr "Questo è CTWILL (Versione 4.11 [CWEBbin 2023])"
+msgid "This is CTWILL (Version 4.12 [CWEBbin 2024])"
+msgstr "Questo è CTWILL (Versione 4.12 [CWEBbin 2024])"
#: cweav-i18n.ch:301 cweav-i18n.ch:309
msgid "buffer"
diff --git a/Build/source/texk/web2c/cwebdir/prod-cweave.w b/Build/source/texk/web2c/cwebdir/prod-cweave.w
index 6c75760fa2f..e7939716b72 100644
--- a/Build/source/texk/web2c/cwebdir/prod-cweave.w
+++ b/Build/source/texk/web2c/cwebdir/prod-cweave.w
@@ -2,7 +2,7 @@
% 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.11 --- December 2023
+% Version 4.12 --- August 2024
%
@ Here is a table of all the productions. Each production that
combines two or more consecutive scraps implicitly inserts a {\tt \$}
diff --git a/Build/source/texk/web2c/cwebdir/prod-twill.w b/Build/source/texk/web2c/cwebdir/prod-twill.w
index 63ebdb4893d..c1b67aedc90 100644
--- a/Build/source/texk/web2c/cwebdir/prod-twill.w
+++ b/Build/source/texk/web2c/cwebdir/prod-twill.w
@@ -2,7 +2,7 @@
% 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.11 --- December 2023
+% Version 4.12 --- August 2024
%
@ Here is a table of all the productions. Each production that
combines two or more consecutive scraps implicitly inserts a {\tt \$}
diff --git a/Build/source/texk/web2c/cwebdir/prod.w b/Build/source/texk/web2c/cwebdir/prod.w
index b0da3ddce5f..851c5ffe234 100644
--- a/Build/source/texk/web2c/cwebdir/prod.w
+++ b/Build/source/texk/web2c/cwebdir/prod.w
@@ -2,7 +2,7 @@
% 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.11 --- December 2023
+% Version 4.12 --- August 2024
%
@ Here is a table of all the productions. Each production that
combines two or more consecutive scraps implicitly inserts a {\tt \$}
diff --git a/Build/source/texk/web2c/cwebdir/texinputs/dcwebmac.tex b/Build/source/texk/web2c/cwebdir/texinputs/dcwebmac.tex
index 09e222d3c3a..dd8b43bea93 100644
--- a/Build/source/texk/web2c/cwebdir/texinputs/dcwebmac.tex
+++ b/Build/source/texk/web2c/cwebdir/texinputs/dcwebmac.tex
@@ -28,7 +28,7 @@
% Version 3.64 [p21] --- Andreas Scherer, Octobre 2005
% Version 3.64 [p22] --- Andreas Scherer, March 2016
% Version 4.9 --- Andreas Scherer, June 2022
-% Version 4.12 --- Andreas Scherer, May 2024
+% Version 4.12 --- Andreas Scherer, August 2024
\ifx\undefined\botofcontents\input cwebmac.tex\fi
diff --git a/Build/source/texk/web2c/cwebdir/texinputs/fcwebmac.tex b/Build/source/texk/web2c/cwebdir/texinputs/fcwebmac.tex
index 82d67edb1a5..ff0c0b30bd9 100644
--- a/Build/source/texk/web2c/cwebdir/texinputs/fcwebmac.tex
+++ b/Build/source/texk/web2c/cwebdir/texinputs/fcwebmac.tex
@@ -28,7 +28,7 @@
% Version 3.64 [p21] --- Andreas Scherer, October 2005
% Version 3.64 [p22] --- Andreas Scherer, March 2016
% Version 4.9 --- Andreas Scherer, June 2022
-% Version 4.12 --- Andreas Scherer, May 2024
+% Version 4.12 --- Andreas Scherer, August 2024
% french translations --- Denis Roegel, 18 September 1994
diff --git a/Build/source/texk/web2c/cwebdir/texinputs/icwebmac.tex b/Build/source/texk/web2c/cwebdir/texinputs/icwebmac.tex
index 5f2e7d3a45a..cbb5696984e 100644
--- a/Build/source/texk/web2c/cwebdir/texinputs/icwebmac.tex
+++ b/Build/source/texk/web2c/cwebdir/texinputs/icwebmac.tex
@@ -28,7 +28,7 @@
% Version 3.64 [p21] --- Andreas Scherer, October 2005
% Version 3.64 [p22] --- Andreas Scherer, March 2016
% Version 4.9 --- Andreas Scherer, June 2022
-% Version 4.12 --- Andreas Scherer, May 2024
+% Version 4.12 --- Andreas Scherer, August 2024
\ifx\undefined\botofcontents\input cwebmac.tex\fi
@@ -73,7 +73,7 @@
\def\inx{\par\vskip6pt plus 1fil % we are beginning the index
\def\page{\box255 } \normalbottom
\write\cont{} % ensure that the contents file isn't empty
- \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother
+ \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 \mark{\topmark}}
@@ -82,9 +82,7 @@
\vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height
\hsize=.5\pagewidth \advance\hsize by -10pt
% column width for the index (20pt between cols)
- \ifhint\else
- \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
- \fi
+ \ifhint\else\parfillskip 0pt plus .6\hsize\fi % avoid almost empty lines
\def\lr{L} % this tells whether the left or right column is next
\output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R}
\else\normaloutput{\vbox to\pageheight{\box\sbox\vss
@@ -93,9 +91,9 @@
\message{Indice Analitico:}
\parskip 0pt plus .5pt
\outer\def\I##1, ##2.{\par\hangindent2em\noindent##1:\kern1em
- \ifacrohint\pdfnote##2.\else##2\fi.} % index entry
- \def\[##1]{$\underline{##1}$} % underlined index item
- \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar
+ \scan##2!.} % index entry
+ \def\[##1]{$\underline{\scan##1!}$\scan} % underlined index item
+ \rm \rightskip0pt plus 2.5em \tolerance 10000
\hyphenpenalty 10000 \parindent0pt
\readindex}
\def\fin{\par\vfill\eject % this is done when we are ending the index
diff --git a/Build/source/texk/web2c/cwebdir/texinputs/pdfctproofmac.tex b/Build/source/texk/web2c/cwebdir/texinputs/pdfctproofmac.tex
index f41ad4d6334..4079d5f704b 100644
--- a/Build/source/texk/web2c/cwebdir/texinputs/pdfctproofmac.tex
+++ b/Build/source/texk/web2c/cwebdir/texinputs/pdfctproofmac.tex
@@ -1,5 +1,5 @@
% standard macros for CWEB listings (in addition to plain.tex)
-% Version 4.12 --- May 2024
+% Version 4.12 --- August 2024
% modified for proofs in CTWILL
% modified for PDF/HINT output with 'tex "\let\pdf+' or '{hi|lua|pdf|xe}tex'
% This file is not copyrighted and can be used freely.
@@ -14,15 +14,6 @@
\font\ninerm=cmr9
\let\mc=\ninerm % medium caps
-\def\CEE/{{\mc C\spacefactor1000}}
-\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}}
-\def\TEX/{\TeX}
-\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}}
-\def\Cee{\CEE/} % for backward compatibility
-\def\Cpp{\CPLUSPLUS/} % for backward compatibility
-\def\9#1{}
- % with this definition of \9 you can say @:sort key}{TeX code@>
- % to alphabetize an index entry by the sort key but format with the TeX code
\font\eightrm=cmr8
\let\sc=\eightrm % small caps (NOT a caps-and-small-caps font)
\let\mainfont=\tenrm
@@ -33,6 +24,16 @@
\font\tentex=cmtex10 % TeX extended character set (used in strings)
\fontdimen7\tentex=0pt % no double space after sentences
+\def\CEE/{{\mc C\spacefactor1000}}
+\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}}
+\def\TEX/{\TeX}
+\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}}
+\def\Cee{\CEE/} % for backward compatibility
+\def\Cpp{\CPLUSPLUS/} % for backward compatibility
+\def\9#1{}
+ % with this definition of \9 you can say @:sort key}{TeX code@>
+ % to alphabetize an index entry by the sort key but format with the TeX code
+
\def\\#1{\leavevmode\hbox{\it#1\/\kern.05em}} % italic type for identifiers
\def\|#1{\leavevmode\hbox{$#1$}} % one-letter identifiers look better this way
\def\&#1{\leavevmode\hbox{\bf
@@ -116,11 +117,9 @@
\def\note#1#2.{\Y\noindent{\hangindent2em%
\baselineskip10pt\eightrm#1~\ifacrohint{\pdfnote#2.}\else#2\fi.\par}}
-\newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD
-\newtoks\toksE \newtoks\toksF \newtoks\usersanitizer
+\newtoks\toksA \newtoks\toksE
\newcount\countA \countA=0 \newcount\countB \countB=0
-\newcount\countC \countC=0 \newcount\countD \countD=0
-\newif\iftokprocessed \newif\ifTnum \newif\ifinstr
+\newcount\countNOS \countNOS=0
{\def\\{\global\let\spacechar= }\\ }
% Here we decide the output format, depending on the TeX engine in use:
@@ -137,7 +136,7 @@
\def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too
\def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}}
\fi
-\ifacrohint \input cwebacromac \fi % load hypertext macros
+\input cwebacromac % load hypertext macros
\def\pdfURL#1#2{\ifpdf \ifpdflua\pdfannotlink height \theheight depth \thedepth
attr {/Border [0 0 0]} user { /Type /Annot /Subtype /Link /A
<< /S /URI /URI (#2) >>}\Blue #1\Black \pdfendlink % changed in 3.69
@@ -187,7 +186,7 @@
\outer\def\M#1{\MN{#1}\ifon\vfil\penalty-100\vfilneg % beginning of section
\vskip\intersecskip\startsection\ignorespaces}
\outer\def\N#1#2#3.{% beginning of starred section
- \ifpdf{\toksF={}\makeoutlinetoks#3\outlinedone\outlinedone}\fi
+ \ifpdf{\makeoutlinetoks#3\outlinedone}\fi
\gdepth=#1\gtitle={#3}\MN{#2}%
\ifon\ifnum#1<\secpagedepth \vfil\eject % force page break if depth is small
\else\vfil\penalty-100\vfilneg\vskip\intersecskip\fi\fi
@@ -327,18 +326,16 @@
\newbox\lbox % lefthand column in the index
\def\inx{\par\vskip6pt plus 1fil % we are beginning the index
\write\cont{} % ensure that the contents file isn't empty
- \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother
+ \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
\hsize=.5\pagewidth \advance\hsize by -10pt
% column width for the index (20pt between cols)
- \ifhint\else
- \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
- \fi
+ \ifhint\else\parfillskip 0pt plus .6\hsize\fi % avoid almost empty lines
\def\lr{L} % this tells whether the left or right column is next
\output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R}
\else\normaloutput{\vbox to\pageheight{\box\sbox\vss
@@ -347,9 +344,9 @@
\message{Index:}
\parskip 0pt plus .5pt
\outer\def\I##1, ##2.{\par\hangindent2em\noindent##1:\kern1em
- \ifacrohint\pdfnote##2.\else##2\fi.} % index entry
- \def\[##1]{$\underline{##1}$} % underlined index item
- \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar
+ \scan##2!.} % index entry
+ \def\[##1]{$\underline{\scan##1!}$\scan} % underlined index item
+ \rm \rightskip0pt plus 2.5em \tolerance 10000
\hyphenpenalty 10000 \parindent0pt
\readindex}
\def\fin{\par\vfill\eject % this is done when we are ending the index
@@ -370,23 +367,21 @@
\def\I{\par\hangindent 2em}\let\*=*
\ifpdf \def\outsecname{Names of the sections} \let\Xpdf\X
\ifpdflua \pdfdest name {NOS} fith
- \pdfoutline goto name {NOS} count -\the\countD {\outsecname}
- \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
- {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
- \pdfoutline goto num \the\toksA \expandafter{\the\toksE}}
+ \pdfoutline goto name {NOS} count -\the\countNOS {\outsecname}
\else \special{pdf: outline -1 << /Title (\outsecname)
- /Dest [ @thispage /FitH @ypos ] >>}
- \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
- {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
- \special{pdf: outline 0 << /Title (\the\toksE)
- /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}}
- \fi\fi
+ /Dest [ @thispage /FitH @ypos ] >>}\fi
+ \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
+ {\makeoutlinetoks##2\outlinedone}%
+ \ifpdflua \pdfoutline goto num \the\toksA \expandafter{\the\toksE}
+ \else \special{pdf: outline 0 << /Title (\the\toksE)
+ /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}\fi}
+ \fi % \ifacro
\readsections}
\def\makebookmarks{\let\ZZ=\writebookmarkline \readcontents\relax}
\def\countsections{\message{Number of named sections:}
- {\def\I{\global\advance\countD by 1}\def\X##1\X{\relax}
+ {\def\I{\global\advance\countNOS by 1}\def\X##1\X{\relax}
\def\Q##1.{\relax}\def\Qs##1.{\relax}\def\U##1.{\relax}\def\Us##1.{\relax}
- \readsections\relax}\message{\the\countD}}
+ \readsections\relax}\message{\the\countNOS}}
\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
\else \csname#1\endcsname \fi} % Petr Olsak's macros from texinfo.tex
\def\advancenumber#1{\countA=\expnumber{#1}\relax \advance\countA by1
@@ -412,17 +407,14 @@
\line{\consetup{#2}#1
\rm\leaders\hbox to .5em{.\hfil}\hfil
\ \ifhint
- \HINTlink{#3}{\romannumeral#3}% No page numbers in HINT
+ \HINTlink{#3}% No page numbers in HINT
\HINTcontents{#1}{#2}{#3}%
- \else\ifacro\pdflink{#3}{\romannumeral#3}\else#3\fi
+ \else\ifacro\pdflink{#3}\else#3\fi
\hbox to3em{\hss#4}\fi}}
\def\consetup#1{\ifcase#1 \bf % depth -1 (@**)
\or % depth 0 (@*)
\or \hskip2em % depth 1 (@*1)
- \or \hskip4em % depth 2 (@*2)
- \or \hskip6em % depth 3 (@*3)
- \or \hskip8em % depth 4 (@*4)
- \or \hskip10em % depth 5 (@*5)
+ \or \hskip4em \or \hskip6em \or \hskip8em \or \hskip10em % depth 2,3,4,5
\else \hskip12em \fi} % depth 6 or more
\def\noinx{\let\inx=\end} % no indexes or table of contents
\def\nosecs{\let\FIN=\fin \def\fin{\let\parfillskip=\end \FIN}}
diff --git a/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex b/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex
index 2a0499949e6..d1278cac3bf 100644
--- a/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex
+++ b/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex
@@ -1,5 +1,5 @@
% standard macros for CWEB listings (in addition to plain.tex)
-% Version 4.12 --- May 2024
+% Version 4.12 --- August 2024
% modified for pages produced by CTWILL
% further modified for page size of the MMIXware book
% modified for PDF output with 'tex "\let\pdf+' or '{lua|pdf|xe}tex'
@@ -26,15 +26,6 @@
\font\ninerm=cmr9
\let\mc=\ninerm % medium caps
-\def\CEE/{{\mc C\spacefactor1000}}
-\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}}
-\def\TEX/{\TeX}
-\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}}
-\def\Cee{\CEE/} % for backward compatibility
-\def\Cpp{\CPLUSPLUS/} % for backward compatibility
-\def\9#1{}
- % with this definition of \9 you can say @:sort key}{TeX code@>
- % to alphabetize an index entry by the sort key but format with the TeX code
\font\eightrm=cmr8
\font\sixrm=cmr6
\font\ninei=cmmi9
@@ -146,6 +137,16 @@
\font\titlefont=cmr7 scaled\magstep4 % title on the contents page
\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title
+\def\CEE/{{\mc C\spacefactor1000}}
+\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}}
+\def\TEX/{\TeX}
+\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}}
+\def\Cee{\CEE/} % for backward compatibility
+\def\Cpp{\CPLUSPLUS/} % for backward compatibility
+\def\9#1{}
+ % with this definition of \9 you can say @:sort key}{TeX code@>
+ % to alphabetize an index entry by the sort key but format with the TeX code
+
\def\\#1{\leavevmode\hbox{\it#1\/\kern.05em}} % italic type for identifiers
\def\|#1{\leavevmode\hbox{$#1$}} % one-letter identifiers look better this way
\def\&#1{\leavevmode\hbox{\bf
@@ -228,11 +229,9 @@
\Y\noindent{\hangindent2\em\baselineskip10pt%
\eightrm#1~\ifacro{\pdfnote#2.}\else#2\fi.\par}}
-\newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD
-\newtoks\toksE \newtoks\toksF \newtoks\usersanitizer
+\newtoks\toksA \newtoks\toksE
\newcount\countA \countA=0 \newcount\countB \countB=0
-\newcount\countC \countC=0 \newcount\countD \countD=0
-\newif\iftokprocessed \newif\ifTnum \newif\ifinstr
+\newcount\countNOS \countNOS=0
{\def\\{\global\let\spacechar= }\\ }
% Here we decide the output format, depending on the TeX engine in use:
@@ -253,7 +252,7 @@
\def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too
\def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}}
\fi
-\ifacrohint \input cwebacromac \fi % load hypertext macros
+\input cwebacromac % load hypertext macros
\def\lapstar{\rlap{*}}
\def\stsec{\tenpoint\rightskip=0pt % get out of C mode (cf. \B)
@@ -301,7 +300,7 @@
\outer\def\NN{\ifvoid\partialpage\leftfalse
\else\ifdim\ht\partialpage<\pageht \lefttrue\else\leftfalse\fi\fi\NNN}
\outer\def\NNN#1#2#3.{% beginning of starred section
- \ifacro{\toksF={}\makeoutlinetoks#3\outlinedone\outlinedone}\fi
+ \ifacro{\makeoutlinetoks#3\outlinedone}\fi
\gdepth=#1\gtitle={#3}\def\secno{#2}\xdef\secstar{#2}
\ifleft \flushout
\gdef\rlhead{\let\i=I\uppercase{\ignorespaces#3}} % running left headline
@@ -334,7 +333,7 @@
\def\T#1{\leavevmode % octal, hex or decimal constant
\hbox{$\def\?{\kern.2em}%$%
\let\ \, % C++ digit separator becomes a little white space
- \def\$##1{\egroup_{\rm##1}\bgroup}% suffix to constant
+ \def\$##1{\egroup_{\rm##1}\bgroup}%$% suffix to constant
\def\_{\cdot 10^{\aftergroup}}% power of ten (via dirty trick)
\let\~=\oct \let\^=\hex \let\\=\bin {#1}$}}%$%
\def\U{\note{This code is used in section}} % xref for use of a section
@@ -543,22 +542,20 @@
\def\outsecname{Names of the sections}
\ifpdflua \makebookmarks \countsections
\pdfdest name {NOS} fith
- \pdfoutline goto name {NOS} count -\the\countD {\outsecname}
- \def\X##1:##2\X{\firstsecno##1.%
- {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
- \pdfoutline goto num \the\toksA \expandafter{\the\toksE}}
+ \pdfoutline goto name {NOS} count -\the\countNOS {\outsecname}
\else \special{pdf: outline -1 << /Title (\outsecname)
- /Dest [ @thispage /FitH @ypos ] >>}
- \def\X##1:##2\X{\firstsecno##1.%
- {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
- \special{pdf: outline 0 << /Title (\the\toksE)
- /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}}
- \fi \readsections \fi}
+ /Dest [ @thispage /FitH @ypos ] >>}\fi
+ \def\X##1:##2\X{\firstsecno##1.%
+ {\makeoutlinetoks##2\outlinedone}%
+ \ifpdflua \pdfoutline goto num \the\toksA \expandafter{\the\toksE}
+ \else \special{pdf: outline 0 << /Title (\the\toksE)
+ /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}\fi}
+ \readsections \fi}
\def\makebookmarks{\let\ZZ=\writebookmarkline \readcontents\relax}
\def\countsections{\message{Number of named sections:}
- {\def\I{\global\advance\countD by 1}\def\X##1\X{\relax}
+ {\def\I{\global\advance\countNOS by 1}\def\X##1\X{\relax}
\def\Q##1.{\relax}\def\Qs##1.{\relax}\def\U##1.{\relax}\def\Us##1.{\relax}
- \readsections\relax}\message{\the\countD}}
+ \readsections\relax}\message{\the\countNOS}}
\def\writebookmarkline#1#2#3#4#5{{%
\let\(=\let \let\)=\let \let\[=\let \let\]=\let \let\/=\let
\pdfoutline goto num #3 count -\expnumber{chunk#2.#3} {#5}}}
@@ -579,7 +576,7 @@
%\def\contentsline#1#2#3#4#5{\ifnum#2=0 \smallbreak\fi
%\line{\consetup{#2}#1
%\rm\leaders\hbox to .5em{.\hfil}\hfil
- %\ \ifacro\pdflink{#3}{\romannumeral#3}\else#3\fi\hbox to3em{\hss#4}}}
+ %\ \ifacro\pdflink{#3}\else#3\fi\hbox to3em{\hss#4}}}
%\def\consetup#1{\ifcase#1 \bf % depth -1 (@**)
%\or % depth 0 (@*)
%\or \hskip2em % depth 1 (@*1)
diff --git a/Build/source/texk/web2c/gftopk.ch b/Build/source/texk/web2c/gftopk.ch
index 1afa9119ef7..62af338db8e 100644
--- a/Build/source/texk/web2c/gftopk.ch
+++ b/Build/source/texk/web2c/gftopk.ch
@@ -82,7 +82,7 @@ begin
@<Labels...@>=final_end;
@y
@ This module is deleted, because it is only useful for
-a non-local goto, which we can't use in C.
+a non-local |goto|\unskip, which we can't use in C.
@z
@x [6] Dynamic allocation of |row| array.
diff --git a/Build/source/texk/web2c/gftype.ch b/Build/source/texk/web2c/gftype.ch
index 49d7bf6b3e0..2e51550240a 100644
--- a/Build/source/texk/web2c/gftype.ch
+++ b/Build/source/texk/web2c/gftype.ch
@@ -78,7 +78,7 @@ begin
@<Labels...@>=final_end;
@y
@ This module is deleted, because it is only useful for
-a non-local goto, which we can't use in C.
+a non-local |goto|\unskip, which we can't use in C.
Instead, we define parameters settable at runtime.
diff --git a/Build/source/texk/web2c/hitexdir/hitex.w b/Build/source/texk/web2c/hitexdir/hitex.w
index 7351c672e2d..cad0605c82f 100644
--- a/Build/source/texk/web2c/hitexdir/hitex.w
+++ b/Build/source/texk/web2c/hitexdir/hitex.w
@@ -224,7 +224,6 @@
@s alpha_file int
@s byte_file int
@s word_file int
-@s int8_t int
@s uint8_t int
@s int16_t int
@s uint16_t int
@@ -250,13 +249,9 @@
@s line normal
@s to do
-\def\contentspagenumber{0}
-\def\tocpages{3} % HiTeX has a long ToC
-\pageno=\contentspagenumber \advance \pageno by \tocpages
-
@* Introduction.
This is Hi\TeX, a program derived from \TeX, extending its capabilities
-using \eTeX\ and \Prote, and adding functions common to other engines from
+using \eTeX and \Prote, and adding functions common to other engines from
the \TeX\ Live distribution. Hi\TeX\ writes output files in
the \HINT\ file format. Like \TeX, it is
a document compiler intended to produce typesetting of high
@@ -380,7 +375,7 @@ known as `\Prote'.
@d Prote_banner "This is Prote, Version " Prote_version_string
/*printed when \Prote\ starts*/
@#
-@d banner "This is HiTeX, Version 3.141592653"@|
+@d banner "This is HiTeX, Version 3.141592653"
eTeX_version_string"-"HINT_VERSION_STRING" "TL_VERSION
/*printed when \TeX\ starts*/
@@ -436,7 +431,7 @@ portions of the program.
The program starts with inserting header files and occassionaly a function
must be placed before declaring \TeX's macros, because the function
-uses identifiers that \TeX\ will declare as macros.
+uses identifiers that \TeX will declare as macros.
@p @<Header files and function declarations@>@;
@h
@@ -447,7 +442,7 @@ enum {@+@<Constants in the outer block@>@+};
@#
static void initialize(void) /*this procedure gets things started properly*/
{@+@<Local variables for initialization@>@;
- @<Initialize whatever \TeX\ might access@>@;
+ @<Initialize whatever \TeX\ might access@>;
} @#
@<Basic printing procedures@>@;
@<Error handling procedures@>@;
@@ -634,7 +629,7 @@ because some fussy \PASCAL\ compilers will complain about redundant labels.
@d negate(A) A=-A /*change the sign of a variable*/
@d loop @+while (true) @+ /*repeat over and over until a |goto| happens*/
@f loop else
- /*\.{WEB}'s |loop| acts like `\ignorespaces|while true do|\unskip'*/
+ /*\.{WEB}'s |else| acts like `\ignorespaces|while true do|\unskip'*/
@d do_nothing /*empty statement*/
@d empty 0 /*symbolic name for a null constant*/
@@ -1334,7 +1329,7 @@ while (j < str_start[s+1])
result=true;
not_found: return result;
}
-@#@<Declare \Prote\ procedures for strings@>@;
+@t\4@>@<Declare \Prote\ procedures for strings@>@;
@ The initial values of |str_pool|, |str_start|, |pool_ptr|,
and |str_ptr| are computed by the \.{INITEX} program, based in part
@@ -1425,8 +1420,6 @@ declaration.
@<Forward declarations@>=
static int s_no(const char *str);
-@ (Empty section to keep numbering intact.)
-
@* On-line and off-line printing.
Messages that are sent to a user's terminal and to the transcript-log file
are produced by several `|print|' procedures. These procedures will
@@ -1498,10 +1491,8 @@ for terminal output, and it is possible to adhere to those conventions
by changing |wterm|, |wterm_ln|, and |wterm_cr| in this section.
@^system dependencies@>
-@s sizeof x
-
@<Basic printing procedures@>=
-#define @[put(F)@] @[fwrite(&((F).d),sizeof((F).d),1,(F).f)@]
+#define @[put(F)@] @[fwrite(&((F).d)@],@[sizeof((F).d),1,(F).f)@]@;
#define @[get(F)@] @[fread(&((F).d),sizeof((F).d),1,(F).f)@]
#define @[pascal_close(F)@] @[fclose((F).f)@]
@@ -1708,8 +1699,8 @@ if (n < 0)
}
}
}
-do {dig[k]=n%10;n=n/10;incr(k);
-} while (!(n==0));
+@/do@+{dig[k]=n%10;n=n/10;incr(k);
+}@+ while (!(n==0));
print_the_digs(k);
}
@@ -1727,8 +1718,8 @@ print_char('0'+(n%10));
/*prints a positive integer in hexadecimal form*/
{@+int k; /*index to current digit; we assume that $0\le n<16^{22}$*/
k=0;print_char('"');
-do {dig[k]=n%16;n=n/16;incr(k);
-} while (!(n==0));
+@/do@+{dig[k]=n%16;n=n/16;incr(k);
+}@+ while (!(n==0));
print_the_digs(k);
}
@@ -1804,7 +1795,7 @@ $$\vbox{\halign{#\hfil\cr
|help3("This is the first line of my offer to help.")|\cr
|("This is the second line. I'm trying to")|\cr
|("explain the best way for you to proceed.");|\cr
-|error();|\cr}}$$
+|error;|\cr}}$$
A two-line help message would be given using |help2|, etc.; these informal
helps should use simple vocabulary that complements the words used in the
official error message that was printed. (Outside the U.S.A., the help
@@ -2010,6 +2001,7 @@ case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
case '8': case '9': if (deletions_allowed)
@<Delete \(c)|c-"0"| tokens and |goto resume|@>@;@+break;
+@t\4\4@>@;
#ifdef @!DEBUG
case 'D': {@+debug_help();goto resume;@+}
#endif
@@ -2102,8 +2094,8 @@ show_context();goto resume;
else{@+if (help_ptr==0)
help2("Sorry, I don't know how to help in this situation.",@/
@t\kern1em@>"Maybe you should try asking a human?");
- do {decr(help_ptr);print(help_line[help_ptr]);print_ln();
- } while (!(help_ptr==0));
+ @/do@+{decr(help_ptr);print(help_line[help_ptr]);print_ln();
+ }@+ while (!(help_ptr==0));
}
help4("Sorry, I already gave what help I could...",@/
"Maybe you should try asking a human?",@/
@@ -2272,7 +2264,7 @@ positions from the right end of a binary computer word.
@<Types...@>=
typedef int scaled; /*this type is used for scaled integers*/
-typedef uint32_t nonnegative_integer; /*$0\le x<2^{31}$*/
+typedef int32_t nonnegative_integer; /*$0\le x<2^{31}$*/
typedef int8_t small_number; /*this type is self-explanatory*/
@ The following function is used to create a scaled integer from a given decimal
@@ -2310,9 +2302,9 @@ if (s < 0)
print_int(s/unity); /*print the integer part*/
print_char('.');
s=10*(s%unity)+5;delta=10;
-do {if (delta > unity) s=s+0100000-50000; /*round the last digit*/
+@/do@+{if (delta > unity) s=s+0100000-50000; /*round the last digit*/
print_char('0'+(s/unity));s=10*(s%unity);delta=delta*10;
-} while (!(s <= delta));
+}@+ while (!(s <= delta));
}
@ Physical sizes that a \TeX\ user specifies for portions of documents are
@@ -2429,7 +2421,7 @@ computing at most 1095 distinct values, but that is plenty.
@d inf_bad 10000 /*infinitely bad value*/
-@p @<Declare \Prote\ arithmetic routines@>@;
+@p @<Declare \Prote\ arithmetic routines@>@/
static halfword badness(scaled @!t, scaled @!s) /*compute badness, given |t >= 0|*/
{@+int r; /*approximation to $\alpha t/s$, where $\alpha^3\approx
100\cdot2^{18}$*/
@@ -2464,16 +2456,12 @@ routines cited there must be modified to allow negative glue ratios.)
@d unfix(A) ((double)(A)) /*convert from |glue_ratio| to type |double|*/
@d fix(A) ((glue_ratio)(A)) /*convert from |double| to type |glue_ratio|*/
@d float_constant(A) ((double)(A)) /*convert |int| constant to |double|*/
-@#
-@d perror e@&r@&r@&o@&r /* this is a \.{CWEB} coding trick: */
-@f perror error /* `\&{perror}' will be equivalent to `\&{error}' */
-@f error x /* but `|error|' will not be treated as a reserved word */
@<Types...@>=
#if __SIZEOF_FLOAT__==4
typedef float float32_t;
#else
-#perror @=float type must have size 4@>
+#error @=float type must have size 4@>
#endif
typedef float @!glue_ratio; /*one-word representation of a glue expansion factor*/
@@ -2583,29 +2571,25 @@ typedef uint16_t quarterword; /*1/4 of a word*/
typedef int32_t halfword; /*1/2 of a word*/
typedef int8_t two_choices; /*used when there are two variants in a record*/
typedef int8_t four_choices; /*used when there are four variants in a record*/
-@#
-typedef struct {
+typedef struct { @;@/
halfword @!rh;
union {
halfword @!lh;
struct { quarterword @!b0;quarterword @!b1;} ;
};} two_halves;
-@#
-typedef struct {
+typedef struct { @;@/
quarterword @!b0;
quarterword @!b1;
quarterword @!b2;
quarterword @!b3;
} four_quarters;
-@#
-typedef struct {
+typedef struct { @;@/
union {
int @!i;
glue_ratio @!gr;
two_halves @!hh;
four_quarters @!qqqq;
};} memory_word;
-@#
typedef struct {@+FILE *f;@+memory_word@,d;@+} word_file;
@ When debugging, we may want to print a |memory_word| without knowing
@@ -2788,11 +2772,11 @@ one-word nodes that starts at position |p|.
{@+pointer @!q, @!r; /*list traversers*/
if (p!=null)
{@+r=p;
- do {q=r;r=link(r);
+ @/do@+{q=r;r=link(r);
#ifdef @!STAT
decr(dyn_used);
#endif
- } while (!(r==null)); /*now |q| is the last node on the list*/
+ }@+ while (!(r==null)); /*now |q| is the last node on the list*/
link(q)=avail;avail=p;
}
}
@@ -2837,11 +2821,11 @@ pointer @!q; /*the node physically after node |p|*/
int @!r; /*the newly allocated node, or a candidate for this honor*/
int @!t; /*temporary register*/
restart: p=rover; /*start at some free node in the ring*/
-do {@<Try to allocate within node |p| and its physical successors, and
+@/do@+{@<Try to allocate within node |p| and its physical successors, and
|goto found| if allocation was possible@>;
@^inner loop@>
p=rlink(p); /*move to the next node in the ring*/
-} while (!(p==rover)); /*repeat until the whole list has been traversed*/
+}@+ while (!(p==rover)); /*repeat until the whole list has been traversed*/
if (s==010000000000)
{@+return max_halfword;
}
@@ -3334,7 +3318,7 @@ current \.{\\lineskip}.
pointer @!q; /*the glue specification*/
p=get_node(small_node_size);type(p)=glue_node;subtype(p)=n+1;
leader_ptr(p)=null;@/
-q=@[@<Current |mem| equivalent of glue parameter number |n|@>@];
+q=@<Current |mem| equivalent of glue parameter number |n|@>@t@>;
glue_ptr(p)=q;incr(glue_ref_count(q));
return p;
}
@@ -3374,8 +3358,6 @@ kerns inserted from font information or math mode calculations) or |explicit|
(for kerns inserted from non-math accents) or |mu_glue| (for kerns
inserted from \.{\\mkern} specifications in math formulas).
-@s explicit true
-
@d kern_node 11 /*|type| of a kern node*/
@d explicit 1 /*|subtype| of kern nodes from \.{\\kern} and \.{\\/}*/
@d acc_kern 2 /*|subtype| of kern nodes from accents*/
@@ -3591,7 +3573,7 @@ done1:
@ @<Check variable-size...@>=
p=rover;q=null;clobbered=false;
-do {if ((p >= lo_mem_max)||(p < mem_min)) clobbered=true;
+@/do@+{if ((p >= lo_mem_max)||(p < mem_min)) clobbered=true;
else if ((rlink(p) >= lo_mem_max)||(rlink(p) < mem_min)) clobbered=true;
else if (!(is_empty(p))||(node_size(p) < 2)||@|
(p+node_size(p) > lo_mem_max)||@|(llink(rlink(p))!=p)) clobbered=true;
@@ -3608,7 +3590,7 @@ for (q=p; q<=p+node_size(p)-1; q++) /*mark all locations free*/
is_free[q]=true;
}
q=p;p=rlink(p);
-} while (!(p==rover));
+}@+ while (!(p==rover));
done2:
@ @<Check flags...@>=
@@ -3703,13 +3685,13 @@ while (p > mem_min)
{@+if ((font(p) < font_base)||(font(p) > font_max))
print_char('*');
@.*\relax@>
- else@<Print the font identifier for |font(p)|@>@;
+ else@<Print the font identifier for |font(p)|@>;
print_char(' ');font_in_short_display=font(p);
}
print_ASCII(qo(character(p)));
}
}
- else@<Print a short indication of the contents of node |p|@>@;
+ else@<Print a short indication of the contents of node |p|@>;
p=link(p);
}
}
@@ -3742,7 +3724,7 @@ its reference count, and one to print a rule dimension.
{@+if (p > mem_end) print_esc("CLOBBERED.");
else{@+if ((font(p) < font_base)||(font(p) > font_max)) print_char('*');
@.*\relax@>
- else@<Print the font identifier for |font(p)|@>@;
+ else@<Print the font identifier for |font(p)|@>;
print_char(' ');print_ASCII(qo(character(p)));
}
}
@@ -3882,7 +3864,7 @@ else switch (type(p)) {
case disc_node: @<Display discretionary |p|@>@;@+break;
case mark_node: @<Display mark |p|@>@;@+break;
case adjust_node: @<Display adjustment |p|@>@;@+break;
- @/@t\4@>@<Cases of |show_node_list| that arise in mlists only@>@;
+ @t\4@>@<Cases of |show_node_list| that arise in mlists only@>@;
default:print("Unknown node type!");
}
@@ -4081,7 +4063,7 @@ specification is being withdrawn.
}
@p static void delete_glue_ref(pointer @!p) /*|p| points to a glue specification*/
-fast_delete_glue_ref(p)@;
+fast_delete_glue_ref(p)
static void delete_xdimen_ref(pointer @!p) /*|p| points to a xdimen specification*/
{@+if (p==null) return;
if (xdimen_ref_count(p)==null) free_node(p, xdimen_node_size);
@@ -4122,7 +4104,7 @@ while (p!=null)
flush_node_list(post_break(p));
} @+break;
case adjust_node: flush_node_list(adjust_ptr(p));@+break;
- @/@t\4@>@<Cases of |flush_node_list| that arise in mlists only@>@;
+ @t\4@>@<Cases of |flush_node_list| that arise in mlists only@>@;
default:confusion("flushing");
@:this can't happen flushing}{\quad flushing@>
} @/
@@ -5022,7 +5004,7 @@ else switch (chr_code) {
case every_vbox_loc: print_esc("everyvbox");@+break;
case every_job_loc: print_esc("everyjob");@+break;
case every_cr_loc: print_esc("everycr");@+break;
- @/@t\4@>@<Cases of |assign_toks| for |print_cmd_chr|@>@;
+ @/@<Cases of |assign_toks| for |print_cmd_chr|@>@/
default:print_esc("errhelp");
} @+break;
@@ -5350,7 +5332,7 @@ case right_hyphen_min_code: print_esc("righthyphenmin");@+break;
case holding_inserts_code: print_esc("holdinginserts");@+break;
case error_context_lines_code: print_esc("errorcontextlines");@+break;
case tracing_stack_levels_code: print_esc("tracingstacklevels");@+break;
-@/@t\4@>@<Cases for |print_param|@>@;
+@/@<Cases for |print_param|@>@/
default:print("[unknown integer parameter!]");
}
}
@@ -5503,7 +5485,6 @@ defined by |SOURCE_DATE_EPOCH|.
@^reference time@>
@^system dependencies@>
\TeX\ Live calls |tl_now| to obtain the current time as a |tm| structure.
-@s tm int
@p static void fix_date_and_time(void)
{@+ struct tm *t=tl_now();
time=sys_time= t->tm_hour*60+t->tm_min;/*minutes since midnight*/
@@ -5707,9 +5688,8 @@ print_char('=');print_scaled(eqtb[n].sc);print("pt");
@ Here is a procedure that displays the contents of |eqtb[n]|
symbolically.
-@p @<Declare the procedure called |print_cmd_chr|@>@;
+@p @t\4@>@<Declare the procedure called |print_cmd_chr|@>@;@/
#ifdef @!STAT
-@+@t}\6\4\4{@>
static void show_eqtb(pointer @!n)
{@+if (n < active_base) print_char('?'); /*this can't happen*/
else if (n < glue_base) @<Show equivalent |n|, in region 1 or 2@>@;
@@ -5834,10 +5814,10 @@ found: return p;
@ @<Insert a new control...@>=
{@+if (text(p) > 0)
- {@+do {if (hash_is_full) overflow("hash size", hash_size);
+ {@+@/do@+{if (hash_is_full) overflow("hash size", hash_size);
@:TeX capacity exceeded hash size}{\quad hash size@>
decr(hash_used);
- } while (!(text(hash_used)==0)); /*search for an empty location in |hash|*/
+ }@+ while (!(text(hash_used)==0)); /*search for an empty location in |hash|*/
next(p)=hash_used;p=hash_used;
}
str_room(l);d=cur_length;
@@ -6055,7 +6035,7 @@ case end_group: print_esc("endgroup");@+break;
case ex_space: print_esc(" ");@+break;
case expand_after: switch (chr_code) {
case 0: print_esc("expandafter");@+break;
-@/@t\4@>@<Cases of |expandafter| for |print_cmd_chr|@>@;
+@/@<Cases of |expandafter| for |print_cmd_chr|@>@/
} @+break; /*there are no other cases*/
case halign: print_esc("halign");@+break;
case hrule: print_esc("hrule");@+break;
@@ -6075,17 +6055,17 @@ case no_expand: print_esc("noexpand");@+break;
case non_script: print_esc("nonscript");@+break;
case omit: print_esc("omit");@+break;
case radical: print_esc("radical");@+break;
-case read_to_cs: if (chr_code==0) print_esc("read");
- else @<Cases of |read| for |print_cmd_chr|@>;@+break;
+case read_to_cs: if (chr_code==0) print_esc("read")
+ @<Cases of |read| for |print_cmd_chr|@>;@+break;
case relax: print_esc("relax");@+break;
case set_box: print_esc("setbox");@+break;
case set_prev_graf: print_esc("prevgraf");@+break;
case set_shape: switch (chr_code) {
case par_shape_loc: print_esc("parshape");@+break;
- @/@t\4@>@<Cases of |set_shape| for |print_cmd_chr|@>@;
+ @<Cases of |set_shape| for |print_cmd_chr|@>@;@/
} @+break; /*there are no other cases*/
-case the: if (chr_code==0) print_esc("the");
- else @<Cases of |the| for |print_cmd_chr|@>;@+break;
+case the: if (chr_code==0) print_esc("the")
+ @<Cases of |the| for |print_cmd_chr|@>;@+break;
case toks_register: @<Cases of |toks_register| for |print_cmd_chr|@>@;@+break;
case vadjust: print_esc("vadjust");@+break;
case valign: print_esc("valign");@+break;
@@ -6106,7 +6086,7 @@ Meanwhile, this is a convenient place to catch up on something we were unable
to do before the hash table was defined:
@<Print the font identifier for |font(p)|@>=
-printn_esc(font_id_text(font(p)));
+printn_esc(font_id_text(font(p)))
@* Saving and restoring equivalents.
The nested structure provided by `$\.{\char'173}\ldots\.{\char'175}$' groups
@@ -6291,7 +6271,7 @@ case shape_ref: {@+q=equiv_field(w); /*we need to free a \.{\\parshape} block*/
if (q!=null) free_node(q, info(q)+info(q)+1);
} @+break; /*such a block is |2 n+1| words long, where |n==info(q)|*/
case box_ref: flush_node_list(equiv_field(w));@+break;
-@/@t\4@>@<Cases for |eq_destroy|@>@;
+@/@<Cases for |eq_destroy|@>@/
default:do_nothing;
}
}
@@ -6329,7 +6309,7 @@ the call, since |eq_save| makes the necessary test.
#ifdef @!STAT
#define assign_trace(A, B) if (tracing_assigns > 0) restore_trace(A, B);
#else
-#define assign_trace(A, B) @[@]
+#define assign_trace(A, B)
#endif
static void eq_define(pointer @!p, quarterword @!t, halfword @!e)
@@ -6834,7 +6814,7 @@ case endv: print("end of alignment template");@+break;
case spacer: chr_cmd("blank space ")@;@+break;
case letter: chr_cmd("the letter ")@;@+break;
case other_char: chr_cmd("the character ")@;@+break;
-@/@t\4@>@<Cases of |print_cmd_chr| for symbolic printing of primitives@>@;
+@t\4@>@<Cases of |print_cmd_chr| for symbolic printing of primitives@>@/
default:print("[unknown command code!]");
}
}
@@ -7572,7 +7552,7 @@ actions.
in_open=0;open_parens=0;max_buf_stack=0;
grp_stack[0]=0;if_stack[0]=null;
param_ptr=0;max_param_stack=0;
-first=buf_size;do {buffer[first]=0;decr(first);} while (!(first==0));
+first=buf_size;@/do@+{buffer[first]=0;decr(first);}@+ while (!(first==0));
scanner_status=normal;warning_index=null;first=1;
state=new_line;start=1;index=0;line=0;name=0;
force_eof=false;
@@ -7783,7 +7763,7 @@ and set |state:=mid_line|@>@;@+break;
any_state_plus(sup_mark): @<If this |sup_mark| starts an expanded character
like~\.{\^\^A} or~\.{\^\^df}, then |goto reswitch|, otherwise set |state:=mid_line|@>@;@+break;
any_state_plus(invalid_char): @<Decry the invalid character and |goto restart|@>@;
-@/@t\4@>@<Handle situations involving spaces, braces, changes of state@>@;
+@t\4@>@<Handle situations involving spaces, braces, changes of state@>@;
default:do_nothing;
}
@@ -7942,8 +7922,8 @@ the buffer left two or three places.
}
@ @<Scan ahead in the buffer...@>=
-{@+do {cur_chr=buffer[k];cat=cat_code(cur_chr);incr(k);
-} while (!((cat!=letter)||(k > limit)));
+{@+@/do@+{cur_chr=buffer[k];cat=cat_code(cur_chr);incr(k);
+}@+ while (!((cat!=letter)||(k > limit)));
@<If an expanded...@>;
if (cat!=letter) decr(k);
/*now |k| points to first nonletter*/
@@ -8188,7 +8168,7 @@ case top_bot_mark: @<Insert the \(a)appropriate mark text into the scanner@>@;@+
case expand_after: switch (cur_chr) {
case 0: @<Expand the token after the next token@>@;@+break;
case 1: @<Negate a boolean conditional and |goto reswitch|@>@;@+break;
-@/@t\4@>@<Cases for |expandafter|@>@;
+@/@<Cases for |expandafter|@>@/
} @+break; /*there are no other cases*/
case no_expand: @<Suppress expansion of the next token@>@;@+break;
case cs_name: @<Manufacture a control sequence name@>@;@+break;
@@ -8252,9 +8232,9 @@ the variables |p| and |q| are reserved for token-list building.
@ @<Manufacture a control...@>=
{@+r=get_avail();p=r; /*head of the list of characters*/
incr(incsname_state);
-do {get_x_token();
+@/do@+{get_x_token();
if (cur_cs==0) store_new_token(cur_tok);
-} while (!(cur_cs!=0));
+}@+ while (!(cur_cs!=0));
if (cur_cmd!=end_cs_name) @<Complain about missing \.{\\endcsname}@>;
decr(incsname_state);
@<Look up the characters of list |r| in the hash table, and set |cur_cs|@>;
@@ -8312,15 +8292,15 @@ primitive("endinput", input, 1);@/
@!@:end\_input\_}{\.{\\endinput} primitive@>
@ @<Cases of |print_cmd_chr|...@>=
-case input: if (chr_code==0) print_esc("input");
- else @<Cases of |input| for |print_cmd_chr|@>@;
+case input: if (chr_code==0) print_esc("input")
+ @/@<Cases of |input| for |print_cmd_chr|@>;@/
else print_esc("endinput");@+break;
@ @<Initiate or terminate input...@>=
-if (cur_chr==1) force_eof=true;
-else @<Cases for |input|@>@;
+if (cur_chr==1) force_eof=true
+@/@<Cases for |input|@>;@/
else if (name_in_progress) insert_relax();
-else start_input();
+else start_input()
@ Sometimes the expansion looks too far ahead, so we want to insert
a harmless \.{\\relax} into the user's input.
@@ -8530,7 +8510,7 @@ a string that will delimit the next parameter.
{@+scanner_status=matching;unbalance=0;
long_state=eq_type(cur_cs);
if (long_state >= outer_call) long_state=long_state-2;
-do {link(temp_head)=null;
+@/do@+{link(temp_head)=null;
if ((info(r) > match_token+255)||(info(r) < match_token)) s=null;
else{@+match_chr=info(r)-match_token;s=link(r);r=s;
p=temp_head;m=0;
@@ -8538,7 +8518,7 @@ else{@+match_chr=info(r)-match_token;s=link(r);r=s;
@<Scan a parameter until its delimiter string has been found; or, if |s=null|,
simply scan the delimiter string@>;@/
/*now |info(r)| is a token whose command code is either |match| or |end_match|*/
-} while (!(info(r)==end_match_token));
+}@+ while (!(info(r)==end_match_token));
}
@ If |info(r)| is a |match| or |end_match| command, it cannot be equal to
@@ -8638,7 +8618,7 @@ the rules.
if (s!=r)
if (s==null) @<Report an improper use of the macro and abort@>@;
else{@+t=s;
- do {store_new_token(info(t));incr(m);u=link(t);v=s;
+ @/do@+{store_new_token(info(t));incr(m);u=link(t);v=s;
loop@+{@+if (u==r)
if (cur_tok!=info(v)) goto done;
else{@+r=link(v);goto resume;
@@ -8647,7 +8627,7 @@ if (s!=r)
u=link(u);v=link(v);
}
done: t=link(t);
- } while (!(t==r));
+ }@+ while (!(t==r));
r=s; /*at this point, no tokens are recently matched*/
}
@@ -8739,7 +8719,8 @@ if (cur_cmd!=left_brace)
}
@ @<Get the next non-blank non-relax non-call token@>=
-do get_x_token(); while (!((cur_cmd!=spacer)&&(cur_cmd!=relax)))
+@/do@+{get_x_token();
+}@+ while (!((cur_cmd!=spacer)&&(cur_cmd!=relax)))
@ The |scan_optional_equals| routine looks for an optional `\.=' sign preceded
by optional spaces; `\.{\\relax}' is not ignored here.
@@ -8750,7 +8731,8 @@ if (cur_tok!=other_token+'=') back_input();
}
@ @<Get the next non-blank non-call token@>=
-do get_x_token(); while (!(cur_cmd!=spacer))
+@/do@+{get_x_token();
+}@+ while (!(cur_cmd!=spacer))
@ In case you are getting bored, here is a slightly less trivial routine:
Given a string of lowercase letters, like `\.{pt}' or `\.{plus}' or
@@ -8809,9 +8791,9 @@ have to declare |scan_int| as a |forward| procedure. A few other
procedures are also declared at this point.
@p static void scan_int(void); /*scans an integer value*/
-@#@<Declare procedures that scan restricted classes of integers@>@;
-@<Declare \eTeX\ procedures for scanning@>@;
-@<Declare procedures that scan font-related stuff@>@;
+@t\4\4@>@<Declare procedures that scan restricted classes of integers@>@;
+@t\4\4@>@<Declare \eTeX\ procedures for scanning@>@;
+@t\4\4@>@<Declare procedures that scan font-related stuff@>@;
@ \TeX\ doesn't know exactly what to expect when |scan_something_internal|
begins. For example, an integer or dimension or glue value could occur
@@ -9009,9 +8991,9 @@ primitive("badness", last_item, badness_code);
@ @<Cases of |print_cmd_chr|...@>=
case set_aux: if (chr_code==vmode) print_esc("prevdepth");
@+else print_esc("spacefactor");@+break;
-case set_page_int: if (chr_code==0) print_esc("deadcycles");
-else @<Cases of |set_page_int| for |print_cmd_chr|@>@;
-else print_esc("insertpenalties");@+break;
+case set_page_int: if (chr_code==0) print_esc("deadcycles")
+@/@<Cases of |set_page_int| for |print_cmd_chr|@>;@/
+@+else print_esc("insertpenalties");@+break;
case set_box_dimen: if (chr_code==width_offset) print_esc("wd");
else if (chr_code==height_offset) print_esc("ht");
else print_esc("dp");@+break;
@@ -9020,7 +9002,7 @@ case last_item: switch (chr_code) {
case dimen_val: print_esc("lastkern");@+break;
case glue_val: print_esc("lastskip");@+break;
case input_line_no_code: print_esc("inputlineno");@+break;
- @/@t\4@>@<Cases of |last_item| for |print_cmd_chr|@>@;
+ @/@<Cases of |last_item| for |print_cmd_chr|@>@/
default:print_esc("badness");
} @+break;
@@ -9042,8 +9024,8 @@ else if (m==vmode)
else scanned_result(space_factor, int_val)
@ @<Fetch the |dead_cycles| or the |insert_penalties|@>=
-{@+if (m==0) cur_val=dead_cycles;
-else @<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>@;
+{@+if (m==0) cur_val=dead_cycles
+@/@<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>;@/
else cur_val=insert_penalties;
cur_val_level=int_val;
}
@@ -9094,14 +9076,14 @@ else if (m >= input_line_no_code)
if (m >= eTeX_glue) @<Process an expression and |return|@>@;
else if (m >= eTeX_dim)
{@+switch (m) {
- @/@t\4@>@<Cases for fetching a dimension value@>@;
+ @/@<Cases for fetching a dimension value@>@/
} /*there are no other cases*/
cur_val_level=dimen_val;
}
else{@+switch (m) {
case input_line_no_code: cur_val=line;@+break;
case badness_code: cur_val=last_badness;@+break;
- @/@t\4@>@<Cases for fetching an integer value@>@;
+ @/@<Cases for fetching an integer value@>@/
} /*there are no other cases*/
cur_val_level=int_val;
}
@@ -9326,11 +9308,11 @@ if (negative) negate(cur_val);
@ @<Get the next non-blank non-sign token...@>=
negative=false;
-do {@<Get the next non-blank non-call token@>;
+@/do@+{@<Get the next non-blank non-call token@>;
if (cur_tok==other_token+'-')
{@+negative=!negative;cur_tok=other_token+'+';
}
-} while (!(cur_tok!=other_token+'+'));
+}@+ while (!(cur_tok!=other_token+'+'))
@ A space is ignored after an alphabetic character constant, so that
such constants behave like numeric ones.
@@ -9451,7 +9433,7 @@ int @!f; /*numerator of a fraction whose denominator is $2^{16}$*/
f=0;arith_error=false;cur_order=normal;negative=false;
cur_hfactor=cur_vfactor=0;
if (!shortcut)
- {@+@<Get the next non-blank non-sign...@>@;
+ {@+@<Get the next non-blank non-sign...@>;
if ((cur_cmd >= min_internal)&&(cur_cmd <= max_internal))
@<Fetch an internal dimension and |goto attach_sign|, or fetch an internal
integer@>@;
@@ -9690,7 +9672,7 @@ most of the work has already been done.
bool negative; /*should the answer be negated?*/
pointer @!q; /*new glue specification*/
bool @!mu; /*does |level==mu_val|?*/
-mu=(level==mu_val);@<Get the next non-blank non-sign...@>@;
+mu=(level==mu_val);@<Get the next non-blank non-sign...@>;
if ((cur_cmd >= min_internal)&&(cur_cmd <= max_internal))
{@+scan_something_internal(level, negative);
if (cur_val_level >= glue_val)
@@ -9870,7 +9852,7 @@ case convert: switch (chr_code) {
case font_name_code: print_esc("fontname");@+break;
case job_name_code: print_esc("jobname");@+break;
case eTeX_revision_code: print_esc("eTeXrevision");@+break;
- @/@t\4@>@<Cases of |convert| for |print_cmd_chr|@>@;
+ @/@<Cases of |convert| for |print_cmd_chr|@>@/
} @+break;
@ The procedure |conv_toks| uses |str_toks| to insert the token list
@@ -9901,7 +9883,7 @@ case string_code: case meaning_code: {@+save_scanner_status=scanner_status;
case font_name_code: scan_font_ident();@+break;
case job_name_code: if (job_name==0) open_log_file();@+break;
case eTeX_revision_code: do_nothing;@+break;
-@/@t\4@>@<Cases of `Scan the argument for command |c|'@>@;
+@/@<Cases of `Scan the argument for command |c|'@>@/
} /*there are no other cases*/
@ @<Print the result of command |c|@>=
@@ -9919,7 +9901,7 @@ case font_name_code: {@+printn(font_name[cur_val]);
} @+break;
case eTeX_revision_code: print(eTeX_revision);@+break;
case job_name_code: printn(job_name);@+break;
-@/@t\4@>@<Cases of `Print the result of command |c|'@>@;
+@/@<Cases of `Print the result of command |c|'@>@/
} /*there are no other cases*/
@ Now we can't postpone the difficulties any longer; we must bravely tackle
@@ -10095,13 +10077,13 @@ p=def_ref; /*the reference count*/
store_new_token(end_match_token);
if ((n < 0)||(n > 15)) m=16;@+else m=n;
s=align_state;align_state=1000000; /*disable tab marks, etc.*/
-do @<Input and store tokens from the next line of the file@>@;
-while (!(align_state==1000000));
+@/do@+{@<Input and store tokens from the next line of the file@>;
+}@+ while (!(align_state==1000000));
cur_val=def_ref;scanner_status=normal;align_state=s;
}
@ @<Input and store tokens from the next line of the file@>=
-{begin_file_reading();name=m+1;
+begin_file_reading();name=m+1;
if (read_open[m]==closed) @<Input for \.{\\read} from the terminal@>;
else if (read_open[m]==just_open) @<Input the first line of |read_file[m]|@>@;
else@<Input the next line of |read_file[m]|@>;
@@ -10114,12 +10096,12 @@ loop@+{@+get_token();
if (cur_tok==0) goto done;
/*|cur_cmd==cur_chr==0| will occur at the end of the line*/
if (align_state < 1000000) /*unmatched `\.\}' aborts the line*/
- {@+do get_token(); while (!(cur_tok==0));
+ {@+@/do@+{get_token();}@+ while (!(cur_tok==0));
align_state=1000000;goto done;
}
store_new_token(cur_tok);
}
-done: end_file_reading();}
+done: end_file_reading()
@ Here we input on-line into the |buffer| array, prompting the user explicitly
if |n >= 0|. The value of |n| is set negative so that additional prompts
@@ -10237,7 +10219,7 @@ switch (chr_code%unless_code) {
case if_true_code: print_esc("iftrue");@+break;
case if_false_code: print_esc("iffalse");@+break;
case if_case_code: print_esc("ifcase");@+break;
- @/@t\4@>@<Cases of |if_test| for |print_cmd_chr|@>@;
+ @/@<Cases of |if_test| for |print_cmd_chr|@>@/
default:print_esc("if");
}
} @+break;
@@ -10418,7 +10400,7 @@ case if_eof_code: {@+scan_four_bit_int();b=(read_open[cur_val]==closed);
} @+break;
case if_true_code: b=true;@+break;
case if_false_code: b=false;@+break;
-@/@t\4@>@<Cases for |conditional|@>@;
+@/@<Cases for |conditional|@>@/
case if_case_code: @<Select the appropriate case and |return| or |goto common_ending|@>;
} /*there are no other cases*/
@@ -10795,7 +10777,6 @@ static str_number b_make_name_string(byte_file *f)
{@+return make_name_string();
}
#ifdef @!INIT
-@+@t}\6\4\4{@>
static str_number w_make_name_string(word_file *f)
{@+return make_name_string();
}
@@ -11549,8 +11530,8 @@ that do not do local optimization.
@ Font parameters are referred to as |slant(f)|, |space(f)|, etc.
-@d param_end(A) @[param_base[A]].sc@]
-@d param(A) @[font_info[A+param_end@]
+@d param_end(A) param_base[A]].sc
+@d param(A) font_info[A+param_end
@d slant param(slant_code) /*slant to the right, per unit distance upward*/
@d space param(space_code) /*normal space between words*/
@d space_stretch param(space_stretch_code) /*stretch between words*/
@@ -11954,11 +11935,11 @@ if (cur_val==fmem_ptr)
}
@ @<Increase the number of parameters...@>=
-{@+do {if (fmem_ptr==font_mem_size)
+{@+@/do@+{if (fmem_ptr==font_mem_size)
overflow("font memory", font_mem_size);
@:TeX capacity exceeded font memory}{\quad font memory@>
font_info[fmem_ptr].sc=0;incr(fmem_ptr);incr(font_params[f]);
-} while (!(n==font_params[f]));
+}@+ while (!(n==font_params[f]));
cur_val=fmem_ptr-1; /*this equals |param_base[f]+font_params[f]|*/
}
@@ -13002,7 +12983,7 @@ entering a new level of recursion. In effect, the values of |save_h| and
|save_v| on \TeX's run-time stack correspond to the values of |h| and |v|
that a \.{DVI}-reading program will push onto its coordinate stack.
-@p @<Declare procedures needed in |hlist_out|, |vlist_out|@>@t@>@;
+@p @t\4@>@<Declare procedures needed in |hlist_out|, |vlist_out|@>@t@>@/
static void hlist_out(void) /*output an |hlist_node| box*/
{@+
scaled base_line; /*the baseline coordinate for this box*/
@@ -13044,13 +13025,13 @@ reaching a non-|char_node|. The program uses the fact that |set_char_0==0|.
@<Output node |p| for |hlist_out|...@>=
reswitch: if (is_char_node(p))
{@+synch_h;synch_v;
- do {f=font(p);c=character(p);
+ @/do@+{f=font(p);c=character(p);
if (f!=dvi_f) @<Change font |dvi_f| to |f|@>;
if (c >= qi(128)) dvi_out(set1);
dvi_out(qo(c));@/
cur_h=cur_h+char_width(f, char_info(f, c));
p=link(p);
- } while (!(!is_char_node(p)));
+ }@+ while (!(!is_char_node(p)));
dvi_h=cur_h;
}
else@<Output the non-|char_node| |p| for |hlist_out| and move to the next
@@ -13355,7 +13336,7 @@ ready for the |ship_out| routine that gets them started in the first place.
@p static void ship_out(pointer @!p) /*output the box |p|*/
{@+
execute_output(p);
-@<Flush the box from memory...@>@;
+flush_node_list(p);
}
@ @<Flush the box from memory, showing statistics if requested@>=
@@ -13921,20 +13902,21 @@ if (last_badness > vbadness)
@ When a box is being appended to the current vertical list, the
baselineskip calculation is handled by the |append_to_vlist| routine.
-@p static void append_to_vlist(pointer @!b)
-{ @+bool height_known;
+@p static void append_to_vlist(pointer @!b)@t\2\2@>@/
+{ bool height_known;@t\1@>@/
height_known=(type(b)==hlist_node || type(b)==vlist_node ||@|
(type(b)==whatsit_node && subtype(b)==hset_node));@/
if (prev_depth > ignore_depth && height_known)@/
- {@+scaled d; /*deficiency of space between baselines*/
+ {@+scaled d;@t\1@> /*deficiency of space between baselines*/
pointer @!p; /*a new glue node*/
- d=width(baseline_skip)-prev_depth-height(b);
+ {@+d=width(baseline_skip)-prev_depth-height(b);
if (d < line_skip_limit) p=new_param_glue(line_skip_code);
else{@+p=new_skip_param(baseline_skip_code);
width(temp_ptr)=d; /*|temp_ptr==glue_ptr(p)|*/
}
link(tail)=p;tail=p;
-} @+ else @+if (prev_depth<=unknown_depth || prev_depth>ignore_depth ) @/
+ }@+
+} @+ else @+if (prev_depth<=unknown_depth || prev_depth>ignore_depth )@t\2@>@/
{@+pointer p;
p=new_baseline_node(baseline_skip, line_skip, line_skip_limit);
link(tail)= p;tail= p;
@@ -14576,12 +14558,12 @@ be probed in increasing order of height.
@<Look at the variants of |(z,x)|; set |f| and |c|...@>=
if ((z!=0)||(x!=min_quarterword))
{@+z=z+s+16;
- do {z=z-16;g=fam_fnt(z);
+ @/do@+{z=z-16;g=fam_fnt(z);
if (g!=null_font)
@<Look at the list of characters starting with |x| in font |g|; set |f|
and |c| whenever a better character is found; |goto found| as soon as a large
enough variant is encountered@>;
- } while (!(z < 16));
+ }@+ while (!(z < 16));
}
@ @<Look at the list of characters starting with |x|...@>=
@@ -14971,8 +14953,8 @@ case rel_noad: case close_noad: case punct_noad:
@<Convert \(a)a final |bin_noad| to an |ord_noad|@>;
if (type(q)==right_noad) goto done_with_noad;
} @+break;
-@/@t\4@>@<Cases for noads that can follow a |bin_noad|@>@;
-@/@t\4@>@<Cases for nodes that can appear in an mlist, after which we |goto
+@t\4@>@<Cases for noads that can follow a |bin_noad|@>@;
+@t\4@>@<Cases for nodes that can appear in an mlist, after which we |goto
done_with_node|@>@;
default:confusion("mlist1");
@:this can't happen mlist1}{\quad mlist1@>
@@ -15732,7 +15714,8 @@ is not a penalty node or a |rel_noad| or absent entirely.
@<Append any |new_hlist| entries for |q|, and any appropriate penalties@>=
if (new_hlist(q)!=null)
{@+link(p)=new_hlist(q);
- do p=link(p); while (!(link(p)==null));
+ @/do@+{p=link(p);
+ }@+ while (!(link(p)==null));
}
if (penalties) if (link(q)!=null) if (pen < inf_penalty)
{@+r_type=type(link(q));
@@ -15957,7 +15940,7 @@ good start. This mostly involves scanning the preamble and putting its
information into the preamble list.
@^preamble@>
-@p @<Declare the procedure called |get_preamble_token|@>@;
+@p @t\4@>@<Declare the procedure called |get_preamble_token|@>@t@>@/
static void align_peek(void);@/
static void normal_paragraph(void);@/
static void init_align(void)
@@ -16145,7 +16128,8 @@ started, or finishes off the alignment.
static void align_peek(void)
{@+
restart: align_state=1000000;
-do get_x_or_protected(); while (!(cur_cmd!=spacer));
+@/do@+{get_x_or_protected();
+}@+ while (!(cur_cmd!=spacer));
if (cur_cmd==no_align)
{@+scan_left_brace();new_save_level(no_align_group);
if (mode==-vmode) normal_paragraph();
@@ -16164,7 +16148,7 @@ from internal vertical mode to restricted horizontal mode or vice versa.
The |space_factor| and |prev_depth| are not used on this semantic level,
but we clear them to zero just to be tidy.
-@p @<Declare the procedure called |init_span|@>@;
+@p @t\4@>@<Declare the procedure called |init_span|@>@t@>@/
static void init_row(void)
{@+push_nest();mode=(-hmode-vmode)-mode;
if (mode==-hmode) space_factor=0;@+else prev_depth=0;
@@ -16257,7 +16241,8 @@ if (extra_info(cur_align)!=span_code)
init_span(p);
}
align_state=1000000;
-do get_x_or_protected(); while (!(cur_cmd!=spacer));
+@/do@+{get_x_or_protected();
+}@+ while (!(cur_cmd!=spacer));
cur_align=p;
init_col();return false;
}
@@ -16351,8 +16336,8 @@ link(end_span)=max_quarterword+1;info(end_span)=null;
@ @<Update width entry for spanned columns@>=
{@+q=cur_span;
-do {incr(n);q=link(link(q));
-} while (!(q==cur_align));
+@/do@+{incr(n);q=link(link(q));
+}@+ while (!(q==cur_align));
if (n > max_quarterword) confusion("256 spans"); /*this can happen, but won't*/
@^system dependencies@>
@:this can't happen 256 spans}{\quad 256 spans@>
@@ -16409,9 +16394,21 @@ unsave(); /*that |align_group| was for the whole alignment*/
if (nest[nest_ptr-1].mode_field==mmode) o=display_indent;
else o=0;
@<Go through the preamble list, determining the column widths and changing
-the alignrecords to dummy unset boxes@>@;
+the alignrecords to dummy unset boxes@>;
if (x)
-{ /*Handle an alignment that depends on |hsize| or |vsize|*/
+{ @<Handle an alignment that depends on |hsize| or |vsize|@>@;
+ pop_alignment();
+}
+else
+{ @<Package the preamble list, to determine the actual tabskip glue amounts,
+ and let |p| point to this prototype box@>;
+ @<Set the glue in all the unset boxes of the current list@>;
+ flush_node_list(p);pop_alignment();
+}
+@<Insert the \(c)current list into its environment@>;
+} @/
+@t\4@>@<Declare the procedure called |align_peek|@>@;
+@ @<Handle an alignment that depends on |hsize| or |vsize|@>=
pointer r=get_node(align_node_size);
save_ptr=save_ptr-2;pack_begin_line=-mode_line;
@@ -16423,18 +16420,6 @@ if (x)
align_v(r)= (mode!=-vmode);
link(head)=r; tail=r;
pack_begin_line=0;
- pop_alignment();
-}
-else
-{ @<Package the preamble list, to determine the actual tabskip glue amounts,
- and let |p| point to this prototype box@>;
- @<Set the glue in all the unset boxes of the current list@>;
- flush_node_list(p);pop_alignment();
-}
-@<Insert the \(c)current list into its environment@>;
-}
-@#
-@t\4@>@<Declare the procedure called |align_peek|@>@;
@ It's time now to dismantle the preamble list and to compute the column
widths. Let $w_{ij}$ be the maximum of the natural widths of all entries
@@ -16461,7 +16446,7 @@ value is changed to zero and so is the next tabskip.
@<Go through the preamble list,...@>=
q=link(preamble);
-do {flush_list(u_part(q));flush_list(v_part(q));
+@/do@+{flush_list(u_part(q));flush_list(v_part(q));
p=link(link(q));
if (width(q)==null_flag)
@<Nullify |width(q)| and the tabskip glue following this column@>;
@@ -16475,7 +16460,7 @@ glue_stretch(q)=0;glue_shrink(q)=0;
if (width(q)>max_dimen) x=true;
#endif
q=p;
-} while (!(q==null));
+}@+ while (!(q==null))
@ @<Nullify |width(q)| and the tabskip glue following this column@>=
{@+width(q)=0;r=link(q);s=glue_ptr(r);
@@ -16487,7 +16472,7 @@ if (s!=zero_glue)
@ Merging of two span-node lists is a typical exercise in the manipulation of
linearly linked data structures. The essential invariant in the following
-|do {| loop is that we want to dispense with node |r|, in |q|'s list,
+|@/do@+{| loop is that we want to dispense with node |r|, in |q|'s list,
and |u| is its successor; all nodes of |p|'s list up to and including |s|
have been processed, and the successor of |s| matches |r| or precedes |r|
or follows |r|, according as |link(r)==n| or |link(r) > n| or |link(r) < n|.
@@ -16495,7 +16480,7 @@ or follows |r|, according as |link(r)==n| or |link(r) > n| or |link(r) < n|.
@<Merge the widths...@>=
{@+t=width(q)+width(glue_ptr(link(q)));
r=info(q);s=end_span;info(s)=p;n=min_quarterword+1;
-do {width(r)=width(r)-t;u=info(r);
+@/do@+{width(r)=width(r)-t;u=info(r);
while (link(r) > n)
{@+s=info(s);n=link(info(s))+1;
}
@@ -16506,7 +16491,7 @@ else{@+if (width(r) > width(info(s))) width(info(s))=width(r);
free_node(r, span_node_size);
}
r=u;
-} while (!(r==end_span));
+}@+ while (!(r==end_span));
}
@ Now the preamble list has been converted to a list of alternating unset
@@ -16523,12 +16508,12 @@ if (mode==-vmode)
p=hpack(preamble, saved(1), saved_hfactor(1), saved_vfactor(1), saved(0));overfull_rule=rule_save;
}
else{@+q=link(preamble);
- do {height(q)=width(q);width(q)=0;q=link(link(q));
- } while (!(q==null));
+ @/do@+{height(q)=width(q);width(q)=0;q=link(link(q));
+ }@+ while (!(q==null));
p=vpack(preamble, saved(1), saved_hfactor(1), saved_vfactor(1), saved(0));
q=link(preamble);
- do {width(q)=height(q);height(q)=0;q=link(link(q));
- } while (!(q==null));
+ @/do@+{width(q)=height(q);height(q)=0;q=link(link(q));
+ }@+ while (!(q==null));
}
pack_begin_line=0
@@ -16566,9 +16551,9 @@ else{@+type(q)=vlist_node;height(q)=height(p);
glue_order(q)=glue_order(p);glue_sign(q)=glue_sign(p);
glue_set(q)=glue_set(p);shift_amount(q)=o;
r=link(list_ptr(q));s=link(list_ptr(p));
-do {@<Set the glue in node |r| and change it from an unset node@>;
+@/do@+{@<Set the glue in node |r| and change it from an unset node@>;
r=link(link(r));s=link(link(s));
-} while (!(r==null));
+}@+ while (!(r==null));
}
@ A box made from spanned columns will be followed by tabskip glue nodes and
@@ -16900,7 +16885,7 @@ k=1 to 6 do cur_active_width[k]=cur_active_width[k]+mem[q+k].sc|};$$ and we
want to do this without the overhead of |for| loops. The |do_all_six|
macro makes such six-tuples convenient.
-@d do_all_six(A) A(1);A(2);A(3);A(4);A(5);A(6)@;
+@d do_all_six(A) A(1);A(2);A(3);A(4);A(5);A(6)
@<Glob...@>=
static scaled @!active_width0[6], *const @!active_width = @!active_width0-1;
@@ -17058,7 +17043,7 @@ loop@+{@+resume: r=link(prev_r);
@<If node |r| is of type |delta_node|, update |cur_active_width|, set |prev_r|
and |prev_prev_r|, then |goto resume|@>;
@<If a line number class has ended, create new active nodes for the best
-feasible breaks in that class; then |return| if |r==last_active|, otherwise
+feasible breaks in that class; then |return| if |r=last_active|, otherwise
compute the new |line_width|@>;
@<Consider the demerits for a line from |r| to |cur_p|; deactivate node
|r| if it should no longer be active; then |goto resume| if a line from
@@ -17811,10 +17796,10 @@ character node.
@<Advance \(c)|cur_p| to the node following the present string...@>=
{@+prev_p=cur_p;
-do {f=font(cur_p);
+@/do@+{f=font(cur_p);
act_width=act_width+char_width(f, char_info(f, character(cur_p)));
cur_p=link(cur_p);
-} while (!(!is_char_node(cur_p)));
+}@+ while (!(!is_char_node(cur_p)));
}
@ When node |cur_p| is a glue node, we look at |prev_p| to see whether or not
@@ -17839,9 +17824,9 @@ only character nodes, kern nodes, box nodes, rule nodes, and ligature nodes.
@<Try to break after a discretionary fragment...@>=
{@+s=pre_break(cur_p);disc_width=0;
if (s==null) try_break(ex_hyphen_penalty, hyphenated);
-else{@+do {@<Add the width of node |s| to |disc_width|@>;
+else{@+@/do@+{@<Add the width of node |s| to |disc_width|@>;
s=link(s);
- } while (!(s==null));
+ }@+ while (!(s==null));
act_width=act_width+disc_width;
try_break(hyphen_penalty, hyphenated);
act_width=act_width-disc_width;
@@ -17919,11 +17904,11 @@ if (link(active)!=last_active)
@ @<Find an active node...@>=
r=link(active);fewest_demerits=awful_bad;
-do {if (type(r)!=delta_node) if (total_demerits(r) < fewest_demerits)
+@/do@+{if (type(r)!=delta_node) if (total_demerits(r) < fewest_demerits)
{@+fewest_demerits=total_demerits(r);best_bet=r;
}
r=link(r);
-} while (!(r==last_active));
+}@+ while (!(r==last_active));
best_line=line_number(best_bet)
@ The adjustment for a desired looseness is a slightly more complicated
@@ -17933,7 +17918,7 @@ looseness calculation, independently of the other segments.
@<Find the best active node...@>=
{@+r=link(active);actual_looseness=0;
-do {if (type(r)!=delta_node)
+@/do@+{if (type(r)!=delta_node)
{@+line_diff=line_number(r)-best_line;
if (((line_diff < actual_looseness)&&(looseness <= line_diff))||@|
((line_diff > actual_looseness)&&(looseness >= line_diff)))
@@ -17946,7 +17931,7 @@ do {if (type(r)!=delta_node)
}
}
r=link(r);
-} while (!(r==last_active));
+}@+ while (!(r==last_active));
best_line=line_number(best_bet);
}
@@ -17981,14 +17966,14 @@ quarterword @!t; /*used for replacement counts in discretionary nodes*/
int @!pen; /*use when calculating penalties between lines*/
halfword @!cur_line; /*the current line number being justified*/
@<Reverse the links of the relevant passive nodes, setting |cur_p| to the
-first breakpoint@>@;
+first breakpoint@>;
cur_line=prev_graf+1;
-do {@<Justify the line ending at breakpoint |cur_p|, and append it to the
+@/do@+{@<Justify the line ending at breakpoint |cur_p|, and append it to the
current vertical list, together with associated penalties and other insertions@>;
incr(cur_line);cur_p=next_break(cur_p);
if (cur_p!=null) if (!post_disc_break)
@<Prune unwanted nodes at the beginning of the next line@>;
-} while (!(cur_p==null));
+}@+ while (!(cur_p==null));
if ((cur_line!=best_line)||(link(temp_head)!=null))
confusion("line breaking");
@:this can't happen line breaking}{\quad line breaking@>
@@ -18003,8 +17988,8 @@ Node |r| is the passive node being moved from stack to stack.
@<Reverse the links of the relevant passive nodes...@>=
q=break_node(best_bet);cur_p=null;
-do {r=q;q=prev_break(q);next_break(r)=cur_p;cur_p=r;
-} while (!(q==null));
+@/do@+{r=q;q=prev_break(q);next_break(r)=cur_p;cur_p=r;
+}@+ while (!(q==null))
@ Glue and penalty and kern and math nodes are deleted at the beginning of
a line, except in the anomalous case that the node to be deleted is actually
@@ -18257,8 +18242,8 @@ int @!c; /*character being considered for hyphenation*/
second pass, and |cur_p| points to a glue node.
@p
-static void hyphenate_word(void)
-{ @+pointer @!q, @!s, @!prev_s; /*miscellaneous nodes of temporary interest*/
+static void hyphenate_word(void)@t\2\2@>@/
+{ pointer @!q, @!s, @!prev_s;@t\1@> /*miscellaneous nodes of temporary interest*/
small_number @!j; /*an index into |hc| or |hu|*/
uint8_t @!c; /*character being considered for hyphenation*/
@@ -18692,7 +18677,7 @@ pointer @!hyf_node; /*the hyphen, if it exists*/
@ When the following code is performed, |hyf[0]| and |hyf[hn]| will be zero.
@<Reconstitute nodes for the hyphenated word...@>=
-do {l=j;j=reconstitute(j, hn, bchar, qi(hyf_char))+1;
+@/do@+{l=j;j=reconstitute(j, hn, bchar, qi(hyf_char))+1;
if (hyphen_passed==0)
{@+link(s)=link(hold_head);
while (link(s) > null) s=link(s);
@@ -18702,8 +18687,8 @@ if (hyphen_passed==0)
}
if (hyphen_passed > 0)
@<Create and append a discretionary node as an alternative to the unhyphenated
-word, and continue to develop both branches until they become equivalent@>@;
-} while (!(j > hn));
+word, and continue to develop both branches until they become equivalent@>;
+}@+ while (!(j > hn));
link(s)=q
@ In this repeat loop we will insert another discretionary if |hyf[j-1]| is
@@ -18717,7 +18702,7 @@ point. (Consider the word `difficult', where the letter `c' is in position |j|.)
}
@<Create and append a discretionary node as an alternative...@>=
-do {r=get_node(small_node_size);
+@/do@+{r=get_node(small_node_size);
link(r)=link(hold_head);type(r)=disc_node;
major_tail=r;r_count=0;
while (link(major_tail) > null) advance_major_tail;
@@ -18728,7 +18713,7 @@ list and to |major_tail| until synchronization has been achieved@>;
@<Move pointer |s| to the end of the current list, and set |replace_count(r)|
appropriately@>;
hyphen_passed=j-1;link(hold_head)=null;
-} while (!(!odd(hyf[j-1])));
+}@+ while (!(!odd(hyf[j-1])))
@ The new hyphen might combine with the previous character via ligature
or kern. At this point we have |l-1 <= i < j| and |i < hn|.
@@ -18760,7 +18745,7 @@ if (bchar_label[hf]!=non_address) /*put left boundary at beginning of new line*
{@+decr(l);c=hu[l];c_loc=l;hu[l]=256;
}
while (l < j)
- {@+do {l=reconstitute(l, hn, bchar, non_char)+1;
+ {@+@/do@+{l=reconstitute(l, hn, bchar, non_char)+1;
if (c_loc > 0)
{@+hu[c_loc]=c;c_loc=0;
}
@@ -18770,7 +18755,7 @@ while (l < j)
minor_tail=link(hold_head);
while (link(minor_tail) > null) minor_tail=link(minor_tail);
}
- } while (!(l >= j));
+ }@+ while (!(l >= j));
while (l > j)
@<Append characters of |hu[j..]| to |major_tail|, advancing~|j|@>;
}
@@ -18888,10 +18873,10 @@ for (j=0; j<=r_hyf-1; j++) hyf[hn-j]=0
@ @<Store \(m)maximum values in the |hyf| table@>=
{@+v=trie_op(z);
-do {v=v+op_start[cur_lang];i=l-hyf_distance[v];
+@/do@+{v=v+op_start[cur_lang];i=l-hyf_distance[v];
if (hyf_num[v] > hyf[i]) hyf[i]=hyf_num[v];
v=hyf_next[v];
-} while (!(v==min_quarterword));
+}@+ while (!(v==min_quarterword));
}
@ The exception table that is built by \TeX's \.{\\hyphenation} primitive is
@@ -18956,10 +18941,10 @@ k=hyph_word[h];if (k==0) goto not_found;
if (length(k) < hn) goto not_found;
if (length(k)==hn)
{@+j=1;u=str_start[k];
- do {if (so(str_pool[u]) < hc[j]) goto not_found;
+ @/do@+{if (so(str_pool[u]) < hc[j]) goto not_found;
if (so(str_pool[u]) > hc[j]) goto done;
incr(j);incr(u);
- } while (!(j > hn));
+ }@+ while (!(j > hn));
@<Insert hyphens as specified in |hyph_list[h]|@>;
decr(hn);goto found;
}
@@ -19085,10 +19070,10 @@ k=hyph_word[h];
if (length(k) < length(s)) goto found;
if (length(k) > length(s)) goto not_found;
u=str_start[k];v=str_start[s];
-do {if (str_pool[u] < str_pool[v]) goto found;
+@/do@+{if (str_pool[u] < str_pool[v]) goto found;
if (str_pool[u] > str_pool[v]) goto not_found;
incr(u);incr(v);
-} while (!(u==str_start[k+1]));
+}@+ while (!(u==str_start[k+1]));
found: q=hyph_list[h];hyph_list[h]=p;p=q;@/
t=hyph_word[h];hyph_word[h]=s;s=t;
not_found:
@@ -19376,7 +19361,7 @@ loop@+{@+h=z-c;@/
otherwise |goto not_found|@>;
not_found: z=trie_link(z); /*move to the next hole*/
}
-found: @<Pack the family into |trie| relative to |h|@>@;
+found: @<Pack the family into |trie| relative to |h|@>;
}
@ By making sure that |trie_max| is at least |h+256|, we can be sure that
@@ -19387,9 +19372,9 @@ never be occupied in |trie|, and we will have |trie_max >= trie_link(z)|.
if (trie_max < h+256)
{@+if (trie_size <= h+256) overflow("pattern memory", trie_size);
@:TeX capacity exceeded pattern memory}{\quad pattern memory@>
- do {incr(trie_max);trie_taken[trie_max]=false;
+ @/do@+{incr(trie_max);trie_taken[trie_max]=false;
trie_link(trie_max)=trie_max+1;trie_back(trie_max)=trie_max-1;
- } while (!(trie_max==h+256));
+ }@+ while (!(trie_max==h+256));
}
@ @<If all characters of the family fit relative to |h|...@>=
@@ -19402,15 +19387,15 @@ goto found
@ @<Pack the family into |trie| relative to |h|@>=
trie_taken[h]=true;trie_ref[p]=h;q=p;
-do {z=h+so(trie_c[q]);l=trie_back(z);r=trie_link(z);
+@/do@+{z=h+so(trie_c[q]);l=trie_back(z);r=trie_link(z);
trie_back(r)=l;trie_link(l)=r;trie_link(z)=0;
if (l < 256)
{@+if (z < 256) ll=z;@+else ll=256;
- do {trie_min[l]=r;incr(l);
- } while (!(l==ll));
+ @/do@+{trie_min[l]=r;incr(l);
+ }@+ while (!(l==ll));
}
q=trie_r[q];
-} while (!(q==0));
+}@+ while (!(q==0))
@ To pack the entire linked trie, we use the following recursive procedure.
@^recursion@>
@@ -19418,12 +19403,12 @@ q=trie_r[q];
@<Declare procedures for preprocessing hyph...@>=
static void trie_pack(trie_pointer @!p) /*pack subtries of a family*/
{@+trie_pointer q; /*a local variable that need not be saved on recursive calls*/
-do {q=trie_l[p];
+@/do@+{q=trie_l[p];
if ((q > 0)&&(trie_ref[q]==0))
{@+first_fit(q);trie_pack(q);
}
p=trie_r[p];
-} while (!(p==0));
+}@+ while (!(p==0));
}
@ When the whole trie has been allocated into the sequential table, we
@@ -19441,8 +19426,8 @@ if (trie_max==0) /*no patterns were given*/
else{@+if (hyph_root > 0) trie_fix(hyph_root);
if (trie_root > 0) trie_fix(trie_root); /*this fixes the non-holes in |trie|*/
r=0; /*now we will zero out all the holes*/
- do {s=trie_link(r);trie[r]=h;r=s;
- } while (!(r > trie_max));
+ @/do@+{s=trie_link(r);trie[r]=h;r=s;
+ }@+ while (!(r > trie_max));
}
trie_char(0)=qi('?'); /*make |trie_char(c)!=c| for all |c|*/
@@ -19458,11 +19443,11 @@ static void trie_fix(trie_pointer @!p) /*moves |p| and its siblings into |trie|*
ASCII_code @!c; /*another one that need not be saved*/
trie_pointer @!z; /*|trie| reference; this local variable must be saved*/
z=trie_ref[p];
-do {q=trie_l[p];c=so(trie_c[p]);
+@/do@+{q=trie_l[p];c=so(trie_c[p]);
trie_link(z+c)=trie_ref[q];trie_char(z+c)=qi(c);trie_op(z+c)=trie_o[p];
if (q > 0) trie_fix(q);
p=trie_r[p];
-} while (!(p==0));
+}@+ while (!(p==0));
}
@ Now let's go back to the easier problem, of building the linked
@@ -20061,9 +20046,9 @@ if (page_head!=page_tail)
print_scaled(t);
if (type(r)==split_up)
{@+q=page_head;t=0;
- do {q=link(q);
+ @/do@+{q=link(q);
if ((type(q)==ins_node)&&(subtype(q)==subtype(r))) incr(t);
- } while (!(q==broken_ins(r)));
+ }@+ while (!(q==broken_ins(r)));
print(", #");print_int(t);print(" might split");
}
r=link(r);
@@ -20723,7 +20708,8 @@ pop_nest();build_page();
@.Unbalanced output routine@>
help2("Your sneaky output routine has problematic {'s and/or }'s.",@/
"I can't handle that very well; good luck.");error();
-do get_token(); while (!(loc==null));
+@/do@+{get_token();
+}@+ while (!(loc==null));
} /*loops forever if reading from a file, since |null==min_halfword <= 0|*/
@ @<Ensure that box 255 is empty after output@>=
@@ -20807,7 +20793,7 @@ case hmode+no_boundary: {@+get_x_token();
case hmode+spacer: if (space_factor==1000) goto append_normal_space;
else app_space();@+break;
case hmode+ex_space: case mmode+ex_space: goto append_normal_space;
-@/@t\4@>@<Cases of |main_control| that are not part of the inner loop@>@;
+@t\4@>@<Cases of |main_control| that are not part of the inner loop@>@;
} /*of the big |case| statement*/
goto big_switch;
main_loop: @<Append character |cur_chr| and the following characters (if~any)
@@ -21120,7 +21106,7 @@ if ((space_factor >= 2000)&&(xspace_skip!=zero_glue))
else{@+if (space_skip!=zero_glue) main_p=space_skip;
else@<Find the glue specification...@>;
main_p=new_spec(main_p);
- @<Modify the glue specification in |main_p| according to the space factor@>@;
+ @<Modify the glue specification in |main_p| according to the space factor@>;
q=new_glue(main_p);glue_ref_count(main_p)=null;
}
link(tail)=q;tail=q;
@@ -21129,7 +21115,7 @@ link(tail)=q;tail=q;
@ @<Modify the glue specification in |main_p| according to the space factor@>=
if (space_factor >= 2000) width(main_p)=width(main_p)+extra_space(cur_font);
stretch(main_p)=xn_over_d(stretch(main_p), space_factor, 1000);
-shrink(main_p)=xn_over_d(shrink(main_p), 1000, space_factor);
+shrink(main_p)=xn_over_d(shrink(main_p), 1000, space_factor)
@ Whew---that covers the main loop. We can now proceed at a leisurely
pace through the other combinations of possibilities.
@@ -21144,7 +21130,7 @@ any_mode(ignore_spaces): {@+@<Get the next non-blank non-call...@>;
goto reswitch;
}
case vmode+stop: if (its_all_over()) return;@+break; /*this is the only way out*/
-@<Forbidden cases detected in |main_control|@>@+@, any_mode(mac_param):
+@t\4@>@<Forbidden cases detected in |main_control|@>@+@, any_mode(mac_param):
report_illegal_case();@+break;
@<Math-only cases in non-math modes, or vice versa@>: insert_dollar_sign();@+break;
@t\4@>@<Cases of |main_control| that build boxes and lists@>@;
@@ -21497,7 +21483,7 @@ case bottom_level: {@+print_err("Too many }'s");
} @+break;
case semi_simple_group: case math_shift_group:
case math_left_group: extra_right_brace();@+break;
-@/@t\4@>@<Cases of |handle_right_brace| where a |right_brace| triggers a delayed
+@t\4@>@<Cases of |handle_right_brace| where a |right_brace| triggers a delayed
action@>@;
default:confusion("rightbrace");
@:this can't happen rightbrace}{\quad rightbrace@>
@@ -21693,7 +21679,7 @@ current vertical list.
}
else{@+cur_val=box_context-global_box_flag;a=4;
}
-if (cur_val < 256) @[g_define(box_base+cur_val, box_ref, cur_box)@];
+if (cur_val < 256) define(box_base+cur_val, box_ref, cur_box);
else sa_def_box;
}
@@ -21761,13 +21747,13 @@ else{@+if (!is_char_node(tail))
@ @<Remove the last box...@>=
{@+q=head;
-do {p=q;
+@/do@+{p=q;
if (!is_char_node(q)) if (type(q)==disc_node)
{@+for (m=1; m<=replace_count(q); m++) p=link(p);
if (p==tail) goto done;
}
q=link(p);
-} while (!(q==tail));
+}@+ while (!(q==tail));
cur_box=tail;shift_amount(cur_box)=0;
tail=p;link(p)=null;
done: ;}
@@ -22078,13 +22064,13 @@ if ((mode==vmode)&&(tail==head))
non-glue@>@;
else{@+if (!is_char_node(tail)) if (type(tail)==cur_chr)
{@+q=head;
- do {p=q;
+ @/do@+{p=q;
if (!is_char_node(q)) if (type(q)==disc_node)
{@+for (m=1; m<=replace_count(q); m++) p=link(p);
if (p==tail) return;
}
q=link(p);
- } while (!(q==tail));
+ }@+ while (!(q==tail));
link(p)=null;flush_node_list(tail);tail=p;
}
}
@@ -22125,8 +22111,8 @@ case remove_item: if (chr_code==glue_node) print_esc("unskip");
else print_esc("unpenalty");@+break;
case un_hbox: if (chr_code==copy_code) print_esc("unhcopy");
else print_esc("unhbox");@+break;
-case un_vbox: if (chr_code==copy_code) print_esc("unvcopy");
- else @<Cases of |un_vbox| for |print_cmd_chr|@>@;
+case un_vbox: if (chr_code==copy_code) print_esc("unvcopy")
+ @<Cases of |un_vbox| for |print_cmd_chr|@>;@/
else print_esc("unvbox");@+break;
@ The |un_hbox| and |un_vbox| commands unwrap one of the 256 current boxes.
@@ -23167,8 +23153,8 @@ primitive("right", left_right, right_noad);
text(frozen_right)=text(cur_val);eqtb[frozen_right]=eqtb[cur_val];
@ @<Cases of |print_cmd_chr|...@>=
-case left_right: if (chr_code==left_noad) print_esc("left");
-else @<Cases of |left_right| for |print_cmd_chr|@>@;
+case left_right: if (chr_code==left_noad) print_esc("left")
+@/@<Cases of |left_right| for |print_cmd_chr|@>;@/
else print_esc("right");@+break;
@ @<Cases of |main_control| that build...@>=
@@ -23505,8 +23491,8 @@ primitive("xdef", def, 3);
@ @<Cases of |print_cmd_chr|...@>=
case prefix: if (chr_code==1) print_esc("long");
- else if (chr_code==2) print_esc("outer");
- else @<Cases of |prefix| for |print_cmd_chr|@>@;
+ else if (chr_code==2) print_esc("outer")
+ @/@<Cases of |prefix| for |print_cmd_chr|@>;@/
else print_esc("global");@+break;
case def: if (chr_code==0) print_esc("def");
else if (chr_code==1) print_esc("gdef");
@@ -23616,7 +23602,7 @@ if ((cur_cmd!=def)&&((a%4!=0)||(j!=0)))
since the following routines test for the \.{\\global} prefix as follows.
@d global (a >= 4)
-@d g_define(A, B, C) if (global) geq_define(A, B, C);@+else eq_define(A, B, C)
+@d define(A, B, C) if (global) geq_define(A, B, C);@+else eq_define(A, B, C)
@d word_define(A, B) if (global) geq_word_define(A, B);@+else eq_word_define(A, B)
@<Adjust \(f)for the setting of \.{\\globaldefs}@>=
@@ -23634,7 +23620,8 @@ control sequence for a token that is not redefinable.
@<Declare subprocedures for |prefixed_command|@>=
static void get_r_token(void)
{@+
-restart: do get_token(); while (!(cur_tok!=space_token));
+restart: @/do@+{get_token();
+}@+ while (!(cur_tok!=space_token));
if ((cur_cs==0)||(cur_cs > frozen_control_sequence))
{@+print_err("Missing control sequence inserted");
@.Missing control...@>
@@ -23657,7 +23644,7 @@ text(frozen_protection)=s_no("inaccessible");
(Unfortunately, they aren't all as simple as this.)
@<Assignments@>=
-case set_font: g_define(cur_font_loc, data, cur_chr);@+break;
+case set_font: define(cur_font_loc, data, cur_chr);@+break;
@ When a |def| command has been scanned,
|cur_chr| is odd if the definition is supposed to be global, and
@@ -23671,7 +23658,7 @@ case def: {@+if (odd(cur_chr)&&!global&&(global_defs >= 0)) a=a+4;
{@+q=get_avail();info(q)=j;link(q)=link(def_ref);
link(def_ref)=q;
}
- g_define(p, call+(a%4), def_ref);
+ define(p, call+(a%4), def_ref);
} @+break;
@ Both \.{\\let} and \.{\\futurelet} share the command code |let|.
@@ -23689,7 +23676,8 @@ case let: if (chr_code!=normal) print_esc("futurelet");@+else print_esc("let");@
case let: {@+n=cur_chr;
get_r_token();p=cur_cs;
if (n==normal)
- {@+do get_token(); while (!(cur_cmd!=spacer));
+ {@+@/do@+{get_token();
+ }@+ while (!(cur_cmd!=spacer));
if (cur_tok==other_token+'=')
{@+get_token();
if (cur_cmd==spacer) get_token();
@@ -23702,7 +23690,7 @@ case let: {@+n=cur_chr;
else if ((cur_cmd==internal_register)||(cur_cmd==toks_register))
if ((cur_chr < mem_bot)||(cur_chr > lo_mem_stat_max))
add_sa_ref(cur_chr);
- g_define(p, cur_cmd, cur_chr);
+ define(p, cur_cmd, cur_chr);
} @+break;
@ A \.{\\chardef} creates a control sequence whose |cmd| is |char_given|;
@@ -23757,12 +23745,12 @@ producing an ``undefined control sequence'' error or expanding the
previous meaning. This allows, for instance, `\.{\\chardef\\foo=123\\foo}'.
@<Assignments@>=
-case shorthand_def: {@+n=cur_chr;get_r_token();p=cur_cs;g_define(p, relax, 256);
+case shorthand_def: {@+n=cur_chr;get_r_token();p=cur_cs;define(p, relax, 256);
scan_optional_equals();
switch (n) {
- case char_def_code: {@+scan_char_num();g_define(p, char_given, cur_val);
+ case char_def_code: {@+scan_char_num();define(p, char_given, cur_val);
} @+break;
- case math_char_def_code: {@+scan_fifteen_bit_int();g_define(p, math_given, cur_val);
+ case math_char_def_code: {@+scan_fifteen_bit_int();define(p, math_given, cur_val);
} @+break;
default:{@+scan_register_num();
if (cur_val > 255)
@@ -23770,15 +23758,15 @@ case shorthand_def: {@+n=cur_chr;get_r_token();p=cur_cs;g_define(p, relax, 256);
if (j > mu_val) j=tok_val; /*|int_val dotdot mu_val| or |tok_val|*/
find_sa_element(j, cur_val, true);add_sa_ref(cur_ptr);
if (j==tok_val) j=toks_register;@+else j=internal_register;
- g_define(p, j, cur_ptr);
+ define(p, j, cur_ptr);
}
else
switch (n) {
- case count_def_code: g_define(p, assign_int, count_base+cur_val);@+break;
- case dimen_def_code: g_define(p, assign_dimen, scaled_base+cur_val);@+break;
- case skip_def_code: g_define(p, assign_glue, skip_base+cur_val);@+break;
- case mu_skip_def_code: g_define(p, assign_mu_glue, mu_skip_base+cur_val);@+break;
- case toks_def_code: g_define(p, assign_toks, toks_base+cur_val);
+ case count_def_code: define(p, assign_int, count_base+cur_val);@+break;
+ case dimen_def_code: define(p, assign_dimen, scaled_base+cur_val);@+break;
+ case skip_def_code: define(p, assign_glue, skip_base+cur_val);@+break;
+ case mu_skip_def_code: define(p, assign_mu_glue, mu_skip_base+cur_val);@+break;
+ case toks_def_code: define(p, assign_toks, toks_base+cur_val);
} /*there are no other cases*/
}
}
@@ -23794,7 +23782,7 @@ case read_to_cs: {@+j=cur_chr;scan_int();n=cur_val;
"I'm going to look for the \\cs now.");error();
}
get_r_token();
- p=cur_cs;read_toks(n, p, j);g_define(p, call, cur_val);
+ p=cur_cs;read_toks(n, p, j);define(p, call, cur_val);
} @+break;
@ The token-list parameters, \.{\\output} and \.{\\everypar}, etc., receive
@@ -23864,7 +23852,7 @@ case assign_dimen: {@+p=cur_chr;scan_optional_equals();
case assign_glue: case assign_mu_glue: {@+p=cur_chr;n=cur_cmd;scan_optional_equals();
if (n==assign_mu_glue) scan_glue(mu_val);@+else scan_glue(glue_val);
trap_zero_glue();
- g_define(p, glue_ref, cur_val);
+ define(p, glue_ref, cur_val);
} @+break;
@ When a glue register or parameter becomes zero, it will always point to
@@ -23927,8 +23915,8 @@ case def_code: {@+@<Let |n| be the largest legal code value, based on |cur_chr|@
help1("I'm going to use 0 instead of that illegal code value.");@/
error();cur_val=0;
}
- if (p < math_code_base) g_define(p, data, cur_val);
- else if (p < del_code_base) g_define(p, data, hi(cur_val));
+ if (p < math_code_base) define(p, data, cur_val);
+ else if (p < del_code_base) define(p, data, hi(cur_val));
else word_define(p, cur_val);
} @+break;
@@ -23941,7 +23929,7 @@ else n=255
@ @<Assignments@>=
case def_family: {@+p=cur_chr;scan_four_bit_int();p=p+cur_val;
- scan_optional_equals();scan_font_ident();g_define(p, data, cur_val);
+ scan_optional_equals();scan_font_ident();define(p, data, cur_val);
} @+break;
@ Next we consider changes to \TeX's numeric registers.
@@ -24149,8 +24137,8 @@ static void alter_integer(void)
{@+small_number c;
/*0 for \.{\\deadcycles}, 1 for \.{\\insertpenalties}, etc.*/
c=cur_chr;scan_optional_equals();scan_int();
-if (c==0) dead_cycles=cur_val;
-else @<Cases for |alter_integer|@>@;
+if (c==0) dead_cycles=cur_val
+@/@<Cases for |alter_integer|@>@;@/
else insert_penalties=cur_val;
}
@@ -24188,7 +24176,7 @@ case set_shape: {@+q=cur_chr;scan_optional_equals();scan_int();n=cur_val;
}
cur_hfactor=fh; cur_vfactor=fv;
}
- g_define(q, shape_ref, p);
+ define(q, shape_ref, p);
} @+break;
@ Here's something that isn't quite so obvious. It guarantees that
@@ -24219,7 +24207,7 @@ new_patterns();goto done;@;
print_err("Patterns can be loaded only by INITEX");
@.Patterns can be...@>
help0;error();
- do get_token(); while (!(cur_cmd==right_brace)); /*flush the patterns*/
+ @/do@+{get_token();}@+ while (!(cur_cmd==right_brace)); /*flush the patterns*/
return;
}
else{@+new_hyph_exceptions();goto done;
@@ -24273,12 +24261,12 @@ else{@+old_setting=selector;selector=new_string;
@.FONTx@>
str_room(1);t=make_string();
}
-g_define(u, set_font, null_font);scan_optional_equals();scan_file_name();
+define(u, set_font, null_font);scan_optional_equals();scan_file_name();
@<Scan the font size specification@>;
@<If this font has already been loaded, set |f| to the internal font number
and |goto common_ending|@>;
f=read_font_info(u, cur_name, cur_area, s);
-common_ending: g_define(u, set_font, f);eqtb[font_id_base+f]=eqtb[u];font_id_text(f)=t;
+common_ending: define(u, set_font, f);eqtb[font_id_base+f]=eqtb[u];font_id_text(f)=t;
}
@ @<Scan the font size specification@>=
@@ -24663,7 +24651,7 @@ so that the inverse relation between them is clear.
The global variable |format_ident| is a string that is printed right
after the |banner| line when \TeX\ is ready to start. For \.{INITEX} this
string says simply `\.{ (INITEX)}'; for other versions of \TeX\ it says,
-for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year,
+for example, `\.{ (preloaded format=plain 1982.11.19)}', showing the year,
month, and day that the format file was created. We have |format_ident==0|
before \TeX's tables are loaded.
@@ -24853,10 +24841,10 @@ sort_avail();var_used=0;
dump_int(lo_mem_max);dump_int(rover);
if (eTeX_ex) for (k=int_val; k<=tok_val; k++) dump_int(sa_root[k]);
p=mem_bot;q=rover;x=0;
-do {for (k=p; k<=q+1; k++) dump_wd(mem[k]);
+@/do@+{for (k=p; k<=q+1; k++) dump_wd(mem[k]);
x=x+q+2-p;var_used=var_used+q-p;
p=q+node_size(q);q=rlink(q);
-} while (!(q==rover));
+}@+ while (!(q==rover));
var_used=var_used+lo_mem_max-p;dyn_used=mem_end+1-hi_mem_min;@/
for (k=p; k<=lo_mem_max; k++) dump_wd(mem[k]);
x=x+lo_mem_max+1-p;
@@ -24878,11 +24866,11 @@ undump(lo_mem_stat_max+1, lo_mem_max, rover);
if (eTeX_ex) for (k=int_val; k<=tok_val; k++)
undump(null, lo_mem_max, sa_root[k]);
p=mem_bot;q=rover;
-do {for (k=p; k<=q+1; k++) undump_wd(mem[k]);
+@/do@+{for (k=p; k<=q+1; k++) undump_wd(mem[k]);
p=q+node_size(q);
if ((p > lo_mem_max)||((q >= rlink(q))&&(rlink(q)!=rover))) goto bad_fmt;
q=rlink(q);
-} while (!(q==rover));
+}@+ while (!(q==rover));
for (k=p; k<=lo_mem_max; k++) undump_wd(mem[k]);
if (mem_min < mem_bot-2) /*make more low memory available*/
{@+p=llink(rover);q=mem_min+1;
@@ -24897,14 +24885,14 @@ for (k=hi_mem_min; k<=mem_end; k++) undump_wd(mem[k]);
undump_int(var_used);undump_int(dyn_used)
@ @<Dump the table of equivalents@>=
-@<Dump regions 1 to 4 of |eqtb|@>@;
-@<Dump regions 5 and 6 of |eqtb|@>@;
+@<Dump regions 1 to 4 of |eqtb|@>;
+@<Dump regions 5 and 6 of |eqtb|@>;
dump_int(par_loc);dump_int(write_loc);@/
dump_int(input_loc);@/
@<Dump the hash table@>@;
@ @<Undump the table of equivalents@>=
-@<Undump regions 1 to 6 of |eqtb|@>@;
+@<Undump regions 1 to 6 of |eqtb|@>;
undump(hash_base, frozen_control_sequence, par_loc);
par_token=cs_token_flag+par_loc;@/
undump(hash_base, frozen_control_sequence, write_loc);@/
@@ -24919,7 +24907,7 @@ copies of $x_n$, namely $(x_1,\ldots,x_n,x_n,\ldots,x_n)$.
@<Dump regions 1 to 4 of |eqtb|@>=
k=active_base;
-do {j=k;
+@/do@+{j=k;
while (j < int_base-1)
{@+if ((equiv(j)==equiv(j+1))&&(eq_type(j)==eq_type(j+1))&&@|
(eq_level(j)==eq_level(j+1))) goto found1;
@@ -24937,10 +24925,10 @@ while (k < l)
{@+dump_wd(eqtb[k]);incr(k);
}
k=j+1;dump_int(k-l);
-} while (!(k==int_base));
+}@+ while (!(k==int_base))
@ @<Dump regions 5 and 6 of |eqtb|@>=
-do {j=k;
+@/do@+{j=k;
while (j < eqtb_size)
{@+if (eqtb[j].i==eqtb[j+1].i) goto found2;
incr(j);
@@ -24956,11 +24944,11 @@ while (k < l)
{@+dump_wd(eqtb[k]);incr(k);
}
k=j+1;dump_int(k-l);
-} while (!(k > eqtb_size));
+}@+ while (!(k > eqtb_size))
@ @<Undump regions 1 to 6 of |eqtb|@>=
k=active_base;
-do {undump_int(x);
+@/do@+{undump_int(x);
if ((x < 1)||(k+x > eqtb_size+1)) goto bad_fmt;
for (j=k; j<=k+x-1; j++) undump_wd(eqtb[j]);
k=k+x;
@@ -24968,7 +24956,7 @@ undump_int(x);
if ((x < 0)||(k+x > eqtb_size+1)) goto bad_fmt;
for (j=k; j<=k+x-1; j++) eqtb[j]=eqtb[k-1];
k=k+x;
-} while (!(k > eqtb_size));
+}@+ while (!(k > eqtb_size))
@ A different scheme is used to compress the hash table, since its lower
region is usually sparse. When |text(p)!=0| for |p <= hash_used|, we output
@@ -24986,8 +24974,8 @@ print_ln();print_int(cs_count);print(" multiletter control sequences")
@ @<Undump the hash table@>=
undump(hash_base, frozen_control_sequence, hash_used);p=hash_base-1;
-do {undump(p+1, hash_used, p);undump_hh(hash[p]);
-} while (!(p==hash_used));
+@/do@+{undump(p+1, hash_used, p);undump_hh(hash[p]);
+}@+ while (!(p==hash_used));
for (p=hash_used+1; p<=undefined_control_sequence-1; p++) undump_hh(hash[p]);
undump_int(cs_count)
@@ -25800,7 +25788,7 @@ case extension: switch (chr_code) {
case ignore_node: print("[HINT internal: ignore]");@+break;
case immediate_code: print_esc("immediate");@+break;
case set_language_code: print_esc("setlanguage");@+break;
- @/@t\4@>@<Cases of |extension| for |print_cmd_chr|@>@;
+ @/@<Cases of |extension| for |print_cmd_chr|@>@/
default:print("[unknown extension!]");
} @+break;
@@ -25991,7 +25979,7 @@ case xdimen_node:
case ignore_node: @+break;
case immediate_code: @<Implement \.{\\immediate}@>@;@+break;
case set_language_code: @<Implement \.{\\setlanguage}@>@;@+break;
-@/@t\4@>@<Cases for |do_extension|@>@;
+@/@<Cases for |do_extension|@>@/
default:confusion("ext1");
@:this can't happen ext1}{\quad ext1@>
}
@@ -26122,7 +26110,7 @@ case language_node: {@+print_esc("setlanguage");
print_int(what_lhm(p));print_char(',');
print_int(what_rhm(p));print_char(')');
} @+break;
-@/@t\4@>@<Cases for displaying the |whatsit| node@>@;
+@/@<Cases for displaying the |whatsit| node@>@/
case param_node: print_esc("parameter ");
print_int(param_type(p));print_char(',');print_int(param_no(p));
print_char(':');print_int(param_value(p).i);
@@ -26263,7 +26251,7 @@ case write_node: case special_node: case latespecial_node: {@+r=get_node(write_n
case close_node: case language_node: {@+r=get_node(small_node_size);
words=small_node_size;
} @+break;
-@/@t\4@>@<Cases for making a partial copy of the whatsit node@>@;
+@/@<Cases for making a partial copy of the whatsit node@>@/
case param_node:
{@+r=get_node(param_node_size);
if (param_type(p)==glue_type) add_glue_ref(param_value(p).i);
@@ -26446,7 +26434,7 @@ case stream_node:
free_node(p,stream_node_size); @+break;
case xdimen_node:
free_node(p,xdimen_node_size);
-@/@t\4@>@<Cases for wiping out the whatsit node@>@;
+@/@<Cases for wiping out the whatsit node@>@/
default:confusion("ext3");
@:this can't happen ext3}{\quad ext3@>
} @/
@@ -26459,7 +26447,7 @@ goto done;
@ @<Let |d| be the width of the whatsit |p|@>=d=0
-@ @d adv_past(A) if (subtype(A)==language_node)
+@ @d adv_past(A) @+if (subtype(A)==language_node)
{@+cur_lang=what_lang(A);l_hyf=what_lhm(A);r_hyf=what_rhm(A);
set_hyph_index;
}
@@ -26558,7 +26546,8 @@ end_token_list() /*conserve stack space*/
@.Unbalanced write...@>
help2("On this page there's a \\write with fewer real {'s than }'s.",@/
"I can't handle that very well; good luck.");error();
-do get_token(); while (!(cur_tok==end_write_token));
+@/do@+{get_token();
+}@+ while (!(cur_tok==end_write_token));
}
@ The |out_what| procedure takes care of outputting whatsit nodes for
@@ -27029,9 +27018,9 @@ a=1;
print_nl("");print_ln();
loop@+{@+print_nl("### ");print_group(true);
if (cur_group==bottom_level) goto done;
- do {m=nest[p].mode_field;
+ @/do@+{m=nest[p].mode_field;
if (p > 0) decr(p);else m=vmode;
- } while (!(m!=hmode));
+ }@+ while (!(m!=hmode));
print(" (");
switch (cur_group) {
case simple_group: {@+incr(p);goto found2;
@@ -27156,7 +27145,7 @@ scanner_status=s;warning_index=w;def_ref=d;
@ The \.{\\showtokens} command displays a token list.
-@d show_tokens 5 /* \.{\\showtokens}, must be odd! */
+@d show_tokens 5 /* \.{\\showtokens} , must be odd! */
@<Generate all \eTeX...@>=
primitive("showtokens", xray, show_tokens);
@@ -27179,9 +27168,9 @@ primitive("unexpanded", the, 1);@/
primitive("detokenize", the, show_tokens);@/
@!@:detokenize\_}{\.{\\detokenize} primitive@>
-@ @<Cases of |the| for |print_cmd_chr|@>=
-if (chr_code==1) print_esc("unexpanded");
-else print_esc("detokenize");
+@ @<Cases of |the| for |print_cmd_chr|@>=;
+else if (chr_code==1) print_esc("unexpanded");
+else print_esc("detokenize")
@ @<Handle \.{\\unexpanded} or \.{\\detokenize} and |return|@>=
if (odd(cur_chr))
@@ -27216,14 +27205,14 @@ case show_ifs: {@+begin_diagnostic();print_nl("");print_ln();
{@+print_nl("### ");print("no active conditionals");
}
else{@+p=cond_ptr;n=0;
- do {incr(n);p=link(p);@+} while (!(p==null));
+ @/do@+{incr(n);p=link(p);@+}@+ while (!(p==null));
p=cond_ptr;t=cur_if;l=if_line;m=if_limit;
- do {print_nl("### level ");print_int(n);print(": ");
+ @/do@+{print_nl("### level ");print_int(n);print(": ");
print_cmd_chr(if_test, t);
if (m==fi_code) print_esc("else");
print_if_line(l);
decr(n);t=subtype(p);l=if_line_field(p);m=type(p);p=link(p);
- } while (!(p==null));
+ }@+ while (!(p==null));
}
} @+break;
@@ -27234,17 +27223,17 @@ interaction mode.
primitive("interactionmode", set_page_int, 2);
@!@:interaction\_mode\_}{\.{\\interactionmode} primitive@>
-@ @<Cases of |set_page_int| for |print_cmd_chr|@>=
-if (chr_code==2) print_esc("interactionmode");
+@ @<Cases of |set_page_int| for |print_cmd_chr|@>=;
+else if (chr_code==2) print_esc("interactionmode")
-@ @<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>=
-if (m==2) cur_val=interaction;
+@ @<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>=;
+else if (m==2) cur_val=interaction
@ @<Declare \eTeX\ procedures for use...@>=
static void new_interaction(void);
-@ @<Cases for |alter_integer|@>=
-if (c==2)
+@ @<Cases for |alter_integer|@>=;
+else if (c==2)
{@+if ((cur_val < batch_mode)||(cur_val > error_stop_mode))
{@+print_err("Bad interaction mode");
@.Bad interaction mode@>
@@ -27263,8 +27252,8 @@ delimiters to appear between \.{\\left} and \.{\\right}.
primitive("middle", left_right, middle_noad);
@!@:middle\_}{\.{\\middle} primitive@>
-@ @<Cases of |left_right| for |print_cmd_chr|@>=
-if (chr_code==middle_noad) print_esc("middle");
+@ @<Cases of |left_right| for |print_cmd_chr|@>=;
+else if (chr_code==middle_noad) print_esc("middle")
@ The |scan_tokens| feature of \eTeX\ defines the \.{\\scantokens}
primitive.
@@ -27273,11 +27262,11 @@ primitive.
primitive("scantokens", input, 2);
@!@:scan\_tokens\_}{\.{\\scantokens} primitive@>
-@ @<Cases of |input| for |print_cmd_chr|@>=
-if (chr_code==2) print_esc("scantokens");
+@ @<Cases of |input| for |print_cmd_chr|@>=;
+else if (chr_code==2) print_esc("scantokens")
-@ @<Cases for |input|@>=
-if (cur_chr==2) pseudo_start();
+@ @<Cases for |input|@>=;
+else if (cur_chr==2) pseudo_start()
@ The global variable |pseudo_files| is used to maintain a stack of
pseudo files. The |info| field of each pseudo file points to a linked
@@ -27403,8 +27392,8 @@ while (pseudo_files!=null) pseudo_close(); /*flush pseudo files*/
primitive("readline", read_to_cs, 1);@/
@!@:read\_line\_}{\.{\\readline} primitive@>
-@ @<Cases of |read| for |print_cmd_chr|@>=
-print_esc("readline");
+@ @<Cases of |read| for |print_cmd_chr|@>=;
+else print_esc("readline")
@ @<Handle \.{\\readline} and |goto done|@>=
if (j==1)
@@ -27479,9 +27468,9 @@ preceding the mandatory \.{\\endcsname} have been expanded).
@<Cases for |conditional|@>=
case if_cs_code: {@+n=get_avail();p=n; /*head of the list of characters*/
- do {get_x_token();
+ @/do@+{get_x_token();
if (cur_cs==0) store_new_token(cur_tok);
- } while (!(cur_cs!=0));
+ }@+ while (!(cur_cs!=0));
if (cur_cmd!=end_cs_name) @<Complain about missing \.{\\endcsname}@>;
@<Look up the characters of list |n| in the hash table, and set |cur_cs|@>;
flush_list(n);
@@ -27523,8 +27512,8 @@ or during \.{\\write}.
primitive("protected", prefix, 8);
@!@:protected\_}{\.{\\protected} primitive@>
-@ @<Cases of |prefix| for |print_cmd_chr|@>=
-if (chr_code==8) print_esc("protected");
+@ @<Cases of |prefix| for |print_cmd_chr|@>=;
+else if (chr_code==8) print_esc("protected")
@ The |get_x_or_protected| procedure is like |get_x_token| except that
protected macros are not expanded.
@@ -27762,7 +27751,7 @@ resume: if (s==expr_none) o=l;@+else o=int_val;
found: @<Scan the next operator and set |o|@>;
arith_error=b;
@<Make sure that |f| is in the proper range@>;
-switch (s) {@t\4@>@<Cases for evaluation of the current term@>@;
+switch (s) {@<Cases for evaluation of the current term@>@;
} /*there are no other cases*/
if (o > expr_sub) s=o;@+else@<Evaluate the current expression@>;
b=arith_error;
@@ -28423,12 +28412,12 @@ else{@+if (sa_index(q) < mu_val_limit)
else if (sa_ptr(q)!=null) return;
s=pointer_node_size;
}
-do {i=hex_dig4(sa_index(q));p=q;q=link(p);free_node(p, s);
+@/do@+{i=hex_dig4(sa_index(q));p=q;q=link(p);free_node(p, s);
if (q==null) /*the whole tree has been freed*/
{@+sa_root[i]=null;return;
}
delete_sa_ptr;s=index_node_size; /*node |q| is an index node*/
-} while (!(sa_used(q) > 0));
+}@+ while (!(sa_used(q) > 0));
}
@ The |print_sa_num| procedure prints the register number corresponding
@@ -28531,7 +28520,7 @@ if (l < 4) /*|q| is an index node*/
}
else /*|q| is the node for a mark class*/
{@+switch (a) {
- @t\4@>@<Cases for |do_marks|@>@;
+ @<Cases for |do_marks|@>@;
} /*there are no other cases*/
if (sa_bot_mark(q)==null) if (sa_split_bot_mark(q)==null)
{@+free_node(q, mark_class_node_size);q=null;
@@ -28808,7 +28797,7 @@ at by |sa_chain|
@<Declare \eTeX\ procedures for tr...@>=
static void sa_restore(void)
{@+pointer p; /*sparse array element*/
-do {p=sa_loc(sa_chain);
+@/do@+{p=sa_loc(sa_chain);
if (sa_lev(p)==level_one)
{@+if (sa_index(p) >= dimen_val_limit) sa_destroy(sa_chain);
#ifdef @!STAT
@@ -28831,7 +28820,7 @@ delete_sa_ref(p);
p=sa_chain;sa_chain=link(p);
if (sa_index(p) < dimen_val_limit) free_node(p, word_node_size);
else free_node(p, pointer_node_size);
-} while (!(sa_chain==null));
+}@+ while (!(sa_chain==null));
}
@ When reading \.{\\patterns} while \.{\\savinghyphcodes} is positive
@@ -28852,8 +28841,8 @@ hyph_root=0;hyph_start=0;
@ @<Store hyphenation codes for current language@>=
{@+c=cur_lang;first_child=false;p=0;
-do {q=p;p=trie_r[q];
-} while (!((p==0)||(c <= so(trie_c[p]))));
+@/do@+{q=p;p=trie_r[q];
+}@+ while (!((p==0)||(c <= so(trie_c[p]))));
if ((p==0)||(c < so(trie_c[p])))
@<Insert a new trie node between |q| and |p|, and make |p| point to it@>;
q=p; /*now node |q| represents |cur_lang|*/
@@ -28931,9 +28920,9 @@ primitive("pagediscards", un_vbox, last_box_code);@/
primitive("splitdiscards", un_vbox, vsplit_code);@/
@!@:split\_discards\_}{\.{\\splitdiscards} primitive@>
-@ @<Cases of |un_vbox| for |print_cmd_chr|@>=
-if (chr_code==last_box_code) print_esc("pagediscards");
-else if (chr_code==vsplit_code) print_esc("splitdiscards");
+@ @<Cases of |un_vbox| for |print_cmd_chr|@>=;
+else if (chr_code==last_box_code) print_esc("pagediscards");
+else if (chr_code==vsplit_code) print_esc("splitdiscards")
@ @<Handle saved items and |goto done|@>=
{@+link(tail)=disc_ptr[cur_chr];disc_ptr[cur_chr]=null;
@@ -28993,7 +28982,7 @@ expand_depth_count=0;
@* The extended features of \Prote.
\Prote\ extends furthermore \eTeX\ i.e. \eTeX\ is thus required
before adding \Prote\ own extensions. But if \eTeX\ mode has not
-be enabled, the engine is still compatible with \TeX\ with no added
+be enabled, the engine is still compatible with \TeX with no added
primitive commands and with a modification of code---from
\eTeX\ exclusively for now---that is sufficiently minor so that
the engine still deserves the name \TeX.
@@ -29288,7 +29277,7 @@ hash since |no_new_control_sequence| is |true|), but since it has the
for a control sequence entered but never defined.
@ @<Cases for |conditional|@>=
-case if_primitive_code: {@+do get_token(); while (!(cur_tok!=space_token));
+case if_primitive_code: {@+@/do@+{get_token();}@+ while (!(cur_tok!=space_token));
if ((cur_cs!=0)&&(cur_cmd!=undefined_cs)&&(cur_cmd < call)) b=true;else b=false;
} @+break;
@@ -29650,7 +29639,7 @@ dependent. The information shall be set in |xchg_buffer|.
@^system dependencies@>
In this basic implementation, we set the string to the empty one by
-simply setting |xchg_buffer_length| to~$0$.
+simply setting |xchg_buffer_length| to $0$.
@d get_file_mtime xchg_buffer_length=0
@@ -29727,10 +29716,10 @@ case file_dump_code:
{ FILE *f=fopen((char*)name_of_file0,"rb");
if (f!=NULL) {@+
fseek(f,k,SEEK_SET);
- do {i=fgetc(f); if (i==EOF) break;
+ do@+{i=fgetc(f); if (i==EOF) break;
dig[0]=i%16;dig[1]=i/16;
print_the_digs(2);decr(l);
- } while (!(feof(f)||(l==0)));
+ }@+ while (!(feof(f)||(l==0)));
fclose(f);
}
} @+break;
@@ -29830,7 +29819,7 @@ communicate with the routines.
@ To obtain the MD5 hash signature of a file will need an external
implementation, since the algorithm requires bitwise operation that
-standard \PASCAL\ does not provide. So we do not bother to try. The
+standard \PASCAL does not provide. So we do not bother to try. The
present implementation returns nothing.
@^system dependencies@>
@@ -30015,7 +30004,7 @@ else{@+n=(n-1)*mpfract_one;
}
}
-@ The |do {| loop here preserves the following invariant relations
+@ The |@/do@+{| loop here preserves the following invariant relations
between |f|, |p|, and~|q|:
(i)~|0 <= p < q|; (ii)~$fq+p=2^k(q+p_0)$, where $k$ is an integer and
$p_0$ is the original value of~$p$.
@@ -30030,11 +30019,11 @@ in a register, not store it in memory.
@<Compute $f=\lfloor 2^{28}(1+p/q)+{1\over2}\rfloor$@>=
f=1;
-do {be_careful=p-q;p=be_careful+p;
+@/do@+{be_careful=p-q;p=be_careful+p;
if (p >= 0) f=f+f+1;
else{@+double(f);p=p+q;
}
-} while (!(f >= mpfract_one));
+}@+ while (!(f >= mpfract_one));
be_careful=p-q;
if (be_careful+p >= 0) incr(f)
@@ -30057,7 +30046,7 @@ else{@+n=f/mpfract_one;f=f%mpfract_one;
}
}
f=f+mpfract_one;
-@<Compute $p=\lfloor qf/2^{28}+{1\over2}\rfloor-q$@>@;
+@<Compute $p=\lfloor qf/2^{28}+{1\over2}\rfloor-q$@>;
be_careful=n-el_gordo;
if (be_careful+p > 0)
{@+arith_error=true;n=el_gordo-p;
@@ -30082,12 +30071,12 @@ $f_0$ is the original value of~$f$; (ii)~$2^k\L f<2^{k+1}$.
@<Compute $p=\lfloor qf/2^{28}+{1\over2}\rfloor-q$@>=
p=mpfract_half; /*that's $2^{27}$; the invariants hold now with $k=28$*/
if (q < mpfract_four)
- do {if (odd(f)) p=halfp(p+q);@+else p=halfp(p);
+ @/do@+{if (odd(f)) p=halfp(p+q);@+else p=halfp(p);
f=halfp(f);
- } while (!(f==1));
-else do {if (odd(f)) p=p+halfp(q-p);@+else p=halfp(p);
+ }@+ while (!(f==1));
+else@/do@+{if (odd(f)) p=p+halfp(q-p);@+else p=halfp(p);
f=halfp(f);
- } while (!(f==1));
+ }@+ while (!(f==1))
@ There's an auxiliary array |randoms| that contains 55 pseudo-random
fractions. Using the recurrence $x_n=(x_{n-55}-x_{n-31})\bmod 2^{28}$,
@@ -30275,15 +30264,15 @@ can readily be obtained with the ratio method (Algorithm 3.4.1R in
static scaled norm_rand(void)
{@+int @!x, @!u, @!l; /*what the book would call $2^{16}X$, $2^{28}U$,
and $-2^{24}\ln U$*/
-do {
- do {next_random;
+@/do@+{
+ @/do@+{next_random;
x=take_mpfract(112429, randoms[j_random]-mpfract_half);
/*$2^{16}\sqrt{8/e}\approx 112428.82793$*/
next_random;u=randoms[j_random];
- } while (!(abs(x) < u));
+ }@+ while (!(abs(x) < u));
x=make_mpfract(x, u);
l=139548960-m_log(u); /*$2^{24}\cdot12\ln2\approx139548959.6165$*/
-} while (!(ab_vs_cd(1024, l, x, x) >= 0));
+}@+ while (!(ab_vs_cd(1024, l, x, x) >= 0));
return x;
}
@@ -31171,8 +31160,8 @@ if (option_no_empty_page &&
((eject && penalty(p)>2*(eject_penalty)) ||
(page_contents==empty && !is_visible(p))))
{ pointer r, prev_r = p;
- loop@+{
- r =link(prev_r);
+ while (true)
+ { r =link(prev_r);
if (r==null) return;
else if (is_visible(r)) break;
else if (type(r)==penalty_node && penalty(r)<=eject_penalty)
@@ -32017,14 +32006,15 @@ static pointer new_setpage_node(uint8_t i, str_number n)
for (p=link(prev_p); p!=null; prev_p=p,p=link(p))
if (setpage_id(p)==i) break;
if (p==null)
- @<Allocate a new |setpage_node| |p|@>@;
+ @<allocate a new |setpage_node| |p|@>@;
else
link(prev_p)=link(p);
link(p)=link(setpage_head);
link(setpage_head)=p;
return p;
}
-@ @<Allocate a new |setpage_node| |p|@>=
+@
+@<allocate a new |setpage_node| |p|@>=
{ p=get_node(setpage_node_size);type(p)=whatsit_node;subtype(p)=setpage_node;
setpage_number(p)=max_ref[page_kind]=++max_page;
setpage_id(p)=i;
@@ -32111,7 +32101,7 @@ static void hint_open(void)
output_file_name=make_name_string();
DBG(DBGBASIC,"Output file %s opened\n",(char *)name_of_file+1);
}
-@#
+
#define HITEX_VERSION "1.1"
static void hput_definitions();
extern int option_global;
@@ -32326,7 +32316,7 @@ but we will need it repeatedly in the function |hdef_param_node| and the overhea
not warrant having the mapping in both directions.
@<Hi\TeX\ variables@>=
-static const int hmap_int[] ={@t\1\1@>@/
+static const int hmap_int[] ={@/
pretolerance_no, /* |pretolerance_code| 0 */
tolerance_no, /* |tolerance_code| 1 */
line_penalty_no, /* |line_penalty_code| 2 */
@@ -32369,7 +32359,7 @@ year_no, /* |year_code| 23 */
-1, /* |output_penalty_code| 39 */
-1, /* |max_dead_cycles_code| 40 */
hang_after_no, /* |hang_after_code| 41*/
-@t\2\2@> floating_penalty_no /* |floating_penalty_code| 42*/
+floating_penalty_no /* |floating_penalty_code| 42*/
};
@@ -32381,7 +32371,7 @@ hang_after_no, /* |hang_after_code| 41*/
if ( hmap_int[i]>=0) int_defined[hmap_int[i]]=int_par(i);
max_ref[int_kind]=MAX_INT_DEFAULT;
@ The function |hget_int_no| tries to allocate a predefined integer number;
-if not successful, it returns~$-1$.
+if not successful, it returns $-1$.
@<Hi\TeX\ auxiliary routines@>=
static int hget_int_no(int32_t n)
@@ -32424,7 +32414,7 @@ We proceed as we did for integers, starting with the array that holds the define
@<Hi\TeX\ variables@>=
static scaled dimen_defined[0x100]={0};
@ @<Hi\TeX\ variables@>=
-static const int hmap_dimen[] ={@t\1\1@>@/
+static const int hmap_dimen[] ={@/
-1, /* |par_indent_code| 0 */
-1, /* |math_surround_code| 1 */
line_skip_limit_no, /* |line_skip_limit_code| 2 */
@@ -32445,7 +32435,7 @@ static const int hmap_dimen[] ={@t\1\1@>@/
hang_indent_no, /* |hang_indent_code| 17 */
-1, /* |h_offset_code| 18 */
-1, /* |v_offset_code| 19 */
- @t\2\2@> emergency_stretch_no /* |emergency_stretch_code| 20 */
+ emergency_stretch_no /* |emergency_stretch_code| 20 */
};
@ @<Fix definitions for dimension parameters@>=
dimen_defined[zero_dimen_no]=0;
@@ -32551,7 +32541,8 @@ glue specifications and often a simple comparison of pointers might suffice.
@<Hi\TeX\ variables@>=
static pointer glue_defined[0x100];
@ @<Hi\TeX\ variables@>=
-static int hmap_glue[] ={@t\1\1@>@/
+static int hmap_glue[] ={
+
line_skip_no, /* |line_skip_code| 0 */
baseline_skip_no, /* |baseline_skip_code| 1 */
-1, /* |par_skip_code| 2 */
@@ -32566,7 +32557,7 @@ split_top_skip_no, /* |split_top_skip_code| 10 */
tab_skip_no, /* |tab_skip_code| 11 */
-1, /* |space_skip_code| 12 */
-1, /* |xspace_skip_code| 13 */
-@t\2\2@> par_fill_skip_no /* |par_fill_skip_code| 14 */
+par_fill_skip_no /* |par_fill_skip_code| 14 */
};
@ @<Fix definitions for glue parameters@>=
glue_defined[zero_skip_no]=zero_glue; incr(glue_ref_count(zero_glue));
@@ -32818,8 +32809,8 @@ static bool node_equal(pointer p, pointer q)
}
static bool list_equal(pointer p, pointer q)
-{@+loop@+{
- if (p==q) return true;
+{@+while (true)
+ { if (p==q) return true;
if (p==null || q==null) return false;
if (!node_equal(p,q)) return false;
p=link(p);q=link(q);
@@ -34397,7 +34388,7 @@ static const char *option_mfmode="ljfour", *option_dpi_str="600";
extern int option_compress;
extern unsigned int debugflags;
-static struct option long_options[] = {@t\1\1@>@/
+static struct option long_options[] = {@/
{ "help", 0, 0, 0 },@/
{ "version", 0, 0, 0 },@/
{ "interaction", 1, 0, 0 },@/
@@ -34428,8 +34419,8 @@ static struct option long_options[] = {@t\1\1@>@/
{ "hint-debug", 1, 0, 0 },@/
{ "hint-debug-help", 0, 0, 0 },@/
#endif
-@t\2\2@> { 0, 0, 0, 0 } @/
-};
+ { 0, 0, 0, 0 }@+}@+;
+
@ Parsing the command line options is accomplished with the
|parse_options| function which in turn uses the |getopt_long_only|
@@ -34438,7 +34429,7 @@ function from the \CEE/ library. This function returns 0 and sets the
the end of all options is reached.
@<\TeX\ Live functions@>=
static void parse_options (int argc, char *argv[])
-{@+ loop @+ {
+{@+ while (true) {
int option_index;
int g = getopt_long_only (argc, argv, "+", long_options, &option_index);
if (g==0)
@@ -34488,7 +34479,7 @@ the option structure.
#include <kpathsea/kpathsea.h>
static int argument_is(struct option *opt, char * s)
{@+ return STREQ(opt->name, s); @+}
-#define ARGUMENT_IS(S) @[argument_is(long_options+option_index,S)@]
+#define ARGUMENT_IS(S) argument_is(long_options+option_index,S)
@ Now we can handle the first two options:
@@ -35111,7 +35102,7 @@ last=first;
while (optind < argc) input_add_str(argv[optind++]);
loc=first;
return (loc < last);
-}
+@+ }
@ @<Forward declarations@>=
static int input_command_line(void);
@@ -35169,9 +35160,8 @@ static bool b_open_out(byte_file *f) /*open a binary file for output*/
{@+f->f=open_out((char *)name_of_file+1,"wb");
return f->f!=NULL && ferror(f->f)==0;@+
}
-@#
+
#ifdef @!INIT
-@+@t}\6\4\4{@>
static bool w_open_out(word_file *f) /*open a word file for output*/
{@+f->f=open_out((char *)name_of_file+1,"wb");
return f->f!=NULL && ferror(f->f)==0;@+
@@ -35359,8 +35349,6 @@ static int get_md5_sum(int s, int file);
@ The code that follows was taken from the \.{texmfmp.c} file of
the \TeX\ Live distribution and slightly modified.
-@s md5_byte_t int
-@s md5_state_t int
@<\TeX\ Live auxiliary functions@>=
@@ -35419,17 +35407,17 @@ make_time_str(time_t t, bool utc)
static void get_creation_date(void)
{ make_time_str(start_time,source_date_epoch!=NULL);
}
-@#
-#ifdef WIN32
+
/* static structure for file status set by |find_input_file| */
-@+@t}\6{@>
+#ifdef WIN32
static struct _stat file_stat;
-#define GET_FILE_STAT @[_stat(fname,&file_stat)@]
+#define GET_FILE_STAT _stat(fname,&file_stat)
#else
static struct stat file_stat;
-#define GET_FILE_STAT @[stat(fname,&file_stat)@]
+#define GET_FILE_STAT stat(fname,&file_stat)
#endif
+
static char* find_input_file(void)
{ char *fname;
int r;
diff --git a/Build/source/texk/web2c/luatexdir/luaffi/README b/Build/source/texk/web2c/luatexdir/luaffi/README
index bff350f6f64..745ed379b96 100644
--- a/Build/source/texk/web2c/luatexdir/luaffi/README
+++ b/Build/source/texk/web2c/luatexdir/luaffi/README
@@ -12,7 +12,7 @@ The ffi module is available for:
The ARM processor is currently not supported. There are subtle
differences between this module and the one in luajitTeX
-and we hope to be in sync around TeXLive 2018.
+and we hope to be in sync around TeXLive 2025.
Different OS can have different interfaces,
for instance OS_WIN has not 'complex.h'. If you want portable
code, stick to the most common concepts.
diff --git a/Build/source/texk/web2c/luatexdir/luaffi/ffi.c b/Build/source/texk/web2c/luatexdir/luaffi/ffi.c
index 6d3c197e48e..cbd57c260ea 100644
--- a/Build/source/texk/web2c/luatexdir/luaffi/ffi.c
+++ b/Build/source/texk/web2c/luatexdir/luaffi/ffi.c
@@ -3576,7 +3576,7 @@ int luaopen_ffi(lua_State *L)
"\n"
"The ARM processor is currently not supported. There are subtle\n"
"differences between this module and the one in luajitTeX \n"
-"and we hope to be in sync around TeXLive 2022.\n"
+"and we hope to be in sync around TeXLive 2025.\n"
"Different OS can have different interfaces,\n"
"for instance OS_WIN has not 'complex.h'. If you want portable\n"
"code, stick to the most common concepts.\n"
diff --git a/Build/source/texk/web2c/man/ChangeLog b/Build/source/texk/web2c/man/ChangeLog
index f82821f1847..b047bb6abf4 100644
--- a/Build/source/texk/web2c/man/ChangeLog
+++ b/Build/source/texk/web2c/man/ChangeLog
@@ -1,3 +1,7 @@
+2024-08-12 Andreas Scherer <https://ascherer.github.io>
+
+ * ctwill.man: CWEB 4.12 release.
+
2024-04-14 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
* Makefile.am: Remove eptex.
diff --git a/Build/source/texk/web2c/man/ctwill.man b/Build/source/texk/web2c/man/ctwill.man
index 50437193073..a30dcd6a0be 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
.\"
-.TH "CTWILL" "1" "March 10, 2024" "Web2c @VERSION@" "General Commands Manual"
+.TH "CTWILL" "1" "August 12, 2024" "Web2c @VERSION@" "General Commands Manual"
.SH NAME
ctwill, ctwill-proofsort, ctwill-refsort, ctwill-twinx \- translate CWEB to TeX with
mini-indexes
@@ -122,7 +122,7 @@ The present incarnation of \f[B]ctwill\f[R] and its utilities tries hard
to be a drop-in replacement for the original package.
There are, however, a few differences worth noting:
.IP \[bu] 2
-This version is based on the most recent version of CWEB (4.11).
+This version is based on the most recent version of CWEB (4.12).
.IP \[bu] 2
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.
diff --git a/Build/source/texk/web2c/pdftexdir/ChangeLog b/Build/source/texk/web2c/pdftexdir/ChangeLog
index 9fcf5a277d2..ee5e17bb9f3 100644
--- a/Build/source/texk/web2c/pdftexdir/ChangeLog
+++ b/Build/source/texk/web2c/pdftexdir/ChangeLog
@@ -1,3 +1,11 @@
+2024-08-04 Thanh Han The <hanthethanh@gmail.com>
+
+ * pdftoepdf.cc (write_epdf): reversed sep and pdfkeyprefix.
+
+2024-07-26 Andreas Scherer <https://ascherer.github.io>
+
+ * pdftex.ch: Prepare for compilation with gcc-14.
+
2024-05-24 Thanh Han The <hanthethanh@gmail.com>
* pdftex.web (pdf_ptex_use_underscore_code),
@@ -5,7 +13,7 @@
(Put each ...): define it.
(print_param): print it.
(get_ptex_use_underscore): new fn to implement it.
- (pdf_print_info): adjust Fullbanner prefix character.
+ (pdf_print_info): adjust Fullbanner prefix character.
* pdftoepdf.cc (getptexuseunderscore): declare fn.
(write_epdf): use it for FileName, PageNumber, InfoDict.
diff --git a/Build/source/texk/web2c/pdftexdir/pdftex.ch b/Build/source/texk/web2c/pdftexdir/pdftex.ch
index 0607f7f2f1f..a30a74c3376 100644
--- a/Build/source/texk/web2c/pdftexdir/pdftex.ch
+++ b/Build/source/texk/web2c/pdftexdir/pdftex.ch
@@ -179,7 +179,7 @@ pdf_font_type:=xmalloc_array(eight_bits, font_max);
pdf_font_attr:=xmalloc_array(str_number, font_max);
pdf_font_blink:=xmalloc_array(internal_font_number, font_max);
pdf_font_elink:=xmalloc_array(internal_font_number, font_max);
-pdf_font_has_space_char:=xmalloc_array(internal_font_number, font_max);
+pdf_font_has_space_char:=xmalloc_array(boolean, font_max);
pdf_font_stretch:=xmalloc_array(integer, font_max);
pdf_font_shrink:=xmalloc_array(integer, font_max);
pdf_font_step:=xmalloc_array(integer, font_max);
@@ -298,7 +298,7 @@ pdf_font_type:=xmalloc_array(eight_bits,font_max);
pdf_font_attr:=xmalloc_array(str_number,font_max);
pdf_font_blink:=xmalloc_array(internal_font_number,font_max);
pdf_font_elink:=xmalloc_array(internal_font_number,font_max);
-pdf_font_has_space_char:=xmalloc_array(internal_font_number,font_max);
+pdf_font_has_space_char:=xmalloc_array(boolean,font_max);
pdf_font_stretch:=xmalloc_array(integer,font_max);
pdf_font_shrink:=xmalloc_array(integer,font_max);
pdf_font_step:=xmalloc_array(integer,font_max);
diff --git a/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc b/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc
index 238ed4dba5d..237bd6530c4 100644
--- a/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc
+++ b/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc
@@ -846,18 +846,18 @@ void write_epdf(void)
// write additional information
if ((suppress_ptex_info & MASK_SUPPRESS_PTEX_FILENAME) == 0) {
- pdf_printf("/%s%sFileName (%s)\n", sep, pdfkeyprefix,
+ pdf_printf("/%s%sFileName (%s)\n", pdfkeyprefix, sep,
convertStringToPDFString(pdf_doc->file_name,
strlen(pdf_doc->file_name)));
}
if ((suppress_ptex_info & MASK_SUPPRESS_PTEX_PAGENUMBER) == 0) {
- pdf_printf("/%s%sPageNumber %i\n", sep, pdfkeyprefix, (int) epdf_selected_page);
+ pdf_printf("/%s%sPageNumber %i\n", pdfkeyprefix, sep, (int) epdf_selected_page);
}
if ((suppress_ptex_info & MASK_SUPPRESS_PTEX_INFODICT) == 0) {
pdf_doc->doc->getDocInfoNF(&info);
if (info.isRef()) {
// the info dict must be indirect (PDF Ref p. 61)
- pdf_printf("/%s%sInfoDict ", sep, pdfkeyprefix);
+ pdf_printf("/%s%sInfoDict ", pdfkeyprefix, sep);
pdf_printf("%d 0 R\n", addOther(info.getRef()));
}
}
diff --git a/Build/source/texk/web2c/pktogf.ch b/Build/source/texk/web2c/pktogf.ch
index bd468f2a9de..1dc768e46e0 100644
--- a/Build/source/texk/web2c/pktogf.ch
+++ b/Build/source/texk/web2c/pktogf.ch
@@ -79,7 +79,7 @@ begin
@<Labels...@>=final_end;
@y
@ This module is deleted, because it is only useful for
-a non-local goto, which we don't use in C.
+a non-local |goto|\unskip, which we don't use in C.
@z
% [6] Remove terminal_line_length, since there is no dialog, and
diff --git a/Build/source/texk/web2c/pktype.ch b/Build/source/texk/web2c/pktype.ch
index b5e64566529..df785ce8b26 100644
--- a/Build/source/texk/web2c/pktype.ch
+++ b/Build/source/texk/web2c/pktype.ch
@@ -65,7 +65,7 @@ begin
@<Labels...@>=final_end;
@y
@ This module is deleted, because it is only useful for
-a non-local |goto|, which we don't use in C.
+a non-local |goto|\unskip, which we don't use in C.
@z
% [6] No need for |name_length| or |terminal_line_length|. Since these
@@ -89,7 +89,7 @@ to the very end of the program with an error message.
begin goto final_end;
end;
@y
-@ We use a call to the external C exit to avoid a non-local |goto|.
+@ We use a call to the external C exit to avoid a non-local |goto|\unskip.
@d abort(#)==begin print_ln(#); uexit(1) end
diff --git a/Build/source/texk/web2c/showstream.ch b/Build/source/texk/web2c/showstream.ch
index d0347a795c4..17a6a70e401 100644
--- a/Build/source/texk/web2c/showstream.ch
+++ b/Build/source/texk/web2c/showstream.ch
@@ -72,7 +72,7 @@ show_lists_code: begin begin_diagnostic; show_activities;
end;
@y
show_lists_code:
- begin @<Adjust |selector| based on |show_stream|@>
+ begin @<Adjust |selector| based on |show_stream|@>@;
begin_diagnostic; show_activities;
end;
@z
@@ -132,13 +132,9 @@ While the other cases have separate blocks
@ @<Show the current meaning of a token...@>=
begin get_token;
@y
-@ @<Adjust |selector| based on |show_stream|@>=
-if (show_stream>=0) and (show_stream<no_print) and write_open[show_stream] then
- selector:=show_stream;
-
@ @<Show the current meaning of a token...@>=
begin get_token;
- @<Adjust |selector| based on |show_stream|@>
+ @<Adjust |selector| based on |show_stream|@>@;
@z
@x
@@ -147,7 +143,7 @@ begin scan_register_num; fetch_box(p); begin_diagnostic;
@y
@ @<Show the current contents of a box@>=
begin scan_register_num; fetch_box(p);
-@<Adjust |selector| based on |show_stream|@>
+@<Adjust |selector| based on |show_stream|@>@;
begin_diagnostic;
@z
@@ -157,19 +153,29 @@ begin p:=the_toks;
@y
@ @<Show the current value of some parameter...@>=
begin p:=the_toks;
-@<Adjust |selector| based on |show_stream|@>
+@<Adjust |selector| based on |show_stream|@>@;
@z
@x
show_groups: begin begin_diagnostic; show_save_groups;
@y
-show_groups: begin @<Adjust |selector| based on |show_stream|@>
+show_groups: begin @<Adjust |selector| based on |show_stream|@>@;
begin_diagnostic; show_save_groups;
@z
@x
show_ifs: begin begin_diagnostic; print_nl(""); print_ln;
@y
-show_ifs: begin @<Adjust |selector| based on |show_stream|@>
+show_ifs: begin @<Adjust |selector| based on |show_stream|@>@;
begin_diagnostic; print_nl(""); print_ln;
@z
+
+@x
+@* \[55] Index.
+@y
+@ @<Adjust |selector| based on |show_stream|@>=
+if (show_stream>=0) and (show_stream<no_print) and write_open[show_stream] then
+ selector:=show_stream;
+
+@* \[55] Index.
+@z
diff --git a/Build/source/texk/web2c/weav-twill.ch b/Build/source/texk/web2c/weav-twill.ch
index 17c02718758..0c556a098ba 100644
--- a/Build/source/texk/web2c/weav-twill.ch
+++ b/Build/source/texk/web2c/weav-twill.ch
@@ -51,9 +51,11 @@ Limbo.
\def\title{TWILL for \TeX~Live}
@z
-@x 48c24
+@x 47c23
+ \def\rheader{\mainfont Appendix D\hfil \contentspagenumber}
\centerline{\titlefont The {\ttitlefont WEAVE} processor}
@y
+ \def\rheader{\mainfont Appendix D${}'$\hfil \contentspagenumber}
\centerline{\titlefont The {\ttitlefont TWILL} processor}
@z