gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] gawk branch, gawk-5.2-stable, updated. gawk-4.1.0-5024-g2a105012


From: Arnold Robbins
Subject: [SCM] gawk branch, gawk-5.2-stable, updated. gawk-4.1.0-5024-g2a105012
Date: Wed, 29 Mar 2023 13:23:13 -0400 (EDT)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, gawk-5.2-stable has been updated
       via  2a1050120ada686a6bdfeee494eb0ad7eef67f5c (commit)
       via  4aa0bf293859668649f1354ee588ea75a4bb0b74 (commit)
       via  72a84d27f1011fd0381e61804b9cf0df68c575ae (commit)
      from  c73b1c59e9b5da4874d95ca3484aa87891376ca3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=2a1050120ada686a6bdfeee494eb0ad7eef67f5c

commit 2a1050120ada686a6bdfeee494eb0ad7eef67f5c
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Wed Mar 29 20:22:45 2023 +0300

    Small updates in the manual.

diff --git a/doc/ChangeLog b/doc/ChangeLog
index 0c2053f4..38659d73 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,6 +1,8 @@
 2023-03-29         Arnold D. Robbins     <arnold@skeeve.com>
 
        * texinfo.tex: Sync from Texinfo.
+       * gawktexi.in (Dynamic Typing): Add a quote.
+       (Common Extensions): Sort the table entries, sort of.
 
 2023-03-26         Arnold D. Robbins     <arnold@skeeve.com>
 
diff --git a/doc/gawk.info b/doc/gawk.info
index 26c3e58e..52dcc7b0 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -15319,8 +15319,11 @@ File: gawk.info,  Node: Dynamic Typing,  Prev: Return 
Statement,  Up: User-defin
 9.2.5 Functions and Their Effects on Variable Typing
 ----------------------------------------------------
 
-‘awk’ is a very fluid language.  It is possible that ‘awk’ can’t 
tell if
-an identifier represents a scalar variable or an array until runtime.
+     It’s a desert topping!  It’s a floor wax!
+        — _Saturday Night Live (back when it used to be funny)_
+
+   ‘awk’ is a very fluid language.  It is possible that ‘awk’ can’t 
tell
+if an identifier represents a scalar variable or an array until runtime.
 Here is an annotated sample program:
 
      function foo(a)
@@ -30764,18 +30767,18 @@ freely available versions of ‘awk’ (*note Other 
Versions::).
 
 Feature                      BWK ‘awk’   ‘mawk’   ‘gawk’   Now 
standard
 --------------------------------------------------------------------------
+‘**’ and ‘**=’ operators     X                    X
 ‘\x’ escape sequence         X           X        X
-‘FS’ as null string          X           X        X
 ‘/dev/stdin’ special file    X           X        X
 ‘/dev/stdout’ special file   X           X        X
 ‘/dev/stderr’ special file   X           X        X
+‘BINMODE’ variable                       X        X
+‘FS’ as null string          X           X        X
 ‘delete’ without subscript   X           X        X        X
 ‘fflush()’ function          X           X        X        X
+‘func’ keyword               X                    X
 ‘length()’ of an array       X           X        X
 ‘nextfile’ statement         X           X        X        X
-‘**’ and ‘**=’ operators     X                    X
-‘func’ keyword               X                    X
-‘BINMODE’ variable                       X        X
 ‘RS’ as regexp               X           X        X
 Time-related functions                   X        X
 
@@ -39649,330 +39652,330 @@ Node: Function Caveats662110
 Ref: Function Caveats-Footnote-1664205
 Node: Return Statement664329
 Node: Dynamic Typing667384
-Node: Indirect Calls669660
-Node: Functions Summary680819
-Node: Library Functions683596
-Ref: Library Functions-Footnote-1687144
-Ref: Library Functions-Footnote-2687287
-Node: Library Names687462
-Ref: Library Names-Footnote-1691256
-Ref: Library Names-Footnote-2691483
-Node: General Functions691579
-Node: Strtonum Function692773
-Node: Assert Function695855
-Node: Round Function699307
-Node: Cliff Random Function700885
-Node: Ordinal Functions701918
-Ref: Ordinal Functions-Footnote-1705027
-Ref: Ordinal Functions-Footnote-2705279
-Node: Join Function705493
-Ref: Join Function-Footnote-1707296
-Node: Getlocaltime Function707500
-Node: Readfile Function711274
-Node: Shell Quoting713303
-Node: Isnumeric Function714759
-Node: Data File Management716171
-Node: Filetrans Function716803
-Node: Rewind Function721097
-Node: File Checking723076
-Ref: File Checking-Footnote-1724448
-Node: Empty Files724655
-Node: Ignoring Assigns726722
-Node: Getopt Function728296
-Ref: Getopt Function-Footnote-1744130
-Node: Passwd Functions744342
-Ref: Passwd Functions-Footnote-1753524
-Node: Group Functions753612
-Ref: Group Functions-Footnote-1761750
-Node: Walking Arrays761963
-Node: Library Functions Summary765011
-Node: Library Exercises766435
-Node: Sample Programs766922
-Node: Running Examples767704
-Node: Clones768456
-Node: Cut Program769728
-Node: Egrep Program780169
-Node: Id Program789486
-Node: Split Program799600
-Ref: Split Program-Footnote-1809835
-Node: Tee Program810022
-Node: Uniq Program812931
-Node: Wc Program820796
-Node: Bytes vs. Characters821191
-Node: Using extensions822793
-Node: wc program823573
-Node: Miscellaneous Programs828579
-Node: Dupword Program829808
-Node: Alarm Program831871
-Node: Translate Program836784
-Ref: Translate Program-Footnote-1841525
-Node: Labels Program841803
-Ref: Labels Program-Footnote-1845244
-Node: Word Sorting845336
-Node: History Sorting849530
-Node: Extract Program851805
-Node: Simple Sed860074
-Node: Igawk Program863290
-Ref: Igawk Program-Footnote-1878537
-Ref: Igawk Program-Footnote-2878743
-Ref: Igawk Program-Footnote-3878873
-Node: Anagram Program879000
-Node: Signature Program882096
-Node: Programs Summary883348
-Node: Programs Exercises884606
-Ref: Programs Exercises-Footnote-1888922
-Node: Advanced Features889008
-Node: Nondecimal Data891502
-Node: Boolean Typed Values893132
-Node: Array Sorting895107
-Node: Controlling Array Traversal895836
-Ref: Controlling Array Traversal-Footnote-1904343
-Node: Array Sorting Functions904465
-Ref: Array Sorting Functions-Footnote-1910584
-Node: Two-way I/O910792
-Ref: Two-way I/O-Footnote-1918787
-Ref: Two-way I/O-Footnote-2918978
-Node: TCP/IP Networking919060
-Node: Profiling922240
-Node: Persistent Memory931950
-Ref: Persistent Memory-Footnote-1940908
-Node: Extension Philosophy941039
-Node: Advanced Features Summary942574
-Node: Internationalization944844
-Node: I18N and L10N946550
-Node: Explaining gettext947245
-Ref: Explaining gettext-Footnote-1953398
-Ref: Explaining gettext-Footnote-2953593
-Node: Programmer i18n953758
-Ref: Programmer i18n-Footnote-1958871
-Node: Translator i18n958920
-Node: String Extraction959756
-Ref: String Extraction-Footnote-1960934
-Node: Printf Ordering961032
-Ref: Printf Ordering-Footnote-1963894
-Node: I18N Portability963962
-Ref: I18N Portability-Footnote-1966536
-Node: I18N Example966607
-Ref: I18N Example-Footnote-1970007
-Ref: I18N Example-Footnote-2970083
-Node: Gawk I18N970200
-Node: I18N Summary970856
-Node: Debugger972257
-Node: Debugging973281
-Node: Debugging Concepts973730
-Node: Debugging Terms975556
-Node: Awk Debugging978169
-Ref: Awk Debugging-Footnote-1979146
-Node: Sample Debugging Session979286
-Node: Debugger Invocation979838
-Node: Finding The Bug981467
-Node: List of Debugger Commands988153
-Node: Breakpoint Control989530
-Node: Debugger Execution Control993362
-Node: Viewing And Changing Data996842
-Node: Execution Stack1000580
-Node: Debugger Info1002261
-Node: Miscellaneous Debugger Commands1006560
-Node: Readline Support1011813
-Node: Limitations1012759
-Node: Debugging Summary1015403
-Node: Namespaces1016706
-Node: Global Namespace1017833
-Node: Qualified Names1019278
-Node: Default Namespace1020313
-Node: Changing The Namespace1021088
-Node: Naming Rules1022782
-Node: Internal Name Management1024697
-Node: Namespace Example1025767
-Node: Namespace And Features1028350
-Node: Namespace Summary1029807
-Node: Arbitrary Precision Arithmetic1031320
-Node: Computer Arithmetic1032839
-Ref: table-numeric-ranges1036656
-Ref: table-floating-point-ranges1037154
-Ref: Computer Arithmetic-Footnote-11037813
-Node: Math Definitions1037872
-Ref: table-ieee-formats1040917
-Node: MPFR features1041491
-Node: MPFR On Parole1041944
-Ref: MPFR On Parole-Footnote-11042788
-Node: MPFR Intro1042947
-Node: FP Math Caution1044637
-Ref: FP Math Caution-Footnote-11045711
-Node: Inexactness of computations1046088
-Node: Inexact representation1047119
-Node: Comparing FP Values1048502
-Node: Errors accumulate1049760
-Node: Strange values1051227
-Ref: Strange values-Footnote-11053893
-Node: Getting Accuracy1053998
-Node: Try To Round1056735
-Node: Setting precision1057642
-Ref: table-predefined-precision-strings1058347
-Node: Setting the rounding mode1060232
-Ref: table-gawk-rounding-modes1060614
-Ref: Setting the rounding mode-Footnote-11064672
-Node: Arbitrary Precision Integers1064855
-Ref: Arbitrary Precision Integers-Footnote-11068067
-Node: Checking for MPFR1068223
-Node: POSIX Floating Point Problems1069713
-Ref: POSIX Floating Point Problems-Footnote-11074577
-Node: Floating point summary1074615
-Node: Dynamic Extensions1076879
-Node: Extension Intro1078478
-Node: Plugin License1079786
-Node: Extension Mechanism Outline1080599
-Ref: figure-load-extension1081050
-Ref: figure-register-new-function1082635
-Ref: figure-call-new-function1083745
-Node: Extension API Description1085869
-Node: Extension API Functions Introduction1087598
-Ref: table-api-std-headers1089496
-Node: General Data Types1093960
-Ref: General Data Types-Footnote-11103128
-Node: Memory Allocation Functions1103443
-Ref: Memory Allocation Functions-Footnote-11108168
-Node: Constructor Functions1108267
-Node: API Ownership of MPFR and GMP Values1112172
-Node: Registration Functions1113733
-Node: Extension Functions1114437
-Node: Exit Callback Functions1120013
-Node: Extension Version String1121332
-Node: Input Parsers1122027
-Node: Output Wrappers1136671
-Node: Two-way processors1141519
-Node: Printing Messages1143880
-Ref: Printing Messages-Footnote-11145094
-Node: Updating ERRNO1145249
-Node: Requesting Values1146048
-Ref: table-value-types-returned1146801
-Node: Accessing Parameters1147910
-Node: Symbol Table Access1149194
-Node: Symbol table by name1149710
-Ref: Symbol table by name-Footnote-11152921
-Node: Symbol table by cookie1153053
-Ref: Symbol table by cookie-Footnote-11157334
-Node: Cached values1157398
-Ref: Cached values-Footnote-11161042
-Node: Array Manipulation1161199
-Ref: Array Manipulation-Footnote-11162302
-Node: Array Data Types1162339
-Ref: Array Data Types-Footnote-11165161
-Node: Array Functions1165261
-Node: Flattening Arrays1170290
-Node: Creating Arrays1177342
-Node: Redirection API1182192
-Node: Extension API Variables1185213
-Node: Extension Versioning1185938
-Ref: gawk-api-version1186375
-Node: Extension GMP/MPFR Versioning1188163
-Node: Extension API Informational Variables1189869
-Node: Extension API Boilerplate1191030
-Node: Changes from API V11195166
-Node: Finding Extensions1196800
-Node: Extension Example1197375
-Node: Internal File Description1198199
-Node: Internal File Ops1202523
-Ref: Internal File Ops-Footnote-11214081
-Node: Using Internal File Ops1214229
-Ref: Using Internal File Ops-Footnote-11216660
-Node: Extension Samples1216938
-Node: Extension Sample File Functions1218507
-Node: Extension Sample Fnmatch1226645
-Node: Extension Sample Fork1228240
-Node: Extension Sample Inplace1229516
-Node: Extension Sample Ord1233188
-Node: Extension Sample Readdir1234064
-Ref: table-readdir-file-types1234961
-Node: Extension Sample Revout1236099
-Node: Extension Sample Rev2way1236696
-Node: Extension Sample Read write array1237448
-Node: Extension Sample Readfile1240722
-Node: Extension Sample Time1241853
-Node: Extension Sample API Tests1244143
-Node: gawkextlib1244651
-Node: Extension summary1247687
-Node: Extension Exercises1251545
-Node: Language History1252823
-Node: V7/SVR3.11254537
-Node: SVR41256887
-Node: POSIX1258419
-Node: BTL1259844
-Node: POSIX/GNU1260613
-Node: Feature History1267144
-Node: Common Extensions1286262
-Node: Ranges and Locales1287631
-Ref: Ranges and Locales-Footnote-11292432
-Ref: Ranges and Locales-Footnote-21292459
-Ref: Ranges and Locales-Footnote-31292698
-Node: Contributors1292921
-Node: History summary1299126
-Node: Installation1300572
-Node: Gawk Distribution1301536
-Node: Getting1302028
-Node: Extracting1303027
-Node: Distribution contents1304739
-Node: Unix Installation1312819
-Node: Quick Installation1313641
-Node: Compiling with MPFR1316187
-Node: Shell Startup Files1316893
-Node: Additional Configuration Options1318050
-Node: Configuration Philosophy1320437
-Node: Compiling from Git1322939
-Node: Building the Documentation1323498
-Node: Non-Unix Installation1324910
-Node: PC Installation1325386
-Node: PC Binary Installation1326259
-Node: PC Compiling1327164
-Node: PC Using1328342
-Node: Cygwin1332070
-Node: MSYS1333326
-Node: OpenVMS Installation1333958
-Node: OpenVMS Compilation1334639
-Ref: OpenVMS Compilation-Footnote-11336122
-Node: OpenVMS Dynamic Extensions1336184
-Node: OpenVMS Installation Details1337820
-Node: OpenVMS Running1340255
-Node: OpenVMS GNV1344392
-Node: Bugs1345147
-Node: Bug definition1346071
-Node: Bug address1349722
-Node: Usenet1353313
-Node: Performance bugs1354544
-Node: Asking for help1357562
-Node: Maintainers1359553
-Node: Other Versions1360580
-Node: Installation summary1369512
-Node: Notes1370896
-Node: Compatibility Mode1371706
-Node: Additions1372528
-Node: Accessing The Source1373473
-Node: Adding Code1375008
-Node: New Ports1382144
-Node: Derived Files1386654
-Ref: Derived Files-Footnote-11392501
-Ref: Derived Files-Footnote-21392536
-Ref: Derived Files-Footnote-31393153
-Node: Future Extensions1393267
-Node: Implementation Limitations1393939
-Node: Extension Design1395181
-Node: Old Extension Problems1396345
-Ref: Old Extension Problems-Footnote-11397921
-Node: Extension New Mechanism Goals1397982
-Ref: Extension New Mechanism Goals-Footnote-11401478
-Node: Extension Other Design Decisions1401679
-Node: Extension Future Growth1403878
-Node: Notes summary1404502
-Node: Basic Concepts1405715
-Node: Basic High Level1406400
-Ref: figure-general-flow1406682
-Ref: figure-process-flow1407389
-Ref: Basic High Level-Footnote-11410790
-Node: Basic Data Typing1410979
-Node: Glossary1414397
-Node: Copying1447519
-Node: GNU Free Documentation License1485280
-Node: Index1510603
+Node: Indirect Calls669781
+Node: Functions Summary680940
+Node: Library Functions683717
+Ref: Library Functions-Footnote-1687265
+Ref: Library Functions-Footnote-2687408
+Node: Library Names687583
+Ref: Library Names-Footnote-1691377
+Ref: Library Names-Footnote-2691604
+Node: General Functions691700
+Node: Strtonum Function692894
+Node: Assert Function695976
+Node: Round Function699428
+Node: Cliff Random Function701006
+Node: Ordinal Functions702039
+Ref: Ordinal Functions-Footnote-1705148
+Ref: Ordinal Functions-Footnote-2705400
+Node: Join Function705614
+Ref: Join Function-Footnote-1707417
+Node: Getlocaltime Function707621
+Node: Readfile Function711395
+Node: Shell Quoting713424
+Node: Isnumeric Function714880
+Node: Data File Management716292
+Node: Filetrans Function716924
+Node: Rewind Function721218
+Node: File Checking723197
+Ref: File Checking-Footnote-1724569
+Node: Empty Files724776
+Node: Ignoring Assigns726843
+Node: Getopt Function728417
+Ref: Getopt Function-Footnote-1744251
+Node: Passwd Functions744463
+Ref: Passwd Functions-Footnote-1753645
+Node: Group Functions753733
+Ref: Group Functions-Footnote-1761871
+Node: Walking Arrays762084
+Node: Library Functions Summary765132
+Node: Library Exercises766556
+Node: Sample Programs767043
+Node: Running Examples767825
+Node: Clones768577
+Node: Cut Program769849
+Node: Egrep Program780290
+Node: Id Program789607
+Node: Split Program799721
+Ref: Split Program-Footnote-1809956
+Node: Tee Program810143
+Node: Uniq Program813052
+Node: Wc Program820917
+Node: Bytes vs. Characters821312
+Node: Using extensions822914
+Node: wc program823694
+Node: Miscellaneous Programs828700
+Node: Dupword Program829929
+Node: Alarm Program831992
+Node: Translate Program836905
+Ref: Translate Program-Footnote-1841646
+Node: Labels Program841924
+Ref: Labels Program-Footnote-1845365
+Node: Word Sorting845457
+Node: History Sorting849651
+Node: Extract Program851926
+Node: Simple Sed860195
+Node: Igawk Program863411
+Ref: Igawk Program-Footnote-1878658
+Ref: Igawk Program-Footnote-2878864
+Ref: Igawk Program-Footnote-3878994
+Node: Anagram Program879121
+Node: Signature Program882217
+Node: Programs Summary883469
+Node: Programs Exercises884727
+Ref: Programs Exercises-Footnote-1889043
+Node: Advanced Features889129
+Node: Nondecimal Data891623
+Node: Boolean Typed Values893253
+Node: Array Sorting895228
+Node: Controlling Array Traversal895957
+Ref: Controlling Array Traversal-Footnote-1904464
+Node: Array Sorting Functions904586
+Ref: Array Sorting Functions-Footnote-1910705
+Node: Two-way I/O910913
+Ref: Two-way I/O-Footnote-1918908
+Ref: Two-way I/O-Footnote-2919099
+Node: TCP/IP Networking919181
+Node: Profiling922361
+Node: Persistent Memory932071
+Ref: Persistent Memory-Footnote-1941029
+Node: Extension Philosophy941160
+Node: Advanced Features Summary942695
+Node: Internationalization944965
+Node: I18N and L10N946671
+Node: Explaining gettext947366
+Ref: Explaining gettext-Footnote-1953519
+Ref: Explaining gettext-Footnote-2953714
+Node: Programmer i18n953879
+Ref: Programmer i18n-Footnote-1958992
+Node: Translator i18n959041
+Node: String Extraction959877
+Ref: String Extraction-Footnote-1961055
+Node: Printf Ordering961153
+Ref: Printf Ordering-Footnote-1964015
+Node: I18N Portability964083
+Ref: I18N Portability-Footnote-1966657
+Node: I18N Example966728
+Ref: I18N Example-Footnote-1970128
+Ref: I18N Example-Footnote-2970204
+Node: Gawk I18N970321
+Node: I18N Summary970977
+Node: Debugger972378
+Node: Debugging973402
+Node: Debugging Concepts973851
+Node: Debugging Terms975677
+Node: Awk Debugging978290
+Ref: Awk Debugging-Footnote-1979267
+Node: Sample Debugging Session979407
+Node: Debugger Invocation979959
+Node: Finding The Bug981588
+Node: List of Debugger Commands988274
+Node: Breakpoint Control989651
+Node: Debugger Execution Control993483
+Node: Viewing And Changing Data996963
+Node: Execution Stack1000701
+Node: Debugger Info1002382
+Node: Miscellaneous Debugger Commands1006681
+Node: Readline Support1011934
+Node: Limitations1012880
+Node: Debugging Summary1015524
+Node: Namespaces1016827
+Node: Global Namespace1017954
+Node: Qualified Names1019399
+Node: Default Namespace1020434
+Node: Changing The Namespace1021209
+Node: Naming Rules1022903
+Node: Internal Name Management1024818
+Node: Namespace Example1025888
+Node: Namespace And Features1028471
+Node: Namespace Summary1029928
+Node: Arbitrary Precision Arithmetic1031441
+Node: Computer Arithmetic1032960
+Ref: table-numeric-ranges1036777
+Ref: table-floating-point-ranges1037275
+Ref: Computer Arithmetic-Footnote-11037934
+Node: Math Definitions1037993
+Ref: table-ieee-formats1041038
+Node: MPFR features1041612
+Node: MPFR On Parole1042065
+Ref: MPFR On Parole-Footnote-11042909
+Node: MPFR Intro1043068
+Node: FP Math Caution1044758
+Ref: FP Math Caution-Footnote-11045832
+Node: Inexactness of computations1046209
+Node: Inexact representation1047240
+Node: Comparing FP Values1048623
+Node: Errors accumulate1049881
+Node: Strange values1051348
+Ref: Strange values-Footnote-11054014
+Node: Getting Accuracy1054119
+Node: Try To Round1056856
+Node: Setting precision1057763
+Ref: table-predefined-precision-strings1058468
+Node: Setting the rounding mode1060353
+Ref: table-gawk-rounding-modes1060735
+Ref: Setting the rounding mode-Footnote-11064793
+Node: Arbitrary Precision Integers1064976
+Ref: Arbitrary Precision Integers-Footnote-11068188
+Node: Checking for MPFR1068344
+Node: POSIX Floating Point Problems1069834
+Ref: POSIX Floating Point Problems-Footnote-11074698
+Node: Floating point summary1074736
+Node: Dynamic Extensions1077000
+Node: Extension Intro1078599
+Node: Plugin License1079907
+Node: Extension Mechanism Outline1080720
+Ref: figure-load-extension1081171
+Ref: figure-register-new-function1082756
+Ref: figure-call-new-function1083866
+Node: Extension API Description1085990
+Node: Extension API Functions Introduction1087719
+Ref: table-api-std-headers1089617
+Node: General Data Types1094081
+Ref: General Data Types-Footnote-11103249
+Node: Memory Allocation Functions1103564
+Ref: Memory Allocation Functions-Footnote-11108289
+Node: Constructor Functions1108388
+Node: API Ownership of MPFR and GMP Values1112293
+Node: Registration Functions1113854
+Node: Extension Functions1114558
+Node: Exit Callback Functions1120134
+Node: Extension Version String1121453
+Node: Input Parsers1122148
+Node: Output Wrappers1136792
+Node: Two-way processors1141640
+Node: Printing Messages1144001
+Ref: Printing Messages-Footnote-11145215
+Node: Updating ERRNO1145370
+Node: Requesting Values1146169
+Ref: table-value-types-returned1146922
+Node: Accessing Parameters1148031
+Node: Symbol Table Access1149315
+Node: Symbol table by name1149831
+Ref: Symbol table by name-Footnote-11153042
+Node: Symbol table by cookie1153174
+Ref: Symbol table by cookie-Footnote-11157455
+Node: Cached values1157519
+Ref: Cached values-Footnote-11161163
+Node: Array Manipulation1161320
+Ref: Array Manipulation-Footnote-11162423
+Node: Array Data Types1162460
+Ref: Array Data Types-Footnote-11165282
+Node: Array Functions1165382
+Node: Flattening Arrays1170411
+Node: Creating Arrays1177463
+Node: Redirection API1182313
+Node: Extension API Variables1185334
+Node: Extension Versioning1186059
+Ref: gawk-api-version1186496
+Node: Extension GMP/MPFR Versioning1188284
+Node: Extension API Informational Variables1189990
+Node: Extension API Boilerplate1191151
+Node: Changes from API V11195287
+Node: Finding Extensions1196921
+Node: Extension Example1197496
+Node: Internal File Description1198320
+Node: Internal File Ops1202644
+Ref: Internal File Ops-Footnote-11214202
+Node: Using Internal File Ops1214350
+Ref: Using Internal File Ops-Footnote-11216781
+Node: Extension Samples1217059
+Node: Extension Sample File Functions1218628
+Node: Extension Sample Fnmatch1226766
+Node: Extension Sample Fork1228361
+Node: Extension Sample Inplace1229637
+Node: Extension Sample Ord1233309
+Node: Extension Sample Readdir1234185
+Ref: table-readdir-file-types1235082
+Node: Extension Sample Revout1236220
+Node: Extension Sample Rev2way1236817
+Node: Extension Sample Read write array1237569
+Node: Extension Sample Readfile1240843
+Node: Extension Sample Time1241974
+Node: Extension Sample API Tests1244264
+Node: gawkextlib1244772
+Node: Extension summary1247808
+Node: Extension Exercises1251666
+Node: Language History1252944
+Node: V7/SVR3.11254658
+Node: SVR41257008
+Node: POSIX1258540
+Node: BTL1259965
+Node: POSIX/GNU1260734
+Node: Feature History1267265
+Node: Common Extensions1286383
+Node: Ranges and Locales1287752
+Ref: Ranges and Locales-Footnote-11292553
+Ref: Ranges and Locales-Footnote-21292580
+Ref: Ranges and Locales-Footnote-31292819
+Node: Contributors1293042
+Node: History summary1299247
+Node: Installation1300693
+Node: Gawk Distribution1301657
+Node: Getting1302149
+Node: Extracting1303148
+Node: Distribution contents1304860
+Node: Unix Installation1312940
+Node: Quick Installation1313762
+Node: Compiling with MPFR1316308
+Node: Shell Startup Files1317014
+Node: Additional Configuration Options1318171
+Node: Configuration Philosophy1320558
+Node: Compiling from Git1323060
+Node: Building the Documentation1323619
+Node: Non-Unix Installation1325031
+Node: PC Installation1325507
+Node: PC Binary Installation1326380
+Node: PC Compiling1327285
+Node: PC Using1328463
+Node: Cygwin1332191
+Node: MSYS1333447
+Node: OpenVMS Installation1334079
+Node: OpenVMS Compilation1334760
+Ref: OpenVMS Compilation-Footnote-11336243
+Node: OpenVMS Dynamic Extensions1336305
+Node: OpenVMS Installation Details1337941
+Node: OpenVMS Running1340376
+Node: OpenVMS GNV1344513
+Node: Bugs1345268
+Node: Bug definition1346192
+Node: Bug address1349843
+Node: Usenet1353434
+Node: Performance bugs1354665
+Node: Asking for help1357683
+Node: Maintainers1359674
+Node: Other Versions1360701
+Node: Installation summary1369633
+Node: Notes1371017
+Node: Compatibility Mode1371827
+Node: Additions1372649
+Node: Accessing The Source1373594
+Node: Adding Code1375129
+Node: New Ports1382265
+Node: Derived Files1386775
+Ref: Derived Files-Footnote-11392622
+Ref: Derived Files-Footnote-21392657
+Ref: Derived Files-Footnote-31393274
+Node: Future Extensions1393388
+Node: Implementation Limitations1394060
+Node: Extension Design1395302
+Node: Old Extension Problems1396466
+Ref: Old Extension Problems-Footnote-11398042
+Node: Extension New Mechanism Goals1398103
+Ref: Extension New Mechanism Goals-Footnote-11401599
+Node: Extension Other Design Decisions1401800
+Node: Extension Future Growth1403999
+Node: Notes summary1404623
+Node: Basic Concepts1405836
+Node: Basic High Level1406521
+Ref: figure-general-flow1406803
+Ref: figure-process-flow1407510
+Ref: Basic High Level-Footnote-11410911
+Node: Basic Data Typing1411100
+Node: Glossary1414518
+Node: Copying1447640
+Node: GNU Free Documentation License1485401
+Node: Index1510724
 
 End Tag Table
 
diff --git a/doc/gawk.texi b/doc/gawk.texi
index a745dca2..65e72885 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -21962,6 +21962,12 @@ in the array.
 @node Dynamic Typing
 @subsection Functions and Their Effects on Variable Typing
 
+@quotation
+@i{It's a desert topping!
+It's a floor wax!}
+@author Saturday Night Live (back when it used to be funny)
+@end quotation
+
 @command{awk} is a very fluid language.
 It is possible that @command{awk} can't tell if an identifier
 represents a scalar variable or an array until runtime.
@@ -42174,18 +42180,18 @@ the three most widely used freely available versions 
of @command{awk}
 
 @multitable {@file{/dev/stderr} special file} {BWK @command{awk}} 
{@command{mawk}} {@command{gawk}} {Now standard}
 @headitem Feature @tab BWK @command{awk} @tab @command{mawk} @tab 
@command{gawk} @tab Now standard
+@item @code{**} and @code{**=} operators @tab X @tab @tab X @tab
 @item @samp{\x} escape sequence @tab X @tab X @tab X @tab
-@item @code{FS} as null string @tab X @tab X @tab X @tab
 @item @file{/dev/stdin} special file @tab X @tab X @tab X @tab
 @item @file{/dev/stdout} special file @tab X @tab X @tab X @tab
 @item @file{/dev/stderr} special file @tab X @tab X @tab X @tab
+@item @code{BINMODE} variable @tab @tab X @tab X @tab
+@item @code{FS} as null string @tab X @tab X @tab X @tab
 @item @code{delete} without subscript @tab X @tab X @tab X @tab X
 @item @code{fflush()} function @tab X @tab X @tab X @tab X
+@item @code{func} keyword @tab X @tab @tab X @tab
 @item @code{length()} of an array @tab X @tab X @tab X @tab
 @item @code{nextfile} statement @tab X @tab X @tab X @tab X
-@item @code{**} and @code{**=} operators @tab X @tab @tab X @tab
-@item @code{func} keyword @tab X @tab @tab X @tab
-@item @code{BINMODE} variable @tab @tab X @tab X @tab
 @item @code{RS} as regexp @tab X @tab X @tab X @tab
 @item Time-related functions @tab @tab X @tab X @tab
 @end multitable
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 5fb7a0f8..6da8c35a 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -20947,6 +20947,12 @@ in the array.
 @node Dynamic Typing
 @subsection Functions and Their Effects on Variable Typing
 
+@quotation
+@i{It's a desert topping!
+It's a floor wax!}
+@author Saturday Night Live (back when it used to be funny)
+@end quotation
+
 @command{awk} is a very fluid language.
 It is possible that @command{awk} can't tell if an identifier
 represents a scalar variable or an array until runtime.
@@ -41090,18 +41096,18 @@ the three most widely used freely available versions 
of @command{awk}
 
 @multitable {@file{/dev/stderr} special file} {BWK @command{awk}} 
{@command{mawk}} {@command{gawk}} {Now standard}
 @headitem Feature @tab BWK @command{awk} @tab @command{mawk} @tab 
@command{gawk} @tab Now standard
+@item @code{**} and @code{**=} operators @tab X @tab @tab X @tab
 @item @samp{\x} escape sequence @tab X @tab X @tab X @tab
-@item @code{FS} as null string @tab X @tab X @tab X @tab
 @item @file{/dev/stdin} special file @tab X @tab X @tab X @tab
 @item @file{/dev/stdout} special file @tab X @tab X @tab X @tab
 @item @file{/dev/stderr} special file @tab X @tab X @tab X @tab
+@item @code{BINMODE} variable @tab @tab X @tab X @tab
+@item @code{FS} as null string @tab X @tab X @tab X @tab
 @item @code{delete} without subscript @tab X @tab X @tab X @tab X
 @item @code{fflush()} function @tab X @tab X @tab X @tab X
+@item @code{func} keyword @tab X @tab @tab X @tab
 @item @code{length()} of an array @tab X @tab X @tab X @tab
 @item @code{nextfile} statement @tab X @tab X @tab X @tab X
-@item @code{**} and @code{**=} operators @tab X @tab @tab X @tab
-@item @code{func} keyword @tab X @tab @tab X @tab
-@item @code{BINMODE} variable @tab @tab X @tab X @tab
 @item @code{RS} as regexp @tab X @tab X @tab X @tab
 @item Time-related functions @tab @tab X @tab X @tab
 @end multitable

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=4aa0bf293859668649f1354ee588ea75a4bb0b74

commit 4aa0bf293859668649f1354ee588ea75a4bb0b74
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Wed Mar 29 20:18:24 2023 +0300

    Typo fix in extension/filefuncs.c.

diff --git a/extension/ChangeLog b/extension/ChangeLog
index 1fca36ff..99611d0f 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,8 @@
+2023-03-29         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * filefuncs.c: Fix a typo in a comment. Thanks to
+       zhou shvinq <zhoushuiqing321@outlook.com> for the report.
+
 2023-03-12         Arnold D. Robbins     <arnold@skeeve.com>
 
        * time.c: Include ../missing_d/strptime.c if the strptime()
diff --git a/extension/filefuncs.c b/extension/filefuncs.c
index b2dfb23a..ac697f09 100644
--- a/extension/filefuncs.c
+++ b/extension/filefuncs.c
@@ -1,5 +1,5 @@
 /*
- * filefuncs.c - Builtin functions that provide initial minimal iterface
+ * filefuncs.c - Builtin functions that provide initial minimal interface
  *              to the file system.
  *
  * Arnold Robbins, update for 3.1, Mon Nov 23 12:53:39 EST 1998

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=72a84d27f1011fd0381e61804b9cf0df68c575ae

commit 72a84d27f1011fd0381e61804b9cf0df68c575ae
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Wed Mar 29 20:16:11 2023 +0300

    Update texinfo.tex.

diff --git a/build-aux/ChangeLog b/build-aux/ChangeLog
index 3a8bca31..3d379f3c 100644
--- a/build-aux/ChangeLog
+++ b/build-aux/ChangeLog
@@ -1,3 +1,7 @@
+2023-03-29         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * texinfo.tex: Sync from Texinfo.
+
 2023-03-26         Arnold D. Robbins     <arnold@skeeve.com>
 
        * texinfo.tex: Sync from GNULIB.
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
index 204caf74..c0a54919 100644
--- a/build-aux/texinfo.tex
+++ b/build-aux/texinfo.tex
@@ -1,9 +1,9 @@
 % texinfo.tex -- TeX macros to handle Texinfo files.
-%
+% 
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2023-03-21.06}
+\def\texinfoversion{2023-03-27.21}
 %
 % Copyright 1985, 1986, 1988, 1990-2023 Free Software Foundation, Inc.
 %
@@ -212,7 +212,7 @@
 % @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
 % aren't perfect, it's not the end of the world, being an error message,
 % after all.
-%
+% 
 \def\errormsg{\begingroup \indexnofonts \doerrormsg}
 \def\doerrormsg#1{\errmessage{#1}}
 
@@ -426,7 +426,7 @@
   }%
 }
 
-% First remove any @comment, then any @c comment.  Pass the result on to
+% First remove any @comment, then any @c comment.  Pass the result on to 
 % \argcheckspaces.
 \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
 \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
@@ -1048,8 +1048,8 @@ where each line of input produces a line of output.}
         end
       end
     }
-    % The -2 in the arguments here gives all the input to TeX catcode 12
-    % (other) or 10 (space), preventing undefined control sequence errors. See
+    % The -2 in the arguments here gives all the input to TeX catcode 12 
+    % (other) or 10 (space), preventing undefined control sequence errors. See 
     % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html
     %
   \endgroup
@@ -1102,27 +1102,33 @@ where each line of input produces a line of output.}
 
 % Output page labels information.
 % See PDF reference v.1.7 p.594, section 8.3.1.
+% Page label ranges must be increasing.
 \ifpdf
 \def\pagelabels{%
   \def\title{0 << /P (T-) /S /D >>}%
-  \edef\roman{\the\romancount << /S /r >>}%
-  \edef\arabic{\the\arabiccount << /S /D >>}%
   %
-  % Page label ranges must be increasing.  Remove any duplicates.
-  % (There is a slight chance of this being wrong if e.g. there is
-  % a @contents but no @titlepage, etc.)
-  %
-  \ifnum\romancount=0 \def\roman{}\fi
-  \ifnum\arabiccount=0 \def\title{}%
-  \else
-    \ifnum\romancount=\arabiccount \def\roman{}\fi
-  \fi
-  %
-  \ifnum\romancount<\arabiccount
-    \pdfcatalog{/PageLabels << /Nums [\title \roman \arabic ] >> }\relax
+  % support @contents at very end of document
+  \ifnum\contentsendcount=\pagecount
+    \ifnum\arabiccount<\romancount
+      \pdfcatalog{/PageLabels << /Nums
+                  [\title
+                   \the\arabiccount << /S /D >>
+                   \the\romancount << /S /r >>
+                  ] >> }\relax
+    \fi
+  % no contents in document
+  \else\ifnum\contentsendcount=0
+    \pdfcatalog{/PageLabels << /Nums
+                [\title
+                 \the\arabiccount << /S /D >>
+                ] >> }\relax
   \else
-    \pdfcatalog{/PageLabels << /Nums [\title \arabic \roman ] >> }\relax
-  \fi
+    \pdfcatalog{/PageLabels << /Nums
+                [\title
+                 \the\romancount << /S /r >>
+                 \the\contentsendcount << /S /D >>
+                ] >> }\relax
+  \fi\fi
 }
 \else
   \let\pagelabels\relax
@@ -1131,6 +1137,8 @@ where each line of input produces a line of output.}
 \newcount\pagecount \pagecount=0
 \newcount\romancount \romancount=0
 \newcount\arabiccount \arabiccount=0
+\newcount\contentsendcount \contentsendcount=0
+
 \ifpdf
   \let\ptxadvancepageno\advancepageno
   \def\advancepageno{%
@@ -1143,7 +1151,7 @@ where each line of input produces a line of output.}
 % for display in the outlines, and in other places.  Thus, we have to
 % double any backslashes.  Otherwise, a name like "\node" will be
 % interpreted as a newline (\n), followed by o, d, e.  Not good.
-%
+% 
 % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
 % related messages.  The final outcome is that it is up to the TeX user
 % to double the backslashes and otherwise make the string valid, so
@@ -1435,7 +1443,7 @@ output) for that.)}
       % We use the node names as the destinations.
       %
       % Currently we prefix the section name with the section number
-      % for chapter and appendix headings only in order to avoid too much
+      % for chapter and appendix headings only in order to avoid too much 
       % horizontal space being required in the PDF viewer.
       \def\numchapentry##1##2##3##4{%
         \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}%
@@ -1458,7 +1466,7 @@ output) for that.)}
       % their "best" equivalent, based on the @documentencoding.  Too
       % much work for too little return.  Just use the ASCII equivalents
       % we use for the index sort strings.
-      %
+      % 
       \indexnofonts
       \setupdatafile
       % We can have normal brace characters in the PDF outlines, unlike
@@ -1684,7 +1692,7 @@ output) for that.)}
       % We use node names as destinations.
       %
       % Currently we prefix the section name with the section number
-      % for chapter and appendix headings only in order to avoid too much
+      % for chapter and appendix headings only in order to avoid too much 
       % horizontal space being required in the PDF viewer.
       \def\partentry##1##2##3##4{}% ignore parts in the outlines
       \def\numchapentry##1##2##3##4{%
@@ -2711,7 +2719,7 @@ end
 }
 
 % Commands to set the quote options.
-%
+% 
 \parseargdef\codequoteundirected{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -2757,7 +2765,7 @@ end
 % If we are in a monospaced environment, however, 1) always use \ttsl,
 % and 2) do not add an italic correction.
 \def\dosmartslant#1#2{%
-  \ifusingtt
+  \ifusingtt 
     {{\ttsl #2}\let\next=\relax}%
     {\def\next{{#1#2}\smartitaliccorrection}}%
   \next
@@ -2936,7 +2944,7 @@ end
   \gdef\codedash{\futurelet\next\codedashfinish}
   \gdef\codedashfinish{%
     \normaldash % always output the dash character itself.
-    %
+    % 
     % Now, output a discretionary to allow a line break, unless
     % (a) the next character is a -, or
     % (b) the preceding character is a -, or
@@ -3042,7 +3050,7 @@ end
         % For pdfTeX and LuaTeX
         \ifurefurlonlylink
           % PDF plus option to not display url, show just arg
-          \unhbox0
+          \unhbox0             
         \else
           % PDF, normally display both arg and url for consistency,
           % visibility, if the pdf is eventually used to print, etc.
@@ -3055,7 +3063,7 @@ end
           % For XeTeX
           \ifurefurlonlylink
             % PDF plus option to not display url, show just arg
-            \unhbox0
+            \unhbox0             
           \else
             % PDF, normally display both arg and url for consistency,
             % visibility, if the pdf is eventually used to print, etc.
@@ -3113,10 +3121,10 @@ end
   }
 }
 
-% By default we'll break after the special characters, but some people like to
-% break before the special chars, so allow that.  Also allow no breaking at
+% By default we'll break after the special characters, but some people like to 
+% break before the special chars, so allow that.  Also allow no breaking at 
 % all, for manual control.
-%
+% 
 \parseargdef\urefbreakstyle{%
   \def\txiarg{#1}%
   \ifx\txiarg\wordnone
@@ -3135,10 +3143,10 @@ end
 \def\wordnone{none}
 
 % Allow a ragged right output to aid breaking long URL's.  There can
-% be a break at the \allowbreak with no extra glue (if the existing stretch in
+% be a break at the \allowbreak with no extra glue (if the existing stretch in 
 % the line is sufficient), a break at the \penalty with extra glue added
 % at the end of the line, or no break at all here.
-%   Changing the value of the penalty and/or the amount of stretch affects how
+%   Changing the value of the penalty and/or the amount of stretch affects how 
 % preferable one choice is over the other.
 \def\urefallowbreak{%
   \penalty0\relax
@@ -3353,7 +3361,7 @@ $$%
 % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
 % Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
 % except specified as a normal braced arg, so no newlines to worry about.
-%
+% 
 \def\outfmtnametex{tex}
 %
 \long\def\inlinefmt#1{\doinlinefmt #1,\finish}
@@ -3361,7 +3369,7 @@ $$%
   \def\inlinefmtname{#1}%
   \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
 }
-%
+% 
 % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
 % FMTNAME is tex, else ELSE-TEXT.
 \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
@@ -3377,7 +3385,7 @@ $$%
 % *right* brace they would have to use a command anyway, so they may as
 % well use a command to get a left brace too.  We could re-use the
 % delimiter character idea from \verb, but it seems like overkill.
-%
+% 
 \long\def\inlineraw{\tex \doinlineraw}
 \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
 \def\doinlinerawtwo#1,#2,\finish{%
@@ -3663,7 +3671,7 @@ $$%
 % for non-CM glyphs.  That is ec* for regular text and tc* for the text
 % companion symbols (LaTeX TS1 encoding).  Both are part of the ec
 % package and follow the same conventions.
-%
+% 
 \def\ecfont{\etcfont{e}}
 \def\tcfont{\etcfont{t}}
 %
@@ -3745,7 +3753,7 @@ $$%
               after the title page.}}%
 \def\setshortcontentsaftertitlepage{%
   \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
-              command; move your @shortcontents and @contents commands if you
+              command; move your @shortcontents and @contents commands if you 
               want the contents after the title page.}}%
 
 \parseargdef\shorttitlepage{%
@@ -3799,7 +3807,7 @@ $$%
 % don't worry much about spacing, ragged right.  This should be used
 % inside a \vbox, and fonts need to be set appropriately first. \par should
 % be specified before the end of the \vbox, since a vbox is a group.
-%
+% 
 \def\raggedtitlesettings{%
   \rm
   \hyphenpenalty=10000
@@ -4625,7 +4633,7 @@ $$%
 % Like \expandablevalue, but completely expandable (the \message in the
 % definition above operates at the execution level of TeX).  Used when
 % writing to auxiliary files, due to the expansion that \write does.
-% If flag is undefined, pass through an unexpanded @value command: maybe it
+% If flag is undefined, pass through an unexpanded @value command: maybe it 
 % will be set by the time it is read back in.
 %
 % NB flag names containing - or _ may not work here.
@@ -4649,7 +4657,7 @@ $$%
 
 % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
 % with @set.
-%
+% 
 % To get the special treatment we need for `@end ifset,' we call
 % \makecond and then redefine.
 %
@@ -4682,7 +4690,7 @@ $$%
 % without the @) is in fact defined.  We can only feasibly check at the
 % TeX level, so something like `mathcode' is going to considered
 % defined even though it is not a Texinfo command.
-%
+% 
 \makecond{ifcommanddefined}
 \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
 %
@@ -4788,7 +4796,7 @@ $$%
 \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
 \def\docodeindexxxx #1{\docind{\indexname}{#1}}
 
-
+
 % \definedummyword defines \#1 as \string\#1\space, thus effectively
 % preventing its expansion.  This is used only for control words,
 % not control letters, because the \space would be incorrect for
@@ -4805,7 +4813,7 @@ $$%
 \def\definedummyword  #1{\def#1{\string#1\space}}%
 \def\definedummyletter#1{\def#1{\string#1}}%
 
-% Used for the aux, toc and index files to prevent expansion of Texinfo
+% Used for the aux, toc and index files to prevent expansion of Texinfo 
 % commands.  Most of the commands are controlled through the
 % \ifdummies conditional.
 %
@@ -5094,7 +5102,7 @@ $$%
   \let\value\indexnofontsvalue
 }
 
-
+
 
 
 % #1 is the index name, #2 is the entry text.
@@ -5135,7 +5143,7 @@ $$%
   \ifx\suffix\indexisfl\def\suffix{f1}\fi
   % Open the file
   \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
-  % Using \immediate above here prevents an object entering into the current
+  % Using \immediate above here prevents an object entering into the current 
   % box, which could confound checks such as those in \safewhatsit for
   % preceding skips.
   \typeout{Writing index file \jobname.\suffix}%
@@ -5187,7 +5195,7 @@ $$%
   \ifx\segment\isfinish
   \else
     %
-    % Fully expand the segment, throwing away any @sortas directives, and
+    % Fully expand the segment, throwing away any @sortas directives, and 
     % trim spaces.
     \edef\trimmed{\segment}%
     \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
@@ -5251,12 +5259,12 @@ $$%
 % the current value of \escapechar.
 \def\escapeisbackslash{\escapechar=`\\}
 
-% Use \ in index files by default.  texi2dvi didn't support @ as the escape
-% character (as it checked for "\entry" in the files, and not "@entry").  When
-% the new version of texi2dvi has had a chance to become more prevalent, then
-% the escape character can change back to @ again.  This should be an easy
-% change to make now because both @ and \ are only used as escape characters in
-% index files, never standing for themselves.
+% Use \ in index files by default.  texi2dvi didn't support @ as the escape 
+% character (as it checked for "\entry" in the files, and not "@entry").  When 
+% the new version of texi2dvi has had a chance to become more prevalent, then 
+% the escape character can change back to @ again.  This should be an easy 
+% change to make now because both @ and \ are only used as escape characters 
in 
+% index files, never standing for themselves. 
 %
 \set txiindexescapeisbackslash
 
@@ -5279,7 +5287,7 @@ $$%
   \def\}{\rbracechar{}}%
   \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
   %
-  % Split the entry into primary entry and any subentries, and get the index
+  % Split the entry into primary entry and any subentries, and get the index 
   % sort key.
   \splitindexentry\indextext
   %
@@ -5460,18 +5468,18 @@ $$%
     \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
       \ifflagclear{txiskipindexfileswithbackslash}{%
 \errmessage{%
-ERROR: A sorted index file in an obsolete format was skipped.
+ERROR: A sorted index file in an obsolete format was skipped.  
 To fix this problem, please upgrade your version of 'texi2dvi'
 or 'texi2pdf' to that at <https://ftp.gnu.org/gnu/texinfo>.
-If you are using an old version of 'texindex' (part of the Texinfo
+If you are using an old version of 'texindex' (part of the Texinfo 
 distribution), you may also need to upgrade to a newer version (at least 6.0).
 You may be able to typeset the index if you run
 'texindex \jobname.\indexname' yourself.
-You could also try setting the 'txiindexescapeisbackslash' flag by
+You could also try setting the 'txiindexescapeisbackslash' flag by 
 running a command like
-'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'.  If you do
+'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'.  If you do 
 this, Texinfo will try to use index files in the old format.
-If you continue to have problems, deleting the index files and starting again
+If you continue to have problems, deleting the index files and starting again 
 might help (with 'rm \jobname.?? \jobname.??s')%
 }%
       }{%
@@ -5544,7 +5552,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   % bottom of a column to reduce an increase in inter-line spacing.
   \nobreak
   \vskip 0pt plus 5\baselineskip
-  \penalty -300
+  \penalty -300 
   \vskip 0pt plus -5\baselineskip
   %
   % Typeset the initial.  Making this add up to a whole number of
@@ -5676,7 +5684,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
       \advance\dimen@ii by 1\dimen@i
       \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
       \ifdim\dimen@ > 0.8\dimen@ii   % due to long index text
-        % Try to split the text roughly evenly.  \dimen@ will be the length of
+        % Try to split the text roughly evenly.  \dimen@ will be the length of 
         % the first line.
         \dimen@ = 0.7\dimen@
         \dimen@ii = \hsize
@@ -5884,7 +5892,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \newbox\balancedcolumns
 \setbox\balancedcolumns=\vbox{shouldnt see this}%
 %
-% Only called for the last of the double column material.  \doublecolumnout
+% Only called for the last of the double column material.  \doublecolumnout 
 % does the others.
 \def\balancecolumns{%
   \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
@@ -5912,7 +5920,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
     }%
     % Now the left column is in box 1, and the right column in box 3.
     %
-    % Check whether the left column has come out higher than the page itself.
+    % Check whether the left column has come out higher than the page itself.  
     % (Note that we have doubled \vsize for the double columns, so
     % the actual height of the page is 0.5\vsize).
     \ifdim2\ht1>\vsize
@@ -6209,7 +6217,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \let\top\unnumbered
 
 % Sections.
-%
+% 
 \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
 \def\seczzz#1{%
   \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
@@ -6232,7 +6240,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 
 % Subsections.
-%
+% 
 % normally calls numberedsubseczzz:
 \outer\parseargdef\numberedsubsec{\numhead2{#1}}
 \def\numberedsubseczzz#1{%
@@ -6257,7 +6265,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 
 % Subsubsections.
-%
+% 
 % normally numberedsubsubseczzz:
 \outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
 \def\numberedsubsubseczzz#1{%
@@ -6809,12 +6817,8 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % Get ready to use Arabic numerals again
 \def\contentsendroman{%
   \lastnegativepageno = \pageno
-  \global\pageno = \savepageno
-  %
-  % If \romancount > \arabiccount, the contents are at the end of the
-  % document.  Otherwise, advance where the Arabic numerals start for
-  % the page numbers.
-  \ifnum\romancount>\arabiccount\else\global\arabiccount=\pagecount\fi
+  \global\pageno=1
+  \contentsendcount = \pagecount
 }
 
 % Typeset the label for a chapter or appendix for the short contents.
@@ -7319,7 +7323,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % @indentedblock is like @quotation, but indents only on the left and
 % has no optional argument.
-%
+% 
 \makedispenvdef{indentedblock}{\indentedblockstart}
 %
 \def\indentedblockstart{%
@@ -7629,7 +7633,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % @deftypefnnewline on|off says whether the return type of typed functions
 % are printed on their own line.  This affects @deftypefn, @deftypefun,
 % @deftypeop, and @deftypemethod.
-%
+% 
 \parseargdef\deftypefnnewline{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -7797,7 +7801,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
       \tclose{\temp}% typeset the return type
       \ifrettypeownline
         % put return type on its own line; prohibit line break following:
-        \hfil\vadjust{\nobreak}\break
+        \hfil\vadjust{\nobreak}\break  
       \else
         \space  % type on same line, so just followed by a space
       \fi
@@ -7946,7 +7950,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \scantokens{#1@comment}%
   %
   % The \comment is to remove the \newlinechar added by \scantokens, and
-  % can be noticed by \parsearg.  Note \c isn't used because this means cedilla
+  % can be noticed by \parsearg.  Note \c isn't used because this means 
cedilla 
   % in math mode.
 }
 
@@ -8141,7 +8145,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % list to some hook where the argument is to be expanded.  If there are
 % less than 10 arguments that hook is to be replaced by ##N where N
 % is the position in that list, that is to say the macro arguments are to be
-% defined `a la TeX in the macro body.
+% defined `a la TeX in the macro body.  
 %
 % That gets used by \mbodybackslash (above).
 %
@@ -8175,8 +8179,8 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 %
 % Read recursive and nonrecursive macro bodies. (They're different since
 % rec and nonrec macros end differently.)
-%
-% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
+% 
+% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro 
 % body to be transformed.
 % Set \macrobody to the body of the macro, and call \macrodef.
 %
@@ -8210,7 +8214,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % twice the \macarg.BLAH macros does not cost too much processing power.
 \def\parsemmanyargdef@@#1,{%
   \if#1;\let\next=\relax
-  \else
+  \else 
     \let\next=\parsemmanyargdef@@
     \edef\tempb{\eatspaces{#1}}%
     \expandafter\def\expandafter\tempa
@@ -8295,7 +8299,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % Replace arguments by their values in the macro body, and place the result
 % in macro \@tempa.
-%
+% 
 \def\macvalstoargs@{%
   %  To do this we use the property that token registers that are \the'ed
   % within an \edef  expand only once. So we are going to place all argument
@@ -8319,9 +8323,9 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
   }
 
-% Define the named-macro outside of this group and then close this group.
-%
-\def\macargexpandinbody@{%
+% Define the named-macro outside of this group and then close this group. 
+% 
+\def\macargexpandinbody@{% 
   \expandafter
   \endgroup
   \macargdeflist@
@@ -8359,7 +8363,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 
 % Trailing missing arguments are set to empty.
-%
+% 
 \def\setemptyargvalues@{%
   \ifx\paramlist\nilm@
     \let\next\macargexpandinbody@
@@ -8437,7 +8441,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \else % at most 9
     \ifnum\paramno<10\relax
       % @MACNAME sets the context for reading the macro argument
-      % @MACNAME@@ gets the argument, processes backslashes and appends a
+      % @MACNAME@@ gets the argument, processes backslashes and appends a 
       % comma.
       % @MACNAME@@@ removes braces surrounding the argument list.
       % @MACNAME@@@@ scans the macro body with arguments substituted.
@@ -8481,11 +8485,11 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % Call #1 with a list of tokens #2, with any doubled backslashes in #2
 % compressed to one.
 %
-% This implementation works by expansion, and not execution (so we cannot use
-% \def or similar).  This reduces the risk of this failing in contexts where
-% complete expansion is done with no execution (for example, in writing out to
+% This implementation works by expansion, and not execution (so we cannot use 
+% \def or similar).  This reduces the risk of this failing in contexts where 
+% complete expansion is done with no execution (for example, in writing out to 
 % an auxiliary file for an index entry).
-%
+% 
 % State is kept in the input stream: the argument passed to
 % @look_ahead, @gobble_and_check_finish and @add_segment is
 %
@@ -8507,11 +8511,11 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % #3 - NEXT_TOKEN
 % #4 used to look ahead
 %
-% If the next token is not a backslash, process the rest of the argument;
+% If the next token is not a backslash, process the rest of the argument; 
 % otherwise, remove the next token.
 @gdef@look_ahead#1!#2#3#4{%
   @ifx#4\%
-   @expandafter@gobble_and_check_finish
+   @expandafter@gobble_and_check_finish 
   @else
    @expandafter@add_segment
   @fi#1!{#2}#4#4%
@@ -8535,9 +8539,9 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % #3 - NEXT_TOKEN
 % #4 is input stream until next backslash
 %
-% Input stream is either at the start of the argument, or just after a
-% backslash sequence, either a lone backslash, or a doubled backslash.
-% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
+% Input stream is either at the start of the argument, or just after a 
+% backslash sequence, either a lone backslash, or a doubled backslash.  
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish, 
 % finish; otherwise, append to ARG_RESULT the segment of the argument up until
 % the next backslash.  PENDING_BACKSLASH contains a backslash to represent
 % a backslash just before the start of the input stream that has not been
@@ -8549,13 +8553,13 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   % append the pending backslash to the result, followed by the next segment
   @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
   % this @fi is discarded by @look_ahead.
-  % we can't get rid of it with \expandafter because we don't know how
+  % we can't get rid of it with \expandafter because we don't know how 
   % long #4 is.
 }
 
 % #1 - THE_MACRO
 % #2 - ARG_RESULT
-% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the 
 % conditional.
 @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
 
@@ -8567,7 +8571,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % for reading the argument (slightly different in the two cases).  Then,
 % to read the argument, in the whole-line case, it then calls the regular
 % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
-%
+% 
 \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
 \def\braceorlinexxx{%
   \ifx\nchar\bgroup
@@ -8690,7 +8694,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % Used so that the @top node doesn't have to be wrapped in an @ifnottex
 % conditional.
-% \doignore goes to more effort to skip nested conditionals but we don't need
+% \doignore goes to more effort to skip nested conditionals but we don't need 
 % that here.
 \def\omittopnode{%
    \ifx\lastnode\wordTop
@@ -8767,7 +8771,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % automatically in xrefs, if the third arg is not explicitly specified.
 % This was provided as a "secret" @set xref-automatic-section-title
 % variable, now it's official.
-%
+% 
 \parseargdef\xrefautomaticsectiontitle{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -8783,7 +8787,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi\fi
 }
 
-%
+% 
 % @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
 % the node name, #2 the name of the Info cross-reference, #3 the printed
 % node name, #4 the name of the Info file, #5 the name of the printed
@@ -8936,24 +8940,24 @@ might help (with 'rm \jobname.?? \jobname.??s')%
     \fi
   \else
     % node/anchor (non-float) references.
-    %
+    % 
     % If we use \unhbox to print the node names, TeX does not insert
     % empty discretionaries after hyphens, which means that it will not
     % find a line break at a hyphen in a node names.  Since some manuals
     % are best written with fairly long node names, containing hyphens,
     % this is a loss.  Therefore, we give the text of the node name
     % again, so it is as if TeX is seeing it for the first time.
-    %
+    % 
     \ifdim \wd\printedmanualbox > 0pt
       % Cross-manual reference with a printed manual name.
-      %
+      % 
       \crossmanualxref{\cite{\printedmanual\unskip}}%
     %
     \else\ifdim \wd\infofilenamebox > 0pt
       % Cross-manual reference with only an info filename (arg 4), no
       % printed manual name (arg 5).  This is essentially the same as
       % the case above; we output the filename, since we have nothing else.
-      %
+      % 
       \crossmanualxref{\code{\infofilename\unskip}}%
     %
     \else
@@ -8992,20 +8996,20 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \space\putwordpage\tie\refx{#1-pg}}
 
 % Output a cross-manual xref to #1.  Used just above (twice).
-%
+% 
 % Only include the text "Section ``foo'' in" if the foo is neither
 % missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
 % "see The Foo Manual", the idea being to refer to the whole manual.
-%
+% 
 % But, this being TeX, we can't easily compare our node name against the
 % string "Top" while ignoring the possible spaces before and after in
 % the input.  By adding the arbitrary 7sp below, we make it much less
 % likely that a real node name would have the same width as "Top" (e.g.,
 % in a monospaced font).  Hopefully it will never happen in practice.
-%
+% 
 % For the same basic reason, we retypeset the "Top" at every
 % reference, since the current font is indeterminate.
-%
+% 
 \def\crossmanualxref#1{%
   \setbox\toprefbox = \hbox{Top\kern7sp}%
   \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
@@ -9082,9 +9086,9 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi
 }
 
-% This is the macro invoked by entries in the aux file.  Define a control
-% sequence for a cross-reference target (we prepend XR to the control sequence
-% name to avoid collisions).  The value is the page number.  If this is a float
+% This is the macro invoked by entries in the aux file.  Define a control 
+% sequence for a cross-reference target (we prepend XR to the control sequence 
+% name to avoid collisions).  The value is the page number.  If this is a 
float 
 % type, we have more work to do.
 %
 \def\xrdef#1#2{%
@@ -9100,10 +9104,10 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \bgroup
     \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
   \egroup
-  % We put the \gdef inside a group to avoid the definitions building up on
-  % TeX's save stack, which can cause it to run out of space for aux files with
+  % We put the \gdef inside a group to avoid the definitions building up on 
+  % TeX's save stack, which can cause it to run out of space for aux files 
with 
   % thousands of lines.  \gdef doesn't use the save stack, but \csname does
-  % when it defines an unknown control sequence as \relax.
+  % when it defines an unknown control sequence as \relax. 
   %
   % Was that xref control sequence that we just defined for a float?
   \expandafter\iffloat\csname XR\safexrefname\endcsname
@@ -10300,7 +10304,7 @@ directory should work if nowhere else does.}
         \uppercase{.}
       \endgroup
     \else
-      \errhelp = \EMsimple
+      \errhelp = \EMsimple     
       \errmessage{Unicode character U+#1 not supported, sorry}%
     \fi
   \else
@@ -10333,7 +10337,7 @@ directory should work if nowhere else does.}
     \countUTFz = "#1\relax
     \begingroup
       \parseXMLCharref
-
+    
       % Give \u8:... its definition.  The sequence of seven \expandafter's
       % expands after the \gdef three times, e.g.
       %
@@ -10345,7 +10349,7 @@ directory should work if nowhere else does.}
       \expandafter\expandafter
       \expandafter\expandafter
       \expandafter\gdef       \UTFviiiTmp{#2}%
-      %
+      % 
       \expandafter\ifx\csname uni:#1\endcsname \relax \else
        \message{Internal error, already defined: #1}%
       \fi
@@ -10384,7 +10388,7 @@ directory should work if nowhere else does.}
     \divide\countUTFz by 64
     \countUTFy = \countUTFz  % Save to be the future value of \countUTFz.
     \multiply\countUTFz by 64
-
+    
     % \countUTFz is now \countUTFx with the last 5 bits cleared.  Subtract
     % in order to get the last five bits.
     \advance\countUTFx by -\countUTFz
@@ -10419,7 +10423,7 @@ directory should work if nowhere else does.}
 % U+0080..U+00FF = 
https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
 % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
 % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
-%
+% 
 % Many of our renditions are less than wonderful, and all the missing
 % characters are available somewhere.  Loading the necessary fonts
 % awaits user request.  We can't truly support Unicode without
@@ -11664,7 +11668,7 @@ directory should work if nowhere else does.}
 \def\texinfochars{%
   \let< = \activeless
   \let> = \activegtr
-  \let~ = \activetilde
+  \let~ = \activetilde 
   \let^ = \activehat
   \setregularquotes
   \let\b = \strong
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 8fe0a7ca..0c2053f4 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2023-03-29         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * texinfo.tex: Sync from Texinfo.
+
 2023-03-26         Arnold D. Robbins     <arnold@skeeve.com>
 
        * texinfo.tex: Sync from GNULIB.
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
index 204caf74..c0a54919 100644
--- a/doc/texinfo.tex
+++ b/doc/texinfo.tex
@@ -1,9 +1,9 @@
 % texinfo.tex -- TeX macros to handle Texinfo files.
-%
+% 
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2023-03-21.06}
+\def\texinfoversion{2023-03-27.21}
 %
 % Copyright 1985, 1986, 1988, 1990-2023 Free Software Foundation, Inc.
 %
@@ -212,7 +212,7 @@
 % @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
 % aren't perfect, it's not the end of the world, being an error message,
 % after all.
-%
+% 
 \def\errormsg{\begingroup \indexnofonts \doerrormsg}
 \def\doerrormsg#1{\errmessage{#1}}
 
@@ -426,7 +426,7 @@
   }%
 }
 
-% First remove any @comment, then any @c comment.  Pass the result on to
+% First remove any @comment, then any @c comment.  Pass the result on to 
 % \argcheckspaces.
 \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
 \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
@@ -1048,8 +1048,8 @@ where each line of input produces a line of output.}
         end
       end
     }
-    % The -2 in the arguments here gives all the input to TeX catcode 12
-    % (other) or 10 (space), preventing undefined control sequence errors. See
+    % The -2 in the arguments here gives all the input to TeX catcode 12 
+    % (other) or 10 (space), preventing undefined control sequence errors. See 
     % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html
     %
   \endgroup
@@ -1102,27 +1102,33 @@ where each line of input produces a line of output.}
 
 % Output page labels information.
 % See PDF reference v.1.7 p.594, section 8.3.1.
+% Page label ranges must be increasing.
 \ifpdf
 \def\pagelabels{%
   \def\title{0 << /P (T-) /S /D >>}%
-  \edef\roman{\the\romancount << /S /r >>}%
-  \edef\arabic{\the\arabiccount << /S /D >>}%
   %
-  % Page label ranges must be increasing.  Remove any duplicates.
-  % (There is a slight chance of this being wrong if e.g. there is
-  % a @contents but no @titlepage, etc.)
-  %
-  \ifnum\romancount=0 \def\roman{}\fi
-  \ifnum\arabiccount=0 \def\title{}%
-  \else
-    \ifnum\romancount=\arabiccount \def\roman{}\fi
-  \fi
-  %
-  \ifnum\romancount<\arabiccount
-    \pdfcatalog{/PageLabels << /Nums [\title \roman \arabic ] >> }\relax
+  % support @contents at very end of document
+  \ifnum\contentsendcount=\pagecount
+    \ifnum\arabiccount<\romancount
+      \pdfcatalog{/PageLabels << /Nums
+                  [\title
+                   \the\arabiccount << /S /D >>
+                   \the\romancount << /S /r >>
+                  ] >> }\relax
+    \fi
+  % no contents in document
+  \else\ifnum\contentsendcount=0
+    \pdfcatalog{/PageLabels << /Nums
+                [\title
+                 \the\arabiccount << /S /D >>
+                ] >> }\relax
   \else
-    \pdfcatalog{/PageLabels << /Nums [\title \arabic \roman ] >> }\relax
-  \fi
+    \pdfcatalog{/PageLabels << /Nums
+                [\title
+                 \the\romancount << /S /r >>
+                 \the\contentsendcount << /S /D >>
+                ] >> }\relax
+  \fi\fi
 }
 \else
   \let\pagelabels\relax
@@ -1131,6 +1137,8 @@ where each line of input produces a line of output.}
 \newcount\pagecount \pagecount=0
 \newcount\romancount \romancount=0
 \newcount\arabiccount \arabiccount=0
+\newcount\contentsendcount \contentsendcount=0
+
 \ifpdf
   \let\ptxadvancepageno\advancepageno
   \def\advancepageno{%
@@ -1143,7 +1151,7 @@ where each line of input produces a line of output.}
 % for display in the outlines, and in other places.  Thus, we have to
 % double any backslashes.  Otherwise, a name like "\node" will be
 % interpreted as a newline (\n), followed by o, d, e.  Not good.
-%
+% 
 % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
 % related messages.  The final outcome is that it is up to the TeX user
 % to double the backslashes and otherwise make the string valid, so
@@ -1435,7 +1443,7 @@ output) for that.)}
       % We use the node names as the destinations.
       %
       % Currently we prefix the section name with the section number
-      % for chapter and appendix headings only in order to avoid too much
+      % for chapter and appendix headings only in order to avoid too much 
       % horizontal space being required in the PDF viewer.
       \def\numchapentry##1##2##3##4{%
         \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}%
@@ -1458,7 +1466,7 @@ output) for that.)}
       % their "best" equivalent, based on the @documentencoding.  Too
       % much work for too little return.  Just use the ASCII equivalents
       % we use for the index sort strings.
-      %
+      % 
       \indexnofonts
       \setupdatafile
       % We can have normal brace characters in the PDF outlines, unlike
@@ -1684,7 +1692,7 @@ output) for that.)}
       % We use node names as destinations.
       %
       % Currently we prefix the section name with the section number
-      % for chapter and appendix headings only in order to avoid too much
+      % for chapter and appendix headings only in order to avoid too much 
       % horizontal space being required in the PDF viewer.
       \def\partentry##1##2##3##4{}% ignore parts in the outlines
       \def\numchapentry##1##2##3##4{%
@@ -2711,7 +2719,7 @@ end
 }
 
 % Commands to set the quote options.
-%
+% 
 \parseargdef\codequoteundirected{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -2757,7 +2765,7 @@ end
 % If we are in a monospaced environment, however, 1) always use \ttsl,
 % and 2) do not add an italic correction.
 \def\dosmartslant#1#2{%
-  \ifusingtt
+  \ifusingtt 
     {{\ttsl #2}\let\next=\relax}%
     {\def\next{{#1#2}\smartitaliccorrection}}%
   \next
@@ -2936,7 +2944,7 @@ end
   \gdef\codedash{\futurelet\next\codedashfinish}
   \gdef\codedashfinish{%
     \normaldash % always output the dash character itself.
-    %
+    % 
     % Now, output a discretionary to allow a line break, unless
     % (a) the next character is a -, or
     % (b) the preceding character is a -, or
@@ -3042,7 +3050,7 @@ end
         % For pdfTeX and LuaTeX
         \ifurefurlonlylink
           % PDF plus option to not display url, show just arg
-          \unhbox0
+          \unhbox0             
         \else
           % PDF, normally display both arg and url for consistency,
           % visibility, if the pdf is eventually used to print, etc.
@@ -3055,7 +3063,7 @@ end
           % For XeTeX
           \ifurefurlonlylink
             % PDF plus option to not display url, show just arg
-            \unhbox0
+            \unhbox0             
           \else
             % PDF, normally display both arg and url for consistency,
             % visibility, if the pdf is eventually used to print, etc.
@@ -3113,10 +3121,10 @@ end
   }
 }
 
-% By default we'll break after the special characters, but some people like to
-% break before the special chars, so allow that.  Also allow no breaking at
+% By default we'll break after the special characters, but some people like to 
+% break before the special chars, so allow that.  Also allow no breaking at 
 % all, for manual control.
-%
+% 
 \parseargdef\urefbreakstyle{%
   \def\txiarg{#1}%
   \ifx\txiarg\wordnone
@@ -3135,10 +3143,10 @@ end
 \def\wordnone{none}
 
 % Allow a ragged right output to aid breaking long URL's.  There can
-% be a break at the \allowbreak with no extra glue (if the existing stretch in
+% be a break at the \allowbreak with no extra glue (if the existing stretch in 
 % the line is sufficient), a break at the \penalty with extra glue added
 % at the end of the line, or no break at all here.
-%   Changing the value of the penalty and/or the amount of stretch affects how
+%   Changing the value of the penalty and/or the amount of stretch affects how 
 % preferable one choice is over the other.
 \def\urefallowbreak{%
   \penalty0\relax
@@ -3353,7 +3361,7 @@ $$%
 % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
 % Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
 % except specified as a normal braced arg, so no newlines to worry about.
-%
+% 
 \def\outfmtnametex{tex}
 %
 \long\def\inlinefmt#1{\doinlinefmt #1,\finish}
@@ -3361,7 +3369,7 @@ $$%
   \def\inlinefmtname{#1}%
   \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
 }
-%
+% 
 % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
 % FMTNAME is tex, else ELSE-TEXT.
 \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
@@ -3377,7 +3385,7 @@ $$%
 % *right* brace they would have to use a command anyway, so they may as
 % well use a command to get a left brace too.  We could re-use the
 % delimiter character idea from \verb, but it seems like overkill.
-%
+% 
 \long\def\inlineraw{\tex \doinlineraw}
 \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
 \def\doinlinerawtwo#1,#2,\finish{%
@@ -3663,7 +3671,7 @@ $$%
 % for non-CM glyphs.  That is ec* for regular text and tc* for the text
 % companion symbols (LaTeX TS1 encoding).  Both are part of the ec
 % package and follow the same conventions.
-%
+% 
 \def\ecfont{\etcfont{e}}
 \def\tcfont{\etcfont{t}}
 %
@@ -3745,7 +3753,7 @@ $$%
               after the title page.}}%
 \def\setshortcontentsaftertitlepage{%
   \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
-              command; move your @shortcontents and @contents commands if you
+              command; move your @shortcontents and @contents commands if you 
               want the contents after the title page.}}%
 
 \parseargdef\shorttitlepage{%
@@ -3799,7 +3807,7 @@ $$%
 % don't worry much about spacing, ragged right.  This should be used
 % inside a \vbox, and fonts need to be set appropriately first. \par should
 % be specified before the end of the \vbox, since a vbox is a group.
-%
+% 
 \def\raggedtitlesettings{%
   \rm
   \hyphenpenalty=10000
@@ -4625,7 +4633,7 @@ $$%
 % Like \expandablevalue, but completely expandable (the \message in the
 % definition above operates at the execution level of TeX).  Used when
 % writing to auxiliary files, due to the expansion that \write does.
-% If flag is undefined, pass through an unexpanded @value command: maybe it
+% If flag is undefined, pass through an unexpanded @value command: maybe it 
 % will be set by the time it is read back in.
 %
 % NB flag names containing - or _ may not work here.
@@ -4649,7 +4657,7 @@ $$%
 
 % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
 % with @set.
-%
+% 
 % To get the special treatment we need for `@end ifset,' we call
 % \makecond and then redefine.
 %
@@ -4682,7 +4690,7 @@ $$%
 % without the @) is in fact defined.  We can only feasibly check at the
 % TeX level, so something like `mathcode' is going to considered
 % defined even though it is not a Texinfo command.
-%
+% 
 \makecond{ifcommanddefined}
 \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
 %
@@ -4788,7 +4796,7 @@ $$%
 \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
 \def\docodeindexxxx #1{\docind{\indexname}{#1}}
 
-
+
 % \definedummyword defines \#1 as \string\#1\space, thus effectively
 % preventing its expansion.  This is used only for control words,
 % not control letters, because the \space would be incorrect for
@@ -4805,7 +4813,7 @@ $$%
 \def\definedummyword  #1{\def#1{\string#1\space}}%
 \def\definedummyletter#1{\def#1{\string#1}}%
 
-% Used for the aux, toc and index files to prevent expansion of Texinfo
+% Used for the aux, toc and index files to prevent expansion of Texinfo 
 % commands.  Most of the commands are controlled through the
 % \ifdummies conditional.
 %
@@ -5094,7 +5102,7 @@ $$%
   \let\value\indexnofontsvalue
 }
 
-
+
 
 
 % #1 is the index name, #2 is the entry text.
@@ -5135,7 +5143,7 @@ $$%
   \ifx\suffix\indexisfl\def\suffix{f1}\fi
   % Open the file
   \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
-  % Using \immediate above here prevents an object entering into the current
+  % Using \immediate above here prevents an object entering into the current 
   % box, which could confound checks such as those in \safewhatsit for
   % preceding skips.
   \typeout{Writing index file \jobname.\suffix}%
@@ -5187,7 +5195,7 @@ $$%
   \ifx\segment\isfinish
   \else
     %
-    % Fully expand the segment, throwing away any @sortas directives, and
+    % Fully expand the segment, throwing away any @sortas directives, and 
     % trim spaces.
     \edef\trimmed{\segment}%
     \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
@@ -5251,12 +5259,12 @@ $$%
 % the current value of \escapechar.
 \def\escapeisbackslash{\escapechar=`\\}
 
-% Use \ in index files by default.  texi2dvi didn't support @ as the escape
-% character (as it checked for "\entry" in the files, and not "@entry").  When
-% the new version of texi2dvi has had a chance to become more prevalent, then
-% the escape character can change back to @ again.  This should be an easy
-% change to make now because both @ and \ are only used as escape characters in
-% index files, never standing for themselves.
+% Use \ in index files by default.  texi2dvi didn't support @ as the escape 
+% character (as it checked for "\entry" in the files, and not "@entry").  When 
+% the new version of texi2dvi has had a chance to become more prevalent, then 
+% the escape character can change back to @ again.  This should be an easy 
+% change to make now because both @ and \ are only used as escape characters 
in 
+% index files, never standing for themselves. 
 %
 \set txiindexescapeisbackslash
 
@@ -5279,7 +5287,7 @@ $$%
   \def\}{\rbracechar{}}%
   \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
   %
-  % Split the entry into primary entry and any subentries, and get the index
+  % Split the entry into primary entry and any subentries, and get the index 
   % sort key.
   \splitindexentry\indextext
   %
@@ -5460,18 +5468,18 @@ $$%
     \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
       \ifflagclear{txiskipindexfileswithbackslash}{%
 \errmessage{%
-ERROR: A sorted index file in an obsolete format was skipped.
+ERROR: A sorted index file in an obsolete format was skipped.  
 To fix this problem, please upgrade your version of 'texi2dvi'
 or 'texi2pdf' to that at <https://ftp.gnu.org/gnu/texinfo>.
-If you are using an old version of 'texindex' (part of the Texinfo
+If you are using an old version of 'texindex' (part of the Texinfo 
 distribution), you may also need to upgrade to a newer version (at least 6.0).
 You may be able to typeset the index if you run
 'texindex \jobname.\indexname' yourself.
-You could also try setting the 'txiindexescapeisbackslash' flag by
+You could also try setting the 'txiindexescapeisbackslash' flag by 
 running a command like
-'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'.  If you do
+'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'.  If you do 
 this, Texinfo will try to use index files in the old format.
-If you continue to have problems, deleting the index files and starting again
+If you continue to have problems, deleting the index files and starting again 
 might help (with 'rm \jobname.?? \jobname.??s')%
 }%
       }{%
@@ -5544,7 +5552,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   % bottom of a column to reduce an increase in inter-line spacing.
   \nobreak
   \vskip 0pt plus 5\baselineskip
-  \penalty -300
+  \penalty -300 
   \vskip 0pt plus -5\baselineskip
   %
   % Typeset the initial.  Making this add up to a whole number of
@@ -5676,7 +5684,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
       \advance\dimen@ii by 1\dimen@i
       \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
       \ifdim\dimen@ > 0.8\dimen@ii   % due to long index text
-        % Try to split the text roughly evenly.  \dimen@ will be the length of
+        % Try to split the text roughly evenly.  \dimen@ will be the length of 
         % the first line.
         \dimen@ = 0.7\dimen@
         \dimen@ii = \hsize
@@ -5884,7 +5892,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \newbox\balancedcolumns
 \setbox\balancedcolumns=\vbox{shouldnt see this}%
 %
-% Only called for the last of the double column material.  \doublecolumnout
+% Only called for the last of the double column material.  \doublecolumnout 
 % does the others.
 \def\balancecolumns{%
   \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
@@ -5912,7 +5920,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
     }%
     % Now the left column is in box 1, and the right column in box 3.
     %
-    % Check whether the left column has come out higher than the page itself.
+    % Check whether the left column has come out higher than the page itself.  
     % (Note that we have doubled \vsize for the double columns, so
     % the actual height of the page is 0.5\vsize).
     \ifdim2\ht1>\vsize
@@ -6209,7 +6217,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \let\top\unnumbered
 
 % Sections.
-%
+% 
 \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
 \def\seczzz#1{%
   \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
@@ -6232,7 +6240,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 
 % Subsections.
-%
+% 
 % normally calls numberedsubseczzz:
 \outer\parseargdef\numberedsubsec{\numhead2{#1}}
 \def\numberedsubseczzz#1{%
@@ -6257,7 +6265,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 
 % Subsubsections.
-%
+% 
 % normally numberedsubsubseczzz:
 \outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
 \def\numberedsubsubseczzz#1{%
@@ -6809,12 +6817,8 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % Get ready to use Arabic numerals again
 \def\contentsendroman{%
   \lastnegativepageno = \pageno
-  \global\pageno = \savepageno
-  %
-  % If \romancount > \arabiccount, the contents are at the end of the
-  % document.  Otherwise, advance where the Arabic numerals start for
-  % the page numbers.
-  \ifnum\romancount>\arabiccount\else\global\arabiccount=\pagecount\fi
+  \global\pageno=1
+  \contentsendcount = \pagecount
 }
 
 % Typeset the label for a chapter or appendix for the short contents.
@@ -7319,7 +7323,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % @indentedblock is like @quotation, but indents only on the left and
 % has no optional argument.
-%
+% 
 \makedispenvdef{indentedblock}{\indentedblockstart}
 %
 \def\indentedblockstart{%
@@ -7629,7 +7633,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % @deftypefnnewline on|off says whether the return type of typed functions
 % are printed on their own line.  This affects @deftypefn, @deftypefun,
 % @deftypeop, and @deftypemethod.
-%
+% 
 \parseargdef\deftypefnnewline{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -7797,7 +7801,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
       \tclose{\temp}% typeset the return type
       \ifrettypeownline
         % put return type on its own line; prohibit line break following:
-        \hfil\vadjust{\nobreak}\break
+        \hfil\vadjust{\nobreak}\break  
       \else
         \space  % type on same line, so just followed by a space
       \fi
@@ -7946,7 +7950,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \scantokens{#1@comment}%
   %
   % The \comment is to remove the \newlinechar added by \scantokens, and
-  % can be noticed by \parsearg.  Note \c isn't used because this means cedilla
+  % can be noticed by \parsearg.  Note \c isn't used because this means 
cedilla 
   % in math mode.
 }
 
@@ -8141,7 +8145,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % list to some hook where the argument is to be expanded.  If there are
 % less than 10 arguments that hook is to be replaced by ##N where N
 % is the position in that list, that is to say the macro arguments are to be
-% defined `a la TeX in the macro body.
+% defined `a la TeX in the macro body.  
 %
 % That gets used by \mbodybackslash (above).
 %
@@ -8175,8 +8179,8 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 %
 % Read recursive and nonrecursive macro bodies. (They're different since
 % rec and nonrec macros end differently.)
-%
-% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
+% 
+% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro 
 % body to be transformed.
 % Set \macrobody to the body of the macro, and call \macrodef.
 %
@@ -8210,7 +8214,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % twice the \macarg.BLAH macros does not cost too much processing power.
 \def\parsemmanyargdef@@#1,{%
   \if#1;\let\next=\relax
-  \else
+  \else 
     \let\next=\parsemmanyargdef@@
     \edef\tempb{\eatspaces{#1}}%
     \expandafter\def\expandafter\tempa
@@ -8295,7 +8299,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % Replace arguments by their values in the macro body, and place the result
 % in macro \@tempa.
-%
+% 
 \def\macvalstoargs@{%
   %  To do this we use the property that token registers that are \the'ed
   % within an \edef  expand only once. So we are going to place all argument
@@ -8319,9 +8323,9 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
   }
 
-% Define the named-macro outside of this group and then close this group.
-%
-\def\macargexpandinbody@{%
+% Define the named-macro outside of this group and then close this group. 
+% 
+\def\macargexpandinbody@{% 
   \expandafter
   \endgroup
   \macargdeflist@
@@ -8359,7 +8363,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 
 % Trailing missing arguments are set to empty.
-%
+% 
 \def\setemptyargvalues@{%
   \ifx\paramlist\nilm@
     \let\next\macargexpandinbody@
@@ -8437,7 +8441,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \else % at most 9
     \ifnum\paramno<10\relax
       % @MACNAME sets the context for reading the macro argument
-      % @MACNAME@@ gets the argument, processes backslashes and appends a
+      % @MACNAME@@ gets the argument, processes backslashes and appends a 
       % comma.
       % @MACNAME@@@ removes braces surrounding the argument list.
       % @MACNAME@@@@ scans the macro body with arguments substituted.
@@ -8481,11 +8485,11 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % Call #1 with a list of tokens #2, with any doubled backslashes in #2
 % compressed to one.
 %
-% This implementation works by expansion, and not execution (so we cannot use
-% \def or similar).  This reduces the risk of this failing in contexts where
-% complete expansion is done with no execution (for example, in writing out to
+% This implementation works by expansion, and not execution (so we cannot use 
+% \def or similar).  This reduces the risk of this failing in contexts where 
+% complete expansion is done with no execution (for example, in writing out to 
 % an auxiliary file for an index entry).
-%
+% 
 % State is kept in the input stream: the argument passed to
 % @look_ahead, @gobble_and_check_finish and @add_segment is
 %
@@ -8507,11 +8511,11 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % #3 - NEXT_TOKEN
 % #4 used to look ahead
 %
-% If the next token is not a backslash, process the rest of the argument;
+% If the next token is not a backslash, process the rest of the argument; 
 % otherwise, remove the next token.
 @gdef@look_ahead#1!#2#3#4{%
   @ifx#4\%
-   @expandafter@gobble_and_check_finish
+   @expandafter@gobble_and_check_finish 
   @else
    @expandafter@add_segment
   @fi#1!{#2}#4#4%
@@ -8535,9 +8539,9 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % #3 - NEXT_TOKEN
 % #4 is input stream until next backslash
 %
-% Input stream is either at the start of the argument, or just after a
-% backslash sequence, either a lone backslash, or a doubled backslash.
-% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
+% Input stream is either at the start of the argument, or just after a 
+% backslash sequence, either a lone backslash, or a doubled backslash.  
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish, 
 % finish; otherwise, append to ARG_RESULT the segment of the argument up until
 % the next backslash.  PENDING_BACKSLASH contains a backslash to represent
 % a backslash just before the start of the input stream that has not been
@@ -8549,13 +8553,13 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   % append the pending backslash to the result, followed by the next segment
   @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
   % this @fi is discarded by @look_ahead.
-  % we can't get rid of it with \expandafter because we don't know how
+  % we can't get rid of it with \expandafter because we don't know how 
   % long #4 is.
 }
 
 % #1 - THE_MACRO
 % #2 - ARG_RESULT
-% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the 
 % conditional.
 @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
 
@@ -8567,7 +8571,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % for reading the argument (slightly different in the two cases).  Then,
 % to read the argument, in the whole-line case, it then calls the regular
 % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
-%
+% 
 \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
 \def\braceorlinexxx{%
   \ifx\nchar\bgroup
@@ -8690,7 +8694,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % Used so that the @top node doesn't have to be wrapped in an @ifnottex
 % conditional.
-% \doignore goes to more effort to skip nested conditionals but we don't need
+% \doignore goes to more effort to skip nested conditionals but we don't need 
 % that here.
 \def\omittopnode{%
    \ifx\lastnode\wordTop
@@ -8767,7 +8771,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % automatically in xrefs, if the third arg is not explicitly specified.
 % This was provided as a "secret" @set xref-automatic-section-title
 % variable, now it's official.
-%
+% 
 \parseargdef\xrefautomaticsectiontitle{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -8783,7 +8787,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi\fi
 }
 
-%
+% 
 % @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
 % the node name, #2 the name of the Info cross-reference, #3 the printed
 % node name, #4 the name of the Info file, #5 the name of the printed
@@ -8936,24 +8940,24 @@ might help (with 'rm \jobname.?? \jobname.??s')%
     \fi
   \else
     % node/anchor (non-float) references.
-    %
+    % 
     % If we use \unhbox to print the node names, TeX does not insert
     % empty discretionaries after hyphens, which means that it will not
     % find a line break at a hyphen in a node names.  Since some manuals
     % are best written with fairly long node names, containing hyphens,
     % this is a loss.  Therefore, we give the text of the node name
     % again, so it is as if TeX is seeing it for the first time.
-    %
+    % 
     \ifdim \wd\printedmanualbox > 0pt
       % Cross-manual reference with a printed manual name.
-      %
+      % 
       \crossmanualxref{\cite{\printedmanual\unskip}}%
     %
     \else\ifdim \wd\infofilenamebox > 0pt
       % Cross-manual reference with only an info filename (arg 4), no
       % printed manual name (arg 5).  This is essentially the same as
       % the case above; we output the filename, since we have nothing else.
-      %
+      % 
       \crossmanualxref{\code{\infofilename\unskip}}%
     %
     \else
@@ -8992,20 +8996,20 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \space\putwordpage\tie\refx{#1-pg}}
 
 % Output a cross-manual xref to #1.  Used just above (twice).
-%
+% 
 % Only include the text "Section ``foo'' in" if the foo is neither
 % missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
 % "see The Foo Manual", the idea being to refer to the whole manual.
-%
+% 
 % But, this being TeX, we can't easily compare our node name against the
 % string "Top" while ignoring the possible spaces before and after in
 % the input.  By adding the arbitrary 7sp below, we make it much less
 % likely that a real node name would have the same width as "Top" (e.g.,
 % in a monospaced font).  Hopefully it will never happen in practice.
-%
+% 
 % For the same basic reason, we retypeset the "Top" at every
 % reference, since the current font is indeterminate.
-%
+% 
 \def\crossmanualxref#1{%
   \setbox\toprefbox = \hbox{Top\kern7sp}%
   \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
@@ -9082,9 +9086,9 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi
 }
 
-% This is the macro invoked by entries in the aux file.  Define a control
-% sequence for a cross-reference target (we prepend XR to the control sequence
-% name to avoid collisions).  The value is the page number.  If this is a float
+% This is the macro invoked by entries in the aux file.  Define a control 
+% sequence for a cross-reference target (we prepend XR to the control sequence 
+% name to avoid collisions).  The value is the page number.  If this is a 
float 
 % type, we have more work to do.
 %
 \def\xrdef#1#2{%
@@ -9100,10 +9104,10 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \bgroup
     \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
   \egroup
-  % We put the \gdef inside a group to avoid the definitions building up on
-  % TeX's save stack, which can cause it to run out of space for aux files with
+  % We put the \gdef inside a group to avoid the definitions building up on 
+  % TeX's save stack, which can cause it to run out of space for aux files 
with 
   % thousands of lines.  \gdef doesn't use the save stack, but \csname does
-  % when it defines an unknown control sequence as \relax.
+  % when it defines an unknown control sequence as \relax. 
   %
   % Was that xref control sequence that we just defined for a float?
   \expandafter\iffloat\csname XR\safexrefname\endcsname
@@ -10300,7 +10304,7 @@ directory should work if nowhere else does.}
         \uppercase{.}
       \endgroup
     \else
-      \errhelp = \EMsimple
+      \errhelp = \EMsimple     
       \errmessage{Unicode character U+#1 not supported, sorry}%
     \fi
   \else
@@ -10333,7 +10337,7 @@ directory should work if nowhere else does.}
     \countUTFz = "#1\relax
     \begingroup
       \parseXMLCharref
-
+    
       % Give \u8:... its definition.  The sequence of seven \expandafter's
       % expands after the \gdef three times, e.g.
       %
@@ -10345,7 +10349,7 @@ directory should work if nowhere else does.}
       \expandafter\expandafter
       \expandafter\expandafter
       \expandafter\gdef       \UTFviiiTmp{#2}%
-      %
+      % 
       \expandafter\ifx\csname uni:#1\endcsname \relax \else
        \message{Internal error, already defined: #1}%
       \fi
@@ -10384,7 +10388,7 @@ directory should work if nowhere else does.}
     \divide\countUTFz by 64
     \countUTFy = \countUTFz  % Save to be the future value of \countUTFz.
     \multiply\countUTFz by 64
-
+    
     % \countUTFz is now \countUTFx with the last 5 bits cleared.  Subtract
     % in order to get the last five bits.
     \advance\countUTFx by -\countUTFz
@@ -10419,7 +10423,7 @@ directory should work if nowhere else does.}
 % U+0080..U+00FF = 
https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
 % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
 % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
-%
+% 
 % Many of our renditions are less than wonderful, and all the missing
 % characters are available somewhere.  Loading the necessary fonts
 % awaits user request.  We can't truly support Unicode without
@@ -11664,7 +11668,7 @@ directory should work if nowhere else does.}
 \def\texinfochars{%
   \let< = \activeless
   \let> = \activegtr
-  \let~ = \activetilde
+  \let~ = \activetilde 
   \let^ = \activehat
   \setregularquotes
   \let\b = \strong

-----------------------------------------------------------------------

Summary of changes:
 build-aux/ChangeLog   |   4 +
 build-aux/texinfo.tex | 252 +++++++++----------
 doc/ChangeLog         |   6 +
 doc/gawk.info         | 663 +++++++++++++++++++++++++-------------------------
 doc/gawk.texi         |  14 +-
 doc/gawktexi.in       |  14 +-
 doc/texinfo.tex       | 252 +++++++++----------
 extension/ChangeLog   |   5 +
 extension/filefuncs.c |   2 +-
 9 files changed, 625 insertions(+), 587 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]