bug-texinfo
[Top][All Lists]
Advanced

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

Re: pagebreak not generated with empty deftypefuns in texinfo-4.2


From: Karl Berry
Subject: Re: pagebreak not generated with empty deftypefuns in texinfo-4.2
Date: Tue, 4 Jun 2002 09:15:23 -0400

    The functions have prototypes but no description.

Ah.  The lack of a description was causing problems, since 
texinfo.tex puts in a \nobreak after the function header, to keep the
header and body together.  However, if there's nothing but headers ...

Here's the diff.  Also, I put a new version of texinfo.tex on prep
(ftp.gnu.org:gnu/texinfo.tex).

Thanks for the report.

karl


*** texinfo.tex 2002/03/26 16:29:52     2.376
--- texinfo.tex 2002/06/04 13:08:03
***************
*** 3,9 ****
  % Load plain if necessary, i.e., if running under initex.
  \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
  %
! \def\texinfoversion{2002-03-26.08}
  %
  % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
  %               2000, 01, 02 Free Software Foundation, Inc.
--- 3,9 ----
  % Load plain if necessary, i.e., if running under initex.
  \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
  %
! \def\texinfoversion{2002-06-04.06}
  %
  % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
  %               2000, 01, 02 Free Software Foundation, Inc.
***************
*** 4730,4785 ****
  {\df #1}\enskip        % Generate function name
  }
  
! % Actually process the body of a definition
! % #1 should be the terminating control sequence, such as \Edefun.
! % #2 should be the "another name" control sequence, such as \defunx.
! % #3 should be the control sequence that actually processes the header,
! %    such as \defunheader.
! 
! \def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
! \medbreak %
! % Define the end token that this defining construct specifies
! % so that it will exit this group.
! \def#1{\endgraf\endgroup\medbreak}%
! \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
! \parindent=0in
! \advance\leftskip by \defbodyindent
! \exdentamount=\defbodyindent
! \begingroup %
! \catcode 61=\active % 61 is `='
! \obeylines\activeparens\spacesplit#3}
! 
  % #1 is the \E... control sequence to end the definition (which we define).
! % #2 is the \...x control sequence for consecutive fns (which we define).
! % #3 is the control sequence to call to resume processing.
  % #4, delimited by the space, is the class name.
  %
! \def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
! \medbreak %
! % Define the end token that this defining construct specifies
! % so that it will exit this group.
! \def#1{\endgraf\endgroup\medbreak}%
! \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
! \parindent=0in
! \advance\leftskip by \defbodyindent
! \exdentamount=\defbodyindent
! \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
  
  % Used for @deftypemethod and @deftypeivar.
! % #1 is the \E... control sequence to end the definition (which we define).
! % #2 is the \...x control sequence for consecutive fns (which we define).
! % #3 is the control sequence to call to resume processing.
  % #4, delimited by a space, is the class name.
  % #5 is the method's return type.
  %
! \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
!   \medbreak
!   \def#1{\endgraf\endgroup\medbreak}%
    \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
!   \parindent=0in
!   \advance\leftskip by \defbodyindent
!   \exdentamount=\defbodyindent
!   \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
  
  % Used for @deftypeop.  The change from \deftypemethparsebody is an
  % extra argument at the beginning which is the `category', instead of it
--- 4730,4789 ----
  {\df #1}\enskip        % Generate function name
  }
  
! % Common pieces to start any @def...
  % #1 is the \E... control sequence to end the definition (which we define).
! % #2 is the \...x control sequence (which our caller defines).
! % #3 is the control sequence to process the header, such as \defunheader.
! % 
! \def\parsebodycommon#1#2#3{%
!   \begingroup\inENV
!   % If there are two @def commands in a row, we'll have a \nobreak,
!   % which is there to keep the function description together with its
!   % header.  But if there's nothing but headers, we want to allow a
!   % break after all.
!   \ifnum\lastpenalty = 10000 \penalty0 \fi
!   \medbreak
!   %
!   % Define the \E... end token that this defining construct specifies
!   % so that it will exit this group.
!   \def#1{\endgraf\endgroup\medbreak}%
!   %
!   \parindent=0in
!   \advance\leftskip by \defbodyindent
!   \exdentamount=\defbodyindent
! }
! 
! % Process body of @defun, @deffn, @defmac, etc.
! %
! \def\defparsebody#1#2#3{%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
!   \catcode61=\active % 61 is `='
!   \begingroup\obeylines\activeparens
!   \spacesplit#3%
! }
! 
! % #1, #2, #3 are the common arguments (see \defparsebody).
  % #4, delimited by the space, is the class name.
  %
! \def\defmethparsebody#1#2#3#4 {%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
!   \begingroup\obeylines\activeparens
!   \spacesplit{#3{#4}}%
! }
  
  % Used for @deftypemethod and @deftypeivar.
! % #1, #2, #3 are the common arguments (see \defparsebody).
  % #4, delimited by a space, is the class name.
  % #5 is the method's return type.
  %
! \def\deftypemethparsebody#1#2#3#4 #5 {%
!   \parsebodycommon{#1}{#2}{#3}%
    \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
!   \begingroup\obeylines\activeparens
!   \spacesplit{#3{#4}{#5}}%
! }
  
  % Used for @deftypeop.  The change from \deftypemethparsebody is an
  % extra argument at the beginning which is the `category', instead of it
***************
*** 4788,4851 ****
  % input at hand.  Thus also need a control sequence (passed as #5) for
  % the \E... definition to assign the category name to.
  % 
! \def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
!   \medbreak
!   \def#1{\endgraf\endgroup\medbreak}%
    \def#2##1 ##2 ##3 {%
      \def#4{##1}%
      \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
!   \parindent=0in
!   \advance\leftskip by \defbodyindent
!   \exdentamount=\defbodyindent
!   \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
  
! \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
! \medbreak %
! % Define the end token that this defining construct specifies
! % so that it will exit this group.
! \def#1{\endgraf\endgroup\medbreak}%
! \def#2##1 ##2 {\def#4{##1}%
! \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
! \parindent=0in
! \advance\leftskip by \defbodyindent
! \exdentamount=\defbodyindent
! \begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
  
  % These parsing functions are similar to the preceding ones
  % except that they do not make parens into active characters.
  % These are used for "variables" since they have no arguments.
- 
- \def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
- \medbreak %
- % Define the end token that this defining construct specifies
- % so that it will exit this group.
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2{\begingroup\obeylines\spacesplit#3}%
- \parindent=0in
- \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup %
- \catcode 61=\active %
- \obeylines\spacesplit#3}
- 
- % This is used for \def{tp,vr}parsebody.  It could probably be used for
- % some of the others, too, with some judicious conditionals.
  %
! \def\parsebodycommon#1#2#3{%
!   \begingroup\inENV %
!   \medbreak %
!   % Define the end token that this defining construct specifies
!   % so that it will exit this group.
!   \def#1{\endgraf\endgroup\medbreak}%
!   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
!   \parindent=0in
!   \advance\leftskip by \defbodyindent
!   \exdentamount=\defbodyindent
    \begingroup\obeylines
  }
  
  \def\defvrparsebody#1#2#3#4 {%
    \parsebodycommon{#1}{#2}{#3}%
    \spacesplit{#3{#4}}%
  }
  
--- 4792,4840 ----
  % input at hand.  Thus also need a control sequence (passed as #5) for
  % the \E... definition to assign the category name to.
  % 
! \def\deftypeopparsebody#1#2#3#4#5 #6 {%
!   \parsebodycommon{#1}{#2}{#3}%
    \def#2##1 ##2 ##3 {%
      \def#4{##1}%
      \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
!   \begingroup\obeylines\activeparens
!   \spacesplit{#3{#5}{#6}}%
! }
  
! % For @defop.
! \def\defopparsebody #1#2#3#4#5 {%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2##1 ##2 {\def#4{##1}%
!     \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
!   \begingroup\obeylines\activeparens
!   \spacesplit{#3{#5}}%
! }
  
  % These parsing functions are similar to the preceding ones
  % except that they do not make parens into active characters.
  % These are used for "variables" since they have no arguments.
  %
! \def\defvarparsebody #1#2#3{%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2{\begingroup\obeylines\spacesplit#3}%
!   \catcode61=\active %
!   \begingroup\obeylines
!   \spacesplit#3%
! }
! 
! % @defopvar.
! \def\defopvarparsebody #1#2#3#4#5 {%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2##1 ##2 {\def#4{##1}%
!     \begingroup\obeylines\spacesplit{#3{##2}}}%
    \begingroup\obeylines
+   \spacesplit{#3{#5}}%
  }
  
  \def\defvrparsebody#1#2#3#4 {%
    \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
+   \begingroup\obeylines
    \spacesplit{#3{#4}}%
  }
  
***************
*** 4860,4865 ****
--- 4849,4856 ----
  %
  \def\deftpparsebody #1#2#3#4 {%
    \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
+   \begingroup\obeylines
    \spacesplit{\parsetpheaderline{#3{#4}}}\empty
  }
  
***************
*** 4876,4908 ****
    #1{\removeemptybraces#2\relax}{#3}%
  }%
  
- \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
- \medbreak %
- % Define the end token that this defining construct specifies
- % so that it will exit this group.
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2##1 ##2 {\def#4{##1}%
- \begingroup\obeylines\spacesplit{#3{##2}}}%
- \parindent=0in
- \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines\spacesplit{#3{#5}}}
- 
  % Split up #2 at the first space token.
  % call #1 with two arguments:
  %  the first is all of #2 before the space token,
  %  the second is all of #2 after that space token.
  % If #2 contains no space token, all of it is passed as the first arg
  % and the second is passed as empty.
! 
  {\obeylines
  \gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
  \long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
  \ifx\relax #3%
  #1{#2}{}\else #1{#2}{#3#4}\fi}}
  
- % So much for the things common to all kinds of definitions.
- 
  % Define @defun.
  
  % First, define the processing that is wanted for arguments of \defun
--- 4867,4885 ----
    #1{\removeemptybraces#2\relax}{#3}%
  }%
  
  % Split up #2 at the first space token.
  % call #1 with two arguments:
  %  the first is all of #2 before the space token,
  %  the second is all of #2 after that space token.
  % If #2 contains no space token, all of it is passed as the first arg
  % and the second is passed as empty.
! %
  {\obeylines
  \gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
  \long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
  \ifx\relax #3%
  #1{#2}{}\else #1{#2}{#3#4}\fi}}
  
  % Define @defun.
  
  % First, define the processing that is wanted for arguments of \defun



reply via email to

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