changeset 4725:5873a70375fb

update from texinfo
author Karl Berry <karl@freefriends.org>
date Wed, 24 Sep 2003 17:51:55 +0000
parents 41a0cb560dee
children f6c445bbf87c
files config/texinfo.tex
diffstat 1 files changed, 139 insertions(+), 113 deletions(-) [+]
line wrap: on
line diff
--- a/config/texinfo.tex
+++ b/config/texinfo.tex
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2003-09-22.06}
+\def\texinfoversion{2003-09-24.10}
 %
 % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
@@ -3160,73 +3160,96 @@
     \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
   \fi
   {%
-    \count255=\lastpenalty
+    \indexdummies % Must do this here, since \bf, etc expand at this stage
+    \escapechar=`\\
     {%
-      \indexdummies % Must do this here, since \bf, etc expand at this stage
-      \escapechar=`\\
-      {%
-        \let\folio = 0% We will expand all macros now EXCEPT \folio.
-        \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
-        % so it will be output as is; and it will print as backslash.
-        %
-        % The main index entry text.
-        \toks0 = {#2}%
-        %
-        % If third arg is present, precede it with space in sort key.
-        \def\thirdarg{#3}%
-        \ifx\thirdarg\emptymacro \else
-           % If the third (subentry) arg is present, add it to the index
-           % line to write.
-          \toks0 = \expandafter{\the\toks0 \space #3}%
+      \let\folio = 0% We will expand all macros now EXCEPT \folio.
+      \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+      % so it will be output as is; and it will print as backslash.
+      %
+      % The main index entry text.
+      \toks0 = {#2}%
+      %
+      % If third arg is present, precede it with space in sort key.
+      \def\thirdarg{#3}%
+      \ifx\thirdarg\emptymacro \else
+         % If the third (subentry) arg is present, add it to the index
+         % line to write.
+        \toks0 = \expandafter{\the\toks0 \space #3}%
+      \fi
+      %
+      % Process the index entry with all font commands turned off, to
+      % get the string to sort by.
+      {\indexnofonts
+       \edef\temp{\the\toks0}% need full expansion
+       \xdef\indexsorttmp{\temp}%
+      }%
+      %
+      % Set up the complete index entry, with both the sort key and
+      % the original text, including any font commands.  We write
+      % three arguments to \entry to the .?? file (four in the
+      % subentry case), texindex reduces to two when writing the .??s
+      % sorted result.
+      \edef\temp{%
+        \write\csname#1indfile\endcsname{%
+          \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
+      }%
+      %
+      % If a skip is the last thing on the list now, preserve it
+      % by backing up by \lastskip, doing the \write, then inserting
+      % the skip again.  Otherwise, the whatsit generated by the
+      % \write will make \lastskip zero.  The result is that sequences
+      % like this:
+      % @end defun
+      % @tindex whatever
+      % @defun ...
+      % will have extra space inserted, because the \medbreak in the
+      % start of the @defun won't see the skip inserted by the @end of
+      % the previous defun.
+      %
+      % But don't do any of this if we're not in vertical mode.  We
+      % don't want to do a \vskip and prematurely end a paragraph.
+      %
+      % Avoid page breaks due to these extra skips, too.
+      %
+      \iflinks
+        \ifvmode
+          % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+          \skip0 = \lastskip
+          \count255 = \lastpenalty
+          %
+          % If \lastskip is nonzero, that means the last item was a
+          % skip.  And since a skip is discardable, that means this
+          % -\skip0 glue we're inserting is preceded by a
+          % non-discardable item, therefore it is not a potential
+          % breakpoint, therefore no \nobreak needed.
+          \ifdim\lastskip = 0pt \else \vskip-\skip0 \fi
         \fi
         %
-        % Process the index entry with all font commands turned off, to
-        % get the string to sort by.
-        {\indexnofonts
-         \edef\temp{\the\toks0}% need full expansion
-         \xdef\indexsorttmp{\temp}%
-        }%
-        %
-        % Set up the complete index entry, with both the sort key and
-        % the original text, including any font commands.  We write
-        % three arguments to \entry to the .?? file (four in the
-        % subentry case), texindex reduces to two when writing the .??s
-        % sorted result.
-        \edef\temp{%
-          \write\csname#1indfile\endcsname{%
-            \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
-        }%
+        \temp  % do the write
         %
-        % If a skip is the last thing on the list now, preserve it
-        % by backing up by \lastskip, doing the \write, then inserting
-        % the skip again.  Otherwise, the whatsit generated by the
-        % \write will make \lastskip zero.  The result is that sequences
-        % like this:
-        % @end defun
-        % @tindex whatever
-        % @defun ...
-        % will have extra space inserted, because the \medbreak in the
-        % start of the @defun won't see the skip inserted by the @end of
-        % the previous defun.
-        %
-        % But don't do any of this if we're not in vertical mode.  We
-        % don't want to do a \vskip and prematurely end a paragraph.
-        %
-        % Avoid page breaks due to these extra skips, too.
-        %
-        \iflinks
-          \ifvmode
-            \skip0 = \lastskip
-            \ifdim\lastskip = 0pt \else \nobreak\vskip-\skip0 \fi
-          \fi
-          %
-          \temp % do the write
-          %
-          \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
+        \ifvmode
+           \ifdim\skip0 = 0pt
+             % if \lastskip was zero, perhaps the last item was a
+             % penalty, and perhaps it was >=10000, e.g., a \nobreak.
+             % In that case, we want to re-insert the penalty; since we
+             % just inserted a non-discardable item, any following glue
+             % (such as a \parskip) would be a breakpoint.  For example:
+             %   @deffn deffn-whatever
+             %   @vindex index-whatever
+             %   Description.
+             % would allow a break between the index-whatever whatsit
+             % and the "Description." paragraph.
+             \ifnum\count255>9999 \nobreak \fi
+           \else
+             % On the other hand, if we had a nonzero \lastskip,
+             % this make-up glue would be preceded by a non-discardable item
+             % (the whatsit from the \write), we must insert a \nobreak.
+             \nobreak\vskip\skip0
+           \fi
         \fi
-      }%
+      \fi
     }%
-    \penalty\count255
   }%
 }
 
@@ -3649,61 +3672,46 @@
 % #2 is text for heading
 \def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
 \ifcase\absseclevel
-  \chapterzzz{#2}
-\or
-  \seczzz{#2}
-\or
-  \numberedsubseczzz{#2}
-\or
-  \numberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \chapterzzz{#2}
+      \chapterzzz{#2}%
+  \or \seczzz{#2}%
+  \or \numberedsubseczzz{#2}%
+  \or \numberedsubsubseczzz{#2}%
   \else
-    \numberedsubsubseczzz{#2}
+    \ifnum \absseclevel<0 \chapterzzz{#2}%
+    \else \numberedsubsubseczzz{#2}%
+    \fi
   \fi
-\fi
-\suppressfirstparagraphindent
+  \suppressfirstparagraphindent
 }
 
 % like \numhead, but chooses appendix heading levels
 \def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
 \ifcase\absseclevel
-  \appendixzzz{#2}
-\or
-  \appendixsectionzzz{#2}
-\or
-  \appendixsubseczzz{#2}
-\or
-  \appendixsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \appendixzzz{#2}
+      \appendixzzz{#2}%
+  \or \appendixsectionzzz{#2}%
+  \or \appendixsubseczzz{#2}%
+  \or \appendixsubsubseczzz{#2}%
   \else
-    \appendixsubsubseczzz{#2}
+    \ifnum \absseclevel<0 \appendixzzz{#2}%
+    \else \appendixsubsubseczzz{#2}%
+    \fi
   \fi
-\fi
-\suppressfirstparagraphindent
+  \suppressfirstparagraphindent
 }
 
 % like \numhead, but chooses numberless heading levels
 \def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \unnumberedzzz{#2}
-\or
-  \unnumberedseczzz{#2}
-\or
-  \unnumberedsubseczzz{#2}
-\or
-  \unnumberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \unnumberedzzz{#2}
+  \ifcase\absseclevel
+      \unnumberedzzz{#2}%
+  \or \unnumberedseczzz{#2}%
+  \or \unnumberedsubseczzz{#2}%
+  \or \unnumberedsubsubseczzz{#2}%
   \else
-    \unnumberedsubsubseczzz{#2}
+    \ifnum \absseclevel<0 \unnumberedzzz{#2}%
+    \else \unnumberedsubsubseczzz{#2}%
+    \fi
   \fi
-\fi
-\suppressfirstparagraphindent
+  \suppressfirstparagraphindent
 }
 
 % @chapter, @appendix, @unnumbered.
@@ -4118,11 +4126,24 @@
   }%
   % Add extra space after the heading -- half of whatever came above it.
   % Don't allow stretch, though.
-  \nobreak \kern .5 \csname #2headingskip\endcsname
+  \kern .5 \csname #2headingskip\endcsname
+  %
+  % Do not let the kern be a potential breakpoint, as it would be if it
+  % was followed by glue.
+  \nobreak
   %
   % We'll almost certainly start a paragraph next, so don't let that
-  % glue accumulate.  Avoid a break.
-  \nobreak \vskip-\parskip
+  % glue accumulate.  (Not a breakpoint because it's preceded by a
+  % discardable item.)
+  \vskip-\parskip
+  %
+  % This \nobreak is purely so the last item on the list is a \penalty
+  % of 10000.  This is so other code, for instance \parsebodycommon, can
+  % check for and avoid allowing breakpoints.  Otherwise, it would
+  % insert a valid breakpoint between:
+  %   @section sec-whatever
+  %   @deffn def-whatever
+  \nobreak
 }
 
 
@@ -4310,17 +4331,17 @@
 \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
 
 % Subsections.
-\let\numsubsecentry=\numsecentry
-\let\appsubsecentry=\numsecentry
-\let\unnsubsecentry=\unnsecentry
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
 
 % And subsubsections.
-\let\numsubsubsecentry=\numsecentry
-\let\appsubsubsecentry=\numsecentry
-\let\unnsubsubsecentry=\unnsecentry
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
 
 % This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
+\newdimen\tocindent \tocindent = 2pc
 
 % Now for the actual typesetting. In all these, #1 is the text and #2 is the
 % page number.
@@ -5051,7 +5072,12 @@
   % commands insert a \penalty10000, and we don't want to allow a break
   % between a section heading and a defun.
   \ifnum\lastpenalty=10002 \penalty0 \fi
-  \medbreak
+  %
+  % Similarly, after a section heading, do not allow a break.
+  % But do insert the glue.
+  \ifnum\lastpenalty<10000 \medbreak
+  \else \medskip  % preceded by discardable penalty, so not a breakpoint
+  \fi
   %
   % Define the \E... end token that this defining construct specifies
   % so that it will exit this group.