3 |
% Load plain if necessary, i.e., if running under initex. |
% Load plain if necessary, i.e., if running under initex. |
4 |
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
5 |
% |
% |
6 |
\def\texinfoversion{2002-03-26.08} |
\def\texinfoversion{2002-06-04.06} |
7 |
% |
% |
8 |
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, |
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, |
9 |
% 2000, 01, 02 Free Software Foundation, Inc. |
% 2000, 01, 02 Free Software Foundation, Inc. |
4730 |
{\df #1}\enskip % Generate function name |
{\df #1}\enskip % Generate function name |
4731 |
} |
} |
4732 |
|
|
4733 |
% Actually process the body of a definition |
% Common pieces to start any @def... |
|
% #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} |
|
|
|
|
4734 |
% #1 is the \E... control sequence to end the definition (which we define). |
% #1 is the \E... control sequence to end the definition (which we define). |
4735 |
% #2 is the \...x control sequence for consecutive fns (which we define). |
% #2 is the \...x control sequence (which our caller defines). |
4736 |
% #3 is the control sequence to call to resume processing. |
% #3 is the control sequence to process the header, such as \defunheader. |
4737 |
|
% |
4738 |
|
\def\parsebodycommon#1#2#3{% |
4739 |
|
\begingroup\inENV |
4740 |
|
% If there are two @def commands in a row, we'll have a \nobreak, |
4741 |
|
% which is there to keep the function description together with its |
4742 |
|
% header. But if there's nothing but headers, we want to allow a |
4743 |
|
% break after all. |
4744 |
|
\ifnum\lastpenalty = 10000 \penalty0 \fi |
4745 |
|
\medbreak |
4746 |
|
% |
4747 |
|
% Define the \E... end token that this defining construct specifies |
4748 |
|
% so that it will exit this group. |
4749 |
|
\def#1{\endgraf\endgroup\medbreak}% |
4750 |
|
% |
4751 |
|
\parindent=0in |
4752 |
|
\advance\leftskip by \defbodyindent |
4753 |
|
\exdentamount=\defbodyindent |
4754 |
|
} |
4755 |
|
|
4756 |
|
% Process body of @defun, @deffn, @defmac, etc. |
4757 |
|
% |
4758 |
|
\def\defparsebody#1#2#3{% |
4759 |
|
\parsebodycommon{#1}{#2}{#3}% |
4760 |
|
\def#2{\begingroup\obeylines\activeparens\spacesplit#3}% |
4761 |
|
\catcode61=\active % 61 is `=' |
4762 |
|
\begingroup\obeylines\activeparens |
4763 |
|
\spacesplit#3% |
4764 |
|
} |
4765 |
|
|
4766 |
|
% #1, #2, #3 are the common arguments (see \defparsebody). |
4767 |
% #4, delimited by the space, is the class name. |
% #4, delimited by the space, is the class name. |
4768 |
% |
% |
4769 |
\def\defmethparsebody#1#2#3#4 {\begingroup\inENV % |
\def\defmethparsebody#1#2#3#4 {% |
4770 |
\medbreak % |
\parsebodycommon{#1}{#2}{#3}% |
4771 |
% Define the end token that this defining construct specifies |
\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% |
4772 |
% so that it will exit this group. |
\begingroup\obeylines\activeparens |
4773 |
\def#1{\endgraf\endgroup\medbreak}% |
\spacesplit{#3{#4}}% |
4774 |
\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% |
} |
|
\parindent=0in |
|
|
\advance\leftskip by \defbodyindent |
|
|
\exdentamount=\defbodyindent |
|
|
\begingroup\obeylines\activeparens\spacesplit{#3{#4}}} |
|
4775 |
|
|
4776 |
% Used for @deftypemethod and @deftypeivar. |
% Used for @deftypemethod and @deftypeivar. |
4777 |
% #1 is the \E... control sequence to end the definition (which we define). |
% #1, #2, #3 are the common arguments (see \defparsebody). |
|
% #2 is the \...x control sequence for consecutive fns (which we define). |
|
|
% #3 is the control sequence to call to resume processing. |
|
4778 |
% #4, delimited by a space, is the class name. |
% #4, delimited by a space, is the class name. |
4779 |
% #5 is the method's return type. |
% #5 is the method's return type. |
4780 |
% |
% |
4781 |
\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV |
\def\deftypemethparsebody#1#2#3#4 #5 {% |
4782 |
\medbreak |
\parsebodycommon{#1}{#2}{#3}% |
|
\def#1{\endgraf\endgroup\medbreak}% |
|
4783 |
\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% |
\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% |
4784 |
\parindent=0in |
\begingroup\obeylines\activeparens |
4785 |
\advance\leftskip by \defbodyindent |
\spacesplit{#3{#4}{#5}}% |
4786 |
\exdentamount=\defbodyindent |
} |
|
\begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}} |
|
4787 |
|
|
4788 |
% Used for @deftypeop. The change from \deftypemethparsebody is an |
% Used for @deftypeop. The change from \deftypemethparsebody is an |
4789 |
% extra argument at the beginning which is the `category', instead of it |
% extra argument at the beginning which is the `category', instead of it |
4792 |
% input at hand. Thus also need a control sequence (passed as #5) for |
% input at hand. Thus also need a control sequence (passed as #5) for |
4793 |
% the \E... definition to assign the category name to. |
% the \E... definition to assign the category name to. |
4794 |
% |
% |
4795 |
\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV |
\def\deftypeopparsebody#1#2#3#4#5 #6 {% |
4796 |
\medbreak |
\parsebodycommon{#1}{#2}{#3}% |
|
\def#1{\endgraf\endgroup\medbreak}% |
|
4797 |
\def#2##1 ##2 ##3 {% |
\def#2##1 ##2 ##3 {% |
4798 |
\def#4{##1}% |
\def#4{##1}% |
4799 |
\begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}% |
\begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}% |
4800 |
\parindent=0in |
\begingroup\obeylines\activeparens |
4801 |
\advance\leftskip by \defbodyindent |
\spacesplit{#3{#5}{#6}}% |
4802 |
\exdentamount=\defbodyindent |
} |
|
\begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}} |
|
4803 |
|
|
4804 |
\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % |
% For @defop. |
4805 |
\medbreak % |
\def\defopparsebody #1#2#3#4#5 {% |
4806 |
% Define the end token that this defining construct specifies |
\parsebodycommon{#1}{#2}{#3}% |
4807 |
% so that it will exit this group. |
\def#2##1 ##2 {\def#4{##1}% |
4808 |
\def#1{\endgraf\endgroup\medbreak}% |
\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% |
4809 |
\def#2##1 ##2 {\def#4{##1}% |
\begingroup\obeylines\activeparens |
4810 |
\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% |
\spacesplit{#3{#5}}% |
4811 |
\parindent=0in |
} |
|
\advance\leftskip by \defbodyindent |
|
|
\exdentamount=\defbodyindent |
|
|
\begingroup\obeylines\activeparens\spacesplit{#3{#5}}} |
|
4812 |
|
|
4813 |
% These parsing functions are similar to the preceding ones |
% These parsing functions are similar to the preceding ones |
4814 |
% except that they do not make parens into active characters. |
% except that they do not make parens into active characters. |
4815 |
% These are used for "variables" since they have no arguments. |
% 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. |
|
4816 |
% |
% |
4817 |
\def\parsebodycommon#1#2#3{% |
\def\defvarparsebody #1#2#3{% |
4818 |
\begingroup\inENV % |
\parsebodycommon{#1}{#2}{#3}% |
4819 |
\medbreak % |
\def#2{\begingroup\obeylines\spacesplit#3}% |
4820 |
% Define the end token that this defining construct specifies |
\catcode61=\active % |
4821 |
% so that it will exit this group. |
\begingroup\obeylines |
4822 |
\def#1{\endgraf\endgroup\medbreak}% |
\spacesplit#3% |
4823 |
\def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% |
} |
4824 |
\parindent=0in |
|
4825 |
\advance\leftskip by \defbodyindent |
% @defopvar. |
4826 |
\exdentamount=\defbodyindent |
\def\defopvarparsebody #1#2#3#4#5 {% |
4827 |
|
\parsebodycommon{#1}{#2}{#3}% |
4828 |
|
\def#2##1 ##2 {\def#4{##1}% |
4829 |
|
\begingroup\obeylines\spacesplit{#3{##2}}}% |
4830 |
\begingroup\obeylines |
\begingroup\obeylines |
4831 |
|
\spacesplit{#3{#5}}% |
4832 |
} |
} |
4833 |
|
|
4834 |
\def\defvrparsebody#1#2#3#4 {% |
\def\defvrparsebody#1#2#3#4 {% |
4835 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4836 |
|
\def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% |
4837 |
|
\begingroup\obeylines |
4838 |
\spacesplit{#3{#4}}% |
\spacesplit{#3{#4}}% |
4839 |
} |
} |
4840 |
|
|
4849 |
% |
% |
4850 |
\def\deftpparsebody #1#2#3#4 {% |
\def\deftpparsebody #1#2#3#4 {% |
4851 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4852 |
|
\def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% |
4853 |
|
\begingroup\obeylines |
4854 |
\spacesplit{\parsetpheaderline{#3{#4}}}\empty |
\spacesplit{\parsetpheaderline{#3{#4}}}\empty |
4855 |
} |
} |
4856 |
|
|
4867 |
#1{\removeemptybraces#2\relax}{#3}% |
#1{\removeemptybraces#2\relax}{#3}% |
4868 |
}% |
}% |
4869 |
|
|
|
\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}}} |
|
|
|
|
4870 |
% Split up #2 at the first space token. |
% Split up #2 at the first space token. |
4871 |
% call #1 with two arguments: |
% call #1 with two arguments: |
4872 |
% the first is all of #2 before the space token, |
% the first is all of #2 before the space token, |
4873 |
% the second is all of #2 after that space token. |
% the second is all of #2 after that space token. |
4874 |
% If #2 contains no space token, all of it is passed as the first arg |
% If #2 contains no space token, all of it is passed as the first arg |
4875 |
% and the second is passed as empty. |
% and the second is passed as empty. |
4876 |
|
% |
4877 |
{\obeylines |
{\obeylines |
4878 |
\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% |
\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% |
4879 |
\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% |
\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% |
4880 |
\ifx\relax #3% |
\ifx\relax #3% |
4881 |
#1{#2}{}\else #1{#2}{#3#4}\fi}} |
#1{#2}{}\else #1{#2}{#3#4}\fi}} |
4882 |
|
|
|
% So much for the things common to all kinds of definitions. |
|
|
|
|
4883 |
% Define @defun. |
% Define @defun. |
4884 |
|
|
4885 |
% First, define the processing that is wanted for arguments of \defun |
% First, define the processing that is wanted for arguments of \defun |