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-10-13.14} |
\def\texinfoversion{2002-10-31.17} |
7 |
% |
% |
8 |
% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, |
% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, |
9 |
% 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
% 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
68 |
\everyjob{\message{[Texinfo version \texinfoversion]}% |
\everyjob{\message{[Texinfo version \texinfoversion]}% |
69 |
\catcode`+=\active \catcode`\_=\active} |
\catcode`+=\active \catcode`\_=\active} |
70 |
|
|
71 |
|
\message{Basics,} |
72 |
|
\chardef\other=12 |
73 |
|
|
74 |
|
% We never want plain's outer \+ definition in Texinfo. |
75 |
|
% For @tex, we can use \tabalign. |
76 |
|
\let\+ = \relax |
77 |
|
|
78 |
% Save some parts of plain tex whose names we will redefine. |
% Save some parts of plain tex whose names we will redefine. |
79 |
\let\ptexb=\b |
\let\ptexb=\b |
80 |
\let\ptexbullet=\bullet |
\let\ptexbullet=\bullet |
85 |
\let\ptexend=\end |
\let\ptexend=\end |
86 |
\let\ptexequiv=\equiv |
\let\ptexequiv=\equiv |
87 |
\let\ptexexclam=\! |
\let\ptexexclam=\! |
88 |
|
\let\ptexgtr=> |
89 |
|
\let\ptexhat=^ |
90 |
\let\ptexi=\i |
\let\ptexi=\i |
91 |
\let\ptexlbrace=\{ |
\let\ptexlbrace=\{ |
92 |
|
\let\ptexless=< |
93 |
|
\let\ptexplus=+ |
94 |
\let\ptexrbrace=\} |
\let\ptexrbrace=\} |
95 |
\let\ptexstar=\* |
\let\ptexstar=\* |
96 |
\let\ptext=\t |
\let\ptext=\t |
97 |
|
|
|
% We never want plain's outer \+ definition in Texinfo. |
|
|
% For @tex, we can use \tabalign. |
|
|
\let\+ = \relax |
|
|
|
|
|
\message{Basics,} |
|
|
\chardef\other=12 |
|
|
|
|
98 |
% If this character appears in an error message or help string, it |
% If this character appears in an error message or help string, it |
99 |
% starts a new line in the output. |
% starts a new line in the output. |
100 |
\newlinechar = `^^J |
\newlinechar = `^^J |
163 |
|
|
164 |
% Sometimes it is convenient to have everything in the transcript file |
% Sometimes it is convenient to have everything in the transcript file |
165 |
% and nothing on the terminal. We don't just call \tracingall here, |
% and nothing on the terminal. We don't just call \tracingall here, |
166 |
% since that produces some useless output on the terminal. |
% since that produces some useless output on the terminal. We also make |
167 |
|
% some effort to order the tracing commands to reduce output in the log |
168 |
|
% file; cf. trace.sty in LaTeX. |
169 |
% |
% |
170 |
\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% |
\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% |
171 |
\ifx\eTeXversion\undefined |
\def\loggingall{% |
172 |
\def\loggingall{\tracingcommands2 \tracingstats2 |
\tracingstats2 |
173 |
\tracingpages1 \tracingoutput1 \tracinglostchars1 |
\tracingpages1 |
174 |
\tracingmacros2 \tracingparagraphs1 \tracingrestores1 |
\tracinglostchars2 % 2 gives us more in etex |
175 |
\showboxbreadth\maxdimen\showboxdepth\maxdimen |
\tracingparagraphs1 |
176 |
}% |
\tracingoutput1 |
177 |
\else |
\tracingmacros2 |
178 |
\def\loggingall{\tracingcommands3 \tracingstats2 |
\tracingrestores1 |
179 |
\tracingpages1 \tracingoutput1 \tracinglostchars1 |
\showboxbreadth\maxdimen \showboxdepth\maxdimen |
180 |
\tracingmacros2 \tracingparagraphs1 \tracingrestores1 |
\ifx\eTeXversion\undefined\else % etex gives us more logging |
181 |
\tracingscantokens1 \tracingassigns1 \tracingifs1 |
\tracingscantokens1 |
182 |
\tracinggroups1 \tracingnesting2 |
\tracingifs1 |
183 |
\showboxbreadth\maxdimen\showboxdepth\maxdimen |
\tracinggroups1 |
184 |
|
\tracingnesting2 |
185 |
|
\tracingassigns1 |
186 |
|
\fi |
187 |
|
\tracingcommands3 % 3 gives us more in etex |
188 |
|
\errorcontextlines\maxdimen |
189 |
}% |
}% |
|
\fi |
|
190 |
|
|
191 |
% add check for \lastpenalty to plain's definitions. If the last thing |
% add check for \lastpenalty to plain's definitions. If the last thing |
192 |
% we did was a \nobreak, we don't want to insert more space. |
% we did was a \nobreak, we don't want to insert more space. |
451 |
} |
} |
452 |
|
|
453 |
|
|
|
% Single-spacing is done by various environments (specifically, in |
|
|
% \nonfillstart and \quotations). |
|
|
\newskip\singlespaceskip \singlespaceskip = 12.5pt |
|
|
\def\singlespace{% |
|
|
% Why was this kern here? It messes up equalizing space above and below |
|
|
% environments. --karl, 6may93 |
|
|
%{\advance \baselineskip by -\singlespaceskip |
|
|
%\kern \baselineskip}% |
|
|
\setleading\singlespaceskip |
|
|
} |
|
|
|
|
454 |
%% Simple single-character @ commands |
%% Simple single-character @ commands |
455 |
|
|
456 |
% @@ prints an @ |
% @@ prints an @ |
845 |
% to set catcodes according to plain TeX first, to allow for subscripts, |
% to set catcodes according to plain TeX first, to allow for subscripts, |
846 |
% superscripts, special math chars, etc. |
% superscripts, special math chars, etc. |
847 |
% |
% |
|
% @math does not do math typesetting in section titles, index |
|
|
% entries, and other such contexts where the catcodes are set before |
|
|
% @math gets a chance to work. This could perhaps be fixed, but for now |
|
|
% at least we can have real math in the main text, where it's needed most. |
|
|
% |
|
848 |
\let\implicitmath = $%$ font-lock fix |
\let\implicitmath = $%$ font-lock fix |
849 |
% |
% |
850 |
% One complication: _ usually means subscripts, but it could also mean |
% One complication: _ usually means subscripts, but it could also mean |
870 |
\tex |
\tex |
871 |
\mathcode`\_="8000 \mathunderscore |
\mathcode`\_="8000 \mathunderscore |
872 |
\let\\ = \mathbackslash |
\let\\ = \mathbackslash |
873 |
|
\mathactive |
874 |
\implicitmath\finishmath} |
\implicitmath\finishmath} |
875 |
\def\finishmath#1{#1\implicitmath\Etex} |
\def\finishmath#1{#1\implicitmath\Etex} |
876 |
|
|
877 |
|
% Some active characters (such as <) are spaced differently in math. |
878 |
|
% We have to reset their definitions in case the @math was an |
879 |
|
% argument to a command which set the catcodes (such as @item or @section). |
880 |
|
% |
881 |
|
{ |
882 |
|
\catcode`^ = \active |
883 |
|
\catcode`< = \active |
884 |
|
\catcode`> = \active |
885 |
|
\catcode`+ = \active |
886 |
|
\gdef\mathactive{% |
887 |
|
\let^ = \ptexhat |
888 |
|
\let< = \ptexless |
889 |
|
\let> = \ptexgtr |
890 |
|
\let+ = \ptexplus |
891 |
|
} |
892 |
|
} |
893 |
|
|
894 |
% @bullet and @minus need the same treatment as @math, just above. |
% @bullet and @minus need the same treatment as @math, just above. |
895 |
\def\bullet{\implicitmath\ptexbullet\implicitmath} |
\def\bullet{\implicitmath\ptexbullet\implicitmath} |
896 |
\def\minus{\implicitmath-\implicitmath} |
\def\minus{\implicitmath-\implicitmath} |
1370 |
% \smartitalic{ARG} outputs arg in italics, followed by an italic correction |
% \smartitalic{ARG} outputs arg in italics, followed by an italic correction |
1371 |
% unless the following character is such as not to need one. |
% unless the following character is such as not to need one. |
1372 |
\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} |
\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} |
1373 |
\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx} |
\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} |
1374 |
\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx} |
\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} |
1375 |
|
|
1376 |
\let\i=\smartitalic |
\let\i=\smartitalic |
1377 |
\let\var=\smartslanted |
\let\var=\smartslanted |
1892 |
% \parskip glue -- logically it's part of the @item we just started. |
% \parskip glue -- logically it's part of the @item we just started. |
1893 |
\nobreak \vskip-\parskip |
\nobreak \vskip-\parskip |
1894 |
% |
% |
1895 |
% Stop a page break at the \parskip glue coming up. Unfortunately |
% Stop a page break at the \parskip glue coming up. (Unfortunately |
1896 |
% we can't prevent a possible page break at the following |
% we can't prevent a possible page break at the following |
1897 |
% \baselineskip glue. |
% \baselineskip glue.) However, if what follows is an environment |
1898 |
\nobreak |
% such as @example, there will be no \parskip glue; then |
1899 |
|
% the negative vskip we just would cause the example and the item to |
1900 |
|
% crash together. So we use this bizarre value of 10001 as a signal |
1901 |
|
% to \aboveenvbreak to insert \parskip glue after all. |
1902 |
|
% (Possibly there are other commands that could be followed by |
1903 |
|
% @example which need the same treatment, but not section titles; or |
1904 |
|
% maybe section titles are the only special case and they should be |
1905 |
|
% penalty 10001...) |
1906 |
|
\penalty 10001 |
1907 |
\endgroup |
\endgroup |
1908 |
\itemxneedsnegativevskipfalse |
\itemxneedsnegativevskipfalse |
1909 |
\else |
\else |
3951 |
\hangindent = \wd0 % zero if no section number |
\hangindent = \wd0 % zero if no section number |
3952 |
\unhbox0 #3}% |
\unhbox0 #3}% |
3953 |
}% |
}% |
3954 |
\ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak |
% Add extra space after the heading -- either a line space or a |
3955 |
|
% paragraph space, whichever is more. (Some people like to set |
3956 |
|
% \parskip to large values for some reason.) |
3957 |
|
\nobreak |
3958 |
|
\ifdim\parskip>\normalbaselineskip |
3959 |
|
\kern\parskip |
3960 |
|
\else |
3961 |
|
\kern\normalbaselineskip |
3962 |
|
\fi |
3963 |
|
\nobreak |
3964 |
} |
} |
3965 |
|
|
3966 |
|
|
4294 |
% Make spacing and below environment symmetrical. We use \parskip here |
% Make spacing and below environment symmetrical. We use \parskip here |
4295 |
% to help in doing that, since in @example-like environments \parskip |
% to help in doing that, since in @example-like environments \parskip |
4296 |
% is reset to zero; thus the \afterenvbreak inserts no space -- but the |
% is reset to zero; thus the \afterenvbreak inserts no space -- but the |
4297 |
% start of the next paragraph will insert \parskip |
% start of the next paragraph will insert \parskip. |
4298 |
% |
% |
4299 |
\def\aboveenvbreak{{% |
\def\aboveenvbreak{{% |
4300 |
\ifnum\lastpenalty < 10000 |
% =10000 instead of <10000 because of a special case in \itemzzz, q.v. |
4301 |
|
\ifnum \lastpenalty=10000 \else |
4302 |
\advance\envskipamount by \parskip |
\advance\envskipamount by \parskip |
4303 |
\endgraf |
\endgraf |
4304 |
\ifdim\lastskip<\envskipamount |
\ifdim\lastskip<\envskipamount |
4305 |
\removelastskip |
\removelastskip |
4306 |
\penalty-50 |
% it's not a good place to break if the last penalty was \nobreak |
4307 |
|
% or better ... |
4308 |
|
\ifnum\lastpenalty>10000 \else \penalty-50 \fi |
4309 |
\vskip\envskipamount |
\vskip\envskipamount |
4310 |
\fi |
\fi |
4311 |
\fi |
\fi |
4384 |
\inENV % This group ends at the end of the body |
\inENV % This group ends at the end of the body |
4385 |
\hfuzz = 12pt % Don't be fussy |
\hfuzz = 12pt % Don't be fussy |
4386 |
\sepspaces % Make spaces be word-separators rather than space tokens. |
\sepspaces % Make spaces be word-separators rather than space tokens. |
|
\singlespace |
|
4387 |
\let\par = \lisppar % don't ignore blank lines |
\let\par = \lisppar % don't ignore blank lines |
4388 |
\obeylines % each line of input is a line of output |
\obeylines % each line of input is a line of output |
4389 |
\parskip = 0pt |
\parskip = 0pt |
4498 |
\def\quotation{% |
\def\quotation{% |
4499 |
\begingroup\inENV %This group ends at the end of the @quotation body |
\begingroup\inENV %This group ends at the end of the @quotation body |
4500 |
{\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip |
{\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip |
|
\singlespace |
|
4501 |
\parindent=0pt |
\parindent=0pt |
4502 |
% We have retained a nonzero parskip for the environment, since we're |
% We have retained a nonzero parskip for the environment, since we're |
4503 |
% doing normal filling. So to avoid extra space below the environment... |
% doing normal filling. So to avoid extra space below the environment... |
4730 |
\newskip\deflastargmargin \deflastargmargin=18pt |
\newskip\deflastargmargin \deflastargmargin=18pt |
4731 |
|
|
4732 |
\newcount\parencount |
\newcount\parencount |
4733 |
% define \functionparens, which makes ( and ) and & do special things. |
|
4734 |
% \functionparens affects the group it is contained in. |
% We want ()&[] to print specially on the defun line. |
4735 |
|
% |
4736 |
\def\activeparens{% |
\def\activeparens{% |
4737 |
\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active |
\catcode`\(=\active \catcode`\)=\active |
4738 |
\catcode`\[=\active \catcode`\]=\active} |
\catcode`\&=\active |
4739 |
|
\catcode`\[=\active \catcode`\]=\active |
4740 |
|
} |
4741 |
|
|
4742 |
% Make control sequences which act like normal parenthesis chars. |
% Make control sequences which act like normal parenthesis chars. |
4743 |
\let\lparen = ( \let\rparen = ) |
\let\lparen = ( \let\rparen = ) |
4842 |
% which is there to keep the function description together with its |
% which is there to keep the function description together with its |
4843 |
% header. But if there's nothing but headers, we want to allow a |
% header. But if there's nothing but headers, we want to allow a |
4844 |
% break after all. |
% break after all. |
4845 |
\ifnum\lastpenalty = 10000 \penalty0 \fi |
\ifnum\lastpenalty=10000 \penalty0 \fi |
4846 |
\medbreak |
\medbreak |
4847 |
% |
% |
4848 |
% Define the \E... end token that this defining construct specifies |
% Define the \E... end token that this defining construct specifies |
4854 |
\exdentamount=\defbodyindent |
\exdentamount=\defbodyindent |
4855 |
} |
} |
4856 |
|
|
4857 |
|
% Common part of the \...x definitions. |
4858 |
|
% |
4859 |
|
\def\defxbodycommon{% |
4860 |
|
% As with \parsebodycommon above, allow line break if we have multiple |
4861 |
|
% x headers in a row. It's not a great place, though. |
4862 |
|
\ifnum\lastpenalty=10000 \penalty1000 \fi |
4863 |
|
% |
4864 |
|
\begingroup\obeylines |
4865 |
|
} |
4866 |
|
|
4867 |
% Process body of @defun, @deffn, @defmac, etc. |
% Process body of @defun, @deffn, @defmac, etc. |
4868 |
% |
% |
4869 |
\def\defparsebody#1#2#3{% |
\def\defparsebody#1#2#3{% |
4870 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4871 |
\def#2{\begingroup\obeylines\activeparens\spacesplit#3}% |
\def#2{\defxbodycommon \activeparens \spacesplit#3}% |
4872 |
\catcode61=\active % 61 is `=' |
\catcode61=\active % 61 is `=' |
4873 |
\begingroup\obeylines\activeparens |
\begingroup\obeylines\activeparens |
4874 |
\spacesplit#3% |
\spacesplit#3% |
4875 |
} |
} |
4876 |
|
|
4877 |
% #1, #2, #3 are the common arguments (see \defparsebody). |
% #1, #2, #3 are the common arguments (see \parsebodycommon above). |
4878 |
% #4, delimited by the space, is the class name. |
% #4, delimited by the space, is the class name. |
4879 |
% |
% |
4880 |
\def\defmethparsebody#1#2#3#4 {% |
\def\defmethparsebody#1#2#3#4 {% |
4881 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4882 |
\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% |
\def#2##1 {\defxbodycommon \activeparens \spacesplit{#3{##1}}}% |
4883 |
\begingroup\obeylines\activeparens |
\begingroup\obeylines\activeparens |
4884 |
\spacesplit{#3{#4}}% |
% The \empty here prevents misinterpretation of a construct such as |
4885 |
|
% @deffn {whatever} {Enharmonic comma} |
4886 |
|
% See comments at \deftpparsebody, although in our case we don't have |
4887 |
|
% to remove the \empty afterwards, since it is empty. |
4888 |
|
\spacesplit{#3{#4}}\empty |
4889 |
} |
} |
4890 |
|
|
4891 |
% Used for @deftypemethod and @deftypeivar. |
% Used for @deftypemethod and @deftypeivar. |
4895 |
% |
% |
4896 |
\def\deftypemethparsebody#1#2#3#4 #5 {% |
\def\deftypemethparsebody#1#2#3#4 #5 {% |
4897 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4898 |
\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% |
\def#2##1 ##2 {\defxbodycommon \activeparens \spacesplit{#3{##1}{##2}}}% |
4899 |
\begingroup\obeylines\activeparens |
\begingroup\obeylines\activeparens |
4900 |
\spacesplit{#3{#4}{#5}}% |
\spacesplit{#3{#4}{#5}}% |
4901 |
} |
} |
4909 |
% |
% |
4910 |
\def\deftypeopparsebody#1#2#3#4#5 #6 {% |
\def\deftypeopparsebody#1#2#3#4#5 #6 {% |
4911 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4912 |
\def#2##1 ##2 ##3 {% |
\def#2##1 ##2 ##3 {\def#4{##1}% |
4913 |
\def#4{##1}% |
\defxbodycommon \activeparens \spacesplit{#3{##2}{##3}}}% |
|
\begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}% |
|
4914 |
\begingroup\obeylines\activeparens |
\begingroup\obeylines\activeparens |
4915 |
\spacesplit{#3{#5}{#6}}% |
\spacesplit{#3{#5}{#6}}% |
4916 |
} |
} |
4919 |
\def\defopparsebody #1#2#3#4#5 {% |
\def\defopparsebody #1#2#3#4#5 {% |
4920 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4921 |
\def#2##1 ##2 {\def#4{##1}% |
\def#2##1 ##2 {\def#4{##1}% |
4922 |
\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% |
\defxbodycommon \activeparens \spacesplit{#3{##2}}}% |
4923 |
\begingroup\obeylines\activeparens |
\begingroup\obeylines\activeparens |
4924 |
\spacesplit{#3{#5}}% |
\spacesplit{#3{#5}}% |
4925 |
} |
} |
4930 |
% |
% |
4931 |
\def\defvarparsebody #1#2#3{% |
\def\defvarparsebody #1#2#3{% |
4932 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4933 |
\def#2{\begingroup\obeylines\spacesplit#3}% |
\def#2{\defxbodycommon \spacesplit#3}% |
4934 |
\catcode61=\active % |
\catcode61=\active % |
4935 |
\begingroup\obeylines |
\begingroup\obeylines |
4936 |
\spacesplit#3% |
\spacesplit#3% |
4940 |
\def\defopvarparsebody #1#2#3#4#5 {% |
\def\defopvarparsebody #1#2#3#4#5 {% |
4941 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4942 |
\def#2##1 ##2 {\def#4{##1}% |
\def#2##1 ##2 {\def#4{##1}% |
4943 |
\begingroup\obeylines\spacesplit{#3{##2}}}% |
\defxbodycommon \spacesplit{#3{##2}}}% |
4944 |
\begingroup\obeylines |
\begingroup\obeylines |
4945 |
\spacesplit{#3{#5}}% |
\spacesplit{#3{#5}}% |
4946 |
} |
} |
4947 |
|
|
4948 |
\def\defvrparsebody#1#2#3#4 {% |
\def\defvrparsebody#1#2#3#4 {% |
4949 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4950 |
\def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% |
\def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}% |
4951 |
\begingroup\obeylines |
\begingroup\obeylines |
4952 |
\spacesplit{#3{#4}}% |
\spacesplit{#3{#4}}% |
4953 |
} |
} |
4963 |
% |
% |
4964 |
\def\deftpparsebody #1#2#3#4 {% |
\def\deftpparsebody #1#2#3#4 {% |
4965 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4966 |
\def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% |
\def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}% |
4967 |
\begingroup\obeylines |
\begingroup\obeylines |
4968 |
\spacesplit{\parsetpheaderline{#3{#4}}}\empty |
\spacesplit{\parsetpheaderline{#3{#4}}}\empty |
4969 |
} |
} |
4981 |
#1{\removeemptybraces#2\relax}{#3}% |
#1{\removeemptybraces#2\relax}{#3}% |
4982 |
}% |
}% |
4983 |
|
|
4984 |
% Split up #2 at the first space token. |
% Split up #2 (the rest of the input line) at the first space token. |
4985 |
% call #1 with two arguments: |
% call #1 with two arguments: |
4986 |
% the first is all of #2 before the space token, |
% the first is all of #2 before the space token, |
4987 |
% the second is all of #2 after that space token. |
% the second is all of #2 after that space token. |
4988 |
% 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 |
4989 |
% and the second is passed as empty. |
% and the second is passed as empty. |
4990 |
% |
% |
4991 |
{\obeylines |
{\obeylines % |
4992 |
\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% |
\gdef\spacesplit#1#2^^M{\endgroup\spacesplitx{#1}#2 \relax\spacesplitx}% |
4993 |
\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% |
\long\gdef\spacesplitx#1#2 #3#4\spacesplitx{% |
4994 |
\ifx\relax #3% |
\ifx\relax #3% |
4995 |
#1{#2}{}\else #1{#2}{#3#4}\fi}} |
#1{#2}{}% |
4996 |
|
\else % |
4997 |
|
#1{#2}{#3#4}% |
4998 |
|
\fi}% |
4999 |
|
} |
5000 |
|
|
5001 |
% Define @defun. |
% Define @defun. |
5002 |
|
|