texlive[71449] Build/source/texk/web2c: [CWEB] Add [part.section]

commits+ascherer at tug.org commits+ascherer at tug.org
Thu Jun 6 16:53:56 CEST 2024


Revision: 71449
          https://tug.org/svn/texlive?view=revision&revision=71449
Author:   ascherer
Date:     2024-06-06 16:53:56 +0200 (Thu, 06 Jun 2024)
Log Message:
-----------
[CWEB] Add [part.section] l.ine information.

Apply some OO/C++ knowledge from the late nineties.

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/cwebdir/ChangeLog
    trunk/Build/source/texk/web2c/cwebdir/comm-w2c.ch
    trunk/Build/source/texk/web2c/cwebdir/ctang-w2c.ch
    trunk/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
    trunk/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
    trunk/Build/source/texk/web2c/tests/fix-changefile-lines.py

Modified: trunk/Build/source/texk/web2c/cwebdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ChangeLog	2024-06-06 07:50:27 UTC (rev 71448)
+++ trunk/Build/source/texk/web2c/cwebdir/ChangeLog	2024-06-06 14:53:56 UTC (rev 71449)
@@ -1,3 +1,10 @@
+2024-06-06  Andreas Scherer  <https://ascherer.github.io>
+
+	* comm-w2c.ch,
+	* ctang-w2c.ch,
+	* ctwill-w2c.ch,
+	* cweav-w2c.ch: Add [part.section] l.ine information.
+
 2024-05-25  Andreas Scherer  <https://ascherer.github.io>
 
 	* cwebacromac.tex: HiTeX has a three-page table-of-contents.

Modified: trunk/Build/source/texk/web2c/cwebdir/comm-w2c.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/comm-w2c.ch	2024-06-06 07:50:27 UTC (rev 71448)
+++ trunk/Build/source/texk/web2c/cwebdir/comm-w2c.ch	2024-06-06 14:53:56 UTC (rev 71449)
@@ -16,7 +16,7 @@
 
 @q Please send comments, suggestions, etc. to tex-k@@tug.org.            @>
 
- at x
+ at x [0.0] l.25
 \def\title{Common code for CTANGLE and CWEAVE (Version 4.11)}
 @y
 \def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}} \ifacro\sanitizecommand\Kpathsea{KPATHSEA}\fi
@@ -23,25 +23,25 @@
 \def\title{Common code for CTANGLE and CWEAVE (4.11 [\TeX~Live])}
 @z
 
- at x
+ at x [0.0] l.30
   \centerline{(Version 4.11)}
 @y
   \centerline{(Version 4.11 [\TeX~Live])}
 @z
 
- at x
+ at x [0.0] l.32
 \def\botofcontents{\vfill
 @y
 \def\covernote{\vbox{%
 @z
 
- at x
+ at x [0.0] l.45
 }
 @y
 }}\datecontentspage
 @z
 
- at x
+ at x [1.1] l.51
 to both \.{CTANGLE} and \.{CWEAVE}, which roughly concerns the following
 @y
 to \.{CTANGLE}, \.{CWEAVE}, and \.{CTWILL},
@@ -48,31 +48,31 @@
 which roughly concerns the following
 @z
 
- at x
+ at x [1.1] l.57
 sometimes use \.{CWEB} to refer to either of the two component
 @y
 sometimes use \.{CWEB} to refer to any of the three component
 @z
 
- at x
+ at x [1.2] l.72
 @i common.h
 @y
 @i comm-w2c.h
 @z
 
- at x
+ at x [1.18] l.77
 |program|.
 @y
 |program|. And \.{CTWILL} adds some extra twists.
 @z
 
- at x
+ at x [1.18] l.80
 boolean program; /* \.{CWEAVE} or \.{CTANGLE}? */
 @y
 cweb program; /* \.{CTANGLE} or \.{CWEAVE} or \.{CTWILL}? */
 @z
 
- at x
+ at x [1.20] l.99
   @<Initialize pointers@>@;
 @y
   @<Initialize pointers@>@;
@@ -79,7 +79,7 @@
   @<Set up \.{PROGNAME} feature and initialize the search path mechanism@>@;
 @z
 
- at x
+ at x [1.20] l.100
   @<Set the default options common to \.{CTANGLE} and \.{CWEAVE}@>@;
 @y
   @<Set locale and bind language catalogs@>@;
@@ -86,73 +86,73 @@
   @<Set the default options common to \.{CTANGLE} and \.{CWEAVE}@>@;
 @z
 
- at x
+ at x [3.23] l.165
     if ((*(k++) = c) != ' ') limit = k;
 @y
     if ((*(k++) = c) != ' ' && c != '\r') limit = k;
 @z
 
- at x
+ at x [3.23] l.168
     loc=buffer; err_print("! Input line too long");
 @y
     loc=buffer; err_print(_("! Input line too long"));
 @z
 
- at x
+ at x [4.25] l.197
 static char alt_web_file_name[max_file_name_length]; /* alternate name to try */
 @y
 char *found_filename; /* filename found by |kpse_find_file| */
 @z
 
- at x
+ at x [4.29] l.253
     err_print("! Missing @@x in change file");
 @y
     err_print(_("! Missing @@x in change file"));
 @z
 
- at x
+ at x [4.30] l.264
     err_print("! Change file ended after @@x");
 @y
     err_print(_("! Change file ended after @@x"));
 @z
 
- at x
+ at x [4.32] l.310
       err_print("! Change file ended before @@y");
 @y
       err_print(_("! Change file ended before @@y"));
 @z
 
- at x
+ at x [4.32] l.324
         err_print("! CWEB file ended during a change");
 @y
         err_print(_("! CWEB file ended during a change"));
 @z
 
- at x
+ at x [4.34] l.338
   loc=buffer+2; err_print("! Where is the matching @@y?");
 @y
   loc=buffer+2; err_print(_("! Where is the matching @@y?"));
 @z
 
- at x
+ at x [4.34] l.345
     err_print("of the preceding lines failed to match");
 @y
     err_print(_("of the preceding lines failed to match"));
 @z
 
- at x
+ at x [4.35] l.378
       err_print("! Include file name not given");
 @y
       err_print(_("! Include file name not given"));
 @z
 
- at x
+ at x [4.35] l.383
       err_print("! Too many nested includes");
 @y
       err_print(_("! Too many nested includes"));
 @z
 
- at x
+ at x [4.36] l.393
 @ When an \.{@@i} line is found in the |cur_file|, we must temporarily
 stop reading it and start reading from the named include file.  The
 \.{@@i} line should give a complete file name with or without
@@ -174,13 +174,13 @@
 @^system dependencies@>
 @z
 
- at x
+ at x [4.36] l.405
         err_print("! Include file name too long"); goto restart;}
 @y
         err_print(_("! Include file name too long")); goto restart;}
 @z
 
- at x
+ at x [4.36] l.408
   char temp_file_name[max_file_name_length];
   char *cur_file_name_end=cur_file_name+max_file_name_length-1;
   char *kk, *k=cur_file_name;
@@ -190,7 +190,7 @@
   char *k=cur_file_name;
 @z
 
- at x
+ at x [4.36] l.422
   if ((cur_file=fopen(cur_file_name,"r"))!=NULL) {
 @y
   if ((found_filename=kpse_find_cweb(cur_file_name))!=NULL @|
@@ -204,7 +204,7 @@
     } else fatal(_("! Filename too long\n"), found_filename);
 @z
 
- at x
+ at x [4.36] l.426
   if ((kk=getenv("CWEBINPUTS"))!=NULL) {
     if ((l=strlen(kk))>max_file_name_length-2) too_long();
     strcpy(temp_file_name,kk);
@@ -234,25 +234,25 @@
   include_depth--; err_print(_("! Cannot open include file")); goto restart;
 @z
 
- at x
+ at x [4.38] l.473
     err_print("! Change file ended without @@z");
 @y
     err_print(_("! Change file ended without @@z"));
 @z
 
- at x
+ at x [4.38] l.489
         err_print("! Where is the matching @@z?");
 @y
         err_print(_("! Where is the matching @@z?"));
 @z
 
- at x
+ at x [4.39] l.509
     err_print("! Change file entry did not match");
 @y
     err_print(_("! Change file entry did not match"));
 @z
 
- at x
+ at x [4.41] l.534
 if ((web_file=fopen(web_file_name,"r"))==NULL) {
   strcpy(web_file_name,alt_web_file_name);
   if ((web_file=fopen(web_file_name,"r"))==NULL)
@@ -271,7 +271,7 @@
 } else fatal(_("! Filename too long\n"), found_filename);
 @z
 
- at x
+ at x [4.41] l.542
 if ((change_file=fopen(change_file_name,"r"))==NULL)
        fatal("! Cannot open change file ", change_file_name);
 @y
@@ -287,13 +287,13 @@
 } else fatal(_("! Filename too long\n"), found_filename);
 @z
 
- at x
+ at x [5.46] l.619
 @d hash_size 353 /* should be prime */
 @y
 @d hash_size 8501 /* should be prime */
 @z
 
- at x
+ at x [5.51] l.673
   if (byte_ptr+l>byte_mem_end) overflow("byte memory");
   if (name_ptr>=name_dir_end) overflow("name");
 @y
@@ -301,13 +301,13 @@
   if (name_ptr>=name_dir_end) overflow(_("name"));
 @z
 
- at x
+ at x [5.51] l.677
   if (program==cweave) p->ilk=t, init_node(p);
 @y
   if (program!=ctangle) p->ilk=t, init_node(p);
 @z
 
- at x
+ at x [5.57] l.806
   if (s+name_len>byte_mem_end) overflow("byte memory");
   if (name_ptr+1>=name_dir_end) overflow("name");
 @y
@@ -315,55 +315,55 @@
   if (name_ptr+1>=name_dir_end) overflow(_("name"));
 @z
 
- at x
+ at x [5.58] l.833
   if (name_ptr>=name_dir_end) overflow("name");
 @y
   if (name_ptr>=name_dir_end) overflow(_("name"));
 @z
 
- at x
+ at x [5.58] l.838
   if (s+name_len>byte_mem_end) overflow("byte memory");
 @y
   if (s+name_len>byte_mem_end) overflow(_("byte memory"));
 @z
 
- at x
+ at x [5.60] l.883
       printf("%s","\n! Ambiguous prefix: matches <");
 @y
       printf("%s",_("\n! Ambiguous prefix: matches <"));
 @z
 
- at x
+ at x [5.60] l.886
       printf("%s",">\n and <");
 @y
       printf("%s",_(">\n and <"));
 @z
 
- at x
+ at x [5.62] l.912
       printf("%s","\n! New name is a prefix of <");
 @y
       printf("%s",_("\n! New name is a prefix of <"));
 @z
 
- at x
+ at x [5.62] l.924
       printf("%s","\n! New name extends <");
 @y
       printf("%s",_("\n! New name extends <"));
 @z
 
- at x
+ at x [5.62] l.930
     printf("%s","\n! Section name incompatible with <");
 @y
     printf("%s",_("\n! Section name incompatible with <"));
 @z
 
- at x
+ at x [5.62] l.933
     printf("%s",">,\n which abbreviates <");
 @y
     printf("%s",_(">,\n which abbreviates <"));
 @z
 
- at x
+ at x [6.67] l.1031
   printf(". (l. %d of change file)\n", change_line);
 else if (cur_line>0) {
   if (include_depth==0) printf(". (l. %d)\n", cur_line);
@@ -375,7 +375,7 @@
   else printf(_(". (l. %d of include file %s)\n"), cur_line, cur_file_name);
 @z
 
- at x
+ at x [6.68] l.1057
 Some implementations may wish to pass the |history| value to the
 operating system so that it can be used to govern whether or not other
 programs are started. Here, for instance, we pass the operating system
@@ -397,7 +397,7 @@
 @d RETURN_FAIL  20 /* Complete or severe failure */
 @z
 
- at x
+ at x [6.68] l.1068
   @<Print the job |history|@>@;
 @y
   @<Print the job |history|@>@;
@@ -404,7 +404,7 @@
   @<Remove the temporary file if not already done@>@;
 @z
 
- at x
+ at x [6.68] l.1069
   if (history > harmless_message) return EXIT_FAILURE;
   else return EXIT_SUCCESS;
 @y
@@ -416,7 +416,7 @@
   }
 @z
 
- at x
+ at x [6.69] l.1075
 case spotless:
   if (show_happiness) puts("(No errors were found.)"); break;
 case harmless_message:
@@ -436,13 +436,13 @@
   puts(_("(That was a fatal error, my friend.)"));
 @z
 
- at x
+ at x [6.71] l.1106
   printf("\n! Sorry, %s capacity exceeded",t); fatal("","");
 @y
   printf(_("\n! Sorry, %s capacity exceeded"),t); fatal("","");
 @z
 
- at x
+ at x [7.73] l.1118
 or flags to be turned on (beginning with |"+"|).
 @y
 or flags to be turned on (beginning with |"+"|).
@@ -450,7 +450,7 @@
 see section |@<Handle flag arg...@>| for details.
 @z
 
- at x
+ at x [7.73] l.1130
 char scn_file_name[max_file_name_length]; /* name of |scn_file| */
 @y
 char scn_file_name[max_file_name_length]; /* name of |scn_file| */
@@ -457,13 +457,13 @@
 char check_file_name[max_file_name_length]; /* name of |check_file| */
 @z
 
- at x
+ at x [7.74] l.1138
 show_banner=show_happiness=show_progress=make_xrefs=true;
 @y
 make_xrefs=true;
 @z
 
- at x
+ at x [7.75] l.1142
 file.  It may have an extension, or it may omit the extension to get |".w"| or
 |".web"| added.  The \TEX/ output file name is formed by replacing the \.{CWEB}
 @y
@@ -471,7 +471,7 @@
 added.  The \TEX/ output file name is formed by replacing the \.{CWEB}
 @z
 
- at x
+ at x [7.75] l.1149
 An omitted change file argument means that |"/dev/null"| should be used,
 when no changes are desired.
 @y
@@ -480,7 +480,7 @@
 |_DEV_NULL| (Amiga)---should be used, when no changes are desired.
 @z
 
- at x
+ at x [7.75] l.1165
   strcpy(change_file_name,"/dev/null");
 @y
   strcpy(change_file_name,"/dev/null");
@@ -494,7 +494,7 @@
 @^system dependencies@>
 @z
 
- at x
+ at x [7.75] l.1171
         if (*s=='.') dot_pos=s++;
         else if (*s=='/') dot_pos=NULL,name_pos=++s;
         else s++;
@@ -506,7 +506,7 @@
 @^system dependencies@>
 @z
 
- at x
+ at x [7.77] l.1186
 @ We use all of |*argv| for the |web_file_name| if there is a |'.'| in it,
 otherwise we add |".w"|. If this file can't be opened, we prepare an
 |alt_web_file_name| by adding |"web"| after the dot.
@@ -515,12 +515,12 @@
 otherwise we add |".w"|.
 @z
 
- at x
+ at x [7.77] l.1203
   sprintf(alt_web_file_name,"%s.web",*argv);
 @y
 @z
 
- at x
+ at x [7.80] l.1246
 for(dot_pos=*argv+1;*dot_pos>'\0';dot_pos++)
   flags[(eight_bits)*dot_pos]=flag_change;
 @y
@@ -554,7 +554,7 @@
 }
 @z
 
- at x
+ at x [7.81] l.1249
 @ @<Print usage error message and quit@>=
 {
 if (program==ctangle)
@@ -572,13 +572,13 @@
 @.Usage:@>
 @z
 
- at x
+ at x [7.82] l.1261
 @ @<Complain about arg...@>= fatal("! Filename too long\n", *argv);
 @y
 @ @<Complain about arg...@>= fatal(_("! Filename too long\n"), *argv);
 @z
 
- at x
+ at x [8.83] l.1272
 FILE *active_file; /* currently active file for \.{CWEAVE} output */
 @y
 FILE *active_file; /* currently active file for \.{CWEAVE} output */
@@ -585,7 +585,7 @@
 FILE *check_file; /* temporary output file */
 @z
 
- at x
+ at x [8.84] l.1274
 @ @<Scan arguments and open output files@>=
 scan_args();
 if (program==ctangle) {
@@ -613,7 +613,7 @@
 }
 @z
 
- at x
+ at x [9.85] l.1286
 @* Index.
 @y
 @** Extensions to {\tentex CWEB}.  The following sections introduce new or

Modified: trunk/Build/source/texk/web2c/cwebdir/ctang-w2c.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ctang-w2c.ch	2024-06-06 07:50:27 UTC (rev 71448)
+++ trunk/Build/source/texk/web2c/cwebdir/ctang-w2c.ch	2024-06-06 14:53:56 UTC (rev 71449)
@@ -16,31 +16,31 @@
 
 @q Please send comments, suggestions, etc. to tex-k@@tug.org.            @>
 
- at x
+ at x [0.0] l.30
 \def\title{CTANGLE (Version 4.11)}
 @y
 \def\title{CTANGLE (Version 4.11 [\TeX~Live])}
 @z
 
- at x
+ at x [0.0] l.34
   \centerline{(Version 4.11)}
 @y
   \centerline{(Version 4.11 [\TeX~Live])}
 @z
 
- at x
+ at x [0.0] l.36
 \def\botofcontents{\vfill
 @y
 \def\covernote{\vbox{%
 @z
 
- at x
+ at x [0.0] l.49
 }
 @y
 }}\datecontentspage
 @z
 
- at x
+ at x [1.1] l.64
 @d banner "This is CTANGLE (Version 4.11)"
 @y
 @d banner "This is CTANGLE, Version 4.11"
@@ -47,19 +47,19 @@
   /* will be extended by the \TeX~Live |versionstring| */
 @z
 
- at x
+ at x [1.2] l.90
   if (show_banner) puts(banner); /* print a ``banner line'' */
 @y
   if (show_banner) cb_show_banner(); /* print a ``banner line'' */
 @z
 
- at x
+ at x [1.3] l.101
 @i common.h
 @y
 @i comm-w2c.h
 @z
 
- at x
+ at x [2.20] l.129
 @ @d max_texts 4000 /* number of replacement texts, must be less than 10240 */
 @d max_toks 270000 /* number of bytes in compressed \CEE/ code */
 @y
@@ -67,37 +67,37 @@
 @d max_toks 1000000 /* number of bytes in compressed \CEE/ code */
 @z
 
- at x
+ at x [3.29] l.237
   if (tok_ptr+2>tok_mem_end) overflow("token");
 @y
   if (tok_ptr+2>tok_mem_end) overflow(_("token"));
 @z
 
- at x
+ at x [4.35] l.320
   if (stack_ptr==stack_end) overflow("stack");
 @y
   if (stack_ptr==stack_end) overflow(_("stack"));
 @z
 
- at x
+ at x [4.40] l.412
     printf("%s","\n! Not present: <");
 @y
     printf("%s",_("\n! Not present: <"));
 @z
 
- at x
+ at x [5.47] l.510
     else overflow("output files");
 @y
     else overflow(_("output files"));
 @z
 
- at x
+ at x [6.48] l.526
     printf("%s","\n! No program text was specified."); mark_harmless();
 @y
     printf("%s",_("\n! No program text was specified.")); mark_harmless();
 @z
 
- at x
+ at x [6.48] l.532
         "\nWriting the output file (%s):" : @|
         "\nWriting the output files: (%s)",C_file_name);
 @y
@@ -105,13 +105,13 @@
        _("\nWriting the output files: (%s)"),C_file_name);
 @z
 
- at x
+ at x [6.48] l.542
       printf("%s","Done.");
 @y
       printf("%s",_("Done."));
 @z
 
- at x
+ at x [6.50] l.556
 @<Write all the named output files@>=
 for (an_output_file=end_output_files; an_output_file>cur_out_file;) {
     an_output_file--;
@@ -154,13 +154,13 @@
   strcpy(check_file_name,""); /* We want to get rid of the temporary file */
 @z
 
- at x
+ at x [6.54] l.616
           else if (a<050000) confusion("macro defs have strange char");
 @y
           else if (a<050000) confusion(_("macro defs have strange char"));
 @z
 
- at x
+ at x [6.59] l.703
 @ @<Case of an identifier@>=@t\1\quad@>
 @y
 @ Nowadays, most computer files are encoded in some form of ``Unicode''. A very
@@ -192,7 +192,7 @@
 @<Case of an identifier@>=@t\1\quad@>
 @z
 
- at x
+ at x [6.59] l.708
     if ((eight_bits)(*j)<0200) C_putc(*j);
 @^high-bit character handling@>
     else C_printf("%s",translit[(eight_bits)(*j)-0200]);
@@ -209,91 +209,91 @@
     else C_putc(*j);
 @z
 
- at x
+ at x [7.67] l.840
           err_print("! Input ended in mid-comment");
 @y
           err_print(_("! Input ended in mid-comment"));
 @z
 
- at x
+ at x [7.67] l.853
         err_print("! Section name ended in mid-comment"); loc--;
 @y
         err_print(_("! Section name ended in mid-comment")); loc--;
 @z
 
- at x
+ at x [8.74] l.1004
         err_print("! String didn't end"); loc=limit; break;
 @y
         err_print(_("! String didn't end")); loc=limit; break;
 @z
 
- at x
+ at x [8.74] l.1008
         err_print("! Input ended in middle of string"); loc=buffer; break;
 @y
         err_print(_("! Input ended in middle of string")); loc=buffer; break;
 @z
 
- at x
+ at x [8.74] l.1026
     printf("%s","\n! String too long: ");
 @y
     printf("%s",_("\n! String too long: "));
 @z
 
- at x
+ at x [8.75] l.1041
   case translit_code: err_print("! Use @@l in limbo only"); continue;
 @y
   case translit_code: err_print(_("! Use @@l in limbo only")); continue;
 @z
 
- at x
+ at x [8.75] l.1046
       err_print("! Double @@ should be used in control text");
 @y
       err_print(_("! Double @@ should be used in control text"));
 @z
 
- at x
+ at x [8.76] l.1070
         err_print("! Double @@ should be used in ASCII constant");
 @y
         err_print(_("! Double @@ should be used in ASCII constant"));
 @z
 
- at x
+ at x [8.76] l.1076
         err_print("! String didn't end"); loc=limit-1; break;
 @y
         err_print(_("! String didn't end")); loc=limit-1; break;
 @z
 
- at x
+ at x [8.79] l.1108
     err_print("! Input ended in section name");
 @y
     err_print(_("! Input ended in section name"));
 @z
 
- at x
+ at x [8.79] l.1121
   printf("%s","\n! Section name too long: ");
 @y
   printf("%s",_("\n! Section name too long: "));
 @z
 
- at x
+ at x [8.80] l.1135
     err_print("! Section name didn't end"); break;
 @y
     err_print(_("! Section name didn't end")); break;
 @z
 
- at x
+ at x [8.80] l.1139
     err_print("! Nesting of section names not allowed"); break;
 @y
     err_print(_("! Nesting of section names not allowed")); break;
 @z
 
- at x
+ at x [8.81] l.1153
 if (loc>=limit) err_print("! Verbatim string didn't end");
 @y
 if (loc>=limit) err_print(_("! Verbatim string didn't end"));
 @z
 
- at x
+ at x [9.82] l.1177
 @d app_repl(c) {
   if (tok_ptr==tok_mem_end) overflow("token");
   else *(tok_ptr++)=(eight_bits)c;
@@ -305,55 +305,55 @@
 }
 @z
 
- at x
+ at x [9.83] l.1204
   if (text_ptr>text_info_end) overflow("text");
 @y
   if (text_ptr>text_info_end) overflow(_("text"));
 @z
 
- at x
+ at x [9.86] l.1250
 case output_defs_code: if (t!=section_name) err_print("! Misplaced @@h");
 @y
 case output_defs_code: if (t!=section_name) err_print(_("! Misplaced @@h"));
 @z
 
- at x
+ at x [9.86] l.1268
     err_print("! @@d, @@f and @@c are ignored in C text"); continue;
 @y
     err_print(_("! @@d, @@f and @@c are ignored in C text")); continue;
 @z
 
- at x
+ at x [9.87] l.1278
   if (*try_loc=='=') err_print ("! Missing `@@ ' before a named section");
 @y
   if (*try_loc=='=') err_print (_("! Missing `@@ ' before a named section"));
 @z
 
- at x
+ at x [9.88] l.1295
       else err_print("! Double @@ should be used in string");
 @y
       else err_print(_("! Double @@ should be used in string"));
 @z
 
- at x
+ at x [9.89] l.1344
     default: err_print("! Unrecognized escape sequence");
 @y
     default: err_print(_("! Unrecognized escape sequence"));
 @z
 
- at x
+ at x [10.93] l.1417
   err_print("! Definition flushed, must start with identifier");
 @y
   err_print(_("! Definition flushed, must start with identifier"));
 @z
 
- at x
+ at x [10.100] l.1498
             err_print("! Double @@ should be used in control text");
 @y
             err_print(_("! Double @@ should be used in control text"));
 @z
 
- at x
+ at x [10.100] l.1501
           } @=/* otherwise fall through */@>@;
         default: err_print("! Double @@ should be used in limbo");
 @y
@@ -361,19 +361,19 @@
         default: err_print(_("! Double @@ should be used in limbo"));
 @z
 
- at x
+ at x [10.102] l.1516
     err_print("! Improper hex number following @@l");
 @y
     err_print(_("! Improper hex number following @@l"));
 @z
 
- at x
+ at x [10.102] l.1526
       err_print("! Replacement string in @@l too long");
 @y
       err_print(_("! Replacement string in @@l too long"));
 @z
 
- at x
+ at x [10.103] l.1540
   puts("\nMemory usage statistics:");
   printf("%td names (out of %ld)\n",@^system dependencies@>
           (ptrdiff_t)(name_ptr-name_dir),(long)max_names);
@@ -393,7 +393,7 @@
   printf(_("%td tokens (out of %ld)\n"),
 @z
 
- at x
+ at x [11.104] l.1551
 @** Index.
 @y
 @** Extensions to {\tentex CWEB}.  The following sections introduce new or

Modified: trunk/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch	2024-06-06 07:50:27 UTC (rev 71448)
+++ trunk/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch	2024-06-06 14:53:56 UTC (rev 71449)
@@ -16,7 +16,7 @@
 
 @q Please send comments, suggestions, etc. to tex-k@@tug.org.            @>
 
- at x
+ at x [0.0] l.1
 % This file is part of CWEB.
 % This program by Silvio Levy and Donald E. Knuth
 % is based on a program by Knuth.
@@ -26,7 +26,7 @@
 % It's somewhat flaky, so you probably shouldn't try to use it.
 @z
 
- at x
+ at x [0.0] l.23
 % Here is TeX material that gets inserted after \input cwebmac
 @y
 % Here is TeX material that gets inserted after \input ctwimac
@@ -34,7 +34,7 @@
 \datethis % Put timestamp before section 1
 @z
 
- at x
+ at x [0.0] l.35
 \def\title{CWEAVE (Version 4.11)}
 @y
 \def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}} \ifacro\sanitizecommand\Kpathsea{KPATHSEA}\fi
@@ -41,31 +41,31 @@
 \def\title{CTWILL (Version 4.11 [\TeX~Live])}
 @z
 
- at x
+ at x [0.0] l.37
   \centerline{\titlefont The {\ttitlefont CWEAVE} processor}
 @y
   \centerline{\titlefont The {\ttitlefont CTWILL} processor}
 @z
 
- at x
+ at x [0.0] l.39
   \centerline{(Version 4.11)}
 @y
   \centerline{(Version 4.11 [\TeX~Live])}
 @z
 
- at x
+ at x [0.0] l.41
 \def\botofcontents{\vfill
 @y
 \def\covernote{\vbox{%
 @z
 
- at x
+ at x [0.0] l.54
 }
 @y
 }}\datecontentspage
 @z
 
- at x
+ at x [1.1] l.59
 This is the \.{CWEAVE} program by Silvio Levy and Donald E. Knuth,
 based on \.{WEAVE} by Knuth.
 We are thankful to Steve Avery,
@@ -105,25 +105,25 @@
   /* will be extended by the \TeX~Live |versionstring| */
 @z
 
- at x
+ at x [1.2] l.94
   program=cweave;
 @y
   program=ctwill;
 @z
 
- at x
+ at x [1.2] l.98
   if (show_banner) puts(banner); /* print a ``banner line'' */
 @y
   if (show_banner) cb_show_banner(); /* print a ``banner line'' */
 @z
 
- at x
+ at x [1.3] l.112
 @i common.h
 @y
 @i comm-w2c.h
 @z
 
- at x
+ at x [2.21] l.183
 turned on during the first phase.
 
 @<Private...@>=
@@ -132,19 +132,19 @@
 turned on during the first phase---NOT!
 @z
 
- at x
+ at x [2.23] l.217
 @ @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
 
- at x
+ at x [2.25] l.246
 @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
 
- at x
+ at x [2.30] l.337
 @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,7 +156,7 @@
   must be less than 10240 */
 @z
 
- at x
+ at x [2.32] l.357
 @ Here are the two procedures needed to complete |id_lookup|:
 @y
 @ Here are the two procedures needed to complete |id_lookup|:
@@ -163,7 +163,7 @@
 @s perm_meaning int
 @z
 
- at x
+ at x [2.32] l.374
   p->xref=(void *)xmem;
 @y
   p->xref=(void *)xmem;
@@ -177,7 +177,7 @@
   }
 @z
 
- at x
+ at x [2.33] l.377
 @ And here's a small helper function to simplify the code.
 
 @d update_node(p) (p)->xref=(void *)xref_ptr
@@ -188,7 +188,7 @@
 @d get_meaning(p) (p)-name_dir+cur_meaning
 @z
 
- at x
+ at x [2.34] l.436
 id_lookup("extern",NULL,int_like);
 @y
 @#
@@ -196,7 +196,7 @@
 @#
 @z
 
- at x
+ at x [2.34] l.449
 id_lookup("int",NULL,raw_int);
 @y
 @#
@@ -204,7 +204,7 @@
 @#
 @z
 
- at x
+ at x [3.36] l.544
 @d ord 0207 /* control code for `\.{@@'}' */
 @d join 0210 /* control code for `\.{@@\&}' */
 @d thin_space 0211 /* control code for `\.{@@,}' */
@@ -248,7 +248,7 @@
 @d new_section 0235 /* control code for `\.{@@\ }' and `\.{@@*}' */
 @z
 
- at x
+ at x [3.38] l.587
 ccode['\'']=ord;
 @y
 ccode['\'']=ord;
@@ -256,7 +256,7 @@
 ccode['r']=ccode['R']=right_start;
 @z
 
- at x
+ at x [3.40] l.608
 static eight_bits skip_TeX(void);
 
 @ @c
@@ -269,7 +269,7 @@
 @c
 @z
 
- at x
+ at x [3.41] l.614
     if (loc>limit && get_line()==false) return;
 @y
     if (loc>limit && get_line()==false) return;
@@ -279,7 +279,7 @@
     }
 @z
 
- at x
+ at x [4.43] l.670
 \yskip\hang |xref_roman|, |xref_wildcard|, |xref_typewriter|, |TeX_string|,
 @y
 \yskip\hang |xref_roman|, |xref_wildcard|, |xref_typewriter|, |TeX_string|,
@@ -286,37 +286,37 @@
 |meaning|, |suppress|,
 @z
 
- at x
+ at x [4.46] l.731
 @d right_preproc 0217 /* ends a preprocessor command */
 @y
 @d right_preproc 0223 /* ends a preprocessor command */
 @z
 
- at x
+ at x [4.57] l.888
         err_print("! String didn't end"); loc=limit; break;
 @y
         err_print(_("! String didn't end")); loc=limit; break;
 @z
 
- at x
+ at x [4.57] l.892
         err_print("! Input ended in middle of string"); loc=buffer; break;
 @y
         err_print(_("! Input ended in middle of string")); loc=buffer; break;
 @z
 
- at x
+ at x [4.57] l.911
     printf("%s","\n! String too long: ");
 @y
     printf("%s",_("\n! String too long: "));
 @z
 
- at x
+ at x [4.59] l.930
   case translit_code: err_print("! Use @@l in limbo only"); continue;
 @y
   case translit_code: err_print(_("! Use @@l in limbo only")); continue;
 @z
 
- at x
+ at x [4.59] l.932
   case underline: xref_switch=def_flag; continue;
 @y
   case underline: xref_switch=def_flag; continue;
@@ -324,7 +324,7 @@
   case right_start: right_start_switch=true; continue;
 @z
 
- at x
+ at x [4.59] l.938
   case xref_roman: case xref_wildcard: case xref_typewriter: case noop:
 @y
   case xref_roman: case xref_wildcard: case xref_typewriter: case noop:
@@ -331,31 +331,31 @@
   case meaning: case suppress:
 @z
 
- at x
+ at x [4.62] l.968
     err_print("! Input ended in section name");
 @y
     err_print(_("! Input ended in section name"));
 @z
 
- at x
+ at x [4.62] l.981
   printf("%s","\n! Section name too long: ");
 @y
   printf("%s",_("\n! Section name too long: "));
 @z
 
- at x
+ at x [4.63] l.995
     err_print("! Section name didn't end"); break;
 @y
     err_print(_("! Section name didn't end")); break;
 @z
 
- at x
+ at x [4.63] l.999
     err_print("! Control codes are forbidden in section name"); break;
 @y
     err_print(_("! Control codes are forbidden in section name")); break;
 @z
 
- at x
+ at x [4.64] l.1009
 skip_restricted(void)
 {
 @y
@@ -363,19 +363,19 @@
 { int c=ccode[(eight_bits)*(loc-1)];
 @z
 
- at x
+ at x [4.64] l.1016
     err_print("! Control text didn't end"); loc=limit;
 @y
     err_print(_("! Control text didn't end")); loc=limit;
 @z
 
- at x
+ at x [4.64] l.1021
       err_print("! Control codes are forbidden in control text");
 @y
       err_print(_("! Control codes are forbidden in control text"));
 @z
 
- at x
+ at x [4.64] l.1022
 @.Control codes are forbidden...@>
 @y
 @.Control codes are forbidden...@>
@@ -383,13 +383,13 @@
     else if (c==suppress && phase==2) @<Suppress mini-index entry@>@;
 @z
 
- at x
+ at x [4.66] l.1036
 if (loc>=limit) err_print("! Verbatim string didn't end");
 @y
 if (loc>=limit) err_print(_("! Verbatim string didn't end"));
 @z
 
- at x
+ at x [5.68] l.1061
   skip_limbo(); change_exists=false;
 @y
   skip_limbo();
@@ -396,36 +396,36 @@
   @<Give a default title to the program, if necessary@>@;
 @z
 
- at x
+ at x [5.68] l.1064
   changed_section[section_count]=change_exists;
     /* the index changes if anything does */
 @y
 @z
 
- at x
+ at x [5.70] l.1073
   if (++section_count==max_sections) overflow("section number");
 @y
   if (++section_count==max_sections) overflow(_("section number"));
 @z
 
- at x
+ at x [5.70] l.1074
   changed_section[section_count]=changing;
      /* it will become |true| if any line changes */
 @y
 @z
 
- at x
+ at x [5.70] l.1083
   if (changed_section[section_count]) change_exists=true;
 @y
 @z
 
- at x
+ at x [5.74] l.1162
     case translit_code: err_print("! Use @@l in limbo only"); continue;
 @y
     case translit_code: err_print(_("! Use @@l in limbo only")); continue;
 @z
 
- at x
+ at x [5.74] l.1167
     case xref_roman: case xref_wildcard: case xref_typewriter:
 @y
     case xref_roman: case xref_wildcard: case xref_typewriter:
@@ -432,19 +432,19 @@
     case meaning: case suppress:
 @z
 
- at x
+ at x [5.79] l.1249
   err_print("! Missing left identifier of @@s");
 @y
   err_print(_("! Missing left identifier of @@s"));
 @z
 
- at x
+ at x [5.79] l.1254
     err_print("! Missing right identifier of @@s");
 @y
     err_print(_("! Missing right identifier of @@s"));
 @z
 
- at x
+ at x [5.82] l.1302
       printf("%s","\n! Never defined: <");
       print_section_name(p); putchar('>'); mark_harmless();
 @y
@@ -452,7 +452,7 @@
       print_section_name(p); putchar('>'); mark_harmless();
 @z
 
- at x
+ at x [5.82] l.1308
       printf("%s","\n! Never used: <");
       print_section_name(p); putchar('>'); mark_harmless();
 @y
@@ -460,7 +460,7 @@
       print_section_name(p); putchar('>'); mark_harmless();
 @z
 
- at x
+ at x [6.89] l.1397
 @ 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 @@
 *out_ptr='c';
 @z
 
- at x
+ at x [6.90] l.1414
 @d out(c) {if (out_ptr>=out_buf_end) break_out(); *(++out_ptr)=c;}
 @y
 @d out(c)
@@ -508,13 +508,13 @@
  }
 @z
 
- at x
+ at x [6.94] l.1462
   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
 
- at x
+ at x [6.95] l.1471
 |def_flag|, so it cannot have more than five decimal digits.  If
 the section is changed, we output `\.{\\*}' just after the number.
 @y
@@ -521,13 +521,13 @@
 |def_flag|, so it cannot have more than five decimal digits.
 @z
 
- at x
+ at x [6.96] l.1485
   if (changed_section[n]) out_str("\\*");
 @.\\*@>
 @y
 @z
 
- at x
+ at x [7.99] l.1543
         default: err_print("! Double @@ should be used in limbo");
 @y
         case right_start: right_start_switch=true; break;
@@ -534,43 +534,43 @@
         default: err_print(_("! Double @@ should be used in limbo"));
 @z
 
- at x
+ at x [7.101] l.1585
 @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
 
- at x
+ at x [7.101] l.1597
           err_print("! Input ended in mid-comment");
 @y
           err_print(_("! Input ended in mid-comment"));
 @z
 
- at x
+ at x [7.101] l.1602
         if (bal>1) err_print("! Missing } in comment");
 @y
         if (bal>1) err_print(_("! Missing } in comment"));
 @z
 
- at x
+ at x [7.101] l.1618
       else {err_print("! Extra } in comment");
 @y
       else {err_print(_("! Extra } in comment"));
 @z
 
- at x
+ at x [7.102] l.1630
   if (bal>1) err_print("! Missing } in comment");
 @y
   if (bal>1) err_print(_("! Missing } in comment"));
 @z
 
- at x
+ at x [7.103] l.1638
     err_print("! Illegal use of @@ in comment");
 @y
     err_print(_("! Illegal use of @@ in comment"));
 @z
 
- at x
+ at x [8.106] l.1755
 @d attr_head 69 /* denotes beginning of attribute */
 @y
 @d attr_head 69 /* denotes beginning of attribute */
@@ -577,13 +577,13 @@
 @d title 70 /* program name or header name in a ``meaning'' */
 @z
 
- at x
+ at x [8.110] l.2129
 @i prod.w
 @y
 @i prod-twill.w
 @z
 
- at x
+ at x [9.113] l.2179
 static scrap scrap_info[max_scraps]; /* memory array for scraps */
 @y
 static scrap scrap_info[max_scraps]; /* memory array for scraps */
@@ -590,7 +590,7 @@
 static scrap null_scrap; /* a scrap with empty translation */
 @z
 
- at x
+ at x [9.114] l.2188
 @ @<Set init...@>=
 @y
 @ @<Set init...@>=
@@ -597,13 +597,13 @@
 null_scrap.trans=&tok_start[0];
 @z
 
- at x
+ at x [9.116] l.2249
   update_terminal();
 @y
   puts("|"); update_terminal();
 @z
 
- at x
+ at x [9.124] l.2560
 the |for| loop below.
 
 @c
@@ -618,7 +618,7 @@
 @#
 @z
 
- at x
+ at x [9.124] l.2568
   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 @@
   if (tok_loc<=operator_found) return; /* this should not happen */
 @z
 
- at x
+ at x [9.125] l.2597
   token_pointer tok_loc; /* where the first identifier appears */
 @y
 @z
 
- at x
+ at x [9.128] l.2651
 @<Cases for |exp|@>=
 if (cat1==lbrace || cat1==int_like || cat1==decl) {
   make_underlined(pp); big_app(dindent); big_app1(pp);
@@ -646,7 +646,7 @@
 }
 @z
 
- at x
+ at x [9.128] l.2666
   make_underlined (pp); squash(pp,2,tag,-1,7);
 @y
   make_underlined (pp);
@@ -657,7 +657,7 @@
   squash(pp,2,tag,-1,7);
 @z
 
- at x
+ at x [9.138] l.2755
 @ @<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==semi) squash(pp,2,decl,-1,39);
 @z
 
- at x
+ at x [9.139] l.2777
 @ @<Cases for |decl|@>=
 if (cat1==decl) {
   big_app1_insert(pp,force); reduce(pp,2,decl,-1,40);
@@ -719,13 +719,13 @@
 }
 @z
 
- at x
+ at x [9.141] l.2803
     make_underlined(pp+1); make_reserved(pp+1);
 @y
     make_underlined(pp+1); make_reserved(pp+1); make_ministring(pp+1);
 @z
 
- at x
+ at x [9.143] l.2834
 @ @<Cases for |fn_decl|@>=
 if (cat1==decl) {
   big_app1_insert(pp,force); reduce(pp,2,fn_decl,0,51);
@@ -748,7 +748,7 @@
 }
 @z
 
- at x
+ at x [9.153] l.2938
   big_app1_insert(pp,dindent); reduce(pp,2,fn_decl,0,73);
 @y
   big_app1(pp); if (indent_param_decl) big_app(dindent);
@@ -755,7 +755,7 @@
   big_app1(pp+1); reduce(pp,2,fn_decl,0,73);
 @z
 
- at x
+ at x [9.156] l.2964
   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 @@
      ( force_lines ? force : break_space ) ); reduce(pp,2,cat1,-1,76);
 @z
 
- at x
+ at x [9.158] l.2972
 if (cat1==define_like) make_underlined(pp+2);
 @y
 if (cat1==define_like) { /* \#\&{define} is analogous to \&{extern} */
@@ -776,7 +776,7 @@
 }
 @z
 
- at x
+ at x [9.167] l.3069
 if (cat1==prelangle) reduce(pp+1,0,langle,1,100);
 else reduce(pp,0,exp,-2,101);
 @y
@@ -784,13 +784,13 @@
 else reduce(pp,0,exp,-2,122);
 @z
 
- at x
+ at x [9.168] l.3074
   big_app1_insert(pp,' '); reduce(pp,2,else_like,-2,102);
 @y
   big_app1_insert(pp,' '); reduce(pp,2,else_like,-2,123);
 @z
 
- at x
+ at x [9.173] l.3106
 @ @<Cases for |typedef_like|@>=
 if ((cat1==int_like || cat1==cast) && (cat2==comma || cat2==semi))
   reduce(pp+1,0,exp,-1,115);
@@ -826,37 +826,37 @@
     (cat3==semi || cat3==comma)) reduce(pp+2,0,exp,1,202);
 @z
 
- at x
+ at x [9.186] l.3293
     overflow("token");
 @y
     overflow(_("token"));
 @z
 
- at x
+ at x [9.186] l.3297
     overflow("text");
 @y
     overflow(_("text"));
 @z
 
- at x
+ at x [9.190] l.3352
   if (tok_ptr+6>tok_mem_end) overflow("token");
 @y
   if (tok_ptr+6>tok_mem_end) overflow(_("token"));
 @z
 
- at x
+ at x [9.191] l.3358
   printf("\nIrreducible scrap sequence in section %d:",(int)section_count);
 @y
   printf(_("\nIrreducible scrap sequence in section %d:"),(int)section_count);
 @z
 
- at x
+ at x [9.192] l.3368
   printf("\nTracing after l. %d:\n",cur_line); mark_harmless();
 @y
   printf(_("\nTracing after l. %d:\n"),cur_line); mark_harmless();
 @z
 
- at x
+ at x [10.196] l.3454
   case ignore: case xref_roman: case xref_wildcard:
 @y
   case ignore: case xref_roman: case xref_wildcard:
@@ -863,19 +863,19 @@
   case meaning: case suppress:
 @z
 
- at x
+ at x [10.197] l.3500
   overflow("scrap/token/text");
 @y
   overflow(_("scrap/token/text"));
 @z
 
- at x
+ at x [10.199] l.3585
       else err_print("! Double @@ should be used in strings");
 @y
       else err_print(_("! Double @@ should be used in strings"));
 @z
 
- at x
+ at x [10.202] l.3650
       else app_scrap(p->ilk,maybe_math);
     }
   }
@@ -886,19 +886,19 @@
   @<Flag the usage of this identifier, for the mini-index@>@;
 @z
 
- at x
+ at x [10.203] l.3668
   if (next_control!='|') err_print("! Missing '|' after C text");
 @y
   if (next_control!='|') err_print(_("! Missing '|' after C text"));
 @z
 
- at x
+ at x [10.204] l.3683
 to \.{\\PB}.  Although \.{cwebmac} ignores \.{\\PB}, other macro packages
 @y
 to \.{\\PB}.  Although \.{ctwimac} ignores \.{\\PB}, other macro packages
 @z
 
- at x
+ at x [10.205] l.3713
         app(tok_flag+(int)(p-tok_start));
 @y
         app(tok_flag+(int)(p-tok_start));
@@ -905,43 +905,43 @@
         app(inserted);
 @z
 
- at x
+ at x [11.211] l.3809
   if (stack_ptr==stack_end) overflow("stack");
 @y
   if (stack_ptr==stack_end) overflow(_("stack"));
 @z
 
- at x
+ at x [11.224] l.4132
   printf("%s","\n! Illegal control code in section name: <");
 @y
   printf("%s",_("\n! Illegal control code in section name: <"));
 @z
 
- at x
+ at x [11.225] l.4147
     printf("%s","\n! C text in section name didn't end: <");
 @y
     printf("%s",_("\n! C text in section name didn't end: <"));
 @z
 
- at x
+ at x [11.225] l.4159
       if (j>buffer+long_buf_size-3) overflow("buffer");
 @y
       if (j>buffer+long_buf_size-3) overflow(_("buffer"));
 @z
 
- at x
+ at x [11.226] l.4167
   if (j>buffer+long_buf_size-4) overflow("buffer");
 @y
   if (j>buffer+long_buf_size-4) overflow(_("buffer"));
 @z
 
- at x
+ at x [12.227] l.4182
 if (show_progress) printf("%s","\nWriting the output file...");
 @y
 if (show_progress) printf("%s",_("\nWriting the output file..."));
 @z
 
- at x
+ at x [12.227] l.4184
 section_count=0; format_visible=true; copy_limbo();
 @y
 temp_switch=false; temp_meaning_ptr=temp_meaning_stack;
@@ -949,7 +949,7 @@
 section_count=0; format_visible=true; right_start_switch=false; copy_limbo();
 @z
 
- at x
+ at x [12.229] l.4213
 static boolean group_found=false; /* has a starred section occurred? */
 
 @ @<Translate the current section@>= {
@@ -966,12 +966,12 @@
   top_usage=usage_sentinel;
 @z
 
- at x
+ at x [12.231] l.4231
 If the section has changed, we put \.{\\*} just after the section number.
 @y
 @z
 
- at x
+ at x [12.231] l.4234
 if (*(loc-1)!='*') out_str("\\M");
 @y
 if (*(loc-1)!='*') {
@@ -983,7 +983,7 @@
 }
 @z
 
- at x
+ at x [12.231] l.4249
 @.\\N@>
 @y
 @.\\N@>
@@ -993,7 +993,7 @@
   }
 @z
 
- at x
+ at x [12.231] l.4256
 out('{'); out_section(section_count); out('}');
 @y
 out('{'); out_section(section_count); out('}');
@@ -1000,7 +1000,7 @@
 flush_buffer(out_ptr,false,false);
 @z
 
- at x
+ at x [12.232] l.4264
     case '@@': out('@@'); break;
 @y
     case '@@': out('@@'); break;
@@ -1008,7 +1008,7 @@
     case right_start: right_start_switch=true; break;
 @z
 
- at x
+ at x [12.232] l.4267
     case section_name: loc-=2; next_control=get_next(); /* skip to \.{@@>} */
 @y
     case meaning: case suppress:
@@ -1015,19 +1015,19 @@
     case section_name: loc-=2; next_control=get_next(); /* reprocess */
 @z
 
- at x
+ at x [12.232] l.4269
         err_print("! TeX string should be in C text only"); break;
 @y
         err_print(_("! TeX string should be in C text only")); break;
 @z
 
- at x
+ at x [12.232] l.4275
         err_print("! You can't do that in TeX text"); break;
 @y
         err_print(_("! You can't do that in TeX text")); break;
 @z
 
- at x
+ at x [12.233] l.4289
   outer_parse(); finish_C(format_visible); format_visible=true;
   doing_format=false;
 }
@@ -1039,7 +1039,7 @@
 }
 @z
 
- at x
+ at x [12.236] l.4341
 @<Start a macro...@>= {
 @y
 @<Start a macro...@>= {
@@ -1046,13 +1046,13 @@
   is_macro=true;
 @z
 
- at x
+ at x [12.236] l.4347
     err_print("! Improper macro definition");
 @y
     err_print(_("! Improper macro definition"));
 @z
 
- at x
+ at x [12.236] l.4348
 @.Improper macro definition@>
   else {
     app('$'); app_cur_id(false);
@@ -1064,7 +1064,7 @@
     def_diff=(*loc!='(');
 @z
 
- at x
+ at x [12.236] l.4360
         } @=/* otherwise fall through */@>@;
       default: err_print("! Improper macro definition"); break;
 @y
@@ -1072,7 +1072,7 @@
       default: err_print(_("! Improper macro definition")); break;
 @z
 
- at x
+ at x [12.236] l.4370
 @ @<Start a format...@>= {
   doing_format=true;
 @y
@@ -1082,25 +1082,25 @@
   is_macro=false;
 @z
 
- at x
+ at x [12.237] l.4387
   if (scrap_ptr!=scrap_info+2) err_print("! Improper format definition");
 @y
   if (scrap_ptr!=scrap_info+2) err_print(_("! Improper format definition"));
 @z
 
- at x
+ at x [12.240] l.4422
   err_print("! You need an = sign after the section name");
 @y
   err_print(_("! You need an = sign after the section name"));
 @z
 
- at x
+ at x [12.241] l.4444
   err_print("! You can't do that in C text");
 @y
   err_print(_("! You can't do that in C text"));
 @z
 
- at x
+ at x [12.246] l.4514
 out_str("\\fi"); finish_line();
 @.\\fi@>
 @y
@@ -1111,13 +1111,13 @@
 @.\\FI@>
 @z
 
- at x
+ at x [13.247] l.4535
   if (show_progress) printf("%s","\nWriting the index...");
 @y
   if (show_progress) printf("%s",_("\nWriting the index..."));
 @z
 
- at x
+ at x [13.247] l.4537
   if (change_exists) {
     @<Tell about changed sections@>@;
     finish_line(); flush_buffer(out_buf,false,false);
@@ -1126,19 +1126,19 @@
 @y
 @z
 
- at x
+ at x [13.247] l.4546
     fatal("! Cannot open index file ",idx_file_name);
 @y
     fatal(_("! Cannot open index file "),idx_file_name);
 @z
 
- at x
+ at x [13.247] l.4558
     fatal("! Cannot open section file ",scn_file_name);
 @y
     fatal(_("! Cannot open section file "),scn_file_name);
 @z
 
- at x
+ at x [13.247] l.4570
 fclose(active_file);
 @y
 fclose(active_file); active_file=tex_file=NULL;
@@ -1145,13 +1145,13 @@
 if (check_for_change) @<Update the result when it has changed@>@;
 @z
 
- at x
+ at x [13.247] l.4573
   printf("%s","Done.");
 @y
   printf("%s",_("Done."));
 @z
 
- at x
+ at x [13.249] l.4581
 the index section itself.
 
 @<Tell about changed sections@>=
@@ -1170,13 +1170,13 @@
 the index section itself---NOT!
 @z
 
- at x
+ at x [13.257] l.4725
     if (sort_ptr>=scrap_info_end) overflow("sorting");
 @y
     if (sort_ptr>=scrap_info_end) overflow(_("sorting"));
 @z
 
- at x
+ at x [13.262] l.4770
 @ @<Output the name...@>=
 switch (cur_name->ilk) {@+char *p; /* index into |byte_mem| */@+ at t}\6{\4@>
 @y
@@ -1187,13 +1187,13 @@
 switch (cur_name->ilk) {
 @z
 
- at x
+ at x [13.262] l.4772
   case normal: case func_template:
 @y
   case normal:
 @z
 
- at x
+ at x [13.262] l.4774
     else {@+boolean all_caps=true;@+ at t}\6{@>
 @y
     else {@+boolean all_caps=true;@+char *p;
@@ -1200,7 +1200,7 @@
       /* index into |byte_mem| */ @+ at t}\6{@>
 @z
 
- at x
+ at x [13.262] l.4789
   case roman: not_an_identifier: out_name(cur_name,false); goto name_done;
   case custom:
     out_str("$\\");
@@ -1215,13 +1215,13 @@
 @.\\\$@>
 @z
 
- at x
+ at x [13.262] l.4799
 out_name(cur_name,true);
 @y
 out_name(cur_name,proofing);
 @z
 
- at x
+ at x [13.269] l.4862
   puts("\nMemory usage statistics:");
 @.Memory usage statistics:@>
   printf("%td names (out of %ld)\n",@^system dependencies@>
@@ -1270,7 +1270,7 @@
             (ptrdiff_t)(max_sort_ptr-scrap_info),(long)max_scraps);
 @z
 
- at x
+ at x [13.269] l.4884
 @** Index.
 @y
 @q Section 270. @>

Modified: trunk/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/cweav-w2c.ch	2024-06-06 07:50:27 UTC (rev 71448)
+++ trunk/Build/source/texk/web2c/cwebdir/cweav-w2c.ch	2024-06-06 14:53:56 UTC (rev 71449)
@@ -16,31 +16,31 @@
 
 @q Please send comments, suggestions, etc. to tex-k@@tug.org.            @>
 
- at x
+ at x [0.0] l.35
 \def\title{CWEAVE (Version 4.11)}
 @y
 \def\title{CWEAVE (Version 4.11 [\TeX~Live])}
 @z
 
- at x
+ at x [0.0] l.39
   \centerline{(Version 4.11)}
 @y
   \centerline{(Version 4.11 [\TeX~Live])}
 @z
 
- at x
+ at x [0.0] l.41
 \def\botofcontents{\vfill
 @y
 \def\covernote{\vbox{%
 @z
 
- at x
+ at x [0.0] l.54
 }
 @y
 }}\datecontentspage
 @z
 
- at x
+ at x [1.1] l.70
 @d banner "This is CWEAVE (Version 4.11)"
 @y
 @d banner "This is CWEAVE, Version 4.11"
@@ -47,31 +47,31 @@
   /* will be extended by the \TeX~Live |versionstring| */
 @z
 
- at x
+ at x [1.2] l.98
   if (show_banner) puts(banner); /* print a ``banner line'' */
 @y
   if (show_banner) cb_show_banner(); /* print a ``banner line'' */
 @z
 
- at x
+ at x [1.3] l.112
 @i common.h
 @y
 @i comm-w2c.h
 @z
 
- at x
+ at x [2.23] l.217
 @ @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
 
- at x
+ at x [2.25] l.246
 @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
 
- at x
+ at x [2.30] l.337
 @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
 
- at x
+ at x [4.57] l.888
         err_print("! String didn't end"); loc=limit; break;
 @y
         err_print(_("! String didn't end")); loc=limit; break;
 @z
 
- at x
+ at x [4.57] l.892
         err_print("! Input ended in middle of string"); loc=buffer; break;
 @y
         err_print(_("! Input ended in middle of string")); loc=buffer; break;
 @z
 
- at x
+ at x [4.57] l.911
     printf("%s","\n! String too long: ");
 @y
     printf("%s",_("\n! String too long: "));
 @z
 
- at x
+ at x [4.59] l.930
   case translit_code: err_print("! Use @@l in limbo only"); continue;
 @y
   case translit_code: err_print(_("! Use @@l in limbo only")); continue;
 @z
 
- at x
+ at x [4.62] l.968
     err_print("! Input ended in section name");
 @y
     err_print(_("! Input ended in section name"));
 @z
 
- at x
+ at x [4.62] l.981
   printf("%s","\n! Section name too long: ");
 @y
   printf("%s",_("\n! Section name too long: "));
 @z
 
- at x
+ at x [4.63] l.995
     err_print("! Section name didn't end"); break;
 @y
     err_print(_("! Section name didn't end")); break;
 @z
 
- at x
+ at x [4.63] l.999
     err_print("! Control codes are forbidden in section name"); break;
 @y
     err_print(_("! Control codes are forbidden in section name")); break;
 @z
 
- at x
+ at x [4.64] l.1016
     err_print("! Control text didn't end"); loc=limit;
 @y
     err_print(_("! Control text didn't end")); loc=limit;
 @z
 
- at x
+ at x [4.64] l.1021
       err_print("! Control codes are forbidden in control text");
 @y
       err_print(_("! Control codes are forbidden in control text"));
 @z
 
- at x
+ at x [4.66] l.1036
 if (loc>=limit) err_print("! Verbatim string didn't end");
 @y
 if (loc>=limit) err_print(_("! Verbatim string didn't end"));
 @z
 
- at x
+ at x [5.70] l.1073
   if (++section_count==max_sections) overflow("section number");
 @y
   if (++section_count==max_sections) overflow(_("section number"));
 @z
 
- at x
+ at x [5.74] l.1162
     case translit_code: err_print("! Use @@l in limbo only"); continue;
 @y
     case translit_code: err_print(_("! Use @@l in limbo only")); continue;
 @z
 
- at x
+ at x [5.79] l.1249
   err_print("! Missing left identifier of @@s");
 @y
   err_print(_("! Missing left identifier of @@s"));
 @z
 
- at x
+ at x [5.79] l.1254
     err_print("! Missing right identifier of @@s");
 @y
     err_print(_("! Missing right identifier of @@s"));
 @z
 
- at x
+ at x [5.82] l.1302
       printf("%s","\n! Never defined: <");
       print_section_name(p); putchar('>'); mark_harmless();
 @y
@@ -181,7 +181,7 @@
       print_section_name(p); putchar('>'); mark_harmless();
 @z
 
- at x
+ at x [5.82] l.1308
       printf("%s","\n! Never used: <");
       print_section_name(p); putchar('>'); mark_harmless();
 @y
@@ -189,7 +189,7 @@
       print_section_name(p); putchar('>'); mark_harmless();
 @z
 
- at x
+ at x [6.89] l.1397
 @ 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 @@
 *out_ptr='c';
 @z
 
- at x
+ at x [6.94] l.1462
   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
 
- at x
+ at x [7.99] l.1543
         default: err_print("! Double @@ should be used in limbo");
 @y
         default: err_print(_("! Double @@ should be used in limbo"));
 @z
 
- at x
+ at x [7.101] l.1585
 @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
 
- at x
+ at x [7.101] l.1597
           err_print("! Input ended in mid-comment");
 @y
           err_print(_("! Input ended in mid-comment"));
 @z
 
- at x
+ at x [7.101] l.1602
         if (bal>1) err_print("! Missing } in comment");
 @y
         if (bal>1) err_print(_("! Missing } in comment"));
 @z
 
- at x
+ at x [7.101] l.1618
       else {err_print("! Extra } in comment");
 @y
       else {err_print(_("! Extra } in comment"));
 @z
 
- at x
+ at x [7.102] l.1630
   if (bal>1) err_print("! Missing } in comment");
 @y
   if (bal>1) err_print(_("! Missing } in comment"));
 @z
 
- at x
+ at x [7.103] l.1638
     err_print("! Illegal use of @@ in comment");
 @y
     err_print(_("! Illegal use of @@ in comment"));
 @z
 
- at x
+ at x [8.110] l.2129
 @i prod.w
 @y
 @i prod-cweave.w
 @z
 
- at x
+ at x [9.128] l.2651
 @<Cases for |exp|@>=
 if (cat1==lbrace || cat1==int_like || cat1==decl) {
   make_underlined(pp); big_app(dindent); big_app1(pp);
@@ -286,7 +286,7 @@
 }
 @z
 
- at x
+ at x [9.138] l.2755
 @ @<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==semi) squash(pp,2,decl,-1,39);
 @z
 
- at x
+ at x [9.139] l.2777
 @ @<Cases for |decl|@>=
 if (cat1==decl) {
   big_app1_insert(pp,force); reduce(pp,2,decl,-1,40);
@@ -347,7 +347,7 @@
 }
 @z
 
- at x
+ at x [9.143] l.2834
 @ @<Cases for |fn_decl|@>=
 if (cat1==decl) {
   big_app1_insert(pp,force); reduce(pp,2,fn_decl,0,51);
@@ -370,7 +370,7 @@
 }
 @z
 
- at x
+ at x [9.153] l.2938
   big_app1_insert(pp,dindent); reduce(pp,2,fn_decl,0,73);
 @y
   big_app1(pp); if (indent_param_decl) big_app(dindent);
@@ -377,7 +377,7 @@
   big_app1(pp+1); reduce(pp,2,fn_decl,0,73);
 @z
 
- at x
+ at x [9.156] l.2964
   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 @@
      ( force_lines ? force : break_space ) ); reduce(pp,2,cat1,-1,76);
 @z
 
- at x
+ at x [9.186] l.3293
     overflow("token");
 @y
     overflow(_("token"));
 @z
 
- at x
+ at x [9.186] l.3297
     overflow("text");
 @y
     overflow(_("text"));
 @z
 
- at x
+ at x [9.190] l.3352
   if (tok_ptr+6>tok_mem_end) overflow("token");
 @y
   if (tok_ptr+6>tok_mem_end) overflow(_("token"));
 @z
 
- at x
+ at x [9.191] l.3358
   printf("\nIrreducible scrap sequence in section %d:",(int)section_count);
 @y
   printf(_("\nIrreducible scrap sequence in section %d:"),(int)section_count);
 @z
 
- at x
+ at x [9.192] l.3368
   printf("\nTracing after l. %d:\n",cur_line); mark_harmless();
 @y
   printf(_("\nTracing after l. %d:\n"),cur_line); mark_harmless();
 @z
 
- at x
+ at x [10.197] l.3500
   overflow("scrap/token/text");
 @y
   overflow(_("scrap/token/text"));
 @z
 
- at x
+ at x [10.199] l.3585
       else err_print("! Double @@ should be used in strings");
 @y
       else err_print(_("! Double @@ should be used in strings"));
 @z
 
- at x
+ at x [10.203] l.3668
   if (next_control!='|') err_print("! Missing '|' after C text");
 @y
   if (next_control!='|') err_print(_("! Missing '|' after C text"));
 @z
 
- at x
+ at x [11.211] l.3809
   if (stack_ptr==stack_end) overflow("stack");
 @y
   if (stack_ptr==stack_end) overflow(_("stack"));
 @z
 
- at x
+ at x [11.224] l.4132
   printf("%s","\n! Illegal control code in section name: <");
 @y
   printf("%s",_("\n! Illegal control code in section name: <"));
 @z
 
- at x
+ at x [11.225] l.4147
     printf("%s","\n! C text in section name didn't end: <");
 @y
     printf("%s",_("\n! C text in section name didn't end: <"));
 @z
 
- at x
+ at x [11.225] l.4159
       if (j>buffer+long_buf_size-3) overflow("buffer");
 @y
       if (j>buffer+long_buf_size-3) overflow(_("buffer"));
 @z
 
- at x
+ at x [11.226] l.4167
   if (j>buffer+long_buf_size-4) overflow("buffer");
 @y
   if (j>buffer+long_buf_size-4) overflow(_("buffer"));
 @z
 
- at x
+ at x [12.227] l.4182
 if (show_progress) printf("%s","\nWriting the output file...");
 @y
 if (show_progress) printf("%s",_("\nWriting the output file..."));
 @z
 
- at x
+ at x [12.232] l.4269
         err_print("! TeX string should be in C text only"); break;
 @y
         err_print(_("! TeX string should be in C text only")); break;
 @z
 
- at x
+ at x [12.232] l.4275
         err_print("! You can't do that in TeX text"); break;
 @y
         err_print(_("! You can't do that in TeX text")); break;
 @z
 
- at x
+ at x [12.236] l.4347
     err_print("! Improper macro definition");
 @y
     err_print(_("! Improper macro definition"));
 @z
 
- at x
+ at x [12.236] l.4360
         } @=/* otherwise fall through */@>@;
       default: err_print("! Improper macro definition"); break;
 @y
@@ -496,43 +496,43 @@
       default: err_print(_("! Improper macro definition")); break;
 @z
 
- at x
+ at x [12.237] l.4387
   if (scrap_ptr!=scrap_info+2) err_print("! Improper format definition");
 @y
   if (scrap_ptr!=scrap_info+2) err_print(_("! Improper format definition"));
 @z
 
- at x
+ at x [12.240] l.4422
   err_print("! You need an = sign after the section name");
 @y
   err_print(_("! You need an = sign after the section name"));
 @z
 
- at x
+ at x [12.241] l.4444
   err_print("! You can't do that in C text");
 @y
   err_print(_("! You can't do that in C text"));
 @z
 
- at x
+ at x [13.247] l.4535
   if (show_progress) printf("%s","\nWriting the index...");
 @y
   if (show_progress) printf("%s",_("\nWriting the index..."));
 @z
 
- at x
+ at x [13.247] l.4546
     fatal("! Cannot open index file ",idx_file_name);
 @y
     fatal(_("! Cannot open index file "),idx_file_name);
 @z
 
- at x
+ at x [13.247] l.4558
     fatal("! Cannot open section file ",scn_file_name);
 @y
     fatal(_("! Cannot open section file "),scn_file_name);
 @z
 
- at x
+ at x [13.247] l.4570
 fclose(active_file);
 @y
 fclose(active_file); active_file=tex_file=NULL;
@@ -539,19 +539,19 @@
 if (check_for_change) @<Update the result when it has changed@>@;
 @z
 
- at x
+ at x [13.247] l.4573
   printf("%s","Done.");
 @y
   printf("%s",_("Done."));
 @z
 
- at x
+ at x [13.257] l.4725
     if (sort_ptr>=scrap_info_end) overflow("sorting");
 @y
     if (sort_ptr>=scrap_info_end) overflow(_("sorting"));
 @z
 
- at x
+ at x [13.269] l.4862
   puts("\nMemory usage statistics:");
 @.Memory usage statistics:@>
   printf("%td names (out of %ld)\n",@^system dependencies@>
@@ -595,7 +595,7 @@
             (ptrdiff_t)(max_sort_ptr-scrap_info),(long)max_scraps);
 @z
 
- at x
+ at x [14.270] l.4884
 @** Index.
 @y
 @** Extensions to {\tentex CWEB}.  The following sections introduce new or

Modified: trunk/Build/source/texk/web2c/tests/fix-changefile-lines.py
===================================================================
--- trunk/Build/source/texk/web2c/tests/fix-changefile-lines.py	2024-06-06 07:50:27 UTC (rev 71448)
+++ trunk/Build/source/texk/web2c/tests/fix-changefile-lines.py	2024-06-06 14:53:56 UTC (rev 71449)
@@ -19,31 +19,15 @@
         sys.exit(1)
 
     # Read WEB file
-    try:
-        web_file = open(sys.argv[1], "r")
-    except OSError:
-        eprint(f"Could not open {sys.argv[1]}")
-        print(USAGE)
-        sys.exit(1)
-    with web_file:
-        web_lines = [line.rstrip() for line in web_file]
-        web_reader = WebReader(web_lines)
+    web_reader = WebReader(sys.argv[1])
 
     # Read change file
-    try:
-        ch_file = open(sys.argv[2], "r")
-    except OSError:
-        eprint(f"Could not open {sys.argv[2]}")
-        print(USAGE)
-        sys.exit(1)
-    with ch_file:
-        ch_lines = [line.rstrip() for line in ch_file]
+    ch_reader = ChangeReader(sys.argv[2])
 
-    ch_reader = ChangeReader(ch_lines)
+    # Run through the two files in parallel
     ch_reader.traverse(web_reader)
-    updated_ch_lines = ch_reader.get_lines()
 
-    for line in updated_ch_lines:
+    for line in ch_reader.get_lines():
         print(line)
 
 
@@ -52,11 +36,18 @@
     of the current part and section number.
     """
 
-    def __init__(self, web_lines):
-        self._web_lines = web_lines
+    def __init__(self, web_file):
         self._pos = 0
         self.part_cnt = 0
         self.section_cnt = 0
+        try:
+            self._web_file = open(web_file, "r")
+        except OSError:
+            eprint(f"Could not open {web_file}")
+            print(USAGE)
+            sys.exit(1)
+        with self._web_file:
+            self._web_lines = [line.rstrip() for line in self._web_file]
 
     def next_line(self):
         """Returns the triple of current part, section and line numbers, as
@@ -71,13 +62,26 @@
         section = self.section_cnt
         line_number = self._pos
 
-        if re.search("^@\*", line):
+        # Look for starred section == part
+        if line.startswith("@*"):
             self.part_cnt += 1
             self.section_cnt += 1
 
-        if re.search("^@ ", line) or line == "@":
+        # Look for unstarred section
+        if line.startswith("@ ") or line == "@":
             self.section_cnt += 1
 
+        # Look for '@i'nclude line
+        result = re.match("^@i \"?(\\w+\\.?\\w+)\"?", line)
+        if result:
+            include_file = result[1]
+            inc_reader = WebReader(include_file)
+            while inc_line := inc_reader.next_line():
+                pass
+            self.part_cnt += inc_reader.part_cnt
+            self.section_cnt += inc_reader.section_cnt
+            # Ignore line count in include file; we're only one step beyond
+
         return (part, section, line_number), line
 
 
@@ -86,14 +90,24 @@
     information from the corresponding WEB file.
     """
 
-    def __init__(self, ch_lines):
-        self._lines = ch_lines
+    def __init__(self, change_file):
         self._pos = 0
         self._chunk_start = None
         self._match_lines = None
+        try:
+            self._change_file = open(change_file, "r")
+        except OSError:
+            eprint(f"Could not open {change_file}")
+            print(USAGE)
+            sys.exit(1)
+        with self._change_file:
+            self._lines = [line.rstrip() for line in self._change_file]
 
     def advance_to_next_chunk(self):
-        """Find the next change chunk. Store where it starts and the lines to be matched."""
+        """Find the next change chunk. Store where it starts and
+        the lines to be matched.
+        """
+
         while self._pos < len(self._lines):
             line = self._lines[self._pos]
             if line.startswith("@x"):



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