summaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
authortron <tron@pkgsrc.org>2002-01-03 21:57:13 +0000
committertron <tron@pkgsrc.org>2002-01-03 21:57:13 +0000
commit2704d3a7444893c43e7c651182e21be7ac56356e (patch)
tree091bef4f4fd0481b064faf128ecb87e751b67dd8 /lang
parent7ba2b1a14c9e905262950fd7109509e3ea0cd482 (diff)
downloadpkgsrc-2704d3a7444893c43e7c651182e21be7ac56356e.tar.gz
Remove unnecessary patch which caused patch problems due to an include
RCS Id.
Diffstat (limited to 'lang')
-rw-r--r--lang/gcc/distinfo3
-rw-r--r--lang/gcc/patches/patch-cn5090
2 files changed, 1 insertions, 5092 deletions
diff --git a/lang/gcc/distinfo b/lang/gcc/distinfo
index 03c464bf4ab..978b641211f 100644
--- a/lang/gcc/distinfo
+++ b/lang/gcc/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.6 2002/01/03 20:40:39 tron Exp $
+$NetBSD: distinfo,v 1.7 2002/01/03 21:57:13 tron Exp $
SHA1 (gcc-2.95.3.tar.gz) = 535d27038d161c0e7c2662702e11a48aa97ef622
Size (gcc-2.95.3.tar.gz) = 12911721 bytes
@@ -67,4 +67,3 @@ SHA1 (patch-cj) = c8e7d14703d6546e5989801a6fdffaee5932165d
SHA1 (patch-ck) = eeada159352f6a957ba8bc10f1e6d074f56aa300
SHA1 (patch-cl) = 1ebf7761e708ca5327c7b7e0426c1544640712ac
SHA1 (patch-cm) = 66b86c09726bed590ba80ce4d8d01a5ad71724c8
-SHA1 (patch-cn) = a93bc564137f96d7dff1974a164b44896d675bed
diff --git a/lang/gcc/patches/patch-cn b/lang/gcc/patches/patch-cn
deleted file mode 100644
index 1a4be8b8ed3..00000000000
--- a/lang/gcc/patches/patch-cn
+++ /dev/null
@@ -1,5090 +0,0 @@
-$NetBSD: patch-cn,v 1.1 2002/01/03 20:40:51 tron Exp $
-
---- ../gcc-2.95.3/texinfo/texinfo.tex.orig Tue Mar 24 19:05:24 1998
-+++ ../gcc-2.95.3/texinfo/texinfo.tex Thu Jan 3 20:37:56 2002
-@@ -1,52 +1,72 @@
--%% TeX macros to handle Texinfo files.
--%% $Id: patch-cn,v 1.1 2002/01/03 20:40:51 tron Exp $
--
--% Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
--% 94, 95, 96, 97 Free Software Foundation, Inc.
--
--%This texinfo.tex file is free software; you can redistribute it and/or
--%modify it under the terms of the GNU General Public License as
--%published by the Free Software Foundation; either version 2, or (at
--%your option) any later version.
--
--%This texinfo.tex file is distributed in the hope that it will be
--%useful, but WITHOUT ANY WARRANTY; without even the implied warranty
--%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--%General Public License for more details.
--
--%You should have received a copy of the GNU General Public License
--%along with this texinfo.tex file; see the file COPYING. If not, write
--%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
--%Boston, MA 02111-1307, USA.
--
--
--%In other words, you are welcome to use, share and improve this program.
--%You are forbidden to forbid anyone else to use, share and improve
--%what you give them. Help stamp out software-hoarding!
--
--
--% Send bug reports to bug-texinfo@prep.ai.mit.edu.
--% Please include a *precise* test case in each bug report.
--
--
--% Make it possible to create a .fmt file just by loading this file:
--% if the underlying format is not loaded, start by loading it now.
--% Added by gildea November 1993.
-+% texinfo.tex -- TeX macros to handle Texinfo files.
-+%
-+% Load plain if necessary, i.e., if running under initex.
- \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-+%
-+\def\texinfoversion{2000-05-28.15}
-+%
-+% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
-+% Free Software Foundation, Inc.
-+%
-+% This texinfo.tex file is free software; you can redistribute it and/or
-+% modify it under the terms of the GNU General Public License as
-+% published by the Free Software Foundation; either version 2, or (at
-+% your option) any later version.
-+%
-+% This texinfo.tex file is distributed in the hope that it will be
-+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+% General Public License for more details.
-+%
-+% You should have received a copy of the GNU General Public License
-+% along with this texinfo.tex file; see the file COPYING. If not, write
-+% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+% Boston, MA 02111-1307, USA.
-+%
-+% In other words, you are welcome to use, share and improve this program.
-+% You are forbidden to forbid anyone else to use, share and improve
-+% what you give them. Help stamp out software-hoarding!
-+%
-+% Please try the latest version of texinfo.tex before submitting bug
-+% reports; you can get the latest version from:
-+% ftp://ftp.gnu.org/gnu/texinfo.tex
-+% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
-+% ftp://texinfo.org/tex/texinfo.tex
-+% ftp://us.ctan.org/macros/texinfo/texinfo.tex
-+% (and all CTAN mirrors, finger ctan@us.ctan.org for a list).
-+% /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-+% The texinfo.tex in any given Texinfo distribution could well be out
-+% of date, so if that's what you're using, please check.
-+% Texinfo has a small home page at http://texinfo.org/.
-+%
-+% Send bug reports to bug-texinfo@gnu.org. Please include including a
-+% complete document in each bug report with which we can reproduce the
-+% problem. Patches are, of course, greatly appreciated.
-+%
-+% To process a Texinfo manual with TeX, it's most reliable to use the
-+% texi2dvi shell script that comes with the distribution. For a simple
-+% manual foo.texi, however, you can get away with this:
-+% tex foo.texi
-+% texindex foo.??
-+% tex foo.texi
-+% tex foo.texi
-+% dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
-+% The extra runs of TeX get the cross-reference information correct.
-+% Sometimes one run after texindex suffices, and sometimes you need more
-+% than two; texi2dvi does it as many times as necessary.
-+%
-+% It is possible to adapt texinfo.tex for other languages. You can get
-+% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
-
--% This automatically updates the version number based on RCS.
--\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
--\deftexinfoversion$Revision: 1.1 $
--\message{Loading texinfo package [Version \texinfoversion]:}
-+\message{Loading texinfo [version \texinfoversion]:}
-
- % If in a .fmt file, print the version number
- % and turn on active characters that we couldn't do earlier because
- % they might have appeared in the input file name.
--\everyjob{\message{[Texinfo version \texinfoversion]}\message{}
-+\everyjob{\message{[Texinfo version \texinfoversion]}%
- \catcode`+=\active \catcode`\_=\active}
-
- % Save some parts of plain tex whose names we will redefine.
--
- \let\ptexb=\b
- \let\ptexbullet=\bullet
- \let\ptexc=\c
-@@ -54,25 +74,17 @@
- \let\ptexdot=\.
- \let\ptexdots=\dots
- \let\ptexend=\end
--\let\ptexequiv = \equiv
-+\let\ptexequiv=\equiv
-+\let\ptexexclam=\!
- \let\ptexi=\i
- \let\ptexlbrace=\{
- \let\ptexrbrace=\}
- \let\ptexstar=\*
- \let\ptext=\t
-
--% Be sure we're in horizontal mode when doing a tie, since we make space
--% equivalent to this in @example-like environments. Otherwise, a space
--% at the beginning of a line will start with \penalty -- and
--% since \penalty is valid in vertical mode, we'd end up putting the
--% penalty on the vertical list instead of in the new paragraph.
--{\catcode`@ = 11
-- % Avoid using \@M directly, because that causes trouble
-- % if the definition is written into an index file.
-- \global\let\tiepenalty = \@M
-- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
--}
--
-+% We never want plain's outer \+ definition in Texinfo.
-+% For @tex, we can use \tabalign.
-+\let\+ = \relax
-
- \message{Basics,}
- \chardef\other=12
-@@ -81,18 +93,47 @@
- % starts a new line in the output.
- \newlinechar = `^^J
-
--% Set up fixed words for English.
--\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi%
--\def\putwordInfo{Info}%
--\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi%
--\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi%
--\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi%
--\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi%
--\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi%
--\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi%
--\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi%
--\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi%
--\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi%
-+% Set up fixed words for English if not already set.
-+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
-+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
-+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
-+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
-+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
-+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
-+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
-+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
-+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
-+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
-+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
-+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
-+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
-+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
-+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
-+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
-+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
-+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
-+%
-+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
-+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
-+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
-+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
-+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
-+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
-+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
-+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
-+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
-+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
-+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
-+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
-+%
-+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
-+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
-+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
-+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
-+\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
-+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
-+\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
-
- % Ignore a token.
- %
-@@ -113,30 +154,35 @@
- % since that produces some useless output on the terminal.
- %
- \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-+\ifx\eTeXversion\undefined
- \def\loggingall{\tracingcommands2 \tracingstats2
- \tracingpages1 \tracingoutput1 \tracinglostchars1
- \tracingmacros2 \tracingparagraphs1 \tracingrestores1
- \showboxbreadth\maxdimen\showboxdepth\maxdimen
- }%
-+\else
-+\def\loggingall{\tracingcommands3 \tracingstats2
-+ \tracingpages1 \tracingoutput1 \tracinglostchars1
-+ \tracingmacros2 \tracingparagraphs1 \tracingrestores1
-+ \tracingscantokens1 \tracingassigns1 \tracingifs1
-+ \tracinggroups1 \tracingnesting2
-+ \showboxbreadth\maxdimen\showboxdepth\maxdimen
-+}%
-+\fi
-
- % For @cropmarks command.
- % Do @cropmarks to get crop marks.
--%
-+%
- \newif\ifcropmarks
- \let\cropmarks = \cropmarkstrue
- %
- % Dimensions to add cropmarks at corners.
- % Added by P. A. MacKay, 12 Nov. 1986
- %
--\newdimen\cornerlong \newdimen\cornerthick
--\newdimen\topandbottommargin
--\newdimen\outerhsize \newdimen\outervsize
--\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
--\outerhsize=7in
--%\outervsize=9.5in
--% Alternative @smallbook page size is 9.25in
--\outervsize=9.25in
--\topandbottommargin=.75in
-+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-+\newdimen\cornerlong \cornerlong=1pc
-+\newdimen\cornerthick \cornerthick=.3pt
-+\newdimen\topandbottommargin \topandbottommargin=.75in
-
- % Main output routine.
- \chardef\PAGE = 255
-@@ -168,15 +214,21 @@
- \normalturnoffactive % \ in index entries must not stay \, e.g., if
- % the page break happens to be in the middle of an example.
- \shipout\vbox{%
-+ % Do this early so pdf references go to the beginning of the page.
-+ \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
-+ %
- \ifcropmarks \vbox to \outervsize\bgroup
- \hsize = \outerhsize
-- \line{\ewtop\hfil\ewtop}%
-- \nointerlineskip
-- \line{%
-- \vbox{\moveleft\cornerthick\nstop}%
-- \hfill
-- \vbox{\moveright\cornerthick\nstop}%
-- }%
-+ \vskip-\topandbottommargin
-+ \vtop to0pt{%
-+ \line{\ewtop\hfil\ewtop}%
-+ \nointerlineskip
-+ \line{%
-+ \vbox{\moveleft\cornerthick\nstop}%
-+ \hfill
-+ \vbox{\moveright\cornerthick\nstop}%
-+ }%
-+ \vss}%
- \vskip\topandbottommargin
- \line\bgroup
- \hfil % center the page within the outer (page) hsize.
-@@ -199,13 +251,15 @@
- \hfil\egroup % end of (centering) \line\bgroup
- \vskip\topandbottommargin plus1fill minus1fill
- \boxmaxdepth = \cornerthick
-- \line{%
-- \vbox{\moveleft\cornerthick\nsbot}%
-- \hfill
-- \vbox{\moveright\cornerthick\nsbot}%
-+ \vbox to0pt{\vss
-+ \line{%
-+ \vbox{\moveleft\cornerthick\nsbot}%
-+ \hfill
-+ \vbox{\moveright\cornerthick\nsbot}%
-+ }%
-+ \nointerlineskip
-+ \line{\ewbot\hfil\ewbot}%
- }%
-- \nointerlineskip
-- \line{\ewbot\hfil\ewbot}%
- \egroup % \vbox from first cropmarks clause
- \fi
- }% end of \shipout\vbox
-@@ -321,11 +375,11 @@
- %% Call \inENV within environments (after a \begingroup)
- \newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
- \def\ENVcheck{%
--\ifENV\errmessage{Still within an environment. Type Return to continue.}
-+\ifENV\errmessage{Still within an environment; press RETURN to continue}
- \endgroup\fi} % This is not perfect, but it should reduce lossage
-
- % @begin foo is the same as @foo, for now.
--\newhelp\EMsimple{Type <Return> to continue.}
-+\newhelp\EMsimple{Press RETURN to continue.}
-
- \outer\def\begin{\parsearg\beginxxx}
-
-@@ -384,7 +438,7 @@
-
- % @@ prints an @
- % Kludge this until the fonts are right (grr).
--\def\@{{\tt \char '100}}
-+\def\@{{\tt\char64}}
-
- % This is turned off because it was never documented
- % and you can use @w{...} around a quote to suppress ligatures.
-@@ -394,8 +448,8 @@
- %\def\'{{'}}
-
- % Used to generate quoted braces.
--\def\mylbrace {{\tt \char '173}}
--\def\myrbrace {{\tt \char '175}}
-+\def\mylbrace {{\tt\char123}}
-+\def\myrbrace {{\tt\char125}}
- \let\{=\mylbrace
- \let\}=\myrbrace
- \begingroup
-@@ -432,6 +486,18 @@
- \fi\fi
- }
-
-+% Be sure we're in horizontal mode when doing a tie, since we make space
-+% equivalent to this in @example-like environments. Otherwise, a space
-+% at the beginning of a line will start with \penalty -- and
-+% since \penalty is valid in vertical mode, we'd end up putting the
-+% penalty on the vertical list instead of in the new paragraph.
-+{\catcode`@ = 11
-+ % Avoid using \@M directly, because that causes trouble
-+ % if the definition is written into an index file.
-+ \global\let\tiepenalty = \@M
-+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-+}
-+
- % @: forces normal size whitespace following.
- \def\:{\spacefactor=1000 }
-
-@@ -441,14 +507,11 @@
- % @. is an end-of-sentence period.
- \def\.{.\spacefactor=3000 }
-
--% @enddots{} is an end-of-sentence ellipsis.
--\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
--
- % @! is an end-of-sentence bang.
--\gdef\!{!\spacefactor=3000 }
-+\def\!{!\spacefactor=3000 }
-
- % @? is an end-of-sentence query.
--\gdef\?{?\spacefactor=3000 }
-+\def\?{?\spacefactor=3000 }
-
- % @w prevents a word break. Without the \leavevmode, @w at the
- % beginning of a paragraph, when TeX is still in vertical mode, would
-@@ -532,53 +595,81 @@
- %% This method tries to make TeX break the page naturally
- %% if the depth of the box does not fit.
- %{\baselineskip=0pt%
--%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000
-+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
- %\prevdepth=-1000pt
- %}}
-
- \def\needx#1{%
-- % Go into vertical mode, so we don't make a big box in the middle of a
-+ % Ensure vertical mode, so we don't make a big box in the middle of a
- % paragraph.
- \par
- %
-- % Don't add any leading before our big empty box, but allow a page
-- % break, since the best break might be right here.
-- \allowbreak
-- \nointerlineskip
-- \vtop to #1\mil{\vfil}%
-- %
-- % TeX does not even consider page breaks if a penalty added to the
-- % main vertical list is 10000 or more. But in order to see if the
-- % empty box we just added fits on the page, we must make it consider
-- % page breaks. On the other hand, we don't want to actually break the
-- % page after the empty box. So we use a penalty of 9999.
-- %
-- % There is an extremely small chance that TeX will actually break the
-- % page at this \penalty, if there are no other feasible breakpoints in
-- % sight. (If the user is using lots of big @group commands, which
-- % almost-but-not-quite fill up a page, TeX will have a hard time doing
-- % good page breaking, for example.) However, I could not construct an
-- % example where a page broke at this \penalty; if it happens in a real
-- % document, then we can reconsider our strategy.
-- \penalty9999
-- %
-- % Back up by the size of the box, whether we did a page break or not.
-- \kern -#1\mil
-- %
-- % Do not allow a page break right after this kern.
-- \nobreak
-+ % If the @need value is less than one line space, it's useless.
-+ \dimen0 = #1\mil
-+ \dimen2 = \ht\strutbox
-+ \advance\dimen2 by \dp\strutbox
-+ \ifdim\dimen0 > \dimen2
-+ %
-+ % Do a \strut just to make the height of this box be normal, so the
-+ % normal leading is inserted relative to the preceding line.
-+ % And a page break here is fine.
-+ \vtop to #1\mil{\strut\vfil}%
-+ %
-+ % TeX does not even consider page breaks if a penalty added to the
-+ % main vertical list is 10000 or more. But in order to see if the
-+ % empty box we just added fits on the page, we must make it consider
-+ % page breaks. On the other hand, we don't want to actually break the
-+ % page after the empty box. So we use a penalty of 9999.
-+ %
-+ % There is an extremely small chance that TeX will actually break the
-+ % page at this \penalty, if there are no other feasible breakpoints in
-+ % sight. (If the user is using lots of big @group commands, which
-+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
-+ % good page breaking, for example.) However, I could not construct an
-+ % example where a page broke at this \penalty; if it happens in a real
-+ % document, then we can reconsider our strategy.
-+ \penalty9999
-+ %
-+ % Back up by the size of the box, whether we did a page break or not.
-+ \kern -#1\mil
-+ %
-+ % Do not allow a page break right after this kern.
-+ \nobreak
-+ \fi
- }
-
- % @br forces paragraph break
-
- \let\br = \par
-
--% @dots{} output some dots
-+% @dots{} output an ellipsis using the current font.
-+% We do .5em per period so that it has the same spacing in a typewriter
-+% font as three actual period characters.
-+%
-+\def\dots{%
-+ \leavevmode
-+ \hbox to 1.5em{%
-+ \hskip 0pt plus 0.25fil minus 0.25fil
-+ .\hss.\hss.%
-+ \hskip 0pt plus 0.5fil minus 0.5fil
-+ }%
-+}
-+
-+% @enddots{} is an end-of-sentence ellipsis.
-+%
-+\def\enddots{%
-+ \leavevmode
-+ \hbox to 2em{%
-+ \hskip 0pt plus 0.25fil minus 0.25fil
-+ .\hss.\hss.\hss.%
-+ \hskip 0pt plus 0.5fil minus 0.5fil
-+ }%
-+ \spacefactor=3000
-+}
-
--\def\dots{$\ldots$}
-
- % @page forces the start of a new page
--
-+%
- \def\page{\par\vfill\supereject}
-
- % @exdent text....
-@@ -645,420 +736,296 @@
- % @c is the same as @comment
- % @ignore ... @end ignore is another way to write a comment
-
--\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other%
--\parsearg \commentxxx}
--
--\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 }
-+\def\comment{\begingroup \catcode`\^^M=\other%
-+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-+\commentxxx}
-+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-
- \let\c=\comment
-
--% @paragraphindent is defined for the Info formatting commands only.
--\let\paragraphindent=\comment
--
--% Prevent errors for section commands.
--% Used in @ignore and in failing conditionals.
--\def\ignoresections{%
--\let\chapter=\relax
--\let\unnumbered=\relax
--\let\top=\relax
--\let\unnumberedsec=\relax
--\let\unnumberedsection=\relax
--\let\unnumberedsubsec=\relax
--\let\unnumberedsubsection=\relax
--\let\unnumberedsubsubsec=\relax
--\let\unnumberedsubsubsection=\relax
--\let\section=\relax
--\let\subsec=\relax
--\let\subsubsec=\relax
--\let\subsection=\relax
--\let\subsubsection=\relax
--\let\appendix=\relax
--\let\appendixsec=\relax
--\let\appendixsection=\relax
--\let\appendixsubsec=\relax
--\let\appendixsubsection=\relax
--\let\appendixsubsubsec=\relax
--\let\appendixsubsubsection=\relax
--\let\contents=\relax
--\let\smallbook=\relax
--\let\titlepage=\relax
-+% @paragraphindent NCHARS
-+% We'll use ems for NCHARS, close enough.
-+% We cannot implement @paragraphindent asis, though.
-+%
-+\def\asisword{asis} % no translation, these are keywords
-+\def\noneword{none}
-+%
-+\def\paragraphindent{\parsearg\doparagraphindent}
-+\def\doparagraphindent#1{%
-+ \def\temp{#1}%
-+ \ifx\temp\asisword
-+ \else
-+ \ifx\temp\noneword
-+ \defaultparindent = 0pt
-+ \else
-+ \defaultparindent = #1em
-+ \fi
-+ \fi
-+ \parindent = \defaultparindent
- }
-
--% Used in nested conditionals, where we have to parse the Texinfo source
--% and so want to turn off most commands, in case they are used
--% incorrectly.
--%
--\def\ignoremorecommands{%
-- \let\defcodeindex = \relax
-- \let\defcv = \relax
-- \let\deffn = \relax
-- \let\deffnx = \relax
-- \let\defindex = \relax
-- \let\defivar = \relax
-- \let\defmac = \relax
-- \let\defmethod = \relax
-- \let\defop = \relax
-- \let\defopt = \relax
-- \let\defspec = \relax
-- \let\deftp = \relax
-- \let\deftypefn = \relax
-- \let\deftypefun = \relax
-- \let\deftypevar = \relax
-- \let\deftypevr = \relax
-- \let\defun = \relax
-- \let\defvar = \relax
-- \let\defvr = \relax
-- \let\ref = \relax
-- \let\xref = \relax
-- \let\printindex = \relax
-- \let\pxref = \relax
-- \let\settitle = \relax
-- \let\setchapternewpage = \relax
-- \let\setchapterstyle = \relax
-- \let\everyheading = \relax
-- \let\evenheading = \relax
-- \let\oddheading = \relax
-- \let\everyfooting = \relax
-- \let\evenfooting = \relax
-- \let\oddfooting = \relax
-- \let\headings = \relax
-- \let\include = \relax
-- \let\lowersections = \relax
-- \let\down = \relax
-- \let\raisesections = \relax
-- \let\up = \relax
-- \let\set = \relax
-- \let\clear = \relax
-- \let\item = \relax
-+% @exampleindent NCHARS
-+% We'll use ems for NCHARS like @paragraphindent.
-+% It seems @exampleindent asis isn't necessary, but
-+% I preserve it to make it similar to @paragraphindent.
-+\def\exampleindent{\parsearg\doexampleindent}
-+\def\doexampleindent#1{%
-+ \def\temp{#1}%
-+ \ifx\temp\asisword
-+ \else
-+ \ifx\temp\noneword
-+ \lispnarrowing = 0pt
-+ \else
-+ \lispnarrowing = #1em
-+ \fi
-+ \fi
- }
-
--% Ignore @ignore ... @end ignore.
-+% @asis just yields its argument. Used with @table, for example.
- %
--\def\ignore{\doignore{ignore}}
-+\def\asis#1{#1}
-
--% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-+% @math means output in math mode.
-+% We don't use $'s directly in the definition of \math because control
-+% sequences like \math are expanded when the toc file is written. Then,
-+% we read the toc file back, the $'s will be normal characters (as they
-+% should be, according to the definition of Texinfo). So we must use a
-+% control sequence to switch into and out of math mode.
- %
--\def\ifinfo{\doignore{ifinfo}}
--\def\ifhtml{\doignore{ifhtml}}
--\def\ifnottex{\doignore{ifnottex}}
--\def\html{\doignore{html}}
--\def\menu{\doignore{menu}}
--\def\direntry{\doignore{direntry}}
--
--% Also ignore @macro ... @end macro. The user must run texi2dvi,
--% which runs makeinfo to do macro expansion. Ignore @unmacro, too.
--\def\macro{\doignore{macro}}
--\let\unmacro = \comment
-+% This isn't quite enough for @math to work properly in indices, but it
-+% seems unlikely it will ever be needed there.
-+%
-+\let\implicitmath = $
-+\def\math#1{\implicitmath #1\implicitmath}
-
-+% @bullet and @minus need the same treatment as @math, just above.
-+\def\bullet{\implicitmath\ptexbullet\implicitmath}
-+\def\minus{\implicitmath-\implicitmath}
-
--% @dircategory CATEGORY -- specify a category of the dir file
--% which this file should belong to. Ignore this in TeX.
--\let\dircategory = \comment
-+% @refill is a no-op.
-+\let\refill=\relax
-
--% Ignore text until a line `@end #1'.
-+% If working on a large document in chapters, it is convenient to
-+% be able to disable indexing, cross-referencing, and contents, for test runs.
-+% This is done with @novalidate (before @setfilename).
- %
--\def\doignore#1{\begingroup
-- % Don't complain about control sequences we have declared \outer.
-- \ignoresections
-- %
-- % Define a command to swallow text until we reach `@end #1'.
-- \long\def\doignoretext##1\end #1{\enddoignore}%
-- %
-- % Make sure that spaces turn into tokens that match what \doignoretext wants.
-- \catcode32 = 10
-- %
-- % Ignore braces, too, so mismatched braces don't cause trouble.
-- \catcode`\{ = 9
-- \catcode`\} = 9
-- %
-- % And now expand that command.
-- \doignoretext
-+\newif\iflinks \linkstrue % by default we want the aux files.
-+\let\novalidate = \linksfalse
-+
-+% @setfilename is done at the beginning of every texinfo file.
-+% So open here the files we need to have open while reading the input.
-+% This makes it possible to make a .fmt file for texinfo.
-+\def\setfilename{%
-+ \iflinks
-+ \readauxfile
-+ \fi % \openindices needs to do some work in any case.
-+ \openindices
-+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
-+ \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-+ %
-+ % If texinfo.cnf is present on the system, read it.
-+ % Useful for site-wide @afourpaper, etc.
-+ % Just to be on the safe side, close the input stream before the \input.
-+ \openin 1 texinfo.cnf
-+ \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
-+ \closein1
-+ \temp
-+ %
-+ \comment % Ignore the actual filename.
- }
-
--% What we do to finish off ignored text.
-+% Called from \setfilename.
- %
--\def\enddoignore{\endgroup\ignorespaces}%
-+\def\openindices{%
-+ \newindex{cp}%
-+ \newcodeindex{fn}%
-+ \newcodeindex{vr}%
-+ \newcodeindex{tp}%
-+ \newcodeindex{ky}%
-+ \newcodeindex{pg}%
-+}
-
--\newif\ifwarnedobs\warnedobsfalse
--\def\obstexwarn{%
-- \ifwarnedobs\relax\else
-- % We need to warn folks that they may have trouble with TeX 3.0.
-- % This uses \immediate\write16 rather than \message to get newlines.
-- \immediate\write16{}
-- \immediate\write16{***WARNING*** for users of Unix TeX 3.0!}
-- \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-- \immediate\write16{If you are running another version of TeX, relax.}
-- \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-- \immediate\write16{ Then upgrade your TeX installation if you can.}
-- \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)}
-- \immediate\write16{If you are stuck with version 3.0, run the}
-- \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
-- \immediate\write16{ to use a workaround.}
-- \immediate\write16{}
-- \global\warnedobstrue
-+% @bye.
-+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-+
-+
-+\message{pdf,}
-+% adobe `portable' document format
-+\newcount\tempnum
-+\newcount\lnkcount
-+\newtoks\filename
-+\newcount\filenamelength
-+\newcount\pgn
-+\newtoks\toksA
-+\newtoks\toksB
-+\newtoks\toksC
-+\newtoks\toksD
-+\newbox\boxA
-+\newcount\countA
-+\newif\ifpdf
-+\newif\ifpdfmakepagedest
-+
-+\ifx\pdfoutput\undefined
-+ \pdffalse
-+ \let\pdfmkdest = \gobble
-+ \let\pdfurl = \gobble
-+ \let\endlink = \relax
-+ \let\linkcolor = \relax
-+ \let\pdfmakeoutlines = \relax
-+\else
-+ \pdftrue
-+ \pdfoutput = 1
-+ \input pdfcolor
-+ \def\dopdfimage#1#2#3{%
-+ \def\imagewidth{#2}%
-+ \def\imageheight{#3}%
-+ \ifnum\pdftexversion < 14
-+ \pdfimage
-+ \else
-+ \pdfximage
- \fi
--}
--
--% **In TeX 3.0, setting text in \nullfont hangs tex. For a
--% workaround (which requires the file ``dummy.tfm'' to be installed),
--% uncomment the following line:
--%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
--
--% Ignore text, except that we keep track of conditional commands for
--% purposes of nesting, up to an `@end #1' command.
--%
--\def\nestedignore#1{%
-- \obstexwarn
-- % We must actually expand the ignored text to look for the @end
-- % command, so that nested ignore constructs work. Thus, we put the
-- % text into a \vbox and then do nothing with the result. To minimize
-- % the change of memory overflow, we follow the approach outlined on
-- % page 401 of the TeXbook: make the current font be a dummy font.
-- %
-- \setbox0 = \vbox\bgroup
-- % Don't complain about control sequences we have declared \outer.
-- \ignoresections
-- %
-- % Define `@end #1' to end the box, which will in turn undefine the
-- % @end command again.
-- \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-- %
-- % We are going to be parsing Texinfo commands. Most cause no
-- % trouble when they are used incorrectly, but some commands do
-- % complicated argument parsing or otherwise get confused, so we
-- % undefine them.
-- %
-- % We can't do anything about stray @-signs, unfortunately;
-- % they'll produce `undefined control sequence' errors.
-- \ignoremorecommands
-- %
-- % Set the current font to be \nullfont, a TeX primitive, and define
-- % all the font commands to also use \nullfont. We don't use
-- % dummy.tfm, as suggested in the TeXbook, because not all sites
-- % might have that installed. Therefore, math mode will still
-- % produce output, but that should be an extremely small amount of
-- % stuff compared to the main input.
-- %
-- \nullfont
-- \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont
-- \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont
-- \let\tensf = \nullfont
-- % Similarly for index fonts (mostly for their use in
-- % smallexample)
-- \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont
-- \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont
-- \let\indsf = \nullfont
-- %
-- % Don't complain when characters are missing from the fonts.
-- \tracinglostchars = 0
-- %
-- % Don't bother to do space factor calculations.
-- \frenchspacing
-- %
-- % Don't report underfull hboxes.
-- \hbadness = 10000
-- %
-- % Do minimal line-breaking.
-- \pretolerance = 10000
-- %
-- % Do not execute instructions in @tex
-- \def\tex{\doignore{tex}}%
--}
--
--% @set VAR sets the variable VAR to an empty value.
--% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
--%
--% Since we want to separate VAR from REST-OF-LINE (which might be
--% empty), we can't just use \parsearg; we have to insert a space of our
--% own to delimit the rest of the line, and then take it out again if we
--% didn't need it. Make sure the catcode of space is correct to avoid
--% losing inside @example, for instance.
--%
--\def\set{\begingroup\catcode` =10
-- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-- \parsearg\setxxx}
--\def\setxxx#1{\setyyy#1 \endsetyyy}
--\def\setyyy#1 #2\endsetyyy{%
-- \def\temp{#2}%
-- \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-- \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-- \fi
-- \endgroup
--}
--% Can't use \xdef to pre-expand #2 and save some time, since \temp or
--% \next or other control sequences that we've defined might get us into
--% an infinite loop. Consider `@set foo @cite{bar}'.
--\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
--
--% @clear VAR clears (i.e., unsets) the variable VAR.
--%
--\def\clear{\parsearg\clearxxx}
--\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
--
--% @value{foo} gets the text saved in variable foo.
--%
--\def\value{\begingroup
-- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-- \valuexxx}
--\def\valuexxx#1{%
-- \expandafter\ifx\csname SET#1\endcsname\relax
-- {\{No value for ``#1''\}}%
-- \else
-- \csname SET#1\endcsname
-- \fi
--\endgroup}
--
--% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
--% with @set.
--%
--\def\ifset{\parsearg\ifsetxxx}
--\def\ifsetxxx #1{%
-- \expandafter\ifx\csname SET#1\endcsname\relax
-- \expandafter\ifsetfail
-- \else
-- \expandafter\ifsetsucceed
-- \fi
--}
--\def\ifsetsucceed{\conditionalsucceed{ifset}}
--\def\ifsetfail{\nestedignore{ifset}}
--\defineunmatchedend{ifset}
--
--% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
--% defined with @set, or has been undefined with @clear.
--%
--\def\ifclear{\parsearg\ifclearxxx}
--\def\ifclearxxx #1{%
-- \expandafter\ifx\csname SET#1\endcsname\relax
-- \expandafter\ifclearsucceed
-- \else
-- \expandafter\ifclearfail
-- \fi
--}
--\def\ifclearsucceed{\conditionalsucceed{ifclear}}
--\def\ifclearfail{\nestedignore{ifclear}}
--\defineunmatchedend{ifclear}
--
--% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
--% following, through the first @end iftex (etc.). Make `@end iftex'
--% (etc.) valid only after an @iftex.
--%
--\def\iftex{\conditionalsucceed{iftex}}
--\def\ifnothtml{\conditionalsucceed{ifnothtml}}
--\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
--\defineunmatchedend{iftex}
--\defineunmatchedend{ifnothtml}
--\defineunmatchedend{ifnotinfo}
--
--% We can't just want to start a group at @iftex (for example) and end it
--% at @end iftex, since then @set commands inside the conditional have no
--% effect (they'd get reverted at the end of the group). So we must
--% define \Eiftex to redefine itself to be its previous value. (We can't
--% just define it to fail again with an ``unmatched end'' error, since
--% the @ifset might be nested.)
--%
--\def\conditionalsucceed#1{%
-- \edef\temp{%
-- % Remember the current value of \E#1.
-- \let\nece{prevE#1} = \nece{E#1}%
-- %
-- % At the `@end #1', redefine \E#1 to be its previous value.
-- \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
-- }%
-- \temp
--}
--
--% We need to expand lots of \csname's, but we don't want to expand the
--% control sequences after we've constructed them.
--%
--\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
--
--% @asis just yields its argument. Used with @table, for example.
--%
--\def\asis#1{#1}
--
--% @math means output in math mode.
--% We don't use $'s directly in the definition of \math because control
--% sequences like \math are expanded when the toc file is written. Then,
--% we read the toc file back, the $'s will be normal characters (as they
--% should be, according to the definition of Texinfo). So we must use a
--% control sequence to switch into and out of math mode.
--%
--% This isn't quite enough for @math to work properly in indices, but it
--% seems unlikely it will ever be needed there.
--%
--\let\implicitmath = $
--\def\math#1{\implicitmath #1\implicitmath}
--
--% @bullet and @minus need the same treatment as @math, just above.
--\def\bullet{\implicitmath\ptexbullet\implicitmath}
--\def\minus{\implicitmath-\implicitmath}
--
--\def\node{\ENVcheck\parsearg\nodezzz}
--\def\nodezzz#1{\nodexxx [#1,]}
--\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
--\let\nwnode=\node
--\let\lastnode=\relax
--
--\def\donoderef{\ifx\lastnode\relax\else
--\expandafter\expandafter\expandafter\setref{\lastnode}\fi
--\global\let\lastnode=\relax}
--
--\def\unnumbnoderef{\ifx\lastnode\relax\else
--\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
--\global\let\lastnode=\relax}
--
--\def\appendixnoderef{\ifx\lastnode\relax\else
--\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
--\global\let\lastnode=\relax}
--
--% @refill is a no-op.
--\let\refill=\relax
--
--% @setfilename is done at the beginning of every texinfo file.
--% So open here the files we need to have open while reading the input.
--% This makes it possible to make a .fmt file for texinfo.
--\def\setfilename{%
-- \readauxfile
-- \opencontents
-- \openindices
-- \fixbackslash % Turn off hack to swallow `\input texinfo'.
-- \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-- %
-- % If texinfo.cnf is present on the system, read it.
-- % Useful for site-wide @afourpaper, etc.
-- % Just to be on the safe side, close the input stream before the \input.
-- \openin 1 texinfo.cnf
-- \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
-- \closein1
-- \temp
-- %
-- \comment % Ignore the actual filename.
--}
--
--% @bye.
--\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
--
--% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
--% \def\macroxxx#1#2 \end macro{%
--% \expandafter\gdef\macrotemp#1{#2}%
--% \endgroup}
--
--%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
--%\def\linemacroxxx#1#2 \end linemacro{%
--%\let\parsearg=\relax
--%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
--%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
--%\expandafter\gdef\macrotempx#1{#2}%
--%\endgroup}
--
--%\def\butfirst#1{}
-+ \ifx\empty\imagewidth\else width \imagewidth \fi
-+ \ifx\empty\imageheight\else height \imageheight \fi
-+ {#1.pdf}%
-+ \ifnum\pdftexversion < 14 \else
-+ \pdfrefximage \pdflastximage
-+ \fi}
-+ \def\pdfmkdest#1{\pdfdest name{#1@} xyz}
-+ \def\pdfmkpgn#1{#1@}
-+ \let\linkcolor = \Blue % was Cyan, but that seems light?
-+ \def\endlink{\Black\pdfendlink}
-+ % Adding outlines to PDF; macros for calculating structure of outlines
-+ % come from Petr Olsak
-+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
-+ \else \csname#1\endcsname \fi}
-+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
-+ \advance\tempnum by1
-+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
-+ \def\pdfmakeoutlines{{%
-+ \openin 1 \jobname.toc
-+ \ifeof 1\else\bgroup
-+ \closein 1
-+ \indexnofonts
-+ \def\tt{}
-+ \let\_ = \normalunderscore
-+ % Thanh's hack / proper braces in bookmarks
-+ \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
-+ \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
-+ %
-+ \def\chapentry ##1##2##3{}
-+ \def\unnumbchapentry ##1##2{}
-+ \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
-+ \def\unnumbsecentry ##1##2{}
-+ \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
-+ \def\unnumbsubsecentry ##1##2{}
-+ \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
-+ \def\unnumbsubsubsecentry ##1##2{}
-+ \input \jobname.toc
-+ \def\chapentry ##1##2##3{%
-+ \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
-+ \def\unnumbchapentry ##1##2{%
-+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-+ \def\secentry ##1##2##3##4{%
-+ \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
-+ \def\unnumbsecentry ##1##2{%
-+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-+ \def\subsecentry ##1##2##3##4##5{%
-+ \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
-+ \def\unnumbsubsecentry ##1##2{%
-+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-+ \def\subsubsecentry ##1##2##3##4##5##6{%
-+ \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
-+ \def\unnumbsubsubsecentry ##1##2{%
-+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-+ \input \jobname.toc
-+ \egroup\fi
-+ }}
-+ \def\makelinks #1,{%
-+ \def\params{#1}\def\E{END}%
-+ \ifx\params\E
-+ \let\nextmakelinks=\relax
-+ \else
-+ \let\nextmakelinks=\makelinks
-+ \ifnum\lnkcount>0,\fi
-+ \picknum{#1}%
-+ \startlink attr{/Border [0 0 0]}
-+ goto name{\pdfmkpgn{\the\pgn}}%
-+ \linkcolor #1%
-+ \advance\lnkcount by 1%
-+ \endlink
-+ \fi
-+ \nextmakelinks
-+ }
-+ \def\picknum#1{\expandafter\pn#1}
-+ \def\pn#1{%
-+ \def\p{#1}%
-+ \ifx\p\lbrace
-+ \let\nextpn=\ppn
-+ \else
-+ \let\nextpn=\ppnn
-+ \def\first{#1}
-+ \fi
-+ \nextpn
-+ }
-+ \def\ppn#1{\pgn=#1\gobble}
-+ \def\ppnn{\pgn=\first}
-+ \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
-+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
-+ \ifx\PP\D\let\nextsp\relax
-+ \else\let\nextsp\skipspaces
-+ \ifx\p\space\else\addtokens{\filename}{\PP}%
-+ \advance\filenamelength by 1
-+ \fi
-+ \fi
-+ \nextsp}
-+ \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
-+ \ifnum\pdftexversion < 14
-+ \let \startlink \pdfannotlink
-+ \else
-+ \let \startlink \pdfstartlink
-+ \fi
-+ \def\pdfurl#1{%
-+ \begingroup
-+ \normalturnoffactive\def\@{@}%
-+ \leavevmode\Red
-+ \startlink attr{/Border [0 0 0]}%
-+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
-+ % #1
-+ \endgroup}
-+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
-+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
-+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
-+ \def\maketoks{%
-+ \expandafter\poptoks\the\toksA|ENDTOKS|
-+ \ifx\first0\adn0
-+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
-+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
-+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
-+ \else
-+ \ifnum0=\countA\else\makelink\fi
-+ \ifx\first.\let\next=\done\else
-+ \let\next=\maketoks
-+ \addtokens{\toksB}{\the\toksD}
-+ \ifx\first,\addtokens{\toksB}{\space}\fi
-+ \fi
-+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-+ \next}
-+ \def\makelink{\addtokens{\toksB}%
-+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
-+ \def\pdflink#1{%
-+ \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}
-+ \linkcolor #1\endlink}
-+ \def\mkpgn#1{#1@}
-+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-+\fi % \ifx\pdfoutput
-
-
- \message{fonts,}
--
- % Font-change commands.
-
--% Texinfo supports the sans serif font style, which plain TeX does not.
-+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
- % So we set up a \sf analogous to plain's \rm, etc.
- \newfam\sffam
- \def\sf{\fam=\sffam \tensf}
-@@ -1124,22 +1091,17 @@
- \setfont\deftt\ttshape{10}{\magstep1}
- \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
--% Fonts for indices and small examples (9pt).
--% We actually use the slanted font rather than the italic,
--% because texinfo normally uses the slanted fonts for that.
--% Do not make many font distinctions in general in the index, since they
--% aren't very useful.
--\setfont\ninett\ttshape{9}{1000}
--\setfont\indrm\rmshape{9}{1000}
--\setfont\indit\slshape{9}{1000}
--\let\indsl=\indit
--\let\indtt=\ninett
--\let\indttsl=\ninett
--\let\indsf=\indrm
--\let\indbf=\indrm
--\setfont\indsc\scshape{10}{900}
--\font\indi=cmmi9
--\font\indsy=cmsy9
-+% Fonts for indices, footnotes, small examples (9pt).
-+\setfont\smallrm\rmshape{9}{1000}
-+\setfont\smalltt\ttshape{9}{1000}
-+\setfont\smallbf\bfshape{10}{900}
-+\setfont\smallit\itshape{9}{1000}
-+\setfont\smallsl\slshape{9}{1000}
-+\setfont\smallsf\sfshape{9}{1000}
-+\setfont\smallsc\scshape{10}{900}
-+\setfont\smallttsl\ttslshape{10}{900}
-+\font\smalli=cmmi9
-+\font\smallsy=cmsy9
-
- % Fonts for title page:
- \setfont\titlerm\rmbshape{12}{\magstep3}
-@@ -1236,7 +1198,7 @@
- \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
- \let\tenttsl=\titlettsl
- \resetmathfonts \setleading{25pt}}
--\def\titlefont#1{{\titlefonts #1}}
-+\def\titlefont#1{{\titlefonts\rm #1}}
- \def\chapfonts{%
- \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
- \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-@@ -1253,16 +1215,21 @@
- \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
- \resetmathfonts \setleading{15pt}}
- \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
--\def\indexfonts{%
-- \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
-- \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
-- \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
-- \resetmathfonts \setleading{12pt}}
-+\def\smallfonts{%
-+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
-+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
-+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
-+ \let\tenttsl=\smallttsl
-+ \resetmathfonts \setleading{11pt}}
-
- % Set up the default fonts, so we can use them for creating boxes.
- %
- \textfonts
-
-+% Define these so they can be easily changed for other fonts.
-+\def\angleleft{$\langle$}
-+\def\angleright{$\rangle$}
-+
- % Count depth in font-changes, for error checks
- \newcount\fontdepth \fontdepth=0
-
-@@ -1277,13 +1244,14 @@
- % \smartitalic{ARG} outputs arg in italics, followed by an italic correction
- % unless the following character is such as not to need one.
- \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
--\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
-+\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
-+\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
-
- \let\i=\smartitalic
--\let\var=\smartitalic
--\let\dfn=\smartitalic
-+\let\var=\smartslanted
-+\let\dfn=\smartslanted
- \let\emph=\smartitalic
--\let\cite=\smartitalic
-+\let\cite=\smartslanted
-
- \def\b#1{{\bf #1}}
- \let\strong=\b
-@@ -1300,20 +1268,22 @@
- \null
- }
- \let\ttfont=\t
--\def\samp #1{`\tclose{#1}'\null}
--\setfont\smallrm\rmshape{8}{1000}
--\font\smallsy=cmsy9
--\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
-- \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{%
-+\def\samp#1{`\tclose{#1}'\null}
-+\setfont\keyrm\rmshape{8}{1000}
-+\font\keysy=cmsy9
-+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-+ \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
- \vbox{\hrule\kern-0.4pt
-- \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}%
-+ \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
- \kern-0.4pt\hrule}%
-- \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}
-+ \kern-.06em\raise0.4pt\hbox{\angleright}}}}
- % The old definition, with no lozenge:
- %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
- \def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-+% @file, @option are the same as @samp.
- \let\file=\samp
-+\let\option=\samp
-
- % @code is a modification of @t,
- % which makes spaces the same size as normal in the surrounding text.
-@@ -1348,20 +1318,18 @@
- % and arrange explicitly to hyphenate at a dash.
- % -- rms.
- {
--\catcode`\-=\active
--\catcode`\_=\active
--\catcode`\|=\active
--\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
--% The following is used by \doprintindex to insure that long function names
--% wrap around. It is necessary for - and _ to be active before the index is
--% read from the file, as \entry parses the arguments long before \code is
--% ever called. -- mycroft
--% _ is always active; and it shouldn't be \let = to an _ that is a
--% subscript character anyway. Then, @cindex @samp{_} (for example)
--% fails. --karl
--\global\def\indexbreaks{%
-- \catcode`\-=\active \let-\realdash
--}
-+ \catcode`\-=\active
-+ \catcode`\_=\active
-+ %
-+ \global\def\code{\begingroup
-+ \catcode`\-=\active \let-\codedash
-+ \catcode`\_=\active \let_\codeunder
-+ \codex
-+ }
-+ %
-+ % If we end up with any active - characters when handling the index,
-+ % just treat them as a normal -.
-+ \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
- }
-
- \def\realdash{-}
-@@ -1402,27 +1370,55 @@
- \else{\tclose{\kbdfont\look}}\fi
- \else{\tclose{\kbdfont\look}}\fi}
-
--% @url. Quotes do not seem necessary, so use \code.
-+% For @url, @env, @command quotes seem unnecessary, so use \code.
- \let\url=\code
-+\let\env=\code
-+\let\command=\code
-
--% @uref (abbreviation for `urlref') takes an optional second argument
--% specifying the text to display. First (mandatory) arg is the url.
--% Perhaps eventually put in a hypertex \special here.
--%
--\def\uref#1{\urefxxx #1,,\finish}
--\def\urefxxx#1,#2,#3\finish{%
-- \setbox0 = \hbox{\ignorespaces #2}%
-+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
-+% second argument specifying the text to display and an optional third
-+% arg as text to display instead of (rather than in addition to) the url
-+% itself. First (mandatory) arg is the url. Perhaps eventually put in
-+% a hypertex \special here.
-+%
-+\def\uref#1{\douref #1,,,\finish}
-+\def\douref#1,#2,#3,#4\finish{\begingroup
-+ \unsepspaces
-+ \pdfurl{#1}%
-+ \setbox0 = \hbox{\ignorespaces #3}%
- \ifdim\wd0 > 0pt
-- \unhbox0\ (\code{#1})%
-+ \unhbox0 % third arg given, show only that
- \else
-- \code{#1}%
-+ \setbox0 = \hbox{\ignorespaces #2}%
-+ \ifdim\wd0 > 0pt
-+ \ifpdf
-+ \unhbox0 % PDF: 2nd arg given, show only it
-+ \else
-+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
-+ \fi
-+ \else
-+ \code{#1}% only url given, so show it
-+ \fi
- \fi
--}
-+ \endlink
-+\endgroup}
-
--% rms does not like the angle brackets --karl, 17may97.
--% So now @email is just like @uref.
--%\def\email#1{$\langle${\tt #1}$\rangle$}
--\let\email=\uref
-+% rms does not like angle brackets --karl, 17may97.
-+% So now @email is just like @uref, unless we are pdf.
-+%
-+%\def\email#1{\angleleft{\tt #1}\angleright}
-+\ifpdf
-+ \def\email#1{\doemail#1,,\finish}
-+ \def\doemail#1,#2,#3\finish{\begingroup
-+ \unsepspaces
-+ \pdfurl{mailto:#1}%
-+ \setbox0 = \hbox{\ignorespaces #2}%
-+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
-+ \endlink
-+ \endgroup}
-+\else
-+ \let\email=\uref
-+\fi
-
- % Check if we are currently using a typewriter font. Since all the
- % Computer Modern typewriter fonts have zero interword stretch (and
-@@ -1432,8 +1428,7 @@
- \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
- % Typeset a dimension, e.g., `in' or `pt'. The only reason for the
--% argument is to make the input look right: @dmn{pt} instead of
--% @dmn{}pt.
-+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
- %
- \def\dmn#1{\thinspace #1}
-
-@@ -1444,11 +1439,14 @@
- % Polish suppressed-l. --karl, 22sep96.
- %\def\l#1{{\li #1}\null}
-
-+% Explicit font changes: @r, @sc, undocumented @ii.
- \def\r#1{{\rm #1}} % roman font
--% Use of \lowercase was suggested.
- \def\sc#1{{\smallcaps#1}} % smallcaps font
- \def\ii#1{{\it #1}} % italic font
-
-+% @acronym downcases the argument and prints in smallcaps.
-+\def\acronym#1{{\smallcaps \lowercase{#1}}}
-+
- % @pounds{} is a sterling sign.
- \def\pounds{{\it\$}}
-
-@@ -1462,15 +1460,20 @@
- \newif\ifseenauthor
- \newif\iffinishedtitlepage
-
-+% Do an implicit @contents or @shortcontents after @end titlepage if the
-+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-+%
-+\newif\ifsetcontentsaftertitlepage
-+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-+\newif\ifsetshortcontentsaftertitlepage
-+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-+
- \def\shorttitlepage{\parsearg\shorttitlepagezzz}
- \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
- \endgroup\page\hbox{}\page}
-
- \def\titlepage{\begingroup \parindent=0pt \textfonts
- \let\subtitlerm=\tenrm
--% I deinstalled the following change because \cmr12 is undefined.
--% This change was not in the ChangeLog anyway. --rms.
--% \let\subtitlerm=\cmr12
- \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
- %
- \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
-@@ -1519,6 +1522,23 @@
- % after the title page, which we certainly don't want.
- \oldpage
- \endgroup
-+ %
-+ % If they want short, they certainly want long too.
-+ \ifsetshortcontentsaftertitlepage
-+ \shortcontents
-+ \contents
-+ \global\let\shortcontents = \relax
-+ \global\let\contents = \relax
-+ \fi
-+ %
-+ \ifsetcontentsaftertitlepage
-+ \contents
-+ \global\let\contents = \relax
-+ \global\let\shortcontents = \relax
-+ \fi
-+ %
-+ \ifpdf \pdfmakepagedesttrue \fi
-+ %
- \HEADINGSon
- }
-
-@@ -1532,10 +1552,10 @@
-
- \let\thispage=\folio
-
--\newtoks \evenheadline % Token sequence for heading line of even pages
--\newtoks \oddheadline % Token sequence for heading line of odd pages
--\newtoks \evenfootline % Token sequence for footing line of even pages
--\newtoks \oddfootline % Token sequence for footing line of odd pages
-+\newtoks\evenheadline % headline on even pages
-+\newtoks\oddheadline % headline on odd pages
-+\newtoks\evenfootline % footline on even pages
-+\newtoks\oddfootline % footline on odd pages
-
- % Now make Tex use those variables
- \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
-@@ -1652,40 +1672,28 @@
- }
-
- % Subroutines used in generating headings
--% Produces Day Month Year style of output.
--\def\today{\number\day\space
--\ifcase\month\or
--January\or February\or March\or April\or May\or June\or
--July\or August\or September\or October\or November\or December\fi
--\space\number\year}
--
--% Use this if you want the Month Day, Year style of output.
--%\def\today{\ifcase\month\or
--%January\or February\or March\or April\or May\or June\or
--%July\or August\or September\or October\or November\or December\fi
--%\space\number\day, \number\year}
--
--% @settitle line... specifies the title of the document, for headings
--% It generates no output of its own
-+% This produces Day Month Year style of output.
-+% Only define if not already defined, in case a txi-??.tex file has set
-+% up a different format (e.g., txi-cs.tex does this).
-+\ifx\today\undefined
-+\def\today{%
-+ \number\day\space
-+ \ifcase\month
-+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
-+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
-+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
-+ \fi
-+ \space\number\year}
-+\fi
-
--\def\thistitle{No Title}
-+% @settitle line... specifies the title of the document, for headings.
-+% It generates no output of its own.
-+\def\thistitle{\putwordNoTitle}
- \def\settitle{\parsearg\settitlezzz}
- \def\settitlezzz #1{\gdef\thistitle{#1}}
-
-
- \message{tables,}
--
--% @tabs -- simple alignment
--
--% These don't work. For one thing, \+ is defined as outer.
--% So these macros cannot even be defined.
--
--%\def\tabs{\parsearg\tabszzz}
--%\def\tabszzz #1{\settabs\+#1\cr}
--%\def\tabline{\parsearg\tablinezzz}
--%\def\tablinezzz #1{\+#1\cr}
--%\def\&{&}
--
- % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-
- % default indentation of table text
-@@ -1729,11 +1737,6 @@
- \itemindex{#1}%
- \nobreak % This prevents a break before @itemx.
- %
-- % Be sure we are not still in the middle of a paragraph.
-- %{\parskip = 0in
-- %\par
-- %}%
-- %
- % If the item text does not fit in the space we have, put it on a line
- % by itself, and do not allow a page break either before or after that
- % line. We do not start a paragraph here because then if the next
-@@ -1762,13 +1765,17 @@
- \itemxneedsnegativevskipfalse
- \else
- % The item text fits into the space. Start a paragraph, so that the
-- % following text (if any) will end up on the same line. Since that
-- % text will be indented by \tableindent, we make the item text be in
-- % a zero-width box.
-+ % following text (if any) will end up on the same line.
- \noindent
-- \rlap{\hskip -\tableindent\box0}\ignorespaces%
-- \endgroup%
-- \itemxneedsnegativevskiptrue%
-+ % Do this with kerns and \unhbox so that if there is a footnote in
-+ % the item text, it can migrate to the main vertical list and
-+ % eventually be printed.
-+ \nobreak\kern-\tableindent
-+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
-+ \unhbox0
-+ \nobreak\kern\dimen0
-+ \endgroup
-+ \itemxneedsnegativevskiptrue
- \fi
- }
-
-@@ -1779,9 +1786,10 @@
- \def\xitem{\errmessage{@xitem while not in a table}}
- \def\xitemx{\errmessage{@xitemx while not in a table}}
-
--%% Contains a kludge to get @end[description] to work
-+% Contains a kludge to get @end[description] to work.
- \def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-+% @table, @ftable, @vtable.
- \def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
- {\obeylines\obeyspaces%
- \gdef\tablex #1^^M{%
-@@ -1841,7 +1849,7 @@
- \def\itemize{\parsearg\itemizezzz}
-
- \def\itemizezzz #1{%
-- \begingroup % ended by the @end itemsize
-+ \begingroup % ended by the @end itemize
- \itemizey {#1}{\Eitemize}
- }
-
-@@ -2043,10 +2051,7 @@
- % @multitablelinespace is space to leave between table items, baseline
- % to baseline.
- % 0pt means it depends on current normal line spacing.
--
--%%%%
--% Dimensions
--
-+%
- \newskip\multitableparskip
- \newskip\multitableparindent
- \newdimen\multitablecolspace
-@@ -2056,129 +2061,150 @@
- \multitablecolspace=12pt
- \multitablelinespace=0pt
-
--%%%%
- % Macros used to set up halign preamble:
-+%
- \let\endsetuptable\relax
- \def\xendsetuptable{\endsetuptable}
- \let\columnfractions\relax
- \def\xcolumnfractions{\columnfractions}
- \newif\ifsetpercent
-
--%% 2/1/96, to allow fractions to be given with more than one digit.
--\def\pickupwholefraction#1 {\global\advance\colcount by1 %
--\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
--\setuptable}
-+% #1 is the part of the @columnfraction before the decimal point, which
-+% is presumably either 0 or the empty string (but we don't check, we
-+% just throw it away). #2 is the decimal part, which we use as the
-+% percent of \hsize for this column.
-+\def\pickupwholefraction#1.#2 {%
-+ \global\advance\colcount by 1
-+ \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
-+ \setuptable
-+}
-
- \newcount\colcount
--\def\setuptable#1{\def\firstarg{#1}%
--\ifx\firstarg\xendsetuptable\let\go\relax%
--\else
-- \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
-+\def\setuptable#1{%
-+ \def\firstarg{#1}%
-+ \ifx\firstarg\xendsetuptable
-+ \let\go = \relax
- \else
-- \ifsetpercent
-- \let\go\pickupwholefraction % In this case arg of setuptable
-- % is the decimal point before the
-- % number given in percent of hsize.
-- % We don't need this so we don't use it.
-+ \ifx\firstarg\xcolumnfractions
-+ \global\setpercenttrue
-+ \else
-+ \ifsetpercent
-+ \let\go\pickupwholefraction
-+ \else
-+ \global\advance\colcount by 1
-+ \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
-+ % typically that is always in the input, anyway.
-+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-+ \fi
-+ \fi
-+ \ifx\go\pickupwholefraction
-+ % Put the argument back for the \pickupwholefraction call, so
-+ % we'll always have a period there to be parsed.
-+ \def\go{\pickupwholefraction#1}%
- \else
-- \global\advance\colcount by1
-- \setbox0=\hbox{#1 }% Add a normal word space as a separator;
-- % typically that is always in the input, anyway.
-- \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-+ \let\go = \setuptable
- \fi%
-- \fi%
--\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
--\fi\go}
--
--%%%%
--% multitable syntax
--\def\tab{&\hskip1sp\relax} % 2/2/96
-- % tiny skip here makes sure this column space is
-- % maintained, even if it is never used.
-+ \fi
-+ \go
-+}
-
-+% This used to have \hskip1sp. But then the space in a template line is
-+% not enough. That is bad. So let's go back to just & until we
-+% encounter the problem it was intended to solve again.
-+% --karl, nathan@acm.org, 20apr99.
-+\def\tab{&}
-
--%%%%
- % @multitable ... @end multitable definitions:
--
-+%
- \def\multitable{\parsearg\dotable}
--
- \def\dotable#1{\bgroup
--\let\item\cr
--\tolerance=9500
--\hbadness=9500
--\setmultitablespacing
--\parskip=\multitableparskip
--\parindent=\multitableparindent
--\overfullrule=0pt
--\global\colcount=0\relax%
--\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
-- % To parse everything between @multitable and @item :
--\setuptable#1 \endsetuptable
-- % Need to reset this to 0 after \setuptable.
--\global\colcount=0\relax%
-- %
-- % This preamble sets up a generic column definition, which will
-- % be used as many times as user calls for columns.
-- % \vtop will set a single line and will also let text wrap and
-- % continue for many paragraphs if desired.
--\halign\bgroup&\global\advance\colcount by 1\relax%
--\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
-- % In order to keep entries from bumping into each other
-- % we will add a \leftskip of \multitablecolspace to all columns after
-- % the first one.
-- % If a template has been used, we will add \multitablecolspace
-- % to the width of each template entry.
-- % If user has set preamble in terms of percent of \hsize
-- % we will use that dimension as the width of the column, and
-- % the \leftskip will keep entries from bumping into each other.
-- % Table will start at left margin and final column will justify at
-- % right margin.
--\ifnum\colcount=1
--\else
-- \ifsetpercent
-+ \vskip\parskip
-+ \let\item\crcr
-+ \tolerance=9500
-+ \hbadness=9500
-+ \setmultitablespacing
-+ \parskip=\multitableparskip
-+ \parindent=\multitableparindent
-+ \overfullrule=0pt
-+ \global\colcount=0
-+ \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
-+ %
-+ % To parse everything between @multitable and @item:
-+ \setuptable#1 \endsetuptable
-+ %
-+ % \everycr will reset column counter, \colcount, at the end of
-+ % each line. Every column entry will cause \colcount to advance by one.
-+ % The table preamble
-+ % looks at the current \colcount to find the correct column width.
-+ \everycr{\noalign{%
-+ %
-+ % \filbreak%% keeps underfull box messages off when table breaks over pages.
-+ % Maybe so, but it also creates really weird page breaks when the table
-+ % breaks over pages. Wouldn't \vfil be better? Wait until the problem
-+ % manifests itself, so it can be fixed for real --karl.
-+ \global\colcount=0\relax}}%
-+ %
-+ % This preamble sets up a generic column definition, which will
-+ % be used as many times as user calls for columns.
-+ % \vtop will set a single line and will also let text wrap and
-+ % continue for many paragraphs if desired.
-+ \halign\bgroup&\global\advance\colcount by 1\relax
-+ \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
-+ %
-+ % In order to keep entries from bumping into each other
-+ % we will add a \leftskip of \multitablecolspace to all columns after
-+ % the first one.
-+ %
-+ % If a template has been used, we will add \multitablecolspace
-+ % to the width of each template entry.
-+ %
-+ % If the user has set preamble in terms of percent of \hsize we will
-+ % use that dimension as the width of the column, and the \leftskip
-+ % will keep entries from bumping into each other. Table will start at
-+ % left margin and final column will justify at right margin.
-+ %
-+ % Make sure we don't inherit \rightskip from the outer environment.
-+ \rightskip=0pt
-+ \ifnum\colcount=1
-+ % The first column will be indented with the surrounding text.
-+ \advance\hsize by\leftskip
- \else
-- % If user has <not> set preamble in terms of percent of \hsize
-- % we will advance \hsize by \multitablecolspace
-- \advance\hsize by \multitablecolspace
-+ \ifsetpercent \else
-+ % If user has not set preamble in terms of percent of \hsize
-+ % we will advance \hsize by \multitablecolspace.
-+ \advance\hsize by \multitablecolspace
-+ \fi
-+ % In either case we will make \leftskip=\multitablecolspace:
-+ \leftskip=\multitablecolspace
- \fi
-- % In either case we will make \leftskip=\multitablecolspace:
--\leftskip=\multitablecolspace
--\fi
-- % Ignoring space at the beginning and end avoids an occasional spurious
-- % blank line, when TeX decides to break the line at the space before the
-- % box from the multistrut, so the strut ends up on a line by itself.
-- % For example:
-- % @multitable @columnfractions .11 .89
-- % @item @code{#}
-- % @tab Legal holiday which is valid in major parts of the whole country.
-- % Is automatically provided with highlighting sequences respectively marking
-- % characters.
-- \noindent\ignorespaces##\unskip\multistrut}\cr
-- % \everycr will reset column counter, \colcount, at the end of
-- % each line. Every column entry will cause \colcount to advance by one.
-- % The table preamble
-- % looks at the current \colcount to find the correct column width.
--\global\everycr{\noalign{%
--% \filbreak%% keeps underfull box messages off when table breaks over pages.
--% Maybe so, but it also creates really weird page breaks when the table
--% breaks over pages Wouldn't \vfil be better? Wait until the problem
--% manifests itself, so it can be fixed for real --karl.
--\global\colcount=0\relax}}
-+ % Ignoring space at the beginning and end avoids an occasional spurious
-+ % blank line, when TeX decides to break the line at the space before the
-+ % box from the multistrut, so the strut ends up on a line by itself.
-+ % For example:
-+ % @multitable @columnfractions .11 .89
-+ % @item @code{#}
-+ % @tab Legal holiday which is valid in major parts of the whole country.
-+ % Is automatically provided with highlighting sequences respectively marking
-+ % characters.
-+ \noindent\ignorespaces##\unskip\multistrut}\cr
- }
-
- \def\setmultitablespacing{% test to see if user has set \multitablelinespace.
- % If so, do nothing. If not, give it an appropriate dimension based on
- % current baselineskip.
- \ifdim\multitablelinespace=0pt
-+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
-+\global\advance\multitablelinespace by-\ht0
- %% strut to put in table in case some entry doesn't have descenders,
- %% to keep lines equally spaced
- \let\multistrut = \strut
--%% Test to see if parskip is larger than space between lines of
--%% table. If not, do nothing.
--%% If so, set to same dimension as multitablelinespace.
- \else
-+%% FIXME: what is \box0 supposed to be?
- \gdef\multistrut{\vrule height\multitablelinespace depth\dp0
- width0pt\relax} \fi
-+%% Test to see if parskip is larger than space between lines of
-+%% table. If not, do nothing.
-+%% If so, set to same dimension as multitablelinespace.
- \ifdim\multitableparskip>\multitablelinespace
- \global\multitableparskip=\multitablelinespace
- \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
-@@ -2191,6 +2217,356 @@
- \fi}
-
-
-+\message{conditionals,}
-+% Prevent errors for section commands.
-+% Used in @ignore and in failing conditionals.
-+\def\ignoresections{%
-+ \let\chapter=\relax
-+ \let\unnumbered=\relax
-+ \let\top=\relax
-+ \let\unnumberedsec=\relax
-+ \let\unnumberedsection=\relax
-+ \let\unnumberedsubsec=\relax
-+ \let\unnumberedsubsection=\relax
-+ \let\unnumberedsubsubsec=\relax
-+ \let\unnumberedsubsubsection=\relax
-+ \let\section=\relax
-+ \let\subsec=\relax
-+ \let\subsubsec=\relax
-+ \let\subsection=\relax
-+ \let\subsubsection=\relax
-+ \let\appendix=\relax
-+ \let\appendixsec=\relax
-+ \let\appendixsection=\relax
-+ \let\appendixsubsec=\relax
-+ \let\appendixsubsection=\relax
-+ \let\appendixsubsubsec=\relax
-+ \let\appendixsubsubsection=\relax
-+ \let\contents=\relax
-+ \let\smallbook=\relax
-+ \let\titlepage=\relax
-+}
-+
-+% Used in nested conditionals, where we have to parse the Texinfo source
-+% and so want to turn off most commands, in case they are used
-+% incorrectly.
-+%
-+\def\ignoremorecommands{%
-+ \let\defcodeindex = \relax
-+ \let\defcv = \relax
-+ \let\deffn = \relax
-+ \let\deffnx = \relax
-+ \let\defindex = \relax
-+ \let\defivar = \relax
-+ \let\defmac = \relax
-+ \let\defmethod = \relax
-+ \let\defop = \relax
-+ \let\defopt = \relax
-+ \let\defspec = \relax
-+ \let\deftp = \relax
-+ \let\deftypefn = \relax
-+ \let\deftypefun = \relax
-+ \let\deftypeivar = \relax
-+ \let\deftypeop = \relax
-+ \let\deftypevar = \relax
-+ \let\deftypevr = \relax
-+ \let\defun = \relax
-+ \let\defvar = \relax
-+ \let\defvr = \relax
-+ \let\ref = \relax
-+ \let\xref = \relax
-+ \let\printindex = \relax
-+ \let\pxref = \relax
-+ \let\settitle = \relax
-+ \let\setchapternewpage = \relax
-+ \let\setchapterstyle = \relax
-+ \let\everyheading = \relax
-+ \let\evenheading = \relax
-+ \let\oddheading = \relax
-+ \let\everyfooting = \relax
-+ \let\evenfooting = \relax
-+ \let\oddfooting = \relax
-+ \let\headings = \relax
-+ \let\include = \relax
-+ \let\lowersections = \relax
-+ \let\down = \relax
-+ \let\raisesections = \relax
-+ \let\up = \relax
-+ \let\set = \relax
-+ \let\clear = \relax
-+ \let\item = \relax
-+}
-+
-+% Ignore @ignore ... @end ignore.
-+%
-+\def\ignore{\doignore{ignore}}
-+
-+% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-+%
-+\def\ifinfo{\doignore{ifinfo}}
-+\def\ifhtml{\doignore{ifhtml}}
-+\def\ifnottex{\doignore{ifnottex}}
-+\def\html{\doignore{html}}
-+\def\menu{\doignore{menu}}
-+\def\direntry{\doignore{direntry}}
-+
-+% @dircategory CATEGORY -- specify a category of the dir file
-+% which this file should belong to. Ignore this in TeX.
-+\let\dircategory = \comment
-+
-+% Ignore text until a line `@end #1'.
-+%
-+\def\doignore#1{\begingroup
-+ % Don't complain about control sequences we have declared \outer.
-+ \ignoresections
-+ %
-+ % Define a command to swallow text until we reach `@end #1'.
-+ % This @ is a catcode 12 token (that is the normal catcode of @ in
-+ % this texinfo.tex file). We change the catcode of @ below to match.
-+ \long\def\doignoretext##1@end #1{\enddoignore}%
-+ %
-+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
-+ \catcode32 = 10
-+ %
-+ % Ignore braces, too, so mismatched braces don't cause trouble.
-+ \catcode`\{ = 9
-+ \catcode`\} = 9
-+ %
-+ % We must not have @c interpreted as a control sequence.
-+ \catcode`\@ = 12
-+ %
-+ % Make the letter c a comment character so that the rest of the line
-+ % will be ignored. This way, the document can have (for example)
-+ % @c @end ifinfo
-+ % and the @end ifinfo will be properly ignored.
-+ % (We've just changed @ to catcode 12.)
-+ \catcode`\c = 14
-+ %
-+ % And now expand that command.
-+ \doignoretext
-+}
-+
-+% What we do to finish off ignored text.
-+%
-+\def\enddoignore{\endgroup\ignorespaces}%
-+
-+\newif\ifwarnedobs\warnedobsfalse
-+\def\obstexwarn{%
-+ \ifwarnedobs\relax\else
-+ % We need to warn folks that they may have trouble with TeX 3.0.
-+ % This uses \immediate\write16 rather than \message to get newlines.
-+ \immediate\write16{}
-+ \immediate\write16{WARNING: for users of Unix TeX 3.0!}
-+ \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-+ \immediate\write16{If you are running another version of TeX, relax.}
-+ \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-+ \immediate\write16{ Then upgrade your TeX installation if you can.}
-+ \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
-+ \immediate\write16{If you are stuck with version 3.0, run the}
-+ \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
-+ \immediate\write16{ to use a workaround.}
-+ \immediate\write16{}
-+ \global\warnedobstrue
-+ \fi
-+}
-+
-+% **In TeX 3.0, setting text in \nullfont hangs tex. For a
-+% workaround (which requires the file ``dummy.tfm'' to be installed),
-+% uncomment the following line:
-+%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-+
-+% Ignore text, except that we keep track of conditional commands for
-+% purposes of nesting, up to an `@end #1' command.
-+%
-+\def\nestedignore#1{%
-+ \obstexwarn
-+ % We must actually expand the ignored text to look for the @end
-+ % command, so that nested ignore constructs work. Thus, we put the
-+ % text into a \vbox and then do nothing with the result. To minimize
-+ % the change of memory overflow, we follow the approach outlined on
-+ % page 401 of the TeXbook: make the current font be a dummy font.
-+ %
-+ \setbox0 = \vbox\bgroup
-+ % Don't complain about control sequences we have declared \outer.
-+ \ignoresections
-+ %
-+ % Define `@end #1' to end the box, which will in turn undefine the
-+ % @end command again.
-+ \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-+ %
-+ % We are going to be parsing Texinfo commands. Most cause no
-+ % trouble when they are used incorrectly, but some commands do
-+ % complicated argument parsing or otherwise get confused, so we
-+ % undefine them.
-+ %
-+ % We can't do anything about stray @-signs, unfortunately;
-+ % they'll produce `undefined control sequence' errors.
-+ \ignoremorecommands
-+ %
-+ % Set the current font to be \nullfont, a TeX primitive, and define
-+ % all the font commands to also use \nullfont. We don't use
-+ % dummy.tfm, as suggested in the TeXbook, because not all sites
-+ % might have that installed. Therefore, math mode will still
-+ % produce output, but that should be an extremely small amount of
-+ % stuff compared to the main input.
-+ %
-+ \nullfont
-+ \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
-+ \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
-+ \let\tensf=\nullfont
-+ % Similarly for index fonts (mostly for their use in smallexample).
-+ \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
-+ \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
-+ \let\smallsf=\nullfont
-+ %
-+ % Don't complain when characters are missing from the fonts.
-+ \tracinglostchars = 0
-+ %
-+ % Don't bother to do space factor calculations.
-+ \frenchspacing
-+ %
-+ % Don't report underfull hboxes.
-+ \hbadness = 10000
-+ %
-+ % Do minimal line-breaking.
-+ \pretolerance = 10000
-+ %
-+ % Do not execute instructions in @tex
-+ \def\tex{\doignore{tex}}%
-+ % Do not execute macro definitions.
-+ % `c' is a comment character, so the word `macro' will get cut off.
-+ \def\macro{\doignore{ma}}%
-+}
-+
-+% @set VAR sets the variable VAR to an empty value.
-+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-+%
-+% Since we want to separate VAR from REST-OF-LINE (which might be
-+% empty), we can't just use \parsearg; we have to insert a space of our
-+% own to delimit the rest of the line, and then take it out again if we
-+% didn't need it. Make sure the catcode of space is correct to avoid
-+% losing inside @example, for instance.
-+%
-+\def\set{\begingroup\catcode` =10
-+ \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-+ \parsearg\setxxx}
-+\def\setxxx#1{\setyyy#1 \endsetyyy}
-+\def\setyyy#1 #2\endsetyyy{%
-+ \def\temp{#2}%
-+ \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-+ \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-+ \fi
-+ \endgroup
-+}
-+% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-+% \next or other control sequences that we've defined might get us into
-+% an infinite loop. Consider `@set foo @cite{bar}'.
-+\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
-+
-+% @clear VAR clears (i.e., unsets) the variable VAR.
-+%
-+\def\clear{\parsearg\clearxxx}
-+\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-+
-+% @value{foo} gets the text saved in variable foo.
-+{
-+ \catcode`\_ = \active
-+ %
-+ % We might end up with active _ or - characters in the argument if
-+ % we're called from @code, as @code{@value{foo-bar_}}. So \let any
-+ % such active characters to their normal equivalents.
-+ \gdef\value{\begingroup
-+ \catcode`\-=12 \catcode`\_=12
-+ \indexbreaks \let_\normalunderscore
-+ \valuexxx}
-+}
-+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-+
-+% We have this subroutine so that we can handle at least some @value's
-+% properly in indexes (we \let\value to this in \indexdummies). Ones
-+% whose names contain - or _ still won't work, but we can't do anything
-+% about that. The command has to be fully expandable, since the result
-+% winds up in the index file. This means that if the variable's value
-+% contains other Texinfo commands, it's almost certain it will fail
-+% (although perhaps we could fix that with sufficient work to do a
-+% one-level expansion on the result, instead of complete).
-+%
-+\def\expandablevalue#1{%
-+ \expandafter\ifx\csname SET#1\endcsname\relax
-+ {[No value for ``#1'']}%
-+ \else
-+ \csname SET#1\endcsname
-+ \fi
-+}
-+
-+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-+% with @set.
-+%
-+\def\ifset{\parsearg\ifsetxxx}
-+\def\ifsetxxx #1{%
-+ \expandafter\ifx\csname SET#1\endcsname\relax
-+ \expandafter\ifsetfail
-+ \else
-+ \expandafter\ifsetsucceed
-+ \fi
-+}
-+\def\ifsetsucceed{\conditionalsucceed{ifset}}
-+\def\ifsetfail{\nestedignore{ifset}}
-+\defineunmatchedend{ifset}
-+
-+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-+% defined with @set, or has been undefined with @clear.
-+%
-+\def\ifclear{\parsearg\ifclearxxx}
-+\def\ifclearxxx #1{%
-+ \expandafter\ifx\csname SET#1\endcsname\relax
-+ \expandafter\ifclearsucceed
-+ \else
-+ \expandafter\ifclearfail
-+ \fi
-+}
-+\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-+\def\ifclearfail{\nestedignore{ifclear}}
-+\defineunmatchedend{ifclear}
-+
-+% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
-+% following, through the first @end iftex (etc.). Make `@end iftex'
-+% (etc.) valid only after an @iftex.
-+%
-+\def\iftex{\conditionalsucceed{iftex}}
-+\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-+\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-+\defineunmatchedend{iftex}
-+\defineunmatchedend{ifnothtml}
-+\defineunmatchedend{ifnotinfo}
-+
-+% We can't just want to start a group at @iftex (for example) and end it
-+% at @end iftex, since then @set commands inside the conditional have no
-+% effect (they'd get reverted at the end of the group). So we must
-+% define \Eiftex to redefine itself to be its previous value. (We can't
-+% just define it to fail again with an ``unmatched end'' error, since
-+% the @ifset might be nested.)
-+%
-+\def\conditionalsucceed#1{%
-+ \edef\temp{%
-+ % Remember the current value of \E#1.
-+ \let\nece{prevE#1} = \nece{E#1}%
-+ %
-+ % At the `@end #1', redefine \E#1 to be its previous value.
-+ \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
-+ }%
-+ \temp
-+}
-+
-+% We need to expand lots of \csname's, but we don't want to expand the
-+% control sequences after we've constructed them.
-+%
-+\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
-+
-+% @defininfoenclose.
-+\let\definfoenclose=\comment
-+
-+
- \message{indexing,}
- % Index generation facilities
-
-@@ -2206,12 +2582,14 @@
- % the file that accumulates this index. The file's extension is foo.
- % The name of an index should be no more than 2 characters long
- % for the sake of vms.
--
--\def\newindex #1{
--\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
--\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
--\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
--\noexpand\doindex {#1}}
-+%
-+\def\newindex#1{%
-+ \iflinks
-+ \expandafter\newwrite \csname#1indfile\endcsname
-+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-+ \fi
-+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
-+ \noexpand\doindex{#1}}
- }
-
- % @defindex foo == \newindex{foo}
-@@ -2220,31 +2598,37 @@
-
- % Define @defcodeindex, like @defindex except put all entries in @code.
-
--\def\newcodeindex #1{
--\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
--\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
--\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
--\noexpand\docodeindex {#1}}
-+\def\newcodeindex#1{%
-+ \iflinks
-+ \expandafter\newwrite \csname#1indfile\endcsname
-+ \openout \csname#1indfile\endcsname \jobname.#1
-+ \fi
-+ \expandafter\xdef\csname#1index\endcsname{%
-+ \noexpand\docodeindex{#1}}
- }
-
- \def\defcodeindex{\parsearg\newcodeindex}
-
- % @synindex foo bar makes index foo feed into index bar.
- % Do this instead of @defindex foo if you don't want it as a separate index.
--\def\synindex #1 #2 {%
--\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
--\expandafter\let\csname#1indfile\endcsname=\synindexfoo
--\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
--\noexpand\doindex {#2}}%
-+% The \closeout helps reduce unnecessary open files; the limit on the
-+% Acorn RISC OS is a mere 16 files.
-+\def\synindex#1 #2 {%
-+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-+ \expandafter\closeout\csname#1indfile\endcsname
-+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-+ \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
-+ \noexpand\doindex{#2}}%
- }
-
- % @syncodeindex foo bar similar, but put all entries made for index foo
- % inside @code.
--\def\syncodeindex #1 #2 {%
--\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
--\expandafter\let\csname#1indfile\endcsname=\synindexfoo
--\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
--\noexpand\docodeindex {#2}}%
-+\def\syncodeindex#1 #2 {%
-+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-+ \expandafter\closeout\csname#1indfile\endcsname
-+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-+ \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
-+ \noexpand\docodeindex{#2}}%
- }
-
- % Define \doindex, the driver for all \fooindex macros.
-@@ -2265,6 +2649,7 @@
- \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
- \def\indexdummies{%
-+\def\ { }%
- % Take care of the plain tex accent commands.
- \def\"{\realbackslash "}%
- \def\`{\realbackslash `}%
-@@ -2294,8 +2679,11 @@
- % (Must be a way to avoid doing expansion at all, and thus not have to
- % laboriously list every single command here.)
- \def\@{@}% will be @@ when we switch to @ as escape char.
--%\let\{ = \lbracecmd
--%\let\} = \rbracecmd
-+% Need these in case \tex is in effect and \{ is a \delimiter again.
-+% But can't use \lbracecmd and \rbracecmd because texindex assumes
-+% braces and backslashes are used only as delimiters.
-+\let\{ = \mylbrace
-+\let\} = \myrbrace
- \def\_{{\realbackslash _}}%
- \def\w{\realbackslash w }%
- \def\bf{\realbackslash bf }%
-@@ -2306,7 +2694,6 @@
- \def\gtr{\realbackslash gtr}%
- \def\less{\realbackslash less}%
- \def\hat{\realbackslash hat}%
--%\def\char{\realbackslash char}%
- \def\TeX{\realbackslash TeX}%
- \def\dots{\realbackslash dots }%
- \def\result{\realbackslash result}%
-@@ -2318,6 +2705,11 @@
- \def\copyright{\realbackslash copyright}%
- \def\tclose##1{\realbackslash tclose {##1}}%
- \def\code##1{\realbackslash code {##1}}%
-+\def\uref##1{\realbackslash uref {##1}}%
-+\def\url##1{\realbackslash url {##1}}%
-+\def\env##1{\realbackslash env {##1}}%
-+\def\command##1{\realbackslash command {##1}}%
-+\def\option##1{\realbackslash option {##1}}%
- \def\dotless##1{\realbackslash dotless {##1}}%
- \def\samp##1{\realbackslash samp {##1}}%
- \def\,##1{\realbackslash ,{##1}}%
-@@ -2333,8 +2725,16 @@
- \def\kbd##1{\realbackslash kbd {##1}}%
- \def\dfn##1{\realbackslash dfn {##1}}%
- \def\emph##1{\realbackslash emph {##1}}%
--\def\value##1{\realbackslash value {##1}}%
-+\def\acronym##1{\realbackslash acronym {##1}}%
-+%
-+% Handle some cases of @value -- where the variable name does not
-+% contain - or _, and the value does not contain any
-+% (non-fully-expandable) commands.
-+\let\value = \expandablevalue
-+%
- \unsepspaces
-+% Turn off macro expansion
-+\turnoffmacros
- }
-
- % If an index command is used in an @example environment, any spaces
-@@ -2391,6 +2791,12 @@
- %\let\tt=\indexdummyfont
- \let\tclose=\indexdummyfont
- \let\code=\indexdummyfont
-+\let\url=\indexdummyfont
-+\let\uref=\indexdummyfont
-+\let\env=\indexdummyfont
-+\let\acronym=\indexdummyfont
-+\let\command=\indexdummyfont
-+\let\option=\indexdummyfont
- \let\file=\indexdummyfont
- \let\samp=\indexdummyfont
- \let\kbd=\indexdummyfont
-@@ -2406,14 +2812,24 @@
- % so we do not become unable to do a definition.
-
- {\catcode`\@=0 \catcode`\\=\other
--@gdef@realbackslash{\}}
-+ @gdef@realbackslash{\}}
-
- \let\indexbackslash=0 %overridden during \printindex.
-+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-+
-+% For \ifx comparisons.
-+\def\emptymacro{\empty}
-
--\let\SETmarginindex=\relax %initialize!
--% workhorse for all \fooindexes
--% #1 is name of index, #2 is stuff to put there
--\def\doind #1#2{%
-+% Most index entries go through here, but \dosubind is the general case.
-+%
-+\def\doind#1#2{\dosubind{#1}{#2}\empty}
-+
-+% Workhorse for all \fooindexes.
-+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-+% \empty if called from \doind, as we usually are. The main exception
-+% is with defuns, which call us directly.
-+%
-+\def\dosubind#1#2#3{%
- % Put the index entry in the margin if desired.
- \ifx\SETmarginindex\relax\else
- \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-@@ -2424,48 +2840,75 @@
- \indexdummies % Must do this here, since \bf, etc expand at this stage
- \escapechar=`\\
- {%
-- \let\folio=0% We will expand all macros now EXCEPT \folio.
-+ \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.
- %
-- % First process the index-string with all font commands turned off
-- % to get the string to sort by.
-- {\indexnofonts \xdef\indexsorttmp{#2}}%
-+ \def\thirdarg{#3}%
- %
-- % Now produce the complete index entry, with both the sort key and the
-- % original text, including any font commands.
-+ % If third arg is present, precede it with space in sort key.
-+ \ifx\thirdarg\emptymacro
-+ \let\subentry = \empty
-+ \else
-+ \def\subentry{ #3}%
-+ \fi
-+ %
-+ % First process the index entry with all font commands turned
-+ % off to get the string to sort by.
-+ {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
-+ %
-+ % Now the real index entry with the fonts.
- \toks0 = {#2}%
-+ %
-+ % If third (subentry) arg is present, add it to the index
-+ % string. And include a space.
-+ \ifx\thirdarg\emptymacro \else
-+ \toks0 = \expandafter{\the\toks0 \space #3}%
-+ \fi
-+ %
-+ % 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, texindex reduces to
-+ % two when writing the .??s sorted result.
- \edef\temp{%
- \write\csname#1indfile\endcsname{%
- \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
- }%
-- \temp
-+ %
-+ % 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-\lastskip \fi
-+ \fi
-+ %
-+ \temp % do the write
-+ %
-+ %
-+ \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
-+ \fi
- }%
- }%
- \penalty\count255
- }%
- }
-
--\def\dosubind #1#2#3{%
--{\count10=\lastpenalty %
--{\indexdummies % Must do this here, since \bf, etc expand at this stage
--\escapechar=`\\%
--{\let\folio=0%
--\def\rawbackslashxx{\indexbackslash}%
--%
--% Now process the index-string once, with all font commands turned off,
--% to get the string to sort the index by.
--{\indexnofonts
--\xdef\temp1{#2 #3}%
--}%
--% Now produce the complete index entry. We process the index-string again,
--% this time with font commands expanded, to get what to print in the index.
--\edef\temp{%
--\write \csname#1indfile\endcsname{%
--\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
--\temp }%
--}\penalty\count10}}
--
- % The index entry written in the file actually looks like
- % \entry {sortstring}{page}{topic}
- % or
-@@ -2505,18 +2948,23 @@
- \def\doprintindex#1{\begingroup
- \dobreak \chapheadingskip{10000}%
- %
-- \indexfonts \rm
-+ \smallfonts \rm
- \tolerance = 9500
- \indexbreaks
- %
- % See if the index file exists and is nonempty.
-+ % Change catcode of @ here so that if the index file contains
-+ % \initial {@}
-+ % as its first line, TeX doesn't complain about mismatched braces
-+ % (because it thinks @} is a control sequence).
-+ \catcode`\@ = 11
- \openin 1 \jobname.#1s
- \ifeof 1
- % \enddoublecolumns gets confused if there is no text in the index,
- % and it loses the chapter title and the aux file entries for the
- % index. The easiest way to prevent this problem is to make sure
- % there is some text.
-- (Index is nonexistent)
-+ \putwordIndexNonexistent
- \else
- %
- % If the index file exists but is empty, then \openin leaves \ifeof
-@@ -2524,14 +2972,13 @@
- % it can discover if there is anything in it.
- \read 1 to \temp
- \ifeof 1
-- (Index is empty)
-+ \putwordIndexIsEmpty
- \else
- % Index files are almost Texinfo source, but we use \ as the escape
- % character. It would be better to use @, but that's too big a change
- % to make right now.
- \def\indexbackslash{\rawbackslashxx}%
- \catcode`\\ = 0
-- \catcode`\@ = 11
- \escapechar = `\\
- \begindoublecolumns
- \input \jobname.#1s
-@@ -2544,21 +2991,35 @@
- % These macros are used by the sorted index file itself.
- % Change them to control the appearance of the index.
-
--% Same as \bigskipamount except no shrink.
--% \balancecolumns gets confused if there is any shrink.
--\newskip\initialskipamount \initialskipamount 12pt plus4pt
--
--\def\initial #1{%
--{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
--\ifdim\lastskip<\initialskipamount
--\removelastskip \penalty-200 \vskip \initialskipamount\fi
--\line{\secbf#1\hfill}\kern 2pt\penalty10000}}
-+\def\initial#1{{%
-+ % Some minor font changes for the special characters.
-+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-+ %
-+ % Remove any glue we may have, we'll be inserting our own.
-+ \removelastskip
-+ %
-+ % We like breaks before the index initials, so insert a bonus.
-+ \penalty -300
-+ %
-+ % Typeset the initial. Making this add up to a whole number of
-+ % baselineskips increases the chance of the dots lining up from column
-+ % to column. It still won't often be perfect, because of the stretch
-+ % we need before each entry, but it's better.
-+ %
-+ % No shrink because it confuses \balancecolumns.
-+ \vskip 1.67\baselineskip plus .5\baselineskip
-+ \leftline{\secbf #1}%
-+ \vskip .33\baselineskip plus .1\baselineskip
-+ %
-+ % Do our best not to break after the initial.
-+ \nobreak
-+}}
-
- % This typesets a paragraph consisting of #1, dot leaders, and then #2
- % flush to the right margin. It is used for index and table of contents
- % entries. The paragraph is indented by \leftskip.
- %
--\def\entry #1#2{\begingroup
-+\def\entry#1#2{\begingroup
- %
- % Start a new paragraph if necessary, so our assignments below can't
- % affect previous text.
-@@ -2581,12 +3042,15 @@
- %
- % \hangafter is reset to 1 (which is the value we want) at the start
- % of each paragraph, so we need not do anything with that.
-- \hangindent=2em
-+ \hangindent = 2em
- %
- % When the entry text needs to be broken, just fill out the first line
- % with blank space.
- \rightskip = 0pt plus1fil
- %
-+ % A bit of stretch before each entry for the benefit of balancing columns.
-+ \vskip 0pt plus1pt
-+ %
- % Start a ``paragraph'' for the index entry so the line breaking
- % parameters we've set above will have an effect.
- \noindent
-@@ -2611,7 +3075,11 @@
- % The `\ ' here is removed by the implicit \unskip that TeX does as
- % part of (the primitive) \par. Without it, a spurious underfull
- % \hbox ensues.
-- \ #2% The page number ends the paragraph.
-+ \ifpdf
-+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-+ \else
-+ \ #2% The page number ends the paragraph.
-+ \fi
- \fi%
- \par
- \endgroup}
-@@ -2640,24 +3108,26 @@
-
- \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
- % Grab any single-column material above us.
-- \output = {\global\setbox\partialpage = \vbox{%
-- %
-+ \output = {%
-+ %
- % Here is a possibility not foreseen in manmac: if we accumulate a
- % whole lot of material, we might end up calling this \output
- % routine twice in a row (see the doublecol-lose test, which is
- % essentially a couple of indexes with @setchapternewpage off). In
-- % that case, we must prevent the second \partialpage from
-- % simply overwriting the first, causing us to lose the page.
-- % This will preserve it until a real output routine can ship it
-- % out. Generally, \partialpage will be empty when this runs and
-- % this will be a no-op.
-- \unvbox\partialpage
-+ % that case we just ship out what is in \partialpage with the normal
-+ % output routine. Generally, \partialpage will be empty when this
-+ % runs and this will be a no-op. See the indexspread.tex test case.
-+ \ifvoid\partialpage \else
-+ \onepageout{\pagecontents\partialpage}%
-+ \fi
- %
-- % Unvbox the main output page.
-- \unvbox255
-- \kern-\topskip \kern\baselineskip
-- }}%
-- \eject
-+ \global\setbox\partialpage = \vbox{%
-+ % Unvbox the main output page.
-+ \unvbox\PAGE
-+ \kern-\topskip \kern\baselineskip
-+ }%
-+ }%
-+ \eject % run that output routine to set \partialpage
- %
- % Use the double-column output routine for subsequent pages.
- \output = {\doublecolumnout}%
-@@ -2685,14 +3155,21 @@
- %
- % Double the \vsize as well. (We don't need a separate register here,
- % since nobody clobbers \vsize.)
-+ \advance\vsize by -\ht\partialpage
- \vsize = 2\vsize
- }
-+
-+% The double-column output routine for all double-column pages except
-+% the last.
-+%
- \def\doublecolumnout{%
- \splittopskip=\topskip \splitmaxdepth=\maxdepth
- % Get the available space for the double columns -- the normal
- % (undoubled) page height minus any material left over from the
- % previous page.
-- \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
-+ \dimen@ = \vsize
-+ \divide\dimen@ by 2
-+ %
- % box0 will be the left-hand column, box2 the right.
- \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
- \onepageout\pagesofar
-@@ -2701,42 +3178,67 @@
- }
- \def\pagesofar{%
- % Re-output the contents of the output page -- any previous material,
-- % followed by the two boxes we just split.
-+ % followed by the two boxes we just split, in box0 and box2.
- \unvbox\partialpage
-+ %
- \hsize = \doublecolumnhsize
-- \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
-+ \wd0=\hsize \wd2=\hsize
-+ \hbox to\pagewidth{\box0\hfil\box2}%
- }
- \def\enddoublecolumns{%
-- \output = {\balancecolumns}\eject % split what we have
-+ \output = {%
-+ % Split the last of the double-column material. Leave it on the
-+ % current page, no automatic page break.
-+ \balancecolumns
-+ %
-+ % If we end up splitting too much material for the current page,
-+ % though, there will be another page break right after this \output
-+ % invocation ends. Having called \balancecolumns once, we do not
-+ % want to call it again. Therefore, reset \output to its normal
-+ % definition right away. (We hope \balancecolumns will never be
-+ % called on to balance too much material, but if it is, this makes
-+ % the output somewhat more palatable.)
-+ \global\output = {\onepageout{\pagecontents\PAGE}}%
-+ }%
-+ \eject
- \endgroup % started in \begindoublecolumns
- %
-- % Back to normal single-column typesetting, but take account of the
-- % fact that we just accumulated some stuff on the output page.
-+ % \pagegoal was set to the doubled \vsize above, since we restarted
-+ % the current page. We're now back to normal single-column
-+ % typesetting, so reset \pagegoal to the normal \vsize (after the
-+ % \endgroup where \vsize got restored).
- \pagegoal = \vsize
- }
- \def\balancecolumns{%
- % Called at the end of the double column material.
-- \setbox0 = \vbox{\unvbox255}%
-+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
- \dimen@ = \ht0
- \advance\dimen@ by \topskip
- \advance\dimen@ by-\baselineskip
-- \divide\dimen@ by 2
-+ \divide\dimen@ by 2 % target to split to
-+ %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
- \splittopskip = \topskip
- % Loop until we get a decent breakpoint.
-- {\vbadness=10000 \loop
-- \global\setbox3=\copy0
-- \global\setbox1=\vsplit3 to\dimen@
-- \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt
-- \repeat}%
-+ {%
-+ \vbadness = 10000
-+ \loop
-+ \global\setbox3 = \copy0
-+ \global\setbox1 = \vsplit3 to \dimen@
-+ \ifdim\ht3>\dimen@
-+ \global\advance\dimen@ by 1pt
-+ \repeat
-+ }%
-+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
- \setbox0=\vbox to\dimen@{\unvbox1}%
- \setbox2=\vbox to\dimen@{\unvbox3}%
-+ %
- \pagesofar
- }
- \catcode`\@ = \other
-
-
- \message{sectioning,}
--% Define chapters, sections, etc.
-+% Chapters, sections, etc.
-
- \newcount\chapno
- \newcount\secno \secno=0
-@@ -2745,58 +3247,48 @@
-
- % This counter is funny since it counts through charcodes of letters A, B, ...
- \newcount\appendixno \appendixno = `\@
--\def\appendixletter{\char\the\appendixno}
--
--\newwrite\contentsfile
--% This is called from \setfilename.
--\def\opencontents{\openout\contentsfile = \jobname.toc }
-+% \def\appendixletter{\char\the\appendixno}
-+% We do the following for the sake of pdftex, which needs the actual
-+% letter in the expansion, not just typeset.
-+\def\appendixletter{%
-+ \ifnum\appendixno=`A A%
-+ \else\ifnum\appendixno=`B B%
-+ \else\ifnum\appendixno=`C C%
-+ \else\ifnum\appendixno=`D D%
-+ \else\ifnum\appendixno=`E E%
-+ \else\ifnum\appendixno=`F F%
-+ \else\ifnum\appendixno=`G G%
-+ \else\ifnum\appendixno=`H H%
-+ \else\ifnum\appendixno=`I I%
-+ \else\ifnum\appendixno=`J J%
-+ \else\ifnum\appendixno=`K K%
-+ \else\ifnum\appendixno=`L L%
-+ \else\ifnum\appendixno=`M M%
-+ \else\ifnum\appendixno=`N N%
-+ \else\ifnum\appendixno=`O O%
-+ \else\ifnum\appendixno=`P P%
-+ \else\ifnum\appendixno=`Q Q%
-+ \else\ifnum\appendixno=`R R%
-+ \else\ifnum\appendixno=`S S%
-+ \else\ifnum\appendixno=`T T%
-+ \else\ifnum\appendixno=`U U%
-+ \else\ifnum\appendixno=`V V%
-+ \else\ifnum\appendixno=`W W%
-+ \else\ifnum\appendixno=`X X%
-+ \else\ifnum\appendixno=`Y Y%
-+ \else\ifnum\appendixno=`Z Z%
-+ % The \the is necessary, despite appearances, because \appendixletter is
-+ % expanded while writing the .toc file. \char\appendixno is not
-+ % expandable, thus it is written literally, thus all appendixes come out
-+ % with the same letter (or @) in the toc without it.
-+ \else\char\the\appendixno
-+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
- % Each @chapter defines this as the name of the chapter.
--% page headings and footings can use it. @section does likewise
--
--\def\thischapter{} \def\thissection{}
--\def\seccheck#1{\ifnum \pageno<0
-- \errmessage{@#1 not allowed after generating table of contents}%
--\fi}
--
--\def\chapternofonts{%
-- \let\rawbackslash=\relax
-- \let\frenchspacing=\relax
-- \def\result{\realbackslash result}%
-- \def\equiv{\realbackslash equiv}%
-- \def\expansion{\realbackslash expansion}%
-- \def\print{\realbackslash print}%
-- \def\TeX{\realbackslash TeX}%
-- \def\dots{\realbackslash dots}%
-- \def\result{\realbackslash result}%
-- \def\equiv{\realbackslash equiv}%
-- \def\expansion{\realbackslash expansion}%
-- \def\print{\realbackslash print}%
-- \def\error{\realbackslash error}%
-- \def\point{\realbackslash point}%
-- \def\copyright{\realbackslash copyright}%
-- \def\tt{\realbackslash tt}%
-- \def\bf{\realbackslash bf}%
-- \def\w{\realbackslash w}%
-- \def\less{\realbackslash less}%
-- \def\gtr{\realbackslash gtr}%
-- \def\hat{\realbackslash hat}%
-- \def\char{\realbackslash char}%
-- \def\tclose##1{\realbackslash tclose{##1}}%
-- \def\code##1{\realbackslash code{##1}}%
-- \def\samp##1{\realbackslash samp{##1}}%
-- \def\r##1{\realbackslash r{##1}}%
-- \def\b##1{\realbackslash b{##1}}%
-- \def\key##1{\realbackslash key{##1}}%
-- \def\file##1{\realbackslash file{##1}}%
-- \def\kbd##1{\realbackslash kbd{##1}}%
-- % These are redefined because @smartitalic wouldn't work inside xdef.
-- \def\i##1{\realbackslash i{##1}}%
-- \def\cite##1{\realbackslash cite{##1}}%
-- \def\var##1{\realbackslash var{##1}}%
-- \def\emph##1{\realbackslash emph{##1}}%
-- \def\dfn##1{\realbackslash dfn{##1}}%
--}
-+% page headings and footings can use it. @section does likewise.
-+\def\thischapter{}
-+\def\thissection{}
-
- \newcount\absseclevel % used to calculate proper heading level
- \newcount\secbase\secbase=0 % @raise/lowersections modify this count
-@@ -2868,59 +3360,59 @@
- \fi
- }
-
--
-+% @chapter, @appendix, @unnumbered.
- \def\thischaptername{No Chapter Title}
- \outer\def\chapter{\parsearg\chapteryyy}
- \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
--\def\chapterzzz #1{\seccheck{chapter}%
-+\def\chapterzzz #1{%
- \secno=0 \subsecno=0 \subsubsecno=0
--\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
-+\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
- \chapmacro {#1}{\the\chapno}%
- \gdef\thissection{#1}%
- \gdef\thischaptername{#1}%
- % We don't substitute the actual chapter name into \thischapter
- % because we don't want its macros evaluated now.
- \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\donoderef %
-+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
-+ {\the\chapno}}}%
-+\temp
-+\donoderef
- \global\let\section = \numberedsec
- \global\let\subsection = \numberedsubsec
- \global\let\subsubsection = \numberedsubsubsec
--}}
-+}
-
- \outer\def\appendix{\parsearg\appendixyyy}
- \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
--\def\appendixzzz #1{\seccheck{appendix}%
-+\def\appendixzzz #1{%
- \secno=0 \subsecno=0 \subsubsecno=0
--\global\advance \appendixno by 1 \message{Appendix \appendixletter}%
-+\global\advance \appendixno by 1
-+\message{\putwordAppendix\space \appendixletter}%
- \chapmacro {#1}{\putwordAppendix{} \appendixletter}%
- \gdef\thissection{#1}%
- \gdef\thischaptername{#1}%
- \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash chapentry{\the\toks0}%
-- {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\appendixnoderef %
-+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
-+ {\putwordAppendix{} \appendixletter}}}%
-+\temp
-+\appendixnoderef
- \global\let\section = \appendixsec
- \global\let\subsection = \appendixsubsec
- \global\let\subsubsection = \appendixsubsubsec
--}}
-+}
-
- % @centerchap is like @unnumbered, but the heading is centered.
- \outer\def\centerchap{\parsearg\centerchapyyy}
- \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-
-+% @top is like @unnumbered.
- \outer\def\top{\parsearg\unnumberedyyy}
-+
- \outer\def\unnumbered{\parsearg\unnumberedyyy}
- \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
--\def\unnumberedzzz #1{\seccheck{unnumbered}%
-+\def\unnumberedzzz #1{%
- \secno=0 \subsecno=0 \subsubsecno=0
- %
- % This used to be simply \message{#1}, but TeX fully expands the
-@@ -2932,155 +3424,139 @@
- % Anyway, we don't want the fully-expanded definition of @cite to appear
- % as a result of the \message, we just want `@cite' itself. We use
- % \the<toks register> to achieve this: TeX expands \the<toks> only once,
--% simply yielding the contents of the <toks register>.
-+% simply yielding the contents of <toks register>. (We also do this for
-+% the toc entries.)
- \toks0 = {#1}\message{(\the\toks0)}%
- %
- \unnumbchapmacro {#1}%
- \gdef\thischapter{#1}\gdef\thissection{#1}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\unnumbnoderef %
-+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
-+\temp
-+\unnumbnoderef
- \global\let\section = \unnumberedsec
- \global\let\subsection = \unnumberedsubsec
- \global\let\subsubsection = \unnumberedsubsubsec
--}}
-+}
-
-+% Sections.
- \outer\def\numberedsec{\parsearg\secyyy}
- \def\secyyy #1{\numhead1{#1}} % normally calls seczzz
--\def\seczzz #1{\seccheck{section}%
-+\def\seczzz #1{%
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash secentry %
--{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\donoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
-+ {\the\chapno}{\the\secno}}}%
-+\temp
-+\donoderef
-+\nobreak
-+}
-
- \outer\def\appendixsection{\parsearg\appendixsecyyy}
- \outer\def\appendixsec{\parsearg\appendixsecyyy}
- \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
--\def\appendixsectionzzz #1{\seccheck{appendixsection}%
-+\def\appendixsectionzzz #1{%
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash secentry %
--{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\appendixnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
-+ {\appendixletter}{\the\secno}}}%
-+\temp
-+\appendixnoderef
-+\nobreak
-+}
-
- \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
- \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
--\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
-+\def\unnumberedseczzz #1{%
- \plainsecheading {#1}\gdef\thissection{#1}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\unnumbnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
-+\temp
-+\unnumbnoderef
-+\nobreak
-+}
-
-+% Subsections.
- \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
- \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
--\def\numberedsubseczzz #1{\seccheck{subsection}%
-+\def\numberedsubseczzz #1{%
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash subsecentry %
--{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\donoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
-+ {\the\chapno}{\the\secno}{\the\subsecno}}}%
-+\temp
-+\donoderef
-+\nobreak
-+}
-
- \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
- \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
--\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
-+\def\appendixsubseczzz #1{%
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash subsecentry %
--{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\appendixnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
-+ {\appendixletter}{\the\secno}{\the\subsecno}}}%
-+\temp
-+\appendixnoderef
-+\nobreak
-+}
-
- \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
- \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
--\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
-+\def\unnumberedsubseczzz #1{%
- \plainsubsecheading {#1}\gdef\thissection{#1}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\unnumbnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
-+ {\the\toks0}}}%
-+\temp
-+\unnumbnoderef
-+\nobreak
-+}
-
-+% Subsubsections.
- \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
- \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
--\def\numberedsubsubseczzz #1{\seccheck{subsubsection}%
-+\def\numberedsubsubseczzz #1{%
- \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
- \subsubsecheading {#1}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash subsubsecentry{\the\toks0}
-- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
-- {\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\donoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
-+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-+\temp
-+\donoderef
-+\nobreak
-+}
-
- \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
- \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
--\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
-+\def\appendixsubsubseczzz #1{%
- \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
- \subsubsecheading {#1}
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash subsubsecentry{\the\toks0}%
-- {\appendixletter}
-- {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\appendixnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
-+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-+\temp
-+\appendixnoderef
-+\nobreak
-+}
-
- \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
- \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
--\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
-+\def\unnumberedsubsubseczzz #1{%
- \plainsubsubsecheading {#1}\gdef\thissection{#1}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\unnumbnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
-+ {\the\toks0}}}%
-+\temp
-+\unnumbnoderef
-+\nobreak
-+}
-
- % These are variants which are not "outer", so they can appear in @ifinfo.
- % Actually, they should now be obsolete; ordinary section commands should work.
-@@ -3109,8 +3585,7 @@
-
- % Define @majorheading, @heading and @subheading
-
--% NOTE on use of \vbox for chapter headings, section headings, and
--% such:
-+% NOTE on use of \vbox for chapter headings, section headings, and such:
- % 1) We use \vbox rather than the earlier \line to permit
- % overlong headings to fold.
- % 2) \hyphenpenalty is set to 10000 because hyphenation in a
-@@ -3157,12 +3632,12 @@
-
- \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
--\def\CHAPPAGoff{
-+\def\CHAPPAGoff{%
- \global\let\contentsalignmacro = \chappager
- \global\let\pchapsepmacro=\chapbreak
- \global\let\pagealignmacro=\chappager}
-
--\def\CHAPPAGon{
-+\def\CHAPPAGon{%
- \global\let\contentsalignmacro = \chappager
- \global\let\pchapsepmacro=\chappager
- \global\let\pagealignmacro=\chappager
-@@ -3216,7 +3691,7 @@
- \def\unnchfopen #1{%
- \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
-- \rm #1\hfill}}\bigskip \par\penalty 10000 %
-+ \rm #1\hfill}}\bigskip \par\nobreak
- }
-
- \def\chfopen #1#2{\chapoddpage {\chapfonts
-@@ -3227,7 +3702,7 @@
- \def\centerchfopen #1{%
- \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt
-- \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
-+ \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
- }
-
- \def\CHAPFopen{
-@@ -3280,24 +3755,45 @@
- }
-
-
--\message{toc printing,}
--% Finish up the main text and prepare to read what we've written
--% to \contentsfile.
-+\message{toc,}
-+% Table of contents.
-+\newwrite\tocfile
-+
-+% Write an entry to the toc file, opening it if necessary.
-+% Called from @chapter, etc. We supply {\folio} at the end of the
-+% argument, which will end up as the last argument to the \...entry macro.
-+%
-+% We open the .toc file here instead of at @setfilename or any other
-+% given time so that @contents can be put in the document anywhere.
-+%
-+\newif\iftocfileopened
-+\def\writetocentry#1{%
-+ \iftocfileopened\else
-+ \immediate\openout\tocfile = \jobname.toc
-+ \global\tocfileopenedtrue
-+ \fi
-+ \iflinks \write\tocfile{#1{\folio}}\fi
-+}
-
- \newskip\contentsrightmargin \contentsrightmargin=1in
-+\newcount\savepageno
-+\newcount\lastnegativepageno \lastnegativepageno = -1
-+
-+% Finish up the main text and prepare to read what we've written
-+% to \tocfile.
-+%
- \def\startcontents#1{%
- % If @setchapternewpage on, and @headings double, the contents should
- % start on an odd page, unlike chapters. Thus, we maintain
- % \contentsalignmacro in parallel with \pagealignmacro.
- % From: Torbjorn Granlund <tege@matematik.su.se>
- \contentsalignmacro
-- \immediate\closeout \contentsfile
-- \ifnum \pageno>0
-- \pageno = -1 % Request roman numbered pages.
-- \fi
-+ \immediate\closeout\tocfile
-+ %
- % Don't need to put `Contents' or `Short Contents' in the headline.
- % It is abundantly clear what they are.
- \unnumbchapmacro{#1}\def\thischapter{}%
-+ \savepageno = \pageno
- \begingroup % Set up to handle contents files properly.
- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
- % We can't do this, because then an actual ^ in a section
-@@ -3305,20 +3801,31 @@
- %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
- \raggedbottom % Worry more about breakpoints than the bottom.
- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-+ %
-+ % Roman numerals for page numbers.
-+ \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
- }
-
-
- % Normal (long) toc.
--\outer\def\contents{%
-- \startcontents{\putwordTableofContents}%
-- \input \jobname.toc
-+\def\contents{%
-+ \startcontents{\putwordTOC}%
-+ \openin 1 \jobname.toc
-+ \ifeof 1 \else
-+ \closein 1
-+ \input \jobname.toc
-+ \fi
-+ \vfill \eject
-+ \contentsalignmacro % in case @setchapternewpage odd is in effect
-+ \pdfmakeoutlines
- \endgroup
-- \vfill \eject
-+ \lastnegativepageno = \pageno
-+ \pageno = \savepageno
- }
-
- % And just the chapters.
--\outer\def\summarycontents{%
-- \startcontents{\putwordShortContents}%
-+\def\summarycontents{%
-+ \startcontents{\putwordShortTOC}%
- %
- \let\chapentry = \shortchapentry
- \let\unnumbchapentry = \shortunnumberedentry
-@@ -3334,12 +3841,23 @@
- \def\unnumbsubsecentry ##1##2{}
- \def\subsubsecentry ##1##2##3##4##5##6{}
- \def\unnumbsubsubsecentry ##1##2{}
-- \input \jobname.toc
-+ \openin 1 \jobname.toc
-+ \ifeof 1 \else
-+ \closein 1
-+ \input \jobname.toc
-+ \fi
-+ \vfill \eject
-+ \contentsalignmacro % in case @setchapternewpage odd is in effect
- \endgroup
-- \vfill \eject
-+ \lastnegativepageno = \pageno
-+ \pageno = \savepageno
- }
- \let\shortcontents = \summarycontents
-
-+\ifpdf
-+ \pdfcatalog{/PageMode /UseOutlines}%
-+\fi
-+
- % These macros generate individual entries in the table of contents.
- % The first argument is the chapter or section name.
- % The last argument is the page number.
-@@ -3350,7 +3868,7 @@
-
- % See comments in \dochapentry re vbox and related settings
- \def\shortchapentry#1#2#3{%
-- \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
-+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
- }
-
- % Typeset the label for a chapter or appendix for the short contents.
-@@ -3358,10 +3876,14 @@
- % We could simplify the code here by writing out an \appendixentry
- % command in the toc file for appendices, instead of using \chapentry
- % for both, but it doesn't seem worth it.
--\setbox0 = \hbox{\shortcontrm \putwordAppendix }
--\newdimen\shortappendixwidth \shortappendixwidth = \wd0
--
-+%
-+\newdimen\shortappendixwidth
-+%
- \def\shortchaplabel#1{%
-+ % Compute width of word "Appendix", may change with language.
-+ \setbox0 = \hbox{\shortcontrm \putwordAppendix}%
-+ \shortappendixwidth = \wd0
-+ %
- % We typeset #1 in a box of constant width, regardless of the text of
- % #1, so the chapter titles will come out aligned.
- \setbox0 = \hbox{#1}%
-@@ -3376,7 +3898,7 @@
- }
-
- \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
--\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
-+\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
-
- % Sections.
- \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-@@ -3403,35 +3925,36 @@
- \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
- \begingroup
- \chapentryfonts
-- \tocentry{#1}{\dopageno{#2}}%
-+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup
- \nobreak\vskip .25\baselineskip plus.1\baselineskip
- }
-
- \def\dosecentry#1#2{\begingroup
- \secentryfonts \leftskip=\tocindent
-- \tocentry{#1}{\dopageno{#2}}%
-+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup}
-
- \def\dosubsecentry#1#2{\begingroup
- \subsecentryfonts \leftskip=2\tocindent
-- \tocentry{#1}{\dopageno{#2}}%
-+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup}
-
- \def\dosubsubsecentry#1#2{\begingroup
- \subsubsecentryfonts \leftskip=3\tocindent
-- \tocentry{#1}{\dopageno{#2}}%
-+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup}
-
- % Final typesetting of a toc entry; we use the same \entry macro as for
- % the index entries, but we want to suppress hyphenation here. (We
- % can't do that in the \entry macro, since index entries might consist
- % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
--%
--% \turnoffactive is for the sake of @" used for umlauts.
- \def\tocentry#1#2{\begingroup
- \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
-- \entry{\turnoffactive #1}{\turnoffactive #2}%
-+ % Do not use \turnoffactive in these arguments. Since the toc is
-+ % typeset in cmr, so characters such as _ would come out wrong; we
-+ % have to do the usual translation tricks.
-+ \entry{#1}{#2}%
- \endgroup}
-
- % Space between chapter (or whatever) number and the title.
-@@ -3447,6 +3970,7 @@
-
-
- \message{environments,}
-+% @foo ... @end foo.
-
- % Since these characters are used in examples, it should be an even number of
- % \tt widths. Each \tt character is 1en, so two makes it 1em.
-@@ -3497,30 +4021,36 @@
- % But \@ or @@ will get a plain tex @ character.
-
- \def\tex{\begingroup
--\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
--\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
--\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
--\catcode `\%=14
--\catcode 43=12 % plus
--\catcode`\"=12
--\catcode`\==12
--\catcode`\|=12
--\catcode`\<=12
--\catcode`\>=12
--\escapechar=`\\
--%
--\let\,=\ptexcomma
--\let\{=\ptexlbrace
--\let\}=\ptexrbrace
--\let\.=\ptexdot
--\let\*=\ptexstar
--\let\dots=\ptexdots
--\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
--\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
--\def\@{@}%
--\let\bullet=\ptexbullet
--\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
--%
-+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
-+ \catcode `\%=14
-+ \catcode 43=12 % plus
-+ \catcode`\"=12
-+ \catcode`\==12
-+ \catcode`\|=12
-+ \catcode`\<=12
-+ \catcode`\>=12
-+ \escapechar=`\\
-+ %
-+ \let\b=\ptexb
-+ \let\bullet=\ptexbullet
-+ \let\c=\ptexc
-+ \let\,=\ptexcomma
-+ \let\.=\ptexdot
-+ \let\dots=\ptexdots
-+ \let\equiv=\ptexequiv
-+ \let\!=\ptexexclam
-+ \let\i=\ptexi
-+ \let\{=\ptexlbrace
-+ \let\+=\tabalign
-+ \let\}=\ptexrbrace
-+ \let\*=\ptexstar
-+ \let\t=\ptext
-+ %
-+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
-+ \def\@{@}%
- \let\Etex=\endgroup}
-
- % Define @lisp ... @endlisp.
-@@ -3565,8 +4095,8 @@
- % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
- \let\nonarrowing=\relax
-
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--% \cartouche: draw rectangle w/rounded corners around argument
-+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-+% environment contents.
- \font\circle=lcircle10
- \newdimen\circthick
- \newdimen\cartouter\newdimen\cartinner
-@@ -3593,9 +4123,9 @@
- \cartinner=\hsize \advance\cartinner by-\lskip
- \advance\cartinner by-\rskip
- \cartouter=\hsize
-- \advance\cartouter by 18pt % allow for 3pt kerns on either
-+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
- % side, and for 6pt waste from
--% each corner char
-+% each corner char, and rule thickness
- \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
- % Flag to tell @lisp, etc., not to narrow margin.
- \let\nonarrowing=\comment
-@@ -3649,49 +4179,52 @@
- \fi
- }
-
--% To ending an @example-like environment, we first end the paragraph
--% (via \afterenvbreak's vertical glue), and then the group. That way we
--% keep the zero \parskip that the environments set -- \parskip glue
--% will be inserted at the beginning of the next paragraph in the
--% document, after the environment.
-+% Define the \E... control sequence only if we are inside the particular
-+% environment, so the error checking in \end will work.
- %
--\def\nonfillfinish{\afterenvbreak\endgroup}%
-+% To end an @example-like environment, we first end the paragraph (via
-+% \afterenvbreak's vertical glue), and then the group. That way we keep
-+% the zero \parskip that the environments set -- \parskip glue will be
-+% inserted at the beginning of the next paragraph in the document, after
-+% the environment.
-+%
-+\def\nonfillfinish{\afterenvbreak\endgroup}
-
-+% @lisp: indented, narrowed, typewriter font.
- \def\lisp{\begingroup
- \nonfillstart
- \let\Elisp = \nonfillfinish
- \tt
-- % Make @kbd do something special, if requested.
-- \let\kbdfont\kbdexamplefont
-- \rawbackslash % have \ input char produce \ char from current font
-- \gobble
-+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-+ \gobble % eat return
- }
-
--% Define the \E... control sequence only if we are inside the
--% environment, so the error checking in \end will work.
--%
--% We must call \lisp last in the definition, since it reads the
--% return following the @example (or whatever) command.
--%
-+% @example: Same as @lisp.
- \def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
--\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp}
--\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-
--% @smallexample and @smalllisp. This is not used unless the @smallbook
--% command is given. Originally contributed by Pavel@xerox.
--%
-+% @small... is usually equivalent to the non-small (@smallbook
-+% redefines). We must call \example (or whatever) last in the
-+% definition, since it reads the return following the @example (or
-+% whatever) command.
-+%
-+% This actually allows (for example) @end display inside an
-+% @smalldisplay. Too bad, but makeinfo will catch the error anyway.
-+%
-+\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
-+\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-+\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
-+\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-+
-+% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
-+% Originally contributed by Pavel@xerox.
- \def\smalllispx{\begingroup
-- \nonfillstart
-- \let\Esmalllisp = \nonfillfinish
-- \let\Esmallexample = \nonfillfinish
-- %
-- % Smaller fonts for small examples.
-- \indexfonts \tt
-- \rawbackslash % make \ output the \ character from the current font (tt)
-- \gobble
-+ \def\Esmalllisp{\nonfillfinish\endgroup}%
-+ \def\Esmallexample{\nonfillfinish\endgroup}%
-+ \smallfonts
-+ \lisp
- }
-
--% This is @display; same as @lisp except use roman font.
-+% @display: same as @lisp except keep current font.
- %
- \def\display{\begingroup
- \nonfillstart
-@@ -3699,7 +4232,15 @@
- \gobble
- }
-
--% This is @format; same as @display except don't narrow margins.
-+% @smalldisplay (when @smallbook): @display plus smaller fonts.
-+%
-+\def\smalldisplayx{\begingroup
-+ \def\Esmalldisplay{\nonfillfinish\endgroup}%
-+ \smallfonts \rm
-+ \display
-+}
-+
-+% @format: same as @display except don't narrow margins.
- %
- \def\format{\begingroup
- \let\nonarrowing = t
-@@ -3708,20 +4249,27 @@
- \gobble
- }
-
--% @flushleft (same as @format) and @flushright.
-+% @smallformat (when @smallbook): @format plus smaller fonts.
- %
--\def\flushleft{\begingroup
-- \let\nonarrowing = t
-- \nonfillstart
-- \let\Eflushleft = \nonfillfinish
-- \gobble
-+\def\smallformatx{\begingroup
-+ \def\Esmallformat{\nonfillfinish\endgroup}%
-+ \smallfonts \rm
-+ \format
- }
-+
-+% @flushleft (same as @format).
-+%
-+\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
-+
-+% @flushright.
-+%
- \def\flushright{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eflushright = \nonfillfinish
- \advance\leftskip by 0pt plus 1fill
-- \gobble}
-+ \gobble
-+}
-
- % @quotation does normal linebreaking (hence we can't use \nonfillstart)
- % and narrows the margins.
-@@ -3744,9 +4292,11 @@
- \fi
- }
-
-+
- \message{defuns,}
--% Define formatter for defuns
--% First, allow user to change definition object font (\df) internally
-+% @defun etc.
-+
-+% Allow user to change definition object font (\df) internally
- \def\setdeffont #1 {\csname DEF#1\endcsname}
-
- \newskip\defbodyindent \defbodyindent=.4in
-@@ -3800,10 +4350,16 @@
- %% contained text. This is especially needed for [ and ]
- \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
- \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
--\def\ampnr{\&}
-+\let\ampnr = \&
- \def\lbrb{{\bf\char`\[}}
- \def\rbrb{{\bf\char`\]}}
-
-+% Active &'s sneak into the index arguments, so make sure it's defined.
-+{
-+ \catcode`& = 13
-+ \global\let& = \ampnr
-+}
-+
- % First, defname, which formats the header line itself.
- % #1 should be the function name.
- % #2 should be the type of definition, such as "Function".
-@@ -3813,20 +4369,18 @@
- % outside the @def...
- \dimen2=\leftskip
- \advance\dimen2 by -\defbodyindent
--\dimen3=\rightskip
--\advance\dimen3 by -\defbodyindent
--\noindent %
-+\noindent
- \setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
- \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
- \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
--\parshape 2 0in \dimen0 \defargsindent \dimen1 %
-+\parshape 2 0in \dimen0 \defargsindent \dimen1
- % Now output arg 2 ("Function" or some such)
- % ending at \deftypemargin from the right margin,
- % but stuck inside a box of width 0 so it does not interfere with linebreaking
- {% Adjust \hsize to exclude the ambient margins,
- % so that \rightline will obey them.
--\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
--\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
-+\advance \hsize by -\dimen2
-+\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
- % Make all lines underfull and no complaints:
- \tolerance=10000 \hbadness=10000
- \advance\leftskip by -\defbodyindent
-@@ -3847,23 +4401,62 @@
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
- \parindent=0in
--\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+\advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup %
- \catcode 61=\active % 61 is `='
- \obeylines\activeparens\spacesplit#3}
-
--\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
-+% #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 \advance \rightskip by \defbodyindent
-+\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
-+% being the hardwired string `Method' or `Instance Variable'. We have
-+% to account for this both in the \...x definition and in parsing the
-+% 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
-@@ -3872,7 +4465,7 @@
- \def#2##1 ##2 {\def#4{##1}%
- \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
- \parindent=0in
--\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+\advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
-
-@@ -3887,7 +4480,7 @@
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2{\begingroup\obeylines\spacesplit#3}%
- \parindent=0in
--\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+\advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup %
- \catcode 61=\active %
-@@ -3904,7 +4497,7 @@
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
- \parindent=0in
-- \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+ \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines
- }
-@@ -3949,7 +4542,7 @@
- \def#2##1 ##2 {\def#4{##1}%
- \begingroup\obeylines\spacesplit{#3{##2}}}%
- \parindent=0in
--\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+\advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines\spacesplit{#3{#5}}}
-
-@@ -3973,16 +4566,17 @@
- % First, define the processing that is wanted for arguments of \defun
- % Use this to expand the args and terminate the paragraph they make up
-
--\def\defunargs #1{\functionparens \sl
-+\def\defunargs#1{\functionparens \sl
- % Expand, preventing hyphenation at `-' chars.
- % Note that groups don't affect changes in \hyphenchar.
--\hyphenchar\tensl=0
-+% Set the font temporarily and use \font in case \setfont made \tensl a macro.
-+{\tensl\hyphenchar\font=0}%
- #1%
--\hyphenchar\tensl=45
-+{\tensl\hyphenchar\font=45}%
- \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
- \interlinepenalty=10000
- \advance\rightskip by 0pt plus 1fil
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-+\endgraf\nobreak\vskip -\parskip\nobreak
- }
-
- \def\deftypefunargs #1{%
-@@ -3993,7 +4587,7 @@
- \tclose{#1}% avoid \code because of side effects on active chars
- \interlinepenalty=10000
- \advance\rightskip by 0pt plus 1fil
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-+\endgraf\nobreak\vskip -\parskip\nobreak
- }
-
- % Do complete processing of one @defun or @defunx line already parsed.
-@@ -4012,7 +4606,7 @@
- \def\defun{\defparsebody\Edefun\defunx\defunheader}
-
- \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{Function}%
-+\begingroup\defname {#1}{\putwordDeffunc}%
- \defunargs {#2}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
-@@ -4026,7 +4620,7 @@
- % #1 is the data type, #2 the name, #3 the args.
- \def\deftypefunheaderx #1#2 #3\relax{%
- \doind {fn}{\code{#2}}% Make entry in function index
--\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
-+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
- \deftypefunargs {#3}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
-@@ -4057,7 +4651,7 @@
- \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-
- \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{Macro}%
-+\begingroup\defname {#1}{\putwordDefmac}%
- \defunargs {#2}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
-@@ -4067,53 +4661,78 @@
- \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
-
- \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{Special Form}%
-+\begingroup\defname {#1}{\putwordDefspec}%
- \defunargs {#2}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
-
--% This definition is run if you use @defunx
--% anywhere other than immediately after a @defun or @defunx.
--
--\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
--\def\defunx #1 {\errmessage{@defunx in invalid context}}
--\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
--\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
--\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
--\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
--\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
--
--% @defmethod, and so on
--
--% @defop {Funny Method} foo-class frobnicate argument
--
-+% @defop CATEGORY CLASS OPERATION ARG...
-+%
- \def\defop #1 {\def\defoptype{#1}%
- \defopparsebody\Edefop\defopx\defopheader\defoptype}
--
--\def\defopheader #1#2#3{%
--\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
--\begingroup\defname {#2}{\defoptype{} on #1}%
-+%
-+\def\defopheader#1#2#3{%
-+\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
-+\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
- \defunargs {#3}\endgroup %
- }
-
--% @deftypemethod foo-class return-type foo-method args
-+% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
-+%
-+\def\deftypeop #1 {\def\deftypeopcategory{#1}%
-+ \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
-+ \deftypeopcategory}
-+%
-+% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
-+\def\deftypeopheader#1#2#3#4{%
-+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-+ \begingroup
-+ \defname{\defheaderxcond#2\relax$$$#3}
-+ {\deftypeopcategory\ \putwordon\ \code{#1}}%
-+ \deftypefunargs{#4}%
-+ \endgroup
-+}
-+
-+% @deftypemethod CLASS TYPE METHOD ARG...
- %
- \def\deftypemethod{%
-- \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-+ \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
- %
- % #1 is the class name, #2 the data type, #3 the method name, #4 the args.
- \def\deftypemethodheader#1#2#3#4{%
-- \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
-+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-+ \begingroup
-+ \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
-+ \deftypefunargs{#4}%
-+ \endgroup
- }
-
--% @defmethod == @defop Method
-+% @deftypeivar CLASS TYPE VARNAME
-+%
-+\def\deftypeivar{%
-+ \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
-+%
-+% #1 is the class name, #2 the data type, #3 the variable name.
-+\def\deftypeivarheader#1#2#3{%
-+ \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
-+ \begingroup
-+ \defname{\defheaderxcond#2\relax$$$#3}
-+ {\putwordInstanceVariableof\ \code{#1}}%
-+ \defvarargs{#3}%
-+ \endgroup
-+}
-
-+% @defmethod == @defop Method
-+%
- \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
--
--\def\defmethodheader #1#2#3{%
--\dosubind {fn}{\code{#2}}{on #1}% entry in function index
--\begingroup\defname {#2}{Method on #1}%
--\defunargs {#3}\endgroup %
-+%
-+% #1 is the class name, #2 the method name, #3 the args.
-+\def\defmethodheader#1#2#3{%
-+ \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
-+ \begingroup
-+ \defname{#2}{\putwordMethodon\ \code{#1}}%
-+ \defunargs{#3}%
-+ \endgroup
- }
-
- % @defcv {Class Option} foo-class foo-flag
-@@ -4122,37 +4741,30 @@
- \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
- \def\defcvarheader #1#2#3{%
--\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
--\begingroup\defname {#2}{\defcvtype{} of #1}%
-+\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
-+\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
- \defvarargs {#3}\endgroup %
- }
-
--% @defivar == @defcv {Instance Variable}
--
-+% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
-+%
- \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
--
--\def\defivarheader #1#2#3{%
--\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
--\begingroup\defname {#2}{Instance Variable of #1}%
--\defvarargs {#3}\endgroup %
-+%
-+\def\defivarheader#1#2#3{%
-+ \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
-+ \begingroup
-+ \defname{#2}{\putwordInstanceVariableof\ #1}%
-+ \defvarargs{#3}%
-+ \endgroup
- }
-
--% These definitions are run if you use @defmethodx, etc.,
--% anywhere other than immediately after a @defmethod, etc.
--
--\def\defopx #1 {\errmessage{@defopx in invalid context}}
--\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
--\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
--\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
--
--% Now @defvar
--
-+% @defvar
- % First, define the processing that is wanted for arguments of @defvar.
- % This is actually simple: just print them in roman.
- % This must expand the args and terminate the paragraph they make up
- \def\defvarargs #1{\normalparens #1%
- \interlinepenalty=10000
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
-+\endgraf\nobreak\vskip -\parskip\nobreak}
-
- % @defvr Counter foo-count
-
-@@ -4166,7 +4778,7 @@
- \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
- \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
--\begingroup\defname {#1}{Variable}%
-+\begingroup\defname {#1}{\putwordDefvar}%
- \defvarargs {#2}\endgroup %
- }
-
-@@ -4175,7 +4787,7 @@
- \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
- \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
--\begingroup\defname {#1}{User Option}%
-+\begingroup\defname {#1}{\putwordDefopt}%
- \defvarargs {#2}\endgroup %
- }
-
-@@ -4187,9 +4799,9 @@
- % is actually part of the data type, which should not be put into the index.
- \def\deftypevarheader #1#2{%
- \dovarind#2 \relax% Make entry in variables index
--\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
-+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
- \interlinepenalty=10000
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-+\endgraf\nobreak\vskip -\parskip\nobreak
- \endgroup}
- \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-@@ -4200,18 +4812,9 @@
- \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
- \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
- \interlinepenalty=10000
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-+\endgraf\nobreak\vskip -\parskip\nobreak
- \endgroup}
-
--% This definition is run if you use @defvarx
--% anywhere other than immediately after a @defvar or @defvarx.
--
--\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
--\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
--\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
--\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}}
--\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}}
--
- % Now define @deftp
- % Args are printed in bold, a slight difference from @defvar.
-
-@@ -4224,51 +4827,394 @@
- \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
- \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-
--% This definition is run if you use @deftpx, etc
--% anywhere other than immediately after a @deftp, etc.
-+% These definitions are used if you use @defunx (etc.)
-+% anywhere other than immediately after a @defun or @defunx.
-+%
-+\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
-+\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
-+\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
-+\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
-+\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
-+\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-+\def\defopx#1 {\errmessage{@defopx in invalid context}}
-+\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
-+\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
-+\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
-+\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
-+\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
-+\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
-+\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
-+\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
-+\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
-+\def\defunx#1 {\errmessage{@defunx in invalid context}}
-+\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
-+\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
-+
-+
-+\message{macros,}
-+% @macro.
-+
-+% To do this right we need a feature of e-TeX, \scantokens,
-+% which we arrange to emulate with a temporary file in ordinary TeX.
-+\ifx\eTeXversion\undefined
-+ \newwrite\macscribble
-+ \def\scanmacro#1{%
-+ \begingroup \newlinechar`\^^M
-+ % Undo catcode changes of \startcontents and \doprintindex
-+ \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
-+ % Append \endinput to make sure that TeX does not see the ending newline.
-+ \toks0={#1\endinput}%
-+ \immediate\openout\macscribble=\jobname.tmp
-+ \immediate\write\macscribble{\the\toks0}%
-+ \immediate\closeout\macscribble
-+ \let\xeatspaces\eatspaces
-+ \input \jobname.tmp
-+ \endgroup
-+}
-+\else
-+\def\scanmacro#1{%
-+\begingroup \newlinechar`\^^M
-+% Undo catcode changes of \startcontents and \doprintindex
-+\catcode`\@=0 \catcode`\\=12 \escapechar=`\@
-+\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
-+\fi
-+
-+\newcount\paramno % Count of parameters
-+\newtoks\macname % Macro name
-+\newif\ifrecursive % Is it recursive?
-+\def\macrolist{} % List of all defined macros in the form
-+ % \do\macro1\do\macro2...
-+
-+% Utility routines.
-+% Thisdoes \let #1 = #2, except with \csnames.
-+\def\cslet#1#2{%
-+\expandafter\expandafter
-+\expandafter\let
-+\expandafter\expandafter
-+\csname#1\endcsname
-+\csname#2\endcsname}
-+
-+% Trim leading and trailing spaces off a string.
-+% Concepts from aro-bend problem 15 (see CTAN).
-+{\catcode`\@=11
-+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
-+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
-+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
-+\def\unbrace#1{#1}
-+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
-+}
-+
-+% Trim a single trailing ^^M off a string.
-+{\catcode`\^^M=12\catcode`\Q=3%
-+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
-+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
-+\gdef\eatcrb#1Q#2Q{#1}%
-+}
-+
-+% Macro bodies are absorbed as an argument in a context where
-+% all characters are catcode 10, 11 or 12, except \ which is active
-+% (as in normal texinfo). It is necessary to change the definition of \.
-+
-+% It's necessary to have hard CRs when the macro is executed. This is
-+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
-+% body, and then making it the \newlinechar in \scanmacro.
-+
-+\def\macrobodyctxt{%
-+ \catcode`\~=12
-+ \catcode`\^=12
-+ \catcode`\_=12
-+ \catcode`\|=12
-+ \catcode`\<=12
-+ \catcode`\>=12
-+ \catcode`\+=12
-+ \catcode`\{=12
-+ \catcode`\}=12
-+ \catcode`\@=12
-+ \catcode`\^^M=12
-+ \usembodybackslash}
-+
-+\def\macroargctxt{%
-+ \catcode`\~=12
-+ \catcode`\^=12
-+ \catcode`\_=12
-+ \catcode`\|=12
-+ \catcode`\<=12
-+ \catcode`\>=12
-+ \catcode`\+=12
-+ \catcode`\@=12
-+ \catcode`\\=12}
-+
-+% \mbodybackslash is the definition of \ in @macro bodies.
-+% It maps \foo\ => \csname macarg.foo\endcsname => #N
-+% where N is the macro parameter number.
-+% We define \csname macarg.\endcsname to be \realbackslash, so
-+% \\ in macro replacement text gets you a backslash.
-+
-+{\catcode`@=0 @catcode`@\=@active
-+ @gdef@usembodybackslash{@let\=@mbodybackslash}
-+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
-+}
-+\expandafter\def\csname macarg.\endcsname{\realbackslash}
-+
-+\def\macro{\recursivefalse\parsearg\macroxxx}
-+\def\rmacro{\recursivetrue\parsearg\macroxxx}
-+
-+\def\macroxxx#1{%
-+ \getargs{#1}% now \macname is the macname and \argl the arglist
-+ \ifx\argl\empty % no arguments
-+ \paramno=0%
-+ \else
-+ \expandafter\parsemargdef \argl;%
-+ \fi
-+ \if1\csname ismacro.\the\macname\endcsname
-+ \message{Warning: redefining \the\macname}%
-+ \else
-+ \expandafter\ifx\csname \the\macname\endcsname \relax
-+ \else \errmessage{The name \the\macname\space is reserved}\fi
-+ \global\cslet{macsave.\the\macname}{\the\macname}%
-+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
-+ % Add the macroname to \macrolist
-+ \toks0 = \expandafter{\macrolist\do}%
-+ \xdef\macrolist{\the\toks0
-+ \expandafter\noexpand\csname\the\macname\endcsname}%
-+ \fi
-+ \begingroup \macrobodyctxt
-+ \ifrecursive \expandafter\parsermacbody
-+ \else \expandafter\parsemacbody
-+ \fi}
-+
-+\def\unmacro{\parsearg\unmacroxxx}
-+\def\unmacroxxx#1{%
-+ \if1\csname ismacro.#1\endcsname
-+ \global\cslet{#1}{macsave.#1}%
-+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
-+ % Remove the macro name from \macrolist
-+ \begingroup
-+ \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
-+ \def\do##1{%
-+ \def\tempb{##1}%
-+ \ifx\tempa\tempb
-+ % remove this
-+ \else
-+ \toks0 = \expandafter{\newmacrolist\do}%
-+ \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
-+ \fi}%
-+ \def\newmacrolist{}%
-+ % Execute macro list to define \newmacrolist
-+ \macrolist
-+ \global\let\macrolist\newmacrolist
-+ \endgroup
-+ \else
-+ \errmessage{Macro #1 not defined}%
-+ \fi
-+}
-+
-+% This makes use of the obscure feature that if the last token of a
-+% <parameter list> is #, then the preceding argument is delimited by
-+% an opening brace, and that opening brace is not consumed.
-+\def\getargs#1{\getargsxxx#1{}}
-+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-+\def\getmacname #1 #2\relax{\macname={#1}}
-+\def\getmacargs#1{\def\argl{#1}}
-+
-+% Parse the optional {params} list. Set up \paramno and \paramlist
-+% so \defmacro knows what to do. Define \macarg.blah for each blah
-+% in the params list, to be ##N where N is the position in that list.
-+% That gets used by \mbodybackslash (above).
-+
-+% We need to get `macro parameter char #' into several definitions.
-+% The technique used is stolen from LaTeX: let \hash be something
-+% unexpandable, insert that wherever you need a #, and then redefine
-+% it to # just before using the token list produced.
-+%
-+% The same technique is used to protect \eatspaces till just before
-+% the macro is used.
-+
-+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
-+ \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
-+\def\parsemargdefxxx#1,{%
-+ \if#1;\let\next=\relax
-+ \else \let\next=\parsemargdefxxx
-+ \advance\paramno by 1%
-+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
-+ {\xeatspaces{\hash\the\paramno}}%
-+ \edef\paramlist{\paramlist\hash\the\paramno,}%
-+ \fi\next}
-+
-+% These two commands read recursive and nonrecursive macro bodies.
-+% (They're different since rec and nonrec macros end differently.)
-+
-+\long\def\parsemacbody#1@end macro%
-+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-+\long\def\parsermacbody#1@end rmacro%
-+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-+
-+% This defines the macro itself. There are six cases: recursive and
-+% nonrecursive macros of zero, one, and many arguments.
-+% Much magic with \expandafter here.
-+% \xdef is used so that macro definitions will survive the file
-+% they're defined in; @include reads the file inside a group.
-+\def\defmacro{%
-+ \let\hash=##% convert placeholders to macro parameter chars
-+ \ifrecursive
-+ \ifcase\paramno
-+ % 0
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \noexpand\scanmacro{\temp}}%
-+ \or % 1
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \noexpand\braceorline
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-+ \egroup\noexpand\scanmacro{\temp}}%
-+ \else % many
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \noexpand\csname\the\macname xx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-+ \expandafter\expandafter
-+ \expandafter\xdef
-+ \expandafter\expandafter
-+ \csname\the\macname xxx\endcsname
-+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
-+ \fi
-+ \else
-+ \ifcase\paramno
-+ % 0
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \noexpand\norecurse{\the\macname}%
-+ \noexpand\scanmacro{\temp}\egroup}%
-+ \or % 1
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \noexpand\braceorline
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-+ \egroup
-+ \noexpand\norecurse{\the\macname}%
-+ \noexpand\scanmacro{\temp}\egroup}%
-+ \else % many
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-+ \expandafter\expandafter
-+ \expandafter\xdef
-+ \expandafter\expandafter
-+ \csname\the\macname xxx\endcsname
-+ \paramlist{%
-+ \egroup
-+ \noexpand\norecurse{\the\macname}%
-+ \noexpand\scanmacro{\temp}\egroup}%
-+ \fi
-+ \fi}
-+
-+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-+
-+% \braceorline decides whether the next nonwhitespace character is a
-+% {. If so it reads up to the closing }, if not, it reads the whole
-+% line. Whatever was read is then fed to the next control sequence
-+% as an argument (by \parsebrace or \parsearg)
-+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
-+\def\braceorlinexxx{%
-+ \ifx\nchar\bgroup\else
-+ \expandafter\parsearg
-+ \fi \next}
-+
-+% We mant to disable all macros during \shipout so that they are not
-+% expanded by \write.
-+\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
-+ \edef\next{\macrolist}\expandafter\endgroup\next}
-+
-+
-+% @alias.
-+% We need some trickery to remove the optional spaces around the equal
-+% sign. Just make them active and then expand them all to nothing.
-+\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
-+\def\aliasxxx #1{\aliasyyy#1\relax}
-+\def\aliasyyy #1=#2\relax{\ignoreactivespaces
-+\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
-+ \expandafter\noexpand\csname#2\endcsname}%
-+\expandafter\endgroup\next}
-
--\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
-
-+\message{cross references,}
-+% @xref etc.
-
--\message{cross reference,}
--% Define cross-reference macros
--\newwrite \auxfile
-+\newwrite\auxfile
-
--\newif\ifhavexrefs % True if xref values are known.
-+\newif\ifhavexrefs % True if xref values are known.
- \newif\ifwarnedxrefs % True if we warned once that they aren't known.
-
--% @inforef is simple.
-+% @inforef is relatively simple.
- \def\inforef #1{\inforefzzz #1,,,,**}
- \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
- node \samp{\ignorespaces#1{}}}
-
--% \setref{foo} defines a cross-reference point named foo.
-+% @node's job is to define \lastnode.
-+\def\node{\ENVcheck\parsearg\nodezzz}
-+\def\nodezzz#1{\nodexxx [#1,]}
-+\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-+\let\nwnode=\node
-+\let\lastnode=\relax
-+
-+% The sectioning commands (@chapter, etc.) call these.
-+\def\donoderef{%
-+ \ifx\lastnode\relax\else
-+ \expandafter\expandafter\expandafter\setref{\lastnode}%
-+ {Ysectionnumberandtype}%
-+ \global\let\lastnode=\relax
-+ \fi
-+}
-+\def\unnumbnoderef{%
-+ \ifx\lastnode\relax\else
-+ \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
-+ \global\let\lastnode=\relax
-+ \fi
-+}
-+\def\appendixnoderef{%
-+ \ifx\lastnode\relax\else
-+ \expandafter\expandafter\expandafter\setref{\lastnode}%
-+ {Yappendixletterandtype}%
-+ \global\let\lastnode=\relax
-+ \fi
-+}
-+
-+
-+% @anchor{NAME} -- define xref target at arbitrary point.
-+%
-+\newcount\savesfregister
-+\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-+\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-+\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-+
-+% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
-+% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have
-+% to set \indexdummies so commands such as @code in a section title
-+% aren't expanded. It would be nicer not to expand the titles in the
-+% first place, but there's so many layers that that is hard to do.
-+%
-+\def\setref#1#2{{%
-+ \indexdummies
-+ \pdfmkdest{#1}%
-+ \dosetq{#1-title}{Ytitle}%
-+ \dosetq{#1-pg}{Ypagenumber}%
-+ \dosetq{#1-snt}{#2}%
-+}}
-
--\def\setref#1{%
--\dosetq{#1-title}{Ytitle}%
--\dosetq{#1-pg}{Ypagenumber}%
--\dosetq{#1-snt}{Ysectionnumberandtype}}
--
--\def\unnumbsetref#1{%
--\dosetq{#1-title}{Ytitle}%
--\dosetq{#1-pg}{Ypagenumber}%
--\dosetq{#1-snt}{Ynothing}}
--
--\def\appendixsetref#1{%
--\dosetq{#1-title}{Ytitle}%
--\dosetq{#1-pg}{Ypagenumber}%
--\dosetq{#1-snt}{Yappendixletterandtype}}
--
--% \xref, \pxref, and \ref generate cross-references to specified points.
--% For \xrefX, #1 is the node name, #2 the name of the Info
--% cross-reference, #3 the printed node name, #4 the name of the Info
--% file, #5 the name of the printed manual. All but the node name can be
--% omitted.
-+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
-+% the node name, #2 the name of the Info cross-reference, #3 the printed
-+% node name, #4 the name of the Info file, #5 the name of the printed
-+% manual. All but the node name can be omitted.
- %
- \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
- \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
- \def\ref#1{\xrefX[#1,,,,,,,]}
- \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
-+ \unsepspaces
- \def\printedmanual{\ignorespaces #5}%
- \def\printednodename{\ignorespaces #3}%
- \setbox1=\hbox{\printedmanual}%
-@@ -4281,7 +5227,7 @@
- \else
- % Use the actual chapter/section title appear inside
- % the square brackets. Use the real section title if we have it.
-- \ifdim \wd1>0pt%
-+ \ifdim \wd1 > 0pt
- % It is in another manual, so we don't have it.
- \def\printednodename{\ignorespaces #1}%
- \else
-@@ -4302,27 +5248,54 @@
- % are best written with fairly long node names, containing hyphens, this
- % is a loss. Therefore, we give the text of the node name again, so it
- % is as if TeX is seeing it for the first time.
-+ \ifpdf
-+ \leavevmode
-+ \getfilename{#4}%
-+ \ifnum\filenamelength>0
-+ \startlink attr{/Border [0 0 0]}%
-+ goto file{\the\filename.pdf} name{#1@}%
-+ \else
-+ \startlink attr{/Border [0 0 0]}%
-+ goto name{#1@}%
-+ \fi
-+ \linkcolor
-+ \fi
-+ %
- \ifdim \wd1 > 0pt
-- \putwordsection{} ``\printednodename'' in \cite{\printedmanual}%
-+ \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
- \else
- % _ (for example) has to be the character _ for the purposes of the
- % control sequence corresponding to the node, but it has to expand
- % into the usual \leavevmode...\vrule stuff for purposes of
- % printing. So we \turnoffactive for the \refx-snt, back on for the
- % printing, back off for the \refx-pg.
-- {\turnoffactive \refx{#1-snt}{}}%
-- \space [\printednodename],\space
-+ {\normalturnoffactive
-+ % Only output a following space if the -snt ref is nonempty; for
-+ % @unnumbered and @anchor, it won't be.
-+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-+ }%
-+ % [mynode],
-+ [\printednodename],\space
-+ % page 3
- \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
- \fi
-+ \endlink
- \endgroup}
-
- % \dosetq is the interface for calls from other macros
-
--% Use \turnoffactive so that punctuation chars such as underscore
--% work in node names.
--\def\dosetq #1#2{{\let\folio=0 \turnoffactive
--\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
--\next}}
-+% Use \normalturnoffactive so that punctuation chars such as underscore
-+% and backslash work in node names. (\turnoffactive doesn't do \.)
-+\def\dosetq#1#2{%
-+ {\let\folio=0%
-+ \normalturnoffactive
-+ \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
-+ \iflinks
-+ \next
-+ \fi
-+ }%
-+}
-
- % \internalsetq {foo}{page} expands into
- % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
-@@ -4373,13 +5346,15 @@
- \def\refx#1#2{%
- \expandafter\ifx\csname X#1\endcsname\relax
- % If not defined, say something at least.
-- $\langle$un\-de\-fined$\rangle$%
-- \ifhavexrefs
-- \message{\linenumber Undefined cross reference `#1'.}%
-- \else
-- \ifwarnedxrefs\else
-- \global\warnedxrefstrue
-- \message{Cross reference values unknown; you must run TeX again.}%
-+ \angleleft un\-de\-fined\angleright
-+ \iflinks
-+ \ifhavexrefs
-+ \message{\linenumber Undefined cross reference `#1'.}%
-+ \else
-+ \ifwarnedxrefs\else
-+ \global\warnedxrefstrue
-+ \message{Cross reference values unknown; you must run TeX again.}%
-+ \fi
- \fi
- \fi
- \else
-@@ -4390,10 +5365,13 @@
- }
-
- % This is the macro invoked by entries in the aux file.
--\def\xrdef #1#2{{%
-- \catcode`\'=\other
-- \expandafter\gdef\csname X#1\endcsname{#2}%
--}}
-+%
-+\def\xrdef#1{\begingroup
-+ % Reenable \ as an escape while reading the second argument.
-+ \catcode`\\ = 0
-+ \afterassignment\endgroup
-+ \expandafter\gdef\csname X#1\endcsname
-+}
-
- % Read the last existing aux file, if any. No error if none exists.
- \def\readauxfile{\begingroup
-@@ -4450,8 +5428,7 @@
- \catcode`\$=\other
- \catcode`\#=\other
- \catcode`\&=\other
-- % `\+ does not work, so use 43.
-- \catcode43=\other
-+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
- % Make the characters 128-255 be printing characters
- {%
- \count 1=128
-@@ -4540,6 +5517,8 @@
- \xspaceskip\z@skip
- \parindent\defaultparindent
- %
-+ \smallfonts \rm
-+ %
- % Hang the footnote text off the number.
- \hang
- \textindent{\thisfootno}%
-@@ -4554,7 +5533,7 @@
- \else\let\next\f@t\fi \next}
- \def\f@@t{\bgroup\aftergroup\@foot\let\next}
- \def\f@t#1{#1\@foot}
--\def\@foot{\strut\egroup}
-+\def\@foot{\strut\par\egroup}
-
- }%end \catcode `\@=11
-
-@@ -4613,23 +5592,25 @@
-
- % @image. We use the macros from epsf.tex to support this.
- % If epsf.tex is not installed and @image is used, we complain.
--%
-+%
- % Check for and read epsf.tex up front. If we read it only at @image
- % time, we might be inside a group, and then its definitions would get
- % undone and the next image would fail.
--\openin 1 = xepsf.tex
-+\openin 1 = epsf.tex
- \ifeof 1 \else
- \closein 1
-- \def\epsfannounce{\toks0 = }% do not bother showing banner
-+ % Do not bother showing banner with post-v2.7 epsf.tex (available in
-+ % doc/epsf.tex until it shows up on ctan).
-+ \def\epsfannounce{\toks0 = }%
- \input epsf.tex
- \fi
- %
-+% We will only complain once about lack of epsf.tex.
- \newif\ifwarnednoepsf
- \newhelp\noepsfhelp{epsf.tex must be installed for images to
- work. It is also included in the Texinfo distribution, or you can get
-- it from ftp://ftp.tug.org/tex/epsf.tex.}
-+ it from ftp://tug.org/tex/epsf.tex.}
- %
--% Only complain once about lack of epsf.tex.
- \def\image#1{%
- \ifx\epsfbox\undefined
- \ifwarnednoepsf \else
-@@ -4647,42 +5628,79 @@
- % #2 is (optional) width, #3 is (optional) height.
- % #4 is just the usual extra ignored arg for parsing this stuff.
- \def\imagexxx#1,#2,#3,#4\finish{%
-- % \epsfbox itself resets \epsf?size at each figure.
-- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-- \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-- \epsfbox{#1.eps}%
-+ \ifpdf
-+ \centerline{\dopdfimage{#1}{#2}{#3}}%
-+ \else
-+ % \epsfbox itself resets \epsf?size at each figure.
-+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-+ \begingroup
-+ \catcode`\^^M = 5 % in case we're inside an example
-+ % If the image is by itself, center it.
-+ \ifvmode
-+ \nobreak\bigskip
-+ % Usually we'll have text after the image which will insert
-+ % \parskip glue, so insert it here too to equalize the space
-+ % above and below.
-+ \nobreak\vskip\parskip
-+ \nobreak
-+ \centerline{\epsfbox{#1.eps}}%
-+ \bigbreak
-+ \else
-+ % In the middle of a paragraph, no extra space.
-+ \epsfbox{#1.eps}%
-+ \fi
-+ \endgroup
-+ \fi
- }
-
--% End of control word definitions.
-
-+\message{localization,}
-+% and i18n.
-
--\message{and turning on texinfo input format.}
--
--\def\openindices{%
-- \newindex{cp}%
-- \newcodeindex{fn}%
-- \newcodeindex{vr}%
-- \newcodeindex{tp}%
-- \newcodeindex{ky}%
-- \newcodeindex{pg}%
-+% @documentlanguage is usually given very early, just after
-+% @setfilename. If done too late, it may not override everything
-+% properly. Single argument is the language abbreviation.
-+% It would be nice if we could set up a hyphenation file here.
-+%
-+\def\documentlanguage{\parsearg\dodocumentlanguage}
-+\def\dodocumentlanguage#1{%
-+ \tex % read txi-??.tex file in plain TeX.
-+ % Read the file if it exists.
-+ \openin 1 txi-#1.tex
-+ \ifeof1
-+ \errhelp = \nolanghelp
-+ \errmessage{Cannot read language file txi-#1.tex}%
-+ \let\temp = \relax
-+ \else
-+ \def\temp{\input txi-#1.tex }%
-+ \fi
-+ \temp
-+ \endgroup
- }
-+\newhelp\nolanghelp{The given language definition file cannot be found or
-+is empty. Maybe you need to install it? In the current directory
-+should work if nowhere else does.}
-+
-
--% Set some numeric style parameters, for 8.5 x 11 format.
-+% @documentencoding should change something in TeX eventually, most
-+% likely, but for now just recognize it.
-+\let\documentencoding = \comment
-
--\hsize = 6in
--\hoffset = .25in
-+
-+% Page size parameters.
-+%
- \newdimen\defaultparindent \defaultparindent = 15pt
--\parindent = \defaultparindent
--\parskip 3pt plus 2pt minus 1pt
--\setleading{13.2pt}
--\advance\topskip by 1.2cm
-
- \chapheadingskip = 15pt plus 4pt minus 2pt
- \secheadingskip = 12pt plus 3pt minus 2pt
- \subsecheadingskip = 9pt plus 2pt minus 2pt
-
- % Prevent underfull vbox error messages.
--\vbadness=10000
-+\vbadness = 10000
-+
-+% Don't be so finicky about underfull hboxes, either.
-+\hbadness = 2000
-
- % Following George Bush, just get rid of widows and orphans.
- \widowpenalty=10000
-@@ -4691,101 +5709,125 @@
- % Use TeX 3.0's \emergencystretch to help line breaking, but if we're
- % using an old version of TeX, don't do anything. We want the amount of
- % stretch added to depend on the line length, hence the dependence on
--% \hsize. This makes it come to about 9pt for the 8.5x11 format.
-+% \hsize. We call this whenever the paper size is set.
- %
--\ifx\emergencystretch\thisisundefined
-- % Allow us to assign to \emergencystretch anyway.
-- \def\emergencystretch{\dimen0}%
--\else
-- \emergencystretch = \hsize
-- \divide\emergencystretch by 45
--\fi
--
--% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
--\def\smallbook{
-- \global\chapheadingskip = 15pt plus 4pt minus 2pt
-- \global\secheadingskip = 12pt plus 3pt minus 2pt
-- \global\subsecheadingskip = 9pt plus 2pt minus 2pt
-- %
-- \global\lispnarrowing = 0.3in
-- \setleading{12pt}
-- \advance\topskip by -1cm
-- \global\parskip 2pt plus 1pt
-- \global\hsize = 5in
-- \global\vsize=7.5in
-- \global\tolerance=700
-- \global\hfuzz=1pt
-- \global\contentsrightmargin=0pt
-- \global\deftypemargin=0pt
-- \global\defbodyindent=.5cm
-- %
-- \global\pagewidth=\hsize
-- \global\pageheight=\vsize
-- %
-- \global\let\smalllisp=\smalllispx
-- \global\let\smallexample=\smalllispx
-- \global\def\Esmallexample{\Esmalllisp}
-+\def\setemergencystretch{%
-+ \ifx\emergencystretch\thisisundefined
-+ % Allow us to assign to \emergencystretch anyway.
-+ \def\emergencystretch{\dimen0}%
-+ \else
-+ \emergencystretch = .15\hsize
-+ \fi
- }
-
-+% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
-+% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can
-+% set \parskip and call \setleading for \baselineskip.
-+%
-+\def\internalpagesizes#1#2#3#4#5#6{%
-+ \voffset = #3\relax
-+ \topskip = #6\relax
-+ \splittopskip = \topskip
-+ %
-+ \vsize = #1\relax
-+ \advance\vsize by \topskip
-+ \outervsize = \vsize
-+ \advance\outervsize by 2\topandbottommargin
-+ \pageheight = \vsize
-+ %
-+ \hsize = #2\relax
-+ \outerhsize = \hsize
-+ \advance\outerhsize by 0.5in
-+ \pagewidth = \hsize
-+ %
-+ \normaloffset = #4\relax
-+ \bindingoffset = #5\relax
-+ %
-+ \parindent = \defaultparindent
-+ \setemergencystretch
-+}
-+
-+% @letterpaper (the default).
-+\def\letterpaper{{\globaldefs = 1
-+ \parskip = 3pt plus 2pt minus 1pt
-+ \setleading{13.2pt}%
-+ %
-+ % If page is nothing but text, make it come out even.
-+ \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
-+}}
-+
-+% Use @smallbook to reset parameters for 7x9.5 (or so) format.
-+\def\smallbook{{\globaldefs = 1
-+ \parskip = 2pt plus 1pt
-+ \setleading{12pt}%
-+ %
-+ \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
-+ %
-+ \lispnarrowing = 0.3in
-+ \tolerance = 700
-+ \hfuzz = 1pt
-+ \contentsrightmargin = 0pt
-+ \deftypemargin = 0pt
-+ \defbodyindent = .5cm
-+ %
-+ \let\smalldisplay = \smalldisplayx
-+ \let\smallexample = \smalllispx
-+ \let\smallformat = \smallformatx
-+ \let\smalllisp = \smalllispx
-+}}
-+
- % Use @afourpaper to print on European A4 paper.
--\def\afourpaper{
--\global\tolerance=700
--\global\hfuzz=1pt
--\setleading{12pt}
--\global\parskip 15pt plus 1pt
--
--\global\vsize= 53\baselineskip
--\advance\vsize by \topskip
--%\global\hsize= 5.85in % A4 wide 10pt
--\global\hsize= 6.5in
--\global\outerhsize=\hsize
--\global\advance\outerhsize by 0.5in
--\global\outervsize=\vsize
--\global\advance\outervsize by 0.6in
--
--\global\pagewidth=\hsize
--\global\pageheight=\vsize
--}
--
--\bindingoffset=0pt
--\normaloffset=\hoffset
--\pagewidth=\hsize
--\pageheight=\vsize
--
--% Allow control of the text dimensions. Parameters in order: textheight;
--% textwidth; voffset; hoffset; binding offset; topskip.
--% All require a dimension;
--% header is additional; added length extends the bottom of the page.
--
--\def\changepagesizes#1#2#3#4#5#6{
-- \global\vsize= #1
-- \global\topskip= #6
-- \advance\vsize by \topskip
-- \global\voffset= #3
-- \global\hsize= #2
-- \global\outerhsize=\hsize
-- \global\advance\outerhsize by 0.5in
-- \global\outervsize=\vsize
-- \global\advance\outervsize by 0.6in
-- \global\pagewidth=\hsize
-- \global\pageheight=\vsize
-- \global\normaloffset= #4
-- \global\bindingoffset= #5}
-+\def\afourpaper{{\globaldefs = 1
-+ \setleading{12pt}%
-+ \parskip = 3pt plus 2pt minus 1pt
-+ %
-+ \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
-+ %
-+ \tolerance = 700
-+ \hfuzz = 1pt
-+}}
-
- % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
- % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
--\def\afourlatex
-- {\global\tolerance=700
-- \global\hfuzz=1pt
-- \setleading{12pt}
-- \global\parskip 15pt plus 1pt
-- \advance\baselineskip by 1.6pt
-- \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
-- }
-+\def\afourlatex{{\globaldefs = 1
-+ \setleading{13.6pt}%
-+ %
-+ \afourpaper
-+ \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
-+ %
-+ \globaldefs = 0
-+}}
-
- % Use @afourwide to print on European A4 paper in wide format.
--\def\afourwide{\afourpaper
--\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
-+\def\afourwide{%
-+ \afourpaper
-+ \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
-+ %
-+ \globaldefs = 0
-+}
-+
-+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
-+% Perhaps we should allow setting the margins, \topskip, \parskip,
-+% and/or leading, also. Or perhaps we should compute them somehow.
-+%
-+\def\pagesizes{\parsearg\pagesizesxxx}
-+\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
-+\def\pagesizesyyy#1,#2,#3\finish{{%
-+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
-+ \globaldefs = 1
-+ %
-+ \parskip = 3pt plus 2pt minus 1pt
-+ \setleading{13.2pt}%
-+ %
-+ \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
-+}}
-+
-+% Set default to letter.
-+%
-+\letterpaper
-+
-+
-+\message{and turning on texinfo input format.}
-
- % Define macros to output various characters with catcode for normal text.
- \catcode`\"=\other
-@@ -4796,6 +5838,7 @@
- \catcode`\<=\other
- \catcode`\>=\other
- \catcode`\+=\other
-+\catcode`\$=\other
- \def\normaldoublequote{"}
- \def\normaltilde{~}
- \def\normalcaret{^}
-@@ -4804,6 +5847,7 @@
- \def\normalless{<}
- \def\normalgreater{>}
- \def\normalplus{+}
-+\def\normaldollar{$}
-
- % This macro is used to make a character print one way in ttfont
- % where it can probably just be output, and another way in other fonts,
-@@ -4814,7 +5858,13 @@
- % interword stretch (and shrink), and it is reasonable to expect all
- % typewriter fonts to have this, we can check that font parameter.
- %
--\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi}
-+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
-+
-+% Same as above, but check for italic font. Actually this also catches
-+% non-italic slanted fonts since it is impossible to distinguish them from
-+% italic fonts. But since this is only used by $ and it uses \sl anyway
-+% this is not a problem.
-+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
-
- % Turn off all special characters except @
- % (and those which the user can use as if they were ordinary).
-@@ -4822,10 +5872,10 @@
- % use math or other variants that look better in normal text.
-
- \catcode`\"=\active
--\def\activedoublequote{{\tt \char '042}}
-+\def\activedoublequote{{\tt\char34}}
- \let"=\activedoublequote
- \catcode`\~=\active
--\def~{{\tt \char '176}}
-+\def~{{\tt\char126}}
- \chardef\hat=`\^
- \catcode`\^=\active
- \def^{{\tt \hat}}
-@@ -4836,7 +5886,7 @@
- \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
-
- \catcode`\|=\active
--\def|{{\tt \char '174}}
-+\def|{{\tt\char124}}
- \chardef \less=`\<
- \catcode`\<=\active
- \def<{{\tt \less}}
-@@ -4845,6 +5895,8 @@
- \def>{{\tt \gtr}}
- \catcode`\+=\active
- \def+{{\tt \char 43}}
-+\catcode`\$=\active
-+\def${\ifusingit{{\sl\$}}\normaldollar}
- %\catcode 27=\active
- %\def^^[{$\diamondsuit$}
-
-@@ -4875,9 +5927,6 @@
- % \normalbackslash outputs one backslash in fixed width font.
- \def\normalbackslash{{\tt\rawbackslashxx}}
-
--% Say @foo, not \foo, in error messages.
--\escapechar=`\@
--
- % \catcode 17=0 % Define control-q
- \catcode`\\=\active
-
-@@ -4891,7 +5940,8 @@
- @let|=@normalverticalbar
- @let<=@normalless
- @let>=@normalgreater
--@let+=@normalplus}
-+@let+=@normalplus
-+@let$=@normaldollar}
-
- @def@normalturnoffactive{@let"=@normaldoublequote
- @let\=@normalbackslash
-@@ -4901,7 +5951,8 @@
- @let|=@normalverticalbar
- @let<=@normalless
- @let>=@normalgreater
--@let+=@normalplus}
-+@let+=@normalplus
-+@let$=@normaldollar}
-
- % Make _ and + \other characters, temporarily.
- % This is canceled by @fixbackslash.
-@@ -4920,16 +5971,29 @@
- % Also back turn on active characters that might appear in the input
- % file name, in case not using a pre-dumped format.
- %
--@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
-- @catcode`+=@active @catcode`@_=@active}
-+@gdef@fixbackslash{%
-+ @ifx\@eatinput @let\ = @normalbackslash @fi
-+ @catcode`+=@active
-+ @catcode`@_=@active
-+}
-+
-+% Say @foo, not \foo, in error messages.
-+@escapechar = `@@
-
--%% These look ok in all fonts, so just make them not special. The @rm below
--%% makes sure that the current font starts out as the newly loaded cmr10
--@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
-+% These look ok in all fonts, so just make them not special.
-+@catcode`@& = @other
-+@catcode`@# = @other
-+@catcode`@% = @other
-
-+@c Set initial fonts.
- @textfonts
- @rm
-
-+
- @c Local variables:
-+@c eval: (add-hook 'write-file-hooks 'time-stamp)
- @c page-delimiter: "^\\\\message"
-+@c time-stamp-start: "def\\\\texinfoversion{"
-+@c time-stamp-format: "%:y-%02m-%02d.%02H"
-+@c time-stamp-end: "}"
- @c End: