diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2023-03-29 20:24:51 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2023-03-29 20:24:51 +0300 |
commit | 3d7e2e99724fdb52daabcd39f1ee6cffe70ee75f (patch) | |
tree | fe26929db389228a7e756b3e5c132933300995c8 | |
parent | 82ac553dbf186f5056cfb3955efdbab692d19813 (diff) | |
parent | 2a1050120ada686a6bdfeee494eb0ad7eef67f5c (diff) | |
download | gawk-3d7e2e99724fdb52daabcd39f1ee6cffe70ee75f.tar.gz |
Merge branch 'gawk-5.2-stable'
-rw-r--r-- | build-aux/ChangeLog | 4 | ||||
-rw-r--r-- | build-aux/texinfo.tex | 252 | ||||
-rw-r--r-- | doc/ChangeLog | 6 | ||||
-rw-r--r-- | doc/gawk.info | 663 | ||||
-rw-r--r-- | doc/gawk.texi | 14 | ||||
-rw-r--r-- | doc/gawktexi.in | 14 | ||||
-rw-r--r-- | doc/texinfo.tex | 252 | ||||
-rw-r--r-- | extension/ChangeLog | 5 | ||||
-rw-r--r-- | extension/filefuncs.c | 2 |
9 files changed, 625 insertions, 587 deletions
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 526dad5d..07425432 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +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> * texinfo.tex: Sync from GNULIB. diff --git a/doc/gawk.info b/doc/gawk.info index 87f9eb34..7f1de2d5 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -15486,8 +15486,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) @@ -30945,18 +30948,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 @@ -39848,330 +39851,330 @@ Node: Function Caveats669709 Ref: Function Caveats-Footnote-1671804 Node: Return Statement671928 Node: Dynamic Typing674983 -Node: Indirect Calls677259 -Node: Functions Summary688418 -Node: Library Functions691195 -Ref: Library Functions-Footnote-1694743 -Ref: Library Functions-Footnote-2694886 -Node: Library Names695061 -Ref: Library Names-Footnote-1698855 -Ref: Library Names-Footnote-2699082 -Node: General Functions699178 -Node: Strtonum Function700372 -Node: Assert Function703454 -Node: Round Function706906 -Node: Cliff Random Function708484 -Node: Ordinal Functions709517 -Ref: Ordinal Functions-Footnote-1712626 -Ref: Ordinal Functions-Footnote-2712878 -Node: Join Function713092 -Ref: Join Function-Footnote-1714895 -Node: Getlocaltime Function715099 -Node: Readfile Function718873 -Node: Shell Quoting720902 -Node: Isnumeric Function722358 -Node: Data File Management723770 -Node: Filetrans Function724402 -Node: Rewind Function728696 -Node: File Checking730675 -Ref: File Checking-Footnote-1732047 -Node: Empty Files732254 -Node: Ignoring Assigns734321 -Node: Getopt Function735895 -Ref: Getopt Function-Footnote-1751729 -Node: Passwd Functions751941 -Ref: Passwd Functions-Footnote-1761123 -Node: Group Functions761211 -Ref: Group Functions-Footnote-1769349 -Node: Walking Arrays769562 -Node: Library Functions Summary772610 -Node: Library Exercises774034 -Node: Sample Programs774521 -Node: Running Examples775303 -Node: Clones776055 -Node: Cut Program777327 -Node: Egrep Program787768 -Node: Id Program797085 -Node: Split Program807199 -Ref: Split Program-Footnote-1817434 -Node: Tee Program817621 -Node: Uniq Program820530 -Node: Wc Program828395 -Node: Bytes vs. Characters828790 -Node: Using extensions830392 -Node: wc program831172 -Node: Miscellaneous Programs836178 -Node: Dupword Program837407 -Node: Alarm Program839470 -Node: Translate Program844383 -Ref: Translate Program-Footnote-1849124 -Node: Labels Program849402 -Ref: Labels Program-Footnote-1852843 -Node: Word Sorting852935 -Node: History Sorting857129 -Node: Extract Program859404 -Node: Simple Sed867673 -Node: Igawk Program870889 -Ref: Igawk Program-Footnote-1886136 -Ref: Igawk Program-Footnote-2886342 -Ref: Igawk Program-Footnote-3886472 -Node: Anagram Program886599 -Node: Signature Program889695 -Node: Programs Summary890947 -Node: Programs Exercises892205 -Ref: Programs Exercises-Footnote-1896521 -Node: Advanced Features896607 -Node: Nondecimal Data899101 -Node: Boolean Typed Values900731 -Node: Array Sorting902706 -Node: Controlling Array Traversal903435 -Ref: Controlling Array Traversal-Footnote-1911942 -Node: Array Sorting Functions912064 -Ref: Array Sorting Functions-Footnote-1918183 -Node: Two-way I/O918391 -Ref: Two-way I/O-Footnote-1926386 -Ref: Two-way I/O-Footnote-2926577 -Node: TCP/IP Networking926659 -Node: Profiling929839 -Node: Persistent Memory939549 -Ref: Persistent Memory-Footnote-1948507 -Node: Extension Philosophy948638 -Node: Advanced Features Summary950173 -Node: Internationalization952443 -Node: I18N and L10N954149 -Node: Explaining gettext954844 -Ref: Explaining gettext-Footnote-1960997 -Ref: Explaining gettext-Footnote-2961192 -Node: Programmer i18n961357 -Ref: Programmer i18n-Footnote-1966470 -Node: Translator i18n966519 -Node: String Extraction967355 -Ref: String Extraction-Footnote-1968533 -Node: Printf Ordering968631 -Ref: Printf Ordering-Footnote-1971493 -Node: I18N Portability971561 -Ref: I18N Portability-Footnote-1974135 -Node: I18N Example974206 -Ref: I18N Example-Footnote-1977606 -Ref: I18N Example-Footnote-2977682 -Node: Gawk I18N977799 -Node: I18N Summary978455 -Node: Debugger979856 -Node: Debugging980880 -Node: Debugging Concepts981329 -Node: Debugging Terms983155 -Node: Awk Debugging985768 -Ref: Awk Debugging-Footnote-1986745 -Node: Sample Debugging Session986885 -Node: Debugger Invocation987437 -Node: Finding The Bug989066 -Node: List of Debugger Commands995752 -Node: Breakpoint Control997129 -Node: Debugger Execution Control1000961 -Node: Viewing And Changing Data1004441 -Node: Execution Stack1008179 -Node: Debugger Info1009860 -Node: Miscellaneous Debugger Commands1014159 -Node: Readline Support1019412 -Node: Limitations1020358 -Node: Debugging Summary1023002 -Node: Namespaces1024305 -Node: Global Namespace1025432 -Node: Qualified Names1026877 -Node: Default Namespace1027912 -Node: Changing The Namespace1028687 -Node: Naming Rules1030381 -Node: Internal Name Management1032296 -Node: Namespace Example1033366 -Node: Namespace And Features1035949 -Node: Namespace Summary1037406 -Node: Arbitrary Precision Arithmetic1038919 -Node: Computer Arithmetic1040438 -Ref: table-numeric-ranges1044255 -Ref: table-floating-point-ranges1044753 -Ref: Computer Arithmetic-Footnote-11045412 -Node: Math Definitions1045471 -Ref: table-ieee-formats1048516 -Node: MPFR features1049090 -Node: MPFR On Parole1049543 -Ref: MPFR On Parole-Footnote-11050387 -Node: MPFR Intro1050546 -Node: FP Math Caution1052236 -Ref: FP Math Caution-Footnote-11053310 -Node: Inexactness of computations1053687 -Node: Inexact representation1054718 -Node: Comparing FP Values1056101 -Node: Errors accumulate1057359 -Node: Strange values1058826 -Ref: Strange values-Footnote-11061492 -Node: Getting Accuracy1061597 -Node: Try To Round1064334 -Node: Setting precision1065241 -Ref: table-predefined-precision-strings1065946 -Node: Setting the rounding mode1067831 -Ref: table-gawk-rounding-modes1068213 -Ref: Setting the rounding mode-Footnote-11072271 -Node: Arbitrary Precision Integers1072454 -Ref: Arbitrary Precision Integers-Footnote-11075666 -Node: Checking for MPFR1075822 -Node: POSIX Floating Point Problems1077312 -Ref: POSIX Floating Point Problems-Footnote-11082176 -Node: Floating point summary1082214 -Node: Dynamic Extensions1084478 -Node: Extension Intro1086077 -Node: Plugin License1087385 -Node: Extension Mechanism Outline1088198 -Ref: figure-load-extension1088649 -Ref: figure-register-new-function1090234 -Ref: figure-call-new-function1091344 -Node: Extension API Description1093468 -Node: Extension API Functions Introduction1095197 -Ref: table-api-std-headers1097095 -Node: General Data Types1101559 -Ref: General Data Types-Footnote-11110727 -Node: Memory Allocation Functions1111042 -Ref: Memory Allocation Functions-Footnote-11115767 -Node: Constructor Functions1115866 -Node: API Ownership of MPFR and GMP Values1119771 -Node: Registration Functions1121332 -Node: Extension Functions1122036 -Node: Exit Callback Functions1127612 -Node: Extension Version String1128931 -Node: Input Parsers1129626 -Node: Output Wrappers1144270 -Node: Two-way processors1149118 -Node: Printing Messages1151479 -Ref: Printing Messages-Footnote-11152693 -Node: Updating ERRNO1152848 -Node: Requesting Values1153647 -Ref: table-value-types-returned1154400 -Node: Accessing Parameters1155509 -Node: Symbol Table Access1156793 -Node: Symbol table by name1157309 -Ref: Symbol table by name-Footnote-11160520 -Node: Symbol table by cookie1160652 -Ref: Symbol table by cookie-Footnote-11164933 -Node: Cached values1164997 -Ref: Cached values-Footnote-11168641 -Node: Array Manipulation1168798 -Ref: Array Manipulation-Footnote-11169901 -Node: Array Data Types1169938 -Ref: Array Data Types-Footnote-11172760 -Node: Array Functions1172860 -Node: Flattening Arrays1177889 -Node: Creating Arrays1184941 -Node: Redirection API1189791 -Node: Extension API Variables1192812 -Node: Extension Versioning1193537 -Ref: gawk-api-version1193974 -Node: Extension GMP/MPFR Versioning1195762 -Node: Extension API Informational Variables1197468 -Node: Extension API Boilerplate1198629 -Node: Changes from API V11202765 -Node: Finding Extensions1204399 -Node: Extension Example1204974 -Node: Internal File Description1205798 -Node: Internal File Ops1210122 -Ref: Internal File Ops-Footnote-11221680 -Node: Using Internal File Ops1221828 -Ref: Using Internal File Ops-Footnote-11224259 -Node: Extension Samples1224537 -Node: Extension Sample File Functions1226106 -Node: Extension Sample Fnmatch1234244 -Node: Extension Sample Fork1235839 -Node: Extension Sample Inplace1237115 -Node: Extension Sample Ord1240787 -Node: Extension Sample Readdir1241663 -Ref: table-readdir-file-types1242560 -Node: Extension Sample Revout1243698 -Node: Extension Sample Rev2way1244295 -Node: Extension Sample Read write array1245047 -Node: Extension Sample Readfile1248321 -Node: Extension Sample Time1249452 -Node: Extension Sample API Tests1251742 -Node: gawkextlib1252250 -Node: Extension summary1255286 -Node: Extension Exercises1259144 -Node: Language History1260422 -Node: V7/SVR3.11262136 -Node: SVR41264486 -Node: POSIX1266018 -Node: BTL1267443 -Node: POSIX/GNU1268212 -Node: Feature History1274743 -Node: Common Extensions1294309 -Node: Ranges and Locales1295678 -Ref: Ranges and Locales-Footnote-11300479 -Ref: Ranges and Locales-Footnote-21300506 -Ref: Ranges and Locales-Footnote-31300745 -Node: Contributors1300968 -Node: History summary1307173 -Node: Installation1308619 -Node: Gawk Distribution1309583 -Node: Getting1310075 -Node: Extracting1311074 -Node: Distribution contents1312786 -Node: Unix Installation1320866 -Node: Quick Installation1321688 -Node: Compiling with MPFR1324234 -Node: Shell Startup Files1324940 -Node: Additional Configuration Options1326097 -Node: Configuration Philosophy1328484 -Node: Compiling from Git1330986 -Node: Building the Documentation1331545 -Node: Non-Unix Installation1332957 -Node: PC Installation1333433 -Node: PC Binary Installation1334306 -Node: PC Compiling1335211 -Node: PC Using1336389 -Node: Cygwin1340117 -Node: MSYS1341373 -Node: OpenVMS Installation1342005 -Node: OpenVMS Compilation1342686 -Ref: OpenVMS Compilation-Footnote-11344169 -Node: OpenVMS Dynamic Extensions1344231 -Node: OpenVMS Installation Details1345867 -Node: OpenVMS Running1348302 -Node: OpenVMS GNV1352439 -Node: Bugs1353194 -Node: Bug definition1354118 -Node: Bug address1357769 -Node: Usenet1361360 -Node: Performance bugs1362591 -Node: Asking for help1365609 -Node: Maintainers1367600 -Node: Other Versions1368627 -Node: Installation summary1377559 -Node: Notes1378943 -Node: Compatibility Mode1379753 -Node: Additions1380575 -Node: Accessing The Source1381520 -Node: Adding Code1383055 -Node: New Ports1390191 -Node: Derived Files1394701 -Ref: Derived Files-Footnote-11400548 -Ref: Derived Files-Footnote-21400583 -Ref: Derived Files-Footnote-31401200 -Node: Future Extensions1401314 -Node: Implementation Limitations1401986 -Node: Extension Design1403228 -Node: Old Extension Problems1404392 -Ref: Old Extension Problems-Footnote-11405968 -Node: Extension New Mechanism Goals1406029 -Ref: Extension New Mechanism Goals-Footnote-11409525 -Node: Extension Other Design Decisions1409726 -Node: Extension Future Growth1411925 -Node: Notes summary1412549 -Node: Basic Concepts1413762 -Node: Basic High Level1414447 -Ref: figure-general-flow1414729 -Ref: figure-process-flow1415436 -Ref: Basic High Level-Footnote-11418837 -Node: Basic Data Typing1419026 -Node: Glossary1422444 -Node: Copying1455566 -Node: GNU Free Documentation License1493327 -Node: Index1518650 +Node: Indirect Calls677380 +Node: Functions Summary688539 +Node: Library Functions691316 +Ref: Library Functions-Footnote-1694864 +Ref: Library Functions-Footnote-2695007 +Node: Library Names695182 +Ref: Library Names-Footnote-1698976 +Ref: Library Names-Footnote-2699203 +Node: General Functions699299 +Node: Strtonum Function700493 +Node: Assert Function703575 +Node: Round Function707027 +Node: Cliff Random Function708605 +Node: Ordinal Functions709638 +Ref: Ordinal Functions-Footnote-1712747 +Ref: Ordinal Functions-Footnote-2712999 +Node: Join Function713213 +Ref: Join Function-Footnote-1715016 +Node: Getlocaltime Function715220 +Node: Readfile Function718994 +Node: Shell Quoting721023 +Node: Isnumeric Function722479 +Node: Data File Management723891 +Node: Filetrans Function724523 +Node: Rewind Function728817 +Node: File Checking730796 +Ref: File Checking-Footnote-1732168 +Node: Empty Files732375 +Node: Ignoring Assigns734442 +Node: Getopt Function736016 +Ref: Getopt Function-Footnote-1751850 +Node: Passwd Functions752062 +Ref: Passwd Functions-Footnote-1761244 +Node: Group Functions761332 +Ref: Group Functions-Footnote-1769470 +Node: Walking Arrays769683 +Node: Library Functions Summary772731 +Node: Library Exercises774155 +Node: Sample Programs774642 +Node: Running Examples775424 +Node: Clones776176 +Node: Cut Program777448 +Node: Egrep Program787889 +Node: Id Program797206 +Node: Split Program807320 +Ref: Split Program-Footnote-1817555 +Node: Tee Program817742 +Node: Uniq Program820651 +Node: Wc Program828516 +Node: Bytes vs. Characters828911 +Node: Using extensions830513 +Node: wc program831293 +Node: Miscellaneous Programs836299 +Node: Dupword Program837528 +Node: Alarm Program839591 +Node: Translate Program844504 +Ref: Translate Program-Footnote-1849245 +Node: Labels Program849523 +Ref: Labels Program-Footnote-1852964 +Node: Word Sorting853056 +Node: History Sorting857250 +Node: Extract Program859525 +Node: Simple Sed867794 +Node: Igawk Program871010 +Ref: Igawk Program-Footnote-1886257 +Ref: Igawk Program-Footnote-2886463 +Ref: Igawk Program-Footnote-3886593 +Node: Anagram Program886720 +Node: Signature Program889816 +Node: Programs Summary891068 +Node: Programs Exercises892326 +Ref: Programs Exercises-Footnote-1896642 +Node: Advanced Features896728 +Node: Nondecimal Data899222 +Node: Boolean Typed Values900852 +Node: Array Sorting902827 +Node: Controlling Array Traversal903556 +Ref: Controlling Array Traversal-Footnote-1912063 +Node: Array Sorting Functions912185 +Ref: Array Sorting Functions-Footnote-1918304 +Node: Two-way I/O918512 +Ref: Two-way I/O-Footnote-1926507 +Ref: Two-way I/O-Footnote-2926698 +Node: TCP/IP Networking926780 +Node: Profiling929960 +Node: Persistent Memory939670 +Ref: Persistent Memory-Footnote-1948628 +Node: Extension Philosophy948759 +Node: Advanced Features Summary950294 +Node: Internationalization952564 +Node: I18N and L10N954270 +Node: Explaining gettext954965 +Ref: Explaining gettext-Footnote-1961118 +Ref: Explaining gettext-Footnote-2961313 +Node: Programmer i18n961478 +Ref: Programmer i18n-Footnote-1966591 +Node: Translator i18n966640 +Node: String Extraction967476 +Ref: String Extraction-Footnote-1968654 +Node: Printf Ordering968752 +Ref: Printf Ordering-Footnote-1971614 +Node: I18N Portability971682 +Ref: I18N Portability-Footnote-1974256 +Node: I18N Example974327 +Ref: I18N Example-Footnote-1977727 +Ref: I18N Example-Footnote-2977803 +Node: Gawk I18N977920 +Node: I18N Summary978576 +Node: Debugger979977 +Node: Debugging981001 +Node: Debugging Concepts981450 +Node: Debugging Terms983276 +Node: Awk Debugging985889 +Ref: Awk Debugging-Footnote-1986866 +Node: Sample Debugging Session987006 +Node: Debugger Invocation987558 +Node: Finding The Bug989187 +Node: List of Debugger Commands995873 +Node: Breakpoint Control997250 +Node: Debugger Execution Control1001082 +Node: Viewing And Changing Data1004562 +Node: Execution Stack1008300 +Node: Debugger Info1009981 +Node: Miscellaneous Debugger Commands1014280 +Node: Readline Support1019533 +Node: Limitations1020479 +Node: Debugging Summary1023123 +Node: Namespaces1024426 +Node: Global Namespace1025553 +Node: Qualified Names1026998 +Node: Default Namespace1028033 +Node: Changing The Namespace1028808 +Node: Naming Rules1030502 +Node: Internal Name Management1032417 +Node: Namespace Example1033487 +Node: Namespace And Features1036070 +Node: Namespace Summary1037527 +Node: Arbitrary Precision Arithmetic1039040 +Node: Computer Arithmetic1040559 +Ref: table-numeric-ranges1044376 +Ref: table-floating-point-ranges1044874 +Ref: Computer Arithmetic-Footnote-11045533 +Node: Math Definitions1045592 +Ref: table-ieee-formats1048637 +Node: MPFR features1049211 +Node: MPFR On Parole1049664 +Ref: MPFR On Parole-Footnote-11050508 +Node: MPFR Intro1050667 +Node: FP Math Caution1052357 +Ref: FP Math Caution-Footnote-11053431 +Node: Inexactness of computations1053808 +Node: Inexact representation1054839 +Node: Comparing FP Values1056222 +Node: Errors accumulate1057480 +Node: Strange values1058947 +Ref: Strange values-Footnote-11061613 +Node: Getting Accuracy1061718 +Node: Try To Round1064455 +Node: Setting precision1065362 +Ref: table-predefined-precision-strings1066067 +Node: Setting the rounding mode1067952 +Ref: table-gawk-rounding-modes1068334 +Ref: Setting the rounding mode-Footnote-11072392 +Node: Arbitrary Precision Integers1072575 +Ref: Arbitrary Precision Integers-Footnote-11075787 +Node: Checking for MPFR1075943 +Node: POSIX Floating Point Problems1077433 +Ref: POSIX Floating Point Problems-Footnote-11082297 +Node: Floating point summary1082335 +Node: Dynamic Extensions1084599 +Node: Extension Intro1086198 +Node: Plugin License1087506 +Node: Extension Mechanism Outline1088319 +Ref: figure-load-extension1088770 +Ref: figure-register-new-function1090355 +Ref: figure-call-new-function1091465 +Node: Extension API Description1093589 +Node: Extension API Functions Introduction1095318 +Ref: table-api-std-headers1097216 +Node: General Data Types1101680 +Ref: General Data Types-Footnote-11110848 +Node: Memory Allocation Functions1111163 +Ref: Memory Allocation Functions-Footnote-11115888 +Node: Constructor Functions1115987 +Node: API Ownership of MPFR and GMP Values1119892 +Node: Registration Functions1121453 +Node: Extension Functions1122157 +Node: Exit Callback Functions1127733 +Node: Extension Version String1129052 +Node: Input Parsers1129747 +Node: Output Wrappers1144391 +Node: Two-way processors1149239 +Node: Printing Messages1151600 +Ref: Printing Messages-Footnote-11152814 +Node: Updating ERRNO1152969 +Node: Requesting Values1153768 +Ref: table-value-types-returned1154521 +Node: Accessing Parameters1155630 +Node: Symbol Table Access1156914 +Node: Symbol table by name1157430 +Ref: Symbol table by name-Footnote-11160641 +Node: Symbol table by cookie1160773 +Ref: Symbol table by cookie-Footnote-11165054 +Node: Cached values1165118 +Ref: Cached values-Footnote-11168762 +Node: Array Manipulation1168919 +Ref: Array Manipulation-Footnote-11170022 +Node: Array Data Types1170059 +Ref: Array Data Types-Footnote-11172881 +Node: Array Functions1172981 +Node: Flattening Arrays1178010 +Node: Creating Arrays1185062 +Node: Redirection API1189912 +Node: Extension API Variables1192933 +Node: Extension Versioning1193658 +Ref: gawk-api-version1194095 +Node: Extension GMP/MPFR Versioning1195883 +Node: Extension API Informational Variables1197589 +Node: Extension API Boilerplate1198750 +Node: Changes from API V11202886 +Node: Finding Extensions1204520 +Node: Extension Example1205095 +Node: Internal File Description1205919 +Node: Internal File Ops1210243 +Ref: Internal File Ops-Footnote-11221801 +Node: Using Internal File Ops1221949 +Ref: Using Internal File Ops-Footnote-11224380 +Node: Extension Samples1224658 +Node: Extension Sample File Functions1226227 +Node: Extension Sample Fnmatch1234365 +Node: Extension Sample Fork1235960 +Node: Extension Sample Inplace1237236 +Node: Extension Sample Ord1240908 +Node: Extension Sample Readdir1241784 +Ref: table-readdir-file-types1242681 +Node: Extension Sample Revout1243819 +Node: Extension Sample Rev2way1244416 +Node: Extension Sample Read write array1245168 +Node: Extension Sample Readfile1248442 +Node: Extension Sample Time1249573 +Node: Extension Sample API Tests1251863 +Node: gawkextlib1252371 +Node: Extension summary1255407 +Node: Extension Exercises1259265 +Node: Language History1260543 +Node: V7/SVR3.11262257 +Node: SVR41264607 +Node: POSIX1266139 +Node: BTL1267564 +Node: POSIX/GNU1268333 +Node: Feature History1274864 +Node: Common Extensions1294430 +Node: Ranges and Locales1295799 +Ref: Ranges and Locales-Footnote-11300600 +Ref: Ranges and Locales-Footnote-21300627 +Ref: Ranges and Locales-Footnote-31300866 +Node: Contributors1301089 +Node: History summary1307294 +Node: Installation1308740 +Node: Gawk Distribution1309704 +Node: Getting1310196 +Node: Extracting1311195 +Node: Distribution contents1312907 +Node: Unix Installation1320987 +Node: Quick Installation1321809 +Node: Compiling with MPFR1324355 +Node: Shell Startup Files1325061 +Node: Additional Configuration Options1326218 +Node: Configuration Philosophy1328605 +Node: Compiling from Git1331107 +Node: Building the Documentation1331666 +Node: Non-Unix Installation1333078 +Node: PC Installation1333554 +Node: PC Binary Installation1334427 +Node: PC Compiling1335332 +Node: PC Using1336510 +Node: Cygwin1340238 +Node: MSYS1341494 +Node: OpenVMS Installation1342126 +Node: OpenVMS Compilation1342807 +Ref: OpenVMS Compilation-Footnote-11344290 +Node: OpenVMS Dynamic Extensions1344352 +Node: OpenVMS Installation Details1345988 +Node: OpenVMS Running1348423 +Node: OpenVMS GNV1352560 +Node: Bugs1353315 +Node: Bug definition1354239 +Node: Bug address1357890 +Node: Usenet1361481 +Node: Performance bugs1362712 +Node: Asking for help1365730 +Node: Maintainers1367721 +Node: Other Versions1368748 +Node: Installation summary1377680 +Node: Notes1379064 +Node: Compatibility Mode1379874 +Node: Additions1380696 +Node: Accessing The Source1381641 +Node: Adding Code1383176 +Node: New Ports1390312 +Node: Derived Files1394822 +Ref: Derived Files-Footnote-11400669 +Ref: Derived Files-Footnote-21400704 +Ref: Derived Files-Footnote-31401321 +Node: Future Extensions1401435 +Node: Implementation Limitations1402107 +Node: Extension Design1403349 +Node: Old Extension Problems1404513 +Ref: Old Extension Problems-Footnote-11406089 +Node: Extension New Mechanism Goals1406150 +Ref: Extension New Mechanism Goals-Footnote-11409646 +Node: Extension Other Design Decisions1409847 +Node: Extension Future Growth1412046 +Node: Notes summary1412670 +Node: Basic Concepts1413883 +Node: Basic High Level1414568 +Ref: figure-general-flow1414850 +Ref: figure-process-flow1415557 +Ref: Basic High Level-Footnote-11418958 +Node: Basic Data Typing1419147 +Node: Glossary1422565 +Node: Copying1455687 +Node: GNU Free Documentation License1493448 +Node: Index1518771 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index b72cf068..673cfe4b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -22165,6 +22165,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. @@ -42399,18 +42405,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 e6556684..7eb91428 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -21146,6 +21146,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. @@ -41311,18 +41317,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/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 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 |