aboutsummaryrefslogtreecommitdiffstats
path: root/doc/misc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/misc')
-rw-r--r--doc/misc/texinfo.tex314
1 files changed, 278 insertions, 36 deletions
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index a7f94f96daa..3298298bb9d 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,7 +3,7 @@
3% Load plain if necessary, i.e., if running under initex. 3% Load plain if necessary, i.e., if running under initex.
4\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi 4\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
5% 5%
6\def\texinfoversion{2011-08-14.17} 6\def\texinfoversion{2011-09-23.09}
7% 7%
8% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 8% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
9% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 9% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -3955,13 +3955,13 @@ end
3955% If so, set to same dimension as multitablelinespace. 3955% If so, set to same dimension as multitablelinespace.
3956\ifdim\multitableparskip>\multitablelinespace 3956\ifdim\multitableparskip>\multitablelinespace
3957\global\multitableparskip=\multitablelinespace 3957\global\multitableparskip=\multitablelinespace
3958\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller 3958\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
3959 %% than skip between lines in the table. 3959 % than skip between lines in the table.
3960\fi% 3960\fi%
3961\ifdim\multitableparskip=0pt 3961\ifdim\multitableparskip=0pt
3962\global\multitableparskip=\multitablelinespace 3962\global\multitableparskip=\multitablelinespace
3963\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller 3963\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
3964 %% than skip between lines in the table. 3964 % than skip between lines in the table.
3965\fi} 3965\fi}
3966 3966
3967 3967
@@ -7247,9 +7247,15 @@ end
7247\def\macroxxx#1{% 7247\def\macroxxx#1{%
7248 \getargs{#1}% now \macname is the macname and \argl the arglist 7248 \getargs{#1}% now \macname is the macname and \argl the arglist
7249 \ifx\argl\empty % no arguments 7249 \ifx\argl\empty % no arguments
7250 \paramno=0 7250 \paramno=0\relax
7251 \else 7251 \else
7252 \expandafter\parsemargdef \argl;% 7252 \expandafter\parsemargdef \argl;%
7253 \if\paramno>256\relax
7254 \ifx\eTeXversion\thisisundefined
7255 \errhelp = \EMsimple
7256 \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
7257 \fi
7258 \fi
7253 \fi 7259 \fi
7254 \if1\csname ismacro.\the\macname\endcsname 7260 \if1\csname ismacro.\the\macname\endcsname
7255 \message{Warning: redefining \the\macname}% 7261 \message{Warning: redefining \the\macname}%
@@ -7299,9 +7305,17 @@ end
7299\def\getmacname#1 #2\relax{\macname={#1}} 7305\def\getmacname#1 #2\relax{\macname={#1}}
7300\def\getmacargs#1{\def\argl{#1}} 7306\def\getmacargs#1{\def\argl{#1}}
7301 7307
7308% For macro processing make @ a letter so that we can make Texinfo private macro names.
7309\edef\texiatcatcode{\the\catcode`\@}
7310\catcode `@=11\relax
7311
7302% Parse the optional {params} list. Set up \paramno and \paramlist 7312% Parse the optional {params} list. Set up \paramno and \paramlist
7303% so \defmacro knows what to do. Define \macarg.blah for each blah 7313% so \defmacro knows what to do. Define \macarg.BLAH for each BLAH
7304% in the params list to be ##N where N is the position in that list. 7314% in the params list to some hook where the argument si to be expanded. If
7315% there are less than 10 arguments that hook is to be replaced by ##N where N
7316% is the position in that list, that is to say the macro arguments are to be
7317% defined `a la TeX in the macro body.
7318%
7305% That gets used by \mbodybackslash (above). 7319% That gets used by \mbodybackslash (above).
7306% 7320%
7307% We need to get `macro parameter char #' into several definitions. 7321% We need to get `macro parameter char #' into several definitions.
@@ -7311,12 +7325,33 @@ end
7311% 7325%
7312% The same technique is used to protect \eatspaces till just before 7326% The same technique is used to protect \eatspaces till just before
7313% the macro is used. 7327% the macro is used.
7314 7328%
7329% If there are 10 or more arguments, a different technique is used, where the
7330% hook remains in the body, and when macro is to be expanded the body is
7331% processed again to replace the arguments.
7332%
7333% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
7334% argument N value and then \edef the body (nothing else will expand because of
7335% the catcode regime underwhich the body was input).
7336%
7337% If you compile with TeX (not eTeX), and you have macros with 10 or more
7338% arguments, you need that no macro has more than 256 arguments, otherwise an
7339% error is produced.
7315\def\parsemargdef#1;{% 7340\def\parsemargdef#1;{%
7316 \paramno=0\def\paramlist{}% 7341 \paramno=0\def\paramlist{}%
7317 \let\hash\relax 7342 \let\hash\relax
7318 \let\xeatspaces\relax 7343 \let\xeatspaces\relax
7319 \parsemargdefxxx#1,;,% 7344 \parsemargdefxxx#1,;,%
7345 % In case that there are 10 or more arguments we parse again the arguments
7346 % list to set new definitions for the \macarg.BLAH macros corresponding to
7347 % each BLAH argument. It was anyhow needed to parse already once this list
7348 % in order to count the arguments, and as macros with at most 9 arguments
7349 % are by far more frequent than macro with 10 or more arguments, defining
7350 % twice the \macarg.BLAH macros does not cost too much processing power.
7351 \ifnum\paramno<10\relax\else
7352 \paramno0\relax
7353 \parsemmanyargdef@@#1,;,% 10 or more arguments
7354 \fi
7320} 7355}
7321\def\parsemargdefxxx#1,{% 7356\def\parsemargdefxxx#1,{%
7322 \if#1;\let\next=\relax 7357 \if#1;\let\next=\relax
@@ -7327,16 +7362,205 @@ end
7327 \edef\paramlist{\paramlist\hash\the\paramno,}% 7362 \edef\paramlist{\paramlist\hash\the\paramno,}%
7328 \fi\next} 7363 \fi\next}
7329 7364
7365\def\parsemmanyargdef@@#1,{%
7366 \if#1;\let\next=\relax
7367 \else
7368 \let\next=\parsemmanyargdef@@
7369 \edef\tempb{\eatspaces{#1}}%
7370 \expandafter\def\expandafter\tempa
7371 \expandafter{\csname macarg.\tempb\endcsname}%
7372 % Note that we need some extra \noexpand\noexpand, this is because we
7373 % don't want \the to be expanded in the \parsermacbody as it uses an
7374 % \xdef .
7375 \expandafter\edef\tempa
7376 {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
7377 \advance\paramno by 1\relax
7378 \fi\next}
7379
7330% These two commands read recursive and nonrecursive macro bodies. 7380% These two commands read recursive and nonrecursive macro bodies.
7331% (They're different since rec and nonrec macros end differently.) 7381% (They're different since rec and nonrec macros end differently.)
7332% 7382%
7383
7384\catcode `\@\texiatcatcode
7333\long\def\parsemacbody#1@end macro% 7385\long\def\parsemacbody#1@end macro%
7334{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% 7386{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
7335\long\def\parsermacbody#1@end rmacro% 7387\long\def\parsermacbody#1@end rmacro%
7336{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% 7388{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
7389\catcode `\@=11\relax
7390
7391\let\endargs@\relax
7392\let\nil@\relax
7393\def\nilm@{\nil@}%
7394\long\def\nillm@{\nil@}%
7395
7396% This macro is expanded during the Texinfo macro expansion, not during its
7397% definition. It gets all the arguments values and assigns them to macros
7398% macarg.ARGNAME
7399%
7400% #1 is the macro name
7401% #2 is the list of argument names
7402% #3 is the list of argument values
7403\def\getargvals@#1#2#3{%
7404 \def\macargdeflist@{}%
7405 \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
7406 \def\paramlist{#2,\nil@}%
7407 \def\macroname{#1}%
7408 \begingroup
7409 \macroargctxt
7410 \def\argvaluelist{#3,\nil@}%
7411 \def\@tempa{#3}%
7412 \ifx\@tempa\empty
7413 \setemptyargvalues@
7414 \else
7415 \getargvals@@
7416 \fi
7417}
7337 7418
7338% This defines the macro itself. There are six cases: recursive and 7419%
7339% nonrecursive macros of zero, one, and many arguments. 7420\def\getargvals@@{%
7421 \ifx\paramlist\nilm@
7422 % Some sanity check needed here that \argvaluelist is also empty.
7423 \ifx\argvaluelist\nillm@
7424 \else
7425 \errhelp = \EMsimple
7426 \errmessage{Too many arguments in macro `\macroname'!}%
7427 \fi
7428 \let\next\macargexpandinbody@
7429 \else
7430 \ifx\argvaluelist\nillm@
7431 % No more arguments values passed to macro. Set remaining named-arg
7432 % macros to empty.
7433 \let\next\setemptyargvalues@
7434 \else
7435 % pop current arg name into \@tempb
7436 \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
7437 \expandafter\@tempa\expandafter{\paramlist}%
7438 % pop current argument value into \@tempc
7439 \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
7440 \expandafter\@tempa\expandafter{\argvaluelist}%
7441 % Here \@tempb is the current arg name and \@tempc is the current arg value.
7442 % First place the new argument macro definition into \@tempd
7443 \expandafter\macname\expandafter{\@tempc}%
7444 \expandafter\let\csname macarg.\@tempb\endcsname\relax
7445 \expandafter\def\expandafter\@tempe\expandafter{%
7446 \csname macarg.\@tempb\endcsname}%
7447 \edef\@tempd{\long\def\@tempe{\the\macname}}%
7448 \push@\@tempd\macargdeflist@
7449 \let\next\getargvals@@
7450 \fi
7451 \fi
7452 \next
7453}
7454
7455\def\push@#1#2{%
7456 \expandafter\expandafter\expandafter\def
7457 \expandafter\expandafter\expandafter#2%
7458 \expandafter\expandafter\expandafter{%
7459 \expandafter#1#2}%
7460}
7461
7462% Replace arguments by their values in the macro body, and place the result
7463% in macro \@tempa
7464\def\macvalstoargs@{%
7465 % To do this we use the property that token registers that are \the'ed
7466 % within an \edef expand only once. So we are going to place all argument
7467 % values into respective token registers.
7468 %
7469 % First we save the token context, and initialize argument numbering.
7470 \begingroup
7471 \paramno0\relax
7472 % Then, for each argument number #N, we place the corresponding argument
7473 % value into a new token list register \toks#N
7474 \expandafter\putargsintokens@\saveparamlist@,;,%
7475 % Then, we expand the body so that argument are replaced by their
7476 % values. The trick for values not to be expanded themselves is that they
7477 % are within tokens and that tokens expand only once in an \edef .
7478 \edef\@tempc{\csname mac.\macroname .body\endcsname}%
7479 % Now we restore the token stack pointer to free the token list registers
7480 % which we have used, but we make sure that expanded body is saved after
7481 % group.
7482 \expandafter
7483 \endgroup
7484 \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
7485 }
7486
7487\def\macargexpandinbody@{%
7488 %% Define the named-macro outside of this group and then close this group.
7489 \expandafter
7490 \endgroup
7491 \macargdeflist@
7492 % First the replace in body the macro arguments by their values, the result
7493 % is in \@tempa .
7494 \macvalstoargs@
7495 % Then we point at the \norecurse or \gobble (for recursive) macro value
7496 % with \@tempb .
7497 \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
7498 % Depending on whether it is recursive or not, we need some tailing
7499 % \egroup .
7500 \ifx\@tempb\gobble
7501 \let\@tempc\relax
7502 \else
7503 \let\@tempc\egroup
7504 \fi
7505 % And now we do the real job:
7506 \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
7507 \@tempd
7508}
7509
7510\def\putargsintokens@#1,{%
7511 \if#1;\let\next\relax
7512 \else
7513 \let\next\putargsintokens@
7514 % First we allocate the new token list register, and give it a temporary
7515 % alias \@tempb .
7516 \toksdef\@tempb\the\paramno
7517 % Then we place the argument value into that token list register.
7518 \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
7519 \expandafter\@tempb\expandafter{\@tempa}%
7520 \advance\paramno by 1\relax
7521 \fi
7522 \next
7523}
7524
7525% Save the token stack pointer into macro #1
7526\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}}
7527% Restore the token stack pointer from number in macro #1
7528\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax}
7529% newtoks that can be used non \outer .
7530\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi}
7531
7532% Tailing missing arguments are set to empty
7533\def\setemptyargvalues@{%
7534 \ifx\paramlist\nilm@
7535 \let\next\macargexpandinbody@
7536 \else
7537 \expandafter\setemptyargvaluesparser@\paramlist\endargs@
7538 \let\next\setemptyargvalues@
7539 \fi
7540 \next
7541}
7542
7543\def\setemptyargvaluesparser@#1,#2\endargs@{%
7544 \expandafter\def\expandafter\@tempa\expandafter{%
7545 \expandafter\def\csname macarg.#1\endcsname{}}%
7546 \push@\@tempa\macargdeflist@
7547 \def\paramlist{#2}%
7548}
7549
7550% #1 is the element target macro
7551% #2 is the list macro
7552% #3,#4\endargs@ is the list value
7553\def\pop@#1#2#3,#4\endargs@{%
7554 \def#1{#3}%
7555 \def#2{#4}%
7556}
7557\long\def\longpop@#1#2#3,#4\endargs@{%
7558 \long\def#1{#3}%
7559 \long\def#2{#4}%
7560}
7561
7562% This defines a Texinfo @macro. There are eight cases: recursive and
7563% nonrecursive macros of zero, one, up to nine, and many arguments.
7340% Much magic with \expandafter here. 7564% Much magic with \expandafter here.
7341% \xdef is used so that macro definitions will survive the file 7565% \xdef is used so that macro definitions will survive the file
7342% they're defined in; @include reads the file inside a group. 7566% they're defined in; @include reads the file inside a group.
@@ -7355,17 +7579,25 @@ end
7355 \expandafter\noexpand\csname\the\macname xxx\endcsname}% 7579 \expandafter\noexpand\csname\the\macname xxx\endcsname}%
7356 \expandafter\xdef\csname\the\macname xxx\endcsname##1{% 7580 \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
7357 \egroup\noexpand\scanmacro{\temp}}% 7581 \egroup\noexpand\scanmacro{\temp}}%
7358 \else % many 7582 \else
7359 \expandafter\xdef\csname\the\macname\endcsname{% 7583 \ifnum\paramno<10\relax % at most 9
7360 \bgroup\noexpand\macroargctxt 7584 \expandafter\xdef\csname\the\macname\endcsname{%
7361 \noexpand\csname\the\macname xx\endcsname}% 7585 \bgroup\noexpand\macroargctxt
7362 \expandafter\xdef\csname\the\macname xx\endcsname##1{% 7586 \noexpand\csname\the\macname xx\endcsname}%
7363 \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% 7587 \expandafter\xdef\csname\the\macname xx\endcsname##1{%
7364 \expandafter\expandafter 7588 \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
7365 \expandafter\xdef 7589 \expandafter\expandafter
7366 \expandafter\expandafter 7590 \expandafter\xdef
7367 \csname\the\macname xxx\endcsname 7591 \expandafter\expandafter
7368 \paramlist{\egroup\noexpand\scanmacro{\temp}}% 7592 \csname\the\macname xxx\endcsname
7593 \paramlist{\egroup\noexpand\scanmacro{\temp}}%
7594 \else % 10 or more
7595 \expandafter\xdef\csname\the\macname\endcsname{%
7596 \noexpand\getargvals@{\the\macname}{\argl}%
7597 }%
7598 \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
7599 \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
7600 \fi
7369 \fi 7601 \fi
7370 \else 7602 \else
7371 \ifcase\paramno 7603 \ifcase\paramno
@@ -7382,23 +7614,33 @@ end
7382 \egroup 7614 \egroup
7383 \noexpand\norecurse{\the\macname}% 7615 \noexpand\norecurse{\the\macname}%
7384 \noexpand\scanmacro{\temp}\egroup}% 7616 \noexpand\scanmacro{\temp}\egroup}%
7385 \else % many 7617 \else % at most 9
7386 \expandafter\xdef\csname\the\macname\endcsname{% 7618 \ifnum\paramno<10\relax
7387 \bgroup\noexpand\macroargctxt 7619 \expandafter\xdef\csname\the\macname\endcsname{%
7388 \expandafter\noexpand\csname\the\macname xx\endcsname}% 7620 \bgroup\noexpand\macroargctxt
7389 \expandafter\xdef\csname\the\macname xx\endcsname##1{% 7621 \expandafter\noexpand\csname\the\macname xx\endcsname}%
7390 \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% 7622 \expandafter\xdef\csname\the\macname xx\endcsname##1{%
7391 \expandafter\expandafter 7623 \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
7392 \expandafter\xdef 7624 \expandafter\expandafter
7393 \expandafter\expandafter 7625 \expandafter\xdef
7394 \csname\the\macname xxx\endcsname 7626 \expandafter\expandafter
7395 \paramlist{% 7627 \csname\the\macname xxx\endcsname
7396 \egroup 7628 \paramlist{%
7397 \noexpand\norecurse{\the\macname}% 7629 \egroup
7398 \noexpand\scanmacro{\temp}\egroup}% 7630 \noexpand\norecurse{\the\macname}%
7631 \noexpand\scanmacro{\temp}\egroup}%
7632 \else % 10 or more:
7633 \expandafter\xdef\csname\the\macname\endcsname{%
7634 \noexpand\getargvals@{\the\macname}{\argl}%
7635 }%
7636 \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
7637 \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
7638 \fi
7399 \fi 7639 \fi
7400 \fi} 7640 \fi}
7401 7641
7642\catcode `\@\texiatcatcode\relax
7643
7402\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} 7644\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
7403 7645
7404% \braceorline decides whether the next nonwhitespace character is a 7646% \braceorline decides whether the next nonwhitespace character is a