15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% texinfo.tex -- TeX macros to handle Texinfo files.
25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Load plain if necessary, i.e., if running under initex.
45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\texinfoversion{2004-11-25.16}
75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Foundation, Inc.
115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This texinfo.tex file is free software; you can redistribute it and/or
135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% modify it under the terms of the GNU General Public License as
145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% published by the Free Software Foundation; either version 2, or (at
155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% your option) any later version.
165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This texinfo.tex file is distributed in the hope that it will be
185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% General Public License for more details.
215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% You should have received a copy of the GNU General Public License
235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% along with this texinfo.tex file; see the file COPYING.  If not, write
245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Boston, MA 02111-1307, USA.
265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% As a special exception, when this file is read by TeX when processing
285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% a Texinfo source document, you may use the result without
295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% restriction.  (This has been our intent since Texinfo was invented.)
305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Please try the latest version of texinfo.tex before submitting bug
325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% reports; you can get the latest version from:
335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   ftp://tug.org/tex/texinfo.tex
355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%     (and all CTAN mirrors, see http://www.ctan.org).
365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The texinfo.tex in any given distribution could well be out
375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of date, so if that's what you're using, please check.
385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Send bug reports to bug-texinfo@gnu.org.  Please include including a
405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% complete document in each bug report with which we can reproduce the
415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% problem.  Patches are, of course, greatly appreciated.
425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To process a Texinfo manual with TeX, it's most reliable to use the
445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% texi2dvi shell script that comes with the distribution.  For a simple
455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% manual foo.texi, however, you can get away with this:
465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   tex foo.texi
475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   texindex foo.??
485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   tex foo.texi
495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   tex foo.texi
505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The extra TeX runs get the cross-reference information correct.
525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sometimes one run after texindex suffices, and sometimes you need more
535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% than two; texi2dvi does it as many times as necessary.
545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It is possible to adapt texinfo.tex for other languages, to some
565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% extent.  You can get the existing language-specific files from the
575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% full Texinfo distribution.
585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{Loading texinfo [version \texinfoversion]:}
635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If in a .fmt file, print the version number
655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and turn on active characters that we couldn't do earlier because
665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% they might have appeared in the input file name.
675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\everyjob{\message{[Texinfo version \texinfoversion]}%
685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`+=\active \catcode`\_=\active}
695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{Basics,}
715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\other=12
725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We never want plain's \outer definition of \+ in Texinfo.
745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For @tex, we can use \tabalign.
755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\+ = \relax
765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Save some plain tex macros whose names we will redefine.
785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexb=\b
795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexbullet=\bullet
805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexc=\c
815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexcomma=\,
825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexdot=\.
835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexdots=\dots
845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexend=\end
855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexequiv=\equiv
865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexexclam=\!
875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexfootnote=\footnote
885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexgtr=>
895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexhat=^
905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexi=\i
915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexindent=\indent
925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexinsert=\insert
935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexlbrace=\{
945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexless=<
955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexnewwrite\newwrite
965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexnoindent=\noindent
975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexplus=+
985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexrbrace=\}
995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexslash=\/
1005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptexstar=\*
1015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ptext=\t
1025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If this character appears in an error message or help string, it
1045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% starts a new line in the output.
1055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newlinechar = `^^J
1065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use TeX 3.0's \inputlineno to get the line number, for better error
1085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% messages, but if we're using an old version of TeX, don't do anything.
1095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
1105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\inputlineno\thisisundefined
1115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\linenumber = \empty % Pre-3.0.
1125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else
1135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\linenumber{l.\the\inputlineno:\space}
1145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi
1155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set up fixed words for English if not already set.
1175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
1185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
1195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
1205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
1215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
1225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
1235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
1245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
1255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
1265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
1275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
1285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
1295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
1305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
1315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
1325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
1335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
1345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
1355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
1365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
1375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
1385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
1395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
1405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
1415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
1425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
1435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
1445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
1455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
1465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
1475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
1485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
1495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
1505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
1515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
1525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
1535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
1545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
1555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% In some macros, we cannot use the `\? notation---the left quote is
1575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% in some cases the escape char.
1585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\colonChar = `\:
1595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\commaChar = `\,
1605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\dotChar   = `\.
1615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\exclamChar= `\!
1625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\questChar = `\?
1635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\semiChar  = `\;
1645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\underChar = `\_
1655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\spaceChar = `\ %
1675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\spacecat = 10
1685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\spaceisspace{\catcode\spaceChar=\spacecat}
1695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Ignore a token.
1715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
1725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\gobble#1{}
1735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The following is used inside several \edef's.
1755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
1765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Hyphenation fixes.
1785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\hyphenation{
1795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
1805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ap-pen-dix bit-map bit-maps
1815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  data-base data-bases eshell fall-ing half-way long-est man-u-script
1825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
1835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
1845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  spell-ing spell-ings
1855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  stand-alone strong-est time-stamp time-stamps which-ever white-space
1865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  wide-spread wrap-around
1875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
1885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Margin to add to right of even pages, to left of odd pages.
1905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\bindingoffset
1915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\normaloffset
1925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\pagewidth \newdimen\pageheight
1935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For a final copy, take out the rectangles
1955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that mark overfull boxes (in case you have decided
1965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that the text looks ok even though it passes the margin).
1975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
1985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finalout{\overfullrule=0pt}
1995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @| inserts a changebar to the left of the current line.  It should
2015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% surround any changed text.  This approach does *not* work if the
2025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% change spans more than two lines of output.  To handle that, we would
2035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% have adopt a much more difficult approach (putting marks into the main
2045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% vertical list for the beginning and end of each change).
2055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
2065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\|{%
2075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \vadjust can only be used in horizontal mode.
2085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \leavevmode
2095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
2105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Append this vertical mode material after the current line in the output.
2115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vadjust{%
2125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % We want to insert a rule with the height and depth of the current
2135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % leading; that is exactly what \strutbox is supposed to record.
2145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vskip-\baselineskip
2155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
2165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \vadjust-items are inserted at the left edge of the type.  So
2175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % the \llap here moves out into the left-hand margin.
2185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \llap{%
2195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
2205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % For a thicker or thinner bar, change the `1pt'.
2215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \vrule height\baselineskip width1pt
2225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
2235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % This is the space between the bar and the text.
2245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \hskip 12pt
2255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }%
2265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
2275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
2285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sometimes it is convenient to have everything in the transcript file
2305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and nothing on the terminal.  We don't just call \tracingall here,
2315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% since that produces some useless output on the terminal.  We also make
2325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% some effort to order the tracing commands to reduce output in the log
2335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% file; cf. trace.sty in LaTeX.
2345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
2355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
2365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\loggingall{%
2375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tracingstats2
2385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tracingpages1
2395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tracinglostchars2  % 2 gives us more in etex
2405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tracingparagraphs1
2415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tracingoutput1
2425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tracingmacros2
2435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tracingrestores1
2445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \showboxbreadth\maxdimen \showboxdepth\maxdimen
2455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\eTeXversion\undefined\else % etex gives us more logging
2465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \tracingscantokens1
2475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \tracingifs1
2485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \tracinggroups1
2495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \tracingnesting2
2505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \tracingassigns1
2515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
2525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tracingcommands3  % 3 gives us more in etex
2535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \errorcontextlines16
2545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}%
2555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% add check for \lastpenalty to plain's definitions.  If the last thing
2575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we did was a \nobreak, we don't want to insert more space.
2585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
2595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
2605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \removelastskip\penalty-50\smallskip\fi\fi}
2615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
2625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \removelastskip\penalty-100\medskip\fi\fi}
2635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
2645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \removelastskip\penalty-200\bigskip\fi\fi}
2655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For @cropmarks command.
2675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do @cropmarks to get crop marks.
2685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
2695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifcropmarks
2705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\cropmarks = \cropmarkstrue
2715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
2725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Dimensions to add cropmarks at corners.
2735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Added by P. A. MacKay, 12 Nov. 1986
2745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
2755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
2765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\cornerlong  \cornerlong=1pc
2775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\cornerthick \cornerthick=.3pt
2785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\topandbottommargin \topandbottommargin=.75in
2795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Main output routine.
2815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\PAGE = 255
2825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\output = {\onepageout{\pagecontents\PAGE}}
2835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\headlinebox
2855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\footlinebox
2865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \onepageout takes a vbox as an argument.  Note that \pagecontents
2885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% does insertions, but you have to call it yourself.
2895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\onepageout#1{%
2905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
2915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
2925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifodd\pageno  \advance\hoffset by \bindingoffset
2935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else \advance\hoffset by -\bindingoffset\fi
2945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
2955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Do this outside of the \shipout so @code etc. will be expanded in
2965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % the headline as they should be, not taken literally (outputting ''code).
2975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
2985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
2995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
3005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
3015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Have to do this stuff outside the \shipout because we want it to
3025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % take effect in \write's, yet the group defined by the \vbox ends
3035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % before the \shipout runs.
3045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
3055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \escapechar = `\\     % use backslash in output files.
3065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \indexdummies         % don't expand commands in the output.
3075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
3085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                   % the page break happens to be in the middle of an example.
3095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \shipout\vbox{%
3105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Do this early so pdf references go to the beginning of the page.
3115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
3125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
3135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifcropmarks \vbox to \outervsize\bgroup
3145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \hsize = \outerhsize
3155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \vskip-\topandbottommargin
3165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \vtop to0pt{%
3175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \line{\ewtop\hfil\ewtop}%
3185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \nointerlineskip
3195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \line{%
3205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project            \vbox{\moveleft\cornerthick\nstop}%
3215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project            \hfill
3225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project            \vbox{\moveright\cornerthick\nstop}%
3235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          }%
3245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \vss}%
3255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \vskip\topandbottommargin
3265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \line\bgroup
3275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \hfil % center the page within the outer (page) hsize.
3285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \ifodd\pageno\hskip\bindingoffset\fi
3295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \vbox\bgroup
3305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
3315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
3325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \unvbox\headlinebox
3335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \pagebody{#1}%
3345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifdim\ht\footlinebox > 0pt
3355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % Only leave this space if the footline is nonempty.
3365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % (We lessened \vsize for it in \oddfootingxxx.)
3375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % The \baselineskip=24pt in plain's \makefootline has no effect.
3385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \vskip 2\baselineskip
3395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \unvbox\footlinebox
3405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
3415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
3425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifcropmarks
3435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \egroup % end of \vbox\bgroup
3445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \hfil\egroup % end of (centering) \line\bgroup
3455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \vskip\topandbottommargin plus1fill minus1fill
3465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \boxmaxdepth = \cornerthick
3475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \vbox to0pt{\vss
3485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \line{%
3495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project            \vbox{\moveleft\cornerthick\nsbot}%
3505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project            \hfill
3515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project            \vbox{\moveright\cornerthick\nsbot}%
3525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          }%
3535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \nointerlineskip
3545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \line{\ewbot\hfil\ewbot}%
3555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        }%
3565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \egroup % \vbox from first cropmarks clause
3575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
3585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }% end of \shipout\vbox
3595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }% end of group with \normalturnoffactive
3605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advancepageno
3615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
3625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
3635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newinsert\margin \dimen\margin=\maxdimen
3655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
3675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\@ =11
3685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
3695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% marginal hacks, juha@viisa.uucp (Juha Takala)
3705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifvoid\margin\else % marginal info is present
3715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
3725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\dimen@=\dp#1 \unvbox#1
3735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
3745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
3755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
3765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Here are the rules for the cropmarks.  Note that they are
3785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% offset so that the space between them is truly \outerhsize or \outervsize
3795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (P. A. MacKay, 12 November, 1986)
3805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
3815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
3825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nstop{\vbox
3835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
3845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
3855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nsbot{\vbox
3865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
3875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Parse an argument, then pass it to #1.  The argument is the rest of
3895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the input line (except we remove a trailing comment).  #1 should be a
3905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% macro which expects an ordinary undelimited TeX argument.
3915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
3925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parsearg{\parseargusing{}}
3935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parseargusing#1#2{%
3945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\next{#2}%
3955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \begingroup
3965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \obeylines
3975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \spaceisspace
3985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    #1%
3995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
4005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
4015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\obeylines %
4035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\parseargline#1^^M{%
4045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup % End of the group started in \parsearg.
4055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \argremovecomment #1\comment\ArgTerm%
4065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
4075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
4085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% First remove any @comment, then any @c comment.
4105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
4115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
4125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
4145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
4155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \argremovec might leave us with trailing space, e.g.,
4165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%    @end itemize  @c foo
4175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This space token undergoes the same procedure and is eventually removed
4185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% by \finishparsearg.
4195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
4205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
4215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
4225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
4235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#3}%
4245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\empty
4255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % We cannot use \next here, as it holds the macro to run;
4265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % thus we reuse \temp.
4275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\temp\finishparsearg
4285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
4295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\temp\argcheckspaces
4305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
4315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Put the space token in:
4325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \temp#1 #3\ArgTerm
4335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
4345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If a _delimited_ argument is enclosed in braces, they get stripped; so
4365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to get _exactly_ the rest of the line, we had to prevent such situation.
4375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We prepended an \empty token at the very beginning and we expand it now,
4385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% just before passing the control to \next.
4395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
4405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% either the null string, or it ends with \^^M---thus there is no danger
4415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that a pair of braces would be stripped.
4425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
4435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But first, we have to remove the trailing space token.
4445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
4455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}}
4465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \parseargdef\foo{...}
4485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%	is roughly equivalent to
4495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\foo{\parsearg\Xfoo}
4505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\Xfoo#1{...}
4515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
4525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
4535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% favourite TeX trick.  --kasal, 16nov03
4545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parseargdef#1{%
4565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter \doparseargdef \csname\string#1\endcsname #1%
4575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
4585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doparseargdef#1#2{%
4595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def#2{\parsearg#1}%
4605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def#1##1%
4615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
4625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Several utility definitions with active space:
4645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
4655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \obeyspaces
4665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\obeyedspace{ }
4675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Make each space character in the input produce a normal interword
4695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % space in the output.  Don't allow a line break at this space, as this
4705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % is used only in environments like @example, where each line of input
4715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % should produce a line of output anyway.
4725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
4735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\sepspaces{\obeyspaces\let =\tie}
4745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % If an index command is used in an @example environment, any spaces
4765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % therein should become regular spaces in the raw index file, not the
4775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % expansion of \tie (\leavevmode \penalty \@M \ ).
4785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\unsepspaces{\let =\space}
4795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
4805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
4835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define the framework for environments in texinfo.tex.  It's used like this:
4855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
4865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   \envdef\foo{...}
4875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   \def\Efoo{...}
4885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
4895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It's the responsibility of \envdef to insert \begingroup before the
4905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% actual body; @end closes the group after calling \Efoo.  \envdef also
4915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% defines \thisenv, so the current environment is known; @end checks
4925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% whether the environment name matches.  The \checkenv macro can also be
4935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% used to check whether the current environment is the one expected.
4945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
4955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
4965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% are not treated as enviroments; they don't open a group.  (The
4975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% implementation of @end takes care not to call \endgroup in this
4985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% special case.)
4995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% At runtime, environments start with this:
5025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startenvironment#1{\begingroup\def\thisenv{#1}}
5035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% initialize
5045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\thisenv\empty
5055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ... but they get defined via ``\envdef\foo{...}'':
5075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
5085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
5095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Check whether we're in the right environment:
5115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\checkenv#1{%
5125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#1}%
5135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\thisenv\temp
5145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
5155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \badenverr
5165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
5175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
5185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Evironment mismatch, #1 expected:
5205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\badenverr{%
5215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \errhelp = \EMsimple
5225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \errmessage{This command can appear only \inenvironment\temp,
5235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    not \inenvironment\thisenv}%
5245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
5255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inenvironment#1{%
5265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx#1\empty
5275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    out of any environment%
5285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
5295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    in environment \expandafter\string#1%
5305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
5315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
5325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @end foo executes the definition of \Efoo.
5345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But first, it executes a specialized version of \checkenv
5355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
5365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\end{%
5375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \if 1\csname iscond.#1\endcsname
5385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
5395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
5405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\checkenv\csname#1\endcsname
5415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \csname E#1\endcsname
5425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup
5435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
5445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
5455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newhelp\EMsimple{Press RETURN to continue.}
5475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% Simple single-character @ commands
5505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @@ prints an @
5525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Kludge this until the fonts are right (grr).
5535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\@{{\tt\char64}}
5545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is turned off because it was never documented
5565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and you can use @w{...} around a quote to suppress ligatures.
5575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% Define @` and @' to be the same as ` and '
5585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% but suppressing ligatures.
5595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\`{{`}}
5605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\'{{'}}
5615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Used to generate quoted braces.
5635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\mylbrace {{\tt\char123}}
5645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\myrbrace {{\tt\char125}}
5655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\{=\mylbrace
5665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\}=\myrbrace
5675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup
5685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Definitions to produce \{ and \} commands for indices,
5695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % and @{ and @} for the aux file.
5705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\{ = \other \catcode`\} = \other
5715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\[ = 1 \catcode`\] = 2
5725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\! = 0 \catcode`\\ = \other
5735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  !gdef!lbracecmd[\{]%
5745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  !gdef!rbracecmd[\}]%
5755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  !gdef!lbraceatcmd[@{]%
5765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  !gdef!rbraceatcmd[@}]%
5775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project!endgroup
5785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @comma{} to avoid , parsing problems.
5805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\comma = ,
5815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
5835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
5845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\, = \c
5855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\dotaccent = \.
5865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ringaccent#1{{\accent23 #1}}
5875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\tieaccent = \t
5885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ubaraccent = \b
5895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\udotaccent = \d
5905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Other special characters: @questiondown @exclamdown @ordf @ordm
5925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
5935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\questiondown{?`}
5945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\exclamdown{!`}
5955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
5965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
5975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Dotless i and dotless j, used for accents.
5995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\imacro{i}
6005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\jmacro{j}
6015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dotless#1{%
6025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#1}%
6035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\imacro \ptexi
6045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifx\temp\jmacro \j
6055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else \errmessage{@dotless can be used only with i or j}%
6065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi\fi
6075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
6085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The \TeX{} logo, as in plain, but resetting the spacing so that a
6105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% period following counts as ending a sentence.  (Idea found in latex.)
6115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
6125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\edef\TeX{\TeX \spacefactor=1000 }
6135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @LaTeX{} logo.  Not quite the same results as the definition in
6155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% latex.ltx, since we use a different font for the raised A; it's most
6165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% convenient for us to use an explicitly smaller font, rather than using
6175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the \scriptstyle font (since we don't reset \scriptstyle and
6185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \scriptscriptstyle).
6195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
6205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\LaTeX{%
6215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  L\kern-.36em
6225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\setbox0=\hbox{T}%
6235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
6245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \kern-.15em
6255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \TeX
6265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
6275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Be sure we're in horizontal mode when doing a tie, since we make space
6295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% equivalent to this in @example-like environments. Otherwise, a space
6305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% at the beginning of a line will start with \penalty -- and
6315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% since \penalty is valid in vertical mode, we'd end up putting the
6325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% penalty on the vertical list instead of in the new paragraph.
6335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`@ = 11
6345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % Avoid using \@M directly, because that causes trouble
6355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project % if the definition is written into an index file.
6365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \global\let\tiepenalty = \@M
6375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \gdef\tie{\leavevmode\penalty\tiepenalty\ }
6385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
6395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @: forces normal size whitespace following.
6415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\:{\spacefactor=1000 }
6425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @* forces a line break.
6445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\*{\hfil\break\hbox{}\ignorespaces}
6455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @/ allows a line break.
6475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\/=\allowbreak
6485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @. is an end-of-sentence period.
6505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\.{.\spacefactor=3000 }
6515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @! is an end-of-sentence bang.
6535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\!{!\spacefactor=3000 }
6545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @? is an end-of-sentence query.
6565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\?{?\spacefactor=3000 }
6575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @w prevents a word break.  Without the \leavevmode, @w at the
6595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% beginning of a paragraph, when TeX is still in vertical mode, would
6605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% produce a whole line of output instead of starting the paragraph.
6615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\w#1{\leavevmode\hbox{#1}}
6625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @group ... @end group forces ... to be all on one page, by enclosing
6645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
6655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to keep its height that of a normal line.  According to the rules for
6665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \topskip (p.114 of the TeXbook), the glue inserted is
6675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% max (\topskip - \ht (first item), 0).  If that height is large,
6685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% therefore, no glue is inserted, and the space between the headline and
6695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the text is small, which looks bad.
6705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
6715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Another complication is that the group might be very large.  This can
6725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% cause the glue on the previous page to be unduly stretched, because it
6735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% does not have much material.  In this case, it's better to add an
6745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% explicit \vfill so that the extra space is at the bottom.  The
6755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% threshold for doing this is if the group is more than \vfilllimit
6765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% percent of a page (\vfilllimit can be changed inside of @tex).
6775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
6785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\groupbox
6795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\vfilllimit{0.7}
6805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
6815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\group{%
6825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\catcode`\^^M=\active \else
6835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \errhelp = \groupinvalidhelp
6845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \errmessage{@group invalid in context where filling is enabled}%
6855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
6865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \startsavinginserts
6875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
6885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox\groupbox = \vtop\bgroup
6895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Do @comment since we are called inside an environment such as
6905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % @example, where each end-of-line in the input causes an
6915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % end-of-line in the output.  We don't want the end-of-line after
6925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % the `@group' to put extra space in the output.  Since @group
6935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % should appear on a line by itself (according to the Texinfo
6945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % manual), we don't worry about eating any user text.
6955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \comment
6965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
6975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
6985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The \vtop produces a box with normal height and large depth; thus, TeX puts
6995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \baselineskip glue before it, and (when the next line of text is done)
7005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \lineskip glue after it.  Thus, space below is not quite equal to space
7015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% above.  But it's pretty close.
7025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Egroup{%
7035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % To get correct interline space between the last line of the group
7045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % and the first line afterwards, we have to propagate \prevdepth.
7055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgraf % Not \par, as it may have been set to \lisppar.
7065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\dimen1 = \prevdepth
7075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \egroup           % End the \vtop.
7085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \dimen0 is the vertical size of the group's box.
7095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
7105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \dimen2 is how much space is left on the page (more or less).
7115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
7125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % if the group doesn't fit on the current page, and it's a big big
7135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % group, force a page break.
7145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifdim \dimen0 > \dimen2
7155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifdim \pagetotal < \vfilllimit\pageheight
7165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \page
7175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
7185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
7195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \box\groupbox
7205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \prevdepth = \dimen1
7215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \checkinserts
7225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
7235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
7245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
7255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% message, so this ends up printing `@group can only ...'.
7265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
7275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newhelp\groupinvalidhelp{%
7285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectgroup can only be used in environments such as @example,^^J%
7295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectwhere each line of input produces a line of output.}
7305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @need space-in-mils
7325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% forces a page break if there is not space-in-mils remaining.
7335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\mil  \mil=0.001in
7355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Old definition--didn't work.
7375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\parseargdef\need{\par %
7385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% This method tries to make TeX break the page naturally
7395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% if the depth of the box does not fit.
7405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%{\baselineskip=0pt%
7415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
7425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\prevdepth=-1000pt
7435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%}}
7445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\need{%
7465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Ensure vertical mode, so we don't make a big box in the middle of a
7475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % paragraph.
7485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \par
7495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
7505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % If the @need value is less than one line space, it's useless.
7515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen0 = #1\mil
7525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen2 = \ht\strutbox
7535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\dimen2 by \dp\strutbox
7545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifdim\dimen0 > \dimen2
7555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
7565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Do a \strut just to make the height of this box be normal, so the
7575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % normal leading is inserted relative to the preceding line.
7585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % And a page break here is fine.
7595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vtop to #1\mil{\strut\vfil}%
7605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
7615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % TeX does not even consider page breaks if a penalty added to the
7625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % main vertical list is 10000 or more.  But in order to see if the
7635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % empty box we just added fits on the page, we must make it consider
7645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % page breaks.  On the other hand, we don't want to actually break the
7655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % page after the empty box.  So we use a penalty of 9999.
7665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
7675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % There is an extremely small chance that TeX will actually break the
7685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % page at this \penalty, if there are no other feasible breakpoints in
7695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % sight.  (If the user is using lots of big @group commands, which
7705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % almost-but-not-quite fill up a page, TeX will have a hard time doing
7715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % good page breaking, for example.)  However, I could not construct an
7725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % example where a page broke at this \penalty; if it happens in a real
7735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % document, then we can reconsider our strategy.
7745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \penalty9999
7755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
7765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Back up by the size of the box, whether we did a page break or not.
7775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \kern -#1\mil
7785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
7795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Do not allow a page break right after this kern.
7805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nobreak
7815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
7825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
7835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @br   forces paragraph break (and is undocumented).
7855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\br = \par
7875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @page forces the start of a new page.
7895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
7905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\page{\par\vfill\supereject}
7915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @exdent text....
7935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% outputs text on separate line in roman font, starting at standard page margin
7945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This records the amount of indent in the innermost environment.
7965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% That's how much \exdent should take out.
7975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\exdentamount
7985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This defn is used inside fill environments such as @defun.
8005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
8015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This defn is used inside nofill environments such as @example.
8035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
8045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \leftline{\hskip\leftskip{\rm#1}}}}
8055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
8075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% paragraph.  For more general purposes, use the \margin insertion
8085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% class.  WHICH is `l' or `r'.
8095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
8105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\inmarginspacing \inmarginspacing=1cm
8115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\strutdepth{\dp\strutbox}
8125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
8135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doinmargin#1#2{\strut\vadjust{%
8145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nobreak
8155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \kern-\strutdepth
8165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vtop to \strutdepth{%
8175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \baselineskip=\strutdepth
8185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vss
8195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % if you have multiple lines of stuff to put here, you'll need to
8205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % make the vbox yourself of the appropriate size.
8215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx#1l%
8225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \llap{\ignorespaces #2\hskip\inmarginspacing}%
8235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
8245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
8255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
8265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \null
8275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
8285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
8295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inleftmargin{\doinmargin l}
8305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inrightmargin{\doinmargin r}
8315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
8325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @inmargin{TEXT [, RIGHT-TEXT]}
8335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
8345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% else use TEXT for both).
8355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
8365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inmargin#1{\parseinmargin #1,,\finish}
8375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
8385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0 = \hbox{\ignorespaces #2}%
8395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifdim\wd0 > 0pt
8405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\lefttext{#1}%  have both texts
8415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\righttext{#2}%
8425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
8435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\lefttext{#1}%  have only one text
8445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\righttext{#1}%
8455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
8465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
8475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifodd\pageno
8485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
8495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
8505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\temp{\inleftmargin\lefttext}%
8515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
8525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \temp
8535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
8545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @include file    insert text of that file as input.
8565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
8575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\include{\parseargusing\filenamecatcodes\includezzz}
8585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\includezzz#1{%
8595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \pushthisfilestack
8605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\thisfile{#1}%
8615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
8625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \makevalueexpandable
8635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\temp{\input #1 }%
8645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter
8655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }\temp
8665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \popthisfilestack
8675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
8685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\filenamecatcodes{%
8695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\\=\other
8705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`~=\other
8715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`^=\other
8725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`_=\other
8735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`|=\other
8745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`<=\other
8755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`>=\other
8765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`+=\other
8775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`-=\other
8785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
8795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pushthisfilestack{%
8815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
8825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
8835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pushthisfilestackX{%
8845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\pushthisfilestackY\thisfile\StackTerm
8855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
8865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
8875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
8885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
8895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\popthisfilestack{\errthisfilestackempty}
8915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\errthisfilestackempty{\errmessage{Internal error:
8925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  the stack of filenames is empty.}}
8935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\thisfile{}
8955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @center line
8975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% outputs that line, centered.
8985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
8995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\center{%
9005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifhmode
9015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\next\centerH
9025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
9035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\next\centerV
9045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
9055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \next{\hfil \ignorespaces#1\unskip \hfil}%
9065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
9075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\centerH#1{%
9085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
9095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \hfil\break
9105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\hsize by -\leftskip
9115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\hsize by -\rightskip
9125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \line{#1}%
9135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \break
9145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
9155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
9165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
9175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @sp n   outputs n lines of vertical space
9195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\sp{\vskip #1\baselineskip}
9215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @comment ...line which is ignored...
9235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @c is the same as @comment
9245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @ignore ... @end ignore  is another way to write a comment
9255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\comment{\begingroup \catcode`\^^M=\other%
9275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
9285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\commentxxx}
9295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
9305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\c=\comment
9325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @paragraphindent NCHARS
9345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We'll use ems for NCHARS, close enough.
9355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% NCHARS can also be the word `asis' or `none'.
9365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We cannot feasibly implement @paragraphindent asis, though.
9375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
9385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\asisword{asis} % no translation, these are keywords
9395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\noneword{none}
9405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
9415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\paragraphindent{%
9425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#1}%
9435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\asisword
9445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
9455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\temp\noneword
9465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \defaultparindent = 0pt
9475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
9485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \defaultparindent = #1em
9495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
9505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
9515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parindent = \defaultparindent
9525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
9535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @exampleindent NCHARS
9555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We'll use ems for NCHARS like @paragraphindent.
9565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It seems @exampleindent asis isn't necessary, but
9575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% I preserve it to make it similar to @paragraphindent.
9585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\exampleindent{%
9595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#1}%
9605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\asisword
9615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
9625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\temp\noneword
9635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \lispnarrowing = 0pt
9645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
9655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \lispnarrowing = #1em
9665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
9675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
9685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
9695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @firstparagraphindent WORD
9715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If WORD is `none', then suppress indentation of the first paragraph
9725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% after a section heading.  If WORD is `insert', then do indent at such
9735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% paragraphs.
9745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
9755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The paragraph indentation is suppressed or not by calling
9765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \suppressfirstparagraphindent, which the sectioning commands do.
9775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We switch the definition of this back and forth according to WORD.
9785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% By default, we suppress indentation.
9795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
9805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
9815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\insertword{insert}
9825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
9835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\firstparagraphindent{%
9845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#1}%
9855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\noneword
9865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
9875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifx\temp\insertword
9885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\suppressfirstparagraphindent = \relax
9895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
9905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \errhelp = \EMsimple
9915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \errmessage{Unknown @firstparagraphindent option `\temp'}%
9925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi\fi
9935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
9945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Here is how we actually suppress indentation.  Redefine \everypar to
9965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \kern backwards by \parindent, and then reset itself to empty.
9975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
9985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We also make \indent itself not actually do anything until the next
9995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% paragraph.
10005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
10015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\dosuppressfirstparagraphindent{%
10025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\indent{%
10035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \restorefirstparagraphindent
10045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \indent
10055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
10065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\noindent{%
10075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \restorefirstparagraphindent
10085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \noindent
10095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
10105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\everypar = {%
10115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \kern -\parindent
10125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \restorefirstparagraphindent
10135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
10145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
10155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
10165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\restorefirstparagraphindent{%
10175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global \let \indent = \ptexindent
10185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global \let \noindent = \ptexnoindent
10195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global \everypar = {}%
10205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
10215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
10225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
10235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @asis just yields its argument.  Used with @table, for example.
10245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
10255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\asis#1{#1}
10265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
10275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @math outputs its argument in math mode.
10285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
10295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% One complication: _ usually means subscripts, but it could also mean
10305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
10315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% _ active, and distinguish by seeing if the current family is \slfam,
10325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which is what @var uses.
10335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
10345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode\underChar = \active
10355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\mathunderscore{%
10365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \catcode\underChar=\active
10375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
10385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
10395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
10405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Another complication: we want \\ (and @\) to output a \ character.
10415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
10425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% this is not advertised and we don't care.  Texinfo does not
10435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% otherwise define @\.
10445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
10455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
10465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
10475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
10485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\math{%
10495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tex
10505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \mathunderscore
10515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\\ = \mathbackslash
10525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \mathactive
10535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  $\finishmath
10545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
10555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
10565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
10575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Some active characters (such as <) are spaced differently in math.
10585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We have to reset their definitions in case the @math was an argument
10595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to a command which sets the catcodes (such as @item or @section).
10605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
10615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
10625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`^ = \active
10635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`< = \active
10645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`> = \active
10655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`+ = \active
10665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\mathactive{%
10675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let^ = \ptexhat
10685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let< = \ptexless
10695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let> = \ptexgtr
10705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let+ = \ptexplus
10715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
10725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
10735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
10745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @bullet and @minus need the same treatment as @math, just above.
10755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bullet{$\ptexbullet$}
10765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\minus{$-$}
10775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
10785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @dots{} outputs an ellipsis using the current font.
10795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We do .5em per period so that it has the same spacing in a typewriter
10805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% font as three actual period characters.
10815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
10825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dots{%
10835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \leavevmode
10845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hbox to 1.5em{%
10855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \hskip 0pt plus 0.25fil
10865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    .\hfil.\hfil.%
10875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \hskip 0pt plus 0.5fil
10885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
10895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
10905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
10915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @enddots{} is an end-of-sentence ellipsis.
10925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
10935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\enddots{%
10945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dots
10955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \spacefactor=3000
10965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
10975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
10985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @comma{} is so commas can be inserted into text without messing up
10995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Texinfo's parsing.
11005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
11015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\comma = ,
11025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
11035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @refill is a no-op.
11045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\refill=\relax
11055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
11065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If working on a large document in chapters, it is convenient to
11075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% be able to disable indexing, cross-referencing, and contents, for test runs.
11085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is done with @novalidate (before @setfilename).
11095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
11105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\iflinks \linkstrue % by default we want the aux files.
11115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\novalidate = \linksfalse
11125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
11135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @setfilename is done at the beginning of every texinfo file.
11145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% So open here the files we need to have open while reading the input.
11155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This makes it possible to make a .fmt file for texinfo.
11165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setfilename{%
11175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
11185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \iflinks
11195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \tryauxfile
11205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     % Open the new aux file.  TeX will close it automatically at exit.
11215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \immediate\openout\auxfile=\jobname.aux
11225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \fi % \openindices needs to do some work in any case.
11235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \openindices
11245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \let\setfilename=\comment % Ignore extra @setfilename cmds.
11255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   %
11265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % If texinfo.cnf is present on the system, read it.
11275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % Useful for site-wide @afourpaper, etc.
11285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \openin 1 texinfo.cnf
11295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \ifeof 1 \else \input texinfo.cnf \fi
11305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \closein 1
11315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   %
11325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \comment % Ignore the actual filename.
11335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
11345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
11355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called from \setfilename.
11365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
11375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\openindices{%
11385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \newindex{cp}%
11395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \newcodeindex{fn}%
11405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \newcodeindex{vr}%
11415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \newcodeindex{tp}%
11425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \newcodeindex{ky}%
11435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \newcodeindex{pg}%
11445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
11455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
11465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @bye.
11475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
11485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
11495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
11505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{pdf,}
11515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% adobe `portable' document format
11525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\tempnum
11535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\lnkcount
11545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\filename
11555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\filenamelength
11565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\pgn
11575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\toksA
11585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\toksB
11595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\toksC
11605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\toksD
11615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\boxA
11625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\countA
11635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifpdf
11645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifpdfmakepagedest
11655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
11665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
11675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% can be set).  So we test for \relax and 0 as well as \undefined,
11685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% borrowed from ifpdf.sty.
11695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\pdfoutput\undefined
11705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else
11715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\pdfoutput\relax
11725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
11735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifcase\pdfoutput
11745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
11755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \pdftrue
11765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
11775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
11785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi
11795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
11805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifpdf
11815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \input pdfcolor
11825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \pdfcatalog{/PageMode /UseOutlines}%
11835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\dopdfimage#1#2#3{%
11845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\imagewidth{#2}%
11855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\imageheight{#3}%
11865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % without \immediate, pdftex seg faults when the same image is
11875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
11885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum\pdftexversion < 14
11895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \immediate\pdfimage
11905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
11915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \immediate\pdfximage
11925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
11935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifx\empty\imagewidth\else width \imagewidth \fi
11945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifx\empty\imageheight\else height \imageheight \fi
11955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifnum\pdftexversion<13
11965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         #1.pdf%
11975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       \else
11985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         {#1.pdf}%
11995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       \fi
12005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum\pdftexversion < 14 \else
12015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \pdfrefximage \pdflastximage
12025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi}
12035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\pdfmkdest#1{{%
12045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % We have to set dummies so commands such as @code in a section title
12055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % aren't expanded.
12065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \atdummies
12075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \normalturnoffactive
12085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \pdfdest name{#1} xyz%
12095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }}
12105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\pdfmkpgn#1{#1}
12115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\linkcolor = \Blue  % was Cyan, but that seems light?
12125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\endlink{\Black\pdfendlink}
12135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Adding outlines to PDF; macros for calculating structure of outlines
12145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % come from Petr Olsak
12155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
12165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else \csname#1\endcsname \fi}
12175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
12185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\tempnum by 1
12195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
12205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
12215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % #1 is the section text.  #2 is the pdf expression for the number
12225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % of subentries (or empty, for subsubsections).  #3 is the node
12235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % text, which might be empty if this toc entry had no
12245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % corresponding node.  #4 is the page number.
12255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
12265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\dopdfoutline#1#2#3#4{%
12275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Generate a link to the node text if that exists; else, use the
12285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % page number.  We could generate a destination for the section
12295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % text in the case where a section has no node, but it doesn't
12305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % seem worthwhile, since most documents are normally structured.
12315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\pdfoutlinedest{#3}%
12325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi
12335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
12345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}%
12355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
12365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
12375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\pdfmakeoutlines{%
12385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \begingroup
12395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Thanh's hack / proper braces in bookmarks
12405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
12415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
12425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
12435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Read toc silently, to get counts of subentries for \pdfoutline.
12445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\numchapentry##1##2##3##4{%
12455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\def\thischapnum{##2}%
12465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\def\thissecnum{0}%
12475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\def\thissubsecnum{0}%
12485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      }%
12495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\numsecentry##1##2##3##4{%
12505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\advancenumber{chap\thischapnum}%
12515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\def\thissecnum{##2}%
12525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\def\thissubsecnum{0}%
12535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      }%
12545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\numsubsecentry##1##2##3##4{%
12555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\advancenumber{sec\thissecnum}%
12565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\def\thissubsecnum{##2}%
12575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      }%
12585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\numsubsubsecentry##1##2##3##4{%
12595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\advancenumber{subsec\thissubsecnum}%
12605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      }%
12615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\thischapnum{0}%
12625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\thissecnum{0}%
12635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\thissubsecnum{0}%
12645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
12655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % use \def rather than \let here because we redefine \chapentry et
12665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % al. a second time, below.
12675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\appentry{\numchapentry}%
12685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\appsecentry{\numsecentry}%
12695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\appsubsecentry{\numsubsecentry}%
12705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\appsubsubsecentry{\numsubsubsecentry}%
12715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\unnchapentry{\numchapentry}%
12725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\unnsecentry{\numsecentry}%
12735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\unnsubsecentry{\numsubsecentry}%
12745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\unnsubsubsecentry{\numsubsubsecentry}%
12755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \input \jobname.toc
12765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
12775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Read toc second time, this time actually producing the outlines.
12785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % The `-' means take the \expnumber as the absolute number of
12795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % subentries, which we calculated on our first read of the .toc above.
12805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
12815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % We use the node names as the destinations.
12825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\numchapentry##1##2##3##4{%
12835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
12845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\numsecentry##1##2##3##4{%
12855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
12865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\numsubsecentry##1##2##3##4{%
12875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
12885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\numsubsubsecentry##1##2##3##4{% count is always zero
12895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \dopdfoutline{##1}{}{##3}{##4}}%
12905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
12915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % PDF outlines are displayed using system fonts, instead of
12925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % document fonts.  Therefore we cannot use special characters,
12935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % since the encoding is unknown.  For example, the eogonek from
12945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Latin 2 (0xea) gets translated to a | character.  Info from
12955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
12965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
12975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % xx to do this right, we have to translate 8-bit characters to
12985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % their "best" equivalent, based on the @documentencoding.  Right
12995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % now, I guess we'll just let the pdf reader have its way.
13005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \indexnofonts
13015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \turnoffactive
13025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \input \jobname.toc
13035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup
13045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
13055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
13065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\makelinks #1,{%
13075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\params{#1}\def\E{END}%
13085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\params\E
13095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\nextmakelinks=\relax
13105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
13115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\nextmakelinks=\makelinks
13125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifnum\lnkcount>0,\fi
13135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \picknum{#1}%
13145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \startlink attr{/Border [0 0 0]}
13155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        goto name{\pdfmkpgn{\the\pgn}}%
13165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \linkcolor #1%
13175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \advance\lnkcount by 1%
13185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \endlink
13195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
13205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nextmakelinks
13215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
13225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\picknum#1{\expandafter\pn#1}
13235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\pn#1{%
13245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\p{#1}%
13255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\p\lbrace
13265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\nextpn=\ppn
13275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
13285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\nextpn=\ppnn
13295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\first{#1}
13305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
13315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nextpn
13325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
13335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\ppn#1{\pgn=#1\gobble}
13345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\ppnn{\pgn=\first}
13355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
13365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
13375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\PP\D\let\nextsp\relax
13385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else\let\nextsp\skipspaces
13395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifx\p\space\else\addtokens{\filename}{\PP}%
13405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \advance\filenamelength by 1
13415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
13425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
13435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nextsp}
13445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
13455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\pdftexversion < 14
13465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let \startlink \pdfannotlink
13475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
13485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let \startlink \pdfstartlink
13495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
13505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\pdfurl#1{%
13515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \begingroup
13525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \normalturnoffactive\def\@{@}%
13535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \makevalueexpandable
13545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \leavevmode\Red
13555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \startlink attr{/Border [0 0 0]}%
13565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
13575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup}
13585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
13595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
13605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
13615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
13625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\maketoks{%
13635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
13645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\first0\adn0
13655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
13665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
13675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
13685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
13695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifnum0=\countA\else\makelink\fi
13705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifx\first.\let\next=\done\else
13715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \let\next=\maketoks
13725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \addtokens{\toksB}{\the\toksD}
13735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \ifx\first,\addtokens{\toksB}{\space}\fi
13745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
13755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
13765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \next}
13775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\makelink{\addtokens{\toksB}%
13785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
13795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\pdflink#1{%
13805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
13815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \linkcolor #1\endlink}
13825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
13835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else
13845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\pdfmkdest = \gobble
13855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\pdfurl = \gobble
13865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\endlink = \relax
13875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\linkcolor = \relax
13885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\pdfmakeoutlines = \relax
13895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi  % \ifx\pdfoutput
13905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
13915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
13925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{fonts,}
13935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
13945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Change the current font style to #1, remembering it in \curfontstyle.
13955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
13965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% italics, not bold italics.
13975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
13985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setfontstyle#1{%
13995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
14005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \csname ten#1\endcsname  % change the current font
14015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
14025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Select #1 fonts with the current style.
14045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
14055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
14065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rm{\fam=0 \setfontstyle{rm}}
14085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\it{\fam=\itfam \setfontstyle{it}}
14095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sl{\fam=\slfam \setfontstyle{sl}}
14105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
14115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tt{\fam=\ttfam \setfontstyle{tt}}
14125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Texinfo sort of supports the sans serif font style, which plain TeX does not.
14145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% So we set up a \sf.
14155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newfam\sffam
14165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sf{\fam=\sffam \setfontstyle{sf}}
14175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\li = \sf % Sometimes we call it \li, not \sf.
14185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We don't need math for this font style.
14205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttsl{\setfontstyle{ttsl}}
14215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Default leading.
14235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\textleading  \textleading = 13.2pt
14245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set the baselineskip to #1, and the lineskip and strut size
14265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% correspondingly.  There is no deep meaning behind these magic numbers
14275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% used as factors; they just match (closely enough) what Knuth defined.
14285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
14295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lineskipfactor{.08333}
14305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\strutheightpercent{.70833}
14315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\strutdepthpercent {.29167}
14325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
14335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setleading#1{%
14345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \normalbaselineskip = #1\relax
14355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \normallineskip = \lineskipfactor\normalbaselineskip
14365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \normalbaselines
14375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox\strutbox =\hbox{%
14385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vrule width0pt height\strutheightpercent\baselineskip
14395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    depth \strutdepthpercent \baselineskip
14405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
14415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
14425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set the font macro #1 to the font named #2, adding on the
14445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% specified font prefix (normally `cm').
14455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 is the font's design size, #4 is a scale factor
14465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
14475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use cm as the default font prefix.
14495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To specify the font prefix, you must define \fontprefix
14505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% before you read in texinfo.tex.
14515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\fontprefix\undefined
14525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\fontprefix{cm}
14535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi
14545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Support font families that don't use the same naming scheme as CM.
14555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rmshape{r}
14565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rmbshape{bx}               %where the normal face is bold
14575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bfshape{b}
14585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bxshape{bx}
14595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttshape{tt}
14605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttbshape{tt}
14615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttslshape{sltt}
14625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itshape{ti}
14635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itbshape{bxti}
14645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\slshape{sl}
14655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\slbshape{bxsl}
14665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sfshape{ss}
14675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sfbshape{ss}
14685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scshape{csc}
14695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scbshape{csc}
14705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Text fonts (11.2pt, magstep1).
14725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\textnominalsize{11pt}
14735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\edef\mainmagstep{\magstephalf}
14745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textrm\rmshape{10}{\mainmagstep}
14755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\texttt\ttshape{10}{\mainmagstep}
14765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textbf\bfshape{10}{\mainmagstep}
14775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textit\itshape{10}{\mainmagstep}
14785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textsl\slshape{10}{\mainmagstep}
14795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textsf\sfshape{10}{\mainmagstep}
14805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textsc\scshape{10}{\mainmagstep}
14815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\textttsl\ttslshape{10}{\mainmagstep}
14825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\texti=cmmi10 scaled \mainmagstep
14835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\textsy=cmsy10 scaled \mainmagstep
14845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A few fonts for @defun names and args.
14865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\defbf\bfshape{10}{\magstep1}
14875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\deftt\ttshape{10}{\magstep1}
14885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\defttsl\ttslshape{10}{\magstep1}
14895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
14905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
14915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Fonts for indices, footnotes, small examples (9pt).
14925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallnominalsize{9pt}
14935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallrm\rmshape{9}{1000}
14945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smalltt\ttshape{9}{1000}
14955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallbf\bfshape{10}{900}
14965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallit\itshape{9}{1000}
14975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallsl\slshape{9}{1000}
14985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallsf\sfshape{9}{1000}
14995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallsc\scshape{10}{900}
15005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallttsl\ttslshape{10}{900}
15015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\smalli=cmmi9
15025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\smallsy=cmsy9
15035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
15045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Fonts for small examples (8pt).
15055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallernominalsize{8pt}
15065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallerrm\rmshape{8}{1000}
15075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallertt\ttshape{8}{1000}
15085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallerbf\bfshape{10}{800}
15095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallerit\itshape{8}{1000}
15105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallersl\slshape{8}{1000}
15115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallersf\sfshape{8}{1000}
15125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallersc\scshape{10}{800}
15135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\smallerttsl\ttslshape{10}{800}
15145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\smalleri=cmmi8
15155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\smallersy=cmsy8
15165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
15175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Fonts for title page (20.4pt):
15185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\titlenominalsize{20pt}
15195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlerm\rmbshape{12}{\magstep3}
15205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titleit\itbshape{10}{\magstep4}
15215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlesl\slbshape{10}{\magstep4}
15225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlett\ttbshape{12}{\magstep3}
15235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlettsl\ttslshape{10}{\magstep4}
15245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlesf\sfbshape{17}{\magstep1}
15255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\titlebf=\titlerm
15265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\titlesc\scbshape{10}{\magstep4}
15275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\titlei=cmmi12 scaled \magstep3
15285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\titlesy=cmsy10 scaled \magstep4
15295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\authorrm{\secrm}
15305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\authortt{\sectt}
15315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
15325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapter (and unnumbered) fonts (17.28pt).
15335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapnominalsize{17pt}
15345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chaprm\rmbshape{12}{\magstep2}
15355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapit\itbshape{10}{\magstep3}
15365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapsl\slbshape{10}{\magstep3}
15375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chaptt\ttbshape{12}{\magstep2}
15385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapttsl\ttslshape{10}{\magstep3}
15395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapsf\sfbshape{17}{1000}
15405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\chapbf=\chaprm
15415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\chapsc\scbshape{10}{\magstep3}
15425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\chapi=cmmi12 scaled \magstep2
15435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\chapsy=cmsy10 scaled \magstep3
15445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
15455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Section fonts (14.4pt).
15465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secnominalsize{14pt}
15475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secrm\rmbshape{12}{\magstep1}
15485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secit\itbshape{10}{\magstep2}
15495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secsl\slbshape{10}{\magstep2}
15505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\sectt\ttbshape{12}{\magstep1}
15515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secttsl\ttslshape{10}{\magstep2}
15525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secsf\sfbshape{12}{\magstep1}
15535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\secbf\secrm
15545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\secsc\scbshape{10}{\magstep2}
15555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\seci=cmmi12 scaled \magstep1
15565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\secsy=cmsy10 scaled \magstep2
15575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
15585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsection fonts (13.15pt).
15595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ssecnominalsize{13pt}
15605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecrm\rmbshape{12}{\magstephalf}
15615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecit\itbshape{10}{1315}
15625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecsl\slbshape{10}{1315}
15635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssectt\ttbshape{12}{\magstephalf}
15645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecttsl\ttslshape{10}{1315}
15655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecsf\sfbshape{12}{\magstephalf}
15665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\ssecbf\ssecrm
15675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\ssecsc\scbshape{10}{1315}
15685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\sseci=cmmi12 scaled \magstephalf
15695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\ssecsy=cmsy10 scaled 1315
15705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
15715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Reduced fonts for @acro in text (10pt).
15725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\reducednominalsize{10pt}
15735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedrm\rmshape{10}{1000}
15745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedtt\ttshape{10}{1000}
15755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedbf\bfshape{10}{1000}
15765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedit\itshape{10}{1000}
15775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedsl\slshape{10}{1000}
15785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedsf\sfshape{10}{1000}
15795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedsc\scshape{10}{1000}
15805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\reducedttsl\ttslshape{10}{1000}
15815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\reducedi=cmmi10
15825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\reducedsy=cmsy10
15835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
15845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% In order for the font changes to affect most math symbols and letters,
15855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we have to define the \textfont of the standard families.  Since
15865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% texinfo doesn't allow for producing subscripts and superscripts except
15875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% in the main text, we don't bother to reset \scriptfont and
15885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \scriptscriptfont (which would also require loading a lot more fonts).
15895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
15905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\resetmathfonts{%
15915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
15925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
15935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \textfont\ttfam=\tentt \textfont\sffam=\tensf
15945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
15955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
15965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The font-changing commands redefine the meanings of \tenSTYLE, instead
15975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of just \STYLE.  We do this because \STYLE needs to also set the
15985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
15995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \tenSTYLE to set the current font.
16005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
16015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Each font-changing command also sets the names \lsize (one size lower)
16025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and \lllsize (three sizes lower).  These relative commands are used in
16035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the LaTeX logo and acronyms.
16045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
16055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This all needs generalizing, badly.
16065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
16075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\textfonts{%
16085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
16095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
16105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
16115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenttsl=\textttsl
16125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\curfontsize{text}%
16135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\lsize{reduced}\def\lllsize{smaller}%
16145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetmathfonts \setleading{\textleading}}
16155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\titlefonts{%
16165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
16175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
16185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
16195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenttsl=\titlettsl
16205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\curfontsize{title}%
16215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\lsize{chap}\def\lllsize{subsec}%
16225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetmathfonts \setleading{25pt}}
16235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\titlefont#1{{\titlefonts\rm #1}}
16245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapfonts{%
16255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
16265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
16275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
16285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenttsl=\chapttsl
16295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\curfontsize{chap}%
16305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\lsize{sec}\def\lllsize{text}%
16315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetmathfonts \setleading{19pt}}
16325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secfonts{%
16335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
16345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
16355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
16365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenttsl=\secttsl
16375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\curfontsize{sec}%
16385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\lsize{subsec}\def\lllsize{reduced}%
16395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetmathfonts \setleading{16pt}}
16405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsecfonts{%
16415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
16425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
16435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
16445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenttsl=\ssecttsl
16455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\curfontsize{ssec}%
16465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\lsize{text}\def\lllsize{small}%
16475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetmathfonts \setleading{15pt}}
16485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\subsubsecfonts = \subsecfonts
16495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\reducedfonts{%
16505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
16515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
16525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
16535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenttsl=\reducedttsl
16545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\curfontsize{reduced}%
16555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\lsize{small}\def\lllsize{smaller}%
16565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetmathfonts \setleading{10.5pt}}
16575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallfonts{%
16585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
16595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
16605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
16615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenttsl=\smallttsl
16625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\curfontsize{small}%
16635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\lsize{smaller}\def\lllsize{smaller}%
16645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetmathfonts \setleading{10.5pt}}
16655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallerfonts{%
16665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
16675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
16685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
16695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tenttsl=\smallerttsl
16705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\curfontsize{smaller}%
16715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\lsize{smaller}\def\lllsize{smaller}%
16725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetmathfonts \setleading{9.5pt}}
16735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
16745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set the fonts to use with the @small... environments.
16755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\smallexamplefonts = \smallfonts
16765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
16775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
16785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% can fit this many characters:
16795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   8.5x11=86   smallbook=72  a4=90  a5=69
16805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If we use \scriptfonts (8pt), then we can fit this many characters:
16815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   8.5x11=90+  smallbook=80  a4=90+  a5=77
16825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For me, subjectively, the few extra characters that fit aren't worth
16835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the additional smallness of 8pt.  So I'm making the default 9pt.
16845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
16855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% By the way, for comparison, here's what fits with @example (10pt):
16865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   8.5x11=71  smallbook=60  a4=75  a5=58
16875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
16885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% I wish the USA used A4 paper.
16895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% --karl, 24jan03.
16905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
16915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
16925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set up the default fonts, so we can use them for creating boxes.
16935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
16945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\textfonts \rm
16955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
16965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define these so they can be easily changed for other fonts.
16975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\angleleft{$\langle$}
16985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\angleright{$\rangle$}
16995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Count depth in font-changes, for error checks
17015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\fontdepth \fontdepth=0
17025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Fonts for short table of contents.
17045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\shortcontrm\rmshape{12}{1000}
17055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\shortcontbf\bfshape{10}{\magstep1}  % no cmb12
17065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\shortcontsl\slshape{12}{1000}
17075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\shortconttt\ttshape{12}{1000}
17085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% Add scribe-like font environments, plus @l for inline lisp (usually sans
17105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% serif) and @ii for TeX italic
17115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
17135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% unless the following character is such as not to need one.
17145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
17155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    \ptexslash\fi\fi\fi}
17165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
17175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
17185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% like \smartslanted except unconditionally uses \ttsl.
17205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @var is set to this for defun arguments.
17215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
17225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% like \smartslanted except unconditionally use \sl.  We never want
17245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ttsl for book titles, do we?
17255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
17265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\i=\smartitalic
17285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\slanted=\smartslanted
17295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\var=\smartslanted
17305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\dfn=\smartslanted
17315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\emph=\smartitalic
17325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @b, explicit bold.
17345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\b#1{{\bf #1}}
17355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\strong=\b
17365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @sansserif, explicit sans.
17385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sansserif#1{{\sf #1}}
17395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We can't just use \exhyphenpenalty, because that only has effect at
17415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the end of a paragraph.  Restore normal hyphenation at the end of the
17425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% group within which \nohyphenation is presumably called.
17435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
17445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
17455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\restorehyphenation{\hyphenchar\font = `- }
17465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set sfcode to normal for the chars that usually have another value.
17485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Can't use plain's \frenchspacing because it uses the `\x notation, and
17495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% sometimes \x has an active definition that messes things up.
17505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
17515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`@=11
17525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\frenchspacing{%
17535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
17545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
17555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
17565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`@=\other
17575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\t#1{%
17595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\tt \rawbackslash \frenchspacing #1}%
17605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \null
17615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
17625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\samp#1{`\tclose{#1}'\null}
17635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setfont\keyrm\rmshape{8}{1000}
17645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\keysy=cmsy9
17655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
17665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
17675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vbox{\hrule\kern-0.4pt
17685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
17695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \kern-0.4pt\hrule}%
17705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
17715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The old definition, with no lozenge:
17725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
17735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ctrl #1{{\tt \rawbackslash \hat}#1}
17745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @file, @option are the same as @samp.
17765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\file=\samp
17775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\option=\samp
17785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
17795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @code is a modification of @t,
17805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which makes spaces the same size as normal in the surrounding text.
17815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tclose#1{%
17825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
17835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Change normal interword space to be same as for the current font.
17845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \spaceskip = \fontdimen2\font
17855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
17865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Switch to typewriter.
17875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \tt
17885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
17895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % But `\ ' produces the large typewriter interword space.
17905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\ {{\spaceskip = 0pt{} }}%
17915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
17925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Turn off hyphenation.
17935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nohyphenation
17945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
17955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \rawbackslash
17965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \frenchspacing
17975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    #1%
17985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
17995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \null
18005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
18015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
18025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We *must* turn on hyphenation at `-' and `_' in @code.
18035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Otherwise, it is too hard to avoid overfull hboxes
18045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% in the Emacs manual, the Library manual, etc.
18055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
18065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Unfortunately, TeX uses one parameter (\hyphenchar) to control
18075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% both hyphenation at - and hyphenation within words.
18085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We must therefore turn them both off (\tclose does that)
18095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and arrange explicitly to hyphenate at a dash.
18105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%  -- rms.
18115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
18125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\-=\active
18135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\_=\active
18145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
18155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\def\code{\begingroup
18165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \catcode`\-=\active \let-\codedash
18175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \catcode`\_=\active \let_\codeunder
18185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \codex
18195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
18205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
18215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
18225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\realdash{-}
18235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\codedash{-\discretionary{}{}{}}
18245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\codeunder{%
18255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
18265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
18275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % will therefore expand the active definition of _, which is us
18285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % (inside @code that is), therefore an endless loop.
18295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifusingtt{\ifmmode
18305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
18315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project             \else\normalunderscore \fi
18325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project             \discretionary{}{}{}}%
18335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project            {\_}%
18345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
18355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\codex #1{\tclose{#1}\endgroup}
18365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
18375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @kbd is like @code, except that if the argument is just one @key command,
18385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% then @kbd has no effect.
18395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
18405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
18415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   `example' (@kbd uses ttsl only inside of @example and friends),
18425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   or `code' (@kbd uses normal tty font always).
18435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\kbdinputstyle{%
18445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\arg{#1}%
18455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\arg\worddistinct
18465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
18475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifx\arg\wordexample
18485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
18495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifx\arg\wordcode
18505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
18515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
18525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \errhelp = \EMsimple
18535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \errmessage{Unknown @kbdinputstyle option `\arg'}%
18545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi\fi\fi
18555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
18565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\worddistinct{distinct}
18575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\wordexample{example}
18585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\wordcode{code}
18595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
18605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Default is `distinct.'
18615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\kbdinputstyle distinct
18625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
18635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xkey{\key}
18645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
18655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\one\xkey\ifx\threex\three \key{#2}%
18665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else{\tclose{\kbdfont\look}}\fi
18675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else{\tclose{\kbdfont\look}}\fi}
18685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
18695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
18705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\indicateurl=\code
18715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\env=\code
18725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\command=\code
18735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
18745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @uref (abbreviation for `urlref') takes an optional (comma-separated)
18755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% second argument specifying the text to display and an optional third
18765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% arg as text to display instead of (rather than in addition to) the url
18775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% itself.  First (mandatory) arg is the url.  Perhaps eventually put in
18785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% a hypertex \special here.
18795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
18805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\uref#1{\douref #1,,,\finish}
18815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\douref#1,#2,#3,#4\finish{\begingroup
18825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \unsepspaces
18835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \pdfurl{#1}%
18845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0 = \hbox{\ignorespaces #3}%
18855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifdim\wd0 > 0pt
18865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \unhbox0 % third arg given, show only that
18875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
18885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \setbox0 = \hbox{\ignorespaces #2}%
18895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifdim\wd0 > 0pt
18905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifpdf
18915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \unhbox0             % PDF: 2nd arg given, show only it
18925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \else
18935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
18945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
18955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
18965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \code{#1}% only url given, so show it
18975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
18985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
18995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endlink
19005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup}
19015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @url synonym for @uref, since that's how everyone uses it.
19035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
19045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\url=\uref
19055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% rms does not like angle brackets --karl, 17may97.
19075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% So now @email is just like @uref, unless we are pdf.
19085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
19095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\email#1{\angleleft{\tt #1}\angleright}
19105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifpdf
19115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\email#1{\doemail#1,,\finish}
19125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\doemail#1,#2,#3\finish{\begingroup
19135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \unsepspaces
19145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \pdfurl{mailto:#1}%
19155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \setbox0 = \hbox{\ignorespaces #2}%
19165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
19175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endlink
19185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup}
19195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\else
19205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\email=\uref
19215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi
19225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Check if we are currently using a typewriter font.  Since all the
19245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Computer Modern typewriter fonts have zero interword stretch (and
19255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% shrink), and it is reasonable to expect all typewriter fonts to have
19265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% this property, we can check that font parameter.
19275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
19285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
19295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
19315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
19325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
19335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dmn#1{\thinspace #1}
19345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
19365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @l was never documented to mean ``switch to the Lisp font'',
19385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and it is not used as such in any manual I can find.  We need it for
19395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Polish suppressed-l.  --karl, 22sep96.
19405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%\def\l#1{{\li #1}\null}
19415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Explicit font changes: @r, @sc, undocumented @ii.
19435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\r#1{{\rm #1}}              % roman font
19445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sc#1{{\smallcaps#1}}       % smallcaps font
19455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ii#1{{\it #1}}             % italic font
19465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @acronym for "FBI", "NATO", and the like.
19485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We print this one point size smaller, since it's intended for
19495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% all-uppercase.
19505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
19515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\acronym#1{\doacronym #1,,\finish}
19525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doacronym#1,#2,#3\finish{%
19535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\selectfonts\lsize #1}%
19545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#2}%
19555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\empty \else
19565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \space ({\unsepspaces \ignorespaces \temp \unskip})%
19575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
19585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
19595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @abbr for "Comput. J." and the like.
19615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% No font change, but don't do end-of-sentence spacing.
19625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
19635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\abbr#1{\doabbr #1,,\finish}
19645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doabbr#1,#2,#3\finish{%
19655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\frenchspacing #1}%
19665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#2}%
19675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\empty \else
19685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \space ({\unsepspaces \ignorespaces \temp \unskip})%
19695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
19705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
19715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
19735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
19745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pounds{{\it\$}}
19755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
19765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @euro{} comes from a separate font, depending on the current style.
19775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We use the free feym* fonts from the eurosym package by Henrik
19785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Theiling, which support regular, slanted, bold and bold slanted (and
19795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% "outlined" (blackboard board, sort of) versions, which we don't need).
19805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
19815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
19825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Although only regular is the truly official Euro symbol, we ignore
19835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that.  The Euro is designed to be slightly taller than the regular
19845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% font height.
19855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
19865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% feymr - regular
19875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% feymo - slanted
19885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% feybr - bold
19895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% feybo - bold slanted
19905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
19915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% There is no good (free) typewriter version, to my knowledge.
19925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
19935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Hmm.
19945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
19955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Also doesn't work in math.  Do we need to do math with euro symbols?
19965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Hope not.
19975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
19985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
19995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\euro{{\eurofont e}}
20005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\eurofont{%
20015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We set the font at each command, rather than predefining it in
20025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \textfonts and the other font-switching commands, so that
20035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % installations which never need the symbold don't have to have the
20045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % font installed.
20055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % 
20065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % There is only one designed size (nominal 10pt), so we always scale
20075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % that to the current nominal size.
20085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % 
20095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % By the way, simply using "at 1em" works for cmr10 and the like, but
20105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % does not work for cmbx10 and other extended/shrunken fonts.
20115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % 
20125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
20135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
20145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\curfontstyle\bfstylename 
20155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % bold:
20165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
20175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else 
20185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % regular:
20195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
20205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
20215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \thiseurofont
20225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
20235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @registeredsymbol - R in a circle.  The font for the R should really
20255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% be smaller yet, but lllsize is the best we can do for now.
20265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Adapted from the plain.tex definition of \copyright.
20275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
20285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\registeredsymbol{%
20295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
20305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project               \hfil\crcr\Orb}}%
20315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }$%
20325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
20335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Laurent Siebenmann reports \Orb undefined with:
20355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
20365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% so we'll define it if necessary.
20375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
20385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\Orb\undefined
20395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Orb{\mathhexbox20D}
20405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi
20415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{page headings,}
20445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\titlepagetopglue \titlepagetopglue = 1.5in
20465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
20475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% First the title page.  Must do @settitle before @titlepage.
20495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifseenauthor
20505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\iffinishedtitlepage
20515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do an implicit @contents or @shortcontents after @end titlepage if the
20535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
20545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
20555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifsetcontentsaftertitlepage
20565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
20575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifsetshortcontentsaftertitlepage
20585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
20595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
20615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \endgroup\page\hbox{}\page}
20625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\titlepage{%
20645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Open one extra group, as we want to close it in the middle of \Etitlepage.
20655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \begingroup
20665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \parindent=0pt \textfonts
20675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Leave some space at the very top of the page.
20685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vglue\titlepagetopglue
20695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % No rule at page bottom unless we print one at the top with @title.
20705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \finishedtitlepagetrue
20715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
20725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Most title ``pages'' are actually two pages long, with space
20735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % at the top of the second.  We don't want the ragged left on the second.
20745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\oldpage = \page
20755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\page{%
20765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \iffinishedtitlepage\else
20775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	 \finishtitlepage
20785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
20795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\page = \oldpage
20805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \page
20815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \null
20825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }%
20835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
20845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
20855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Etitlepage{%
20865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \iffinishedtitlepage\else
20875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\finishtitlepage
20885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
20895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % It is important to do the page break before ending the group,
20905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % because the headline and footline are only empty inside the group.
20915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If we use the new definition of \page, we always get a blank page
20925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % after the title page, which we certainly don't want.
20935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \oldpage
20945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup
20955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
20965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Need this before the \...aftertitlepage checks so that if they are
20975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % in effect the toc pages will come out with page numbers.
20985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \HEADINGSon
20995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
21005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % If they want short, they certainly want long too.
21015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifsetshortcontentsaftertitlepage
21025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \shortcontents
21035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \contents
21045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\let\shortcontents = \relax
21055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\let\contents = \relax
21065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
21075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
21085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifsetcontentsaftertitlepage
21095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \contents
21105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\let\contents = \relax
21115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\let\shortcontents = \relax
21125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
21135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
21145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finishtitlepage{%
21165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vskip4pt \hrule height 2pt width \hsize
21175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vskip\titlepagebottomglue
21185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \finishedtitlepagetrue
21195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
21205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Macros to be used within @titlepage:
21225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\subtitlerm=\tenrm
21245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
21255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
21275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project		\let\tt=\authortt}
21285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\title{%
21305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \checkenv\titlepage
21315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \leftline{\titlefonts\rm #1}
21325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % print a rule at the page bottom also.
21335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \finishedtitlepagefalse
21345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
21355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
21365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\subtitle{%
21385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \checkenv\titlepage
21395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\subtitlefont \rightline{#1}}%
21405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
21415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @author should come last, but may come many times.
21435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It can also be used inside @quotation.
21445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
21455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\author{%
21465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{\quotation}%
21475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\thisenv\temp
21485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\quotationauthor{#1}% printed in \Equotation.
21495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
21505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \checkenv\titlepage
21515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
21525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    {\authorfont \leftline{#1}}%
21535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
21545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
21555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Set up page headings and footings.
21585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\thispage=\folio
21605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\evenheadline    % headline on even pages
21625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\oddheadline     % headline on odd pages
21635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\evenfootline    % footline on even pages
21645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\oddfootline     % footline on odd pages
21655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Now make TeX use those variables
21675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
21685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                            \else \the\evenheadline \fi}}
21695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
21705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                            \else \the\evenfootline \fi}\HEADINGShook}
21715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\HEADINGShook=\relax
21725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Commands to set those variables.
21745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For example, this is what  @headings on  does
21755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @evenheading @thistitle|@thispage|@thischapter
21765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @oddheading @thischapter|@thispage|@thistitle
21775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @evenfooting @thisfile||
21785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @oddfooting ||@thisfile
21795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenheading{\parsearg\evenheadingxxx}
21825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
21835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
21845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
21855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddheading{\parsearg\oddheadingxxx}
21875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
21885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
21895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
21905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
21925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenfooting{\parsearg\evenfootingxxx}
21945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
21955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
21965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
21975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
21985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddfooting{\parsearg\oddfootingxxx}
21995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
22005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
22015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
22025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
22035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Leave some space for the footline.  Hopefully ok to assume
22045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % @evenfooting will not be used by itself.
22055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\pageheight by -\baselineskip
22065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\vsize by -\baselineskip
22075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
22085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
22105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings double      turns headings on for double-sided printing.
22135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings single      turns headings on for single-sided printing.
22145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings off         turns them off.
22155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings on          same as @headings double, retained for compatibility.
22165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings after       turns on double-sided headings after this page.
22175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings doubleafter turns on double-sided headings after this page.
22185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headings singleafter turns on single-sided headings after this page.
22195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% By default, they are off at the start of a document,
22205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and turned `on' after @end titlepage.
22215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\headings #1 {\csname HEADINGS#1\endcsname}
22235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSoff{%
22255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\hfil} \global\evenfootline={\hfil}
22265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
22275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\HEADINGSoff
22285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% When we turn headings on, set the page number to 1.
22295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For double-sided printing, put current file name in lower left corner,
22305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% chapter name on inside top of right hand pages, document
22315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% title on inside top of left hand pages, and page numbers on outside top
22325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% edge of all pages.
22335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSdouble{%
22345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\pageno=1
22355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\hfil}
22365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddfootline={\hfil}
22375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\line{\folio\hfil\thistitle}}
22385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}}
22395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chapoddpage
22405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
22415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\contentsalignmacro = \chappager
22425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For single-sided printing, chapter title goes across top left of page,
22445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% page number on top right.
22455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSsingle{%
22465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\pageno=1
22475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\hfil}
22485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddfootline={\hfil}
22495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\line{\thischapter\hfil\folio}}
22505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}}
22515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chappager
22525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
22535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSon{\HEADINGSdouble}
22545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
22565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\HEADINGSdoubleafter=\HEADINGSafter
22575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSdoublex{%
22585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\hfil}
22595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddfootline={\hfil}
22605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\line{\folio\hfil\thistitle}}
22615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}}
22625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chapoddpage
22635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
22645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
22665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\HEADINGSsinglex{%
22675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenfootline={\hfil}
22685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddfootline={\hfil}
22695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\evenheadline={\line{\thischapter\hfil\folio}}
22705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}}
22715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chappager
22725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
22735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subroutines used in generating headings
22755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This produces Day Month Year style of output.
22765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Only define if not already defined, in case a txi-??.tex file has set
22775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% up a different format (e.g., txi-cs.tex does this).
22785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\today\undefined
22795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\today{%
22805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \number\day\space
22815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifcase\month
22825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
22835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
22845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
22855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
22865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \space\number\year}
22875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi
22885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @settitle line...  specifies the title of the document, for headings.
22905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It generates no output of its own.
22915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\thistitle{\putwordNoTitle}
22925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\settitle{\parsearg{\gdef\thistitle}}
22935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{tables,}
22965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Tables -- @table, @ftable, @vtable, @item(x).
22975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
22985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% default indentation of table text
22995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\tableindent \tableindent=.8in
23005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% default indentation of @itemize and @enumerate text
23015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\itemindent  \itemindent=.3in
23025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% margin between end of table item and start of table text.
23035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\itemmargin  \itemmargin=.1in
23045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
23055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% used internally for \itemindent minus \itemmargin
23065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\itemmax
23075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
23085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
23095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% these defs.
23105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% They also define \itemindex
23115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to index the item name in whatever manner is desired (perhaps none).
23125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
23135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifitemxneedsnegativevskip
23145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
23155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
23165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
23175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\internalBitem{\smallbreak \parsearg\itemzzz}
23185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\internalBitemx{\itemxpar \parsearg\itemzzz}
23195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
23205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itemzzz #1{\begingroup %
23215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\hsize by -\rightskip
23225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\hsize by -\tableindent
23235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0=\hbox{\itemindicate{#1}}%
23245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \itemindex{#1}%
23255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nobreak % This prevents a break before @itemx.
23265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
23275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % If the item text does not fit in the space we have, put it on a line
23285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % by itself, and do not allow a page break either before or after that
23295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % line.  We do not start a paragraph here because then if the next
23305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % command is, e.g., @kindex, the whatsit would get put into the
23315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % horizontal list on a line by itself, resulting in extra blank space.
23325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifdim \wd0>\itemmax
23335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
23345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Make this a paragraph so we get the \parskip glue and wrapping,
23355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % but leave it ragged-right.
23365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \begingroup
23375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \advance\leftskip by-\tableindent
23385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \advance\hsize by\tableindent
23395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \advance\rightskip by0pt plus1fil
23405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \leavevmode\unhbox0\par
23415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup
23425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
23435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % We're going to be starting a paragraph, but we don't want the
23445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \parskip glue -- logically it's part of the @item we just started.
23455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nobreak \vskip-\parskip
23465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
23475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Stop a page break at the \parskip glue coming up.  However, if
23485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % what follows is an environment such as @example, there will be no
23495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \parskip glue; then the negative vskip we just inserted would
23505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % cause the example and the item to crash together.  So we use this
23515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
23525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \parskip glue after all.  Section titles are handled this way also.
23535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % 
23545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \penalty 10001
23555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup
23565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \itemxneedsnegativevskipfalse
23575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
23585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % The item text fits into the space.  Start a paragraph, so that the
23595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % following text (if any) will end up on the same line.
23605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \noindent
23615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Do this with kerns and \unhbox so that if there is a footnote in
23625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % the item text, it can migrate to the main vertical list and
23635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % eventually be printed.
23645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nobreak\kern-\tableindent
23655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
23665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \unhbox0
23675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nobreak\kern\dimen0
23685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup
23695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \itemxneedsnegativevskiptrue
23705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
23715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
23725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
23735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\item{\errmessage{@item while not in a list environment}}
23745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itemx{\errmessage{@itemx while not in a list environment}}
23755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
23765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @table, @ftable, @vtable.
23775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\table{%
23785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\itemindex\gobble
23795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tablecheck{table}%
23805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
23815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\ftable{%
23825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
23835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tablecheck{ftable}%
23845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
23855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\vtable{%
23865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
23875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tablecheck{vtable}%
23885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
23895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tablecheck#1{%
23905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum \the\catcode`\^^M=\active
23915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup
23925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \errmessage{This command won't work in this context; perhaps the problem is
23935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      that we are \inenvironment\thisenv}%
23945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\next{\doignore{#1}}%
23955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
23965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\next\tablex
23975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
23985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \next
23995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
24005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tablex#1{%
24015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\itemindicate{#1}%
24025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parsearg\tabley
24035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
24045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tabley#1{%
24055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
24065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \makevalueexpandable
24075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \edef\temp{\noexpand\tablez #1\space\space\space}%
24085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter
24095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }\temp \endtablez
24105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
24115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tablez #1 #2 #3 #4\endtablez{%
24125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \aboveenvbreak
24135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
24145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum 0#2>0 \tableindent=#2\mil \fi
24155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
24165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \itemmax=\tableindent
24175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance \itemmax by -\itemmargin
24185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance \leftskip by \tableindent
24195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \exdentamount=\tableindent
24205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parindent = 0pt
24215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip = \smallskipamount
24225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifdim \parskip=0pt \parskip=2pt \fi
24235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\item = \internalBitem
24245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\itemx = \internalBitemx
24255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
24265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Etable{\endgraf\afterenvbreak}
24275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eftable\Etable
24285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Evtable\Etable
24295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eitemize\Etable
24305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eenumerate\Etable
24315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
24325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is the counter used by @enumerate, which is really @itemize
24335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
24345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount \itemno
24355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
24365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\itemize{\parsearg\doitemize}
24375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
24385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doitemize#1{%
24395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \aboveenvbreak
24405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \itemmax=\itemindent
24415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\itemmax by -\itemmargin
24425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\leftskip by \itemindent
24435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \exdentamount=\itemindent
24445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parindent=0pt
24455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip=\smallskipamount
24465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifdim\parskip=0pt \parskip=2pt \fi
24475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\itemcontents{#1}%
24485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % @itemize with no arg is equivalent to @itemize @bullet.
24495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
24505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\item=\itemizeitem
24515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
24525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
24535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Definition of @item while inside @itemize and @enumerate.
24545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
24555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\itemizeitem{%
24565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\itemno by 1  % for enumerations
24575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\let\par=\endgraf \smallbreak}% reasonable place to break
24585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
24595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % If the document has an @itemize directly after a section title, a
24605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % \nobreak will be last on the list, and \sectionheading will have
24615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % done a \vskip-\parskip.  In that case, we don't want to zero
24625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % parskip, or the item text will crash with the heading.  On the
24635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % other hand, when there is normal text preceding the item (as there
24645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % usually is), we do want to zero parskip, or there would be too much
24655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % space.  In that case, we won't have a \nobreak before.  At least
24665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   % that's the theory.
24675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \ifnum\lastpenalty<10000 \parskip=0in \fi
24685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \noindent
24695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
24705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \vadjust{\penalty 1200}}% not good to break after first line of item.
24715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \flushcr
24725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
24735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
24745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \splitoff TOKENS\endmark defines \first to be the first token in
24755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% TOKENS, and \rest to be the remainder.
24765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
24775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
24785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
24795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Allow an optional argument of an uppercase letter, lowercase letter,
24805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% or number, to specify the first label in the enumerated list.  No
24815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% argument is the same as `1'.
24825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
24835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
24845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\enumeratey #1 #2\endenumeratey{%
24855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % If we were given no argument, pretend we were given `1'.
24865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\thearg{#1}%
24875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\thearg\empty \def\thearg{1}\fi
24885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
24895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Detect if the argument is a single token.  If so, it might be a
24905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % letter.  Otherwise, the only valid thing it can be is a number.
24915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % (We will always have one token, because of the test we just made.
24925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % This is a good thing, since \splitoff doesn't work given nothing at
24935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % all -- the first parameter is undelimited.)
24945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\splitoff\thearg\endmark
24955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\rest\empty
24965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Only one token in the argument.  It could still be anything.
24975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % A ``lowercase letter'' is one whose \lccode is nonzero.
24985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
24995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %   not equal to itself.
25005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Otherwise, we assume it's a number.
25015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
25025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % We need the \relax at the end of the \ifnum lines to stop TeX from
25035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % continuing to look for a <number>.
25045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
25055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum\lccode\expandafter`\thearg=0\relax
25065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \numericenumerate % a number (we hope)
25075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
25085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % It's a letter.
25095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
25105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \lowercaseenumerate % lowercase letter
25115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \else
25125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \uppercaseenumerate % uppercase letter
25135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
25145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
25155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
25165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Multiple tokens in the argument.  We hope it's a number.
25175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \numericenumerate
25185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
25195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
25205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% An @enumerate whose labels are integers.  The starting integer is
25225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% given in \thearg.
25235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
25245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numericenumerate{%
25255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \itemno = \thearg
25265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \startenumeration{\the\itemno}%
25275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
25285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The starting (lowercase) letter is in \thearg.
25305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lowercaseenumerate{%
25315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \itemno = \expandafter`\thearg
25325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \startenumeration{%
25335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Be sure we're not beyond the end of the alphabet.
25345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum\itemno=0
25355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \errmessage{No more lowercase letters in @enumerate; get a bigger
25365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                  alphabet}%
25375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
25385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \char\lccode\itemno
25395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
25405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
25415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The starting (uppercase) letter is in \thearg.
25435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\uppercaseenumerate{%
25445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \itemno = \expandafter`\thearg
25455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \startenumeration{%
25465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Be sure we're not beyond the end of the alphabet.
25475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum\itemno=0
25485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \errmessage{No more uppercase letters in @enumerate; get a bigger
25495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                  alphabet}
25505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
25515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \char\uccode\itemno
25525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
25535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
25545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Call \doitemize, adding a period to the first argument and supplying the
25565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% common last two arguments.  Also subtract one from the initial value in
25575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \itemno, since @item increments \itemno.
25585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
25595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startenumeration#1{%
25605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\itemno by -1
25615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \doitemize{#1.}\flushcr
25625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
25635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
25655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to @enumerate.
25665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
25675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\alphaenumerate{\enumerate{a}}
25685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\capsenumerate{\enumerate{A}}
25695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ealphaenumerate{\Eenumerate}
25705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ecapsenumerate{\Eenumerate}
25715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitable macros
25745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Amy Hendrickson, 8/18/94, 3/6/96
25755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
25765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitable ... @end multitable will make as many columns as desired.
25775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Contents of each column will wrap at width given in preamble.  Width
25785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% can be specified either with sample text given in a template line,
25795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% or in percent of \hsize, the current width of text on page.
25805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Table can continue over pages but will only break between lines.
25825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To make preamble:
25845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
25855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Either define widths of columns in terms of percent of \hsize:
25865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @multitable @columnfractions .25 .3 .45
25875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @item ...
25885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
25895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   Numbers following @columnfractions are the percent of the total
25905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   current hsize to be used for each column. You may use as many
25915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   columns as desired.
25925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Or use a template:
25955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
25965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @item ...
25975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   using the widest term desired in each column.
25985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
25995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Each new table line starts with @item, each subsequent new column
26005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% starts with @tab. Empty columns may be produced by supplying @tab's
26015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% with nothing between them for as many times as empty columns are needed,
26025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ie, @tab@tab@tab will produce two empty columns.
26035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
26045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @item, @tab do not need to be on their own lines, but it will not hurt
26055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% if they are.
26065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
26075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sample multitable:
26085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
26095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
26105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @item first col stuff @tab second col stuff @tab third col
26115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @item
26125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   first col stuff
26135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @tab
26145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   second col stuff
26155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @tab
26165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   third col
26175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @item first col stuff @tab second col stuff
26185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @tab Many paragraphs of text may be used in any column.
26195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
26205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%         They will wrap at the width determined by the template.
26215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @item@tab@tab This will be in third column.
26225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   @end multitable
26235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
26245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Default dimensions may be reset by user.
26255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitableparskip is vertical space between paragraphs in table.
26265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitableparindent is paragraph indent in table.
26275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitablecolmargin is horizontal space to be left between columns.
26285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitablelinespace is space to leave between table items, baseline
26295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%                                                            to baseline.
26305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   0pt means it depends on current normal line spacing.
26315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
26325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\multitableparskip
26335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\multitableparindent
26345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\multitablecolspace
26355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\multitablelinespace
26365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\multitableparskip=0pt
26375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\multitableparindent=6pt
26385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\multitablecolspace=12pt
26395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\multitablelinespace=0pt
26405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
26415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Macros used to set up halign preamble:
26425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
26435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\endsetuptable\relax
26445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xendsetuptable{\endsetuptable}
26455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\columnfractions\relax
26465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xcolumnfractions{\columnfractions}
26475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifsetpercent
26485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
26495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the @columnfraction, usually a decimal number like .5, but might
26505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% be just 1.  We just use it, whatever it is.
26515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
26525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pickupwholefraction#1 {%
26535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\colcount by 1
26545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
26555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setuptable
26565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
26575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
26585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\colcount
26595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setuptable#1{%
26605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\firstarg{#1}%
26615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\firstarg\xendsetuptable
26625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\go = \relax
26635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
26645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\firstarg\xcolumnfractions
26655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \global\setpercenttrue
26665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
26675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifsetpercent
26685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \let\go\pickupwholefraction
26695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \else
26705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \global\advance\colcount by 1
26715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
26725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                   % separator; typically that is always in the input, anyway.
26735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
26745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
26755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
26765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\go\pickupwholefraction
26775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Put the argument back for the \pickupwholefraction call, so
26785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % we'll always have a period there to be parsed.
26795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\go{\pickupwholefraction#1}%
26805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
26815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\go = \setuptable
26825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi%
26835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
26845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \go
26855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
26865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
26875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% multitable-only commands.
26885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
26895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @headitem starts a heading row, which we typeset in bold.
26905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Assignments have to be global since we are inside the implicit group
26915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of an alignment entry.  Note that \everycr resets \everytab.
26925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
26935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
26945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A \tab used to include \hskip1sp.  But then the space in a template
26955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% line is not enough.  That is bad.  So let's go back to just `&' until
26965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we encounter the problem it was intended to solve again.
26975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%					--karl, nathan@acm.org, 20apr99.
26985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tab{\checkenv\multitable &\the\everytab}%
26995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
27005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @multitable ... @end multitable definitions:
27015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
27025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\everytab  % insert after every tab.
27035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
27045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\multitable{%
27055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vskip\parskip
27065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \startsavinginserts
27075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
27085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % @item within a multitable starts a normal row.
27095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We use \def instead of \let so that if one of the multitable entries
27105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
27115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \endtemplate) expanding \doitemize.
27125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\item{\crcr}%
27135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
27145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tolerance=9500
27155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hbadness=9500
27165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setmultitablespacing
27175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip=\multitableparskip
27185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parindent=\multitableparindent
27195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \overfullrule=0pt
27205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\colcount=0
27215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
27225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \everycr = {%
27235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \noalign{%
27245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \global\everytab={}%
27255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \global\colcount=0 % Reset the column counter.
27265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Check for saved footnotes, etc.
27275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \checkinserts
27285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Keeps underfull box messages off when table breaks over pages.
27295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %\filbreak
27305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	% Maybe so, but it also creates really weird page breaks when the
27315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	% table breaks over pages. Wouldn't \vfil be better?  Wait until the
27325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	% problem manifests itself, so it can be fixed for real --karl.
27335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }%
27345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
27355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
27365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parsearg\domultitable
27375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
27385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\domultitable#1{%
27395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % To parse everything between @multitable and @item:
27405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setuptable#1 \endsetuptable
27415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
27425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % This preamble sets up a generic column definition, which will
27435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % be used as many times as user calls for columns.
27445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \vtop will set a single line and will also let text wrap and
27455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % continue for many paragraphs if desired.
27465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \halign\bgroup &%
27475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\advance\colcount by 1
27485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \multistrut
27495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vtop{%
27505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Use the current \colcount to find the correct column width:
27515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \hsize=\expandafter\csname col\the\colcount\endcsname
27525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
27535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % In order to keep entries from bumping into each other
27545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % we will add a \leftskip of \multitablecolspace to all columns after
27555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % the first one.
27565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
27575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % If a template has been used, we will add \multitablecolspace
27585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % to the width of each template entry.
27595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
27605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % If the user has set preamble in terms of percent of \hsize we will
27615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % use that dimension as the width of the column, and the \leftskip
27625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % will keep entries from bumping into each other.  Table will start at
27635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % left margin and final column will justify at right margin.
27645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
27655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Make sure we don't inherit \rightskip from the outer environment.
27665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \rightskip=0pt
27675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifnum\colcount=1
27685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	% The first column will be indented with the surrounding text.
27695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\advance\hsize by\leftskip
27705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \else
27715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\ifsetpercent \else
27725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  % If user has not set preamble in terms of percent of \hsize
27735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  % we will advance \hsize by \multitablecolspace.
27745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \advance\hsize by \multitablecolspace
27755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\fi
27765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       % In either case we will make \leftskip=\multitablecolspace:
27775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \leftskip=\multitablecolspace
27785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
27795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Ignoring space at the beginning and end avoids an occasional spurious
27805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % blank line, when TeX decides to break the line at the space before the
27815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % box from the multistrut, so the strut ends up on a line by itself.
27825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % For example:
27835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % @multitable @columnfractions .11 .89
27845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % @item @code{#}
27855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % @tab Legal holiday which is valid in major parts of the whole country.
27865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Is automatically provided with highlighting sequences respectively
27875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % marking characters.
27885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \noindent\ignorespaces##\unskip\multistrut
27895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }\cr
27905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
27915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Emultitable{%
27925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \crcr
27935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \egroup % end the \halign
27945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\setpercentfalse
27955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
27965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
27975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setmultitablespacing{%
27985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\multistrut{\strut}% just use the standard line spacing
27995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
28005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Compute \multitablelinespace (if not defined by user) for use in
28015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \multitableparskip calculation.  We used define \multistrut based on
28025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % this, but (ironically) that caused the spacing to be off.
28035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
28045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifdim\multitablelinespace=0pt
28055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
28065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\advance\multitablelinespace by-\ht0
28075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi
28085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% Test to see if parskip is larger than space between lines of
28095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%% table. If not, do nothing.
28105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%        If so, set to same dimension as multitablelinespace.
28115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifdim\multitableparskip>\multitablelinespace
28125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\multitableparskip=\multitablelinespace
28135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
28145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                                      %% than skip between lines in the table.
28155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi%
28165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifdim\multitableparskip=0pt
28175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\multitableparskip=\multitablelinespace
28185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
28195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                                      %% than skip between lines in the table.
28205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi}
28215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
28225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
28235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{conditionals,}
28245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
28255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
28265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @ifnotxml always succeed.  They currently do nothing; we don't
28275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% attempt to check whether the conditionals are properly nested.  But we
28285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% have to remember that they are conditionals, so that @end doesn't
28295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% attempt to close an environment group.
28305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
28315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makecond#1{%
28325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\let\csname #1\endcsname = \relax
28335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\let\csname iscond.#1\endcsname = 1
28345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
28355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{iftex}
28365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnotdocbook}
28375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnothtml}
28385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnotinfo}
28395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnotplaintext}
28405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifnotxml}
28415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
28425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Ignore @ignore, @ifhtml, @ifinfo, and the like.
28435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
28445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\direntry{\doignore{direntry}}
28455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\documentdescription{\doignore{documentdescription}}
28465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\docbook{\doignore{docbook}}
28475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\html{\doignore{html}}
28485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifdocbook{\doignore{ifdocbook}}
28495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifhtml{\doignore{ifhtml}}
28505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifinfo{\doignore{ifinfo}}
28515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifnottex{\doignore{ifnottex}}
28525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifplaintext{\doignore{ifplaintext}}
28535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifxml{\doignore{ifxml}}
28545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ignore{\doignore{ignore}}
28555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\menu{\doignore{menu}}
28565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xml{\doignore{xml}}
28575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
28585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Ignore text until a line `@end #1', keeping track of nested conditionals.
28595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
28605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A count to remember the depth of nesting.
28615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\doignorecount
28625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
28635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doignore#1{\begingroup
28645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Scan in ``verbatim'' mode:
28655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\@ = \other
28665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\{ = \other
28675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\} = \other
28685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
28695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Make sure that spaces turn into tokens that match what \doignoretext wants.
28705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \spaceisspace
28715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
28725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Count number of #1's that we've seen.
28735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \doignorecount = 0
28745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
28755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Swallow text until we reach the matching `@end #1'.
28765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dodoignore{#1}%
28775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
28785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
28795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
28805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \obeylines %
28815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
28825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\dodoignore#1{%
28835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % #1 contains the command name as a string, e.g., `ifinfo'.
28845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
28855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Define a command to find the next `@end #1', which must be on a line
28865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % by itself.
28875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}%
28885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % And this command to find another #1 command, at the beginning of a
28895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % line.  (Otherwise, we would consider a line `@c @ifset', for
28905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % example, to count as an @ifset for nesting.)
28915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
28925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
28935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % And now expand that command.
28945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \obeylines %
28955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \doignoretext ^^M%
28965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
28975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
28985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
28995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doignoreyyy#1{%
29005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#1}%
29015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\empty			% Nothing found.
29025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\next\doignoretextzzz
29035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else					% Found a nested condition, ...
29045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\doignorecount by 1
29055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\next\doignoretextyyy		% ..., look for another.
29065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If we're here, #1 ends with ^^M\ifinfo (for example).
29075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
29085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \next #1% the token \_STOP_ is present just after this macro.
29095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
29105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
29115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We have to swallow the remaining "\_STOP_".
29125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
29135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doignoretextzzz#1{%
29145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\doignorecount = 0	% We have just found the outermost @end.
29155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\next\enddoignore
29165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else				% Still inside a nested condition.
29175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\doignorecount by -1
29185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\next\doignoretext      % Look for the next @end.
29195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
29205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \next
29215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
29225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
29235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Finish off ignored text.
29245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\enddoignore{\endgroup\ignorespaces}
29255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
29265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
29275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @set VAR sets the variable VAR to an empty value.
29285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
29295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
29305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Since we want to separate VAR from REST-OF-LINE (which might be
29315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% empty), we can't just use \parsearg; we have to insert a space of our
29325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% own to delimit the rest of the line, and then take it out again if we
29335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% didn't need it.
29345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We rely on the fact that \parsearg sets \catcode`\ =10.
29355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
29365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\set{\setyyy#1 \endsetyyy}
29375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setyyy#1 #2\endsetyyy{%
29385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
29395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \makevalueexpandable
29405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\temp{#2}%
29415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \edef\next{\gdef\makecsname{SET#1}}%
29425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\temp\empty
29435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \next{}%
29445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
29455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \setzzz#2\endsetzzz
29465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
29475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
29485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
29495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Remove the trailing space \setxxx inserted.
29505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setzzz#1 \endsetzzz{\next{#1}}
29515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
29525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @clear VAR clears (i.e., unsets) the variable VAR.
29535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
29545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\clear{%
29555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
29565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \makevalueexpandable
29575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\expandafter\let\csname SET#1\endcsname=\relax
29585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
29595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
29605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
29615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @value{foo} gets the text saved in variable foo.
29625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\value{\begingroup\makevalueexpandable\valuexxx}
29635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\valuexxx#1{\expandablevalue{#1}\endgroup}
29645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
29655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\- = \active \catcode`\_ = \active
29665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
29675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\makevalueexpandable{%
29685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\value = \expandablevalue
29695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % We don't want these characters active, ...
29705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \catcode`\-=\other \catcode`\_=\other
29715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % ..., but we might end up with active ones in the argument if
29725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % we're called from @code, as @code{@value{foo-bar_}}, though.
29735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % So \let them to their normal equivalents.
29745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let-\realdash \let_\normalunderscore
29755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
29765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
29775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
29785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We have this subroutine so that we can handle at least some @value's
29795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% properly in indexes (we call \makevalueexpandable in \indexdummies).
29805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The command has to be fully expandable (if the variable is set), since
29815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the result winds up in the index file.  This means that if the
29825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% variable's value contains other Texinfo commands, it's almost certain
29835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% it will fail (although perhaps we could fix that with sufficient work
29845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to do a one-level expansion on the result, instead of complete).
29855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
29865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\expandablevalue#1{%
29875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\ifx\csname SET#1\endcsname\relax
29885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    {[No value for ``#1'']}%
29895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \message{Variable `#1', used in @value, is not set.}%
29905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
29915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \csname SET#1\endcsname
29925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
29935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
29945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
29955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
29965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% with @set.
29975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
29985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To get special treatment of `@end ifset,' call \makeond and the redefine.
29995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
30005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifset}
30015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
30025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doifset#1#2{%
30035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
30045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \makevalueexpandable
30055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\next=\empty
30065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\ifx\csname SET#2\endcsname\relax
30075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      #1% If not set, redefine \next.
30085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
30095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter
30105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }\next
30115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
30125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifsetfail{\doignore{ifset}}
30135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
30155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% defined with @set, or has been undefined with @clear.
30165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
30175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The `\else' inside the `\doifset' parameter is a trick to reuse the
30185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% above code: if the variable is not set, do nothing, if it is set,
30195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% then redefine \next to \ifclearfail.
30205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
30215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makecond{ifclear}
30225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
30235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifclearfail{\doignore{ifclear}}
30245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @dircategory CATEGORY  -- specify a category of the dir file
30265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which this file should belong to.  Ignore this in TeX.
30275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\dircategory=\comment
30285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defininfoenclose.
30305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\definfoenclose=\comment
30315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{indexing,}
30345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Index generation facilities
30355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define \newwrite to be identical to plain tex's \newwrite
30375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% except not \outer, so it can be used within macros and \if's.
30385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\edef\newwrite{\makecsname{ptexnewwrite}}
30395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \newindex {foo} defines an index named foo.
30415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It automatically defines \fooindex such that
30425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \fooindex ...rest of line... puts an entry in the index foo.
30435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It also defines \fooindfile to be the number of the output channel for
30445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the file that accumulates this index.  The file's extension is foo.
30455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The name of an index should be no more than 2 characters long
30465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% for the sake of vms.
30475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
30485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\newindex#1{%
30495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \iflinks
30505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\newwrite \csname#1indfile\endcsname
30515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
30525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
30535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
30545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \noexpand\doindex{#1}}
30555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
30565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defindex foo  ==  \newindex{foo}
30585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
30595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defindex{\parsearg\newindex}
30605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define @defcodeindex, like @defindex except put all entries in @code.
30625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
30635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defcodeindex{\parsearg\newcodeindex}
30645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
30655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\newcodeindex#1{%
30665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \iflinks
30675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\newwrite \csname#1indfile\endcsname
30685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \openout \csname#1indfile\endcsname \jobname.#1
30695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
30705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\xdef\csname#1index\endcsname{%
30715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \noexpand\docodeindex{#1}}%
30725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
30735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @synindex foo bar    makes index foo feed into index bar.
30765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do this instead of @defindex foo if you don't want it as a separate index.
30775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
30785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @syncodeindex foo bar   similar, but put all entries made for index foo
30795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% inside @code.
30805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
30815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
30825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
30835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
30845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
30855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 the target index (bar).
30865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosynindex#1#2#3{%
30875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Only do \closeout if we haven't already done it, else we'll end up
30885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % closing the target index.
30895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter \ifx\csname donesynindex#2\endcsname \undefined
30905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % The \closeout helps reduce unnecessary open files; the limit on the
30915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Acorn RISC OS is a mere 16 files.
30925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\closeout\csname#2indfile\endcsname
30935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\let\csname\donesynindex#2\endcsname = 1
30945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
30955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % redefine \fooindfile:
30965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
30975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\let\csname#2indfile\endcsname=\temp
30985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % redefine \fooindex:
30995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
31005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
31015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
31025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define \doindex, the driver for all \fooindex macros.
31035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Argument #1 is generated by the calling \fooindex macro,
31045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%  and it is "foo", the name of the index.
31055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
31065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \doindex just uses \parsearg; it calls \doind for the actual work.
31075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is because \doind is more useful to call from other macros.
31085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
31095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% There is also \dosubind {index}{topic}{subtopic}
31105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which makes an entry in a two-level index such as the operation index.
31115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
31125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
31135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\singleindexer #1{\doind{\indexname}{#1}}
31145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
31155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% like the previous two, but they put @code around the argument.
31165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
31175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
31185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
31195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Take care of Texinfo commands that can appear in an index entry.
31205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Since there are some commands we want to expand, and others we don't,
31215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we have to laboriously prevent expansion for those that we don't.
31225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
31235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\indexdummies{%
31245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
31255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\ {\realbackslash\space }%
31265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Need these in case \tex is in effect and \{ is a \delimiter again.
31275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % But can't use \lbracecmd and \rbracecmd because texindex assumes
31285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % braces and backslashes are used only as delimiters.
31295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\{ = \mylbrace
31305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\} = \myrbrace
31315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \definedummyword defines \#1 as \realbackslash #1\space, thus
31335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % effectively preventing its expansion.  This is used only for control
31345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % words, not control letters, because the \space would be incorrect
31355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % for control characters, but is needed to separate the control word
31365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % from whatever follows.
31375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % For control letters, we have \definedummyletter, which omits the
31395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % space.
31405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % These can be used both for control words that take an argument and
31425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % those that do not.  If it is followed by {arg} in the input, then
31435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % that will dutifully get written to the index (or wherever).
31445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\definedummyword##1{%
31465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
31475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
31485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\definedummyletter##1{%
31495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\def\csname ##1\endcsname{\realbackslash ##1}%
31505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
31515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\definedummyaccent\definedummyletter
31525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Do the redefinitions.
31545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \commondummies
31555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
31565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
31575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For the aux file, @ is the escape character.  So we want to redefine
31585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% everything using @ instead of \realbackslash.  When everything uses
31595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @, this will be simpler.
31605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
31615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\atdummies{%
31625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\@{@@}%
31635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\ {@ }%
31645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\{ = \lbraceatcmd
31655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\} = \rbraceatcmd
31665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % (See comments in \indexdummies.)
31685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\definedummyword##1{%
31695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\def\csname ##1\endcsname{@##1\space}%
31705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
31715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\definedummyletter##1{%
31725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\def\csname ##1\endcsname{@##1}%
31735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
31745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\definedummyaccent\definedummyletter
31755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Do the redefinitions.
31775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \commondummies
31785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
31795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
31805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called from \indexdummies and \atdummies.  \definedummyword and
31815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \definedummyletter must be defined first.
31825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
31835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\commondummies{%
31845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \normalturnoffactive
31865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \commondummiesnofonts
31885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyletter{_}%
31905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
31915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Non-English letters.
31925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{AA}%
31935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{AE}%
31945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{L}%
31955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{OE}%
31965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{O}%
31975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{aa}%
31985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{ae}%
31995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{l}%
32005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{oe}%
32015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{o}%
32025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{ss}%
32035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{exclamdown}%
32045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{questiondown}%
32055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{ordf}%
32065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{ordm}%
32075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
32085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Although these internal commands shouldn't show up, sometimes they do.
32095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{bf}%
32105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{gtr}%
32115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{hat}%
32125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{less}%
32135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{sf}%
32145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{sl}%
32155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{tclose}%
32165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{tt}%
32175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
32185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{LaTeX}%
32195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{TeX}%
32205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
32215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Assorted special characters.
32225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{bullet}%
32235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{comma}%
32245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{copyright}%
32255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{registeredsymbol}%
32265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{dots}%
32275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{enddots}%
32285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{equiv}%
32295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{error}%
32305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{euro}%
32315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{expansion}%
32325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{minus}%
32335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{pounds}%
32345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{point}%
32355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{print}%
32365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \definedummyword{result}%
32375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
32385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Handle some cases of @value -- where it does not contain any
32395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % (non-fully-expandable) commands.
32405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \makevalueexpandable
32415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
32425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Normal spaces, not active ones.
32435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \unsepspaces
32445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
32455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % No macro expansion.
32465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \turnoffmacros
32475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
32485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
32495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \commondummiesnofonts: common to \commondummies and \indexnofonts.
32505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
32515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Better have this without active chars.
32525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
32535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\~=\other
32545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\commondummiesnofonts{%
32555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Control letters and accents.
32565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyletter{!}%
32575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyaccent{"}%
32585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyaccent{'}%
32595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyletter{*}%
32605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyaccent{,}%
32615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyletter{.}%
32625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyletter{/}%
32635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyletter{:}%
32645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyaccent{=}%
32655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyletter{?}%
32665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyaccent{^}%
32675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyaccent{`}%
32685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyaccent{~}%
32695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{u}%
32705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{v}%
32715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{H}%
32725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{dotaccent}%
32735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{ringaccent}%
32745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{tieaccent}%
32755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{ubaraccent}%
32765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{udotaccent}%
32775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{dotless}%
32785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
32795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Texinfo font commands.
32805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{b}%
32815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{i}%
32825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{r}%
32835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{sc}%
32845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{t}%
32855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
32865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Commands that take arguments.
32875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{acronym}%
32885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{cite}%
32895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{code}%
32905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{command}%
32915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{dfn}%
32925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{emph}%
32935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{env}%
32945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{file}%
32955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{kbd}%
32965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{key}%
32975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{math}%
32985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{option}%
32995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{samp}%
33005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{strong}%
33015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{tie}%
33025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{uref}%
33035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{url}%
33045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{var}%
33055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{verb}%
33065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \definedummyword{w}%
33075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
33085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
33095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
33105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \indexnofonts is used when outputting the strings to sort the index
33115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% by, and when constructing control sequence names.  It eliminates all
33125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% control sequences and just writes whatever the best ASCII sort string
33135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% would be for a given command (usually its argument).
33145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
33155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\indexnofonts{%
33165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Accent commands should become @asis.
33175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\definedummyaccent##1{%
33185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\let\csname ##1\endcsname\asis
33195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
33205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We can just ignore other control letters.
33215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\definedummyletter##1{%
33225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\def\csname ##1\endcsname{}%
33235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
33245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Hopefully, all control words can become @asis.
33255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\definedummyword\definedummyaccent
33265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
33275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \commondummiesnofonts
33285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
33295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Don't no-op \tt, since it isn't a user-level command
33305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % and is used in the definitions of the active chars like <, >, |, etc.
33315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Likewise with the other plain tex font commands.
33325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %\let\tt=\asis
33335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
33345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\ { }%
33355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\@{@}%
33365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % how to handle braces?
33375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\_{\normalunderscore}%
33385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
33395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Non-English letters.
33405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\AA{AA}%
33415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\AE{AE}%
33425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\L{L}%
33435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\OE{OE}%
33445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\O{O}%
33455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\aa{aa}%
33465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\ae{ae}%
33475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\l{l}%
33485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\oe{oe}%
33495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\o{o}%
33505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\ss{ss}%
33515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\exclamdown{!}%
33525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\questiondown{?}%
33535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\ordf{a}%
33545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\ordm{o}%
33555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
33565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\LaTeX{LaTeX}%
33575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\TeX{TeX}%
33585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
33595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Assorted special characters.
33605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % (The following {} will end up in the sort string, but that's ok.)
33615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\bullet{bullet}%
33625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\comma{,}%
33635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\copyright{copyright}%
33645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\registeredsymbol{R}%
33655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\dots{...}%
33665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\enddots{...}%
33675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\equiv{==}%
33685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\error{error}%
33695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\euro{euro}%
33705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\expansion{==>}%
33715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\minus{-}%
33725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\pounds{pounds}%
33735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\point{.}%
33745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\print{-|}%
33755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\result{=>}%
33765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
33775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Don't write macro names.
33785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \emptyusermacros
33795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
33805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
33815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\indexbackslash=0  %overridden during \printindex.
33825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
33835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
33845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Most index entries go through here, but \dosubind is the general case.
33855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the index name, #2 is the entry text.
33865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doind#1#2{\dosubind{#1}{#2}{}}
33875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
33885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Workhorse for all \fooindexes.
33895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is name of index, #2 is stuff to put there, #3 is subentry --
33905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% empty if called from \doind, as we usually are (the main exception
33915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% is with most defuns, which call us directly).
33925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
33935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubind#1#2#3{%
33945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \iflinks
33955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
33965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Store the main index entry text (including the third arg).
33975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \toks0 = {#2}%
33985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If third arg is present, precede it with a space.
33995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\thirdarg{#3}%
34005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\thirdarg\empty \else
34015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \toks0 = \expandafter{\the\toks0 \space #3}%
34025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
34035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
34045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \edef\writeto{\csname#1indfile\endcsname}%
34055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
34065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifvmode
34075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \dosubindsanitize
34085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
34095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \dosubindwrite
34105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
34115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
34125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
34135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
34145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
34155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Write the entry in \toks0 to the index file:
34165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
34175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubindwrite{%
34185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Put the index entry in the margin if desired.
34195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\SETmarginindex\relax\else
34205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
34215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
34225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
34235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Remember, we are within a group.
34245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \indexdummies % Must do this here, since \bf, etc expand at this stage
34255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \escapechar=`\\
34265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
34275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % so it will be output as is; and it will print as backslash.
34285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
34295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Process the index entry with all font commands turned off, to
34305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % get the string to sort by.
34315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\indexnofonts
34325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \edef\temp{\the\toks0}% need full expansion
34335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \xdef\indexsorttmp{\temp}%
34345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
34355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
34365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Set up the complete index entry, with both the sort key and
34375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % the original text, including any font commands.  We write
34385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % three arguments to \entry to the .?? file (four in the
34395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % subentry case), texindex reduces to two when writing the .??s
34405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % sorted result.
34415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\temp{%
34425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \write\writeto{%
34435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
34445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
34455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \temp
34465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
34475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
34485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Take care of unwanted page breaks:
34495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
34505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If a skip is the last thing on the list now, preserve it
34515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% by backing up by \lastskip, doing the \write, then inserting
34525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the skip again.  Otherwise, the whatsit generated by the
34535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \write will make \lastskip zero.  The result is that sequences
34545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% like this:
34555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @end defun
34565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @tindex whatever
34575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defun ...
34585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% will have extra space inserted, because the \medbreak in the
34595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% start of the @defun won't see the skip inserted by the @end of
34605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the previous defun.
34615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
34625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But don't do any of this if we're not in vertical mode.  We
34635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% don't want to do a \vskip and prematurely end a paragraph.
34645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
34655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Avoid page breaks due to these extra skips, too.
34665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
34675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But wait, there is a catch there:
34685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We'll have to check whether \lastskip is zero skip.  \ifdim is not
34695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% sufficient for this purpose, as it ignores stretch and shrink parts
34705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% of the skip.  The only way seems to be to check the textual
34715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% representation of the skip.
34725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
34735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The following is almost like \def\zeroskipmacro{0.0pt} except that
34745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
34755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
34765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
34775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
34785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ..., ready, GO:
34795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
34805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubindsanitize{%
34815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
34825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \skip0 = \lastskip
34835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\lastskipmacro{\the\lastskip}%
34845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \count255 = \lastpenalty
34855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
34865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % If \lastskip is nonzero, that means the last item was a
34875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % skip.  And since a skip is discardable, that means this
34885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % -\skip0 glue we're inserting is preceded by a
34895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % non-discardable item, therefore it is not a potential
34905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % breakpoint, therefore no \nobreak needed.
34915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\lastskipmacro\zeroskipmacro
34925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
34935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vskip-\skip0
34945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
34955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
34965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dosubindwrite
34975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
34985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\lastskipmacro\zeroskipmacro
34995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If \lastskip was zero, perhaps the last item was a penalty, and
35005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
35015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % to re-insert the same penalty (values >10000 are used for various
35025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % signals); since we just inserted a non-discardable item, any
35035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % following glue (such as a \parskip) would be a breakpoint.  For example:
35045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % 
35055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %   @deffn deffn-whatever
35065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %   @vindex index-whatever
35075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %   Description.
35085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % would allow a break between the index-whatever whatsit
35095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % and the "Description." paragraph.
35105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum\count255>9999 \penalty\count255 \fi
35115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
35125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % On the other hand, if we had a nonzero \lastskip,
35135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % this make-up glue would be preceded by a non-discardable item
35145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % (the whatsit from the \write), so we must insert a \nobreak.
35155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nobreak\vskip\skip0
35165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
35175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
35185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
35195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The index entry written in the file actually looks like
35205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%  \entry {sortstring}{page}{topic}
35215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% or
35225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%  \entry {sortstring}{page}{topic}{subtopic}
35235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The texindex program reads in these files and writes files
35245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% containing these kinds of lines:
35255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%  \initial {c}
35265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%     before the first topic whose initial is c
35275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%  \entry {topic}{pagelist}
35285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%     for a topic that is used without subtopics
35295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%  \primary {topic}
35305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%     for the beginning of a topic that is used with subtopics
35315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%  \secondary {subtopic}{pagelist}
35325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%     for each subtopic.
35335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
35345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define the user-accessible indexing commands
35355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @findex, @vindex, @kindex, @cindex.
35365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
35375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\findex {\fnindex}
35385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\kindex {\kyindex}
35395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cindex {\cpindex}
35405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\vindex {\vrindex}
35415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tindex {\tpindex}
35425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pindex {\pgindex}
35435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
35445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cindexsub {\begingroup\obeylines\cindexsub}
35455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\obeylines %
35465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\cindexsub "#1" #2^^M{\endgroup %
35475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\dosubind{cp}{#2}{#1}}}
35485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
35495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define the macros used in formatting output of the sorted index material.
35505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
35515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @printindex causes a particular index (the ??s file) to get printed.
35525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It does not print any chapter heading (usually an @unnumbered).
35535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
35545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\printindex{\begingroup
35555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dobreak \chapheadingskip{10000}%
35565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
35575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \smallfonts \rm
35585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tolerance = 9500
35595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
35605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
35615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % See if the index file exists and is nonempty.
35625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Change catcode of @ here so that if the index file contains
35635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \initial {@}
35645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % as its first line, TeX doesn't complain about mismatched braces
35655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % (because it thinks @} is a control sequence).
35665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\@ = 11
35675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \openin 1 \jobname.#1s
35685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifeof 1
35695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \enddoublecolumns gets confused if there is no text in the index,
35705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % and it loses the chapter title and the aux file entries for the
35715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % index.  The easiest way to prevent this problem is to make sure
35725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % there is some text.
35735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \putwordIndexNonexistent
35745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
35755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
35765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If the index file exists but is empty, then \openin leaves \ifeof
35775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % false.  We have to make TeX try to read something from the file, so
35785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % it can discover if there is anything in it.
35795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \read 1 to \temp
35805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifeof 1
35815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \putwordIndexIsEmpty
35825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
35835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Index files are almost Texinfo source, but we use \ as the escape
35845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % character.  It would be better to use @, but that's too big a change
35855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % to make right now.
35865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\indexbackslash{\backslashcurfont}%
35875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \catcode`\\ = 0
35885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \escapechar = `\\
35895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \begindoublecolumns
35905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \input \jobname.#1s
35915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \enddoublecolumns
35925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
35935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
35945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \closein 1
35955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup}
35965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
35975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These macros are used by the sorted index file itself.
35985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Change them to control the appearance of the index.
35995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
36005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\initial#1{{%
36015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Some minor font changes for the special characters.
36025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
36035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
36045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Remove any glue we may have, we'll be inserting our own.
36055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \removelastskip
36065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
36075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We like breaks before the index initials, so insert a bonus.
36085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nobreak
36095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vskip 0pt plus 3\baselineskip
36105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \penalty 0
36115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vskip 0pt plus -3\baselineskip
36125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
36135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Typeset the initial.  Making this add up to a whole number of
36145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % baselineskips increases the chance of the dots lining up from column
36155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % to column.  It still won't often be perfect, because of the stretch
36165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % we need before each entry, but it's better.
36175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
36185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % No shrink because it confuses \balancecolumns.
36195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vskip 1.67\baselineskip plus .5\baselineskip
36205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \leftline{\secbf #1}%
36215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Do our best not to break after the initial.
36225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nobreak
36235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vskip .33\baselineskip plus .1\baselineskip
36245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
36255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
36265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
36275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% then page number (#2) flushed to the right margin.  It is used for index
36285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and table of contents entries.  The paragraph is indented by \leftskip.
36295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
36305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A straightforward implementation would start like this:
36315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%	\def\entry#1#2{...
36325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But this frozes the catcodes in the argument, and can cause problems to
36335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @code, which sets - active.  This problem was fixed by a kludge---
36345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% ``-'' was active throughout whole index, but this isn't really right.
36355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
36365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The right solution is to prevent \entry from swallowing the whole text.
36375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%                                 --kasal, 21nov03
36385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\entry{%
36395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \begingroup
36405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Start a new paragraph if necessary, so our assignments below can't
36425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % affect previous text.
36435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \par
36445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Do not fill out the last line with white space.
36465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \parfillskip = 0in
36475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % No extra space above this paragraph.
36495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \parskip = 0in
36505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Do not prefer a separate line ending with a hyphen to fewer lines.
36525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \finalhyphendemerits = 0
36535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \hangindent is only relevant when the entry text and page number
36555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % don't both fit on one line.  In that case, bob suggests starting the
36565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % dots pretty far over on the line.  Unfortunately, a large
36575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % indentation looks wrong when the entry text itself is broken across
36585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % lines.  So we use a small indentation and put up with long leaders.
36595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \hangafter is reset to 1 (which is the value we want) at the start
36615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % of each paragraph, so we need not do anything with that.
36625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \hangindent = 2em
36635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % When the entry text needs to be broken, just fill out the first line
36655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % with blank space.
36665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \rightskip = 0pt plus1fil
36675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % A bit of stretch before each entry for the benefit of balancing
36695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % columns.
36705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vskip 0pt plus1pt
36715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Swallow the left brace of the text (first parameter):
36735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \afterassignment\doentry
36745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\temp =
36755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
36765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doentry{%
36775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \bgroup % Instead of the swallowed brace.
36785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \noindent
36795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \aftergroup\finishentry
36805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % And now comes the text of the entry.
36815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
36825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\finishentry#1{%
36835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % #1 is the page number.
36845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
36855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % The following is kludged to not output a line of dots in the index if
36865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % there are no page numbers.  The next person who breaks this will be
36875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % cursed by a Unix daemon.
36885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\tempa{{\rm }}%
36895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\tempb{#1}%
36905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \edef\tempc{\tempa}%
36915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \edef\tempd{\tempb}%
36925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\tempc\tempd
36935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ %
36945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
36955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
36965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % If we must, put the page number on a line of its own, and fill out
36975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % this line with blank space.  (The \hfil is overwhelmed with the
36985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % fill leaders glue in \indexdotfill if the page number does fit.)
36995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \hfil\penalty50
37005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \null\nobreak\indexdotfill % Have leaders before the page number.
37015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
37025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % The `\ ' here is removed by the implicit \unskip that TeX does as
37035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % part of (the primitive) \par.  Without it, a spurious underfull
37045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % \hbox ensues.
37055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifpdf
37065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\pdfgettoks#1.%
37075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\ \the\toksA
37085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \else
37095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\ #1%
37105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
37115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
37125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \par
37135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup
37145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
37155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
37165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Like \dotfill except takes at least 1 em.
37175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\indexdotfill{\cleaders
37185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
37195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
37205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\primary #1{\line{#1\hfil}}
37215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
37225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\secondaryindent \secondaryindent=0.5cm
37235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secondary#1#2{{%
37245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parfillskip=0in
37255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip=0in
37265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hangindent=1in
37275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hangafter=1
37285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
37295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifpdf
37305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
37315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
37325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    #2
37335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
37345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \par
37355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
37365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
37375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define two-column mode, which we use to typeset indexes.
37385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Adapted from the TeXbook, page 416, which is to say,
37395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the manmac.tex format used to print the TeXbook itself.
37405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\@=11
37415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
37425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\partialpage
37435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\doublecolumnhsize
37445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
37455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
37465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Grab any single-column material above us.
37475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \output = {%
37485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
37495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Here is a possibility not foreseen in manmac: if we accumulate a
37505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % whole lot of material, we might end up calling this \output
37515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % routine twice in a row (see the doublecol-lose test, which is
37525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % essentially a couple of indexes with @setchapternewpage off).  In
37535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % that case we just ship out what is in \partialpage with the normal
37545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % output routine.  Generally, \partialpage will be empty when this
37555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % runs and this will be a no-op.  See the indexspread.tex test case.
37565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifvoid\partialpage \else
37575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \onepageout{\pagecontents\partialpage}%
37585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
37595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
37605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\setbox\partialpage = \vbox{%
37615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Unvbox the main output page.
37625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \unvbox\PAGE
37635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \kern-\topskip \kern\baselineskip
37645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }%
37655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
37665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \eject % run that output routine to set \partialpage
37675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
37685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Use the double-column output routine for subsequent pages.
37695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \output = {\doublecolumnout}%
37705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
37715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Change the page size parameters.  We could do this once outside this
37725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
37735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % format, but then we repeat the same computation.  Repeating a couple
37745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % of assignments once per index is clearly meaningless for the
37755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % execution time, so we may as well do it in one place.
37765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
37775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % First we halve the line length, less a little for the gutter between
37785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % the columns.  We compute the gutter based on the line length, so it
37795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % changes automatically with the paper format.  The magic constant
37805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % below is chosen so that the gutter has the same value (well, +-<1pt)
37815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % as it did when we hard-coded it.
37825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
37835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We put the result in a separate register, \doublecolumhsize, so we
37845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % can restore it in \pagesofar, after \hsize itself has (potentially)
37855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % been clobbered.
37865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
37875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \doublecolumnhsize = \hsize
37885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\doublecolumnhsize by -.04154\hsize
37895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \divide\doublecolumnhsize by 2
37905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hsize = \doublecolumnhsize
37915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
37925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Double the \vsize as well.  (We don't need a separate register here,
37935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % since nobody clobbers \vsize.)
37945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vsize = 2\vsize
37955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
37965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
37975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The double-column output routine for all double-column pages except
37985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the last.
37995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
38005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doublecolumnout{%
38015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \splittopskip=\topskip \splitmaxdepth=\maxdepth
38025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Get the available space for the double columns -- the normal
38035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % (undoubled) page height minus any material left over from the
38045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % previous page.
38055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen@ = \vsize
38065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \divide\dimen@ by 2
38075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\dimen@ by -\ht\partialpage
38085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
38095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % box0 will be the left-hand column, box2 the right.
38105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
38115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \onepageout\pagesofar
38125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \unvbox255
38135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \penalty\outputpenalty
38145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
38155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
38165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Re-output the contents of the output page -- any previous material,
38175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% followed by the two boxes we just split, in box0 and box2.
38185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pagesofar{%
38195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \unvbox\partialpage
38205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
38215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hsize = \doublecolumnhsize
38225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \wd0=\hsize \wd2=\hsize
38235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hbox to\pagewidth{\box0\hfil\box2}%
38245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
38255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
38265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% All done with double columns.
38275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\enddoublecolumns{%
38285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \output = {%
38295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Split the last of the double-column material.  Leave it on the
38305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % current page, no automatic page break.
38315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \balancecolumns
38325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
38335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If we end up splitting too much material for the current page,
38345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % though, there will be another page break right after this \output
38355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % invocation ends.  Having called \balancecolumns once, we do not
38365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % want to call it again.  Therefore, reset \output to its normal
38375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % definition right away.  (We hope \balancecolumns will never be
38385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % called on to balance too much material, but if it is, this makes
38395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % the output somewhat more palatable.)
38405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\output = {\onepageout{\pagecontents\PAGE}}%
38415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
38425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \eject
38435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup % started in \begindoublecolumns
38445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
38455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \pagegoal was set to the doubled \vsize above, since we restarted
38465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % the current page.  We're now back to normal single-column
38475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % typesetting, so reset \pagegoal to the normal \vsize (after the
38485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \endgroup where \vsize got restored).
38495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \pagegoal = \vsize
38505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
38515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
38525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called at the end of the double column material.
38535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\balancecolumns{%
38545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
38555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen@ = \ht0
38565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\dimen@ by \topskip
38575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\dimen@ by-\baselineskip
38585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \divide\dimen@ by 2 % target to split to
38595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
38605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \splittopskip = \topskip
38615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Loop until we get a decent breakpoint.
38625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
38635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vbadness = 10000
38645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \loop
38655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \global\setbox3 = \copy0
38665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \global\setbox1 = \vsplit3 to \dimen@
38675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifdim\ht3>\dimen@
38685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \global\advance\dimen@ by 1pt
38695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \repeat
38705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
38715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
38725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0=\vbox to\dimen@{\unvbox1}%
38735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox2=\vbox to\dimen@{\unvbox3}%
38745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
38755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \pagesofar
38765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
38775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\@ = \other
38785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
38795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
38805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{sectioning,}
38815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapters, sections, etc.
38825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
38835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
38845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% sections so that we can refer to them unambiguously in the pdf
38855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% outlines by their "section number".  We avoid collisions with chapter
38865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% numbers by starting them at 10000.  (If a document ever has 10000
38875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% chapters, we're in trouble anyway, I'm sure.)
38885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\unnumberedno \unnumberedno = 10000
38895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\chapno
38905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\secno        \secno=0
38915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\subsecno     \subsecno=0
38925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\subsubsecno  \subsubsecno=0
38935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
38945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This counter is funny since it counts through charcodes of letters A, B, ...
38955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\appendixno  \appendixno = `\@
38965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
38975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \def\appendixletter{\char\the\appendixno}
38985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We do the following ugly conditional instead of the above simple
38995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% construct for the sake of pdftex, which needs the actual
39005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% letter in the expansion, not just typeset.
39015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
39025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixletter{%
39035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\appendixno=`A A%
39045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`B B%
39055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`C C%
39065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`D D%
39075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`E E%
39085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`F F%
39095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`G G%
39105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`H H%
39115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`I I%
39125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`J J%
39135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`K K%
39145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`L L%
39155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`M M%
39165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`N N%
39175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`O O%
39185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`P P%
39195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`Q Q%
39205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`R R%
39215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`S S%
39225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`T T%
39235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`U U%
39245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`V V%
39255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`W W%
39265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`X X%
39275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`Y Y%
39285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\ifnum\appendixno=`Z Z%
39295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % The \the is necessary, despite appearances, because \appendixletter is
39305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % expanded while writing the .toc file.  \char\appendixno is not
39315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % expandable, thus it is written literally, thus all appendixes come out
39325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % with the same letter (or @) in the toc without it.
39335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else\char\the\appendixno
39345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
39355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
39365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
39375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Each @chapter defines this as the name of the chapter.
39385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% page headings and footings can use it.  @section does likewise.
39395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% However, they are not reliable, because we don't use marks.
39405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\thischapter{}
39415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\thissection{}
39425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
39435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\absseclevel % used to calculate proper heading level
39445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
39455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
39465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @raisesections: treat @section as chapter, @subsection as section, etc.
39475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\raisesections{\global\advance\secbase by -1}
39485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\up=\raisesections % original BFox name
39495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
39505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @lowersections: treat @chapter as section, @section as subsection, etc.
39515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lowersections{\global\advance\secbase by 1}
39525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\down=\lowersections % original BFox name
39535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
39545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we only have subsub.
39555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\maxseclevel = 3
39565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
39575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A numbered section within an unnumbered changes to unnumbered too.
39585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To achive this, remember the "biggest" unnum. sec. we are currently in:
39595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\unmlevel = \maxseclevel
39605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
39615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Trace whether the current chapter is an appendix or not:
39625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
39635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapheadtype{N}
39645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
39655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Choose a heading macro
39665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is heading type
39675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #2 is heading level
39685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 is text for heading
39695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\genhead#1#2#3{%
39705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Compute the abs. sec. level:
39715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \absseclevel=#2
39725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\absseclevel by \secbase
39735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Make sure \absseclevel doesn't fall outside the range:
39745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum \absseclevel < 0
39755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \absseclevel = 0
39765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
39775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum \absseclevel > 3
39785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \absseclevel = 3
39795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
39805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
39815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % The heading type:
39825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\headtype{#1}%
39835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \if \headtype U%
39845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum \absseclevel < \unmlevel
39855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \chardef\unmlevel = \absseclevel
39865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
39875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
39885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Check for appendix sections:
39895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum \absseclevel = 0
39905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \edef\chapheadtype{\headtype}%
39915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
39925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \if \headtype A\if \chapheadtype N%
39935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\errmessage{@appendix... within a non-appendix chapter}%
39945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi\fi
39955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
39965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Check for numbered within unnumbered:
39975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum \absseclevel > \unmlevel
39985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\headtype{U}%
39995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
40005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \chardef\unmlevel = 3
40015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
40025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
40035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Now print the heading:
40045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \if \headtype U%
40055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifcase\absseclevel
40065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\unnumberedzzz{#3}%
40075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \or \unnumberedseczzz{#3}%
40085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \or \unnumberedsubseczzz{#3}%
40095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \or \unnumberedsubsubseczzz{#3}%
40105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
40115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
40125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \if \headtype A%
40135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifcase\absseclevel
40145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \appendixzzz{#3}%
40155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \or \appendixsectionzzz{#3}%
40165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \or \appendixsubseczzz{#3}%
40175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \or \appendixsubsubseczzz{#3}%
40185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
40195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
40205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifcase\absseclevel
40215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \chapterzzz{#3}%
40225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \or \seczzz{#3}%
40235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \or \numberedsubseczzz{#3}%
40245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \or \numberedsubsubseczzz{#3}%
40255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
40265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
40275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
40285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \suppressfirstparagraphindent
40295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
40305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
40315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% an interface:
40325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numhead{\genhead N}
40335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\apphead{\genhead A}
40345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnmhead{\genhead U}
40355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
40365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
40375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% all lower-level sectioning counters to zero.
40385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
40395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Also set \chaplevelprefix, which we prepend to @float sequence numbers
40405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (e.g., figures), q.v.  By default (before any chapter), that is empty.
40415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\chaplevelprefix = \empty
40425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
40435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
40445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapterzzz#1{%
40455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % section resetting is \global in case the chapter is in a group, such
40465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % as an @include file.
40475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
40485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\advance\chapno by 1
40495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Used for \float.
40515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\chaplevelprefix{\the\chapno.}%
40525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetallfloatnos
40535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \message{\putwordChapter\space \the\chapno}%
40555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Write the actual heading.
40575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \chapmacro{#1}{Ynumbered}{\the\chapno}%
40585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % So @section and the like are numbered underneath this chapter.
40605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\section = \numberedsec
40615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\subsection = \numberedsubsec
40625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\subsubsection = \numberedsubsubsec
40635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
40645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
40655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
40665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixzzz#1{%
40675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
40685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\advance\appendixno by 1
40695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\chaplevelprefix{\appendixletter.}%
40705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetallfloatnos
40715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\appendixnum{\putwordAppendix\space \appendixletter}%
40735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \message{\appendixnum}%
40745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \chapmacro{#1}{Yappendix}{\appendixletter}%
40765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\section = \appendixsec
40785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\subsection = \appendixsubsec
40795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\subsubsection = \appendixsubsubsec
40805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
40815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
40825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
40835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnumberedzzz#1{%
40845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
40855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\advance\unnumberedno by 1
40865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Since an unnumbered has no number, no prefix for figures.
40885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\chaplevelprefix = \empty
40895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \resetallfloatnos
40905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % This used to be simply \message{#1}, but TeX fully expands the
40925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % argument to \message.  Therefore, if #1 contained @-commands, TeX
40935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
40945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % expanded @cite (which turns out to cause errors because \cite is meant
40955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % to be executed, not expanded).
40965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
40975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Anyway, we don't want the fully-expanded definition of @cite to appear
40985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % as a result of the \message, we just want `@cite' itself.  We use
40995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
41005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % simply yielding the contents of <toks register>.  (We also do this for
41015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % the toc entries.)
41025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \toks0 = {#1}%
41035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \message{(\the\toks0)}%
41045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
41055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
41065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
41075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\section = \unnumberedsec
41085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\subsection = \unnumberedsubsec
41095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\subsubsection = \unnumberedsubsubsec
41105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @centerchap is like @unnumbered, but the heading is centered.
41135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\centerchap{%
41145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Well, we could do the following in a group, but that would break
41155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % an assumption that \chapmacro is called at the outermost level.
41165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Thus we are safer this way:		--kasal, 24feb04
41175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\centerparametersmaybe = \centerparameters
41185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \unnmhead0{#1}%
41195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\centerparametersmaybe = \relax
41205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @top is like @unnumbered.
41235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\top\unnumbered
41245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sections.
41265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
41275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\seczzz#1{%
41285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
41295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
41305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
41335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixsectionzzz#1{%
41345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
41355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
41365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\appendixsec\appendixsection
41385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
41405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnumberedseczzz#1{%
41415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
41425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
41435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsections.
41465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
41475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numberedsubseczzz#1{%
41485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\subsubsecno=0  \global\advance\subsecno by 1
41495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
41505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
41535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixsubseczzz#1{%
41545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\subsubsecno=0  \global\advance\subsecno by 1
41555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sectionheading{#1}{subsec}{Yappendix}%
41565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                 {\appendixletter.\the\secno.\the\subsecno}%
41575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
41605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnumberedsubseczzz#1{%
41615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\subsubsecno=0  \global\advance\subsecno by 1
41625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sectionheading{#1}{subsec}{Ynothing}%
41635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                 {\the\unnumberedno.\the\secno.\the\subsecno}%
41645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsubsections.
41675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
41685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numberedsubsubseczzz#1{%
41695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\subsubsecno by 1
41705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sectionheading{#1}{subsubsec}{Ynumbered}%
41715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
41725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
41755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixsubsubseczzz#1{%
41765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\subsubsecno by 1
41775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sectionheading{#1}{subsubsec}{Yappendix}%
41785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
41795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
41825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnumberedsubsubseczzz#1{%
41835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\subsubsecno by 1
41845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sectionheading{#1}{subsubsec}{Ynothing}%
41855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
41865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
41875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These macros control what the section commands do, according
41895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
41905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define them by default for a numbered chapter.
41915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\section = \numberedsec
41925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\subsection = \numberedsubsec
41935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\subsubsection = \numberedsubsubsec
41945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define @majorheading, @heading and @subheading
41965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
41975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% NOTE on use of \vbox for chapter headings, section headings, and such:
41985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%       1) We use \vbox rather than the earlier \line to permit
41995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%          overlong headings to fold.
42005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%       2) \hyphenpenalty is set to 10000 because hyphenation in a
42015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%          heading is obnoxious; this forbids it.
42025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%       3) Likewise, headings look best if no \parindent is used, and
42035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%          if justification is not attempted.  Hence \raggedright.
42045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\majorheading{%
42075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\advance\chapheadingskip by 10pt \chapbreak }%
42085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parsearg\chapheadingzzz
42095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
42105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
42125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapheadingzzz#1{%
42135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
42145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    \parindent=0pt\raggedright
42155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    \rm #1\hfill}}%
42165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \bigskip \par\penalty 200\relax
42175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \suppressfirstparagraphindent
42185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
42195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @heading, @subheading, @subsubheading.
42215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
42225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \suppressfirstparagraphindent}
42235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
42245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \suppressfirstparagraphindent}
42255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
42265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \suppressfirstparagraphindent}
42275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These macros generate a chapter, section, etc. heading only
42295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (including whitespace, linebreaking, etc. around it),
42305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% given all the information in convenient, parsed form.
42315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Args are the skip and penalty (usually negative)
42335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
42345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Define plain chapter starts, and page on/off switching for it
42365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Parameter controlling skip before chapter headings (if needed)
42375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\chapheadingskip
42395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapbreak{\dobreak \chapheadingskip {-4000}}
42415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chappager{\par\vfill\supereject}
42425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
42435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
42455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\CHAPPAGoff{%
42475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chappager
42485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pchapsepmacro=\chapbreak
42495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pagealignmacro=\chappager}
42505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\CHAPPAGon{%
42525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chappager
42535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pchapsepmacro=\chappager
42545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pagealignmacro=\chappager
42555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\def\HEADINGSon{\HEADINGSsingle}}
42565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\CHAPPAGodd{%
42585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\contentsalignmacro = \chapoddpage
42595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pchapsepmacro=\chapoddpage
42605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\pagealignmacro=\chapoddpage
42615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\def\HEADINGSon{\HEADINGSdouble}}
42625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\CHAPPAGon
42645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
42655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapter opening.
42665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
42675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
42685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Yappendix, Yomitfromtoc), #3 the chapter number.
42695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
42705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To test against our argument.
42715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ynothingkeyword{Ynothing}
42725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yomitfromtockeyword{Yomitfromtoc}
42735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yappendixkeyword{Yappendix}
42745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
42755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapmacro#1#2#3{%
42765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \pchapsepmacro
42775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
42785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \chapfonts \rm
42795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
42805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Have to define \thissection before calling \donoderef, because the
42815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % xref code eventually uses it.  On the other hand, it has to be called
42825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % after \pchapsepmacro, or the headline will change too soon.
42835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \gdef\thissection{#1}%
42845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \gdef\thischaptername{#1}%
42855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
42865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Only insert the separating space if we have a chapter/appendix
42875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % number, and don't print the unnumbered ``number''.
42885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\temptype{#2}%
42895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\temptype\Ynothingkeyword
42905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \setbox0 = \hbox{}%
42915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\toctype{unnchap}%
42925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\thischapter{#1}%
42935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else\ifx\temptype\Yomitfromtockeyword
42945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
42955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\toctype{omit}%
42965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \xdef\thischapter{}%
42975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else\ifx\temptype\Yappendixkeyword
42985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
42995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\toctype{app}%
43005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % We don't substitute the actual chapter name into \thischapter
43015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % because we don't want its macros evaluated now.  And we don't
43025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % use \thissection because that changes with each section.
43035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
43045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \xdef\thischapter{\putwordAppendix{} \appendixletter:
43055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                        \noexpand\thischaptername}%
43065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
43075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \setbox0 = \hbox{#3\enspace}%
43085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\toctype{numchap}%
43095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \xdef\thischapter{\putwordChapter{} \the\chapno:
43105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                        \noexpand\thischaptername}%
43115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi\fi\fi
43125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
43135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Write the toc entry for this chapter.  Must come before the
43145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \donoderef, because we include the current node name in the toc
43155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % entry, and \donoderef resets it to empty.
43165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \writetocentry{\toctype}{#1}{#3}%
43175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
43185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % For pdftex, we have to write out the node definition (aka, make
43195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % the pdfdest) after any page break, but before the actual text has
43205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % been typeset.  If the destination for the pdf outline is after the
43215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % text, then jumping from the outline may wind up with the text not
43225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % being visible, for instance under high magnification.
43235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \donoderef{#2}%
43245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
43255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Typeset the actual heading.
43265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
43275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \hangindent=\wd0 \centerparametersmaybe
43285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \unhbox0 #1\par}%
43295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
43305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nobreak\bigskip % no page break after a chapter title
43315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nobreak
43325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
43335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
43345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @centerchap -- centered and unnumbered.
43355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\centerparametersmaybe = \relax
43365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\centerparameters{%
43375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\rightskip by 3\rightskip
43385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \leftskip = \rightskip
43395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parfillskip = 0pt
43405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
43415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
43425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
43435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% I don't think this chapter style is supported any more, so I'm not
43445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
43455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
43465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
43475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
43485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnchfopen #1{%
43495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
43505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                       \parindent=0pt\raggedright
43515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                       \rm #1\hfill}}\bigskip \par\nobreak
43525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
43535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chfopen #1#2{\chapoddpage {\chapfonts
43545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
43555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\par\penalty 5000 %
43565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
43575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\centerchfopen #1{%
43585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
43595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                       \parindent=0pt
43605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
43615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
43625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\CHAPFopen{%
43635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\chapmacro=\chfopen
43645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let\centerchapmacro=\centerchfopen}
43655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
43665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
43675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Section titles.  These macros combine the section number parts and
43685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% call the generic \sectionheading to do the printing.
43695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
43705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\secheadingskip
43715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
43725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
43735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsection titles.
43745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\subsecheadingskip
43755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
43765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
43775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsubsection titles.
43785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsubsecheadingskip{\subsecheadingskip}
43795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsubsecheadingbreak{\subsecheadingbreak}
43805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
43815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
43825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Print any size, any type, section title.
43835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
43845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
43855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
43865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% section number.
43875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
43885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\sectionheading#1#2#3#4{%
43895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
43905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Switch to the right set of fonts.
43915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \csname #2fonts\endcsname \rm
43925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
43935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Insert space above the heading.
43945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \csname #2headingbreak\endcsname
43955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
43965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Only insert the space after the number if we have a section number.
43975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\sectionlevel{#2}%
43985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\temptype{#3}%
43995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
44005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\temptype\Ynothingkeyword
44015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \setbox0 = \hbox{}%
44025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\toctype{unn}%
44035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \gdef\thissection{#1}%
44045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else\ifx\temptype\Yomitfromtockeyword
44055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % for @headings -- no section number, don't include in toc,
44065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % and don't redefine \thissection.
44075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \setbox0 = \hbox{}%
44085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\toctype{omit}%
44095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\sectionlevel=\empty
44105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else\ifx\temptype\Yappendixkeyword
44115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \setbox0 = \hbox{#4\enspace}%
44125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\toctype{app}%
44135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \gdef\thissection{#1}%
44145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
44155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \setbox0 = \hbox{#4\enspace}%
44165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\toctype{num}%
44175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \gdef\thissection{#1}%
44185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi\fi\fi
44195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
44205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Write the toc entry (before \donoderef).  See comments in \chfplain.
44215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
44225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
44235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Write the node reference (= pdf destination for pdftex).
44245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Again, see comments in \chfplain.
44255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \donoderef{#3}%
44265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
44275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Output the actual section heading.
44285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
44295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \hangindent=\wd0  % zero if no section number
44305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \unhbox0 #1}%
44315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
44325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Add extra space after the heading -- half of whatever came above it.
44335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Don't allow stretch, though.
44345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \kern .5 \csname #2headingskip\endcsname
44355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
44365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Do not let the kern be a potential breakpoint, as it would be if it
44375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % was followed by glue.
44385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nobreak
44395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
44405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We'll almost certainly start a paragraph next, so don't let that
44415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % glue accumulate.  (Not a breakpoint because it's preceded by a
44425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % discardable item.)
44435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vskip-\parskip
44445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % 
44455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % This is purely so the last item on the list is a known \penalty >
44465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % 10000.  This is so \startdefun can avoid allowing breakpoints after
44475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % section headings.  Otherwise, it would insert a valid breakpoint between:
44485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % 
44495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %   @section sec-whatever
44505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %   @deffn def-whatever
44515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \penalty 10001
44525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
44535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
44545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
44555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{toc,}
44565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Table of contents.
44575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newwrite\tocfile
44585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
44595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Write an entry to the toc file, opening it if necessary.
44605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called from @chapter, etc.
44615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
44625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
44635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We append the current node name (if any) and page number as additional
44645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% arguments for the \{chap,sec,...}entry macros which will eventually
44655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% read this.  The node name is used in the pdf outlines as the
44665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% destination to jump to.
44675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
44685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We open the .toc file for writing here instead of at @setfilename (or
44695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% any other fixed time) so that @contents can be anywhere in the document.
44705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But if #1 is `omit', then we don't do anything.  This is used for the
44715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% table of contents chapter openings themselves.
44725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
44735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\iftocfileopened
44745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\omitkeyword{omit}%
44755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
44765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\writetocentry#1#2#3{%
44775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\writetoctype{#1}%
44785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\writetoctype\omitkeyword \else
44795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \iftocfileopened\else
44805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \immediate\openout\tocfile = \jobname.toc
44815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \global\tocfileopenedtrue
44825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
44835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
44845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \iflinks
44855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \toks0 = {#2}%
44865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \toks2 = \expandafter{\lastnode}%
44875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}%
44885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                               {\the\toks2}{\noexpand\folio}}}%
44895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \temp
44905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
44915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
44925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
44935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Tell \shipout to create a pdf destination on each page, if we're
44945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % writing pdf.  These are used in the table of contents.  We can't
44955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % just write one on every page because the title pages are numbered
44965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % 1 and 2 (the page numbers aren't printed), and so are the first
44975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % two pages of the document.  Thus, we'd have two destinations named
44985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % `1', and two named `2'.
44995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifpdf \global\pdfmakepagedesttrue \fi
45005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
45015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
45025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\contentsrightmargin \contentsrightmargin=1in
45035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\savepageno
45045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\lastnegativepageno \lastnegativepageno = -1
45055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
45065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Prepare to read what we've written to \tocfile.
45075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
45085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startcontents#1{%
45095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % If @setchapternewpage on, and @headings double, the contents should
45105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % start on an odd page, unlike chapters.  Thus, we maintain
45115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \contentsalignmacro in parallel with \pagealignmacro.
45125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % From: Torbjorn Granlund <tege@matematik.su.se>
45135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \contentsalignmacro
45145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \immediate\closeout\tocfile
45155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
45165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Don't need to put `Contents' or `Short Contents' in the headline.
45175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % It is abundantly clear what they are.
45185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\thischapter{}%
45195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \chapmacro{#1}{Yomitfromtoc}{}%
45205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
45215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \savepageno = \pageno
45225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \begingroup                  % Set up to handle contents files properly.
45235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
45245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % We can't do this, because then an actual ^ in a section
45255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97.
45265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
45275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \raggedbottom             % Worry more about breakpoints than the bottom.
45285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
45295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
45305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Roman numerals for page numbers.
45315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
45325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
45335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
45345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
45355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Normal (long) toc.
45365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\contents{%
45375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \startcontents{\putwordTOC}%
45385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \openin 1 \jobname.toc
45395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifeof 1 \else
45405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \input \jobname.toc
45415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
45425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vfill \eject
45435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \contentsalignmacro % in case @setchapternewpage odd is in effect
45445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifeof 1 \else
45455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \pdfmakeoutlines
45465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
45475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \closein 1
45485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup
45495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \lastnegativepageno = \pageno
45505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\pageno = \savepageno
45515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
45525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
45535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% And just the chapters.
45545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\summarycontents{%
45555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \startcontents{\putwordShortTOC}%
45565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
45575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\numchapentry = \shortchapentry
45585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\appentry = \shortchapentry
45595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\unnchapentry = \shortunnchapentry
45605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % We want a true roman here for the page numbers.
45615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \secfonts
45625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\rm=\shortcontrm \let\bf=\shortcontbf
45635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\sl=\shortcontsl \let\tt=\shortconttt
45645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \rm
45655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \hyphenpenalty = 10000
45665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\baselineskip by 1pt % Open it up a little.
45675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\numsecentry##1##2##3##4{}
45685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\appsecentry = \numsecentry
45695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\unnsecentry = \numsecentry
45705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\numsubsecentry = \numsecentry
45715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\appsubsecentry = \numsecentry
45725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\unnsubsecentry = \numsecentry
45735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\numsubsubsecentry = \numsecentry
45745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\appsubsubsecentry = \numsecentry
45755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\unnsubsubsecentry = \numsecentry
45765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \openin 1 \jobname.toc
45775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifeof 1 \else
45785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \input \jobname.toc
45795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
45805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \closein 1
45815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vfill \eject
45825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \contentsalignmacro % in case @setchapternewpage odd is in effect
45835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup
45845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \lastnegativepageno = \pageno
45855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\pageno = \savepageno
45865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
45875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\shortcontents = \summarycontents
45885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
45895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Typeset the label for a chapter or appendix for the short contents.
45905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
45915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
45925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\shortchaplabel#1{%
45935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % This space should be enough, since a single number is .5em, and the
45945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % widest letter (M) is 1em, at least in the Computer Modern fonts.
45955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % But use \hss just in case.
45965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % (This space doesn't include the extra space that gets added after
45975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % the label; that gets put in by \shortchapentry above.)
45985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
45995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We'd like to right-justify chapter numbers, but that looks strange
46005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % with appendix letters.  And right-justifying numbers and
46015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % left-justifying letters looks strange when there is less than 10
46025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % chapters.  Have to read the whole toc once to know how many chapters
46035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % there are before deciding ...
46045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hbox to 1em{#1\hss}%
46055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
46065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These macros generate individual entries in the table of contents.
46085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The first argument is the chapter or section name.
46095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The last argument is the page number.
46105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The arguments in between are the chapter number, section number, ...
46115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapters, in the main contents.
46135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
46145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
46155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Chapters, in the short toc.
46165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% See comments in \dochapentry re vbox and related settings.
46175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\shortchapentry#1#2#3#4{%
46185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
46195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
46205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Appendices, in the main contents.
46225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Need the word Appendix, and a fixed-size box.
46235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
46245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendixbox#1{%
46255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We use M since it's probably the widest letter.
46265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0 = \hbox{\putwordAppendix{} M}%
46275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hbox to \wd0{\putwordAppendix{} #1\hss}}
46285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
46295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
46305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Unnumbered chapters.
46325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
46335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
46345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Sections.
46365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
46375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\appsecentry=\numsecentry
46385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
46395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subsections.
46415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
46425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\appsubsecentry=\numsubsecentry
46435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
46445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% And subsubsections.
46465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
46475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\appsubsubsecentry=\numsubsubsecentry
46485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
46495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This parameter controls the indentation of the various levels.
46515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Same as \defaultparindent.
46525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\tocindent \tocindent = 15pt
46535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Now for the actual typesetting. In all these, #1 is the text and #2 is the
46555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% page number.
46565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
46575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If the toc has to be broken over pages, we want it to be at chapters
46585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% if at all possible; hence the \penalty.
46595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dochapentry#1#2{%
46605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
46615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \begingroup
46625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \chapentryfonts
46635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
46645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \endgroup
46655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \nobreak\vskip .25\baselineskip plus.1\baselineskip
46665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
46675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosecentry#1#2{\begingroup
46695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \secentryfonts \leftskip=\tocindent
46705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
46715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup}
46725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubsecentry#1#2{\begingroup
46745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \subsecentryfonts \leftskip=2\tocindent
46755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
46765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup}
46775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dosubsubsecentry#1#2{\begingroup
46795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \subsubsecentryfonts \leftskip=3\tocindent
46805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
46815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup}
46825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We use the same \entry macro as for the index entries.
46845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\tocentry = \entry
46855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Space between chapter (or whatever) number and the title.
46875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\labelspace{\hskip1em \relax}
46885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dopageno#1{{\rm #1}}
46905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doshortpageno#1{{\rm #1}}
46915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\chapentryfonts{\secfonts \rm}
46935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\secentryfonts{\textfonts}
46945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsecentryfonts{\textfonts}
46955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\subsubsecentryfonts{\textfonts}
46965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
46985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{environments,}
46995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @foo ... @end foo.
47005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
47015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
47025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
47035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Since these characters are used in examples, it should be an even number of
47045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \tt widths. Each \tt character is 1en, so two makes it 1em.
47055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
47065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\point{$\star$}
47075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
47085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
47095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
47105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
47115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
47125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The @error{} command.
47135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Adapted from the TeXbook's \boxit.
47145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
47155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newbox\errorbox
47165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
47175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\tentt \global\dimen0 = 3em}% Width of the box.
47185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\dimen2 = .55pt % Thickness of rules
47195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The text. (`r' is open on the right, `e' somewhat less so on the left.)
47205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
47215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
47225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\setbox\errorbox=\hbox to \dimen0{\hfil
47235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
47245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \advance\hsize by -2\dimen2 % Rules.
47255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   \vbox{%
47265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \hrule height\dimen2
47275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
47285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
47295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \kern3pt\vrule width\dimen2}% Space to right.
47305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \hrule height\dimen2}
47315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \hfil}
47325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
47335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\error{\leavevmode\lower.7ex\copy\errorbox}
47345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
47355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @tex ... @end tex    escapes into raw Tex temporarily.
47365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% One exception: @ is still an escape character, so that @end tex works.
47375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% But \@ or @@ will get a plain tex @ character.
47385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
47395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\tex{%
47405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
47415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
47425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
47435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode `\%=14
47445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode `\+=\other
47455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode `\"=\other
47465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode `\|=\other
47475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode `\<=\other
47485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode `\>=\other
47495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \escapechar=`\\
47505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
47515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\b=\ptexb
47525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\bullet=\ptexbullet
47535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\c=\ptexc
47545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\,=\ptexcomma
47555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\.=\ptexdot
47565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\dots=\ptexdots
47575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\equiv=\ptexequiv
47585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\!=\ptexexclam
47595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\i=\ptexi
47605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\indent=\ptexindent
47615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\noindent=\ptexnoindent
47625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\{=\ptexlbrace
47635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\+=\tabalign
47645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\}=\ptexrbrace
47655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\/=\ptexslash
47665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\*=\ptexstar
47675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\t=\ptext
47685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
47695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
47705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
47715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\@{@}%
47725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
47735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% There is no need to define \Etex.
47745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
47755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define @lisp ... @end lisp.
47765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @lisp environment forms a group so it can rebind things,
47775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% including the definition of @end lisp (which normally is erroneous).
47785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
47795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Amount to narrow the margins by for @lisp.
47805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\lispnarrowing \lispnarrowing=0.4in
47815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
47825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is the definition that ^^M gets inside @lisp, @example, and other
47835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% such environments.  \null is better than a space, since it doesn't
47845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% have any width.
47855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lisppar{\null\endgraf}
47865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
47875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This space is always present above and below environments.
47885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\envskipamount \envskipamount = 0pt
47895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
47905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Make spacing and below environment symmetrical.  We use \parskip here
47915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to help in doing that, since in @example-like environments \parskip
47925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% is reset to zero; thus the \afterenvbreak inserts no space -- but the
47935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% start of the next paragraph will insert \parskip.
47945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
47955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\aboveenvbreak{{%
47965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % =10000 instead of <10000 because of a special case in \itemzzz and
47975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \sectionheading, q.v.
47985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum \lastpenalty=10000 \else
47995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\envskipamount by \parskip
48005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgraf
48015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifdim\lastskip<\envskipamount
48025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \removelastskip
48035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % it's not a good place to break if the last penalty was \nobreak
48045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % or better ...
48055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifnum\lastpenalty<10000 \penalty-50 \fi
48065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \vskip\envskipamount
48075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
48085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
48095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
48105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
48115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\afterenvbreak = \aboveenvbreak
48125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
48135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
48145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\nonarrowing=\relax
48155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
48165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
48175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% environment contents.
48185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\font\circle=lcircle10
48195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\circthick
48205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\cartouter\newdimen\cartinner
48215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\normbskip\newskip\normpskip\newskip\normlskip
48225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\circthick=\fontdimen8\circle
48235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
48245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
48255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ctr{{\hskip 6pt\circle\char'010}}
48265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cbl{{\circle\char'012\hskip -6pt}}
48275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cbr{{\hskip 6pt\circle\char'011}}
48285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\carttop{\hbox to \cartouter{\hskip\lskip
48295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \ctl\leaders\hrule height\circthick\hfil\ctr
48305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \hskip\rskip}}
48315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cartbot{\hbox to \cartouter{\hskip\lskip
48325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \cbl\leaders\hrule height\circthick\hfil\cbr
48335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \hskip\rskip}}
48345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
48355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\lskip\newskip\rskip
48365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
48375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\cartouche{%
48385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifhmode\par\fi  % can't be in the midst of a paragraph.
48395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \startsavinginserts
48405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \lskip=\leftskip \rskip=\rightskip
48415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \leftskip=0pt\rightskip=0pt % we want these *outside*.
48425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \cartinner=\hsize \advance\cartinner by-\lskip
48435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\cartinner by-\rskip
48445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \cartouter=\hsize
48455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\cartouter by 18.4pt	% allow for 3pt kerns on either
48465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project				% side, and for 6pt waste from
48475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project				% each corner char, and rule thickness
48485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
48495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Flag to tell @lisp, etc., not to narrow margin.
48505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\nonarrowing=\comment
48515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vbox\bgroup
48525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \baselineskip=0pt\parskip=0pt\lineskip=0pt
48535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \carttop
48545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \hbox\bgroup
48555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \hskip\lskip
48565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \vrule\kern3pt
48575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \vbox\bgroup
48585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \kern3pt
48595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \hsize=\cartinner
48605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \baselineskip=\normbskip
48615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \lineskip=\normlskip
48625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \parskip=\normpskip
48635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \vskip -\parskip
48645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \comment % For explanation, see the end of \def\group.
48655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
48665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ecartouche{%
48675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project              \ifhmode\par\fi
48685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \kern3pt
48695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \egroup
48705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \kern3pt\vrule
48715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \hskip\rskip
48725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \egroup
48735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \cartbot
48745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \egroup
48755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \checkinserts
48765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
48775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
48785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
48795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This macro is called at the beginning of all the @example variants,
48805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% inside a group.
48815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nonfillstart{%
48825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \aboveenvbreak
48835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hfuzz = 12pt % Don't be fussy
48845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sepspaces % Make spaces be word-separators rather than space tokens.
48855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\par = \lisppar % don't ignore blank lines
48865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \obeylines % each line of input is a line of output
48875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip = 0pt
48885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parindent = 0pt
48895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \emergencystretch = 0pt % don't try to avoid overfull boxes
48905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % @cartouche defines \nonarrowing to inhibit narrowing
48915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % at next level down.
48925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\nonarrowing\relax
48935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance \leftskip by \lispnarrowing
48945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \exdentamount=\lispnarrowing
48955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
48965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\exdent=\nofillexdent
48975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
48985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
48995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If you want all examples etc. small: @set dispenvsize small.
49005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If you want even small examples the full size: @set dispenvsize nosmall.
49015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This affects the following displayed environments:
49025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%    @example, @display, @format, @lisp
49035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
49045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallword{small}
49055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\nosmallword{nosmall}
49065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\SETdispenvsize\relax
49075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setnormaldispenv{%
49085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\SETdispenvsize\smallword
49095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \smallexamplefonts \rm
49105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
49115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setsmalldispenv{%
49135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\SETdispenvsize\nosmallword
49145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
49155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \smallexamplefonts \rm
49165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
49175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We often define two environments, @foo and @smallfoo.
49205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Let's do it by one command:
49215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makedispenv #1#2{
49225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
49235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
49245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\let\csname E#1\endcsname \afterenvbreak
49255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
49265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define two synonyms:
49295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\maketwodispenvs #1#2#3{
49305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \makedispenv{#1}{#3}
49315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \makedispenv{#2}{#3}
49325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
49355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
49365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @smallexample and @smalllisp: use smaller fonts.
49375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Originally contributed by Pavel@xerox.
49385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
49395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\maketwodispenvs {lisp}{example}{%
49405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nonfillstart
49415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tt
49425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
49435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gobble       % eat return
49445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @display/@smalldisplay: same as @lisp except keep current font.
49475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
49485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedispenv {display}{%
49495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nonfillstart
49505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gobble
49515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @format/@smallformat: same as @display except don't narrow margins.
49545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
49555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedispenv{format}{%
49565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\nonarrowing = t%
49575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nonfillstart
49585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gobble
49595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
49625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\flushleft{%
49635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\nonarrowing = t%
49645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nonfillstart
49655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gobble
49665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eflushleft = \afterenvbreak
49685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @flushright.
49705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
49715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\flushright{%
49725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\nonarrowing = t%
49735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nonfillstart
49745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\leftskip by 0pt plus 1fill
49755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gobble
49765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Eflushright = \afterenvbreak
49785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @quotation does normal linebreaking (hence we can't use \nonfillstart)
49815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and narrows the margins.  We keep \parskip nonzero in general, since
49825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we're doing normal filling.  So, when using \aboveenvbreak and
49835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \afterenvbreak, temporarily make \parskip 0.
49845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
49855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\quotation{%
49865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
49875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parindent=0pt
49885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
49895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
49905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\nonarrowing\relax
49915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\leftskip by \lispnarrowing
49925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\rightskip by \lispnarrowing
49935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \exdentamount = \lispnarrowing
49945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\nonarrowing = \relax
49955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
49965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parsearg\quotationlabel
49975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
49985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
49995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We have retained a nonzero parskip for the environment, since we're
50005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% doing normal filling.
50015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Equotation{%
50035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \par
50045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\quotationauthor\undefined\else
50055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % indent a bit.
50065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
50075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
50085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\parskip=0pt \afterenvbreak}%
50095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
50105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
50115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If we're given an argument, typeset it in bold with a colon after.
50125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\quotationlabel#1{%
50135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#1}%
50145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\empty \else
50155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    {\bf #1: }%
50165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
50175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
50185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
50195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
50205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
50215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If we want to allow any <char> as delimiter,
50225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we need the curly braces so that makeinfo sees the @verb command, eg:
50235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
50245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
50265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth] p.344; only we need to do the other characters Texinfo sets
50285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% active too.  Otherwise, they get lost as the first character on a
50295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% verbatim line.
50305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dospecials{%
50315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \do\ \do\\\do\{\do\}\do\$\do\&%
50325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
50335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \do\<\do\>\do\|\do\@\do+\do\"%
50345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
50355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth] p. 380
50375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\uncatcodespecials{%
50385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\do##1{\catcode`##1=\other}\dospecials}
50395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth] pp. 380,381,391
50415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Disable Spanish ligatures ?` and !` of \tt font
50425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup
50435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\`=\active\gdef`{\relax\lq}
50445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup
50455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Setup for the @verb command.
50475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Eight spaces for a tab
50495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup
50505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^I=\active
50515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
50525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup
50535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setupverb{%
50555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tt  % easiest (and conventionally used) font for verbatim
50565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\par{\leavevmode\endgraf}%
50575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\`=\active
50585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tabeightspaces
50595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Respect line breaks,
50605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % print special symbols as themselves, and
50615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % make each space count
50625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % must do in this order:
50635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \obeylines \uncatcodespecials \sepspaces
50645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
50655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
50665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Setup for the @verbatim environment
50675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Real tab expansion
50695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
50705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
50715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\starttabbox{\setbox0=\hbox\bgroup}
50725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup
50735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^I=\active
50745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\tabexpand{%
50755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \catcode`\^^I=\active
50765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def^^I{\leavevmode\egroup
50775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \dimen0=\wd0 % the width so far, or since the previous tab
50785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \divide\dimen0 by\tabw
50795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
50805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
50815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \wd0=\dimen0 \box0 \starttabbox
50825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }%
50835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
50845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup
50855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setupverbatim{%
50865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \nonfillstart
50875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\leftskip by -\defbodyindent
50885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Easiest (and conventionally used) font for verbatim
50895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tt
50905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\par{\leavevmode\egroup\box0\endgraf}%
50915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\`=\active
50925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tabexpand
50935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Respect line breaks,
50945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % print special symbols as themselves, and
50955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % make each space count
50965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % must do in this order:
50975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \obeylines \uncatcodespecials \sepspaces
50985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \everypar{\starttabbox}%
50995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
51005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
51015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do the @verb magic: verbatim text is quoted by unique
51025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% delimiter characters.  Before first delimiter expect a
51035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% right brace, after last delimiter expect closing brace:
51045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%    \def\doverb'{'<char>#1<char>'}'{#1}
51065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% [Knuth] p. 382; only eat outer {}
51085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup
51095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
51105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
51115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup
51125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\verb{\begingroup\setupverb\doverb}
51145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Do the @verbatim magic: define the macro \doverbatim so that
51175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the (first) argument ends when '@end verbatim' is reached, ie:
51185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%     \def\doverbatim#1@end verbatim{#1}
51205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For Texinfo it's a lot easier than for LaTeX,
51225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
51235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we need not redefine '\', '{' and '}'.
51245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Inspired by LaTeX's verbatim command set [latex.ltx]
51265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\begingroup
51285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\ =\active
51295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \obeylines %
51305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % ignore everything up to the first ^^M, that's the newline at the end
51315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % of the @verbatim input line itself.  Otherwise we get an extra blank
51325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % line in the output.
51335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
51345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We really want {...\end verbatim} in the body of the macro, but
51355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % without the active space; thus we have to use \xdef and \gobble.
51365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup
51375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envdef\verbatim{%
51395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \setupverbatim\doverbatim
51405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
51415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\Everbatim = \afterenvbreak
51425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
51435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
51445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @verbatiminclude FILE - insert text of file in verbatim environment.
51455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
51475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doverbatiminclude#1{%
51495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
51505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \makevalueexpandable
51515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \setupverbatim
51525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \input #1
51535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \afterenvbreak
51545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
51555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
51565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
51575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @copying ... @end copying.
51585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Save the text away for @insertcopying later.
51595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We save the uninterpreted tokens, rather than creating a box.
51615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Saving the text in a box would be much easier, but then all the
51625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% typesetting commands (@smallbook, font changes, etc.) have to be done
51635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% beforehand -- and a) we want @copying to be done first in the source
51645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% file; b) letting users define the frontmatter in as flexible order as
51655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% possible is very desirable.
51665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
51685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
51695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
51705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\insertcopying{%
51715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \begingroup
51725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \parindent = 0pt  % paragraph indentation looks wrong on title page
51735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \scanexp\copyingtext
51745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup
51755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
51765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
51775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{defuns,}
51785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defun etc.
51795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
51805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\defbodyindent \defbodyindent=.4in
51815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\defargsindent \defargsindent=50pt
51825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newskip\deflastargmargin \deflastargmargin=18pt
51835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
51845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Start the processing of @deffn:
51855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startdefun{%
51865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\lastpenalty<10000
51875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \medbreak
51885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
51895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If there are two @def commands in a row, we'll have a \nobreak,
51905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % which is there to keep the function description together with its
51915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % header.  But if there's nothing but headers, we need to allow a
51925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % break somewhere.  Check specifically for penalty 10002, inserted
51935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % by \defargscommonending, instead of 10000, since the sectioning
51945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % commands also insert a nobreak penalty, and we don't want to allow
51955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % a break between a section heading and a defun.
51965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % 
51975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum\lastpenalty=10002 \penalty2000 \fi
51985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
51995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Similarly, after a section heading, do not allow a break.
52005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % But do insert the glue.
52015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \medskip  % preceded by discardable penalty, so not a breakpoint
52025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
52035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
52045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parindent=0in
52055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\leftskip by \defbodyindent
52065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \exdentamount=\defbodyindent
52075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
52085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dodefunx#1{%
52105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % First, check whether we are in the right environment:
52115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \checkenv#1%
52125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
52135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % As above, allow line break if we have multiple x headers in a row.
52145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % It's not a great place, though.
52155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\lastpenalty=10002 \penalty3000 \fi
52165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
52175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % And now, it's time to reuse the body of the original defun:
52185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\gobbledefun#1%
52195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
52205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\gobbledefun#1\startdefun{}
52215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \printdefunline \deffnheader{text}
52235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
52245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\printdefunline#1#2{%
52255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \begingroup
52265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % call \deffnheader:
52275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    #1#2 \endheader
52285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % common ending:
52295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \interlinepenalty = 10000
52305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\rightskip by 0pt plus 1fil
52315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgraf
52325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nobreak\vskip -\parskip
52335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \penalty 10002  % signal to \startdefun and \dodefunx
52345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Some of the @defun-type tags do not enable magic parentheses,
52355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % rendering the following check redundant.  But we don't optimize.
52365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \checkparencounts
52375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup
52385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
52395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Edefun{\endgraf\medbreak}
52415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
52435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the only thing remainnig is to define \deffnheader.
52445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
52455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makedefun#1{%
52465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\let\csname E#1\endcsname = \Edefun
52475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\temp{\noexpand\domakedefun
52485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
52495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \temp
52505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
52515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \domakedefun \deffn \deffnx \deffnheader
52535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
52545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define \deffn and \deffnx, without parameters.
52555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deffnheader has to be defined explicitly.
52565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
52575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\domakedefun#1#2#3{%
52585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \envdef#1{%
52595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \startdefun
52605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \parseargusing\activeparens{\printdefunline#3}%
52615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
52625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def#2{\dodefunx#1}%
52635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def#3%
52645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
52655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Untyped functions:
52675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deffn category name args
52695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deffn}{\deffngeneral{}}
52705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deffn category class name args
52725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
52735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \defopon {category on}class name args
52755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
52765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deffngeneral {subind}category name args
52785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
52795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deffngeneral#1#2 #3 #4\endheader{%
52805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
52815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dosubind{fn}{\code{#3}}{#1}%
52825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
52835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
52845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Typed functions:
52865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftypefn category type name args
52885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypefn}{\deftypefngeneral{}}
52895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftypeop category class type name args
52915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
52925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deftypeopon {category on}class type name args
52945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
52955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
52965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deftypefngeneral {subind}category type name args
52975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
52985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
52995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dosubind{fn}{\code{#4}}{#1}%
53005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
53015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
53025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Typed variables:
53045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftypevr category type var args
53065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypevr}{\deftypecvgeneral{}}
53075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftypecv category class type var args
53095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
53105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deftypecvof {category of}class type var args
53125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
53135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \deftypecvgeneral {subind}category type var args
53155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
53165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
53175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dosubind{vr}{\code{#4}}{#1}%
53185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
53195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
53205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Untyped variables:
53225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defvr category var args
53245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
53255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @defcv category class var args
53275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
53285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \defcvof {category of}class var args
53305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
53315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%%% Type:
53335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @deftp category name args
53345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftp}#1 #2 #3\endheader{%
53355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \doind{tp}{\code{#2}}%
53365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \defname{#1}{}{#2}\defunargs{#3\unskip}%
53375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
53385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Remaining @defun-like shortcuts:
53405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defun}{\deffnheader{\putwordDeffunc} }
53415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defmac}{\deffnheader{\putwordDefmac} }
53425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defspec}{\deffnheader{\putwordDefspec} }
53435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
53445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defvar}{\defvrheader{\putwordDefvar} }
53455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defopt}{\defvrheader{\putwordDefopt} }
53465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
53475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defmethod}{\defopon\putwordMethodon}
53485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
53495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
53505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
53515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
53525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \defname, which formats the name of the @def (not the args).
53535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the category, such as "Function".
53545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #2 is the return type, if any.
53555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 is the function name.
53565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
53575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We are followed by (but not passed) the arguments, if any.
53585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
53595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defname#1#2#3{%
53605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Get the values of \leftskip and \rightskip as they were outside the @def...
53615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\leftskip by -\defbodyindent
53625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
53635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % How we'll format the type name.  Putting it in brackets helps
53645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % distinguish it from the body text that may end up on the next line
53655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % just below it.
53665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#1}%
53675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
53685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
53695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Figure out line sizes for the paragraph shape.
53705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % The first line needs space for \box0; but if \rightskip is nonzero,
53715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % we need only space for the part of \box0 which exceeds it:
53725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
53735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % The continuations:
53745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
53755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % (plain.tex says that \dimen1 should be used only as global.)
53765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parshape 2 0in \dimen0 \defargsindent \dimen2
53775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
53785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Put the type name to the right margin.
53795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \noindent
53805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hbox to 0pt{%
53815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \hfil\box0 \kern-\hsize
53825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \hsize has to be shortened this way:
53835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \kern\leftskip
53845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Intentionally do not respect \rightskip, since we need the space.
53855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
53865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
53875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Allow all lines to be underfull without complaint:
53885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tolerance=10000 \hbadness=10000
53895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \exdentamount=\defbodyindent
53905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
53915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % defun fonts. We use typewriter by default (used to be bold) because:
53925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % . we're printing identifiers, they should be in tt in principle.
53935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % . in languages with many accents, such as Czech or French, it's
53945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %   common to leave accents off identifiers.  The result looks ok in
53955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %   tt, but exceedingly strange in rm.
53965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % . we don't want -- and --- to be treated as ligatures.
53975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % . this still does not fix the ?` and !` ligatures, but so far no
53985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %   one has made identifiers using them :).
53995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \df \tt
54005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\temp{#2}% return value type
54015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\temp\empty\else \tclose{\temp} \fi
54025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    #3% output function name
54035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
54045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\rm\enskip}% hskip 0.5 em of \tenrm
54055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
54065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \boldbrax
54075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % arguments will be output next, if any.
54085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Print arguments in slanted roman (not ttsl), inconsistently with using
54115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% tt for the name.  This is because literal text is sometimes needed in
54125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the argument list (groff manual), and ttsl and tt are not very
54135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% distinguishable.  Prevent hyphenation at `-' chars.
54145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
54155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defunargs#1{%
54165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % use sl by default (not ttsl),
54175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % tt for the names.
54185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \df \sl \hyphenchar\font=0
54195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
54205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % On the other hand, if an argument has two dashes (for instance), we
54215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % want a way to get ttsl.  Let's try @var for that.
54225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\var=\ttslanted
54235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  #1%
54245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \sl\hyphenchar\font=45
54255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We want ()&[] to print specially on the defun line.
54285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
54295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\activeparens{%
54305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\(=\active \catcode`\)=\active
54315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\[=\active \catcode`\]=\active
54325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\&=\active
54335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Make control sequences which act like normal parenthesis chars.
54365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\lparen = ( \let\rparen = )
54375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Be sure that we always have a definition for `(', etc.  For example,
54395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% if the fn name has parens in it, \boldbrax will not be in effect yet,
54405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% so TeX would otherwise complain about undefined control sequence.
54415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
54425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \activeparens
54435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let(=\lparen \global\let)=\rparen
54445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let[=\lbrack \global\let]=\rbrack
54455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\let& = \&
54465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
54485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\magicamp{\let&=\amprm}
54495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\parencount
54525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If we encounter &foo, then turn on ()-hacking afterwards
54545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifampseen
54555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\amprm#1 {\ampseentrue{\bf\&#1 }}
54565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parenfont{%
54585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifampseen
54595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % At the first level, print parens in roman,
54605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % otherwise use the default font.
54615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum \parencount=1 \rm \fi
54625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
54635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % The \sf parens (in \boldbrax) actually are a little bolder than
54645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % the contained text.  This is especially needed for [ and ] .
54655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \sf
54665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
54675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\infirstlevel#1{%
54695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifampseen
54705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifnum\parencount=1
54715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      #1%
54725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
54735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
54745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\bfafterword#1 {#1 \bf}
54765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\opnr{%
54785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\parencount by 1
54795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\parenfont(}%
54805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \infirstlevel \bfafterword
54815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\clnr{%
54835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\parenfont)}%
54845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \infirstlevel \sl
54855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\parencount by -1
54865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\brackcount
54895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\lbrb{%
54905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\brackcount by 1
54915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\bf[}%
54925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rbrb{%
54945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {\bf]}%
54955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\brackcount by -1
54965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
54975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
54985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\checkparencounts{%
54995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\parencount=0 \else \badparencount \fi
55005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\brackcount=0 \else \badbrackcount \fi
55015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
55025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\badparencount{%
55035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \errmessage{Unbalanced parentheses in @def}%
55045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\parencount=0
55055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
55065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\badbrackcount{%
55075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \errmessage{Unbalanced square braces in @def}%
55085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\brackcount=0
55095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
55105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{macros,}
55135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @macro.
55145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% To do this right we need a feature of e-TeX, \scantokens,
55165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which we arrange to emulate with a temporary file in ordinary TeX.
55175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifx\eTeXversion\undefined
55185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \newwrite\macscribble
55195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\scantokens#1{%
55205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \toks0={#1}%
55215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \immediate\openout\macscribble=\jobname.tmp
55225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \immediate\write\macscribble{\the\toks0}%
55235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \immediate\closeout\macscribble
55245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \input \jobname.tmp
55255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }
55265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi
55275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scanmacro#1{%
55295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \begingroup
55305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \newlinechar`\^^M
55315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\xeatspaces\eatspaces
55325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Undo catcode changes of \startcontents and \doprintindex
55335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % When called from @insertcopying or (short)caption, we need active
55345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % backslash to get it printed correctly.  Previously, we had
55355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \catcode`\\=\other instead.  We'll see whether a problem appears
55365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % with macro expansion.				--kasal, 19aug04
55375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
55385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % ... and \example
55395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \spaceisspace
55405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
55415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Append \endinput to make sure that TeX does not see the ending newline.
55425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
55435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % I've verified that it is necessary both for e-TeX and for ordinary TeX
55445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %							--kasal, 29nov03
55455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \scantokens{#1\endinput}%
55465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup
55475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
55485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scanexp#1{%
55505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\temp{\noexpand\scanmacro{#1}}%
55515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \temp
55525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
55535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\paramno   % Count of parameters
55555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newtoks\macname    % Macro name
55565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifrecursive  % Is it recursive?
55575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macrolist{}    % List of all defined macros in the form
55585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    % \do\macro1\do\macro2...
55595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Utility routines.
55615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This does \let #1 = #2, with \csnames; that is,
55625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%   \let \csname#1\endcsname = \csname#2\endcsname
55635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (except of course we have to play expansion games).
55645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
55655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\cslet#1#2{%
55665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\let
55675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \csname#1\expandafter\endcsname
55685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \csname#2\endcsname
55695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
55705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Trim leading and trailing spaces off a string.
55725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Concepts from aro-bend problem 15 (see CTAN).
55735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\@=11
55745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
55755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
55765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
55775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unbrace#1{#1}
55785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\unbrace{\gdef\trim@@@ #1 } #2@{#1}
55795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
55805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Trim a single trailing ^^M off a string.
55825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\^^M=\other \catcode`\Q=3%
55835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\eatcr #1{\eatcra #1Q^^MQ}%
55845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
55855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\eatcrb#1Q#2Q{#1}%
55865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
55875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Macro bodies are absorbed as an argument in a context where
55895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% all characters are catcode 10, 11 or 12, except \ which is active
55905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (as in normal texinfo). It is necessary to change the definition of \.
55915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It's necessary to have hard CRs when the macro is executed. This is
55935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% done by  making ^^M (\endlinechar) catcode 12 when reading the macro
55945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% body, and then making it the \newlinechar in \scanmacro.
55955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
55965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scanctxt{%
55975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\"=\other
55985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\+=\other
55995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\<=\other
56005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\>=\other
56015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\@=\other
56025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^=\other
56035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\_=\other
56045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\|=\other
56055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\~=\other
56065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
56075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\scanargctxt{%
56095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \scanctxt
56105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\\=\other
56115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^M=\other
56125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
56135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macrobodyctxt{%
56155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \scanctxt
56165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\{=\other
56175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\}=\other
56185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^M=\other
56195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \usembodybackslash
56205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
56215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macroargctxt{%
56235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \scanctxt
56245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\\=\other
56255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
56265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \mbodybackslash is the definition of \ in @macro bodies.
56285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It maps \foo\ => \csname macarg.foo\endcsname => #N
56295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% where N is the macro parameter number.
56305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We define \csname macarg.\endcsname to be \realbackslash, so
56315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \\ in macro replacement text gets you a backslash.
56325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`@=0 @catcode`@\=@active
56345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @gdef@usembodybackslash{@let\=@mbodybackslash}
56355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
56365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
56375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\expandafter\def\csname macarg.\endcsname{\realbackslash}
56385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macro{\recursivefalse\parsearg\macroxxx}
56405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\rmacro{\recursivetrue\parsearg\macroxxx}
56415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\macroxxx#1{%
56435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \getargs{#1}%           now \macname is the macname and \argl the arglist
56445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\argl\empty       % no arguments
56455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \paramno=0%
56465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
56475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \expandafter\parsemargdef \argl;%
56485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
56495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \if1\csname ismacro.\the\macname\endcsname
56505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \message{Warning: redefining \the\macname}%
56515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
56525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \expandafter\ifx\csname \the\macname\endcsname \relax
56535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \else \errmessage{Macro name \the\macname\space already defined}\fi
56545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \global\cslet{macsave.\the\macname}{\the\macname}%
56555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
56565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     % Add the macroname to \macrolist
56575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \toks0 = \expandafter{\macrolist\do}%
56585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \xdef\macrolist{\the\toks0
56595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       \expandafter\noexpand\csname\the\macname\endcsname}%
56605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
56615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \begingroup \macrobodyctxt
56625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifrecursive \expandafter\parsermacbody
56635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else \expandafter\parsemacbody
56645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi}
56655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\unmacro{%
56675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \if1\csname ismacro.#1\endcsname
56685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\cslet{#1}{macsave.#1}%
56695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\expandafter\let \csname ismacro.#1\endcsname=0%
56705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Remove the macro name from \macrolist:
56715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \begingroup
56725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\let\csname#1\endcsname \relax
56735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\do\unmacrodo
56745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \xdef\macrolist{\macrolist}%
56755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup
56765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
56775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \errmessage{Macro #1 not defined}%
56785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
56795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
56805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Called by \do from \dounmacro on each macro.  The idea is to omit any
56825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% macro definitions that have been changed to \relax.
56835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
56845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\unmacrodo#1{%
56855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx#1\relax
56865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % remove this
56875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
56885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \noexpand\do \noexpand #1%
56895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
56905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
56915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
56925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This makes use of the obscure feature that if the last token of a
56935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% <parameter list> is #, then the preceding argument is delimited by
56945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% an opening brace, and that opening brace is not consumed.
56955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getargs#1{\getargsxxx#1{}}
56965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
56975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getmacname #1 #2\relax{\macname={#1}}
56985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getmacargs#1{\def\argl{#1}}
56995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
57005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Parse the optional {params} list.  Set up \paramno and \paramlist
57015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% so \defmacro knows what to do.  Define \macarg.blah for each blah
57025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% in the params list, to be ##N where N is the position in that list.
57035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% That gets used by \mbodybackslash (above).
57045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
57055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We need to get `macro parameter char #' into several definitions.
57065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The technique used is stolen from LaTeX:  let \hash be something
57075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% unexpandable, insert that wherever you need a #, and then redefine
57085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% it to # just before using the token list produced.
57095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
57105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The same technique is used to protect \eatspaces till just before
57115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the macro is used.
57125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
57135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
57145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
57155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\parsemargdefxxx#1,{%
57165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \if#1;\let\next=\relax
57175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else \let\next=\parsemargdefxxx
57185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \advance\paramno by 1%
57195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
57205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        {\xeatspaces{\hash\the\paramno}}%
57215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \edef\paramlist{\paramlist\hash\the\paramno,}%
57225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi\next}
57235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
57245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These two commands read recursive and nonrecursive macro bodies.
57255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (They're different since rec and nonrec macros end differently.)
57265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
57275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\long\def\parsemacbody#1@end macro%
57285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
57295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\long\def\parsermacbody#1@end rmacro%
57305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
57315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
57325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This defines the macro itself. There are six cases: recursive and
57335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% nonrecursive macros of zero, one, and many arguments.
57345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Much magic with \expandafter here.
57355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \xdef is used so that macro definitions will survive the file
57365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% they're defined in; @include reads the file inside a group.
57375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defmacro{%
57385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\hash=##% convert placeholders to macro parameter chars
57395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifrecursive
57405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifcase\paramno
57415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % 0
57425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
57435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \noexpand\scanmacro{\temp}}%
57445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \or % 1
57455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
57465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \bgroup\noexpand\macroargctxt
57475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \noexpand\braceorline
57485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
57495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
57505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \egroup\noexpand\scanmacro{\temp}}%
57515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else % many
57525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
57535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \bgroup\noexpand\macroargctxt
57545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \noexpand\csname\the\macname xx\endcsname}%
57555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
57565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
57575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\expandafter
57585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef
57595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\expandafter
57605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \csname\the\macname xxx\endcsname
57615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
57625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
57635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
57645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifcase\paramno
57655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % 0
57665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
57675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \noexpand\norecurse{\the\macname}%
57685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \noexpand\scanmacro{\temp}\egroup}%
57695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \or % 1
57705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
57715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \bgroup\noexpand\macroargctxt
57725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \noexpand\braceorline
57735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
57745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
57755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \egroup
57765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \noexpand\norecurse{\the\macname}%
57775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \noexpand\scanmacro{\temp}\egroup}%
57785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else % many
57795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
57805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \bgroup\noexpand\macroargctxt
57815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         \expandafter\noexpand\csname\the\macname xx\endcsname}%
57825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
57835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
57845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\expandafter
57855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\xdef
57865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\expandafter
57875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \csname\the\macname xxx\endcsname
57885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \paramlist{%
57895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \egroup
57905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \noexpand\norecurse{\the\macname}%
57915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \noexpand\scanmacro{\temp}\egroup}%
57925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
57935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi}
57945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
57955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
57965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
57975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \braceorline decides whether the next nonwhitespace character is a
57985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% {.  If so it reads up to the closing }, if not, it reads the whole
57995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% line.  Whatever was read is then fed to the next control sequence
58005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% as an argument (by \parsebrace or \parsearg)
58015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
58025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\braceorlinexxx{%
58035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\nchar\bgroup\else
58045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\parsearg
58055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi \next}
58065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We want to disable all macros during \shipout so that they are not
58085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% expanded by \write.
58095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
58105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\next{\macrolist}\expandafter\endgroup\next}
58115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% For \indexnofonts, we need to get rid of all macros, leaving only the
58135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% arguments (if present).  Of course this is not nearly correct, but it
58145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% is the best we can do for now.  makeinfo does not expand macros in the
58155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% argument to @deffn, which ends up writing an index entry, and texindex
58165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% isn't prepared for an index sort entry that starts with \.
58175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
58185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Since macro invocations are followed by braces, we can just redefine them
58195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to take a single TeX argument.  The case of a macro invocation that
58205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% goes to end-of-line is not handled.
58215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 
58225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\emptyusermacros{\begingroup
58235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\do##1{\let\noexpand##1=\noexpand\asis}%
58245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\next{\macrolist}\expandafter\endgroup\next}
58255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @alias.
58285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We need some trickery to remove the optional spaces around the equal
58295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% sign.  Just make them active and then expand them all to nothing.
58305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\alias{\parseargusing\obeyspaces\aliasxxx}
58315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\aliasxxx #1{\aliasyyy#1\relax}
58325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\aliasyyy #1=#2\relax{%
58335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
58345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\let\obeyedspace=\empty
58355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
58365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
58375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \next
58385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
58395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{cross references,}
58425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newwrite\auxfile
58445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifhavexrefs    % True if xref values are known.
58465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
58475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @inforef is relatively simple.
58495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inforef #1{\inforefzzz #1,,,,**}
58505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
58515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  node \samp{\ignorespaces#1{}}}
58525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @node's only job in TeX is to define \lastnode, which is used in
58545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% cross-references.  The @node line might or might not have commas, and
58555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% might or might not have spaces before the first comma, like:
58565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @node foo , bar , ...
58575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We don't want such trailing spaces in the node name.
58585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
58595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
58605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
58615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% also remove a trailing comma, in case of something like this:
58625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @node Help-Cross,  ,  , Cross-refs
58635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
58645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
58655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\nwnode=\node
58675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\lastnode=\empty
58685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Write a cross-reference definition for the current node.  #1 is the
58705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% type (Ynumbered, Yappendix, Ynothing).
58715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
58725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\donoderef#1{%
58735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\lastnode\empty\else
58745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \setref{\lastnode}{#1}%
58755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\let\lastnode=\empty
58765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
58775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
58785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @anchor{NAME} -- define xref target at arbitrary point.
58805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
58815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount\savesfregister
58825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
58835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
58845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
58855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
58865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
58875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
58885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% anchor), which consists of three parts:
58895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 1) NAME-title - the current sectioning name taken from \thissection,
58905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%                 or the anchor name.
58915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 2) NAME-snt   - section number and type, passed as the SNT arg, or
58925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%                 empty for anchors.
58935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 3) NAME-pg    - the page number.
58945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
58955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is called from \donoderef, \anchor, and \dofloat.  In the case of
58965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% floats, there is an additional part, which is not written here:
58975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4) NAME-lof   - the text as it should appear in a @listoffloats.
58985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
58995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setref#1#2{%
59005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \pdfmkdest{#1}%
59015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \iflinks
59025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    {%
59035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \atdummies  % preserve commands, but don't expand them
59045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \turnoffactive
59055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \otherbackslash
59065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \edef\writexrdef##1##2{%
59075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
59085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  ##1}{##2}}% these are parameters of \writexrdef
59095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      }%
59105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \toks0 = \expandafter{\thissection}%
59115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \immediate \writexrdef{title}{\the\toks0 }%
59125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
59135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \writexrdef{pg}{\folio}% will be written later, during \shipout
59145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }%
59155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
59165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
59175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
59185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
59195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the node name, #2 the name of the Info cross-reference, #3 the printed
59205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% node name, #4 the name of the Info file, #5 the name of the printed
59215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% manual.  All but the node name can be omitted.
59225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
59235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
59245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
59255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ref#1{\xrefX[#1,,,,,,,]}
59265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
59275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \unsepspaces
59285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\printedmanual{\ignorespaces #5}%
59295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\printedrefname{\ignorespaces #3}%
59305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox1=\hbox{\printedmanual\unskip}%
59315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0=\hbox{\printedrefname\unskip}%
59325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifdim \wd0 = 0pt
59335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % No printed node name was explicitly given.
59345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
59355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Use the node name inside the square brackets.
59365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \def\printedrefname{\ignorespaces #1}%
59375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
59385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Use the actual chapter/section title appear inside
59395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % the square brackets.  Use the real section title if we have it.
59405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifdim \wd1 > 0pt
59415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % It is in another manual, so we don't have it.
59425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \def\printedrefname{\ignorespaces #1}%
59435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \else
59445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \ifhavexrefs
59455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          % We know the real title if we have the xref values.
59465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \def\printedrefname{\refx{#1-title}{}}%
59475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \else
59485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          % Otherwise just copy the Info node name.
59495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \def\printedrefname{\ignorespaces #1}%
59505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \fi%
59515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
59525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
59535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
59545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
59555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Make link in pdf output.
59565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifpdf
59575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \leavevmode
59585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \getfilename{#4}%
59595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    {\turnoffactive \otherbackslash
59605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \ifnum\filenamelength>0
59615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       \startlink attr{/Border [0 0 0]}%
59625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         goto file{\the\filename.pdf} name{#1}%
59635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \else
59645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       \startlink attr{/Border [0 0 0]}%
59655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project         goto name{\pdfmkpgn{#1}}%
59665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \fi
59675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }%
59685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \linkcolor
59695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
59705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
59715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Float references are printed completely differently: "Figure 1.2"
59725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % instead of "[somenode], p.3".  We distinguish them by the
59735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % LABEL-title being set to a magic string.
59745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
59755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Have to otherify everything special to allow the \csname to
59765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % include an _ in the xref name, etc.
59775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \indexnofonts
59785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \turnoffactive
59795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \otherbackslash
59805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
59815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \csname XR#1-title\endcsname
59825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
59835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \iffloat\Xthisreftitle
59845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If the user specified the print name (third arg) to the ref,
59855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % print it instead of our usual "Figure 1.2".
59865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifdim\wd0 = 0pt
59875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \refx{#1-snt}%
59885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
59895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \printedrefname
59905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
59915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
59925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % if the user also gave the printed manual name (fifth arg), append
59935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % "in MANUALNAME".
59945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifdim \wd1 > 0pt
59955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \space \putwordin{} \cite{\printedmanual}%
59965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
59975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
59985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % node/anchor (non-float) references.
59995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
60005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
60015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % insert empty discretionaries after hyphens, which means that it will
60025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % not find a line break at a hyphen in a node names.  Since some manuals
60035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % are best written with fairly long node names, containing hyphens, this
60045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % is a loss.  Therefore, we give the text of the node name again, so it
60055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % is as if TeX is seeing it for the first time.
60065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifdim \wd1 > 0pt
60075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
60085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
60095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % _ (for example) has to be the character _ for the purposes of the
60105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % control sequence corresponding to the node, but it has to expand
60115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % into the usual \leavevmode...\vrule stuff for purposes of
60125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % printing. So we \turnoffactive for the \refx-snt, back on for the
60135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % printing, back off for the \refx-pg.
60145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      {\turnoffactive \otherbackslash
60155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       % Only output a following space if the -snt ref is nonempty; for
60165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       % @unnumbered and @anchor, it won't be.
60175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
60185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
60195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      }%
60205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % output the `[mynode]' via a macro so it can be overridden.
60215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \xrefprintnodename\printedrefname
60225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
60235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % But we always want a comma and a space:
60245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      ,\space
60255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
60265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % output the `page 3'.
60275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
60285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
60295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
60305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endlink
60315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup}
60325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
60335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This macro is called from \xrefX for the `[nodename]' part of xref
60345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% output.  It's a separate macro only so it can be changed more easily,
60355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% since square brackets don't work well in some documents.  Particularly
60365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% one that Bob is working on :).
60375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
60385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xrefprintnodename#1{[#1]}
60395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
60405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Things referred to by \setref.
60415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
60425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ynothing{}
60435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yomitfromtoc{}
60445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Ynumbered{%
60455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\secno=0
60465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \putwordChapter@tie \the\chapno
60475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else \ifnum\subsecno=0
60485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \putwordSection@tie \the\chapno.\the\secno
60495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else \ifnum\subsubsecno=0
60505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
60515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
60525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
60535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi\fi\fi
60545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
60555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yappendix{%
60565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifnum\secno=0
60575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \putwordAppendix@tie @char\the\appendixno{}%
60585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else \ifnum\subsecno=0
60595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     \putwordSection@tie @char\the\appendixno.\the\secno
60605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else \ifnum\subsubsecno=0
60615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
60625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
60635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \putwordSection@tie
60645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
60655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi\fi\fi
60665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
60675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
60685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
60695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If its value is nonempty, SUFFIX is output afterward.
60705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
60715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\refx#1#2{%
60725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
60735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \indexnofonts
60745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \otherbackslash
60755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\global\expandafter\let\expandafter\thisrefX
60765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \csname XR#1\endcsname
60775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
60785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\thisrefX\relax
60795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If not defined, say something at least.
60805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \angleleft un\-de\-fined\angleright
60815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \iflinks
60825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifhavexrefs
60835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \message{\linenumber Undefined cross reference `#1'.}%
60845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \else
60855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \ifwarnedxrefs\else
60865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \global\warnedxrefstrue
60875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project          \message{Cross reference values unknown; you must run TeX again.}%
60885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \fi
60895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
60905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
60915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
60925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % It's defined, so just use it.
60935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \thisrefX
60945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
60955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  #2% Output the suffix in any case.
60965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
60975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
60985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is the macro invoked by entries in the aux file.  Usually it's
60995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% just a \def (we prepend XR to the control sequence name to avoid
61005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% collisions).  But if this is a float type, we have more work to do.
61015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
61025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\xrdef#1#2{%
61035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
61045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
61055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Was that xref control sequence that we just defined for a float?
61065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\iffloat\csname XR#1\endcsname
61075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % it was a float, and we have the (safe) float type in \iffloattype.
61085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\let\expandafter\floatlist
61095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \csname floatlist\iffloattype\endcsname
61105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
61115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Is this the first time we've seen this float type?
61125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\ifx\floatlist\relax
61135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \toks0 = {\do}% yes, so just \do
61145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
61155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % had it before, so preserve previous elements in list.
61165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \toks0 = \expandafter{\floatlist\do}%
61175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
61185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
61195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Remember this xref in the control sequence \floatlistFLOATTYPE,
61205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % for later use in \listoffloats.
61215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
61225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
61235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
61245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
61255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Read the last existing aux file, if any.  No error if none exists.
61265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
61275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\tryauxfile{%
61285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \openin 1 \jobname.aux
61295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifeof 1 \else
61305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \readauxfile
61315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \global\havexrefstrue
61325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
61335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \closein 1
61345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
61355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
61365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\readauxfile{\begingroup
61375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^@=\other
61385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^A=\other
61395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^B=\other
61405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^C=\other
61415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^D=\other
61425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^E=\other
61435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^F=\other
61445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^G=\other
61455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^H=\other
61465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^K=\other
61475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^L=\other
61485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^N=\other
61495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^P=\other
61505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^Q=\other
61515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^R=\other
61525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^S=\other
61535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^T=\other
61545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^U=\other
61555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^V=\other
61565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^W=\other
61575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^X=\other
61585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^Z=\other
61595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^[=\other
61605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^\=\other
61615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^]=\other
61625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^^=\other
61635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^_=\other
61645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
61655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
61665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % supported in the main text, it doesn't seem desirable.  Furthermore,
61675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % that is not enough: for node names that actually contain a ^
61685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % character, we would end up writing a line like this: 'xrdef {'hat
61695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
61705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % argument, and \hat is not an expandable control sequence.  It could
61715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % all be worked out, but why?  Either we support ^^ or we don't.
61725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
61735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % The other change necessary for this was to define \auxhat:
61745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
61755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % and then to call \auxhat in \setq.
61765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
61775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^=\other
61785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
61795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Special characters.  Should be turned off anyway, but...
61805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\~=\other
61815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\[=\other
61825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\]=\other
61835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\"=\other
61845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\_=\other
61855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\|=\other
61865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\<=\other
61875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\>=\other
61885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\$=\other
61895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\#=\other
61905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\&=\other
61915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\%=\other
61925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
61935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
61945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % This is to support \ in node names and titles, since the \
61955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % characters end up in a \csname.  It's easier than
61965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % leaving it active and making its active definition an actual \
61975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % character.  What I don't understand is why it works in the *value*
61985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % of the xrdef.  Seems like it should be a catcode12 \, and that
61995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % should not typeset properly.  But it works, so I'm moving on for
62005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % now.  --karl, 15jan04.
62015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\\=\other
62025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
62035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Make the characters 128-255 be printing characters.
62045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
62055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \count 1=128
62065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\loop{%
62075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \catcode\count 1=\other
62085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \advance\count 1 by 1
62095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifnum \count 1<256 \loop \fi
62105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    }%
62115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
62125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
62135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % @ is our escape character in .aux files, and we need braces.
62145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\{=1
62155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\}=2
62165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\@=0
62175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
62185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \input \jobname.aux
62195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup}
62205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
62215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
62225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{insertions,}
62235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% including footnotes.
62245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
62255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newcount \footnoteno
62265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
62275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The trailing space in the following definition for supereject is
62285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% vital for proper filling; pages come out unaligned when you do a
62295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% pagealignmacro call if that space before the closing brace is
62305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% removed. (Generally, numeric constants should always be followed by a
62315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% space to prevent strange expansion errors.)
62325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\supereject{\par\penalty -20000\footnoteno =0 }
62335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
62345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @footnotestyle is meaningful for info output only.
62355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\footnotestyle=\comment
62365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
62375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode `\@=11
62385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
62395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Auto-number footnotes.  Otherwise like plain.
62405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\footnote{%
62415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\indent=\ptexindent
62425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\noindent=\ptexnoindent
62435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \global\advance\footnoteno by \@ne
62445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\thisfootno{$^{\the\footnoteno}$}%
62455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
62465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % In case the footnote comes at the end of a sentence, preserve the
62475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % extra spacing after we do the footnote number.
62485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\@sf\empty
62495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
62505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
62515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Remove inadvertent blank space before typesetting the footnote number.
62525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \unskip
62535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \thisfootno\@sf
62545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dofootnote
62555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}%
62565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
62575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Don't bother with the trickery in plain.tex to not require the
62585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% footnote text as a parameter.  Our footnotes don't need to be so general.
62595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
62605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Oh yes, they do; otherwise, @ifset (and anything else that uses
62615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \parseargline) fails inside footnotes because the tokens are fixed when
62625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the footnote is read.  --karl, 16nov96.
62635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
62645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\gdef\dofootnote{%
62655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \insert\footins\bgroup
62665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We want to typeset this text as a normal paragraph, even if the
62675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % footnote reference occurs in (for example) a display environment.
62685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % So reset some parameters.
62695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hsize=\pagewidth
62705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \interlinepenalty\interfootnotelinepenalty
62715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \splittopskip\ht\strutbox % top baseline for broken footnotes
62725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \splitmaxdepth\dp\strutbox
62735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \floatingpenalty\@MM
62745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \leftskip\z@skip
62755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \rightskip\z@skip
62765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \spaceskip\z@skip
62775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \xspaceskip\z@skip
62785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parindent\defaultparindent
62795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
62805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \smallfonts \rm
62815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
62825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Because we use hanging indentation in footnotes, a @noindent appears
62835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % to exdent this text, so make it be a no-op.  makeinfo does not use
62845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % hanging indentation so @noindent can still be needed within footnote
62855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % text after an @example or the like (not that this is good style).
62865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\noindent = \relax
62875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
62885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Hang the footnote text off the number.  Use \everypar in case the
62895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % footnote extends for more than one paragraph.
62905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \everypar = {\hang}%
62915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \textindent{\thisfootno}%
62925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
62935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Don't crash into the line above the footnote text.  Since this
62945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % expands into a box, it must come within the paragraph, lest it
62955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % provide a place where TeX can split the footnote.
62965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \footstrut
62975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \futurelet\next\fo@t
62985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
62995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}%end \catcode `\@=11
63005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% In case a @footnote appears in a vbox, save the footnote text and create
63025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the real \insert just after the vbox finished.  Otherwise, the insertion
63035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% would be lost.
63045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Similarily, if a @footnote appears inside an alignment, save the footnote
63055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% text to a box and make the \insert when a row of the table is finished.
63065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% And the same can be done for other insert classes.  --kasal, 16nov03.
63075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Replace the \insert primitive by a cheating macro.
63095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Deeper inside, just make sure that the saved insertions are not spilled
63105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% out prematurely.
63115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
63125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\startsavinginserts{%
63135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx \insert\ptexinsert
63145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\insert\saveinsert
63155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
63165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\checkinserts\relax
63175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
63185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
63195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This \insert replacement works for both \insert\footins{foo} and
63215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
63225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
63235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\saveinsert#1{%
63245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
63255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \afterassignment\next
63265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % swallow the left brace
63275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\temp =
63285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
63295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
63305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
63315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
63335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\placesaveins#1{%
63355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
63365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    {\box#1}%
63375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
63385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% eat @SAVE -- beware, all of them have catcode \other:
63405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
63415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
63425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \gdef\gobblesave @SAVE{}
63435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
63445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% initialization:
63465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\newsaveins #1{%
63475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
63485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \next
63495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
63505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\newsaveinsX #1{%
63515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \csname newbox\endcsname #1%
63525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
63535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \checksaveins #1}%
63545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
63555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% initialize:
63575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\checkinserts\empty
63585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newsaveins\footins
63595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newsaveins\margin
63605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
63625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @image.  We use the macros from epsf.tex to support this.
63635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If epsf.tex is not installed and @image is used, we complain.
63645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
63655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Check for and read epsf.tex up front.  If we read it only at @image
63665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% time, we might be inside a group, and then its definitions would get
63675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% undone and the next image would fail.
63685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\openin 1 = epsf.tex
63695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\ifeof 1 \else
63705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Do not bother showing banner with epsf.tex v2.7k (available in
63715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % doc/epsf.tex and on ctan).
63725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\epsfannounce{\toks0 = }%
63735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \input epsf.tex
63745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\fi
63755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\closein 1
63765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
63775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We will only complain once about lack of epsf.tex.
63785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifwarnednoepsf
63795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newhelp\noepsfhelp{epsf.tex must be installed for images to
63805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  work.  It is also included in the Texinfo distribution, or you can get
63815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  it from ftp://tug.org/tex/epsf.tex.}
63825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
63835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\image#1{%
63845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\epsfbox\undefined
63855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifwarnednoepsf \else
63865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \errhelp = \noepsfhelp
63875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \errmessage{epsf.tex not found, images will be ignored}%
63885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \global\warnednoepsftrue
63895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
63905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
63915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \imagexxx #1,,,,,\finish
63925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
63935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
63945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
63955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Arguments to @image:
63965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is (mandatory) image filename; we tack on .eps extension.
63975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #2 is (optional) width, #3 is (optional) height.
63985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #4 is (ignored optional) html alt text.
63995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #5 is (ignored optional) extension.
64005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #6 is just the usual extra ignored arg for parsing this stuff.
64015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newif\ifimagevmode
64025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
64035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \catcode`\^^M = 5     % in case we're inside an example
64045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \normalturnoffactive  % allow _ et al. in names
64055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % If the image is by itself, center it.
64065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifvmode
64075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \imagevmodetrue
64085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nobreak\bigskip
64095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Usually we'll have text after the image which will insert
64105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \parskip glue, so insert it here too to equalize the space
64115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % above and below.
64125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nobreak\vskip\parskip
64135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \nobreak
64145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \line\bgroup\hss
64155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
64165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
64175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Output the image.
64185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifpdf
64195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \dopdfimage{#1}{#2}{#3}%
64205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
64215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \epsfbox itself resets \epsf?size at each figure.
64225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
64235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
64245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \epsfbox{#1.eps}%
64255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
64265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
64275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifimagevmode \hss \egroup \bigbreak \fi  % space after the image
64285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\endgroup}
64295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
64305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
64315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
64325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% etc.  We don't actually implement floating yet, we always include the
64335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% float "here".  But it seemed the best name for the future.
64345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
64355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
64365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
64375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% There may be a space before second and/or third parameter; delete it.
64385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\eatcommaspace#1, {#1,}
64395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
64405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the optional FLOATTYPE, the text label for this float, typically
64415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
64425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% this float will not be numbered and cannot be referred to.
64435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
64445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #2 is the optional xref label.  Also must be present for the float to
64455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% be referable.
64465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
64475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #3 is the optional positioning argument; for now, it is ignored.  It
64485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% will somehow specify the positions allowed to float to (here, top, bottom).
64495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
64505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We keep a separate counter for each FLOATTYPE, which we reset at each
64515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% chapter-level command.
64525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\resetallfloatnos=\empty
64535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
64545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\dofloat#1,#2,#3,#4\finish{%
64555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\thiscaption=\empty
64565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\thisshortcaption=\empty
64575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
64585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % don't lose footnotes inside @float.
64595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
64605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % BEWARE: when the floats start float, we have to issue warning whenever an
64615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % insert appears inside a float which could possibly float. --kasal, 26may04
64625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
64635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \startsavinginserts
64645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
64655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % We can't be used inside a paragraph.
64665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \par
64675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
64685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vtop\bgroup
64695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\floattype{#1}%
64705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\floatlabel{#2}%
64715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\floatloc{#3}% we do nothing with this yet.
64725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
64735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\floattype\empty
64745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\safefloattype=\empty
64755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
64765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      {%
64775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % the floattype might have accents or other special characters,
64785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % but we need to use it in a control sequence name.
64795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \indexnofonts
64805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \turnoffactive
64815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \xdef\safefloattype{\floattype}%
64825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      }%
64835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
64845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
64855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If label is given but no type, we handle that as the empty type.
64865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\floatlabel\empty \else
64875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % We want each FLOATTYPE to be numbered separately (Figure 1,
64885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Table 1, Figure 2, ...).  (And if no label, no number.)
64895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
64905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
64915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \global\advance\floatno by 1
64925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
64935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      {%
64945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % This magic value for \thissection is output by \setref as the
64955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % XREFLABEL-title value.  \xrefX uses it to distinguish float
64965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % labels (which have a completely different output format) from
64975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % node and anchor labels.  And \xrdef uses it to construct the
64985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % lists of floats.
64995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        %
65005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \edef\thissection{\floatmagic=\safefloattype}%
65015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \setref{\floatlabel}{Yfloat}%
65025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      }%
65035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
65045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
65055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % start with \parskip glue, I guess.
65065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \vskip\parskip
65075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
65085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Don't suppress indentation if a float happens to start a section.
65095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \restorefirstparagraphindent
65105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
65115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
65125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% we have these possibilities:
65135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
65145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float Foo,lbl & no caption:    Foo 1.1
65155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float Foo & @caption{Cap}:     Foo: Cap
65165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float Foo & no caption:        Foo
65175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float ,lbl & Caption{Cap}:     1.1: Cap
65185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float ,lbl & no caption:       1.1
65195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float & @caption{Cap}:         Cap
65205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @float & no caption:
65215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
65225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Efloat{%
65235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\floatident = \empty
65245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
65255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % In all cases, if we have a float type, it comes first.
65265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
65275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
65285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If we have an xref label, the number comes next.
65295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\floatlabel\empty \else
65305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifx\floattype\empty \else % if also had float type, need tie first.
65315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \appendtomacro\floatident{\tie}%
65325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
65335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % the number.
65345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
65355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
65365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
65375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Start the printed caption with what we've constructed in
65385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % \floatident, but keep it separate; we need \floatident again.
65395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \let\captionline = \floatident
65405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
65415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\thiscaption\empty \else
65425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \ifx\floatident\empty \else
65435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\appendtomacro\captionline{: }% had ident, so need a colon between
65445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \fi
65455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
65465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % caption text.
65475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \appendtomacro\captionline{\scanexp\thiscaption}%
65485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
65495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
65505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If we have anything to print, print it, with space before.
65515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Eventually this needs to become an \insert.
65525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\captionline\empty \else
65535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \vskip.5\parskip
65545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \captionline
65555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
65565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Space below caption.
65575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \vskip\parskip
65585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
65595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    %
65605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % If have an xref label, write the list of floats info.  Do this
65615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % after the caption, to avoid chance of it being a breakpoint.
65625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifx\floatlabel\empty \else
65635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Write the text that goes in the lof to the aux file as
65645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % \floatlabel-lof.  Besides \floatident, we include the short
65655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % caption if specified, else the full caption if specified, else nothing.
65665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      {%
65675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \atdummies \turnoffactive \otherbackslash
65685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % since we read the caption text in the macro world, where ^^M
65695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % is turned into a normal character, we have to scan it back, so
65705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        % we don't write the literal three characters "^^M" into the aux file.
65715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	\scanexp{%
65725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \xdef\noexpand\gtemp{%
65735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	    \ifx\thisshortcaption\empty
65745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \thiscaption
65755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	    \else
65765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      \thisshortcaption
65775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	    \fi
65785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  }%
65795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	}%
65805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
65815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  \ifx\gtemp\empty \else : \gtemp \fi}}%
65825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      }%
65835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
65845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \egroup  % end of \vtop
65855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
65865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % place the captured inserts
65875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
65885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % BEWARE: when the floats start float, we have to issue warning whenever an
65895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % insert appears inside a float which could possibly float. --kasal, 26may04
65905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
65915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \checkinserts
65925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
65935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
65945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Append the tokens #2 to the definition of macro #1, not expanding either.
65955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
65965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\appendtomacro#1#2{%
65975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\def\expandafter#1\expandafter{#1#2}%
65985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
65995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
66005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @caption, @shortcaption
66015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
66025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\caption{\docaption\thiscaption}
66035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\shortcaption{\docaption\thisshortcaption}
66045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
66055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\defcaption#1#2{\egroup \def#1{#2}}
66065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
66075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% The parameter is the control sequence identifying the counter we are
66085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% going to use.  Create it if it doesn't exist and assign it to \floatno.
66095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\getfloatno#1{%
66105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx#1\relax
66115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Haven't seen this figure type before.
66125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \csname newcount\endcsname #1%
66135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      %
66145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % Remember to reset this floatno at the next chap.
66155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \expandafter\gdef\expandafter\resetallfloatnos
66165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project        \expandafter{\resetallfloatnos #1=0 }%
66175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
66185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \let\floatno#1%
66195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
66205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
66215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
66225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
66235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% first read the @float command.
66245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
66255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
66265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
66275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Magic string used for the XREFLABEL-title value, so \xrefX can
66285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% distinguish floats from other xref types.
66295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\floatmagic{!!float!!}
66305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
66315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is the control sequence we are passed; we expand into a conditional
66325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% which is true if #1 represents a float ref.  That is, the magic
66335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \thissection value which we \setref above.
66345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
66355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\iffloat#1{\expandafter\doiffloat#1==\finish}
66365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
66375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
66385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (safe) float type for this float.  We set \iffloattype to #2.
66395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
66405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\doiffloat#1=#2=#3\finish{%
66415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\temp{#1}%
66425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\iffloattype{#2}%
66435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\temp\floatmagic
66445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
66455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
66465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
66475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
66485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\listoffloats{%
66495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \def\floattype{#1}% floattype
66505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {%
66515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % the floattype might have accents or other special characters,
66525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % but we need to use it in a control sequence name.
66535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \indexnofonts
66545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \turnoffactive
66555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \xdef\safefloattype{\floattype}%
66565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  }%
66575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
66585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
66595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
66605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifhavexrefs
66615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      % if the user said @listoffloats foo but never @float foo.
66625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \message{\linenumber No `\safefloattype' floats to list.}%
66635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
66645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
66655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \begingroup
66665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \leftskip=\tocindent  % indent these entries like a toc
66675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \let\do=\listoffloatsdo
66685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \csname floatlist\safefloattype\endcsname
66695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \endgroup
66705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
66715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
66725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
66735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is called on each entry in a list of floats.  We're passed the
66745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% xref label, in the form LABEL-title, which is how we save it in the
66755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% aux file.  We strip off the -title and look up \XRLABEL-lof, which
66765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% has the text we're supposed to typeset here.
66775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
66785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Figures without xref labels will not be included in the list (since
66795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% they won't appear in the aux file).
66805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
66815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
66825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\listoffloatsdoentry#1-title\finish{{%
66835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Can't fully expand XR#1-lof because it can contain anything.  Just
66845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % pass the control sequence.  On the other hand, XR#1-pg is just the
66855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % page number, and we want to fully expand that so we can get a link
66865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % in pdf output.
66875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
66885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
66895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % use the same \entry macro we use to generate the TOC and index.
66905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
66915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \writeentry
66925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
66935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
66945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{localization,}
66955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and i18n.
66965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
66975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @documentlanguage is usually given very early, just after
66985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @setfilename.  If done too late, it may not override everything
66995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% properly.  Single argument is the language abbreviation.
67005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% It would be nice if we could set up a hyphenation file here.
67015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
67025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\documentlanguage{%
67035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tex % read txi-??.tex file in plain TeX.
67045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Read the file if it exists.
67055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \openin 1 txi-#1.tex
67065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \ifeof 1
67075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \errhelp = \nolanghelp
67085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \errmessage{Cannot read language file txi-#1.tex}%
67095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \else
67105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      \input txi-#1.tex
67115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \fi
67125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \closein 1
67135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \endgroup
67145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
67155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newhelp\nolanghelp{The given language definition file cannot be found or
67165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectis empty.  Maybe you need to install it?  In the current directory
67175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectshould work if nowhere else does.}
67185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @documentencoding should change something in TeX eventually, most
67215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% likely, but for now just recognize it.
67225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let\documentencoding = \comment
67235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Page size parameters.
67265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
67275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\newdimen\defaultparindent \defaultparindent = 15pt
67285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chapheadingskip = 15pt plus 4pt minus 2pt
67305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\secheadingskip = 12pt plus 3pt minus 2pt
67315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\subsecheadingskip = 9pt plus 2pt minus 2pt
67325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Prevent underfull vbox error messages.
67345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\vbadness = 10000
67355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Don't be so finicky about underfull hboxes, either.
67375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\hbadness = 2000
67385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Following George Bush, just get rid of widows and orphans.
67405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\widowpenalty=10000
67415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\clubpenalty=10000
67425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
67445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% using an old version of TeX, don't do anything.  We want the amount of
67455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% stretch added to depend on the line length, hence the dependence on
67465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \hsize.  We call this whenever the paper size is set.
67475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
67485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\setemergencystretch{%
67495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifx\emergencystretch\thisisundefined
67505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    % Allow us to assign to \emergencystretch anyway.
67515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \def\emergencystretch{\dimen0}%
67525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \else
67535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \emergencystretch = .15\hsize
67545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
67555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
67565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
67585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
67595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% physical page width.
67605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
67615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% We also call \setleading{\textleading}, so the caller should define
67625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \textleading.  The caller should also set \parskip.
67635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
67645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\internalpagesizes#1#2#3#4#5#6#7#8{%
67655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \voffset = #3\relax
67665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \topskip = #6\relax
67675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \splittopskip = \topskip
67685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
67695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \vsize = #1\relax
67705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\vsize by \topskip
67715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \outervsize = \vsize
67725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\outervsize by 2\topandbottommargin
67735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \pageheight = \vsize
67745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
67755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hsize = #2\relax
67765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \outerhsize = \hsize
67775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\outerhsize by 0.5in
67785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \pagewidth = \hsize
67795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
67805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \normaloffset = #4\relax
67815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \bindingoffset = #5\relax
67825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
67835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \ifpdf
67845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \pdfpageheight #7\relax
67855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    \pdfpagewidth #8\relax
67865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \fi
67875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
67885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setleading{\textleading}
67895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
67905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parindent = \defaultparindent
67915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setemergencystretch
67925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
67935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
67945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @letterpaper (the default).
67955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\letterpaper{{\globaldefs = 1
67965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip = 3pt plus 2pt minus 1pt
67975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \textleading = 13.2pt
67985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
67995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % If page is nothing but text, make it come out even.
68005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \internalpagesizes{46\baselineskip}{6in}%
68015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\voffset}{.25in}%
68025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\bindingoffset}{36pt}%
68035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {11in}{8.5in}%
68045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
68055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
68065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use @smallbook to reset parameters for 7x9.5 (or so) format.
68075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\smallbook{{\globaldefs = 1
68085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip = 2pt plus 1pt
68095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \textleading = 12pt
68105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
68115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \internalpagesizes{7.5in}{5in}%
68125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\voffset}{.25in}%
68135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\bindingoffset}{16pt}%
68145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {9.25in}{7in}%
68155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
68165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \lispnarrowing = 0.3in
68175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tolerance = 700
68185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hfuzz = 1pt
68195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \contentsrightmargin = 0pt
68205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \defbodyindent = .5cm
68215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
68225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
68235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use @afourpaper to print on European A4 paper.
68245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\afourpaper{{\globaldefs = 1
68255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip = 3pt plus 2pt minus 1pt
68265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \textleading = 13.2pt
68275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
68285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Double-side printing via postscript on Laserjet 4050
68295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
68305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % To change the settings for a different printer or situation, adjust
68315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \normaloffset until the front-side and back-side texts align.  Then
68325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % do the same for \bindingoffset.  You can set these for testing in
68335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % your texinfo source file like this:
68345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % @tex
68355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \global\normaloffset = -6mm
68365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % \global\bindingoffset = 10mm
68375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % @end tex
68385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \internalpagesizes{51\baselineskip}{160mm}
68395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\voffset}{\hoffset}%
68405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\bindingoffset}{44pt}%
68415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {297mm}{210mm}%
68425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
68435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tolerance = 700
68445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hfuzz = 1pt
68455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \contentsrightmargin = 0pt
68465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \defbodyindent = 5mm
68475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
68485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
68495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use @afivepaper to print on European A5 paper.
68505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% From romildo@urano.iceb.ufop.br, 2 July 2000.
68515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% He also recommends making @example and @lisp be small.
68525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\afivepaper{{\globaldefs = 1
68535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip = 2pt plus 1pt minus 0.1pt
68545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \textleading = 12.5pt
68555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
68565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \internalpagesizes{160mm}{120mm}%
68575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\voffset}{\hoffset}%
68585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\bindingoffset}{8pt}%
68595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {210mm}{148mm}%
68605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
68615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \lispnarrowing = 0.2in
68625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tolerance = 800
68635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \hfuzz = 1.2pt
68645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \contentsrightmargin = 0pt
68655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \defbodyindent = 2mm
68665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \tableindent = 12mm
68675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
68685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
68695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% A specific text layout, 24x15cm overall, intended for A4 paper.
68705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\afourlatex{{\globaldefs = 1
68715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \afourpaper
68725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \internalpagesizes{237mm}{150mm}%
68735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\voffset}{4.6mm}%
68745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\bindingoffset}{7mm}%
68755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {297mm}{210mm}%
68765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
68775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  % Must explicitly reset to 0 because we call \afourpaper.
68785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \globaldefs = 0
68795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
68805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
68815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Use @afourwide to print on A4 paper in landscape format.
68825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\afourwide{{\globaldefs = 1
68835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \afourpaper
68845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \internalpagesizes{241mm}{165mm}%
68855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\voffset}{-2.95mm}%
68865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\bindingoffset}{7mm}%
68875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {297mm}{210mm}%
68885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \globaldefs = 0
68895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
68905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
68915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
68925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Perhaps we should allow setting the margins, \topskip, \parskip,
68935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% and/or leading, also. Or perhaps we should compute them somehow.
68945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
68955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
68965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\pagesizesyyy#1,#2,#3\finish{{%
68975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
68985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \globaldefs = 1
68995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
69005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \parskip = 3pt plus 2pt minus 1pt
69015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \setleading{\textleading}%
69025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
69035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen0 = #1
69045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\dimen0 by \voffset
69055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
69065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \dimen2 = \hsize
69075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \advance\dimen2 by \normaloffset
69085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  %
69095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  \internalpagesizes{#1}{\hsize}%
69105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\voffset}{\normaloffset}%
69115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\bindingoffset}{44pt}%
69125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project                    {\dimen0}{\dimen2}%
69135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}}
69145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Set default to letter.
69165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
69175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\letterpaper
69185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\message{and turning on texinfo input format.}
69215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Define macros to output various characters with catcode for normal text.
69235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\"=\other
69245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\~=\other
69255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\^=\other
69265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\_=\other
69275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\|=\other
69285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\<=\other
69295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\>=\other
69305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\+=\other
69315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\$=\other
69325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normaldoublequote{"}
69335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normaltilde{~}
69345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalcaret{^}
69355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalunderscore{_}
69365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalverticalbar{|}
69375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalless{<}
69385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalgreater{>}
69395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalplus{+}
69405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normaldollar{$}%$ font-lock fix
69415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This macro is used to make a character print one way in \tt
69435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (where it can probably be output as-is), and another way in other fonts,
69445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% where something hairier probably needs to be done.
69455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
69465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% #1 is what to print if we are indeed using \tt; #2 is what to print
69475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% otherwise.  Since all the Computer Modern typewriter fonts have zero
69485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% interword stretch (and shrink), and it is reasonable to expect all
69495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% typewriter fonts to have this, we can check that font parameter.
69505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
69515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
69525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Same as above, but check for italic font.  Actually this also catches
69545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% non-italic slanted fonts since it is impossible to distinguish them from
69555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% italic fonts.  But since this is only used by $ and it uses \sl anyway
69565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% this is not a problem.
69575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
69585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Turn off all special characters except @
69605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% (and those which the user can use as if they were ordinary).
69615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Most of these we simply print from the \tt font, but for some, we can
69625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% use math or other variants that look better in normal text.
69635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\"=\active
69655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\activedoublequote{{\tt\char34}}
69665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\let"=\activedoublequote
69675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\~=\active
69685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def~{{\tt\char126}}
69695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef\hat=`\^
69705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\^=\active
69715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def^{{\tt \hat}}
69725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\_=\active
69745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def_{\ifusingtt\normalunderscore\_}
69755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Subroutine for the previous macro.
69765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
69775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\|=\active
69795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def|{{\tt\char124}}
69805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef \less=`\<
69815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\<=\active
69825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def<{{\tt \less}}
69835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\chardef \gtr=`\>
69845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\>=\active
69855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def>{{\tt \gtr}}
69865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\+=\active
69875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def+{{\tt \char 43}}
69885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\$=\active
69895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
69905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If a .fmt file is being used, characters that might appear in a file
69925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% name cannot be active until we have parsed the command line.
69935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% So turn them off again, and have \everyjob (or @setfilename) turn them on.
69945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \otherifyactive is called near the end of this file.
69955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
69965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\@=0
69985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
69995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \backslashcurfont outputs one backslash character in current font,
70005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% as in \char`\\.
70015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\chardef\backslashcurfont=`\\
70025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
70035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \rawbackslash defines an active \ to do \backslashcurfont.
70055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \otherbackslash defines an active \ to be a literal `\' character with
70065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% catcode other.
70075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\\=\active
70085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @gdef@rawbackslash{@let\=@backslashcurfont}
70095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project @gdef@otherbackslash{@let\=@realbackslash}
70105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
70115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \realbackslash is an actual character `\' with catcode other.
70135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{\catcode`\\=\other @gdef@realbackslash{\}}
70145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% \normalbackslash outputs one backslash in fixed width font.
70165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\def\normalbackslash{{\tt\backslashcurfont}}
70175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project\catcode`\\=\active
70195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Used sometimes to turn off (effectively) the active characters
70215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% even after parsing them.
70225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@def@turnoffactive{%
70235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let"=@normaldoublequote
70245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let\=@realbackslash
70255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let~=@normaltilde
70265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let^=@normalcaret
70275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let_=@normalunderscore
70285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let|=@normalverticalbar
70295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let<=@normalless
70305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let>=@normalgreater
70315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let+=@normalplus
70325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @let$=@normaldollar %$ font-lock fix
70335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @unsepspaces
70345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
70355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
70375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the literal character `\'.  (Thus, \ is not expandable when this is in
70385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% effect.)
70395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
70405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
70415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Make _ and + \other characters, temporarily.
70435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% This is canceled by @fixbackslash.
70445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@otherifyactive
70455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
70475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% That is what \eatinput is for; after that, the `\' should revert to printing
70485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% a backslash.
70495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
70505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@gdef@eatinput input texinfo{@fixbackslash}
70515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@global@let\ = @eatinput
70525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% On the other hand, perhaps the file did not have a `\input texinfo'. Then
70545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% the first `\{ in the file would cause an error. This macro tries to fix
70555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% that, assuming it is called before the first `\' could plausibly occur.
70565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Also back turn on active characters that might appear in the input
70575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% file name, in case not using a pre-dumped format.
70585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project%
70595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@gdef@fixbackslash{%
70605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @ifx\@eatinput @let\ = @normalbackslash @fi
70615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @catcode`+=@active
70625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  @catcode`@_=@active
70635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
70645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% Say @foo, not \foo, in error messages.
70665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@escapechar = `@@
70675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project% These look ok in all fonts, so just make them not special.
70695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@catcode`@& = @other
70705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@catcode`@# = @other
70715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@catcode`@% = @other
70725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c Local variables:
70755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c eval: (add-hook 'write-file-hooks 'time-stamp)
70765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c page-delimiter: "^\\\\message"
70775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c time-stamp-start: "def\\\\texinfoversion{"
70785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c time-stamp-format: "%:y-%02m-%02d.%02H"
70795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c time-stamp-end: "}"
70805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c End:
70815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@c vim:sw=2:
70835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
70845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@ignore
70855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
70865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project@end ignore
7087