1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% texinfo.tex -- TeX macros to handle Texinfo files.
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Load plain if necessary, i.e., if running under initex.
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\texinfoversion{2012-11-08.11}
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This texinfo.tex file is free software: you can redistribute it and/or
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% modify it under the terms of the GNU General Public License as
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% published by the Free Software Foundation, either version 3 of the
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% License, or (at your option) any later version.
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This texinfo.tex file is distributed in the hope that it will be
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% General Public License for more details.
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% You should have received a copy of the GNU General Public License
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% along with this program.  If not, see <http://www.gnu.org/licenses/>.
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% As a special exception, when this file is read by TeX when processing
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% a Texinfo source document, you may use the result without
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% restriction.  (This has been our intent since Texinfo was invented.)
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Please try the latest version of texinfo.tex before submitting bug
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% reports; you can get the latest version from:
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%   http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%   http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%   http://www.gnu.org/software/texinfo/ (the Texinfo home page)
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The texinfo.tex in any given distribution could well be out
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% of date, so if that's what you're using, please check.
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Send bug reports to bug-texinfo@gnu.org.  Please include including a
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% complete document in each bug report with which we can reproduce the
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% problem.  Patches are, of course, greatly appreciated.
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% To process a Texinfo manual with TeX, it's most reliable to use the
42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% texi2dvi shell script that comes with the distribution.  For a simple
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% manual foo.texi, however, you can get away with this:
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   tex foo.texi
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   texindex foo.??
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   tex foo.texi
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   tex foo.texi
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The extra TeX runs get the cross-reference information correct.
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Sometimes one run after texindex suffices, and sometimes you need more
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% than two; texi2dvi does it as many times as necessary.
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It is possible to adapt texinfo.tex for other languages, to some
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% extent.  You can get the existing language-specific files from the
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% full Texinfo distribution.
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{Loading texinfo [version \texinfoversion]:}
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If in a .fmt file, print the version number
63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% and turn on active characters that we couldn't do earlier because
64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% they might have appeared in the input file name.
65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\everyjob{\message{[Texinfo version \texinfoversion]}%
66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`+=\active \catcode`\_=\active}
67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\other=12
69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We never want plain's \outer definition of \+ in Texinfo.
71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% For @tex, we can use \tabalign.
72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\+ = \relax
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Save some plain tex macros whose names we will redefine.
75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexb=\b
76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexbullet=\bullet
77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexc=\c
78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexcomma=\,
79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexdot=\.
80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexdots=\dots
81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexend=\end
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexequiv=\equiv
83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexexclam=\!
84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexfootnote=\footnote
85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexgtr=>
86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexhat=^
87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexi=\i
88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexindent=\indent
89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexinsert=\insert
90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexlbrace=\{
91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexless=<
92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexnewwrite\newwrite
93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexnoindent=\noindent
94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexplus=+
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\ptexraggedright=\raggedright
96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexrbrace=\}
97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexslash=\/
98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptexstar=\*
99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ptext=\t
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\ptextop=\top
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If this character appears in an error message or help string, it
104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% starts a new line in the output.
105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newlinechar = `^^J
106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Use TeX 3.0's \inputlineno to get the line number, for better error
108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% messages, but if we're using an old version of TeX, don't do anything.
109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\inputlineno\thisisundefined
111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\linenumber = \empty % Pre-3.0.
112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\else
113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\linenumber{l.\the\inputlineno:\space}
114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi
115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Set up fixed words for English if not already set.
117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifx\putworderror\undefined     \gdef\putworderror{error}\fi
120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifx\putwordIndexIsEmpty\undefined       \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifx\putwordIndexNonexistent\undefined   \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Since the category of space is not known, we have to be careful.
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\spacecat = 10
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\spaceisspace{\catcode`\ =\spacecat}
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% sometimes characters are active, so we need control sequences.
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\ampChar   = `\&
163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\colonChar = `\:
164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\commaChar = `\,
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\dashChar  = `\-
166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\dotChar   = `\.
167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\exclamChar= `\!
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\hashChar  = `\#
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\lquoteChar= `\`
170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\questChar = `\?
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\rquoteChar= `\'
172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\semiChar  = `\;
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\slashChar = `\/
174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\underChar = `\_
175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Ignore a token.
177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\gobble#1{}
179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The following is used inside several \edef's.
181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Hyphenation fixes.
184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\hyphenation{
185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ap-pen-dix bit-map bit-maps
187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  data-base data-bases eshell fall-ing half-way long-est man-u-script
188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  spell-ing spell-ings
191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  stand-alone strong-est time-stamp time-stamps which-ever white-space
192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  wide-spread wrap-around
193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Margin to add to right of even pages, to left of odd pages.
196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\bindingoffset
197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\normaloffset
198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\pagewidth \newdimen\pageheight
199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% For a final copy, take out the rectangles
201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% that mark overfull boxes (in case you have decided
202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% that the text looks ok even though it passes the margin).
203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\finalout{\overfullrule=0pt }
205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Sometimes it is convenient to have everything in the transcript file
207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% and nothing on the terminal.  We don't just call \tracingall here,
208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% since that produces some useless output on the terminal.  We also make
209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% some effort to order the tracing commands to reduce output in the log
210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% file; cf. trace.sty in LaTeX.
211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\loggingall{%
214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tracingstats2
215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tracingpages1
216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tracinglostchars2  % 2 gives us more in etex
217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tracingparagraphs1
218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tracingoutput1
219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tracingmacros2
220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tracingrestores1
221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \showboxbreadth\maxdimen \showboxdepth\maxdimen
22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \tracingscantokens1
224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \tracingifs1
225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \tracinggroups1
226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \tracingnesting2
227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \tracingassigns1
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tracingcommands3  % 3 gives us more in etex
230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \errorcontextlines16
231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}%
232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% aren't perfect, it's not the end of the world, being an error message,
23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% after all.
23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\errormsg{\begingroup \indexnofonts \doerrormsg}
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\doerrormsg#1{\errmessage{#1}}
23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% add check for \lastpenalty to plain's definitions.  If the last thing
241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% we did was a \nobreak, we don't want to insert more space.
242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \removelastskip\penalty-50\smallskip\fi\fi}
245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \removelastskip\penalty-100\medskip\fi\fi}
247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \removelastskip\penalty-200\bigskip\fi\fi}
249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Do @cropmarks to get crop marks.
251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifcropmarks
253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\cropmarks = \cropmarkstrue
254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Dimensions to add cropmarks at corners.
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Added by P. A. MacKay, 12 Nov. 1986
257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\cornerlong  \cornerlong=1pc
260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\cornerthick \cornerthick=.3pt
261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\topandbottommargin \topandbottommargin=.75in
262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Output a mark which sets \thischapter, \thissection and \thiscolor.
26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% We dump everything together because we only have one kind of mark.
26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This works because we only use \botmark / \topmark, not \firstmark.
26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% A mark contains a subexpression of the \ifcase ... \fi construct.
26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \get*marks macros below extract the needed part using \ifcase.
26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Another complication is to let the user choose whether \thischapter
27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (\thissection) refers to the chapter (section) in effect at the top
27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% of a page, or that at the bottom of a page.  The solution is
27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% described on page 260 of The TeXbook.  It involves outputting two
27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% marks for the sectioning macros, one before the section break, and
27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% one after.  I won't pretend I can describe this better than DEK...
27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\domark{%
27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \toks0=\expandafter{\lastchapterdefs}%
27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \toks2=\expandafter{\lastsectiondefs}%
27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \toks4=\expandafter{\prevchapterdefs}%
28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \toks6=\expandafter{\prevsectiondefs}%
28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \toks8=\expandafter{\lastcolordefs}%
28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \mark{%
28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   \the\toks0 \the\toks2
28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \noexpand\or \the\toks4 \the\toks6
28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \noexpand\else \the\toks8
28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }%
28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \topmark doesn't work for the very first chapter (after the title
28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% page or the contents), so we use \firstmark there -- this gets us
29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the mark with the chapter defs, unless the user sneaks in, e.g.,
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @setcolor (or @url, or @link, etc.) between @contents and the very
29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% first @chapter.
29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\gettopheadingmarks{%
29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifcase0\topmark\fi
29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\getbottomheadingmarks{\ifcase1\botmark\fi}
29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\getcolormarks{\ifcase2\topmark\fi}
29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Avoid "undefined control sequence" errors.
30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\lastchapterdefs{}
30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\lastsectiondefs{}
30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\prevchapterdefs{}
30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\prevsectiondefs{}
30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\lastcolordefs{}
30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Main output routine.
308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\PAGE = 255
309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\output = {\onepageout{\pagecontents\PAGE}}
310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newbox\headlinebox
312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newbox\footlinebox
313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \onepageout takes a vbox as an argument.  Note that \pagecontents
315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% does insertions, but you have to call it yourself.
316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\onepageout#1{%
317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifodd\pageno  \advance\hoffset by \bindingoffset
320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else \advance\hoffset by -\bindingoffset\fi
321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Do this outside of the \shipout so @code etc. will be expanded in
323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % the headline as they should be, not taken literally (outputting ''code).
32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Have to do this stuff outside the \shipout because we want it to
331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % take effect in \write's, yet the group defined by the \vbox ends
332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % before the \shipout runs.
333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \indexdummies         % don't expand commands in the output.
33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang               % the page break happens to be in the middle of an example.
33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang               % We don't want .vr (or whatever) entries like this:
33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang               % "\acronym" won't work when it's read back in;
34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang               % it needs to be
34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang               % {\code {{\tt \backslashcurfont }acronym}
342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \shipout\vbox{%
343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Do this early so pdf references go to the beginning of the page.
344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifcropmarks \vbox to \outervsize\bgroup
347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \hsize = \outerhsize
348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \vskip-\topandbottommargin
349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \vtop to0pt{%
350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \line{\ewtop\hfil\ewtop}%
351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \nointerlineskip
352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \line{%
353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            \vbox{\moveleft\cornerthick\nstop}%
354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            \hfill
355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            \vbox{\moveright\cornerthick\nstop}%
356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          }%
357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \vss}%
358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \vskip\topandbottommargin
359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \line\bgroup
360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \hfil % center the page within the outer (page) hsize.
361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \ifodd\pageno\hskip\bindingoffset\fi
362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \vbox\bgroup
363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \unvbox\headlinebox
366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \pagebody{#1}%
367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifdim\ht\footlinebox > 0pt
368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % Only leave this space if the footline is nonempty.
36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        % (We lessened \vsize for it in \oddfootingyyy.)
370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % The \baselineskip=24pt in plain's \makefootline has no effect.
37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \vskip 24pt
372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \unvbox\footlinebox
373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifcropmarks
376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \egroup % end of \vbox\bgroup
377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \hfil\egroup % end of (centering) \line\bgroup
378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \vskip\topandbottommargin plus1fill minus1fill
379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \boxmaxdepth = \cornerthick
380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \vbox to0pt{\vss
381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \line{%
382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            \vbox{\moveleft\cornerthick\nsbot}%
383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            \hfill
384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            \vbox{\moveright\cornerthick\nsbot}%
385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          }%
386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \nointerlineskip
387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \line{\ewbot\hfil\ewbot}%
388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        }%
389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \egroup % \vbox from first cropmarks clause
390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }% end of \shipout\vbox
392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }% end of group with \indexdummies
393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advancepageno
394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newinsert\margin \dimen\margin=\maxdimen
398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\catcode`\@ =11
401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% marginal hacks, juha@viisa.uucp (Juha Takala)
403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifvoid\margin\else % marginal info is present
404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\dimen@=\dp#1\relax \unvbox#1\relax
406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Here are the rules for the cropmarks.  Note that they are
411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% offset so that the space between them is truly \outerhsize or \outervsize
412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (P. A. MacKay, 12 November, 1986)
413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\nstop{\vbox
416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\nsbot{\vbox
419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Parse an argument, then pass it to #1.  The argument is the rest of
422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the input line (except we remove a trailing comment).  #1 should be a
423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% macro which expects an ordinary undelimited TeX argument.
424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\parsearg{\parseargusing{}}
426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\parseargusing#1#2{%
42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\argtorun{#2}%
428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \begingroup
429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \obeylines
430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \spaceisspace
431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    #1%
432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\obeylines %
436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\parseargline#1^^M{%
437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup % End of the group started in \parsearg.
438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \argremovecomment #1\comment\ArgTerm%
439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% First remove any @comment, then any @c comment.
443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \argremovec might leave us with trailing space, e.g.,
449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%    @end itemize  @c foo
450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This space token undergoes the same procedure and is eventually removed
451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% by \finishparsearg.
452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#3}%
457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\empty
45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\temp\finishparsearg
460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\temp\argcheckspaces
462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Put the space token in:
464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \temp#1 #3\ArgTerm
465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If a _delimited_ argument is enclosed in braces, they get stripped; so
468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% to get _exactly_ the rest of the line, we had to prevent such situation.
469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We prepended an \empty token at the very beginning and we expand it now,
47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% just before passing the control to \argtorun.
47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% either the null string, or it ends with \^^M---thus there is no danger
473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% that a pair of braces would be stripped.
474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% But first, we have to remove the trailing space token.
476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \parseargdef\foo{...}
480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%	is roughly equivalent to
481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \def\foo{\parsearg\Xfoo}
482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \def\Xfoo#1{...}
483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% favourite TeX trick.  --kasal, 16nov03
486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\parseargdef#1{%
488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter \doparseargdef \csname\string#1\endcsname #1%
489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doparseargdef#1#2{%
491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def#2{\parsearg#1}%
492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def#1##1%
493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Several utility definitions with active space:
496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \obeyspaces
498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\obeyedspace{ }
499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Make each space character in the input produce a normal interword
501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % space in the output.  Don't allow a line break at this space, as this
502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % is used only in environments like @example, where each line of input
503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % should produce a line of output anyway.
504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\sepspaces{\obeyspaces\let =\tie}
506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % If an index command is used in an @example environment, any spaces
508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % therein should become regular spaces in the raw index file, not the
509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % expansion of \tie (\leavevmode \penalty \@M \ ).
510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\unsepspaces{\let =\space}
511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
515cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define the framework for environments in texinfo.tex.  It's used like this:
517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   \envdef\foo{...}
519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   \def\Efoo{...}
520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It's the responsibility of \envdef to insert \begingroup before the
522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% actual body; @end closes the group after calling \Efoo.  \envdef also
523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% defines \thisenv, so the current environment is known; @end checks
524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% whether the environment name matches.  The \checkenv macro can also be
525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% used to check whether the current environment is the one expected.
526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% are not treated as environments; they don't open a group.  (The
529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% implementation of @end takes care not to call \endgroup in this
530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% special case.)
531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% At run-time, environments start with this:
534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\startenvironment#1{\begingroup\def\thisenv{#1}}
535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% initialize
536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\thisenv\empty
537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% ... but they get defined via ``\envdef\foo{...}'':
539cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
542cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Check whether we're in the right environment:
543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\checkenv#1{%
544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#1}%
545cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\thisenv\temp
546cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
547cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \badenverr
548cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Environment mismatch, #1 expected:
552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\badenverr{%
553cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \errhelp = \EMsimple
554cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \errmessage{This command can appear only \inenvironment\temp,
555cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    not \inenvironment\thisenv}%
556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\inenvironment#1{%
558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx#1\empty
55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    outside of any environment%
560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    in environment \expandafter\string#1%
562cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
563cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @end foo executes the definition of \Efoo.
566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% But first, it executes a specialized version of \checkenv
567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\end{%
569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \if 1\csname iscond.#1\endcsname
570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
57105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % The general wording of \badenverr may not be ideal.
572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\checkenv\csname#1\endcsname
573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \csname E#1\endcsname
574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup
575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newhelp\EMsimple{Press RETURN to continue.}
579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
580cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Be sure we're in horizontal mode when doing a tie, since we make space
582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% equivalent to this in @example-like environments. Otherwise, a space
583cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% at the beginning of a line will start with \penalty -- and
584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% since \penalty is valid in vertical mode, we'd end up putting the
585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% penalty on the vertical list instead of in the new paragraph.
586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\catcode`@ = 11
587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project % Avoid using \@M directly, because that causes trouble
588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project % if the definition is written into an index file.
589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project \global\let\tiepenalty = \@M
590cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project \gdef\tie{\leavevmode\penalty\tiepenalty\ }
591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @: forces normal size whitespace following.
594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\:{\spacefactor=1000 }
595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @* forces a line break.
59705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @/ allows a line break.
600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\/=\allowbreak
601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @. is an end-of-sentence period.
603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\.{.\spacefactor=\endofsentencespacefactor\space}
604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @! is an end-of-sentence bang.
606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\!{!\spacefactor=\endofsentencespacefactor\space}
607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @? is an end-of-sentence query.
609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\?{?\spacefactor=\endofsentencespacefactor\space}
610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @frenchspacing on|off  says whether to put extra space after punctuation.
61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
613cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\onword{on}
614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\offword{off}
615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\frenchspacing{%
617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#1}%
618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\onword \plainfrenchspacing
619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifx\temp\offword \plainnonfrenchspacing
620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \errhelp = \EMsimple
62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi\fi
624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @w prevents a word break.  Without the \leavevmode, @w at the
627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% beginning of a paragraph, when TeX is still in vertical mode, would
628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% produce a whole line of output instead of starting the paragraph.
629cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\w#1{\leavevmode\hbox{#1}}
630cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
631cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @group ... @end group forces ... to be all on one page, by enclosing
632cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
633cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% to keep its height that of a normal line.  According to the rules for
634cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \topskip (p.114 of the TeXbook), the glue inserted is
635cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% max (\topskip - \ht (first item), 0).  If that height is large,
636cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% therefore, no glue is inserted, and the space between the headline and
637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the text is small, which looks bad.
638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
639cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Another complication is that the group might be very large.  This can
640cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% cause the glue on the previous page to be unduly stretched, because it
641cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% does not have much material.  In this case, it's better to add an
642cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% explicit \vfill so that the extra space is at the bottom.  The
643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% threshold for doing this is if the group is more than \vfilllimit
644cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% percent of a page (\vfilllimit can be changed inside of @tex).
645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newbox\groupbox
647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\vfilllimit{0.7}
648cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\group{%
650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\catcode`\^^M=\active \else
651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \errhelp = \groupinvalidhelp
652cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \errmessage{@group invalid in context where filling is enabled}%
653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \startsavinginserts
655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
656cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox\groupbox = \vtop\bgroup
657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Do @comment since we are called inside an environment such as
658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % @example, where each end-of-line in the input causes an
659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % end-of-line in the output.  We don't want the end-of-line after
660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % the `@group' to put extra space in the output.  Since @group
661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % should appear on a line by itself (according to the Texinfo
662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % manual), we don't worry about eating any user text.
663cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \comment
664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The \vtop produces a box with normal height and large depth; thus, TeX puts
667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \baselineskip glue before it, and (when the next line of text is done)
668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \lineskip glue after it.  Thus, space below is not quite equal to space
669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% above.  But it's pretty close.
670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Egroup{%
671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % To get correct interline space between the last line of the group
672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % and the first line afterwards, we have to propagate \prevdepth.
673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgraf % Not \par, as it may have been set to \lisppar.
674cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\dimen1 = \prevdepth
675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \egroup           % End the \vtop.
676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \dimen0 is the vertical size of the group's box.
677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \dimen2 is how much space is left on the page (more or less).
679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % if the group doesn't fit on the current page, and it's a big big
681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % group, force a page break.
682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifdim \dimen0 > \dimen2
683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifdim \pagetotal < \vfilllimit\pageheight
684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \page
685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \box\groupbox
688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \prevdepth = \dimen1
689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \checkinserts
690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% message, so this ends up printing `@group can only ...'.
694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newhelp\groupinvalidhelp{%
696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectgroup can only be used in environments such as @example,^^J%
697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectwhere each line of input produces a line of output.}
698cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @need space-in-mils
700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% forces a page break if there is not space-in-mils remaining.
701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\mil  \mil=0.001in
703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\need{%
705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Ensure vertical mode, so we don't make a big box in the middle of a
706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % paragraph.
707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \par
708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % If the @need value is less than one line space, it's useless.
710cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dimen0 = #1\mil
711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dimen2 = \ht\strutbox
712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\dimen2 by \dp\strutbox
713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifdim\dimen0 > \dimen2
714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Do a \strut just to make the height of this box be normal, so the
716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % normal leading is inserted relative to the preceding line.
717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % And a page break here is fine.
718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vtop to #1\mil{\strut\vfil}%
719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % TeX does not even consider page breaks if a penalty added to the
721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % main vertical list is 10000 or more.  But in order to see if the
722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % empty box we just added fits on the page, we must make it consider
723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % page breaks.  On the other hand, we don't want to actually break the
724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % page after the empty box.  So we use a penalty of 9999.
725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % There is an extremely small chance that TeX will actually break the
727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % page at this \penalty, if there are no other feasible breakpoints in
728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % sight.  (If the user is using lots of big @group commands, which
729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % almost-but-not-quite fill up a page, TeX will have a hard time doing
730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % good page breaking, for example.)  However, I could not construct an
731cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % example where a page broke at this \penalty; if it happens in a real
732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % document, then we can reconsider our strategy.
733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \penalty9999
734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Back up by the size of the box, whether we did a page break or not.
736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \kern -#1\mil
737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Do not allow a page break right after this kern.
739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \nobreak
740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @br   forces paragraph break (and is undocumented).
744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\br = \par
746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @page forces the start of a new page.
748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\page{\par\vfill\supereject}
750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @exdent text....
752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% outputs text on separate line in roman font, starting at standard page margin
753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This records the amount of indent in the innermost environment.
755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% That's how much \exdent should take out.
756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\exdentamount
757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This defn is used inside fill environments such as @defun.
759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This defn is used inside nofill environments such as @example.
762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \leftline{\hskip\leftskip{\rm#1}}}}
764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% paragraph.  For more general purposes, use the \margin insertion
76705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% class.  WHICH is `l' or `r'.  Not documented, written for gawk manual.
768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\inmarginspacing \inmarginspacing=1cm
770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\strutdepth{\dp\strutbox}
771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doinmargin#1#2{\strut\vadjust{%
773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nobreak
774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \kern-\strutdepth
775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vtop to \strutdepth{%
776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \baselineskip=\strutdepth
777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vss
778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % if you have multiple lines of stuff to put here, you'll need to
779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % make the vbox yourself of the appropriate size.
780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx#1l%
781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \llap{\ignorespaces #2\hskip\inmarginspacing}%
782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \null
786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\inleftmargin{\doinmargin l}
789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\inrightmargin{\doinmargin r}
790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @inmargin{TEXT [, RIGHT-TEXT]}
792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% else use TEXT for both).
794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\inmargin#1{\parseinmargin #1,,\finish}
796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox0 = \hbox{\ignorespaces #2}%
798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifdim\wd0 > 0pt
799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\lefttext{#1}%  have both texts
800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\righttext{#2}%
801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\lefttext{#1}%  have only one text
803cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\righttext{#1}%
804cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
806cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifodd\pageno
807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\temp{\inleftmargin\lefttext}%
810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
811cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \temp
812cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
813cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
81405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @| inserts a changebar to the left of the current line.  It should
81505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% surround any changed text.  This approach does *not* work if the
81605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% change spans more than two lines of output.  To handle that, we would
81705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% have adopt a much more difficult approach (putting marks into the main
81805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% vertical list for the beginning and end of each change).  This command
81905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% is not documented, not supported, and doesn't work.
82005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
82105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\|{%
82205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % \vadjust can only be used in horizontal mode.
82305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \leavevmode
82405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
82505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Append this vertical mode material after the current line in the output.
82605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \vadjust{%
82705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % We want to insert a rule with the height and depth of the current
82805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % leading; that is exactly what \strutbox is supposed to record.
82905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \vskip-\baselineskip
83005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
83105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % \vadjust-items are inserted at the left edge of the type.  So
83205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % the \llap here moves out into the left-hand margin.
83305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \llap{%
83405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      %
83505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % For a thicker or thinner bar, change the `1pt'.
83605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \vrule height\baselineskip width1pt
83705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      %
83805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % This is the space between the bar and the text.
83905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \hskip 12pt
84005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }%
84105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }%
84205436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
84305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
84405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @include FILE -- \input text of FILE.
845cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
846cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\include{\parseargusing\filenamecatcodes\includezzz}
847cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\includezzz#1{%
848cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \pushthisfilestack
849cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\thisfile{#1}%
850cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
85105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \makevalueexpandable  % we want to expand any @value in FILE.
85205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \turnoffactive        % and allow special characters in the expansion
85305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \indexnofonts         % Allow `@@' and other weird things in file names.
85405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \wlog{texinfo.tex: doing @include of #1^^J}%
85505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \edef\temp{\noexpand\input #1 }%
85605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
85705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % This trickery is to read FILE outside of a group, in case it makes
85805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % definitions, etc.
859cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter
860cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }\temp
861cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \popthisfilestack
862cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
863cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\filenamecatcodes{%
864cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\\=\other
865cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`~=\other
866cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`^=\other
867cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`_=\other
868cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`|=\other
869cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`<=\other
870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`>=\other
871cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`+=\other
872cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`-=\other
87305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\`=\other
87405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\'=\other
875cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
876cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
877cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pushthisfilestack{%
878cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
879cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
880cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pushthisfilestackX{%
881cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\pushthisfilestackY\thisfile\StackTerm
882cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
883cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
884cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
885cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
886cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
887cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\popthisfilestack{\errthisfilestackempty}
888cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\errthisfilestackempty{\errmessage{Internal error:
889cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  the stack of filenames is empty.}}
89005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
891cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\thisfile{}
892cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
893cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @center line
894cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% outputs that line, centered.
895cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
896cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\center{%
897cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifhmode
89805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\centersub\centerH
899cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
90005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\centersub\centerV
901cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
90205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \centersub{\hfil \ignorespaces#1\unskip \hfil}%
90305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\centersub\relax % don't let the definition persist, just in case
904cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
90505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\centerH#1{{%
90605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \hfil\break
90705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \advance\hsize by -\leftskip
90805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \advance\hsize by -\rightskip
90905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \line{#1}%
91005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \break
91105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}}
91205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
91305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newcount\centerpenalty
91405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\centerV#1{%
91505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % The idea here is the same as in \startdefun, \cartouche, etc.: if
91605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % @center is the first thing after a section heading, we need to wipe
91705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % out the negative parskip inserted by \sectionheading, but still
91805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % prevent a page break here.
91905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \centerpenalty = \lastpenalty
92005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifnum\centerpenalty>10000 \vskip\parskip \fi
92105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
92205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \line{\kern\leftskip #1\kern\rightskip}%
923cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
924cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
925cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @sp n   outputs n lines of vertical space
92605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
927cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\sp{\vskip #1\baselineskip}
928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
929cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @comment ...line which is ignored...
930cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @c is the same as @comment
931cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @ignore ... @end ignore  is another way to write a comment
93205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
933cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\comment{\begingroup \catcode`\^^M=\other%
934cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
935cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\commentxxx}
936cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
93705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\c=\comment
939cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
940cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @paragraphindent NCHARS
941cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We'll use ems for NCHARS, close enough.
942cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% NCHARS can also be the word `asis' or `none'.
943cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We cannot feasibly implement @paragraphindent asis, though.
944cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
945cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\asisword{asis} % no translation, these are keywords
946cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\noneword{none}
947cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
948cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\paragraphindent{%
949cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#1}%
950cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\asisword
951cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
952cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\temp\noneword
953cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \defaultparindent = 0pt
954cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
955cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \defaultparindent = #1em
956cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
957cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
958cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parindent = \defaultparindent
959cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
960cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
961cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @exampleindent NCHARS
962cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We'll use ems for NCHARS like @paragraphindent.
963cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It seems @exampleindent asis isn't necessary, but
964cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% I preserve it to make it similar to @paragraphindent.
965cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\exampleindent{%
966cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#1}%
967cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\asisword
968cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
969cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\temp\noneword
970cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \lispnarrowing = 0pt
971cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
972cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \lispnarrowing = #1em
973cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
974cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
975cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
976cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
977cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @firstparagraphindent WORD
978cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If WORD is `none', then suppress indentation of the first paragraph
979cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% after a section heading.  If WORD is `insert', then do indent at such
980cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% paragraphs.
981cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
982cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The paragraph indentation is suppressed or not by calling
983cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \suppressfirstparagraphindent, which the sectioning commands do.
984cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We switch the definition of this back and forth according to WORD.
985cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% By default, we suppress indentation.
986cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
987cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
988cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\insertword{insert}
989cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
990cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\firstparagraphindent{%
991cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#1}%
992cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\noneword
993cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
994cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifx\temp\insertword
995cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\suppressfirstparagraphindent = \relax
996cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
997cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \errhelp = \EMsimple
998cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \errmessage{Unknown @firstparagraphindent option `\temp'}%
999cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi\fi
1000cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1001cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1002cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Here is how we actually suppress indentation.  Redefine \everypar to
1003cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \kern backwards by \parindent, and then reset itself to empty.
1004cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
1005cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We also make \indent itself not actually do anything until the next
1006cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% paragraph.
1007cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
1008cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\dosuppressfirstparagraphindent{%
1009cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\indent{%
1010cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \restorefirstparagraphindent
1011cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \indent
1012cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
1013cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\noindent{%
1014cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \restorefirstparagraphindent
1015cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \noindent
1016cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
1017cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\everypar = {%
1018cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \kern -\parindent
1019cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \restorefirstparagraphindent
1020cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
1021cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1022cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1023cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\restorefirstparagraphindent{%
1024cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global \let \indent = \ptexindent
1025cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global \let \noindent = \ptexnoindent
1026cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global \everypar = {}%
1027cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1028cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1029cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1030cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @refill is a no-op.
1031cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\refill=\relax
1032cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1033cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If working on a large document in chapters, it is convenient to
1034cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% be able to disable indexing, cross-referencing, and contents, for test runs.
1035cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This is done with @novalidate (before @setfilename).
1036cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
1037cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\iflinks \linkstrue % by default we want the aux files.
1038cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\novalidate = \linksfalse
1039cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1040cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @setfilename is done at the beginning of every texinfo file.
1041cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% So open here the files we need to have open while reading the input.
1042cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This makes it possible to make a .fmt file for texinfo.
1043cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setfilename{%
1044cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
1045cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \iflinks
1046cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \tryauxfile
1047cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     % Open the new aux file.  TeX will close it automatically at exit.
1048cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \immediate\openout\auxfile=\jobname.aux
1049cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \fi % \openindices needs to do some work in any case.
1050cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \openindices
1051cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \let\setfilename=\comment % Ignore extra @setfilename cmds.
1052cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   %
1053cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % If texinfo.cnf is present on the system, read it.
1054cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % Useful for site-wide @afourpaper, etc.
1055cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \openin 1 texinfo.cnf
1056cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \ifeof 1 \else \input texinfo.cnf \fi
1057cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \closein 1
1058cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   %
1059cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \comment % Ignore the actual filename.
1060cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1061cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1062cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Called from \setfilename.
1063cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
1064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\openindices{%
1065cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \newindex{cp}%
1066cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \newcodeindex{fn}%
1067cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \newcodeindex{vr}%
1068cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \newcodeindex{tp}%
1069cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \newcodeindex{ky}%
1070cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \newcodeindex{pg}%
1071cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1072cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1073cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @bye.
1074cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
1075cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1076cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1077cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{pdf,}
1078cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% adobe `portable' document format
1079cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\tempnum
1080cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\lnkcount
1081cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\filename
1082cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\filenamelength
1083cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\pgn
1084cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\toksA
1085cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\toksB
1086cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\toksC
1087cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\toksD
1088cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newbox\boxA
1089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\countA
1090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifpdf
1091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifpdfmakepagedest
1092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
109405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% can be set).  So we test for \relax and 0 as well as being undefined.
109505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifx\pdfoutput\thisisundefined
1096cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\else
1097cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\pdfoutput\relax
1098cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
1099cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifcase\pdfoutput
1100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
1101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \pdftrue
1102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
1103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
1104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi
1105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
110605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% PDF uses PostScript string constants for the names of xref targets,
1107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% for display in the outlines, and in other places.  Thus, we have to
1108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% double any backslashes.  Otherwise, a name like "\node" will be
1109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% interpreted as a newline (\n), followed by o, d, e.  Not good.
1110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% 
111105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
111205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% related messages.  The final outcome is that it is up to the TeX user
111305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% to double the backslashes and otherwise make the string valid, so
111405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% that's what we do.  pdftex 1.30.0 (ca.2005) introduced a primitive to
111505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% do this reliably, so we use it.
111605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
111705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #1 is a control sequence in which to do the replacements,
111805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% which we \xdef.
111905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\txiescapepdf#1{%
112005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\pdfescapestring\thisisundefined
112105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % No primitive available; should we give a warning or log?
112205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Many times it won't matter.
112305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
112405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % The expandable \pdfescapestring primitive escapes parentheses,
112505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % backslashes, and other special chars.
112605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \xdef#1{\pdfescapestring{#1}}%
112705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
1128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
113005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
113105436638acc7c010349a69c3395f1a57c642dc62Ying Wangwith PDF output, and none of those formats could be found.  (.eps cannot
113205436638acc7c010349a69c3395f1a57c642dc62Ying Wangbe supported due to the design of the PDF format; use regular TeX (DVI
113305436638acc7c010349a69c3395f1a57c642dc62Ying Wangoutput) for that.)}
1134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifpdf
113605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
113705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Color manipulation macros based on pdfcolor.tex,
113805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % except using rgb instead of cmyk; the latter is said to render as a
113905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % very dark gray on-screen and a very dark halftone in print, instead
114005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % of actual black.
114105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\rgbDarkRed{0.50 0.09 0.12}
114205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\rgbBlack{0 0 0}
114305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
114405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % k sets the color for filling (usual text, etc.);
114505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % K sets the color for stroking (thin rules, e.g., normal _'s).
114605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
114705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
114805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Set color, and create a mark which defines \thiscolor accordingly,
114905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % so that \makeheadline knows which color to restore.
115005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\setcolor#1{%
115105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
115205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \domark
115305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \pdfsetcolor{#1}%
115405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
115505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
115605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\maincolor{\rgbBlack}
115705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \pdfsetcolor{\maincolor}
115805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \edef\thiscolor{\maincolor}
115905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\lastcolordefs{}
116005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
116105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\makefootline{%
116205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \baselineskip24pt
116305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \line{\pdfsetcolor{\maincolor}\the\footline}%
116405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
116505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
116605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\makeheadline{%
116705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \vbox to 0pt{%
116805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \vskip-22.5pt
116905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \line{%
117005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \vbox to8.5pt{}%
117105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        % Extract \thiscolor definition from the marks.
117205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \getcolormarks
117305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        % Typeset the headline with \maincolor, then restore the color.
117405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
117505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      }%
117605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \vss
117705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }%
117805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \nointerlineskip
117905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
118005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
118105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
118205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \pdfcatalog{/PageMode /UseOutlines}
118305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
118405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
1185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\dopdfimage#1#2#3{%
118605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
118705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
118805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
118905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % pdftex (and the PDF format) support .pdf, .png, .jpg (among
119005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % others).  Let's try in that order, PDF first since if
119105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % someone has a scalable image, presumably better to use that than a
119205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % bitmap.
119305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\pdfimgext=\empty
119405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \begingroup
119505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \openin 1 #1.pdf \ifeof 1
119605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \openin 1 #1.PDF \ifeof 1
119705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \openin 1 #1.png \ifeof 1
119805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            \openin 1 #1.jpg \ifeof 1
119905436638acc7c010349a69c3395f1a57c642dc62Ying Wang              \openin 1 #1.jpeg \ifeof 1
120005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                \openin 1 #1.JPG \ifeof 1
120105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  \errhelp = \nopdfimagehelp
120205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  \errmessage{Could not find image file #1 for pdf}%
120305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                \else \gdef\pdfimgext{JPG}%
120405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                \fi
120505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              \else \gdef\pdfimgext{jpeg}%
120605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              \fi
120705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            \else \gdef\pdfimgext{jpg}%
120805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            \fi
120905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \else \gdef\pdfimgext{png}%
121005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \fi
121105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \else \gdef\pdfimgext{PDF}%
121205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \fi
121305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \else \gdef\pdfimgext{pdf}%
121405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \fi
121505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \closein 1
121605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \endgroup
121705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
121805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % without \immediate, ancient pdftex seg faults when the same image is
1219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
1220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum\pdftexversion < 14
1221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \immediate\pdfimage
1222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
1223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \immediate\pdfximage
1224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
122505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifdim \wd0 >0pt width \pdfimagewidth \fi
122605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifdim \wd2 >0pt height \pdfimageheight \fi
1227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifnum\pdftexversion<13
122805436638acc7c010349a69c3395f1a57c642dc62Ying Wang         #1.\pdfimgext
1229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       \else
123005436638acc7c010349a69c3395f1a57c642dc62Ying Wang         {#1.\pdfimgext}%
1231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       \fi
1232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum\pdftexversion < 14 \else
1233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \pdfrefximage \pdflastximage
1234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi}
123505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
1236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\pdfmkdest#1{{%
1237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % We have to set dummies so commands such as @code, and characters
1238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % such as \, aren't expanded when present in a section title.
123905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \indexnofonts
124005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \turnoffactive
124105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \makevalueexpandable
1242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\pdfdestname{#1}%
124305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \txiescapepdf\pdfdestname
124405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
124505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }}
1246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
1247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % used to mark target names; must be expandable.
124805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\pdfmkpgn#1{#1}
124905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
125005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % by default, use a color that is dark enough to print on paper as
125105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % nearly black, but still distinguishable for online viewing.
125205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\urlcolor{\rgbDarkRed}
125305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\linkcolor{\rgbDarkRed}
125405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\endlink{\setcolor{\maincolor}\pdfendlink}
1255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
1256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Adding outlines to PDF; macros for calculating structure of outlines
1257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % come from Petr Olsak
1258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
1259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else \csname#1\endcsname \fi}
1260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
1261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \advance\tempnum by 1
1262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
1263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
1264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % #1 is the section text, which is what will be displayed in the
1265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % outline by the pdf viewer.  #2 is the pdf expression for the number
1266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % of subentries (or empty, for subsubsections).  #3 is the node text,
1267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % which might be empty if this toc entry had no corresponding node.
1268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % #4 is the page number
1269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
1270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\dopdfoutline#1#2#3#4{%
1271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Generate a link to the node text if that exists; else, use the
1272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % page number.  We could generate a destination for the section
1273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % text in the case where a section has no node, but it doesn't
1274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % seem worth the trouble, since most documents are normally structured.
127505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \edef\pdfoutlinedest{#3}%
1276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\pdfoutlinedest\empty
1277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\pdfoutlinedest{#4}%
1278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
127905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \txiescapepdf\pdfoutlinedest
1280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
1281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
128205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Also escape PDF chars in the display string.
128305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \edef\pdfoutlinetext{#1}%
128405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \txiescapepdf\pdfoutlinetext
1285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
1286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
1287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
1288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
1289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\pdfmakeoutlines{%
1290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \begingroup
1291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Read toc silently, to get counts of subentries for \pdfoutline.
129205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\partentry##1##2##3##4{}% ignore parts in the outlines
1293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\numchapentry##1##2##3##4{%
1294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\def\thischapnum{##2}%
1295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\def\thissecnum{0}%
1296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\def\thissubsecnum{0}%
1297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }%
1298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\numsecentry##1##2##3##4{%
1299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\advancenumber{chap\thischapnum}%
1300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\def\thissecnum{##2}%
1301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\def\thissubsecnum{0}%
1302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }%
1303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\numsubsecentry##1##2##3##4{%
1304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\advancenumber{sec\thissecnum}%
1305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\def\thissubsecnum{##2}%
1306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }%
1307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\numsubsubsecentry##1##2##3##4{%
1308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\advancenumber{subsec\thissubsecnum}%
1309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }%
1310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\thischapnum{0}%
1311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\thissecnum{0}%
1312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\thissubsecnum{0}%
1313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
1314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % use \def rather than \let here because we redefine \chapentry et
1315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % al. a second time, below.
1316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\appentry{\numchapentry}%
1317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\appsecentry{\numsecentry}%
1318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\appsubsecentry{\numsubsecentry}%
1319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\appsubsubsecentry{\numsubsubsecentry}%
1320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\unnchapentry{\numchapentry}%
1321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\unnsecentry{\numsecentry}%
1322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\unnsubsecentry{\numsubsecentry}%
1323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\unnsubsubsecentry{\numsubsubsecentry}%
1324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \readdatafile{toc}%
1325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
1326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Read toc second time, this time actually producing the outlines.
1327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % The `-' means take the \expnumber as the absolute number of
1328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % subentries, which we calculated on our first read of the .toc above.
1329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
1330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % We use the node names as the destinations.
1331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\numchapentry##1##2##3##4{%
1332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
1333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\numsecentry##1##2##3##4{%
1334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
1335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\numsubsecentry##1##2##3##4{%
1336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
1337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\numsubsubsecentry##1##2##3##4{% count is always zero
1338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \dopdfoutline{##1}{}{##3}{##4}}%
1339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
1340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % PDF outlines are displayed using system fonts, instead of
1341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % document fonts.  Therefore we cannot use special characters,
1342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % since the encoding is unknown.  For example, the eogonek from
1343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Latin 2 (0xea) gets translated to a | character.  Info from
1344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
1345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
134605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % TODO this right, we have to translate 8-bit characters to
134705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % their "best" equivalent, based on the @documentencoding.  Too
134805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % much work for too little return.  Just use the ASCII equivalents
134905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % we use for the index sort strings.
135005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % 
1351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \indexnofonts
1352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setupdatafile
135305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % We can have normal brace characters in the PDF outlines, unlike
135405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % Texinfo index files.  So set that up.
135505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\{{\lbracecharliteral}%
135605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\}{\rbracecharliteral}%
135705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \catcode`\\=\active \otherbackslash
135805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \input \tocreadfilename
1359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup
1360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
136105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {\catcode`[=1 \catcode`]=2
136205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \catcode`{=\other \catcode`}=\other
136305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \gdef\lbracecharliteral[{]%
136405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \gdef\rbracecharliteral[}]%
136505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ]
1366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
1367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
1368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\PP\D\let\nextsp\relax
1369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else\let\nextsp\skipspaces
137005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \addtokens{\filename}{\PP}%
137105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \advance\filenamelength by 1
1372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
1373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \nextsp}
137405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\getfilename#1{%
137505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \filenamelength=0
137605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % If we don't expand the argument now, \skipspaces will get
137705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % snagged on things like "@value{foo}".
137805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \edef\temp{#1}%
137905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\skipspaces\temp|\relax
138005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
1381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\pdftexversion < 14
1382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let \startlink \pdfannotlink
1383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
1384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let \startlink \pdfstartlink
1385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
138605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % make a live url in pdf output.
1387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\pdfurl#1{%
1388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \begingroup
138905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % it seems we really need yet another set of dummies; have not
139005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % tried to figure out what each command should do in the context
139105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % of @url.  for now, just make @/ a no-op, that's the only one
139205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % people have actually reported a problem with.
139305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      %
139405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \normalturnoffactive
139505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\@{@}%
139605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \let\/=\empty
1397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \makevalueexpandable
139805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % do we want to go so far as to use \indexnofonts instead of just
139905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % special-casing \var here?
140005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\var##1{##1}%
140105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      %
140205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \leavevmode\setcolor{\urlcolor}%
1403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \startlink attr{/Border [0 0 0]}%
1404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
1405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup}
1406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
1407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
1408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
1409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
1410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\maketoks{%
1411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
1412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\first0\adn0
1413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
1414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
1415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
1416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
1417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifnum0=\countA\else\makelink\fi
1418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifx\first.\let\next=\done\else
1419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \let\next=\maketoks
1420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \addtokens{\toksB}{\the\toksD}
1421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \ifx\first,\addtokens{\toksB}{\space}\fi
1422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
1423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
1424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \next}
1425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\makelink{\addtokens{\toksB}%
1426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
1427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\pdflink#1{%
1428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
142905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \setcolor{\linkcolor}#1\endlink}
1430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
1431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\else
143205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % non-pdf mode
1433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\pdfmkdest = \gobble
1434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\pdfurl = \gobble
1435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\endlink = \relax
143605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\setcolor = \gobble
143705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\pdfsetcolor = \gobble
1438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\pdfmakeoutlines = \relax
1439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi  % \ifx\pdfoutput
1440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{fonts,}
1443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Change the current font style to #1, remembering it in \curfontstyle.
1445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
1446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% italics, not bold italics.
1447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
1448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setfontstyle#1{%
1449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
1450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \csname ten#1\endcsname  % change the current font
1451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Select #1 fonts with the current style.
1454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
1455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
1456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\rm{\fam=0 \setfontstyle{rm}}
1458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\it{\fam=\itfam \setfontstyle{it}}
1459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\sl{\fam=\slfam \setfontstyle{sl}}
1460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
1461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\tt{\fam=\ttfam \setfontstyle{tt}}
1462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
146305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Unfortunately, we have to override this for titles and the like, since
146405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% in those cases "rm" is bold.  Sigh.
146505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\rmisbold{\rm\def\curfontstyle{bf}}
146605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Texinfo sort of supports the sans serif font style, which plain TeX does not.
1468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% So we set up a \sf.
1469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newfam\sffam
1470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\sf{\fam=\sffam \setfontstyle{sf}}
1471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\li = \sf % Sometimes we call it \li, not \sf.
1472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We don't need math for this font style.
1474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ttsl{\setfontstyle{ttsl}}
1475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Set the baselineskip to #1, and the lineskip and strut size
1478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% correspondingly.  There is no deep meaning behind these magic numbers
1479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% used as factors; they just match (closely enough) what Knuth defined.
1480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
1481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\lineskipfactor{.08333}
1482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\strutheightpercent{.70833}
1483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\strutdepthpercent {.29167}
1484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
148505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% can get a sort of poor man's double spacing by redefining this.
148605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\baselinefactor{1}
148705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
148805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newdimen\textleading
1489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setleading#1{%
149005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \dimen0 = #1\relax
149105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \normalbaselineskip = \baselinefactor\dimen0
1492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \normallineskip = \lineskipfactor\normalbaselineskip
1493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \normalbaselines
1494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox\strutbox =\hbox{%
1495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vrule width0pt height\strutheightpercent\baselineskip
1496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    depth \strutdepthpercent \baselineskip
1497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
1498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
150005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% PDF CMaps.  See also LaTeX's t1.cmap.
150105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
150205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% do nothing with this by default.
150305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\expandafter\let\csname cmapOT1\endcsname\gobble
150405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\expandafter\let\csname cmapOT1IT\endcsname\gobble
150505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\expandafter\let\csname cmapOT1TT\endcsname\gobble
1506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
150705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% if we are producing pdf, and we have \pdffontattr, then define cmaps.
150805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (\pdffontattr was introduced many years ago, but people still run
150905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% older pdftex's; it's easy to conditionalize, so we do.)
151005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifpdf \ifx\pdffontattr\thisisundefined \else
151105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \begingroup
151205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
151305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
151405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%DocumentNeededResources: ProcSet (CIDInit)
151505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%IncludeResource: ProcSet (CIDInit)
151605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%BeginResource: CMap (TeX-OT1-0)
151705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%Title: (TeX-OT1-0 TeX OT1 0)
151805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%Version: 1.000
151905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%EndComments
152005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CIDInit /ProcSet findresource begin
152105436638acc7c010349a69c3395f1a57c642dc62Ying Wang12 dict begin
152205436638acc7c010349a69c3395f1a57c642dc62Ying Wangbegincmap
152305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CIDSystemInfo
152405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<< /Registry (TeX)
152505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/Ordering (OT1)
152605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/Supplement 0
152705436638acc7c010349a69c3395f1a57c642dc62Ying Wang>> def
152805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CMapName /TeX-OT1-0 def
152905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CMapType 2 def
153005436638acc7c010349a69c3395f1a57c642dc62Ying Wang1 begincodespacerange
153105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<00> <7F>
153205436638acc7c010349a69c3395f1a57c642dc62Ying Wangendcodespacerange
153305436638acc7c010349a69c3395f1a57c642dc62Ying Wang8 beginbfrange
153405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<00> <01> <0393>
153505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<09> <0A> <03A8>
153605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<23> <26> <0023>
153705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<28> <3B> <0028>
153805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<3F> <5B> <003F>
153905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<5D> <5E> <005D>
154005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<61> <7A> <0061>
154105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<7B> <7C> <2013>
154205436638acc7c010349a69c3395f1a57c642dc62Ying Wangendbfrange
154305436638acc7c010349a69c3395f1a57c642dc62Ying Wang40 beginbfchar
154405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<02> <0398>
154505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<03> <039B>
154605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<04> <039E>
154705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<05> <03A0>
154805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<06> <03A3>
154905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<07> <03D2>
155005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<08> <03A6>
155105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0B> <00660066>
155205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0C> <00660069>
155305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0D> <0066006C>
155405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0E> <006600660069>
155505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0F> <00660066006C>
155605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<10> <0131>
155705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<11> <0237>
155805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<12> <0060>
155905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<13> <00B4>
156005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<14> <02C7>
156105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<15> <02D8>
156205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<16> <00AF>
156305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<17> <02DA>
156405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<18> <00B8>
156505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<19> <00DF>
156605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1A> <00E6>
156705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1B> <0153>
156805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1C> <00F8>
156905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1D> <00C6>
157005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1E> <0152>
157105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1F> <00D8>
157205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<21> <0021>
157305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<22> <201D>
157405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<27> <2019>
157505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<3C> <00A1>
157605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<3D> <003D>
157705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<3E> <00BF>
157805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<5C> <201C>
157905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<5F> <02D9>
158005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<60> <2018>
158105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<7D> <02DD>
158205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<7E> <007E>
158305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<7F> <00A8>
158405436638acc7c010349a69c3395f1a57c642dc62Ying Wangendbfchar
158505436638acc7c010349a69c3395f1a57c642dc62Ying Wangendcmap
158605436638acc7c010349a69c3395f1a57c642dc62Ying WangCMapName currentdict /CMap defineresource pop
158705436638acc7c010349a69c3395f1a57c642dc62Ying Wangend
158805436638acc7c010349a69c3395f1a57c642dc62Ying Wangend
158905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%EndResource
159005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%EOF
159105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }\endgroup
159205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\edef\csname cmapOT1\endcsname#1{%
159305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
159405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }%
159505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
159605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \cmapOT1IT
159705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \begingroup
159805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
159905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
160005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%DocumentNeededResources: ProcSet (CIDInit)
160105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%IncludeResource: ProcSet (CIDInit)
160205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%BeginResource: CMap (TeX-OT1IT-0)
160305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
160405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%Version: 1.000
160505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%EndComments
160605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CIDInit /ProcSet findresource begin
160705436638acc7c010349a69c3395f1a57c642dc62Ying Wang12 dict begin
160805436638acc7c010349a69c3395f1a57c642dc62Ying Wangbegincmap
160905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CIDSystemInfo
161005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<< /Registry (TeX)
161105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/Ordering (OT1IT)
161205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/Supplement 0
161305436638acc7c010349a69c3395f1a57c642dc62Ying Wang>> def
161405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CMapName /TeX-OT1IT-0 def
161505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CMapType 2 def
161605436638acc7c010349a69c3395f1a57c642dc62Ying Wang1 begincodespacerange
161705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<00> <7F>
161805436638acc7c010349a69c3395f1a57c642dc62Ying Wangendcodespacerange
161905436638acc7c010349a69c3395f1a57c642dc62Ying Wang8 beginbfrange
162005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<00> <01> <0393>
162105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<09> <0A> <03A8>
162205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<25> <26> <0025>
162305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<28> <3B> <0028>
162405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<3F> <5B> <003F>
162505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<5D> <5E> <005D>
162605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<61> <7A> <0061>
162705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<7B> <7C> <2013>
162805436638acc7c010349a69c3395f1a57c642dc62Ying Wangendbfrange
162905436638acc7c010349a69c3395f1a57c642dc62Ying Wang42 beginbfchar
163005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<02> <0398>
163105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<03> <039B>
163205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<04> <039E>
163305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<05> <03A0>
163405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<06> <03A3>
163505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<07> <03D2>
163605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<08> <03A6>
163705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0B> <00660066>
163805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0C> <00660069>
163905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0D> <0066006C>
164005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0E> <006600660069>
164105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0F> <00660066006C>
164205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<10> <0131>
164305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<11> <0237>
164405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<12> <0060>
164505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<13> <00B4>
164605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<14> <02C7>
164705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<15> <02D8>
164805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<16> <00AF>
164905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<17> <02DA>
165005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<18> <00B8>
165105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<19> <00DF>
165205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1A> <00E6>
165305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1B> <0153>
165405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1C> <00F8>
165505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1D> <00C6>
165605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1E> <0152>
165705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1F> <00D8>
165805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<21> <0021>
165905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<22> <201D>
166005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<23> <0023>
166105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<24> <00A3>
166205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<27> <2019>
166305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<3C> <00A1>
166405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<3D> <003D>
166505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<3E> <00BF>
166605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<5C> <201C>
166705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<5F> <02D9>
166805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<60> <2018>
166905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<7D> <02DD>
167005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<7E> <007E>
167105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<7F> <00A8>
167205436638acc7c010349a69c3395f1a57c642dc62Ying Wangendbfchar
167305436638acc7c010349a69c3395f1a57c642dc62Ying Wangendcmap
167405436638acc7c010349a69c3395f1a57c642dc62Ying WangCMapName currentdict /CMap defineresource pop
167505436638acc7c010349a69c3395f1a57c642dc62Ying Wangend
167605436638acc7c010349a69c3395f1a57c642dc62Ying Wangend
167705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%EndResource
167805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%EOF
167905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }\endgroup
168005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
168105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
168205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }%
168305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
168405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \cmapOT1TT
168505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \begingroup
168605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
168705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
168805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%DocumentNeededResources: ProcSet (CIDInit)
168905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%IncludeResource: ProcSet (CIDInit)
169005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%BeginResource: CMap (TeX-OT1TT-0)
169105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
169205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%Version: 1.000
169305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%EndComments
169405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CIDInit /ProcSet findresource begin
169505436638acc7c010349a69c3395f1a57c642dc62Ying Wang12 dict begin
169605436638acc7c010349a69c3395f1a57c642dc62Ying Wangbegincmap
169705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CIDSystemInfo
169805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<< /Registry (TeX)
169905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/Ordering (OT1TT)
170005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/Supplement 0
170105436638acc7c010349a69c3395f1a57c642dc62Ying Wang>> def
170205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CMapName /TeX-OT1TT-0 def
170305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/CMapType 2 def
170405436638acc7c010349a69c3395f1a57c642dc62Ying Wang1 begincodespacerange
170505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<00> <7F>
170605436638acc7c010349a69c3395f1a57c642dc62Ying Wangendcodespacerange
170705436638acc7c010349a69c3395f1a57c642dc62Ying Wang5 beginbfrange
170805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<00> <01> <0393>
170905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<09> <0A> <03A8>
171005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<21> <26> <0021>
171105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<28> <5F> <0028>
171205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<61> <7E> <0061>
171305436638acc7c010349a69c3395f1a57c642dc62Ying Wangendbfrange
171405436638acc7c010349a69c3395f1a57c642dc62Ying Wang32 beginbfchar
171505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<02> <0398>
171605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<03> <039B>
171705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<04> <039E>
171805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<05> <03A0>
171905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<06> <03A3>
172005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<07> <03D2>
172105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<08> <03A6>
172205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0B> <2191>
172305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0C> <2193>
172405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0D> <0027>
172505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0E> <00A1>
172605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<0F> <00BF>
172705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<10> <0131>
172805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<11> <0237>
172905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<12> <0060>
173005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<13> <00B4>
173105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<14> <02C7>
173205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<15> <02D8>
173305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<16> <00AF>
173405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<17> <02DA>
173505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<18> <00B8>
173605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<19> <00DF>
173705436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1A> <00E6>
173805436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1B> <0153>
173905436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1C> <00F8>
174005436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1D> <00C6>
174105436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1E> <0152>
174205436638acc7c010349a69c3395f1a57c642dc62Ying Wang<1F> <00D8>
174305436638acc7c010349a69c3395f1a57c642dc62Ying Wang<20> <2423>
174405436638acc7c010349a69c3395f1a57c642dc62Ying Wang<27> <2019>
174505436638acc7c010349a69c3395f1a57c642dc62Ying Wang<60> <2018>
174605436638acc7c010349a69c3395f1a57c642dc62Ying Wang<7F> <00A8>
174705436638acc7c010349a69c3395f1a57c642dc62Ying Wangendbfchar
174805436638acc7c010349a69c3395f1a57c642dc62Ying Wangendcmap
174905436638acc7c010349a69c3395f1a57c642dc62Ying WangCMapName currentdict /CMap defineresource pop
175005436638acc7c010349a69c3395f1a57c642dc62Ying Wangend
175105436638acc7c010349a69c3395f1a57c642dc62Ying Wangend
175205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%EndResource
175305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%%EOF
175405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }\endgroup
175505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
175605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
175705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }%
175805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\fi\fi
175905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
176005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
176105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Set the font macro #1 to the font named \fontprefix#2.
176205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
176305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
176405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Example:
176505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #1 = \textrm
176605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #2 = \rmshape
176705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #3 = 10
176805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #4 = \mainmagstep
176905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #5 = OT1
177005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
177105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\setfont#1#2#3#4#5{%
177205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \font#1=\fontprefix#2#3 scaled #4
177305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \csname cmap#5\endcsname#1%
177405436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
177505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This is what gets called when #5 of \setfont is empty.
177605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\cmap\gobble
177705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
177805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (end of cmaps)
177905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
178005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Use cm as the default font prefix.
178105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% To specify the font prefix, you must define \fontprefix
1782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% before you read in texinfo.tex.
178305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifx\fontprefix\thisisundefined
1784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\fontprefix{cm}
1785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi
1786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Support font families that don't use the same naming scheme as CM.
1787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\rmshape{r}
178805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\rmbshape{bx}               % where the normal face is bold
1789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\bfshape{b}
1790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\bxshape{bx}
1791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ttshape{tt}
1792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ttbshape{tt}
1793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ttslshape{sltt}
1794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\itshape{ti}
1795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\itbshape{bxti}
1796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\slshape{sl}
1797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\slbshape{bxsl}
1798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\sfshape{ss}
1799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\sfbshape{ss}
1800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\scshape{csc}
1801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\scbshape{csc}
1802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
180305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Definitions for a main text size of 11pt.  (The default in Texinfo.)
180405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
180505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\definetextfontsizexi{%
1806cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Text fonts (11.2pt, magstep1).
1807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\textnominalsize{11pt}
1808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\edef\mainmagstep{\magstephalf}
180905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
181005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
181105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
181205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
181305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
181405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
181505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
181605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
1817cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\texti=cmmi10 scaled \mainmagstep
1818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\textsy=cmsy10 scaled \mainmagstep
181905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\textecsize{1095}
1820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1821cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% A few fonts for @defun names and args.
182205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\defbf\bfshape{10}{\magstep1}{OT1}
182305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
182405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
1825cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
1826cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1827cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Fonts for indices, footnotes, small examples (9pt).
1828cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\smallnominalsize{9pt}
182905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallrm\rmshape{9}{1000}{OT1}
183005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smalltt\ttshape{9}{1000}{OT1TT}
183105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallbf\bfshape{10}{900}{OT1}
183205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallit\itshape{9}{1000}{OT1IT}
183305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallsl\slshape{9}{1000}{OT1}
183405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallsf\sfshape{9}{1000}{OT1}
183505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallsc\scshape{10}{900}{OT1}
183605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
1837cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\smalli=cmmi9
1838cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\smallsy=cmsy9
183905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\smallecsize{0900}
1840cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Fonts for small examples (8pt).
1842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\smallernominalsize{8pt}
184305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallerrm\rmshape{8}{1000}{OT1}
184405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallertt\ttshape{8}{1000}{OT1TT}
184505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallerbf\bfshape{10}{800}{OT1}
184605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallerit\itshape{8}{1000}{OT1IT}
184705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallersl\slshape{8}{1000}{OT1}
184805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallersf\sfshape{8}{1000}{OT1}
184905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallersc\scshape{10}{800}{OT1}
185005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
1851cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\smalleri=cmmi8
1852cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\smallersy=cmsy8
185305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\smallerecsize{0800}
1854cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1855cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Fonts for title page (20.4pt):
1856cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\titlenominalsize{20pt}
185705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
185805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
185905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
186005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
186105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
186205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
1863cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\titlebf=\titlerm
186405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
1865cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\titlei=cmmi12 scaled \magstep3
1866cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\titlesy=cmsy10 scaled \magstep4
186705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\titleecsize{2074}
1868cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1869cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Chapter (and unnumbered) fonts (17.28pt).
1870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chapnominalsize{17pt}
187105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
187205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
187305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
187405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
187505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
187605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapsf\sfbshape{17}{1000}{OT1}
1877cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\chapbf=\chaprm
187805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
1879cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\chapi=cmmi12 scaled \magstep2
1880cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\chapsy=cmsy10 scaled \magstep3
188105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\chapecsize{1728}
1882cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1883cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Section fonts (14.4pt).
1884cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\secnominalsize{14pt}
188505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
188605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
188705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secsl\slbshape{10}{\magstep2}{OT1}
188805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
188905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
189005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
1891cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\secbf\secrm
189205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secsc\scbshape{10}{\magstep2}{OT1}
1893cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\seci=cmmi12 scaled \magstep1
1894cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\secsy=cmsy10 scaled \magstep2
189505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\sececsize{1440}
1896cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1897cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Subsection fonts (13.15pt).
1898cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ssecnominalsize{13pt}
189905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
190005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecit\itbshape{10}{1315}{OT1IT}
190105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecsl\slbshape{10}{1315}{OT1}
190205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
190305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
190405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
1905cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\ssecbf\ssecrm
190605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecsc\scbshape{10}{1315}{OT1}
1907cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\sseci=cmmi12 scaled \magstephalf
1908cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\ssecsy=cmsy10 scaled 1315
190905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ssececsize{1200}
1910cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1911cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Reduced fonts for @acro in text (10pt).
1912cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\reducednominalsize{10pt}
191305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedrm\rmshape{10}{1000}{OT1}
191405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
191505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedbf\bfshape{10}{1000}{OT1}
191605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedit\itshape{10}{1000}{OT1IT}
191705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedsl\slshape{10}{1000}{OT1}
191805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedsf\sfshape{10}{1000}{OT1}
191905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedsc\scshape{10}{1000}{OT1}
192005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
1921cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\reducedi=cmmi10
1922cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\reducedsy=cmsy10
192305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\reducedecsize{1000}
192405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
192505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\textleading = 13.2pt % line spacing for 11pt CM
192605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\textfonts            % reset the current fonts
192705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\rm
192805436638acc7c010349a69c3395f1a57c642dc62Ying Wang} % end of 11pt text font size definitions, \definetextfontsizexi
192905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
193005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
193105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Definitions to make the main text be 10pt Computer Modern, with
193205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% section, chapter, etc., sizes following suit.  This is for the GNU
193305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Press printing of the Emacs 22 manual.  Maybe other manuals in the
193405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% future.  Used with @smallbook, which sets the leading to 12pt.
193505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
193605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\definetextfontsizex{%
193705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Text fonts (10pt).
193805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\textnominalsize{10pt}
193905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\edef\mainmagstep{1000}
194005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
194105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
194205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
194305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
194405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
194505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
194605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
194705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
194805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\texti=cmmi10 scaled \mainmagstep
194905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\textsy=cmsy10 scaled \mainmagstep
195005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\textecsize{1000}
195105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
195205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% A few fonts for @defun names and args.
195305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
195405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
195505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
195605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
195705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
195805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Fonts for indices, footnotes, small examples (9pt).
195905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\smallnominalsize{9pt}
196005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallrm\rmshape{9}{1000}{OT1}
196105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smalltt\ttshape{9}{1000}{OT1TT}
196205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallbf\bfshape{10}{900}{OT1}
196305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallit\itshape{9}{1000}{OT1IT}
196405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallsl\slshape{9}{1000}{OT1}
196505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallsf\sfshape{9}{1000}{OT1}
196605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallsc\scshape{10}{900}{OT1}
196705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
196805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\smalli=cmmi9
196905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\smallsy=cmsy9
197005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\smallecsize{0900}
197105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
197205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Fonts for small examples (8pt).
197305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\smallernominalsize{8pt}
197405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallerrm\rmshape{8}{1000}{OT1}
197505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallertt\ttshape{8}{1000}{OT1TT}
197605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallerbf\bfshape{10}{800}{OT1}
197705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallerit\itshape{8}{1000}{OT1IT}
197805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallersl\slshape{8}{1000}{OT1}
197905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallersf\sfshape{8}{1000}{OT1}
198005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallersc\scshape{10}{800}{OT1}
198105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
198205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\smalleri=cmmi8
198305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\smallersy=cmsy8
198405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\smallerecsize{0800}
198505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
198605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Fonts for title page (20.4pt):
198705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\titlenominalsize{20pt}
198805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
198905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
199005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
199105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
199205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
199305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
199405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\titlebf=\titlerm
199505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
199605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\titlei=cmmi12 scaled \magstep3
199705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\titlesy=cmsy10 scaled \magstep4
199805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\titleecsize{2074}
199905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
200005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Chapter fonts (14.4pt).
200105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\chapnominalsize{14pt}
200205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
200305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
200405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
200505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
200605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
200705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
200805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\chapbf\chaprm
200905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
201005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\chapi=cmmi12 scaled \magstep1
201105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\chapsy=cmsy10 scaled \magstep2
201205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\chapecsize{1440}
201305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
201405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Section fonts (12pt).
201505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\secnominalsize{12pt}
201605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secrm\rmbshape{12}{1000}{OT1}
201705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
201805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secsl\slbshape{10}{\magstep1}{OT1}
201905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\sectt\ttbshape{12}{1000}{OT1TT}
202005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
202105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secsf\sfbshape{12}{1000}{OT1}
202205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\secbf\secrm
202305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\secsc\scbshape{10}{\magstep1}{OT1}
202405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\seci=cmmi12
202505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\secsy=cmsy10 scaled \magstep1
202605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\sececsize{1200}
202705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
202805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Subsection fonts (10pt).
202905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ssecnominalsize{10pt}
203005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecrm\rmbshape{10}{1000}{OT1}
203105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecit\itbshape{10}{1000}{OT1IT}
203205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecsl\slbshape{10}{1000}{OT1}
203305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
203405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
203505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecsf\sfbshape{10}{1000}{OT1}
203605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\ssecbf\ssecrm
203705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\ssecsc\scbshape{10}{1000}{OT1}
203805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\sseci=cmmi10
203905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\ssecsy=cmsy10
204005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ssececsize{1000}
204105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
204205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Reduced fonts for @acro in text (9pt).
204305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\reducednominalsize{9pt}
204405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedrm\rmshape{9}{1000}{OT1}
204505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
204605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedbf\bfshape{10}{900}{OT1}
204705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedit\itshape{9}{1000}{OT1IT}
204805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedsl\slshape{9}{1000}{OT1}
204905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedsf\sfshape{9}{1000}{OT1}
205005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedsc\scshape{10}{900}{OT1}
205105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
205205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\reducedi=cmmi9
205305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\font\reducedsy=cmsy9
205405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\reducedecsize{0900}
205505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
205605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\divide\parskip by 2  % reduce space between paragraphs
205705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\textleading = 12pt   % line spacing for 10pt CM
205805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\textfonts            % reset the current fonts
205905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\rm
206005436638acc7c010349a69c3395f1a57c642dc62Ying Wang} % end of 10pt text font size definitions, \definetextfontsizex
206105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
206205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
206305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% We provide the user-level command
206405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%   @fonttextsize 10
206505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (or 11) to redefine the text font size.  pt is assumed.
206605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
206705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\xiword{11}
206805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\xword{10}
206905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\xwordpt{10pt}
207005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
207105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\fonttextsize{%
207205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\textsizearg{#1}%
207305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %\wlog{doing @fonttextsize \textsizearg}%
207405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
207505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Set \globaldefs so that documents can use this inside @tex, since
207605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % makeinfo 4.8 does not support it, but we need it nonetheless.
207705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
207805436638acc7c010349a69c3395f1a57c642dc62Ying Wang \begingroup \globaldefs=1
207905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\textsizearg\xword \definetextfontsizex
208005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \ifx\textsizearg\xiword \definetextfontsizexi
208105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
208205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errhelp=\EMsimple
208305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
208405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi
208505436638acc7c010349a69c3395f1a57c642dc62Ying Wang \endgroup
208605436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
208705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2088cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% In order for the font changes to affect most math symbols and letters,
2090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% we have to define the \textfont of the standard families.  Since
2091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% texinfo doesn't allow for producing subscripts and superscripts except
2092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% in the main text, we don't bother to reset \scriptfont and
2093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \scriptscriptfont (which would also require loading a lot more fonts).
2094cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2095cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\resetmathfonts{%
2096cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
2097cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
2098cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \textfont\ttfam=\tentt \textfont\sffam=\tensf
2099cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The font-changing commands redefine the meanings of \tenSTYLE, instead
2102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% of just \STYLE.  We do this because \STYLE needs to also set the
2103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
2104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \tenSTYLE to set the current font.
2105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Each font-changing command also sets the names \lsize (one size lower)
2107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% and \lllsize (three sizes lower).  These relative commands are used in
2108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the LaTeX logo and acronyms.
2109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This all needs generalizing, badly.
2111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\textfonts{%
2113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
2114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
2115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
2116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenttsl=\textttsl
2117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\curfontsize{text}%
2118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\lsize{reduced}\def\lllsize{smaller}%
2119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetmathfonts \setleading{\textleading}}
2120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\titlefonts{%
2121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
2122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
2123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
2124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenttsl=\titlettsl
2125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\curfontsize{title}%
2126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\lsize{chap}\def\lllsize{subsec}%
212705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \resetmathfonts \setleading{27pt}}
212805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\titlefont#1{{\titlefonts\rmisbold #1}}
2129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chapfonts{%
2130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
2131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
2132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
2133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenttsl=\chapttsl
2134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\curfontsize{chap}%
2135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\lsize{sec}\def\lllsize{text}%
2136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetmathfonts \setleading{19pt}}
2137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\secfonts{%
2138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
2139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
2140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
2141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenttsl=\secttsl
2142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\curfontsize{sec}%
2143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\lsize{subsec}\def\lllsize{reduced}%
2144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetmathfonts \setleading{16pt}}
2145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\subsecfonts{%
2146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
2147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
2148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
2149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenttsl=\ssecttsl
2150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\curfontsize{ssec}%
2151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\lsize{text}\def\lllsize{small}%
2152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetmathfonts \setleading{15pt}}
2153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\subsubsecfonts = \subsecfonts
2154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\reducedfonts{%
2155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
2156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
2157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
2158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenttsl=\reducedttsl
2159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\curfontsize{reduced}%
2160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\lsize{small}\def\lllsize{smaller}%
2161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetmathfonts \setleading{10.5pt}}
2162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\smallfonts{%
2163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
2164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
2165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
2166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenttsl=\smallttsl
2167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\curfontsize{small}%
2168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\lsize{smaller}\def\lllsize{smaller}%
2169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetmathfonts \setleading{10.5pt}}
2170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\smallerfonts{%
2171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
2172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
2173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
2174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tenttsl=\smallerttsl
2175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\curfontsize{smaller}%
2176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\lsize{smaller}\def\lllsize{smaller}%
2177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetmathfonts \setleading{9.5pt}}
2178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
217905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Fonts for short table of contents.
218005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\shortcontrm\rmshape{12}{1000}{OT1}
218105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
218205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\shortcontsl\slshape{12}{1000}{OT1}
218305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
218405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
218505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Define these just so they can be easily changed for other fonts.
218605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\angleleft{$\langle$}
218705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\angleright{$\rangle$}
218805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Set the fonts to use with the @small... environments.
2190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\smallexamplefonts = \smallfonts
2191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
2193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% can fit this many characters:
2194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   8.5x11=86   smallbook=72  a4=90  a5=69
2195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If we use \scriptfonts (8pt), then we can fit this many characters:
2196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   8.5x11=90+  smallbook=80  a4=90+  a5=77
2197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% For me, subjectively, the few extra characters that fit aren't worth
2198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the additional smallness of 8pt.  So I'm making the default 9pt.
2199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% By the way, for comparison, here's what fits with @example (10pt):
2201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   8.5x11=71  smallbook=60  a4=75  a5=58
2202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% --karl, 24jan03.
2203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Set up the default fonts, so we can use them for creating boxes.
2205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
220605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\definetextfontsizexi
2207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
220805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
220905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\message{markup,}
221005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
221105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Check if we are currently using a typewriter font.  Since all the
221205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Computer Modern typewriter fonts have zero interword stretch (and
221305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% shrink), and it is reasonable to expect all typewriter fonts to have
221405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% this property, we can check that font parameter.
221505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
221605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
221705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
221805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
221905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% define and register \INITMACRO to be called on markup style changes.
222005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \INITMACRO can check \currentmarkupstyle for the innermost
222105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% style and the set of \ifmarkupSTYLE switches for all styles
222205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% currently in effect.
222305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifmarkupvar
222405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifmarkupsamp
222505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifmarkupkey
222605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%\newif\ifmarkupfile % @file == @samp.
222705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%\newif\ifmarkupoption % @option == @samp.
222805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifmarkupcode
222905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifmarkupkbd
223005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%\newif\ifmarkupenv % @env == @code.
223105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%\newif\ifmarkupcommand % @command == @code.
223205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifmarkuptex % @tex (and part of @math, for now).
223305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifmarkupexample
223405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifmarkupverb
223505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifmarkupverbatim
223605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
223705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\currentmarkupstyle\empty
223805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
223905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\setupmarkupstyle#1{%
224005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \csname markup#1true\endcsname
224105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\currentmarkupstyle{#1}%
224205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \markupstylesetup
224305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
224405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
224505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupstylesetup\empty
224605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
224705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\defmarkupstylesetup#1{%
224805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\def\expandafter\markupstylesetup
224905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter{\markupstylesetup #1}%
225005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def#1%
225105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
225205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
225305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Markup style setup for left and right quotes.
225405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\defmarkupstylesetup\markupsetuplq{%
225505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\let\expandafter \temp
225605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \csname markupsetuplq\currentmarkupstyle\endcsname
225705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
225805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
225905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
226005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\defmarkupstylesetup\markupsetuprq{%
226105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\let\expandafter \temp
226205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \csname markupsetuprq\currentmarkupstyle\endcsname
226305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
226405436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
226505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
226605436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
226705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\'=\active
226805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\`=\active
226905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
227005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\markupsetuplqdefault{\let`\lq}
227105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\markupsetuprqdefault{\let'\rq}
227205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
227305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\markupsetcodequoteleft{\let`\codequoteleft}
227405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\markupsetcodequoteright{\let'\codequoteright}
227505436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
227605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
227705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuplqcode \markupsetcodequoteleft
227805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuprqcode \markupsetcodequoteright
227905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
228005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuplqexample \markupsetcodequoteleft
228105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuprqexample \markupsetcodequoteright
228205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
228305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuplqkbd     \markupsetcodequoteleft
228405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuprqkbd     \markupsetcodequoteright
228505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
228605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuplqsamp \markupsetcodequoteleft
228705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuprqsamp \markupsetcodequoteright
228805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
228905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuplqverb \markupsetcodequoteleft
229005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuprqverb \markupsetcodequoteright
229105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
229205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuplqverbatim \markupsetcodequoteleft
229305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\markupsetuprqverbatim \markupsetcodequoteright
229405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
229505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Allow an option to not use regular directed right quote/apostrophe
229605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
229705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% The undirected quote is ugly, so don't make it the default, but it
229805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% works for pasting with more pdf viewers (at least evince), the
229905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% lilypond developers report.  xpdf does work with the regular 0x27.
230005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
230105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\codequoteright{%
230205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
230305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
230405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      '%
230505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else \char'15 \fi
230605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \char'15 \fi
230705436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
230805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
230905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% and a similar option for the left quote char vs. a grave accent.
231005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Modern fonts display ASCII 0x60 as a grave accent, so some people like
231105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the code environments to do likewise.
231205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
231305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\codequoteleft{%
231405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
231505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
231605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % [Knuth] pp. 380,381,391
231705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % \relax disables Spanish ligatures ?` and !` of \tt font.
231805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \relax`%
231905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else \char'22 \fi
232005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \char'22 \fi
232105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
232205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
232305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Commands to set the quote options.
232405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
232505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\codequoteundirected{%
232605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\temp{#1}%
232705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\temp\onword
232805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\csname SETtxicodequoteundirected\endcsname
232905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      = t%
233005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temp\offword
233105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\csname SETtxicodequoteundirected\endcsname
233205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      = \relax
233305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
233405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errhelp = \EMsimple
233505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
233605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi
233705436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
233805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
233905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\codequotebacktick{%
234005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\temp{#1}%
234105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\temp\onword
234205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\csname SETtxicodequotebacktick\endcsname
234305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      = t%
234405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temp\offword
234505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\csname SETtxicodequotebacktick\endcsname
234605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      = \relax
234705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
234805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errhelp = \EMsimple
234905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
235005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi
235105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
235205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
235305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
235405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\noligaturesquoteleft{\relax\lq}
2355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Count depth in font-changes, for error checks
2357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\fontdepth \fontdepth=0
2358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
235905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Font commands.
236005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
236105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #1 is the font command (\sl or \it), #2 is the text to slant.
236205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% If we are in a monospaced environment, however, 1) always use \ttsl,
236305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% and 2) do not add an italic correction.
236405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\dosmartslant#1#2{%
236505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifusingtt 
236605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {{\ttsl #2}\let\next=\relax}%
236705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
236805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \next
236905436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
237005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\smartslanted{\dosmartslant\sl}
237105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\smartitalic{\dosmartslant\it}
237205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
237305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Output an italic correction unless \next (presumed to be the following
237405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% character) is such as not to need one.
237505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\smartitaliccorrection{%
237605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\next,%
237705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\next-%
237805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\next.%
237905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ptexslash
238005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi\fi
238105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \aftersmartic
238205436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
238305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
238405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Unconditional use \ttsl, and no ic.  @var is set to this for defuns.
238505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ttslanted#1{{\ttsl #1}}
238605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
238705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @cite is like \smartslanted except unconditionally use \sl.  We never want
2388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% ttsl for book titles, do we?
238905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
239005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
239105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\aftersmartic{}
239205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\var#1{%
239305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\saveaftersmartic = \aftersmartic
239405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
239505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \smartslanted{#1}%
239605436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
2397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\i=\smartitalic
2399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\slanted=\smartslanted
2400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\dfn=\smartslanted
2401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\emph=\smartitalic
2402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
240305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Explicit font changes: @r, @sc, undocumented @ii.
240405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\r#1{{\rm #1}}              % roman font
240505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\sc#1{{\smallcaps#1}}       % smallcaps font
240605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ii#1{{\it #1}}             % italic font
240705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
240805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @b, explicit bold.  Also @strong.
2409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\b#1{{\bf #1}}
2410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\strong=\b
2411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @sansserif, explicit sans.
2413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\sansserif#1{{\sf #1}}
2414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We can't just use \exhyphenpenalty, because that only has effect at
2416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the end of a paragraph.  Restore normal hyphenation at the end of the
2417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% group within which \nohyphenation is presumably called.
2418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
2420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\restorehyphenation{\hyphenchar\font = `- }
2421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Set sfcode to normal for the chars that usually have another value.
2423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Can't use plain's \frenchspacing because it uses the `\x notation, and
2424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% sometimes \x has an active definition that messes things up.
2425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`@=11
2427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\plainfrenchspacing{%
2428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
2429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
2430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\endofsentencespacefactor{1000}% for @. and friends
2431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
2432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\plainnonfrenchspacing{%
2433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
2434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
2435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\endofsentencespacefactor{3000}% for @. and friends
2436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
2437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`@=\other
2438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\endofsentencespacefactor{3000}% default
2439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
244005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @t, explicit typewriter.
2441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\t#1{%
2442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\tt \rawbackslash \plainfrenchspacing #1}%
2443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \null
2444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
244605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @samp.
244705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
244805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
244905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @indicateurl is \samp, that is, with quotes.
245005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\indicateurl=\samp
2451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
245205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @code (and similar) prints in typewriter, but with spaces the same
245305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% size as normal in the surrounding text, without hyphenation, etc.
245405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This is a subroutine for that.
2455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\tclose#1{%
2456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
2457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Change normal interword space to be same as for the current font.
2458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \spaceskip = \fontdimen2\font
2459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
2460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Switch to typewriter.
2461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \tt
2462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
2463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % But `\ ' produces the large typewriter interword space.
2464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\ {{\spaceskip = 0pt{} }}%
2465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
2466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Turn off hyphenation.
2467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \nohyphenation
2468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
2469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \rawbackslash
2470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \plainfrenchspacing
2471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    #1%
2472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
247305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \null % reset spacefactor to 1000
2474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We *must* turn on hyphenation at `-' and `_' in @code.
2477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Otherwise, it is too hard to avoid overfull hboxes
2478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% in the Emacs manual, the Library manual, etc.
247905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
2480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Unfortunately, TeX uses one parameter (\hyphenchar) to control
2481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% both hyphenation at - and hyphenation within words.
2482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We must therefore turn them both off (\tclose does that)
2483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% and arrange explicitly to hyphenate at a dash.
2484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%  -- rms.
2485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
248605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\-=\active \catcode`\_=\active
248705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\'=\active \catcode`\`=\active
248805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\let'=\rq \global\let`=\lq  % default definitions
2489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
2490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\def\code{\begingroup
249105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \setupmarkupstyle{code}%
249205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % The following should really be moved into \setupmarkupstyle handlers.
249305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \catcode\dashChar=\active  \catcode\underChar=\active
2494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifallowcodebreaks
2495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \let-\codedash
2496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \let_\codeunder
2497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
2498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \let-\realdash
2499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \let_\realunder
2500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
2501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \codex
2502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
2503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
250505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\codex #1{\tclose{#1}\endgroup}
250605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\realdash{-}
2508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\codedash{-\discretionary{}{}{}}
2509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\codeunder{%
2510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
2511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
2512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % will therefore expand the active definition of _, which is us
2513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % (inside @code that is), therefore an endless loop.
2514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifusingtt{\ifmmode
2515cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
2516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project             \else\normalunderscore \fi
2517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project             \discretionary{}{}{}}%
2518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            {\_}%
2519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% An additional complication: the above will allow breaks after, e.g.,
2522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% each of the four underscores in __typeof__.  This is undesirable in
2523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% some manuals, especially if they don't have long identifiers in
2524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% general.  @allowcodebreaks provides a way to control this.
252505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
2526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifallowcodebreaks  \allowcodebreakstrue
2527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\keywordtrue{true}
2529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\keywordfalse{false}
2530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\allowcodebreaks{%
2532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\txiarg{#1}%
2533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\txiarg\keywordtrue
2534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \allowcodebreakstrue
2535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifx\txiarg\keywordfalse
2536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \allowcodebreaksfalse
2537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
2538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \errhelp = \EMsimple
253905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
2540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi\fi
2541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2542cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
254305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% For @command, @env, @file, @option quotes seem unnecessary,
254405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% so use \code rather than \samp.
2545cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\command=\code
254605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\env=\code
254705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\file=\code
254805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\option=\code
2549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @uref (abbreviation for `urlref') takes an optional (comma-separated)
2551cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% second argument specifying the text to display and an optional third
2552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% arg as text to display instead of (rather than in addition to) the url
255305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% itself.  First (mandatory) arg is the url.
255405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (This \urefnobreak definition isn't used now, leaving it for a while
255505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% for comparison.)
255605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefnobreak#1{\dourefnobreak #1,,,\finish}
255705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup
2558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \unsepspaces
2559cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \pdfurl{#1}%
2560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox0 = \hbox{\ignorespaces #3}%
2561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifdim\wd0 > 0pt
2562cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \unhbox0 % third arg given, show only that
2563cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
2564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \setbox0 = \hbox{\ignorespaces #2}%
2565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifdim\wd0 > 0pt
2566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifpdf
2567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \unhbox0             % PDF: 2nd arg given, show only it
2568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \else
2569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
2570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
2571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
2572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \code{#1}% only url given, so show it
2573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
2574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
2575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endlink
2576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup}
2577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
257805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This \urefbreak definition is the active one.
257905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
258005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\uref=\urefbreak
258105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
258205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
258305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \unsepspaces
258405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \pdfurl{#1}%
258505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setbox0 = \hbox{\ignorespaces #3}%
258605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifdim\wd0 > 0pt
258705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \unhbox0 % third arg given, show only that
258805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
258905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \setbox0 = \hbox{\ignorespaces #2}%
259005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifdim\wd0 > 0pt
259105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifpdf
259205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \unhbox0             % PDF: 2nd arg given, show only it
259305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \else
259405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url
259505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \fi
259605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else
259705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \urefcode{#1}% only url given, so show it
259805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi
259905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
260005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \endlink
260105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\endgroup}
260205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
260305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Allow line breaks around only a few characters (only).
260405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefcatcodes{%
260505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode\ampChar=\active   \catcode\dotChar=\active
260605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode\hashChar=\active  \catcode\questChar=\active
260705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode\slashChar=\active
260805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
260905436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
261005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \urefcatcodes
261105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
261205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\def\urefcode{\begingroup
261305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \setupmarkupstyle{code}%
261405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \urefcatcodes
261505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let&\urefcodeamp
261605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let.\urefcodedot
261705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let#\urefcodehash
261805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let?\urefcodequest
261905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let/\urefcodeslash
262005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \codex
262105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
262205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
262305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % By default, they are just regular characters.
262405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\def&{\normalamp}
262505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\def.{\normaldot}
262605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\def#{\normalhash}
262705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\def?{\normalquest}
262805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\def/{\normalslash}
262905436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
263005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
263105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% we put a little stretch before and after the breakable chars, to help
263205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% line breaking of long url's.  The unequal skips make look better in
263305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% cmtt at least, especially for dots.
263405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefprestretch{\urefprebreak \hskip0pt plus.13em }
263505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em }
263605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
263705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
263805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefcodedot{\urefprestretch .\urefpoststretch}
263905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefcodehash{\urefprestretch \#\urefpoststretch}
264005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefcodequest{\urefprestretch ?\urefpoststretch}
264105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
264205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
264305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\/=\active
264405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\def\urefcodeslashfinish{%
264505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \urefprestretch \slashChar
264605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Allow line break only after the final / in a sequence of
264705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % slashes, to avoid line break between the slashes in http://.
264805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifx\next/\else \urefpoststretch \fi
264905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
265005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
265105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
265205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% One more complication: by default we'll break after the special
265305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% characters, but some people like to break before the special chars, so
265405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% allow that.  Also allow no breaking at all, for manual control.
265505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
265605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\urefbreakstyle{%
265705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\txiarg{#1}%
265805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\txiarg\wordnone
265905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
266005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\txiarg\wordbefore
266105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
266205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\txiarg\wordafter
266305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
266405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
266505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errhelp = \EMsimple
266605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
266705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi\fi
266805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
266905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\wordafter{after}
267005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\wordbefore{before}
267105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\wordnone{none}
267205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
267305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\urefbreakstyle after
267405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @url synonym for @uref, since that's how everyone uses it.
2676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\url=\uref
2678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% rms does not like angle brackets --karl, 17may97.
2680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% So now @email is just like @uref, unless we are pdf.
2681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%\def\email#1{\angleleft{\tt #1}\angleright}
2683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifpdf
2684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\email#1{\doemail#1,,\finish}
2685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\doemail#1,#2,#3\finish{\begingroup
2686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \unsepspaces
2687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \pdfurl{mailto:#1}%
2688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \setbox0 = \hbox{\ignorespaces #2}%
2689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
2690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endlink
2691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endgroup}
2692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\else
2693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\email=\uref
2694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi
2695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
269605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
269705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%   `example' (@kbd uses ttsl only inside of @example and friends),
269805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%   or `code' (@kbd uses normal tty font always).
269905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\kbdinputstyle{%
270005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\txiarg{#1}%
270105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\txiarg\worddistinct
270205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
270305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\txiarg\wordexample
270405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
270505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\txiarg\wordcode
270605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
270705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
270805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errhelp = \EMsimple
270905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
271005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi\fi
271105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
271205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\worddistinct{distinct}
271305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\wordexample{example}
271405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\wordcode{code}
271505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
271605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Default is `distinct'.
271705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\kbdinputstyle distinct
271805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
271905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @kbd is like @code, except that if the argument is just one @key command,
272005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% then @kbd has no effect.
272105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
272205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
272305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\xkey{\key}
272405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\kbdsub#1#2#3\par{%
272505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\one{#1}\def\three{#3}\def\threex{??}%
272605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\one\xkey\ifx\threex\three \key{#2}%
272705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
272805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
272905436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
273005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
273105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% definition of @key that produces a lozenge.  Doesn't adjust to text size.
273205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%\setfont\keyrm\rmshape{8}{1000}{OT1}
273305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%\font\keysy=cmsy9
273405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
273505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
273605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%    \vbox{\hrule\kern-0.4pt
273705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
273805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%    \kern-0.4pt\hrule}%
273905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
274005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
274105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% definition of @key with no lozenge.  If the current font is already
274205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% monospace, don't change it; that way, we respect @kbdinputstyle.  But
274305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% if it isn't monospace, then use \tt.
274405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
274505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\key#1{{\setupmarkupstyle{key}%
274605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \nohyphenation
274705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifmonospace\else\tt\fi
274805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #1}\null}
274905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
275005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @clicksequence{File @click{} Open ...}
275105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\clicksequence#1{\begingroup #1\endgroup}
275205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
275305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @clickstyle @arrow   (by default)
275405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\clickstyle{\def\click{#1}}
275505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\click{\arrow}
2756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
2758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
2759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
2760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dmn#1{\thinspace #1}
2761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @l was never documented to mean ``switch to the Lisp font'',
2763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% and it is not used as such in any manual I can find.  We need it for
2764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Polish suppressed-l.  --karl, 22sep96.
2765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%\def\l#1{{\li #1}\null}
2766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @acronym for "FBI", "NATO", and the like.
2768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We print this one point size smaller, since it's intended for
2769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% all-uppercase.
277005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
2771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\acronym#1{\doacronym #1,,\finish}
2772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doacronym#1,#2,#3\finish{%
2773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\selectfonts\lsize #1}%
2774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#2}%
2775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\empty \else
2776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \space ({\unsepspaces \ignorespaces \temp \unskip})%
2777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
277805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \null % reset \spacefactor=1000
2779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @abbr for "Comput. J." and the like.
2782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% No font change, but don't do end-of-sentence spacing.
278305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
2784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\abbr#1{\doabbr #1,,\finish}
2785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doabbr#1,#2,#3\finish{%
2786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\plainfrenchspacing #1}%
2787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#2}%
2788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\empty \else
2789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \space ({\unsepspaces \ignorespaces \temp \unskip})%
2790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
279105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \null % reset \spacefactor=1000
279205436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
279305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
279405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @asis just yields its argument.  Used with @table, for example.
279505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
279605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\asis#1{#1}
279705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
279805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @math outputs its argument in math mode.
279905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
280005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% One complication: _ usually means subscripts, but it could also mean
280105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
280205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% _ active, and distinguish by seeing if the current family is \slfam,
280305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% which is what @var uses.
280405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
280505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\_ = \active
280605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef\mathunderscore{%
280705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \catcode`\_=\active
280805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
280905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
281005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
281105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Another complication: we want \\ (and @\) to output a math (or tt) \.
281205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% FYI, plain.tex uses \\ as a temporary control sequence (for no
281305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% particular reason), but this is not advertised and we don't care.
281405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
281505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
281605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
281705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
281805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\math{%
281905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \tex
282005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \mathunderscore
282105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\\ = \mathbackslash
282205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \mathactive
282305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % make the texinfo accent commands work in math mode
282405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\"=\ddot
282505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\'=\acute
282605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\==\bar
282705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\^=\hat
282805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\`=\grave
282905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\u=\breve
283005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\v=\check
283105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\~=\tilde
283205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\dotaccent=\dot
283305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  $\finishmath
283405436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
283505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
283605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
283705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Some active characters (such as <) are spaced differently in math.
283805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% We have to reset their definitions in case the @math was an argument
283905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% to a command which sets the catcodes (such as @item or @section).
284005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
284105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
284205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`^ = \active
284305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`< = \active
284405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`> = \active
284505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`+ = \active
284605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`' = \active
284705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef\mathactive{%
284805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let^ = \ptexhat
284905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let< = \ptexless
285005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let> = \ptexgtr
285105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let+ = \ptexplus
285205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let' = \ptexquoteright
285305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
2854cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2855cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
285605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% ctrl is no longer a Texinfo command, but leave this definition for fun.
285705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ctrl #1{{\tt \rawbackslash \hat}#1}
285805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
285905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
286005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
286105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% except specified as a normal braced arg, so no newlines to worry about.
286205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
286305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\outfmtnametex{tex}
286405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
286505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
286605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\long\def\doinlinefmt#1,#2,\finish{%
286705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\inlinefmtname{#1}%
286805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
286905436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
287005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% For raw, must switch into @tex before parsing the argument, to avoid
287105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% setting catcodes prematurely.  Doing it this way means that, for
287205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% example, @inlineraw{html, foo{bar} gets a parse error instead of being
287305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% ignored.  But this isn't important because if people want a literal
287405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% *right* brace they would have to use a command anyway, so they may as
287505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% well use a command to get a left brace too.  We could re-use the
287605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% delimiter character idea from \verb, but it seems like overkill.
287705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
287805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\long\def\inlineraw{\tex \doinlineraw}
287905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
288005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\doinlinerawtwo#1,#2,\finish{%
288105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\inlinerawname{#1}%
288205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
288305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \endgroup % close group opened by \tex.
288405436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
288505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
288605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
288705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\message{glyphs,}
288805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% and logos.
288905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
289005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @@ prints an @, as does @atchar{}.
289105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\@{\char64 }
289205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\atchar=\@
289305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
289405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
289505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Unless we're in typewriter, use \ecfont because the CM text fonts do
289605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% not have braces, and we don't want to switch into math.
289705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
289805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
289905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\{=\mylbrace \let\lbracechar=\{
290005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\}=\myrbrace \let\rbracechar=\}
290105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\begingroup
290205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Definitions to produce \{ and \} commands for indices,
290305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % and @{ and @} for the aux/toc files.
290405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\{ = \other \catcode`\} = \other
290505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\[ = 1 \catcode`\] = 2
290605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\! = 0 \catcode`\\ = \other
290705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  !gdef!lbracecmd[\{]%
290805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  !gdef!rbracecmd[\}]%
290905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  !gdef!lbraceatcmd[@{]%
291005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  !gdef!rbraceatcmd[@}]%
291105436638acc7c010349a69c3395f1a57c642dc62Ying Wang!endgroup
291205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
291305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @comma{} to avoid , parsing problems.
291405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\comma = ,
291505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
291605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
291705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
291805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\, = \ptexc
291905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\dotaccent = \ptexdot
292005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ringaccent#1{{\accent23 #1}}
292105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\tieaccent = \ptext
292205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\ubaraccent = \ptexb
292305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\udotaccent = \d
292405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
292505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Other special characters: @questiondown @exclamdown @ordf @ordm
292605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
292705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\questiondown{?`}
292805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\exclamdown{!`}
292905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
293005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
293105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
293205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Dotless i and dotless j, used for accents.
293305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\imacro{i}
293405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\jmacro{j}
293505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\dotless#1{%
293605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\temp{#1}%
293705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
293805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
293905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \errmessage{@dotless can be used only with i or j}%
294005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi
294105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
294205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
294305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% The \TeX{} logo, as in plain, but resetting the spacing so that a
294405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% period following counts as ending a sentence.  (Idea found in latex.)
294505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
294605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\edef\TeX{\TeX \spacefactor=1000 }
294705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
294805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @LaTeX{} logo.  Not quite the same results as the definition in
294905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% latex.ltx, since we use a different font for the raised A; it's most
295005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% convenient for us to use an explicitly smaller font, rather than using
295105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the \scriptstyle font (since we don't reset \scriptstyle and
295205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \scriptscriptstyle).
295305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
295405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\LaTeX{%
295505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  L\kern-.36em
295605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {\setbox0=\hbox{T}%
295705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \vbox to \ht0{\hbox{%
295805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \ifx\textnominalsize\xwordpt
295905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
296005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       % Revert to plain's \scriptsize, which is 7pt.
296105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \count255=\the\fam $\fam\count255 \scriptstyle A$%
296205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \else
296305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       % For 11pt, we can use our lllsize.
296405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \selectfonts\lllsize A%
296505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \fi
296605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     }%
296705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \vss
296805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }}%
296905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \kern-.15em
297005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \TeX
297105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
297205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
297305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Some math mode symbols.
297405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\bullet{$\ptexbullet$}
297505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\geq{\ifmmode \ge\else $\ge$\fi}
297605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\leq{\ifmmode \le\else $\le$\fi}
297705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\minus{\ifmmode -\else $-$\fi}
297805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
297905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @dots{} outputs an ellipsis using the current font.
298005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% We do .5em per period so that it has the same spacing in the cm
298105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% typewriter fonts as three actual period characters; on the other hand,
298205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% in other typewriter fonts three periods are wider than 1.5em.  So do
298305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% whichever is larger.
298405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
298505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\dots{%
298605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \leavevmode
298705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setbox0=\hbox{...}% get width of three periods
298805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifdim\wd0 > 1.5em
298905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \dimen0 = \wd0
299005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
299105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \dimen0 = 1.5em
299205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
299305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \hbox to \dimen0{%
299405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \hskip 0pt plus.25fil
299505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    .\hskip 0pt plus1fil
299605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    .\hskip 0pt plus1fil
299705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    .\hskip 0pt plus.5fil
299805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }%
299905436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
300005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
300105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @enddots{} is an end-of-sentence ellipsis.
300205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
300305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\enddots{%
300405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \dots
300505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \spacefactor=\endofsentencespacefactor
300605436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
300705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
300805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
300905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
301005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Since these characters are used in examples, they should be an even number of
301105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \tt widths. Each \tt character is 1en, so two makes it 1em.
301205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
301305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\point{$\star$}
301405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
301505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
301605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
301705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
301805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
301905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
302005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% The @error{} command.
302105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Adapted from the TeXbook's \boxit.
302205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
302305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newbox\errorbox
302405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
302505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{\tentt \global\dimen0 = 3em}% Width of the box.
302605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\dimen2 = .55pt % Thickness of rules
302705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% The text. (`r' is open on the right, `e' somewhat less so on the left.)
302805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
302905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
303005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setbox\errorbox=\hbox to \dimen0{\hfil
303105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
303205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \advance\hsize by -2\dimen2 % Rules.
303305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \vbox{%
303405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \hrule height\dimen2
303505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
303605436638acc7c010349a69c3395f1a57c642dc62Ying Wang         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
303705436638acc7c010349a69c3395f1a57c642dc62Ying Wang         \kern3pt\vrule width\dimen2}% Space to right.
303805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \hrule height\dimen2}
303905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \hfil}
304005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
304105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\error{\leavevmode\lower.7ex\copy\errorbox}
304205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3043cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
3044cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3045cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pounds{{\it\$}}
3046cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3047cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @euro{} comes from a separate font, depending on the current style.
3048cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We use the free feym* fonts from the eurosym package by Henrik
3049cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Theiling, which support regular, slanted, bold and bold slanted (and
3050cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% "outlined" (blackboard board, sort of) versions, which we don't need).
3051cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
305205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
3053cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Although only regular is the truly official Euro symbol, we ignore
3054cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% that.  The Euro is designed to be slightly taller than the regular
3055cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% font height.
305605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
3057cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% feymr - regular
3058cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% feymo - slanted
3059cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% feybr - bold
3060cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% feybo - bold slanted
306105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
3062cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% There is no good (free) typewriter version, to my knowledge.
3063cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
3064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Hmm.
306505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
3066cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Also doesn't work in math.  Do we need to do math with euro symbols?
3067cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Hope not.
306805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
306905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
3070cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\euro{{\eurofont e}}
3071cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\eurofont{%
3072cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We set the font at each command, rather than predefining it in
3073cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \textfonts and the other font-switching commands, so that
3074cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % installations which never need the symbol don't have to have the
3075cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % font installed.
307605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
3077cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % There is only one designed size (nominal 10pt), so we always scale
3078cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % that to the current nominal size.
307905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
3080cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % By the way, simply using "at 1em" works for cmr10 and the like, but
3081cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % does not work for cmbx10 and other extended/shrunken fonts.
308205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
3083cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
3084cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
308505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\curfontstyle\bfstylename
3086cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % bold:
3087cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
308805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
3089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % regular:
3090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
3091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
3092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \thiseurofont
3093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3094cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
309505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Glyphs from the EC fonts.  We don't use \let for the aliases, because
309605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% sometimes we redefine the original macro, and the alias should reflect
309705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the redefinition.
309805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
309905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Use LaTeX names for the Icelandic letters.
310005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\DH{{\ecfont \char"D0}} % Eth
310105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\dh{{\ecfont \char"F0}} % eth
310205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\TH{{\ecfont \char"DE}} % Thorn
310305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\th{{\ecfont \char"FE}} % thorn
310405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
310505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\guillemetleft{{\ecfont \char"13}}
310605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\guillemotleft{\guillemetleft}
310705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\guillemetright{{\ecfont \char"14}}
310805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\guillemotright{\guillemetright}
310905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\guilsinglleft{{\ecfont \char"0E}}
311005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\guilsinglright{{\ecfont \char"0F}}
311105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\quotedblbase{{\ecfont \char"12}}
311205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\quotesinglbase{{\ecfont \char"0D}}
311305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
311405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This positioning is not perfect (see the ogonek LaTeX package), but
311505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% we have the precomposed glyphs for the most common cases.  We put the
311605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% tests to use those glyphs in the single \ogonek macro so we have fewer
311705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% dummy definitions to worry about for index entries, etc.
311805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
311905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% ogonek is also used with other letters in Lithuanian (IOU), but using
312005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the precomposed glyphs for those is not so easy since they aren't in
312105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the same EC font.
312205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ogonek#1{{%
312305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\temp{#1}%
312405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\temp\macrocharA\Aogonek
312505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temp\macrochara\aogonek
312605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temp\macrocharE\Eogonek
312705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temp\macrochare\eogonek
312805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
312905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ecfont \setbox0=\hbox{#1}%
313005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifdim\ht0=1ex\accent"0C #1%
313105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
313205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi
313305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi\fi\fi
313405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }%
313505436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
313605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
313705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
313805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
313905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
314005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
314105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
314205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ecfont{%
314305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % We can't distinguish serif/sans and italic/slanted, but this
314405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % is used for crude hacks anyway (like adding French and German
314505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % quotes to documents typeset with CM, where we lose kerning), so
314605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % hopefully nobody will notice/care.
314705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
314805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
314905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifmonospace
315005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % typewriter:
315105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \font\thisecfont = ectt\ecsize \space at \nominalsize
315205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
315305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifx\curfontstyle\bfstylename
315405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % bold:
315505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
315605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else
315705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % regular:
315805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
315905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi
316005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
316105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \thisecfont
316205436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
316305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @registeredsymbol - R in a circle.  The font for the R should really
3165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% be smaller yet, but lllsize is the best we can do for now.
3166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Adapted from the plain.tex definition of \copyright.
3167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\registeredsymbol{%
3169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
3170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project               \hfil\crcr\Orb}}%
3171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }$%
3172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
317405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @textdegree - the normal degrees sign.
317505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
317605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\textdegree{$^\circ$}
317705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Laurent Siebenmann reports \Orb undefined with:
3179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
3180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% so we'll define it if necessary.
318105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
318205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifx\Orb\thisisundefined
3183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Orb{\mathhexbox20D}
3184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi
3185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
318605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Quotes.
318705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\quotedblleft="5C
318805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\quotedblright=`\"
318905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\quoteleft=`\`
319005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\quoteright=`\'
319105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{page headings,}
3194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\titlepagetopglue \titlepagetopglue = 1.5in
3196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
3197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% First the title page.  Must do @settitle before @titlepage.
3199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifseenauthor
3200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\iffinishedtitlepage
3201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Do an implicit @contents or @shortcontents after @end titlepage if the
3203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
3204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifsetcontentsaftertitlepage
3206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
3207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifsetshortcontentsaftertitlepage
3208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
3209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
321005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\shorttitlepage{%
321105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
321205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \endgroup\page\hbox{}\page}
3213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\titlepage{%
3215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Open one extra group, as we want to close it in the middle of \Etitlepage.
3216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \begingroup
3217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \parindent=0pt \textfonts
3218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Leave some space at the very top of the page.
3219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vglue\titlepagetopglue
3220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % No rule at page bottom unless we print one at the top with @title.
3221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \finishedtitlepagetrue
3222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
3223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Most title ``pages'' are actually two pages long, with space
3224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % at the top of the second.  We don't want the ragged left on the second.
3225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\oldpage = \page
3226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\page{%
3227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \iffinishedtitlepage\else
3228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	 \finishtitlepage
3229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
3230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \let\page = \oldpage
3231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \page
3232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \null
3233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }%
3234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Etitlepage{%
3237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \iffinishedtitlepage\else
3238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\finishtitlepage
3239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
3240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % It is important to do the page break before ending the group,
3241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % because the headline and footline are only empty inside the group.
3242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If we use the new definition of \page, we always get a blank page
3243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % after the title page, which we certainly don't want.
3244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \oldpage
3245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endgroup
3246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Need this before the \...aftertitlepage checks so that if they are
3248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % in effect the toc pages will come out with page numbers.
3249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \HEADINGSon
3250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % If they want short, they certainly want long too.
3252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifsetshortcontentsaftertitlepage
3253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \shortcontents
3254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \contents
3255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\let\shortcontents = \relax
3256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\let\contents = \relax
3257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
3258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifsetcontentsaftertitlepage
3260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \contents
3261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\let\contents = \relax
3262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\let\shortcontents = \relax
3263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
3264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\finishtitlepage{%
3267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vskip4pt \hrule height 2pt width \hsize
3268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vskip\titlepagebottomglue
3269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \finishedtitlepagetrue
3270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
327205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Settings used for typesetting titles: no hyphenation, no indentation,
327305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% don't worry much about spacing, ragged right.  This should be used
327405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% inside a \vbox, and fonts need to be set appropriately first.  Because
327505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% it is always used for titles, nothing else, we call \rmisbold.  \par
327605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% should be specified before the end of the \vbox, since a vbox is a group.
327705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
327805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\raggedtitlesettings{%
327905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \rmisbold
328005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \hyphenpenalty=10000
328105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \parindent=0pt
328205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \tolerance=5000
328305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ptexraggedright
328405436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
328505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
328605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Macros to be used within @titlepage:
3287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\subtitlerm=\tenrm
3289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
3290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\title{%
3292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \checkenv\titlepage
329305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \vbox{\titlefonts \raggedtitlesettings #1\par}%
3294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % print a rule at the page bottom also.
3295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \finishedtitlepagefalse
3296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
3297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\subtitle{%
3300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \checkenv\titlepage
3301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\subtitlefont \rightline{#1}}%
3302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @author should come last, but may come many times.
3305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It can also be used inside @quotation.
3306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\author{%
3308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{\quotation}%
3309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\thisenv\temp
3310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\quotationauthor{#1}% printed in \Equotation.
3311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
3312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \checkenv\titlepage
3313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
331405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {\secfonts\rmisbold \leftline{#1}}%
3315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
3316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
331905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Set up page headings and footings.
3320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\thispage=\folio
3322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\evenheadline    % headline on even pages
3324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\oddheadline     % headline on odd pages
3325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\evenfootline    % footline on even pages
3326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\oddfootline     % footline on odd pages
3327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Now make TeX use those variables
3329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
3330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                            \else \the\evenheadline \fi}}
3331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
3332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                            \else \the\evenfootline \fi}\HEADINGShook}
3333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\HEADINGShook=\relax
3334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Commands to set those variables.
3336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% For example, this is what  @headings on  does
3337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @evenheading @thistitle|@thispage|@thischapter
3338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @oddheading @thischapter|@thispage|@thistitle
3339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @evenfooting @thisfile||
3340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @oddfooting ||@thisfile
3341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\evenheading{\parsearg\evenheadingxxx}
3344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
3345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
3346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
3347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\oddheading{\parsearg\oddheadingxxx}
3349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
3350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
3351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
3352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
3354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\evenfooting{\parsearg\evenfootingxxx}
3356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
3357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
3358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
3359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\oddfooting{\parsearg\oddfootingxxx}
3361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
3362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
3363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
3364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Leave some space for the footline.  Hopefully ok to assume
3366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % @evenfooting will not be used by itself.
336705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\advance\pageheight by -12pt
336805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\advance\vsize by -12pt
3369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
3372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
337305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @evenheadingmarks top     \thischapter <- chapter at the top of a page
337405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
337505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
337605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% The same set of arguments for:
337705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
337805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @oddheadingmarks
337905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @evenfootingmarks
338005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @oddfootingmarks
338105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @everyheadingmarks
338205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @everyfootingmarks
338305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
338405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\evenheadingmarks{\headingmarks{even}{heading}}
338505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\oddheadingmarks{\headingmarks{odd}{heading}}
338605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\evenfootingmarks{\headingmarks{even}{footing}}
338705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\oddfootingmarks{\headingmarks{odd}{footing}}
338805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
338905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          \headingmarks{odd}{heading}{#1} }
339005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
339105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          \headingmarks{odd}{footing}{#1} }
339205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
339305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\headingmarks#1#2#3 {%
339405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
339505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\expandafter\let\csname get#1#2marks\endcsname \temp
339605436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
339705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
339805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\everyheadingmarks bottom
339905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\everyfootingmarks bottom
3400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @headings double      turns headings on for double-sided printing.
3402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @headings single      turns headings on for single-sided printing.
3403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @headings off         turns them off.
3404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @headings on          same as @headings double, retained for compatibility.
3405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @headings after       turns on double-sided headings after this page.
3406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @headings doubleafter turns on double-sided headings after this page.
3407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @headings singleafter turns on single-sided headings after this page.
3408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% By default, they are off at the start of a document,
3409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% and turned `on' after @end titlepage.
3410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\headings #1 {\csname HEADINGS#1\endcsname}
3412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
341305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\headingsoff{% non-global headings elimination
341405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \evenheadline={\hfil}\evenfootline={\hfil}%
341505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \oddheadline={\hfil}\oddfootline={\hfil}%
341605436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
341705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
341805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
341905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\HEADINGSoff  % it's the default
342005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% When we turn headings on, set the page number to 1.
3422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% For double-sided printing, put current file name in lower left corner,
3423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% chapter name on inside top of right hand pages, document
3424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% title on inside top of left hand pages, and page numbers on outside top
3425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% edge of all pages.
3426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\HEADINGSdouble{%
3427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\pageno=1
3428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenfootline={\hfil}
3429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\oddfootline={\hfil}
3430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenheadline={\line{\folio\hfil\thistitle}}
3431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}}
3432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\contentsalignmacro = \chapoddpage
3433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\contentsalignmacro = \chappager
3435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% For single-sided printing, chapter title goes across top left of page,
3437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% page number on top right.
3438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\HEADINGSsingle{%
3439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\pageno=1
3440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenfootline={\hfil}
3441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\oddfootline={\hfil}
3442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenheadline={\line{\thischapter\hfil\folio}}
3443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}}
3444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\contentsalignmacro = \chappager
3445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\HEADINGSon{\HEADINGSdouble}
3447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
3449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\HEADINGSdoubleafter=\HEADINGSafter
3450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\HEADINGSdoublex{%
3451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenfootline={\hfil}
3452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\oddfootline={\hfil}
3453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenheadline={\line{\folio\hfil\thistitle}}
3454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}}
3455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\contentsalignmacro = \chapoddpage
3456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
3459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\HEADINGSsinglex{%
3460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenfootline={\hfil}
3461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\oddfootline={\hfil}
3462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\evenheadline={\line{\thischapter\hfil\folio}}
3463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\oddheadline={\line{\thischapter\hfil\folio}}
3464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\contentsalignmacro = \chappager
3465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Subroutines used in generating headings
3468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This produces Day Month Year style of output.
3469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Only define if not already defined, in case a txi-??.tex file has set
3470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% up a different format (e.g., txi-cs.tex does this).
347105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifx\today\thisisundefined
3472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\today{%
3473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \number\day\space
3474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifcase\month
3475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
3476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
3477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
3478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
3479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \space\number\year}
3480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi
3481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @settitle line...  specifies the title of the document, for headings.
3483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It generates no output of its own.
3484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\thistitle{\putwordNoTitle}
3485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\settitle{\parsearg{\gdef\thistitle}}
3486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{tables,}
3489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Tables -- @table, @ftable, @vtable, @item(x).
3490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% default indentation of table text
3492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\tableindent \tableindent=.8in
3493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% default indentation of @itemize and @enumerate text
3494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\itemindent  \itemindent=.3in
3495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% margin between end of table item and start of table text.
3496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\itemmargin  \itemmargin=.1in
3497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% used internally for \itemindent minus \itemmargin
3499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\itemmax
3500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
3502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% these defs.
3503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% They also define \itemindex
3504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% to index the item name in whatever manner is desired (perhaps none).
3505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifitemxneedsnegativevskip
3507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
3509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\internalBitem{\smallbreak \parsearg\itemzzz}
3511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\internalBitemx{\itemxpar \parsearg\itemzzz}
3512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\itemzzz #1{\begingroup %
3514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\hsize by -\rightskip
3515cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\hsize by -\tableindent
3516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox0=\hbox{\itemindicate{#1}}%
3517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \itemindex{#1}%
3518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nobreak % This prevents a break before @itemx.
3519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % If the item text does not fit in the space we have, put it on a line
3521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % by itself, and do not allow a page break either before or after that
3522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % line.  We do not start a paragraph here because then if the next
3523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % command is, e.g., @kindex, the whatsit would get put into the
3524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % horizontal list on a line by itself, resulting in extra blank space.
3525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifdim \wd0>\itemmax
3526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
3527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Make this a paragraph so we get the \parskip glue and wrapping,
3528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % but leave it ragged-right.
3529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \begingroup
3530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \advance\leftskip by-\tableindent
3531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \advance\hsize by\tableindent
353205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \advance\rightskip by0pt plus1fil\relax
3533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \leavevmode\unhbox0\par
3534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup
3535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
3536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % We're going to be starting a paragraph, but we don't want the
3537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \parskip glue -- logically it's part of the @item we just started.
3538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \nobreak \vskip-\parskip
3539cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
3540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Stop a page break at the \parskip glue coming up.  However, if
3541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % what follows is an environment such as @example, there will be no
3542cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \parskip glue; then the negative vskip we just inserted would
3543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % cause the example and the item to crash together.  So we use this
3544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
3545cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \parskip glue after all.  Section titles are handled this way also.
354605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
3547cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \penalty 10001
3548cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup
3549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \itemxneedsnegativevskipfalse
3550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
3551cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % The item text fits into the space.  Start a paragraph, so that the
3552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % following text (if any) will end up on the same line.
3553cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \noindent
3554cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Do this with kerns and \unhbox so that if there is a footnote in
3555cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % the item text, it can migrate to the main vertical list and
3556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % eventually be printed.
3557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \nobreak\kern-\tableindent
3558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
3559cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \unhbox0
3560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \nobreak\kern\dimen0
3561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup
3562cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \itemxneedsnegativevskiptrue
3563cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
3564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\item{\errmessage{@item while not in a list environment}}
3567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\itemx{\errmessage{@itemx while not in a list environment}}
3568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @table, @ftable, @vtable.
3570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\table{%
3571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\itemindex\gobble
3572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tablecheck{table}%
3573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\ftable{%
3575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
3576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tablecheck{ftable}%
3577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\vtable{%
3579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
3580cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tablecheck{vtable}%
3581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\tablecheck#1{%
3583cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum \the\catcode`\^^M=\active
3584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup
3585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \errmessage{This command won't work in this context; perhaps the problem is
3586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      that we are \inenvironment\thisenv}%
3587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\next{\doignore{#1}}%
3588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
3589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\next\tablex
3590cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
3591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \next
3592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\tablex#1{%
3594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\itemindicate{#1}%
3595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parsearg\tabley
3596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\tabley#1{%
3598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
3599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \makevalueexpandable
3600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \edef\temp{\noexpand\tablez #1\space\space\space}%
3601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter
3602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }\temp \endtablez
3603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\tablez #1 #2 #3 #4\endtablez{%
3605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \aboveenvbreak
3606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
3607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum 0#2>0 \tableindent=#2\mil \fi
3608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
3609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \itemmax=\tableindent
3610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance \itemmax by -\itemmargin
3611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance \leftskip by \tableindent
3612cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \exdentamount=\tableindent
3613cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parindent = 0pt
3614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip = \smallskipamount
3615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifdim \parskip=0pt \parskip=2pt \fi
3616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\item = \internalBitem
3617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\itemx = \internalBitemx
3618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Etable{\endgraf\afterenvbreak}
3620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\Eftable\Etable
3621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\Evtable\Etable
3622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\Eitemize\Etable
3623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\Eenumerate\Etable
3624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This is the counter used by @enumerate, which is really @itemize
3626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount \itemno
3628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3629cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\itemize{\parsearg\doitemize}
3630cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3631cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doitemize#1{%
3632cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \aboveenvbreak
3633cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \itemmax=\itemindent
3634cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\itemmax by -\itemmargin
3635cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\leftskip by \itemindent
3636cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \exdentamount=\itemindent
3637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parindent=0pt
3638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip=\smallskipamount
3639cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifdim\parskip=0pt \parskip=2pt \fi
364005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
364105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Try typesetting the item mark that if the document erroneously says
364205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % something like @itemize @samp (intending @table), there's an error
364305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % right away at the @itemize.  It's not the best error message in the
364405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % world, but it's better than leaving it to the @item.  This means if
364505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % the user wants an empty mark, they have to say @w{} not just @w.
3646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\itemcontents{#1}%
364705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setbox0 = \hbox{\itemcontents}%
364805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
3649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % @itemize with no arg is equivalent to @itemize @bullet.
3650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
365105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
3652cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\item=\itemizeitem
3653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Definition of @item while inside @itemize and @enumerate.
3656cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\itemizeitem{%
3658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\itemno by 1  % for enumerations
3659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\let\par=\endgraf \smallbreak}% reasonable place to break
3660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
3661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % If the document has an @itemize directly after a section title, a
3662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % \nobreak will be last on the list, and \sectionheading will have
3663cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % done a \vskip-\parskip.  In that case, we don't want to zero
3664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % parskip, or the item text will crash with the heading.  On the
3665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % other hand, when there is normal text preceding the item (as there
3666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % usually is), we do want to zero parskip, or there would be too much
3667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % space.  In that case, we won't have a \nobreak before.  At least
3668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   % that's the theory.
3669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \ifnum\lastpenalty<10000 \parskip=0in \fi
3670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \noindent
3671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
367205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   %
3673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \vadjust{\penalty 1200}}% not good to break after first line of item.
3674cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \flushcr
3675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \splitoff TOKENS\endmark defines \first to be the first token in
3678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% TOKENS, and \rest to be the remainder.
3679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
3681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Allow an optional argument of an uppercase letter, lowercase letter,
3683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% or number, to specify the first label in the enumerated list.  No
3684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% argument is the same as `1'.
3685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
3687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\enumeratey #1 #2\endenumeratey{%
3688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % If we were given no argument, pretend we were given `1'.
3689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\thearg{#1}%
3690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\thearg\empty \def\thearg{1}\fi
3691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Detect if the argument is a single token.  If so, it might be a
3693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % letter.  Otherwise, the only valid thing it can be is a number.
3694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % (We will always have one token, because of the test we just made.
3695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % This is a good thing, since \splitoff doesn't work given nothing at
3696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % all -- the first parameter is undelimited.)
3697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\splitoff\thearg\endmark
3698cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\rest\empty
3699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Only one token in the argument.  It could still be anything.
3700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % A ``lowercase letter'' is one whose \lccode is nonzero.
3701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
3702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %   not equal to itself.
3703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Otherwise, we assume it's a number.
3704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
3705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % We need the \relax at the end of the \ifnum lines to stop TeX from
3706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % continuing to look for a <number>.
3707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
3708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum\lccode\expandafter`\thearg=0\relax
3709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \numericenumerate % a number (we hope)
3710cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
3711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % It's a letter.
3712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
3713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \lowercaseenumerate % lowercase letter
3714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \else
3715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \uppercaseenumerate % uppercase letter
3716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
3717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
3718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
3719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Multiple tokens in the argument.  We hope it's a number.
3720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \numericenumerate
3721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
3722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% An @enumerate whose labels are integers.  The starting integer is
3725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% given in \thearg.
3726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\numericenumerate{%
3728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \itemno = \thearg
3729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \startenumeration{\the\itemno}%
3730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3731cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The starting (lowercase) letter is in \thearg.
3733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\lowercaseenumerate{%
3734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \itemno = \expandafter`\thearg
3735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \startenumeration{%
3736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Be sure we're not beyond the end of the alphabet.
3737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum\itemno=0
3738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \errmessage{No more lowercase letters in @enumerate; get a bigger
3739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                  alphabet}%
3740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
3741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \char\lccode\itemno
3742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
3743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The starting (uppercase) letter is in \thearg.
3746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\uppercaseenumerate{%
3747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \itemno = \expandafter`\thearg
3748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \startenumeration{%
3749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Be sure we're not beyond the end of the alphabet.
3750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum\itemno=0
3751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \errmessage{No more uppercase letters in @enumerate; get a bigger
3752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                  alphabet}
3753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
3754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \char\uccode\itemno
3755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
3756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Call \doitemize, adding a period to the first argument and supplying the
3759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% common last two arguments.  Also subtract one from the initial value in
3760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \itemno, since @item increments \itemno.
3761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\startenumeration#1{%
3763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\itemno by -1
3764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \doitemize{#1.}\flushcr
3765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
3768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% to @enumerate.
3769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\alphaenumerate{\enumerate{a}}
3771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\capsenumerate{\enumerate{A}}
3772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Ealphaenumerate{\Eenumerate}
3773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Ecapsenumerate{\Eenumerate}
3774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @multitable macros
3777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Amy Hendrickson, 8/18/94, 3/6/96
3778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @multitable ... @end multitable will make as many columns as desired.
3780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Contents of each column will wrap at width given in preamble.  Width
3781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% can be specified either with sample text given in a template line,
3782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% or in percent of \hsize, the current width of text on page.
3783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Table can continue over pages but will only break between lines.
3785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% To make preamble:
3787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Either define widths of columns in terms of percent of \hsize:
3789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @multitable @columnfractions .25 .3 .45
3790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @item ...
3791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   Numbers following @columnfractions are the percent of the total
3793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   current hsize to be used for each column. You may use as many
3794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   columns as desired.
3795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Or use a template:
3798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
3799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @item ...
3800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   using the widest term desired in each column.
3801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Each new table line starts with @item, each subsequent new column
3803cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% starts with @tab. Empty columns may be produced by supplying @tab's
3804cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% with nothing between them for as many times as empty columns are needed,
3805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% ie, @tab@tab@tab will produce two empty columns.
3806cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @item, @tab do not need to be on their own lines, but it will not hurt
3808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% if they are.
3809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Sample multitable:
3811cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3812cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
3813cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @item first col stuff @tab second col stuff @tab third col
3814cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @item
3815cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   first col stuff
3816cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @tab
3817cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   second col stuff
3818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @tab
3819cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   third col
3820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @item first col stuff @tab second col stuff
3821cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @tab Many paragraphs of text may be used in any column.
3822cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3823cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%         They will wrap at the width determined by the template.
3824cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @item@tab@tab This will be in third column.
3825cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   @end multitable
3826cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3827cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Default dimensions may be reset by user.
3828cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @multitableparskip is vertical space between paragraphs in table.
3829cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @multitableparindent is paragraph indent in table.
3830cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @multitablecolmargin is horizontal space to be left between columns.
3831cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @multitablelinespace is space to leave between table items, baseline
3832cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%                                                            to baseline.
3833cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   0pt means it depends on current normal line spacing.
3834cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3835cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\multitableparskip
3836cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\multitableparindent
3837cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\multitablecolspace
3838cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\multitablelinespace
3839cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\multitableparskip=0pt
3840cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\multitableparindent=6pt
3841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\multitablecolspace=12pt
3842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\multitablelinespace=0pt
3843cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3844cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Macros used to set up halign preamble:
3845cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3846cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\endsetuptable\relax
3847cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\xendsetuptable{\endsetuptable}
3848cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\columnfractions\relax
3849cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\xcolumnfractions{\columnfractions}
3850cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifsetpercent
3851cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3852cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is the @columnfraction, usually a decimal number like .5, but might
3853cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% be just 1.  We just use it, whatever it is.
3854cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3855cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pickupwholefraction#1 {%
3856cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\advance\colcount by 1
3857cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
3858cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setuptable
3859cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3860cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3861cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\colcount
3862cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setuptable#1{%
3863cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\firstarg{#1}%
3864cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\firstarg\xendsetuptable
3865cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\go = \relax
3866cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
3867cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\firstarg\xcolumnfractions
3868cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \global\setpercenttrue
3869cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
3870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifsetpercent
3871cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \let\go\pickupwholefraction
3872cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \else
3873cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \global\advance\colcount by 1
3874cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
3875cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                   % separator; typically that is always in the input, anyway.
3876cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
3877cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
3878cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
3879cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\go\pickupwholefraction
3880cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Put the argument back for the \pickupwholefraction call, so
3881cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % we'll always have a period there to be parsed.
3882cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\go{\pickupwholefraction#1}%
3883cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
3884cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \let\go = \setuptable
3885cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi%
3886cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
3887cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \go
3888cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3889cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3890cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% multitable-only commands.
3891cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3892cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @headitem starts a heading row, which we typeset in bold.
3893cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Assignments have to be global since we are inside the implicit group
389405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% of an alignment entry.  \everycr resets \everytab so we don't have to
389505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% undo it ourselves.
389605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\headitemfont{\b}% for people to use in the template row; not changeable
389705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\headitem{%
389805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \checkenv\multitable
389905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \crcr
390005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\everytab={\bf}% can't use \headitemfont since the parsing differs
390105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \the\everytab % for the first item
390205436638acc7c010349a69c3395f1a57c642dc62Ying Wang}%
3903cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3904cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% A \tab used to include \hskip1sp.  But then the space in a template
3905cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% line is not enough.  That is bad.  So let's go back to just `&' until
390605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% we again encounter the problem the 1sp was intended to solve.
3907cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%					--karl, nathan@acm.org, 20apr99.
3908cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\tab{\checkenv\multitable &\the\everytab}%
3909cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3910cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @multitable ... @end multitable definitions:
3911cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3912cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\everytab  % insert after every tab.
3913cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
3914cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\multitable{%
3915cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vskip\parskip
3916cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \startsavinginserts
3917cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3918cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % @item within a multitable starts a normal row.
3919cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We use \def instead of \let so that if one of the multitable entries
3920cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
3921cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \endtemplate) expanding \doitemize.
3922cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\item{\crcr}%
3923cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3924cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tolerance=9500
3925cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hbadness=9500
3926cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setmultitablespacing
3927cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip=\multitableparskip
3928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parindent=\multitableparindent
3929cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \overfullrule=0pt
3930cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\colcount=0
3931cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3932cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \everycr = {%
3933cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \noalign{%
3934cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \global\everytab={}%
3935cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \global\colcount=0 % Reset the column counter.
3936cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Check for saved footnotes, etc.
3937cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \checkinserts
3938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Keeps underfull box messages off when table breaks over pages.
3939cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %\filbreak
3940cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	% Maybe so, but it also creates really weird page breaks when the
3941cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	% table breaks over pages. Wouldn't \vfil be better?  Wait until the
3942cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	% problem manifests itself, so it can be fixed for real --karl.
3943cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }%
3944cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
3945cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3946cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parsearg\domultitable
3947cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
3948cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\domultitable#1{%
3949cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % To parse everything between @multitable and @item:
3950cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setuptable#1 \endsetuptable
3951cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
3952cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % This preamble sets up a generic column definition, which will
3953cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % be used as many times as user calls for columns.
3954cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \vtop will set a single line and will also let text wrap and
3955cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % continue for many paragraphs if desired.
3956cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \halign\bgroup &%
3957cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\advance\colcount by 1
3958cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \multistrut
3959cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vtop{%
3960cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Use the current \colcount to find the correct column width:
3961cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \hsize=\expandafter\csname col\the\colcount\endcsname
3962cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
3963cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % In order to keep entries from bumping into each other
3964cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % we will add a \leftskip of \multitablecolspace to all columns after
3965cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % the first one.
3966cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
3967cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % If a template has been used, we will add \multitablecolspace
3968cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % to the width of each template entry.
3969cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
3970cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % If the user has set preamble in terms of percent of \hsize we will
3971cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % use that dimension as the width of the column, and the \leftskip
3972cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % will keep entries from bumping into each other.  Table will start at
3973cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % left margin and final column will justify at right margin.
3974cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
3975cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Make sure we don't inherit \rightskip from the outer environment.
3976cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \rightskip=0pt
3977cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifnum\colcount=1
3978cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	% The first column will be indented with the surrounding text.
3979cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\advance\hsize by\leftskip
3980cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \else
3981cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\ifsetpercent \else
3982cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  % If user has not set preamble in terms of percent of \hsize
3983cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  % we will advance \hsize by \multitablecolspace.
3984cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \advance\hsize by \multitablecolspace
3985cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\fi
3986cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       % In either case we will make \leftskip=\multitablecolspace:
3987cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \leftskip=\multitablecolspace
3988cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
3989cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Ignoring space at the beginning and end avoids an occasional spurious
3990cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % blank line, when TeX decides to break the line at the space before the
3991cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % box from the multistrut, so the strut ends up on a line by itself.
3992cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % For example:
3993cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % @multitable @columnfractions .11 .89
3994cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % @item @code{#}
3995cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % @tab Legal holiday which is valid in major parts of the whole country.
3996cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Is automatically provided with highlighting sequences respectively
3997cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % marking characters.
3998cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \noindent\ignorespaces##\unskip\multistrut
3999cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }\cr
4000cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4001cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Emultitable{%
4002cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \crcr
4003cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \egroup % end the \halign
4004cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\setpercentfalse
4005cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4006cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4007cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setmultitablespacing{%
4008cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\multistrut{\strut}% just use the standard line spacing
4009cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4010cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Compute \multitablelinespace (if not defined by user) for use in
4011cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \multitableparskip calculation.  We used define \multistrut based on
4012cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % this, but (ironically) that caused the spacing to be off.
4013cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
4014cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifdim\multitablelinespace=0pt
4015cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
4016cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\advance\multitablelinespace by-\ht0
4017cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi
401805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Test to see if parskip is larger than space between lines of
401905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% table. If not, do nothing.
402005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%        If so, set to same dimension as multitablelinespace.
4021cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifdim\multitableparskip>\multitablelinespace
4022cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\multitableparskip=\multitablelinespace
402305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
402405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                      % than skip between lines in the table.
4025cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi%
4026cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifdim\multitableparskip=0pt
4027cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\multitableparskip=\multitablelinespace
402805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
402905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                      % than skip between lines in the table.
4030cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi}
4031cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4032cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4033cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{conditionals,}
4034cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4035cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
4036cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @ifnotxml always succeed.  They currently do nothing; we don't
4037cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% attempt to check whether the conditionals are properly nested.  But we
4038cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% have to remember that they are conditionals, so that @end doesn't
4039cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% attempt to close an environment group.
4040cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4041cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\makecond#1{%
4042cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\let\csname #1\endcsname = \relax
4043cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\let\csname iscond.#1\endcsname = 1
4044cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4045cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makecond{iftex}
4046cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makecond{ifnotdocbook}
4047cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makecond{ifnothtml}
4048cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makecond{ifnotinfo}
4049cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makecond{ifnotplaintext}
4050cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makecond{ifnotxml}
4051cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4052cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Ignore @ignore, @ifhtml, @ifinfo, and the like.
4053cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4054cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\direntry{\doignore{direntry}}
4055cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\documentdescription{\doignore{documentdescription}}
4056cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\docbook{\doignore{docbook}}
4057cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\html{\doignore{html}}
4058cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifdocbook{\doignore{ifdocbook}}
4059cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifhtml{\doignore{ifhtml}}
4060cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifinfo{\doignore{ifinfo}}
4061cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifnottex{\doignore{ifnottex}}
4062cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifplaintext{\doignore{ifplaintext}}
4063cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifxml{\doignore{ifxml}}
4064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ignore{\doignore{ignore}}
4065cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\menu{\doignore{menu}}
4066cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\xml{\doignore{xml}}
4067cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4068cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Ignore text until a line `@end #1', keeping track of nested conditionals.
4069cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4070cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% A count to remember the depth of nesting.
4071cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\doignorecount
4072cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4073cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doignore#1{\begingroup
4074cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Scan in ``verbatim'' mode:
407505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \obeylines
4076cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\@ = \other
4077cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\{ = \other
4078cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\} = \other
4079cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4080cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Make sure that spaces turn into tokens that match what \doignoretext wants.
4081cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \spaceisspace
4082cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4083cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Count number of #1's that we've seen.
4084cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \doignorecount = 0
4085cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4086cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Swallow text until we reach the matching `@end #1'.
4087cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dodoignore{#1}%
4088cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
4091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \obeylines %
4092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\dodoignore#1{%
4094cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % #1 contains the command name as a string, e.g., `ifinfo'.
4095cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
409605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Define a command to find the next `@end #1'.
409705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \long\def\doignoretext##1^^M@end #1{%
409805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \doignoretextyyy##1^^M@#1\_STOP_}%
409905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
4100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % And this command to find another #1 command, at the beginning of a
4101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % line.  (Otherwise, we would consider a line `@c @ifset', for
4102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % example, to count as an @ifset for nesting.)
4103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
4104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % And now expand that command.
4106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \doignoretext ^^M%
4107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
4108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doignoreyyy#1{%
4111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#1}%
4112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\empty			% Nothing found.
4113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\next\doignoretextzzz
4114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else					% Found a nested condition, ...
4115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \advance\doignorecount by 1
4116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\next\doignoretextyyy		% ..., look for another.
4117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If we're here, #1 ends with ^^M\ifinfo (for example).
4118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \next #1% the token \_STOP_ is present just after this macro.
4120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We have to swallow the remaining "\_STOP_".
4123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doignoretextzzz#1{%
4125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\doignorecount = 0	% We have just found the outermost @end.
4126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\next\enddoignore
4127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else				% Still inside a nested condition.
4128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \advance\doignorecount by -1
4129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\next\doignoretext      % Look for the next @end.
4130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \next
4132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Finish off ignored text.
413505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ \obeylines%
413605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Ignore anything after the last `@end #1'; this matters in verbatim
413705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % environments, where otherwise the newline after an ignored conditional
413805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % would result in a blank line in the output.
413905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
414005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
4141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @set VAR sets the variable VAR to an empty value.
4144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
4145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Since we want to separate VAR from REST-OF-LINE (which might be
4147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% empty), we can't just use \parsearg; we have to insert a space of our
4148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% own to delimit the rest of the line, and then take it out again if we
4149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% didn't need it.
4150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We rely on the fact that \parsearg sets \catcode`\ =10.
4151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\set{\setyyy#1 \endsetyyy}
4153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setyyy#1 #2\endsetyyy{%
4154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
4155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \makevalueexpandable
4156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\temp{#2}%
4157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \edef\next{\gdef\makecsname{SET#1}}%
4158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\temp\empty
4159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \next{}%
4160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
4161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setzzz#2\endsetzzz
4162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
4163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
4164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Remove the trailing space \setxxx inserted.
4166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setzzz#1 \endsetzzz{\next{#1}}
4167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @clear VAR clears (i.e., unsets) the variable VAR.
4169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\clear{%
4171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
4172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \makevalueexpandable
4173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\expandafter\let\csname SET#1\endcsname=\relax
4174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
4175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @value{foo} gets the text saved in variable foo.
4178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\value{\begingroup\makevalueexpandable\valuexxx}
4179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\valuexxx#1{\expandablevalue{#1}\endgroup}
4180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
4181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\- = \active \catcode`\_ = \active
4182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\makevalueexpandable{%
4184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\value = \expandablevalue
4185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % We don't want these characters active, ...
4186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \catcode`\-=\other \catcode`\_=\other
4187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % ..., but we might end up with active ones in the argument if
4188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % we're called from @code, as @code{@value{foo-bar_}}, though.
4189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % So \let them to their normal equivalents.
4190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let-\realdash \let_\normalunderscore
4191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
4192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We have this subroutine so that we can handle at least some @value's
4195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% properly in indexes (we call \makevalueexpandable in \indexdummies).
4196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The command has to be fully expandable (if the variable is set), since
4197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the result winds up in the index file.  This means that if the
4198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% variable's value contains other Texinfo commands, it's almost certain
4199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% it will fail (although perhaps we could fix that with sufficient work
4200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% to do a one-level expansion on the result, instead of complete).
4201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\expandablevalue#1{%
4203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\ifx\csname SET#1\endcsname\relax
4204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {[No value for ``#1'']}%
4205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \message{Variable `#1', used in @value, is not set.}%
4206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
4207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \csname SET#1\endcsname
4208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
4212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% with @set.
4213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% To get special treatment of `@end ifset,' call \makeond and the redefine.
4215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makecond{ifset}
4217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
4218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doifset#1#2{%
4219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
4220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \makevalueexpandable
4221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\next=\empty
4222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\ifx\csname SET#2\endcsname\relax
4223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      #1% If not set, redefine \next.
4224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
4225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter
4226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }\next
4227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifsetfail{\doignore{ifset}}
4229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
423005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @ifclear VAR ... @end executes the `...' iff VAR has never been
4231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% defined with @set, or has been undefined with @clear.
4232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The `\else' inside the `\doifset' parameter is a trick to reuse the
4234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% above code: if the variable is not set, do nothing, if it is set,
4235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% then redefine \next to \ifclearfail.
4236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makecond{ifclear}
4238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
4239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifclearfail{\doignore{ifclear}}
4240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
424105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
424205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% without the @) is in fact defined.  We can only feasibly check at the
424305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% TeX level, so something like `mathcode' is going to considered
424405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% defined even though it is not a Texinfo command.
424505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
424605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\makecond{ifcommanddefined}
424705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
424805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
424905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\doifcmddefined#1#2{{%
425005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \makevalueexpandable
425105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\next=\empty
425205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\ifx\csname #2\endcsname\relax
425305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      #1% If not defined, \let\next as above.
425405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi
425505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter
425605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }\next
425705436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
425805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
425905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
426005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
426105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\makecond{ifcommandnotdefined}
426205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ifcommandnotdefined{%
426305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
426405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
426505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
426605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Set the `txicommandconditionals' variable, so documents have a way to
426705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% test if the @ifcommand...defined conditionals are available.
426805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\set txicommandconditionals
426905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @dircategory CATEGORY  -- specify a category of the dir file
4271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% which this file should belong to.  Ignore this in TeX.
4272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\dircategory=\comment
4273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @defininfoenclose.
4275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\definfoenclose=\comment
4276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{indexing,}
4279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Index generation facilities
4280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define \newwrite to be identical to plain tex's \newwrite
4282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% except not \outer, so it can be used within macros and \if's.
4283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\edef\newwrite{\makecsname{ptexnewwrite}}
4284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \newindex {foo} defines an index named foo.
4286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It automatically defines \fooindex such that
4287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \fooindex ...rest of line... puts an entry in the index foo.
4288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It also defines \fooindfile to be the number of the output channel for
4289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the file that accumulates this index.  The file's extension is foo.
4290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The name of an index should be no more than 2 characters long
4291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% for the sake of vms.
4292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\newindex#1{%
4294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \iflinks
4295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\newwrite \csname#1indfile\endcsname
4296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
4297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
4299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \noexpand\doindex{#1}}
4300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @defindex foo  ==  \newindex{foo}
4303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\defindex{\parsearg\newindex}
4305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define @defcodeindex, like @defindex except put all entries in @code.
4307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\defcodeindex{\parsearg\newcodeindex}
4309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\newcodeindex#1{%
4311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \iflinks
4312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\newwrite \csname#1indfile\endcsname
4313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \openout \csname#1indfile\endcsname \jobname.#1
4314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\xdef\csname#1index\endcsname{%
4316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \noexpand\docodeindex{#1}}%
4317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @synindex foo bar    makes index foo feed into index bar.
4321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Do this instead of @defindex foo if you don't want it as a separate index.
4322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @syncodeindex foo bar   similar, but put all entries made for index foo
4324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% inside @code.
4325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
4327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
4328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
4330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #3 the target index (bar).
4331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dosynindex#1#2#3{%
4332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Only do \closeout if we haven't already done it, else we'll end up
4333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % closing the target index.
433405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter \ifx\csname donesynindex#2\endcsname \relax
4335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % The \closeout helps reduce unnecessary open files; the limit on the
4336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Acorn RISC OS is a mere 16 files.
4337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\closeout\csname#2indfile\endcsname
433805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\csname donesynindex#2\endcsname = 1
4339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % redefine \fooindfile:
4341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
4342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\let\csname#2indfile\endcsname=\temp
4343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % redefine \fooindex:
4344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
4345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define \doindex, the driver for all \fooindex macros.
4348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Argument #1 is generated by the calling \fooindex macro,
4349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%  and it is "foo", the name of the index.
4350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \doindex just uses \parsearg; it calls \doind for the actual work.
4352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This is because \doind is more useful to call from other macros.
4353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% There is also \dosubind {index}{topic}{subtopic}
4355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% which makes an entry in a two-level index such as the operation index.
4356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
4358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\singleindexer #1{\doind{\indexname}{#1}}
4359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% like the previous two, but they put @code around the argument.
4361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
4362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
4363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Take care of Texinfo commands that can appear in an index entry.
4365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Since there are some commands we want to expand, and others we don't,
4366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% we have to laboriously prevent expansion for those that we don't.
4367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\indexdummies{%
4369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \escapechar = `\\     % use backslash in output files.
4370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
4371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\ {\realbackslash\space }%
437205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
437305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Need these unexpandable (because we define \tt as a dummy)
437405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % definitions when @{ or @} appear in index entry text.  Also, more
437505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % complicated, when \tex is in effect and \{ is a \delimiter again.
437605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % We can't use \lbracecmd and \rbracecmd because texindex assumes
437705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % braces and backslashes are used only as delimiters.  Perhaps we
437805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % should define @lbrace and @rbrace commands a la @comma.
437905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\{{{\tt\char123}}%
438005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\}{{\tt\char125}}%
438105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
438205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % I don't entirely understand this, but when an index entry is
438305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % generated from a macro call, the \endinput which \scanmacro inserts
438405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % causes processing to be prematurely terminated.  This is,
438505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % apparently, because \indexsorttmp is fully expanded, and \endinput
438605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % is an expandable command.  The redefinition below makes \endinput
438705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % disappear altogether for that purpose -- although logging shows that
438805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % processing continues to some further point.  On the other hand, it
438905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % seems \endinput does not hurt in the printed index arg, since that
439005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % is still getting written without apparent harm.
439105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
439205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Sample source (mac-idx3.tex, reported by Graham Percival to
439305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % help-texinfo, 22may06):
439405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % @macro funindex {WORD}
439505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % @findex xyz
439605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % @end macro
439705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % ...
439805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % @funindex commtest
439905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
440005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % The above is not enough to reproduce the bug, but it gives the flavor.
440105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
440205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Sample whatsit resulting:
440305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
440405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
440505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % So:
440605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\endinput = \empty
4407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Do the redefinitions.
4409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \commondummies
4410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% For the aux and toc files, @ is the escape character.  So we want to
4413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% redefine everything using @ as the escape character (instead of
4414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \realbackslash, still used for index files).  When everything uses @,
4415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% this will be simpler.
4416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\atdummies{%
4418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\@{@@}%
4419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\ {@ }%
4420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\{ = \lbraceatcmd
4421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\} = \rbraceatcmd
4422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Do the redefinitions.
4424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \commondummies
442505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \otherbackslash
4426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Called from \indexdummies and \atdummies.
4429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\commondummies{%
4431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \definedummyword defines \#1 as \string\#1\space, thus effectively
443305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % preventing its expansion.  This is used only for control words,
4434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % not control letters, because the \space would be incorrect for
4435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % control characters, but is needed to separate the control word
4436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % from whatever follows.
4437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % For control letters, we have \definedummyletter, which omits the
4439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % space.
4440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % These can be used both for control words that take an argument and
4442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % those that do not.  If it is followed by {arg} in the input, then
4443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % that will dutifully get written to the index (or wherever).
4444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\definedummyword  ##1{\def##1{\string##1\space}}%
4446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\definedummyletter##1{\def##1{\string##1}}%
4447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\definedummyaccent\definedummyletter
4448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \commondummiesnofonts
4450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyletter\_%
445205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyletter\-%
4453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Non-English letters.
4455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\AA
4456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\AE
445705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\DH
4458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\L
4459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\O
446005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\OE
446105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\TH
4462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\aa
4463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\ae
446405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\dh
446505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\exclamdown
4466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\l
4467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\o
446805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\oe
4469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\ordf
4470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\ordm
447105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\questiondown
447205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\ss
447305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\th
4474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Although these internal commands shouldn't show up, sometimes they do.
4476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\bf
4477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\gtr
4478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\hat
4479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\less
4480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\sf
4481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\sl
4482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\tclose
4483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\tt
4484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\LaTeX
4486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\TeX
4487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Assorted special characters.
448905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\arrow
4490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\bullet
4491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\comma
4492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\copyright
4493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\registeredsymbol
4494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\dots
4495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\enddots
449605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\entrybreak
4497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\equiv
4498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\error
4499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\euro
4500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\expansion
450105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\geq
450205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\guillemetleft
450305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\guillemetright
450405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\guilsinglleft
450505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\guilsinglright
450605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\lbracechar
450705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\leq
4508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\minus
450905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\ogonek
4510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\pounds
4511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\point
4512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\print
451305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\quotedblbase
451405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\quotedblleft
451505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\quotedblright
451605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\quoteleft
451705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\quoteright
451805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\quotesinglbase
451905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\rbracechar
4520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \definedummyword\result
452105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\textdegree
4522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We want to disable all macros so that they are not expanded by \write.
4524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \macrolist
4525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \normalturnoffactive
4527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Handle some cases of @value -- where it does not contain any
4529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % (non-fully-expandable) commands.
4530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \makevalueexpandable
4531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \commondummiesnofonts: common to \commondummies and \indexnofonts.
4534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
453505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\commondummiesnofonts{%
453605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Control letters and accents.
453705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyletter\!%
453805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyaccent\"%
453905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyaccent\'%
454005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyletter\*%
454105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyaccent\,%
454205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyletter\.%
454305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyletter\/%
454405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyletter\:%
454505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyaccent\=%
454605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyletter\?%
454705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyaccent\^%
454805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyaccent\`%
454905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyaccent\~%
455005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\u
455105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\v
455205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\H
455305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\dotaccent
455405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\ogonek
455505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\ringaccent
455605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\tieaccent
455705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\ubaraccent
455805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\udotaccent
455905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\dotless
456005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
456105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Texinfo font commands.
456205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\b
456305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\i
456405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\r
456505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\sansserif
456605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\sc
456705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\slanted
456805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\t
456905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
457005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Commands that take arguments.
457105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\abbr
457205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\acronym
457305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\anchor
457405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\cite
457505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\code
457605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\command
457705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\dfn
457805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\dmn
457905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\email
458005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\emph
458105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\env
458205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\file
458305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\image
458405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\indicateurl
458505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\inforef
458605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\kbd
458705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\key
458805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\math
458905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\option
459005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\pxref
459105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\ref
459205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\samp
459305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\strong
459405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\tie
459505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\uref
459605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\url
459705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\var
459805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\verb
459905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\w
460005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \definedummyword\xref
4601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \indexnofonts is used when outputting the strings to sort the index
4604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% by, and when constructing control sequence names.  It eliminates all
4605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% control sequences and just writes whatever the best ASCII sort string
4606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% would be for a given command (usually its argument).
4607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\indexnofonts{%
4609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Accent commands should become @asis.
4610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\definedummyaccent##1{\let##1\asis}%
4611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We can just ignore other control letters.
4612cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\definedummyletter##1{\let##1\empty}%
461305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % All control words become @asis by default; overrides below.
4614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\definedummyword\definedummyaccent
4615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \commondummiesnofonts
4617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Don't no-op \tt, since it isn't a user-level command
4619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % and is used in the definitions of the active chars like <, >, |, etc.
4620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Likewise with the other plain tex font commands.
4621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %\let\tt=\asis
4622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\ { }%
4624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\@{@}%
4625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\_{\normalunderscore}%
462605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\-{}% @- shouldn't affect sorting
462705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
462805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Unfortunately, texindex is not prepared to handle braces in the
462905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % content at all.  So for index sorting, we map @{ and @} to strings
463005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % starting with |, since that ASCII character is between ASCII { and }.
463105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\{{|a}%
463205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\lbracechar{|a}%
463305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
463405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\}{|b}%
463505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\rbracechar{|b}%
4636cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Non-English letters.
4638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\AA{AA}%
4639cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\AE{AE}%
464005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\DH{DZZ}%
4641cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\L{L}%
4642cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\OE{OE}%
4643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\O{O}%
464405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\TH{ZZZ}%
4645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\aa{aa}%
4646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\ae{ae}%
464705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\dh{dzz}%
464805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\exclamdown{!}%
4649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\l{l}%
4650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\oe{oe}%
4651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\ordf{a}%
4652cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\ordm{o}%
465305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\o{o}%
465405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\questiondown{?}%
465505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\ss{ss}%
465605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\th{zzz}%
4657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\LaTeX{LaTeX}%
4659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\TeX{TeX}%
4660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Assorted special characters.
4662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % (The following {} will end up in the sort string, but that's ok.)
466305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\arrow{->}%
4664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\bullet{bullet}%
4665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\comma{,}%
4666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\copyright{copyright}%
4667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\dots{...}%
4668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\enddots{...}%
4669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\equiv{==}%
4670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\error{error}%
4671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\euro{euro}%
4672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\expansion{==>}%
467305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\geq{>=}%
467405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\guillemetleft{<<}%
467505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\guillemetright{>>}%
467605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\guilsinglleft{<}%
467705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\guilsinglright{>}%
467805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\leq{<=}%
4679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\minus{-}%
4680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\point{.}%
468105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\pounds{pounds}%
4682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\print{-|}%
468305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\quotedblbase{"}%
468405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\quotedblleft{"}%
468505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\quotedblright{"}%
468605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\quoteleft{`}%
468705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\quoteright{'}%
468805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\quotesinglbase{,}%
468905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\registeredsymbol{R}%
4690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\result{=>}%
469105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\textdegree{o}%
469205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
469305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
469405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \indexlquoteignore \fi
4695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We need to get rid of all macros, leaving only the arguments (if present).
4697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Of course this is not nearly correct, but it is the best we can do for now.
4698cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % makeinfo does not expand macros in the argument to @deffn, which ends up
4699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % writing an index entry, and texindex isn't prepared for an index sort entry
4700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % that starts with \.
470105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
4702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Since macro invocations are followed by braces, we can just redefine them
4703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % to take a single TeX argument.  The case of a macro invocation that
4704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % goes to end-of-line is not handled.
470505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
4706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \macrolist
4707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
470905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
471005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% ignore left quotes in the sort term.
471105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{\catcode`\`=\active
471205436638acc7c010349a69c3395f1a57c642dc62Ying Wang \gdef\indexlquoteignore{\let`=\empty}}
471305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\indexbackslash=0  %overridden during \printindex.
4715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
4716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Most index entries go through here, but \dosubind is the general case.
4718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is the index name, #2 is the entry text.
4719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doind#1#2{\dosubind{#1}{#2}{}}
4720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Workhorse for all \fooindexes.
4722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is name of index, #2 is stuff to put there, #3 is subentry --
4723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% empty if called from \doind, as we usually are (the main exception
4724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% is with most defuns, which call us directly).
4725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dosubind#1#2#3{%
4727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \iflinks
4728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
4729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Store the main index entry text (including the third arg).
4730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \toks0 = {#2}%
4731cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If third arg is present, precede it with a space.
4732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\thirdarg{#3}%
4733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\thirdarg\empty \else
4734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \toks0 = \expandafter{\the\toks0 \space #3}%
4735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
4736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \edef\writeto{\csname#1indfile\endcsname}%
4738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
473905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \safewhatsit\dosubindwrite
4740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
4741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Write the entry in \toks0 to the index file:
4745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dosubindwrite{%
4747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Put the index entry in the margin if desired.
4748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\SETmarginindex\relax\else
4749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
4750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Remember, we are within a group.
4753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \indexdummies % Must do this here, since \bf, etc expand at this stage
4754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
4755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % so it will be output as is; and it will print as backslash.
4756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Process the index entry with all font commands turned off, to
4758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % get the string to sort by.
4759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\indexnofonts
4760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \edef\temp{\the\toks0}% need full expansion
4761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \xdef\indexsorttmp{\temp}%
4762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
4763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Set up the complete index entry, with both the sort key and
4765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % the original text, including any font commands.  We write
4766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % three arguments to \entry to the .?? file (four in the
4767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % subentry case), texindex reduces to two when writing the .??s
4768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % sorted result.
4769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \edef\temp{%
4770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \write\writeto{%
4771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
4772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
4773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \temp
4774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
4775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
477605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Take care of unwanted page breaks/skips around a whatsit:
4777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If a skip is the last thing on the list now, preserve it
4779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% by backing up by \lastskip, doing the \write, then inserting
4780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the skip again.  Otherwise, the whatsit generated by the
478105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \write or \pdfdest will make \lastskip zero.  The result is that
478205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% sequences like this:
4783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @end defun
4784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @tindex whatever
4785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @defun ...
4786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% will have extra space inserted, because the \medbreak in the
4787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% start of the @defun won't see the skip inserted by the @end of
4788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the previous defun.
4789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% But don't do any of this if we're not in vertical mode.  We
4791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% don't want to do a \vskip and prematurely end a paragraph.
4792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Avoid page breaks due to these extra skips, too.
4794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% But wait, there is a catch there:
4796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We'll have to check whether \lastskip is zero skip.  \ifdim is not
4797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% sufficient for this purpose, as it ignores stretch and shrink parts
4798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% of the skip.  The only way seems to be to check the textual
4799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% representation of the skip.
4800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The following is almost like \def\zeroskipmacro{0.0pt} except that
4802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
4803cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4804cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
4805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
480605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newskip\whatsitskip
480705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newcount\whatsitpenalty
480805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
4809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% ..., ready, GO:
4810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
481105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\safewhatsit#1{\ifhmode
481205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #1%
481305436638acc7c010349a69c3395f1a57c642dc62Ying Wang \else
4814cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
481505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \whatsitskip = \lastskip
4816cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \edef\lastskipmacro{\the\lastskip}%
481705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \whatsitpenalty = \lastpenalty
4818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4819cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % If \lastskip is nonzero, that means the last item was a
4820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % skip.  And since a skip is discardable, that means this
482105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % -\whatsitskip glue we're inserting is preceded by a
4822cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % non-discardable item, therefore it is not a potential
4823cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % breakpoint, therefore no \nobreak needed.
4824cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\lastskipmacro\zeroskipmacro
4825cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
482605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \vskip-\whatsitskip
4827cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4828cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
482905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #1%
4830cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4831cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\lastskipmacro\zeroskipmacro
4832cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If \lastskip was zero, perhaps the last item was a penalty, and
4833cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
4834cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % to re-insert the same penalty (values >10000 are used for various
4835cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % signals); since we just inserted a non-discardable item, any
4836cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % following glue (such as a \parskip) would be a breakpoint.  For example:
4837cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %   @deffn deffn-whatever
4838cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %   @vindex index-whatever
4839cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %   Description.
4840cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % would allow a break between the index-whatever whatsit
4841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % and the "Description." paragraph.
484205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
4843cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
4844cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % On the other hand, if we had a nonzero \lastskip,
4845cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % this make-up glue would be preceded by a non-discardable item
4846cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % (the whatsit from the \write), so we must insert a \nobreak.
484705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \nobreak\vskip\whatsitskip
4848cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
484905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\fi}
4850cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4851cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The index entry written in the file actually looks like
4852cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%  \entry {sortstring}{page}{topic}
4853cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% or
4854cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%  \entry {sortstring}{page}{topic}{subtopic}
4855cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The texindex program reads in these files and writes files
4856cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% containing these kinds of lines:
4857cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%  \initial {c}
4858cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%     before the first topic whose initial is c
4859cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%  \entry {topic}{pagelist}
4860cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%     for a topic that is used without subtopics
4861cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%  \primary {topic}
4862cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%     for the beginning of a topic that is used with subtopics
4863cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%  \secondary {subtopic}{pagelist}
4864cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%     for each subtopic.
4865cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4866cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define the user-accessible indexing commands
4867cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @findex, @vindex, @kindex, @cindex.
4868cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4869cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\findex {\fnindex}
4870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\kindex {\kyindex}
4871cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\cindex {\cpindex}
4872cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\vindex {\vrindex}
4873cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\tindex {\tpindex}
4874cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pindex {\pgindex}
4875cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4876cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\cindexsub {\begingroup\obeylines\cindexsub}
4877cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\obeylines %
4878cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\cindexsub "#1" #2^^M{\endgroup %
4879cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\dosubind{cp}{#2}{#1}}}
4880cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4881cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define the macros used in formatting output of the sorted index material.
4882cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4883cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @printindex causes a particular index (the ??s file) to get printed.
4884cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It does not print any chapter heading (usually an @unnumbered).
4885cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4886cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\printindex{\begingroup
4887cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dobreak \chapheadingskip{10000}%
4888cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4889cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \smallfonts \rm
4890cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tolerance = 9500
489105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \plainfrenchspacing
4892cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
4893cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4894cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % See if the index file exists and is nonempty.
4895cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Change catcode of @ here so that if the index file contains
4896cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \initial {@}
4897cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % as its first line, TeX doesn't complain about mismatched braces
4898cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % (because it thinks @} is a control sequence).
4899cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\@ = 11
4900cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \openin 1 \jobname.#1s
4901cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifeof 1
4902cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \enddoublecolumns gets confused if there is no text in the index,
4903cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % and it loses the chapter title and the aux file entries for the
4904cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % index.  The easiest way to prevent this problem is to make sure
4905cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % there is some text.
4906cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \putwordIndexNonexistent
4907cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
4908cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4909cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If the index file exists but is empty, then \openin leaves \ifeof
4910cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % false.  We have to make TeX try to read something from the file, so
4911cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % it can discover if there is anything in it.
4912cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \read 1 to \temp
4913cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifeof 1
4914cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \putwordIndexIsEmpty
4915cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
4916cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Index files are almost Texinfo source, but we use \ as the escape
4917cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % character.  It would be better to use @, but that's too big a change
4918cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % to make right now.
4919cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\indexbackslash{\backslashcurfont}%
4920cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \catcode`\\ = 0
4921cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \escapechar = `\\
4922cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \begindoublecolumns
4923cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \input \jobname.#1s
4924cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \enddoublecolumns
4925cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
4926cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
4927cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \closein 1
4928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup}
4929cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4930cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% These macros are used by the sorted index file itself.
4931cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Change them to control the appearance of the index.
4932cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4933cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\initial#1{{%
4934cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Some minor font changes for the special characters.
4935cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
4936cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4937cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Remove any glue we may have, we'll be inserting our own.
4938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \removelastskip
4939cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4940cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We like breaks before the index initials, so insert a bonus.
4941cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nobreak
4942cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vskip 0pt plus 3\baselineskip
4943cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \penalty 0
4944cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vskip 0pt plus -3\baselineskip
4945cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4946cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Typeset the initial.  Making this add up to a whole number of
4947cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % baselineskips increases the chance of the dots lining up from column
4948cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % to column.  It still won't often be perfect, because of the stretch
4949cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % we need before each entry, but it's better.
4950cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
4951cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % No shrink because it confuses \balancecolumns.
4952cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vskip 1.67\baselineskip plus .5\baselineskip
4953cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \leftline{\secbf #1}%
4954cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Do our best not to break after the initial.
4955cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nobreak
4956cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vskip .33\baselineskip plus .1\baselineskip
4957cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
4958cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4959cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
4960cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% then page number (#2) flushed to the right margin.  It is used for index
4961cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% and table of contents entries.  The paragraph is indented by \leftskip.
4962cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
4963cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% A straightforward implementation would start like this:
4964cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%	\def\entry#1#2{...
496505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% But this freezes the catcodes in the argument, and can cause problems to
4966cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @code, which sets - active.  This problem was fixed by a kludge---
4967cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% ``-'' was active throughout whole index, but this isn't really right.
4968cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The right solution is to prevent \entry from swallowing the whole text.
4969cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%                                 --kasal, 21nov03
4970cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\entry{%
4971cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \begingroup
4972cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4973cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Start a new paragraph if necessary, so our assignments below can't
4974cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % affect previous text.
4975cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \par
4976cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4977cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Do not fill out the last line with white space.
4978cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \parfillskip = 0in
4979cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4980cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % No extra space above this paragraph.
4981cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \parskip = 0in
4982cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4983cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Do not prefer a separate line ending with a hyphen to fewer lines.
4984cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \finalhyphendemerits = 0
4985cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4986cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \hangindent is only relevant when the entry text and page number
4987cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % don't both fit on one line.  In that case, bob suggests starting the
4988cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % dots pretty far over on the line.  Unfortunately, a large
4989cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % indentation looks wrong when the entry text itself is broken across
4990cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % lines.  So we use a small indentation and put up with long leaders.
4991cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4992cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \hangafter is reset to 1 (which is the value we want) at the start
4993cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % of each paragraph, so we need not do anything with that.
4994cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \hangindent = 2em
4995cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
4996cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % When the entry text needs to be broken, just fill out the first line
4997cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % with blank space.
4998cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \rightskip = 0pt plus1fil
4999cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5000cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % A bit of stretch before each entry for the benefit of balancing
5001cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % columns.
5002cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vskip 0pt plus1pt
5003cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
500405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % When reading the text of entry, convert explicit line breaks
500505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % from @* into spaces.  The user might give these in long section
500605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % titles, for instance.
500705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\*{\unskip\space\ignorespaces}%
500805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\entrybreak{\hfil\break}%
500905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
5010cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Swallow the left brace of the text (first parameter):
5011cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \afterassignment\doentry
5012cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\temp =
5013cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
501405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\entrybreak{\unskip\space\ignorespaces}%
5015cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doentry{%
5016cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \bgroup % Instead of the swallowed brace.
5017cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \noindent
5018cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \aftergroup\finishentry
5019cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % And now comes the text of the entry.
5020cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5021cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\finishentry#1{%
5022cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % #1 is the page number.
5023cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5024cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % The following is kludged to not output a line of dots in the index if
5025cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % there are no page numbers.  The next person who breaks this will be
5026cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % cursed by a Unix daemon.
502705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \setbox\boxA = \hbox{#1}%
502805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifdim\wd\boxA = 0pt
5029cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ %
5030cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
5031cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
5032cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % If we must, put the page number on a line of its own, and fill out
5033cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % this line with blank space.  (The \hfil is overwhelmed with the
5034cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % fill leaders glue in \indexdotfill if the page number does fit.)
5035cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \hfil\penalty50
5036cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \null\nobreak\indexdotfill % Have leaders before the page number.
5037cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
5038cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % The `\ ' here is removed by the implicit \unskip that TeX does as
5039cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % part of (the primitive) \par.  Without it, a spurious underfull
5040cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % \hbox ensues.
5041cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifpdf
5042cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\pdfgettoks#1.%
5043cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\ \the\toksA
5044cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \else
5045cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\ #1%
5046cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
5047cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5048cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \par
5049cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endgroup
5050cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5051cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
505205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Like plain.tex's \dotfill, except uses up at least 1 em.
5053cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\indexdotfill{\cleaders
505405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
5055cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5056cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\primary #1{\line{#1\hfil}}
5057cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5058cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\secondaryindent \secondaryindent=0.5cm
5059cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\secondary#1#2{{%
5060cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parfillskip=0in
5061cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip=0in
5062cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hangindent=1in
5063cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hangafter=1
5064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
5065cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifpdf
5066cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
5067cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
5068cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    #2
5069cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
5070cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \par
5071cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
5072cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5073cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define two-column mode, which we use to typeset indexes.
5074cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Adapted from the TeXbook, page 416, which is to say,
5075cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the manmac.tex format used to print the TeXbook itself.
5076cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\@=11
5077cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5078cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newbox\partialpage
5079cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\doublecolumnhsize
5080cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5081cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
5082cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Grab any single-column material above us.
5083cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \output = {%
5084cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5085cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Here is a possibility not foreseen in manmac: if we accumulate a
5086cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % whole lot of material, we might end up calling this \output
5087cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % routine twice in a row (see the doublecol-lose test, which is
5088cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % essentially a couple of indexes with @setchapternewpage off).  In
5089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % that case we just ship out what is in \partialpage with the normal
5090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % output routine.  Generally, \partialpage will be empty when this
5091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % runs and this will be a no-op.  See the indexspread.tex test case.
5092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifvoid\partialpage \else
5093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \onepageout{\pagecontents\partialpage}%
5094cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5095cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5096cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\setbox\partialpage = \vbox{%
5097cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Unvbox the main output page.
5098cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \unvbox\PAGE
5099cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \kern-\topskip \kern\baselineskip
5100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }%
5101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
5102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \eject % run that output routine to set \partialpage
5103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Use the double-column output routine for subsequent pages.
5105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \output = {\doublecolumnout}%
5106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Change the page size parameters.  We could do this once outside this
5108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
5109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % format, but then we repeat the same computation.  Repeating a couple
5110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % of assignments once per index is clearly meaningless for the
5111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % execution time, so we may as well do it in one place.
5112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % First we halve the line length, less a little for the gutter between
5114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % the columns.  We compute the gutter based on the line length, so it
5115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % changes automatically with the paper format.  The magic constant
5116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % below is chosen so that the gutter has the same value (well, +-<1pt)
5117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % as it did when we hard-coded it.
5118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We put the result in a separate register, \doublecolumhsize, so we
5120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % can restore it in \pagesofar, after \hsize itself has (potentially)
5121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % been clobbered.
5122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \doublecolumnhsize = \hsize
5124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \advance\doublecolumnhsize by -.04154\hsize
5125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \divide\doublecolumnhsize by 2
5126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hsize = \doublecolumnhsize
5127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Double the \vsize as well.  (We don't need a separate register here,
5129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % since nobody clobbers \vsize.)
5130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vsize = 2\vsize
5131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The double-column output routine for all double-column pages except
5134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the last.
5135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doublecolumnout{%
5137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \splittopskip=\topskip \splitmaxdepth=\maxdepth
5138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Get the available space for the double columns -- the normal
5139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % (undoubled) page height minus any material left over from the
5140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % previous page.
5141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dimen@ = \vsize
5142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \divide\dimen@ by 2
5143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\dimen@ by -\ht\partialpage
5144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % box0 will be the left-hand column, box2 the right.
5146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
5147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \onepageout\pagesofar
5148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \unvbox255
5149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \penalty\outputpenalty
5150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Re-output the contents of the output page -- any previous material,
5153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% followed by the two boxes we just split, in box0 and box2.
5154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pagesofar{%
5155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \unvbox\partialpage
5156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hsize = \doublecolumnhsize
5158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \wd0=\hsize \wd2=\hsize
5159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hbox to\pagewidth{\box0\hfil\box2}%
5160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% All done with double columns.
5163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\enddoublecolumns{%
516405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % The following penalty ensures that the page builder is exercised
516505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % _before_ we change the output routine.  This is necessary in the
516605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % following situation:
516705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
516805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % The last section of the index consists only of a single entry.
516905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Before this section, \pagetotal is less than \pagegoal, so no
517005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % break occurs before the last section starts.  However, the last
517105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % section, consisting of \initial and the single \entry, does not
517205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % fit on the page and has to be broken off.  Without the following
517305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % penalty the page builder will not be exercised until \eject
517405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % below, and by that time we'll already have changed the output
517505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % routine to the \balancecolumns version, so the next-to-last
517605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % double-column page will be processed with \balancecolumns, which
517705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % is wrong:  The two columns will go to the main vertical list, with
517805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % the broken-off section in the recent contributions.  As soon as
517905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % the output routine finishes, TeX starts reconsidering the page
518005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % break.  The two columns and the broken-off section both fit on the
518105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % page, because the two columns now take up only half of the page
518205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % goal.  When TeX sees \eject from below which follows the final
518305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % section, it invokes the new output routine that we've set after
518405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % \balancecolumns below; \onepageout will try to fit the two columns
518505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % and the final section into the vbox of \pageheight (see
518605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % \pagebody), causing an overfull box.
518705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
518805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Note that glue won't work here, because glue does not exercise the
518905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
519005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \penalty0
519105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
5192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \output = {%
5193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Split the last of the double-column material.  Leave it on the
5194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % current page, no automatic page break.
5195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \balancecolumns
5196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If we end up splitting too much material for the current page,
5198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % though, there will be another page break right after this \output
5199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % invocation ends.  Having called \balancecolumns once, we do not
5200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % want to call it again.  Therefore, reset \output to its normal
5201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % definition right away.  (We hope \balancecolumns will never be
5202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % called on to balance too much material, but if it is, this makes
5203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % the output somewhat more palatable.)
5204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\output = {\onepageout{\pagecontents\PAGE}}%
5205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
5206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \eject
5207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endgroup % started in \begindoublecolumns
5208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \pagegoal was set to the doubled \vsize above, since we restarted
5210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % the current page.  We're now back to normal single-column
5211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % typesetting, so reset \pagegoal to the normal \vsize (after the
5212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \endgroup where \vsize got restored).
5213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \pagegoal = \vsize
5214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Called at the end of the double column material.
5217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\balancecolumns{%
5218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
5219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dimen@ = \ht0
5220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\dimen@ by \topskip
5221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\dimen@ by-\baselineskip
5222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \divide\dimen@ by 2 % target to split to
5223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
5224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \splittopskip = \topskip
5225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Loop until we get a decent breakpoint.
5226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
5227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vbadness = 10000
5228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \loop
5229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \global\setbox3 = \copy0
5230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \global\setbox1 = \vsplit3 to \dimen@
5231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifdim\ht3>\dimen@
5232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \global\advance\dimen@ by 1pt
5233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \repeat
5234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
5235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
5236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox0=\vbox to\dimen@{\unvbox1}%
5237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox2=\vbox to\dimen@{\unvbox3}%
5238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \pagesofar
5240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\@ = \other
5242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{sectioning,}
5245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Chapters, sections, etc.
5246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
524705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Let's start with @part.
524805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\part{\partzzz{#1}}
524905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\partzzz#1{%
525005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \chapoddpage
525105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \null
525205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \vskip.3\vsize  % move it down on the page a bit
525305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \begingroup
525405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \noindent \titlefonts\rmisbold #1\par % the text
525505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\lastnode=\empty      % no node to associate with
525605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \writetocentry{part}{#1}{}% but put it in the toc
525705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \headingsoff              % no headline or footline on the part page
525805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \chapoddpage
525905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \endgroup
526005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
526105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
526205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \unnumberedno is an oxymoron.  But we count the unnumbered
5263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% sections so that we can refer to them unambiguously in the pdf
5264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% outlines by their "section number".  We avoid collisions with chapter
5265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% numbers by starting them at 10000.  (If a document ever has 10000
5266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% chapters, we're in trouble anyway, I'm sure.)
5267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\unnumberedno \unnumberedno = 10000
5268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\chapno
5269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\secno        \secno=0
5270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\subsecno     \subsecno=0
5271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\subsubsecno  \subsubsecno=0
5272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This counter is funny since it counts through charcodes of letters A, B, ...
5274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\appendixno  \appendixno = `\@
5275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \def\appendixletter{\char\the\appendixno}
5277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We do the following ugly conditional instead of the above simple
5278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% construct for the sake of pdftex, which needs the actual
5279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% letter in the expansion, not just typeset.
5280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\appendixletter{%
5282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\appendixno=`A A%
5283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`B B%
5284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`C C%
5285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`D D%
5286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`E E%
5287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`F F%
5288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`G G%
5289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`H H%
5290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`I I%
5291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`J J%
5292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`K K%
5293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`L L%
5294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`M M%
5295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`N N%
5296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`O O%
5297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`P P%
5298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`Q Q%
5299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`R R%
5300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`S S%
5301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`T T%
5302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`U U%
5303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`V V%
5304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`W W%
5305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`X X%
5306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`Y Y%
5307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\ifnum\appendixno=`Z Z%
5308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % The \the is necessary, despite appearances, because \appendixletter is
5309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % expanded while writing the .toc file.  \char\appendixno is not
5310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % expandable, thus it is written literally, thus all appendixes come out
5311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % with the same letter (or @) in the toc without it.
5312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else\char\the\appendixno
5313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
5314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
5315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
531605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Each @chapter defines these (using marks) as the number+name, number
531705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% and name of the chapter.  Page headings and footings can use
531805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% these.  @section does likewise.
5319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\thischapter{}
532005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\thischapternum{}
532105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\thischaptername{}
5322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\thissection{}
532305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\thissectionnum{}
532405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\thissectionname{}
5325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\absseclevel % used to calculate proper heading level
5327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
5328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @raisesections: treat @section as chapter, @subsection as section, etc.
5330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\raisesections{\global\advance\secbase by -1}
5331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\up=\raisesections % original BFox name
5332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @lowersections: treat @chapter as section, @section as subsection, etc.
5334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\lowersections{\global\advance\secbase by 1}
5335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\down=\lowersections % original BFox name
5336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% we only have subsub.
5338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\maxseclevel = 3
5339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% A numbered section within an unnumbered changes to unnumbered too.
534105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% To achieve this, remember the "biggest" unnum. sec. we are currently in:
534205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\chardef\unnlevel = \maxseclevel
5343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Trace whether the current chapter is an appendix or not:
5345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
5346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chapheadtype{N}
5347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Choose a heading macro
5349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is heading type
5350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #2 is heading level
5351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #3 is text for heading
5352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\genhead#1#2#3{%
5353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Compute the abs. sec. level:
5354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \absseclevel=#2
5355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\absseclevel by \secbase
5356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Make sure \absseclevel doesn't fall outside the range:
5357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum \absseclevel < 0
5358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \absseclevel = 0
5359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
5360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum \absseclevel > 3
5361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \absseclevel = 3
5362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
5364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % The heading type:
5365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\headtype{#1}%
5366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \if \headtype U%
536705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifnum \absseclevel < \unnlevel
536805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \chardef\unnlevel = \absseclevel
5369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
5371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Check for appendix sections:
5372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum \absseclevel = 0
5373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \edef\chapheadtype{\headtype}%
5374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
5375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \if \headtype A\if \chapheadtype N%
5376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\errmessage{@appendix... within a non-appendix chapter}%
5377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi\fi
5378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Check for numbered within unnumbered:
538005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifnum \absseclevel > \unnlevel
5381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\headtype{U}%
5382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
538305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \chardef\unnlevel = 3
5384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
5386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Now print the heading:
5387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \if \headtype U%
5388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifcase\absseclevel
5389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\unnumberedzzz{#3}%
5390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \or \unnumberedseczzz{#3}%
5391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \or \unnumberedsubseczzz{#3}%
5392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \or \unnumberedsubsubseczzz{#3}%
5393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
5395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \if \headtype A%
5396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifcase\absseclevel
5397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \appendixzzz{#3}%
5398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \or \appendixsectionzzz{#3}%
5399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \or \appendixsubseczzz{#3}%
5400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \or \appendixsubsubseczzz{#3}%
5401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
5402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
5403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifcase\absseclevel
5404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \chapterzzz{#3}%
5405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \or \seczzz{#3}%
5406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \or \numberedsubseczzz{#3}%
5407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \or \numberedsubsubseczzz{#3}%
5408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
5409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
5411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \suppressfirstparagraphindent
5412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% an interface:
5415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\numhead{\genhead N}
5416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\apphead{\genhead A}
5417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnmhead{\genhead U}
5418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
5420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% all lower-level sectioning counters to zero.
5421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Also set \chaplevelprefix, which we prepend to @float sequence numbers
5423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (e.g., figures), q.v.  By default (before any chapter), that is empty.
5424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\chaplevelprefix = \empty
5425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
5427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chapterzzz#1{%
5428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % section resetting is \global in case the chapter is in a group, such
5429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % as an @include file.
5430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
5431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\advance\chapno by 1
5432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Used for \float.
5434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\chaplevelprefix{\the\chapno.}%
5435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetallfloatnos
5436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
543705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % \putwordChapter can contain complex things in translations.
543805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \toks0=\expandafter{\putwordChapter}%
543905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \message{\the\toks0 \space \the\chapno}%
5440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Write the actual heading.
5442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \chapmacro{#1}{Ynumbered}{\the\chapno}%
5443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % So @section and the like are numbered underneath this chapter.
5445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\section = \numberedsec
5446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\subsection = \numberedsubsec
5447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\subsubsection = \numberedsubsubsec
5448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
545005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
545105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
5452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\appendixzzz#1{%
5453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
5454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\advance\appendixno by 1
5455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\chaplevelprefix{\appendixletter.}%
5456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetallfloatnos
5457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
545805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % \putwordAppendix can contain complex things in translations.
545905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \toks0=\expandafter{\putwordAppendix}%
546005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \message{\the\toks0 \space \appendixletter}%
5461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \chapmacro{#1}{Yappendix}{\appendixletter}%
5463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\section = \appendixsec
5465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\subsection = \appendixsubsec
5466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\subsubsection = \appendixsubsubsec
5467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
546905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% normally unnmhead0 calls unnumberedzzz:
547005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\unnumbered{\unnmhead0{#1}}
5471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnumberedzzz#1{%
5472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
5473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\advance\unnumberedno by 1
5474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Since an unnumbered has no number, no prefix for figures.
5476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\chaplevelprefix = \empty
5477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \resetallfloatnos
5478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % This used to be simply \message{#1}, but TeX fully expands the
5480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % argument to \message.  Therefore, if #1 contained @-commands, TeX
5481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
5482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % expanded @cite (which turns out to cause errors because \cite is meant
5483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % to be executed, not expanded).
5484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Anyway, we don't want the fully-expanded definition of @cite to appear
5486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % as a result of the \message, we just want `@cite' itself.  We use
5487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
5488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % simply yielding the contents of <toks register>.  (We also do this for
5489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % the toc entries.)
5490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \toks0 = {#1}%
5491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \message{(\the\toks0)}%
5492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
5494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\section = \unnumberedsec
5496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\subsection = \unnumberedsubsec
5497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\subsubsection = \unnumberedsubsubsec
5498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @centerchap is like @unnumbered, but the heading is centered.
5501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\outer\parseargdef\centerchap{%
5502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Well, we could do the following in a group, but that would break
5503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % an assumption that \chapmacro is called at the outermost level.
5504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Thus we are safer this way:		--kasal, 24feb04
5505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\centerparametersmaybe = \centerparameters
5506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \unnmhead0{#1}%
5507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\centerparametersmaybe = \relax
5508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @top is like @unnumbered.
5511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\top\unnumbered
5512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Sections.
551405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
5515cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
5516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\seczzz#1{%
5517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
5518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
5519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
552105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% normally calls appendixsectionzzz:
552205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\appendixsection{\apphead1{#1}}
5523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\appendixsectionzzz#1{%
5524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
5525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
5526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\appendixsec\appendixsection
5528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
552905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% normally calls unnumberedseczzz:
553005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
5531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnumberedseczzz#1{%
5532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
5533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
5534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Subsections.
553705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
553805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% normally calls numberedsubseczzz:
553905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\numberedsubsec{\numhead2{#1}}
5540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\numberedsubseczzz#1{%
5541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\subsubsecno=0  \global\advance\subsecno by 1
5542cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
5543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
554505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% normally calls appendixsubseczzz:
554605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\appendixsubsec{\apphead2{#1}}
5547cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\appendixsubseczzz#1{%
5548cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\subsubsecno=0  \global\advance\subsecno by 1
5549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sectionheading{#1}{subsec}{Yappendix}%
5550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                 {\appendixletter.\the\secno.\the\subsecno}%
5551cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
555305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% normally calls unnumberedsubseczzz:
555405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
5555cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnumberedsubseczzz#1{%
5556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\subsubsecno=0  \global\advance\subsecno by 1
5557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sectionheading{#1}{subsec}{Ynothing}%
5558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                 {\the\unnumberedno.\the\secno.\the\subsecno}%
5559cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Subsubsections.
556205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
556305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% normally numberedsubsubseczzz:
556405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
5565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\numberedsubsubseczzz#1{%
5566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\advance\subsubsecno by 1
5567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sectionheading{#1}{subsubsec}{Ynumbered}%
5568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
5569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
557105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% normally appendixsubsubseczzz:
557205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
5573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\appendixsubsubseczzz#1{%
5574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\advance\subsubsecno by 1
5575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sectionheading{#1}{subsubsec}{Yappendix}%
5576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
5577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
557905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% normally unnumberedsubsubseczzz:
558005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
5581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnumberedsubsubseczzz#1{%
5582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\advance\subsubsecno by 1
5583cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sectionheading{#1}{subsubsec}{Ynothing}%
5584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
5585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% These macros control what the section commands do, according
5588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
5589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define them by default for a numbered chapter.
5590cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\section = \numberedsec
5591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\subsection = \numberedsubsec
5592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\subsubsection = \numberedsubsubsec
5593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define @majorheading, @heading and @subheading
5595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\majorheading{%
5597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\advance\chapheadingskip by 10pt \chapbreak }%
5598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parsearg\chapheadingzzz
5599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
5602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chapheadingzzz#1{%
560305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \vbox{\chapfonts \raggedtitlesettings #1\par}%
560405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \nobreak\bigskip \nobreak
5605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \suppressfirstparagraphindent
5606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @heading, @subheading, @subsubheading.
5609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
5610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \suppressfirstparagraphindent}
5611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
5612cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \suppressfirstparagraphindent}
5613cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
5614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \suppressfirstparagraphindent}
5615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% These macros generate a chapter, section, etc. heading only
5617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (including whitespace, linebreaking, etc. around it),
5618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% given all the information in convenient, parsed form.
5619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
562005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Args are the skip and penalty (usually negative)
5621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
5622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Parameter controlling skip before chapter headings (if needed)
5624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\chapheadingskip
5625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
562605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Define plain chapter starts, and page on/off switching for it.
5627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chapbreak{\dobreak \chapheadingskip {-4000}}
5628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chappager{\par\vfill\supereject}
562905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Because \domark is called before \chapoddpage, the filler page will
563005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% get the headings for the next chapter, which is wrong.  But we don't
563105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% care -- we just disable all headings on the filler page.
563205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\chapoddpage{%
563305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \chappager
563405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifodd\pageno \else
563505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \begingroup
563605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \headingsoff
563705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \null
563805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \chappager
563905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \endgroup
564005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
564105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
5642cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
5644cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\CHAPPAGoff{%
5646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\contentsalignmacro = \chappager
5647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\pchapsepmacro=\chapbreak
5648cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\pagealignmacro=\chappager}
5649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\CHAPPAGon{%
5651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\contentsalignmacro = \chappager
5652cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\pchapsepmacro=\chappager
5653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\pagealignmacro=\chappager
5654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\def\HEADINGSon{\HEADINGSsingle}}
5655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5656cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\CHAPPAGodd{%
5657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\contentsalignmacro = \chapoddpage
5658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\pchapsepmacro=\chapoddpage
5659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\pagealignmacro=\chapoddpage
5660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\def\HEADINGSon{\HEADINGSdouble}}
5661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\CHAPPAGon
5663cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Chapter opening.
5665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
5667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Yappendix, Yomitfromtoc), #3 the chapter number.
5668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% To test against our argument.
5670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Ynothingkeyword{Ynothing}
5671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Yomitfromtockeyword{Yomitfromtoc}
5672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Yappendixkeyword{Yappendix}
5673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5674cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chapmacro#1#2#3{%
567505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Insert the first mark before the heading break (see notes for \domark).
567605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\prevchapterdefs=\lastchapterdefs
567705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\prevsectiondefs=\lastsectiondefs
567805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
567905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        \gdef\thissection{}}%
568005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
568105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\temptype{#2}%
568205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\temptype\Ynothingkeyword
568305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
568405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          \gdef\thischapter{\thischaptername}}%
568505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temptype\Yomitfromtockeyword
568605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
568705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          \gdef\thischapter{}}%
568805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temptype\Yappendixkeyword
568905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \toks0={#1}%
569005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \xdef\lastchapterdefs{%
569105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \gdef\noexpand\thischaptername{\the\toks0}%
569205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \gdef\noexpand\thischapternum{\appendixletter}%
569305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % \noexpand\putwordAppendix avoids expanding indigestible
569405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % commands in some of the translations.
569505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
569605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 \noexpand\thischapternum:
569705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 \noexpand\thischaptername}%
569805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }%
569905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
570005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \toks0={#1}%
570105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \xdef\lastchapterdefs{%
570205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \gdef\noexpand\thischaptername{\the\toks0}%
570305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \gdef\noexpand\thischapternum{\the\chapno}%
570405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % \noexpand\putwordChapter avoids expanding indigestible
570505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % commands in some of the translations.
570605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
570705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 \noexpand\thischapternum:
570805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 \noexpand\thischaptername}%
570905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }%
571005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi\fi
571105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
571205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Output the mark.  Pass it through \safewhatsit, to take care of
571305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % the preceding space.
571405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \safewhatsit\domark
571505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
571605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Insert the chapter heading break.
5717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \pchapsepmacro
571805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
571905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Now the second mark, after the heading break.  No break points
572005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % between here and the heading.
572105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\prevchapterdefs=\lastchapterdefs
572205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\prevsectiondefs=\lastsectiondefs
572305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \domark
572405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
5725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
572605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \chapfonts \rmisbold
5727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
572805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Have to define \lastsection before calling \donoderef, because the
5729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % xref code eventually uses it.  On the other hand, it has to be called
5730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % after \pchapsepmacro, or the headline will change too soon.
573105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \gdef\lastsection{#1}%
5732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Only insert the separating space if we have a chapter/appendix
5734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % number, and don't print the unnumbered ``number''.
5735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\temptype\Ynothingkeyword
5736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setbox0 = \hbox{}%
5737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\toctype{unnchap}%
5738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else\ifx\temptype\Yomitfromtockeyword
5739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
5740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\toctype{omit}%
5741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else\ifx\temptype\Yappendixkeyword
5742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
5743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\toctype{app}%
5744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
5745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setbox0 = \hbox{#3\enspace}%
5746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\toctype{numchap}%
5747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi\fi\fi
5748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Write the toc entry for this chapter.  Must come before the
5750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \donoderef, because we include the current node name in the toc
5751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % entry, and \donoderef resets it to empty.
5752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \writetocentry{\toctype}{#1}{#3}%
5753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % For pdftex, we have to write out the node definition (aka, make
5755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % the pdfdest) after any page break, but before the actual text has
5756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % been typeset.  If the destination for the pdf outline is after the
5757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % text, then jumping from the outline may wind up with the text not
5758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % being visible, for instance under high magnification.
5759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \donoderef{#2}%
5760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Typeset the actual heading.
576205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \nobreak % Avoid page breaks at the interline glue.
576305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
5764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \unhbox0 #1\par}%
5765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
5766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nobreak\bigskip % no page break after a chapter title
5767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nobreak
5768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @centerchap -- centered and unnumbered.
5771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\centerparametersmaybe = \relax
5772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\centerparameters{%
5773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\rightskip by 3\rightskip
5774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \leftskip = \rightskip
5775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parfillskip = 0pt
5776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% I don't think this chapter style is supported any more, so I'm not
5780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
5781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
5783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnchfopen #1{%
578505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \chapoddpage
578605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \vbox{\chapfonts \raggedtitlesettings #1\par}%
578705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \nobreak\bigskip\nobreak
5788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chfopen #1#2{\chapoddpage {\chapfonts
5790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
5791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\par\penalty 5000 %
5792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\centerchfopen #1{%
579405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \chapoddpage
579505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
579605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \nobreak\bigskip \nobreak
5797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\CHAPFopen{%
5799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\chapmacro=\chfopen
5800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let\centerchapmacro=\centerchfopen}
5801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5803cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Section titles.  These macros combine the section number parts and
5804cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% call the generic \sectionheading to do the printing.
5805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5806cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\secheadingskip
5807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
5808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Subsection titles.
5810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\subsecheadingskip
5811cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
5812cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5813cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Subsubsection titles.
5814cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\subsubsecheadingskip{\subsecheadingskip}
5815cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\subsubsecheadingbreak{\subsecheadingbreak}
5816cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5817cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Print any size, any type, section title.
5819cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
5821cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
5822cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% section number.
5823cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
582405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\seckeyword{sec}
582505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
5826cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\sectionheading#1#2#3#4{%
5827cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
582805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \checkenv{}% should not be in an environment.
582905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
5830cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Switch to the right set of fonts.
583105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \csname #2fonts\endcsname \rmisbold
583205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
583305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\sectionlevel{#2}%
583405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\temptype{#3}%
583505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
583605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Insert first mark before the heading break (see notes for \domark).
583705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\prevsectiondefs=\lastsectiondefs
583805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifx\temptype\Ynothingkeyword
583905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifx\sectionlevel\seckeyword
584005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
584105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              \gdef\thissection{\thissectionname}}%
584205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \fi
584305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else\ifx\temptype\Yomitfromtockeyword
584405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % Don't redefine \thissection.
584505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else\ifx\temptype\Yappendixkeyword
584605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifx\sectionlevel\seckeyword
584705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \toks0={#1}%
584805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \xdef\lastsectiondefs{%
584905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \gdef\noexpand\thissectionname{\the\toks0}%
585005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \gdef\noexpand\thissectionnum{#4}%
585105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          % \noexpand\putwordSection avoids expanding indigestible
585205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          % commands in some of the translations.
585305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \gdef\noexpand\thissection{\noexpand\putwordSection{}
585405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     \noexpand\thissectionnum:
585505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     \noexpand\thissectionname}%
585605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }%
585705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \fi
585805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else
585905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifx\sectionlevel\seckeyword
586005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \toks0={#1}%
586105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \xdef\lastsectiondefs{%
586205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \gdef\noexpand\thissectionname{\the\toks0}%
586305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \gdef\noexpand\thissectionnum{#4}%
586405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          % \noexpand\putwordSection avoids expanding indigestible
586505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          % commands in some of the translations.
586605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \gdef\noexpand\thissection{\noexpand\putwordSection{}
586705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     \noexpand\thissectionnum:
586805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     \noexpand\thissectionname}%
586905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }%
587005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \fi
587105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi\fi\fi
587205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
587305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Go into vertical mode.  Usually we'll already be there, but we
587405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % don't want the following whatsit to end up in a preceding paragraph
587505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % if the document didn't happen to have a blank line.
587605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \par
587705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
587805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Output the mark.  Pass it through \safewhatsit, to take care of
587905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % the preceding space.
588005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \safewhatsit\domark
5881cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5882cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Insert space above the heading.
5883cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \csname #2headingbreak\endcsname
5884cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
588505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Now the second mark, after the heading break.  No break points
588605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % between here and the heading.
588705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\prevsectiondefs=\lastsectiondefs
588805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \domark
5889cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
589005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Only insert the space after the number if we have a section number.
5891cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\temptype\Ynothingkeyword
5892cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setbox0 = \hbox{}%
5893cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\toctype{unn}%
589405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \gdef\lastsection{#1}%
5895cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else\ifx\temptype\Yomitfromtockeyword
5896cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % for @headings -- no section number, don't include in toc,
589705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % and don't redefine \lastsection.
5898cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setbox0 = \hbox{}%
5899cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\toctype{omit}%
5900cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \let\sectionlevel=\empty
5901cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else\ifx\temptype\Yappendixkeyword
5902cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setbox0 = \hbox{#4\enspace}%
5903cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\toctype{app}%
590405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \gdef\lastsection{#1}%
5905cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
5906cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \setbox0 = \hbox{#4\enspace}%
5907cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\toctype{num}%
590805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \gdef\lastsection{#1}%
5909cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi\fi\fi
5910cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
591105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
5912cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
5913cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5914cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Write the node reference (= pdf destination for pdftex).
591505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Again, see comments in \chapmacro.
5916cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \donoderef{#3}%
5917cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
591805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Interline glue will be inserted when the vbox is completed.
591905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % That glue will be a valid breakpoint for the page, since it'll be
592005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % preceded by a whatsit (usually from the \donoderef, or from the
592105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % \writetocentry if there was no node).  We don't want to allow that
592205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % break, since then the whatsits could end up on page n while the
592305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
592405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \nobreak
592505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
5926cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Output the actual section heading.
592705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
5928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \hangindent=\wd0  % zero if no section number
5929cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \unhbox0 #1}%
5930cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
5931cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Add extra space after the heading -- half of whatever came above it.
5932cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Don't allow stretch, though.
5933cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \kern .5 \csname #2headingskip\endcsname
5934cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5935cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Do not let the kern be a potential breakpoint, as it would be if it
5936cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % was followed by glue.
5937cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nobreak
5938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5939cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We'll almost certainly start a paragraph next, so don't let that
5940cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % glue accumulate.  (Not a breakpoint because it's preceded by a
594105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % discardable item.)  However, when a paragraph is not started next
594205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
594305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % or the negative glue will cause weirdly wrong output, typically
594405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % obscuring the section heading with something else.
5945cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vskip-\parskip
594605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
594705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % This is so the last item on the main vertical list is a known
594805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % \penalty > 10000, so \startdefun, etc., can recognize the situation
594905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % and do the needful.
5950cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \penalty 10001
5951cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
5952cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5953cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5954cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{toc,}
5955cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Table of contents.
5956cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newwrite\tocfile
5957cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5958cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Write an entry to the toc file, opening it if necessary.
5959cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Called from @chapter, etc.
5960cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5961cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
5962cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We append the current node name (if any) and page number as additional
5963cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% arguments for the \{chap,sec,...}entry macros which will eventually
5964cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% read this.  The node name is used in the pdf outlines as the
5965cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% destination to jump to.
5966cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5967cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We open the .toc file for writing here instead of at @setfilename (or
5968cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% any other fixed time) so that @contents can be anywhere in the document.
5969cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% But if #1 is `omit', then we don't do anything.  This is used for the
5970cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% table of contents chapter openings themselves.
5971cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5972cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\iftocfileopened
5973cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\omitkeyword{omit}%
5974cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
5975cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\writetocentry#1#2#3{%
5976cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \edef\writetoctype{#1}%
5977cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\writetoctype\omitkeyword \else
5978cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \iftocfileopened\else
5979cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \immediate\openout\tocfile = \jobname.toc
5980cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \global\tocfileopenedtrue
5981cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5982cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
5983cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \iflinks
5984cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {\atdummies
5985cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       \edef\temp{%
5986cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
5987cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       \temp
598805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      }%
5989cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
5990cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
5991cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
5992cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Tell \shipout to create a pdf destination on each page, if we're
5993cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % writing pdf.  These are used in the table of contents.  We can't
5994cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % just write one on every page because the title pages are numbered
5995cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % 1 and 2 (the page numbers aren't printed), and so are the first
5996cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % two pages of the document.  Thus, we'd have two destinations named
5997cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % `1', and two named `2'.
5998cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifpdf \global\pdfmakepagedesttrue \fi
5999cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6000cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6001cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6002cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% These characters do not print properly in the Computer Modern roman
6003cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% fonts, so we must take special care.  This is more or less redundant
6004cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% with the Texinfo input format setup at the end of this file.
600505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
6006cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\activecatcodes{%
6007cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\"=\active
6008cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\$=\active
6009cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\<=\active
6010cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\>=\active
6011cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\\=\active
6012cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^=\active
6013cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\_=\active
6014cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\|=\active
6015cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\~=\active
6016cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6017cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6018cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6019cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Read the toc file, which is essentially Texinfo input.
6020cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\readtocfile{%
6021cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setupdatafile
6022cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \activecatcodes
602305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \input \tocreadfilename
6024cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6025cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6026cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\contentsrightmargin \contentsrightmargin=1in
6027cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\savepageno
6028cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\lastnegativepageno \lastnegativepageno = -1
6029cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6030cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Prepare to read what we've written to \tocfile.
6031cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6032cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\startcontents#1{%
6033cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % If @setchapternewpage on, and @headings double, the contents should
6034cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % start on an odd page, unlike chapters.  Thus, we maintain
6035cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \contentsalignmacro in parallel with \pagealignmacro.
6036cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % From: Torbjorn Granlund <tege@matematik.su.se>
6037cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \contentsalignmacro
6038cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \immediate\closeout\tocfile
6039cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
6040cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Don't need to put `Contents' or `Short Contents' in the headline.
6041cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % It is abundantly clear what they are.
6042cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \chapmacro{#1}{Yomitfromtoc}{}%
6043cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
6044cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \savepageno = \pageno
6045cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \begingroup                  % Set up to handle contents files properly.
6046cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \raggedbottom              % Worry more about breakpoints than the bottom.
6047cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
6048cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
6049cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Roman numerals for page numbers.
6050cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
6051cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6052cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
605305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% redefined for the two-volume lispref.  We always output on
605405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \jobname.toc even if this is redefined.
605505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
605605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\tocreadfilename{\jobname.toc}
6057cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6058cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Normal (long) toc.
605905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
6060cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\contents{%
6061cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \startcontents{\putwordTOC}%
606205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \openin 1 \tocreadfilename\space
6063cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifeof 1 \else
6064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \readtocfile
6065cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
6066cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vfill \eject
6067cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \contentsalignmacro % in case @setchapternewpage odd is in effect
6068cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifeof 1 \else
6069cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \pdfmakeoutlines
6070cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
6071cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \closein 1
6072cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endgroup
6073cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \lastnegativepageno = \pageno
6074cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\pageno = \savepageno
6075cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6076cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6077cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% And just the chapters.
6078cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\summarycontents{%
6079cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \startcontents{\putwordShortTOC}%
6080cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
608105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\partentry = \shortpartentry
6082cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\numchapentry = \shortchapentry
6083cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\appentry = \shortchapentry
6084cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\unnchapentry = \shortunnchapentry
6085cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % We want a true roman here for the page numbers.
6086cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \secfonts
6087cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\rm=\shortcontrm \let\bf=\shortcontbf
6088cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\sl=\shortcontsl \let\tt=\shortconttt
6089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \rm
6090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \hyphenpenalty = 10000
6091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \advance\baselineskip by 1pt % Open it up a little.
6092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\numsecentry##1##2##3##4{}
6093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\appsecentry = \numsecentry
6094cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\unnsecentry = \numsecentry
6095cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\numsubsecentry = \numsecentry
6096cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\appsubsecentry = \numsecentry
6097cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\unnsubsecentry = \numsecentry
6098cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\numsubsubsecentry = \numsecentry
6099cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\appsubsubsecentry = \numsecentry
6100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\unnsubsubsecentry = \numsecentry
610105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \openin 1 \tocreadfilename\space
6102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifeof 1 \else
6103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \readtocfile
6104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
6105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \closein 1
6106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vfill \eject
6107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \contentsalignmacro % in case @setchapternewpage odd is in effect
6108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endgroup
6109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \lastnegativepageno = \pageno
6110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\pageno = \savepageno
6111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\shortcontents = \summarycontents
6113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Typeset the label for a chapter or appendix for the short contents.
6115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
6116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\shortchaplabel#1{%
6118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % This space should be enough, since a single number is .5em, and the
6119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % widest letter (M) is 1em, at least in the Computer Modern fonts.
6120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % But use \hss just in case.
6121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % (This space doesn't include the extra space that gets added after
6122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % the label; that gets put in by \shortchapentry above.)
6123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
6124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We'd like to right-justify chapter numbers, but that looks strange
6125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % with appendix letters.  And right-justifying numbers and
6126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % left-justifying letters looks strange when there is less than 10
6127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % chapters.  Have to read the whole toc once to know how many chapters
6128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % there are before deciding ...
6129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hbox to 1em{#1\hss}%
6130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% These macros generate individual entries in the table of contents.
6133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The first argument is the chapter or section name.
6134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The last argument is the page number.
6135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The arguments in between are the chapter number, section number, ...
6136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
613705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Parts, in the main contents.  Replace the part number, which doesn't
613805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% exist, with an empty box.  Let's hope all the numbers have the same width.
613905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Also ignore the page number, which is conventionally not printed.
614005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
614105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
614205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
614305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Parts, in the short toc.
614405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\shortpartentry#1#2#3#4{%
614505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \penalty-300
614605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
614705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
614805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
614905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Chapters, in the main contents.
6151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
6152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Chapters, in the short toc.
6154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% See comments in \dochapentry re vbox and related settings.
6155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\shortchapentry#1#2#3#4{%
6156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
6157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Appendices, in the main contents.
6160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Need the word Appendix, and a fixed-size box.
6161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\appendixbox#1{%
6163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We use M since it's probably the widest letter.
6164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox0 = \hbox{\putwordAppendix{} M}%
6165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hbox to \wd0{\putwordAppendix{} #1\hss}}
6166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
6168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Unnumbered chapters.
6170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
6171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
6172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Sections.
6174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
6175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\appsecentry=\numsecentry
6176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
6177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Subsections.
6179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
6180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\appsubsecentry=\numsubsecentry
6181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
6182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% And subsubsections.
6184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
6185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\appsubsubsecentry=\numsubsubsecentry
6186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
6187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This parameter controls the indentation of the various levels.
6189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Same as \defaultparindent.
6190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\tocindent \tocindent = 15pt
6191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Now for the actual typesetting. In all these, #1 is the text and #2 is the
6193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% page number.
6194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If the toc has to be broken over pages, we want it to be at chapters
6196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% if at all possible; hence the \penalty.
6197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dochapentry#1#2{%
6198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
6199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \begingroup
6200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \chapentryfonts
6201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
6202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \endgroup
6203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   \nobreak\vskip .25\baselineskip plus.1\baselineskip
6204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dosecentry#1#2{\begingroup
6207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \secentryfonts \leftskip=\tocindent
6208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
6209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup}
6210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dosubsecentry#1#2{\begingroup
6212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \subsecentryfonts \leftskip=2\tocindent
6213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
6214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup}
6215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dosubsubsecentry#1#2{\begingroup
6217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \subsubsecentryfonts \leftskip=3\tocindent
6218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
6219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup}
6220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We use the same \entry macro as for the index entries.
6222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\tocentry = \entry
6223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Space between chapter (or whatever) number and the title.
6225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\labelspace{\hskip1em \relax}
6226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dopageno#1{{\rm #1}}
6228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doshortpageno#1{{\rm #1}}
6229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\chapentryfonts{\secfonts \rm}
6231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\secentryfonts{\textfonts}
6232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\subsecentryfonts{\textfonts}
6233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\subsubsecentryfonts{\textfonts}
6234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{environments,}
6237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @foo ... @end foo.
6238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
623905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @tex ... @end tex    escapes into raw TeX temporarily.
6240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% One exception: @ is still an escape character, so that @end tex works.
624105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% But \@ or @@ will get a plain @ character.
6242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\tex{%
624405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setupmarkupstyle{tex}%
6245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
6246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
6247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
6248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode `\%=14
6249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode `\+=\other
6250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode `\"=\other
6251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode `\|=\other
6252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode `\<=\other
6253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode `\>=\other
625405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\`=\other
625505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\'=\other
6256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \escapechar=`\\
6257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
625805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % ' is active in math mode (mathcode"8000).  So reset it, and all our
625905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % other math active characters (just in case), to plain's definitions.
626005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \mathactive
626105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
6262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\b=\ptexb
6263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\bullet=\ptexbullet
6264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\c=\ptexc
6265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\,=\ptexcomma
6266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\.=\ptexdot
6267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\dots=\ptexdots
6268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\equiv=\ptexequiv
6269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\!=\ptexexclam
6270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\i=\ptexi
6271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\indent=\ptexindent
6272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\noindent=\ptexnoindent
6273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\{=\ptexlbrace
6274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\+=\tabalign
6275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\}=\ptexrbrace
6276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\/=\ptexslash
6277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\*=\ptexstar
6278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\t=\ptext
627905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter \let\csname top\endcsname=\ptextop  % outer
6280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\frenchspacing=\plainfrenchspacing
6281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
6282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
6283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
6284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\@{@}%
6285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% There is no need to define \Etex.
6287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define @lisp ... @end lisp.
6289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @lisp environment forms a group so it can rebind things,
6290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% including the definition of @end lisp (which normally is erroneous).
6291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Amount to narrow the margins by for @lisp.
6293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\lispnarrowing \lispnarrowing=0.4in
6294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This is the definition that ^^M gets inside @lisp, @example, and other
6296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% such environments.  \null is better than a space, since it doesn't
6297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% have any width.
6298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\lisppar{\null\endgraf}
6299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This space is always present above and below environments.
6301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\envskipamount \envskipamount = 0pt
6302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Make spacing and below environment symmetrical.  We use \parskip here
6304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% to help in doing that, since in @example-like environments \parskip
6305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% is reset to zero; thus the \afterenvbreak inserts no space -- but the
6306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% start of the next paragraph will insert \parskip.
6307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\aboveenvbreak{{%
6309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % =10000 instead of <10000 because of a special case in \itemzzz and
6310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \sectionheading, q.v.
6311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum \lastpenalty=10000 \else
6312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \advance\envskipamount by \parskip
6313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgraf
6314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifdim\lastskip<\envskipamount
6315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \removelastskip
6316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % it's not a good place to break if the last penalty was \nobreak
6317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % or better ...
6318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifnum\lastpenalty<10000 \penalty-50 \fi
6319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \vskip\envskipamount
6320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
6321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
6322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
6323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\afterenvbreak = \aboveenvbreak
6325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
6327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% also clear it, so that its embedded environments do the narrowing again.
6328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\nonarrowing=\relax
6329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
6331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% environment contents.
6332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\font\circle=lcircle10
6333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\circthick
6334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\cartouter\newdimen\cartinner
6335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\normbskip\newskip\normpskip\newskip\normlskip
6336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\circthick=\fontdimen8\circle
6337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
6339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ctr{{\hskip 6pt\circle\char'010}}
6340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\cbl{{\circle\char'012\hskip -6pt}}
6341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\cbr{{\hskip 6pt\circle\char'011}}
6342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\carttop{\hbox to \cartouter{\hskip\lskip
6343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \ctl\leaders\hrule height\circthick\hfil\ctr
6344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \hskip\rskip}}
6345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\cartbot{\hbox to \cartouter{\hskip\lskip
6346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \cbl\leaders\hrule height\circthick\hfil\cbr
6347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \hskip\rskip}}
6348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\lskip\newskip\rskip
6350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\cartouche{%
6352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifhmode\par\fi  % can't be in the midst of a paragraph.
6353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \startsavinginserts
6354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \lskip=\leftskip \rskip=\rightskip
6355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \leftskip=0pt\rightskip=0pt % we want these *outside*.
6356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \cartinner=\hsize \advance\cartinner by-\lskip
6357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\cartinner by-\rskip
6358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \cartouter=\hsize
6359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\cartouter by 18.4pt	% allow for 3pt kerns on either
6360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				% side, and for 6pt waste from
6361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				% each corner char, and rule thickness
6362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
6363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Flag to tell @lisp, etc., not to narrow margin.
6364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\nonarrowing = t%
636505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
636605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % If this cartouche directly follows a sectioning command, we need the
636705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % \parskip glue (backspaced over by default) or the cartouche can
636805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % collide with the section heading.
636905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
637005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
6371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vbox\bgroup
6372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \baselineskip=0pt\parskip=0pt\lineskip=0pt
6373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \carttop
6374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \hbox\bgroup
6375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \hskip\lskip
6376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \vrule\kern3pt
6377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \vbox\bgroup
6378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      \kern3pt
6379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      \hsize=\cartinner
6380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      \baselineskip=\normbskip
6381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      \lineskip=\normlskip
6382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      \parskip=\normpskip
6383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      \vskip -\parskip
638405436638acc7c010349a69c3395f1a57c642dc62Ying Wang	      \comment % For explanation, see the end of def\group.
6385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Ecartouche{%
6387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              \ifhmode\par\fi
6388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      \kern3pt
6389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \egroup
6390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \kern3pt\vrule
6391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \hskip\rskip
6392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \egroup
6393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \cartbot
6394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \egroup
6395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \checkinserts
6396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This macro is called at the beginning of all the @example variants,
6400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% inside a group.
640105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newdimen\nonfillparindent
6402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\nonfillstart{%
6403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \aboveenvbreak
6404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hfuzz = 12pt % Don't be fussy
6405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sepspaces % Make spaces be word-separators rather than space tokens.
6406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\par = \lisppar % don't ignore blank lines
6407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \obeylines % each line of input is a line of output
6408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip = 0pt
640905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Turn off paragraph indentation but redefine \indent to emulate
641005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % the normal \indent.
641105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \nonfillparindent=\parindent
6412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parindent = 0pt
641305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\indent\nonfillindent
641405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
6415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \emergencystretch = 0pt % don't try to avoid overfull boxes
6416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\nonarrowing\relax
6417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \advance \leftskip by \lispnarrowing
6418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \exdentamount=\lispnarrowing
6419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
6420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\nonarrowing = \relax
6421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
6422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\exdent=\nofillexdent
6423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
642505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\begingroup
642605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\obeyspaces
642705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% We want to swallow spaces (but not other tokens) after the fake
642805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @indent in our nonfill-environments, where spaces are normally
642905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% active and set to @tie, resulting in them not being ignored after
643005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @indent.
643105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
643205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\nonfillindentcheck{%
643305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifx\temp %
643405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\expandafter\nonfillindentgobble%
643505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\else%
643605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\leavevmode\nonfillindentbox%
643705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\fi%
643805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}%
643905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\endgroup
644005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\nonfillindentgobble#1{\nonfillindent}
644105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
644205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If you want all examples etc. small: @set dispenvsize small.
6444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If you want even small examples the full size: @set dispenvsize nosmall.
6445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This affects the following displayed environments:
6446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%    @example, @display, @format, @lisp
6447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\smallword{small}
6449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\nosmallword{nosmall}
6450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\SETdispenvsize\relax
6451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setnormaldispenv{%
6452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\SETdispenvsize\smallword
645305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % end paragraph for sake of leading, in case document has no blank
645405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % line.  This is redundant with what happens in \aboveenvbreak, but
645505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % we need to do it before changing the fonts, and it's inconvenient
645605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % to change the fonts afterward.
645705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifnum \lastpenalty=10000 \else \endgraf \fi
6458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \smallexamplefonts \rm
6459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
6460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setsmalldispenv{%
6462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\SETdispenvsize\nosmallword
6463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
646405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifnum \lastpenalty=10000 \else \endgraf \fi
6465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \smallexamplefonts \rm
6466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
6467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We often define two environments, @foo and @smallfoo.
647005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Let's do it in one command.  #1 is the env name, #2 the definition.
647105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\makedispenvdef#1#2{%
647205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
647305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
6474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\let\csname E#1\endcsname \afterenvbreak
6475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
6476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
647805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Define two environment synonyms (#1 and #2) for an environment.
647905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\maketwodispenvdef#1#2#3{%
648005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \makedispenvdef{#1}{#3}%
648105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \makedispenvdef{#2}{#3}%
6482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
648305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
648405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @lisp: indented, narrowed, typewriter font;
648505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @example: same as @lisp.
6486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @smallexample and @smalllisp: use smaller fonts.
6488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Originally contributed by Pavel@xerox.
6489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
649005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\maketwodispenvdef{lisp}{example}{%
6491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nonfillstart
649205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \tt\setupmarkupstyle{example}%
6493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
649405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gobble % eat return
6495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @display/@smalldisplay: same as @lisp except keep current font.
6497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
649805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\makedispenvdef{display}{%
6499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nonfillstart
6500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gobble
6501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @format/@smallformat: same as @display except don't narrow margins.
6504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
650505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\makedispenvdef{format}{%
6506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\nonarrowing = t%
6507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nonfillstart
6508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gobble
6509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
6512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\flushleft{%
6513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\nonarrowing = t%
6514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nonfillstart
6515cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gobble
6516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\Eflushleft = \afterenvbreak
6518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @flushright.
6520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\flushright{%
6522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\nonarrowing = t%
6523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nonfillstart
652405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \advance\leftskip by 0pt plus 1fill\relax
6525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gobble
6526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\Eflushright = \afterenvbreak
6528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
653005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @raggedright does more-or-less normal line breaking but no right
653105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% justification.  From plain.tex.
653205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\envdef\raggedright{%
653305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
653405436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
653505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\Eraggedright\par
653605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
653705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\envdef\raggedleft{%
653805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \parindent=0pt \leftskip0pt plus2em
653905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
654005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \hbadness=10000 % Last line will usually be underfull, so turn off
654105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  % badness reporting.
654205436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
654305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\Eraggedleft\par
654405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
654505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\envdef\raggedcenter{%
654605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
654705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
654805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \hbadness=10000 % Last line will usually be underfull, so turn off
654905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  % badness reporting.
655005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
655105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\Eraggedcenter\par
655205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
655305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6554cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @quotation does normal linebreaking (hence we can't use \nonfillstart)
6555cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% and narrows the margins.  We keep \parskip nonzero in general, since
6556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% we're doing normal filling.  So, when using \aboveenvbreak and
6557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \afterenvbreak, temporarily make \parskip 0.
6558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
655905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\makedispenvdef{quotation}{\quotationstart}
656005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
656105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\quotationstart{%
656205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \indentedblockstart % same as \indentedblock, but increase right margin too.
6563cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\nonarrowing\relax
6564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \advance\rightskip by \lispnarrowing
6565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
6566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parsearg\quotationlabel
6567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We have retained a nonzero parskip for the environment, since we're
6570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% doing normal filling.
6571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Equotation{%
6573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \par
657405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\quotationauthor\thisisundefined\else
6575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % indent a bit.
6576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
6577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
6578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\parskip=0pt \afterenvbreak}%
6579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
658005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\Esmallquotation{\Equotation}
6581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If we're given an argument, typeset it in bold with a colon after.
6583cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\quotationlabel#1{%
6584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#1}%
6585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\empty \else
6586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {\bf #1: }%
6587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
6588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
659005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @indentedblock is like @quotation, but indents only on the left and
659105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% has no optional argument.
659205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
659305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\makedispenvdef{indentedblock}{\indentedblockstart}
659405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
659505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\indentedblockstart{%
659605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
659705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \parindent=0pt
659805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
659905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
660005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\nonarrowing\relax
660105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\leftskip by \lispnarrowing
660205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \exdentamount = \lispnarrowing
660305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
660405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\nonarrowing = \relax
660505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
660605436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
660705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
660805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Keep a nonzero parskip for the environment, since we're doing normal filling.
660905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
661005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\Eindentedblock{%
661105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \par
661205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {\parskip=0pt \afterenvbreak}%
661305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
661405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\Esmallindentedblock{\Eindentedblock}
661505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
6618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If we want to allow any <char> as delimiter,
6619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% we need the curly braces so that makeinfo sees the @verb command, eg:
6620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
6621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
6623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% [Knuth] p.344; only we need to do the other characters Texinfo sets
6625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% active too.  Otherwise, they get lost as the first character on a
6626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% verbatim line.
6627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dospecials{%
6628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \do\ \do\\\do\{\do\}\do\$\do\&%
6629cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
6630cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \do\<\do\>\do\|\do\@\do+\do\"%
663105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Don't do the quotes -- if we do, @set txicodequoteundirected and
663205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % @set txicodequotebacktick will not have effect on @verb and
663305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % @verbatim, and ?` and !` ligatures won't get disabled.
663405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %\do\`\do\'%
6635cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6636cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% [Knuth] p. 380
6638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\uncatcodespecials{%
663905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\do##1{\catcode`##1=\other}\dospecials}
6640cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6641cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Setup for the @verb command.
6642cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Eight spaces for a tab
6644cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\begingroup
6645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^I=\active
6646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
6647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup
6648cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setupverb{%
6650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tt  % easiest (and conventionally used) font for verbatim
6651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\par{\leavevmode\endgraf}%
665205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setupmarkupstyle{verb}%
6653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tabeightspaces
6654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Respect line breaks,
6655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % print special symbols as themselves, and
6656cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % make each space count
6657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % must do in this order:
6658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \obeylines \uncatcodespecials \sepspaces
6659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Setup for the @verbatim environment
6662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
666305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Real tab expansion.
6664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
6665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
666605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% We typeset each line of the verbatim in an \hbox, so we can handle
666705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% tabs.  The \global is in case the verbatim line starts with an accent,
666805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% or some other command that starts with a begin-group.  Otherwise, the
666905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% entire \verbbox would disappear at the corresponding end-group, before
667005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% it is typeset.  Meanwhile, we can't have nested verbatim commands
667105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (can we?), so the \global won't be overwriting itself.
667205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newbox\verbbox
667305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
667405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
6675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\begingroup
6676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^I=\active
6677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\tabexpand{%
6678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \catcode`\^^I=\active
6679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def^^I{\leavevmode\egroup
668005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
668105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \divide\dimen\verbbox by\tabw
668205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
668305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \advance\dimen\verbbox by\tabw  % advance to next multiple of \tabw
668405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
6685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }%
6686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
6687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup
668805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
668905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% start the verbatim environment.
6690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setupverbatim{%
6691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\nonarrowing = t%
6692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \nonfillstart
669305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \tt % easiest (and conventionally used) font for verbatim
669405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % The \leavevmode here is for blank lines.  Otherwise, we would
669505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % never \starttabox and the \egroup would end verbatim mode.
669605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
6697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tabexpand
669805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setupmarkupstyle{verbatim}%
6699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Respect line breaks,
6700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % print special symbols as themselves, and
670105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % make each space count.
670205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Must do in this order:
6703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \obeylines \uncatcodespecials \sepspaces
6704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \everypar{\starttabbox}%
6705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Do the @verb magic: verbatim text is quoted by unique
6708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% delimiter characters.  Before first delimiter expect a
6709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% right brace, after last delimiter expect closing brace:
6710cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%    \def\doverb'{'<char>#1<char>'}'{#1}
6712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% [Knuth] p. 382; only eat outer {}
6714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\begingroup
6715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
6716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
6717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup
6718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\verb{\begingroup\setupverb\doverb}
6720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Do the @verbatim magic: define the macro \doverbatim so that
6723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the (first) argument ends when '@end verbatim' is reached, ie:
6724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%     \def\doverbatim#1@end verbatim{#1}
6726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% For Texinfo it's a lot easier than for LaTeX,
6728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
6729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% we need not redefine '\', '{' and '}'.
6730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6731cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Inspired by LaTeX's verbatim command set [latex.ltx]
6732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\begingroup
6734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\ =\active
6735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \obeylines %
6736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % ignore everything up to the first ^^M, that's the newline at the end
6737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % of the @verbatim input line itself.  Otherwise we get an extra blank
6738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % line in the output.
6739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
6740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We really want {...\end verbatim} in the body of the macro, but
6741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % without the active space; thus we have to use \xdef and \gobble.
6742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup
6743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envdef\verbatim{%
6745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \setupverbatim\doverbatim
6746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\Everbatim = \afterenvbreak
6748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @verbatiminclude FILE - insert text of file in verbatim environment.
6751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
6753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doverbatiminclude#1{%
6755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
6756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \makevalueexpandable
6757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \setupverbatim
675805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \indexnofonts       % Allow `@@' and other weird things in file names.
675905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
6760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \input #1
6761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \afterenvbreak
6762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
6763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @copying ... @end copying.
6766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Save the text away for @insertcopying later.
6767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We save the uninterpreted tokens, rather than creating a box.
6769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Saving the text in a box would be much easier, but then all the
6770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% typesetting commands (@smallbook, font changes, etc.) have to be done
6771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% beforehand -- and a) we want @copying to be done first in the source
6772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% file; b) letting users define the frontmatter in as flexible order as
6773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% possible is very desirable.
6774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
6776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
6777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\insertcopying{%
6779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \begingroup
6780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \parindent = 0pt  % paragraph indentation looks wrong on title page
6781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \scanexp\copyingtext
6782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endgroup
6783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
678505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{defuns,}
6787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @defun etc.
6788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\defbodyindent \defbodyindent=.4in
6790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\defargsindent \defargsindent=50pt
6791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newskip\deflastargmargin \deflastargmargin=18pt
679205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newcount\defunpenalty
6793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Start the processing of @deffn:
6795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\startdefun{%
6796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\lastpenalty<10000
6797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \medbreak
679805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \defunpenalty=10003 % Will keep this @deffn together with the
679905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        % following @def command, see below.
6800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
6801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If there are two @def commands in a row, we'll have a \nobreak,
6802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % which is there to keep the function description together with its
6803cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % header.  But if there's nothing but headers, we need to allow a
6804cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % break somewhere.  Check specifically for penalty 10002, inserted
680505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % by \printdefunline, instead of 10000, since the sectioning
6806cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % commands also insert a nobreak penalty, and we don't want to allow
6807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % a break between a section heading and a defun.
680805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
680905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % As a further refinement, we avoid "club" headers by signalling
681005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % with penalty of 10003 after the very first @deffn in the
681105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % sequence (see above), and penalty of 10002 after any following
681205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % @def command.
681305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
6814cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
6815cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Similarly, after a section heading, do not allow a break.
6816cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % But do insert the glue.
6817cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \medskip  % preceded by discardable penalty, so not a breakpoint
6818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
6819cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
6820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parindent=0in
6821cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\leftskip by \defbodyindent
6822cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \exdentamount=\defbodyindent
6823cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6824cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6825cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dodefunx#1{%
6826cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % First, check whether we are in the right environment:
6827cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \checkenv#1%
6828cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
6829cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % As above, allow line break if we have multiple x headers in a row.
6830cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % It's not a great place, though.
683105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
6832cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
6833cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % And now, it's time to reuse the body of the original defun:
6834cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\gobbledefun#1%
6835cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6836cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\gobbledefun#1\startdefun{}
6837cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6838cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \printdefunline \deffnheader{text}
6839cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6840cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\printdefunline#1#2{%
6841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \begingroup
6842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % call \deffnheader:
6843cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    #1#2 \endheader
6844cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % common ending:
6845cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \interlinepenalty = 10000
684605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\rightskip by 0pt plus 1fil\relax
6847cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgraf
6848cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \nobreak\vskip -\parskip
684905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
6850cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Some of the @defun-type tags do not enable magic parentheses,
6851cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % rendering the following check redundant.  But we don't optimize.
6852cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \checkparencounts
6853cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endgroup
6854cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6855cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6856cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Edefun{\endgraf\medbreak}
6857cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6858cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
685905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the only thing remaining is to define \deffnheader.
6860cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6861cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\makedefun#1{%
6862cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\let\csname E#1\endcsname = \Edefun
6863cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \edef\temp{\noexpand\domakedefun
6864cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
6865cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \temp
6866cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6867cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6868cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \domakedefun \deffn \deffnx \deffnheader
6869cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define \deffn and \deffnx, without parameters.
6871cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \deffnheader has to be defined explicitly.
6872cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6873cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\domakedefun#1#2#3{%
6874cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \envdef#1{%
6875cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \startdefun
687605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \doingtypefnfalse    % distinguish typed functions from all else
6877cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \parseargusing\activeparens{\printdefunline#3}%
6878cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
6879cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def#2{\dodefunx#1}%
6880cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def#3%
6881cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6882cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
688305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifdoingtypefn       % doing typed function?
688405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newif\ifrettypeownline    % typeset return type on its own line?
688505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
688605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @deftypefnnewline on|off says whether the return type of typed functions
688705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% are printed on their own line.  This affects @deftypefn, @deftypefun,
688805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @deftypeop, and @deftypemethod.
688905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
689005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\deftypefnnewline{%
689105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\temp{#1}%
689205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\temp\onword
689305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\csname SETtxideftypefnnl\endcsname
689405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      = \empty
689505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temp\offword
689605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\csname SETtxideftypefnnl\endcsname
689705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      = \relax
689805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
689905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errhelp = \EMsimple
690005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{Unknown @txideftypefnnl value `\temp',
690105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                must be on|off}%
690205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi
690305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
690405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
690505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Untyped functions:
6906cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6907cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @deffn category name args
6908cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deffn}{\deffngeneral{}}
6909cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6910cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @deffn category class name args
6911cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
6912cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6913cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \defopon {category on}class name args
6914cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
6915cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6916cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \deffngeneral {subind}category name args
6917cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6918cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\deffngeneral#1#2 #3 #4\endheader{%
6919cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
6920cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dosubind{fn}{\code{#3}}{#1}%
6921cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
6922cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6923cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
692405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Typed functions:
6925cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6926cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @deftypefn category type name args
6927cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deftypefn}{\deftypefngeneral{}}
6928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6929cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @deftypeop category class type name args
6930cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
6931cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6932cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \deftypeopon {category on}class type name args
6933cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
6934cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6935cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \deftypefngeneral {subind}category type name args
6936cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6937cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
6938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dosubind{fn}{\code{#4}}{#1}%
693905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \doingtypefntrue
6940cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
6941cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6942cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
694305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Typed variables:
6944cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6945cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @deftypevr category type var args
6946cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deftypevr}{\deftypecvgeneral{}}
6947cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6948cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @deftypecv category class type var args
6949cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
6950cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6951cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \deftypecvof {category of}class type var args
6952cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
6953cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6954cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \deftypecvgeneral {subind}category type var args
6955cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6956cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
6957cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dosubind{vr}{\code{#4}}{#1}%
6958cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
6959cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6960cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
696105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Untyped variables:
6962cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6963cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @defvr category var args
6964cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
6965cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6966cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @defcv category class var args
6967cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
6968cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6969cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \defcvof {category of}class var args
6970cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
6971cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
697205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Types:
697305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6974cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @deftp category name args
6975cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deftp}#1 #2 #3\endheader{%
6976cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \doind{tp}{\code{#2}}%
6977cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \defname{#1}{}{#2}\defunargs{#3\unskip}%
6978cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
6979cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6980cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Remaining @defun-like shortcuts:
6981cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defun}{\deffnheader{\putwordDeffunc} }
6982cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defmac}{\deffnheader{\putwordDefmac} }
6983cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defspec}{\deffnheader{\putwordDefspec} }
6984cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
6985cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defvar}{\defvrheader{\putwordDefvar} }
6986cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defopt}{\defvrheader{\putwordDefopt} }
6987cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
6988cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defmethod}{\defopon\putwordMethodon}
6989cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
6990cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
6991cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
6992cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6993cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \defname, which formats the name of the @def (not the args).
6994cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is the category, such as "Function".
6995cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #2 is the return type, if any.
6996cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #3 is the function name.
6997cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
6998cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We are followed by (but not passed) the arguments, if any.
6999cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7000cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\defname#1#2#3{%
700105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \par
7002cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Get the values of \leftskip and \rightskip as they were outside the @def...
7003cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\leftskip by -\defbodyindent
7004cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
700505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Determine if we are typesetting the return type of a typed function
700605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % on a line by itself.
700705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \rettypeownlinefalse
700805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifdoingtypefn  % doing a typed function specifically?
700905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % then check user option for putting return type on its own line:
701005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
701105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \rettypeownlinetrue
701205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi
701305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
701405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
701505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % How we'll format the category name.  Putting it in brackets helps
7016cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % distinguish it from the body text that may end up on the next line
7017cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % just below it.
7018cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#1}%
7019cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
7020cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
702105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Figure out line sizes for the paragraph shape.  We'll always have at
702205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % least two.
702305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \tempnum = 2
702405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
7025cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % The first line needs space for \box0; but if \rightskip is nonzero,
7026cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % we need only space for the part of \box0 which exceeds it:
7027cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
702805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
702905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % If doing a return type on its own line, we'll have another line.
703005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifrettypeownline
703105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\tempnum by 1
703205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\maybeshapeline{0in \hsize}%
703305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
703405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\maybeshapeline{}%
703505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
703605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
7037cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % The continuations:
7038cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
7039cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
704005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % The final paragraph shape:
704105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \parshape \tempnum  0in \dimen0  \maybeshapeline  \defargsindent \dimen2
704205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
704305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Put the category name at the right margin.
7044cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \noindent
7045cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hbox to 0pt{%
7046cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \hfil\box0 \kern-\hsize
7047cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \hsize has to be shortened this way:
7048cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \kern\leftskip
7049cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Intentionally do not respect \rightskip, since we need the space.
7050cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
7051cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
7052cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Allow all lines to be underfull without complaint:
7053cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tolerance=10000 \hbadness=10000
7054cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \exdentamount=\defbodyindent
7055cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
7056cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % defun fonts. We use typewriter by default (used to be bold) because:
7057cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % . we're printing identifiers, they should be in tt in principle.
7058cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % . in languages with many accents, such as Czech or French, it's
7059cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %   common to leave accents off identifiers.  The result looks ok in
7060cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %   tt, but exceedingly strange in rm.
7061cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % . we don't want -- and --- to be treated as ligatures.
7062cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % . this still does not fix the ?` and !` ligatures, but so far no
7063cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %   one has made identifiers using them :).
7064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \df \tt
706505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \def\temp{#2}% text of the return type
706605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifx\temp\empty\else
706705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \tclose{\temp}% typeset the return type
706805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifrettypeownline
706905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        % put return type on its own line; prohibit line break following:
707005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \hfil\vadjust{\nobreak}\break  
707105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \else
707205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \space  % type on same line, so just followed by a space
707305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \fi
707405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi           % no return type
7075cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    #3% output function name
7076cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
7077cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\rm\enskip}% hskip 0.5 em of \tenrm
7078cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
7079cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \boldbrax
7080cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % arguments will be output next, if any.
7081cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7082cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7083cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Print arguments in slanted roman (not ttsl), inconsistently with using
7084cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% tt for the name.  This is because literal text is sometimes needed in
7085cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the argument list (groff manual), and ttsl and tt are not very
7086cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% distinguishable.  Prevent hyphenation at `-' chars.
7087cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7088cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\defunargs#1{%
7089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % use sl by default (not ttsl),
7090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % tt for the names.
7091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \df \sl \hyphenchar\font=0
7092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
7093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % On the other hand, if an argument has two dashes (for instance), we
709405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % want a way to get ttsl.  We used to recommend @var for that, so
709505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % leave the code in, but it's strange for @var to lead to typewriter.
709605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Nowadays we recommend @code, since the difference between a ttsl hyphen
709705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % and a tt hyphen is pretty tiny.  @code also disables ?` !`.
709805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
7099cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #1%
7100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \sl\hyphenchar\font=45
7101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We want ()&[] to print specially on the defun line.
7104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\activeparens{%
7106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\(=\active \catcode`\)=\active
7107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\[=\active \catcode`\]=\active
7108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\&=\active
7109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Make control sequences which act like normal parenthesis chars.
7112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\lparen = ( \let\rparen = )
7113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Be sure that we always have a definition for `(', etc.  For example,
7115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% if the fn name has parens in it, \boldbrax will not be in effect yet,
7116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% so TeX would otherwise complain about undefined control sequence.
7117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
7118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \activeparens
7119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let(=\lparen \global\let)=\rparen
7120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let[=\lbrack \global\let]=\rbrack
7121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\let& = \&
7122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
7124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\magicamp{\let&=\amprm}
7125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\parencount
7128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If we encounter &foo, then turn on ()-hacking afterwards
7130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifampseen
7131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\amprm#1 {\ampseentrue{\bf\&#1 }}
7132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\parenfont{%
7134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifampseen
7135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % At the first level, print parens in roman,
7136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % otherwise use the default font.
7137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum \parencount=1 \rm \fi
7138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
7139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % The \sf parens (in \boldbrax) actually are a little bolder than
7140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % the contained text.  This is especially needed for [ and ] .
7141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \sf
7142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\infirstlevel#1{%
7145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifampseen
7146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifnum\parencount=1
7147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      #1%
7148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
7149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\bfafterword#1 {#1 \bf}
7152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\opnr{%
7154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\advance\parencount by 1
7155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\parenfont(}%
7156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \infirstlevel \bfafterword
7157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\clnr{%
7159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\parenfont)}%
7160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \infirstlevel \sl
7161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\advance\parencount by -1
7162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\brackcount
7165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\lbrb{%
7166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\advance\brackcount by 1
7167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\bf[}%
7168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\rbrb{%
7170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {\bf]}%
7171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\advance\brackcount by -1
7172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\checkparencounts{%
7175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\parencount=0 \else \badparencount \fi
7176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\brackcount=0 \else \badbrackcount \fi
7177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
717805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% these should not use \errmessage; the glibc manual, at least, actually
717905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% has such constructs (when documenting function pointers).
7180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\badparencount{%
718105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \message{Warning: unbalanced parentheses in @def...}%
7182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\parencount=0
7183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\badbrackcount{%
718505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \message{Warning: unbalanced square brackets in @def...}%
7186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\brackcount=0
7187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{macros,}
7191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @macro.
7192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% To do this right we need a feature of e-TeX, \scantokens,
7194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% which we arrange to emulate with a temporary file in ordinary TeX.
719505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ifx\eTeXversion\thisisundefined
7196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \newwrite\macscribble
7197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\scantokens#1{%
7198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \toks0={#1}%
7199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \immediate\openout\macscribble=\jobname.tmp
7200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \immediate\write\macscribble{\the\toks0}%
7201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \immediate\closeout\macscribble
7202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \input \jobname.tmp
7203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
7204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi
7205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
720605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\scanmacro#1{\begingroup
720705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \newlinechar`\^^M
720805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\xeatspaces\eatspaces
720905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
721005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Undo catcode changes of \startcontents and \doprintindex
721105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % When called from @insertcopying or (short)caption, we need active
721205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % backslash to get it printed correctly.  Previously, we had
721305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % \catcode`\\=\other instead.  We'll see whether a problem appears
721405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % with macro expansion.				--kasal, 19aug04
721505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
721605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
721705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % ... and for \example:
721805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \spaceisspace
721905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
722005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % The \empty here causes a following catcode 5 newline to be eaten as
722105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % part of reading whitespace after a control sequence.  It does not
722205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % eat a catcode 13 newline.  There's no good way to handle the two
722305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
722405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % would then have different behavior).  See the Macro Details node in
722505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % the manual for the workaround we recommend for macros and
722605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % line-oriented commands.
722705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % 
722805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \scantokens{#1\empty}%
722905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\endgroup}
7230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\scanexp#1{%
7232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \edef\temp{\noexpand\scanmacro{#1}}%
7233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \temp
7234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\paramno   % Count of parameters
7237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newtoks\macname    % Macro name
7238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifrecursive  % Is it recursive?
7239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% List of all defined macros in the form
7241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%    \definedummyword\macro1\definedummyword\macro2...
7242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Currently is also contains all @aliases; the list can be split
7243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% if there is a need.
7244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\macrolist{}
7245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Add the macro to \macrolist
7247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
7248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\addtomacrolistxxx#1{%
7249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \toks0 = \expandafter{\macrolist\definedummyword#1}%
7250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \xdef\macrolist{\the\toks0}%
7251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Utility routines.
7254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This does \let #1 = #2, with \csnames; that is,
7255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%   \let \csname#1\endcsname = \csname#2\endcsname
7256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (except of course we have to play expansion games).
725705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
7258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\cslet#1#2{%
7259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\let
7260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \csname#1\expandafter\endcsname
7261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \csname#2\endcsname
7262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Trim leading and trailing spaces off a string.
7265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Concepts from aro-bend problem 15 (see CTAN).
7266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\catcode`\@=11
7267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
7268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
7269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
7270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unbrace#1{#1}
7271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\unbrace{\gdef\trim@@@ #1 } #2@{#1}
7272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Trim a single trailing ^^M off a string.
7275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\catcode`\^^M=\other \catcode`\Q=3%
7276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\eatcr #1{\eatcra #1Q^^MQ}%
7277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
7278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\eatcrb#1Q#2Q{#1}%
7279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Macro bodies are absorbed as an argument in a context where
7282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% all characters are catcode 10, 11 or 12, except \ which is active
728305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (as in normal texinfo). It is necessary to change the definition of \
728405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% to recognize macro arguments; this is the job of \mbodybackslash.
728505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
728605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Non-ASCII encodings make 8-bit characters active, so un-activate
728705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% them to avoid their expansion.  Must do this non-globally, to
728805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% confine the change to the current group.
728905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
7290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It's necessary to have hard CRs when the macro is executed. This is
729105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% done by making ^^M (\endlinechar) catcode 12 when reading the macro
7292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% body, and then making it the \newlinechar in \scanmacro.
729305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
729405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\scanctxt{% used as subroutine
7295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\"=\other
7296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\+=\other
7297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\<=\other
7298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\>=\other
7299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\@=\other
7300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^=\other
7301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\_=\other
7302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\|=\other
7303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\~=\other
730405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
7305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
730705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\scanargctxt{% used for copying and captions, not macros.
7308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \scanctxt
7309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\\=\other
7310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^M=\other
7311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
731305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\macrobodyctxt{% used for @macro definitions
7314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \scanctxt
7315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\{=\other
7316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\}=\other
7317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^M=\other
7318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \usembodybackslash
7319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
732105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\macroargctxt{% used when scanning invocations
7322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \scanctxt
732305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\\=0
7324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
732505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% why catcode 0 for \ in the above?  To recognize \\ \{ \} as "escapes"
732605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% for the single characters \ { }.  Thus, we end up with the "commands"
732705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% that would be written @\ @{ @} in a Texinfo document.
732805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
732905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% We already have @{ and @}.  For @\, we define it here, and only for
733005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% this purpose, to produce a typewriter backslash (so, the @\ that we
733105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% define for @math can't be used with @macro calls):
733205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
733305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\\{\normalbackslash}%
733405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
733505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% We would like to do this for \, too, since that is what makeinfo does.
733605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% But it is not possible, because Texinfo already has a command @, for a
733705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% cedilla accent.  Documents must use @comma{} instead.
733805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
733905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \anythingelse will almost certainly be an error of some kind.
734005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \mbodybackslash is the definition of \ in @macro bodies.
7343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% It maps \foo\ => \csname macarg.foo\endcsname => #N
7344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% where N is the macro parameter number.
7345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We define \csname macarg.\endcsname to be \realbackslash, so
7346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \\ in macro replacement text gets you a backslash.
734705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
7348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\catcode`@=0 @catcode`@\=@active
7349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project @gdef@usembodybackslash{@let\=@mbodybackslash}
7350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
7351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\expandafter\def\csname macarg.\endcsname{\realbackslash}
7353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
735405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\margbackslash#1{\char`\#1 }
735505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\macro{\recursivefalse\parsearg\macroxxx}
7357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\rmacro{\recursivetrue\parsearg\macroxxx}
7358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\macroxxx#1{%
736005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \getargs{#1}% now \macname is the macname and \argl the arglist
7361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\argl\empty       % no arguments
736205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \paramno=0\relax
7363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
7364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \expandafter\parsemargdef \argl;%
736505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \if\paramno>256\relax
736605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \ifx\eTeXversion\thisisundefined
736705436638acc7c010349a69c3395f1a57c642dc62Ying Wang         \errhelp = \EMsimple
736805436638acc7c010349a69c3395f1a57c642dc62Ying Wang         \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
736905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \fi
737005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \fi
7371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \if1\csname ismacro.\the\macname\endcsname
7373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \message{Warning: redefining \the\macname}%
7374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
7375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \expandafter\ifx\csname \the\macname\endcsname \relax
7376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \else \errmessage{Macro name \the\macname\space already defined}\fi
7377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \global\cslet{macsave.\the\macname}{\the\macname}%
7378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
7379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \addtomacrolist{\the\macname}%
7380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \begingroup \macrobodyctxt
7382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifrecursive \expandafter\parsermacbody
7383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else \expandafter\parsemacbody
7384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi}
7385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\unmacro{%
7387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \if1\csname ismacro.#1\endcsname
7388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\cslet{#1}{macsave.#1}%
7389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\expandafter\let \csname ismacro.#1\endcsname=0%
7390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Remove the macro name from \macrolist:
7391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \begingroup
7392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \expandafter\let\csname#1\endcsname \relax
7393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \let\definedummyword\unmacrodo
7394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \xdef\macrolist{\macrolist}%
7395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup
7396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
7397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \errmessage{Macro #1 not defined}%
7398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Called by \do from \dounmacro on each macro.  The idea is to omit any
7402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% macro definitions that have been changed to \relax.
7403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\unmacrodo#1{%
7405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx #1\relax
7406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % remove this
7407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
7408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \noexpand\definedummyword \noexpand#1%
7409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This makes use of the obscure feature that if the last token of a
7413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% <parameter list> is #, then the preceding argument is delimited by
7414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% an opening brace, and that opening brace is not consumed.
7415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\getargs#1{\getargsxxx#1{}}
7416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
741705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\getmacname#1 #2\relax{\macname={#1}}
7418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\getmacargs#1{\def\argl{#1}}
7419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
742005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% For macro processing make @ a letter so that we can make Texinfo private macro names.
742105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\edef\texiatcatcode{\the\catcode`\@}
742205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode `@=11\relax
742305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Parse the optional {params} list.  Set up \paramno and \paramlist
742505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% so \defmacro knows what to do.  Define \macarg.BLAH for each BLAH
742605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% in the params list to some hook where the argument si to be expanded.  If
742705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% there are less than 10 arguments that hook is to be replaced by ##N where N
742805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% is the position in that list, that is to say the macro arguments are to be
742905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% defined `a la TeX in the macro body.  
743005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
7431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% That gets used by \mbodybackslash (above).
743205436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
7433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We need to get `macro parameter char #' into several definitions.
743405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% The technique used is stolen from LaTeX: let \hash be something
7435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% unexpandable, insert that wherever you need a #, and then redefine
7436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% it to # just before using the token list produced.
7437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The same technique is used to protect \eatspaces till just before
7439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the macro is used.
744005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
744105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% If there are 10 or more arguments, a different technique is used, where the
744205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% hook remains in the body, and when macro is to be expanded the body is
744305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% processed again to replace the arguments.
744405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
744505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
744605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% argument N value and then \edef  the body (nothing else will expand because of
744705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the catcode regime underwhich the body was input).
744805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
744905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% If you compile with TeX (not eTeX), and you have macros with 10 or more
745005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% arguments, you need that no macro has more than 256 arguments, otherwise an
745105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% error is produced.
745205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\parsemargdef#1;{%
745305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \paramno=0\def\paramlist{}%
745405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\hash\relax
745505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let\xeatspaces\relax
745605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \parsemargdefxxx#1,;,%
745705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % In case that there are 10 or more arguments we parse again the arguments
745805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % list to set new definitions for the \macarg.BLAH macros corresponding to
745905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % each BLAH argument. It was anyhow needed to parse already once this list
746005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % in order to count the arguments, and as macros with at most 9 arguments
746105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % are by far more frequent than macro with 10 or more arguments, defining
746205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % twice the \macarg.BLAH macros does not cost too much processing power.
746305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifnum\paramno<10\relax\else
746405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \paramno0\relax
746505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \parsemmanyargdef@@#1,;,% 10 or more arguments
746605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
746705436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
7468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\parsemargdefxxx#1,{%
7469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \if#1;\let\next=\relax
7470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else \let\next=\parsemargdefxxx
747105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\paramno by 1
7472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
7473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        {\xeatspaces{\hash\the\paramno}}%
7474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \edef\paramlist{\paramlist\hash\the\paramno,}%
7475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi\next}
7476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
747705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\parsemmanyargdef@@#1,{%
747805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \if#1;\let\next=\relax
747905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else 
748005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\next=\parsemmanyargdef@@
748105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \edef\tempb{\eatspaces{#1}}%
748205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\def\expandafter\tempa
748305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \expandafter{\csname macarg.\tempb\endcsname}%
748405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Note that we need some extra \noexpand\noexpand, this is because we
748505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % don't want \the  to be expanded in the \parsermacbody  as it uses an
748605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % \xdef .
748705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\edef\tempa
748805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
748905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\paramno by 1\relax
749005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\next}
749105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% These two commands read recursive and nonrecursive macro bodies.
7493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (They're different since rec and nonrec macros end differently.)
749405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
7495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
749605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode `\@\texiatcatcode
7497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\long\def\parsemacbody#1@end macro%
7498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
7499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\long\def\parsermacbody#1@end rmacro%
7500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
750105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode `\@=11\relax
750205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
750305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\endargs@\relax
750405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\let\nil@\relax
750505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\nilm@{\nil@}%
750605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\long\def\nillm@{\nil@}%
750705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
750805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This macro is expanded during the Texinfo macro expansion, not during its
750905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% definition.  It gets all the arguments values and assigns them to macros
751005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% macarg.ARGNAME
751105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
751205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #1 is the macro name
751305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #2 is the list of argument names
751405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #3 is the list of argument values
751505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\getargvals@#1#2#3{%
751605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\macargdeflist@{}%
751705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
751805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\paramlist{#2,\nil@}%
751905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\macroname{#1}%
752005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \begingroup
752105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \macroargctxt
752205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\argvaluelist{#3,\nil@}%
752305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\@tempa{#3}%
752405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\@tempa\empty
752505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \setemptyargvalues@
752605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
752705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \getargvals@@
752805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
752905436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
753005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
753105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
753205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\getargvals@@{%
753305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\paramlist\nilm@
753405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % Some sanity check needed here that \argvaluelist is also empty.
753505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifx\argvaluelist\nillm@
753605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \else
753705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \errhelp = \EMsimple
753805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \errmessage{Too many arguments in macro `\macroname'!}%
753905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \fi
754005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \let\next\macargexpandinbody@
754105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
754205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifx\argvaluelist\nillm@
754305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       % No more arguments values passed to macro.  Set remaining named-arg
754405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       % macros to empty.
754505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \let\next\setemptyargvalues@
754605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else
754705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % pop current arg name into \@tempb
754805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
754905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \expandafter\@tempa\expandafter{\paramlist}%
755005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       % pop current argument value into \@tempc
755105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
755205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \expandafter\@tempa\expandafter{\argvaluelist}%
755305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       % Here \@tempb is the current arg name and \@tempc is the current arg value.
755405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       % First place the new argument macro definition into \@tempd
755505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \expandafter\macname\expandafter{\@tempc}%
755605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \expandafter\let\csname macarg.\@tempb\endcsname\relax
755705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \expandafter\def\expandafter\@tempe\expandafter{%
755805436638acc7c010349a69c3395f1a57c642dc62Ying Wang         \csname macarg.\@tempb\endcsname}%
755905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \edef\@tempd{\long\def\@tempe{\the\macname}}%
756005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \push@\@tempd\macargdeflist@
756105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \let\next\getargvals@@
756205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi
756305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
756405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \next
756505436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
756605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
756705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\push@#1#2{%
756805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\expandafter\expandafter\def
756905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\expandafter\expandafter#2%
757005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\expandafter\expandafter{%
757105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter#1#2}%
757205436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
757305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
757405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Replace arguments by their values in the macro body, and place the result
757505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% in macro \@tempa
757605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\macvalstoargs@{%
757705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %  To do this we use the property that token registers that are \the'ed
757805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % within an \edef  expand only once. So we are going to place all argument
757905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % values into respective token registers.
758005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
758105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % First we save the token context, and initialize argument numbering.
758205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \begingroup
758305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \paramno0\relax
758405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Then, for each argument number #N, we place the corresponding argument
758505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % value into a new token list register \toks#N
758605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\putargsintokens@\saveparamlist@,;,%
758705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Then, we expand the body so that argument are replaced by their
758805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % values. The trick for values not to be expanded themselves is that they
758905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % are within tokens and that tokens expand only once in an \edef .
759005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \edef\@tempc{\csname mac.\macroname .body\endcsname}%
759105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Now we restore the token stack pointer to free the token list registers
759205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % which we have used, but we make sure that expanded body is saved after
759305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % group.
759405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter
759505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \endgroup
759605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
759705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
759805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
759905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\macargexpandinbody@{% 
760005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %% Define the named-macro outside of this group and then close this group. 
760105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter
760205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \endgroup
760305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \macargdeflist@
760405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % First the replace in body the macro arguments by their values, the result
760505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % is in \@tempa .
760605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \macvalstoargs@
760705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Then we point at the \norecurse or \gobble (for recursive) macro value
760805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % with \@tempb .
760905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
761005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Depending on whether it is recursive or not, we need some tailing
761105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % \egroup .
761205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\@tempb\gobble
761305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \let\@tempc\relax
761405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
761505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \let\@tempc\egroup
761605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
761705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % And now we do the real job:
761805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
761905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \@tempd
762005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
762105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
762205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\putargsintokens@#1,{%
762305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \if#1;\let\next\relax
762405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
762505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\next\putargsintokens@
762605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % First we allocate the new token list register, and give it a temporary
762705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % alias \@tempb .
762805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \toksdef\@tempb\the\paramno
762905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Then we place the argument value into that token list register.
763005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
763105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\@tempb\expandafter{\@tempa}%
763205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\paramno by 1\relax
763305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
763405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \next
763505436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
763605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
763705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Save the token stack pointer into macro #1
763805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}}
763905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Restore the token stack pointer from number in macro #1
764005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax}
764105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% newtoks that can be used non \outer .
764205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi}
764305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
764405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Tailing missing arguments are set to empty
764505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\setemptyargvalues@{%
764605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\paramlist\nilm@
764705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\next\macargexpandinbody@
764805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
764905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\setemptyargvaluesparser@\paramlist\endargs@
765005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \let\next\setemptyargvalues@
765105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
765205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \next
765305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
765405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
765505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\setemptyargvaluesparser@#1,#2\endargs@{%
765605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\def\expandafter\@tempa\expandafter{%
765705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\def\csname macarg.#1\endcsname{}}%
765805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \push@\@tempa\macargdeflist@
765905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\paramlist{#2}%
766005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
766105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
766205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #1 is the element target macro
766305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #2 is the list macro
766405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #3,#4\endargs@ is the list value
766505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\pop@#1#2#3,#4\endargs@{%
766605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \def#1{#3}%
766705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \def#2{#4}%
766805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
766905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\long\def\longpop@#1#2#3,#4\endargs@{%
767005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \long\def#1{#3}%
767105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \long\def#2{#4}%
767205436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
7673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
767405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This defines a Texinfo @macro. There are eight cases: recursive and
767505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% nonrecursive macros of zero, one, up to nine, and many arguments.
7676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Much magic with \expandafter here.
7677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \xdef is used so that macro definitions will survive the file
7678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% they're defined in; @include reads the file inside a group.
767905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
7680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\defmacro{%
7681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\hash=##% convert placeholders to macro parameter chars
7682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifrecursive
7683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifcase\paramno
7684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % 0
7685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
7686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \noexpand\scanmacro{\temp}}%
7687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \or % 1
7688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
7689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \bgroup\noexpand\macroargctxt
7690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \noexpand\braceorline
7691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
7692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
7693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \egroup\noexpand\scanmacro{\temp}}%
769405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else
769505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifnum\paramno<10\relax % at most 9
769605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\xdef\csname\the\macname\endcsname{%
769705436638acc7c010349a69c3395f1a57c642dc62Ying Wang           \bgroup\noexpand\macroargctxt
769805436638acc7c010349a69c3395f1a57c642dc62Ying Wang           \noexpand\csname\the\macname xx\endcsname}%
769905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
770005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
770105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\expandafter
770205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\xdef
770305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\expandafter
770405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \csname\the\macname xxx\endcsname
770505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            \paramlist{\egroup\noexpand\scanmacro{\temp}}%
770605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \else % 10 or more
770705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\xdef\csname\the\macname\endcsname{%
770805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \noexpand\getargvals@{\the\macname}{\argl}%
770905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }%    
771005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
771105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
771205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \fi
7713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
7714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
7715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifcase\paramno
7716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % 0
7717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
7718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \noexpand\norecurse{\the\macname}%
7719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \noexpand\scanmacro{\temp}\egroup}%
7720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \or % 1
7721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \expandafter\xdef\csname\the\macname\endcsname{%
7722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \bgroup\noexpand\macroargctxt
7723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \noexpand\braceorline
7724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
7725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
7726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \egroup
7727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \noexpand\norecurse{\the\macname}%
7728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \noexpand\scanmacro{\temp}\egroup}%
772905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else % at most 9
773005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifnum\paramno<10\relax
773105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\xdef\csname\the\macname\endcsname{%
773205436638acc7c010349a69c3395f1a57c642dc62Ying Wang           \bgroup\noexpand\macroargctxt
773305436638acc7c010349a69c3395f1a57c642dc62Ying Wang           \expandafter\noexpand\csname\the\macname xx\endcsname}%
773405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
773505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
773605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\expandafter
773705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\xdef
773805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\expandafter
773905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \csname\the\macname xxx\endcsname
774005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \paramlist{%
774105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            \egroup
774205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            \noexpand\norecurse{\the\macname}%
774305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            \noexpand\scanmacro{\temp}\egroup}%
774405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \else % 10 or more:
774505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \expandafter\xdef\csname\the\macname\endcsname{%
774605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          \noexpand\getargvals@{\the\macname}{\argl}%
774705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }%
774805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
774905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
775005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \fi
7751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
7752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi}
7753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
775405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode `\@\texiatcatcode\relax
775505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
7757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \braceorline decides whether the next nonwhitespace character is a
7759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% {.  If so it reads up to the closing }, if not, it reads the whole
7760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% line.  Whatever was read is then fed to the next control sequence
776105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% as an argument (by \parsebrace or \parsearg).
776205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
776305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
7764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\braceorlinexxx{%
7765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\nchar\bgroup\else
7766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\parsearg
776705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi \macnamexxx}
7768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @alias.
7771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We need some trickery to remove the optional spaces around the equal
777205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% sign.  Make them active and then expand them all to nothing.
777305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
7774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\alias{\parseargusing\obeyspaces\aliasxxx}
7775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\aliasxxx #1{\aliasyyy#1\relax}
7776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\aliasyyy #1=#2\relax{%
7777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
7778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\let\obeyedspace=\empty
7779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \addtomacrolist{#1}%
7780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
7781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
7782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \next
7783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{cross references,}
7787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newwrite\auxfile
7789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifhavexrefs    % True if xref values are known.
7790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
7791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @inforef is relatively simple.
7793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\inforef #1{\inforefzzz #1,,,,**}
779405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\inforefzzz #1,#2,#3,#4**{%
779505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
7796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node \samp{\ignorespaces#1{}}}
7797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @node's only job in TeX is to define \lastnode, which is used in
7799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% cross-references.  The @node line might or might not have commas, and
7800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% might or might not have spaces before the first comma, like:
7801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @node foo , bar , ...
7802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We don't want such trailing spaces in the node name.
7803cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7804cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
7805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7806cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% also remove a trailing comma, in case of something like this:
7807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @node Help-Cross,  ,  , Cross-refs
7808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
7809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
7810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7811cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\nwnode=\node
7812cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\lastnode=\empty
7813cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7814cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Write a cross-reference definition for the current node.  #1 is the
7815cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% type (Ynumbered, Yappendix, Ynothing).
7816cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7817cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\donoderef#1{%
7818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\lastnode\empty\else
7819cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \setref{\lastnode}{#1}%
7820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\let\lastnode=\empty
7821cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7822cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7823cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7824cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @anchor{NAME} -- define xref target at arbitrary point.
7825cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7826cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount\savesfregister
7827cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7828cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
7829cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
7830cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
7831cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7832cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
7833cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% anchor), which consists of three parts:
783405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 1) NAME-title - the current sectioning name taken from \lastsection,
7835cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%                 or the anchor name.
7836cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% 2) NAME-snt   - section number and type, passed as the SNT arg, or
7837cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%                 empty for anchors.
7838cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% 3) NAME-pg    - the page number.
7839cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7840cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This is called from \donoderef, \anchor, and \dofloat.  In the case of
7841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% floats, there is an additional part, which is not written here:
7842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% 4) NAME-lof   - the text as it should appear in a @listoffloats.
7843cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7844cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setref#1#2{%
7845cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \pdfmkdest{#1}%
7846cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \iflinks
7847cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {%
7848cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \atdummies  % preserve commands, but don't expand them
7849cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \edef\writexrdef##1##2{%
7850cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
7851cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  ##1}{##2}}% these are parameters of \writexrdef
7852cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }%
785305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \toks0 = \expandafter{\lastsection}%
7854cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \immediate \writexrdef{title}{\the\toks0 }%
7855cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
785605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
7857cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }%
7858cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7859cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
7860cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
786105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @xrefautosectiontitle on|off says whether @section(ing) names are used
786205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% automatically in xrefs, if the third arg is not explicitly specified.
786305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This was provided as a "secret" @set xref-automatic-section-title
786405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% variable, now it's official.
786505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
786605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\xrefautomaticsectiontitle{%
786705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\temp{#1}%
786805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\temp\onword
786905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\csname SETxref-automatic-section-title\endcsname
787005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      = \empty
787105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else\ifx\temp\offword
787205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\let\csname SETxref-automatic-section-title\endcsname
787305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      = \relax
787405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
787505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errhelp = \EMsimple
787605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
787705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                must be on|off}%
787805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi
787905436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
788005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
788105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
7882cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
7883cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the node name, #2 the name of the Info cross-reference, #3 the printed
7884cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% node name, #4 the name of the Info file, #5 the name of the printed
7885cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% manual.  All but the node name can be omitted.
7886cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
7887cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
7888cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
7889cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ref#1{\xrefX[#1,,,,,,,]}
789005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
789105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newbox\toprefbox
789205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newbox\printedrefnamebox
789305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newbox\infofilenamebox
789405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newbox\printedmanualbox
789505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
7896cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
7897cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \unsepspaces
789805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
789905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Get args without leading/trailing spaces.
7900cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\printedrefname{\ignorespaces #3}%
790105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
790205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
790305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\infofilename{\ignorespaces #4}%
790405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
790505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
790605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\printedmanual{\ignorespaces #5}%
790705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setbox\printedmanualbox  = \hbox{\printedmanual\unskip}%
790805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
790905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % If the printed reference name (arg #3) was not explicitly given in
791005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % the @xref, figure out what we want to use.
791105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifdim \wd\printedrefnamebox = 0pt
7912cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % No printed node name was explicitly given.
791305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
791405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % Not auto section-title: use node name inside the square brackets.
7915cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \def\printedrefname{\ignorespaces #1}%
7916cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
791705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % Auto section-title: use chapter/section title inside
791805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % the square brackets if we have it.
791905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \ifdim \wd\printedmanualbox > 0pt
792005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        % It is in another manual, so we don't have it; use node name.
7921cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \def\printedrefname{\ignorespaces #1}%
7922cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \else
7923cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \ifhavexrefs
792405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          % We (should) know the real title if we have the xref values.
7925cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \def\printedrefname{\refx{#1-title}{}}%
7926cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \else
7927cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          % Otherwise just copy the Info node name.
7928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \def\printedrefname{\ignorespaces #1}%
7929cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \fi%
7930cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
7931cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
7932cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7933cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
7934cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Make link in pdf output.
7935cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifpdf
793605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {\indexnofonts
793705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \turnoffactive
793805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \makevalueexpandable
793905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     % This expands tokens, so do it after making catcode changes, so _
794005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     % etc. don't get their TeX definitions.  This ignores all spaces in
794105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     % #4, including (wrongly) those in the middle of the filename.
794205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \getfilename{#4}%
794305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     %
794405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     % This (wrongly) does not take account of leading or trailing
794505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     % spaces in #1, which should be ignored.
794605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \edef\pdfxrefdest{#1}%
794705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \ifx\pdfxrefdest\empty
794805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \def\pdfxrefdest{Top}% no empty targets
794905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \else
795005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \txiescapepdf\pdfxrefdest  % escape PDF special chars
795105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \fi
7952cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     %
795305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \leavevmode
795405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \startlink attr{/Border [0 0 0]}%
7955cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \ifnum\filenamelength>0
795605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       goto file{\the\filename.pdf} name{\pdfxrefdest}%
7957cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \else
795805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       goto name{\pdfmkpgn{\pdfxrefdest}}%
7959cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \fi
7960cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }%
796105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \setcolor{\linkcolor}%
7962cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
7963cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
7964cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Float references are printed completely differently: "Figure 1.2"
7965cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % instead of "[somenode], p.3".  We distinguish them by the
7966cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % LABEL-title being set to a magic string.
7967cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
7968cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Have to otherify everything special to allow the \csname to
7969cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % include an _ in the xref name, etc.
7970cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \indexnofonts
7971cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \turnoffactive
7972cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
7973cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \csname XR#1-title\endcsname
7974cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
7975cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \iffloat\Xthisreftitle
7976cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If the user specified the print name (third arg) to the ref,
7977cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % print it instead of our usual "Figure 1.2".
797805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifdim\wd\printedrefnamebox = 0pt
797905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \refx{#1-snt}{}%
7980cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
7981cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \printedrefname
7982cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
7983cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
798405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % If the user also gave the printed manual name (fifth arg), append
7985cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % "in MANUALNAME".
798605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifdim \wd\printedmanualbox > 0pt
7987cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \space \putwordin{} \cite{\printedmanual}%
7988cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
7989cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
7990cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % node/anchor (non-float) references.
799105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % 
799205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % If we use \unhbox to print the node names, TeX does not insert
799305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % empty discretionaries after hyphens, which means that it will not
799405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % find a line break at a hyphen in a node names.  Since some manuals
799505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % are best written with fairly long node names, containing hyphens,
799605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % this is a loss.  Therefore, we give the text of the node name
799705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % again, so it is as if TeX is seeing it for the first time.
799805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % 
799905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifdim \wd\printedmanualbox > 0pt
800005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % Cross-manual reference with a printed manual name.
800105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % 
800205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \crossmanualxref{\cite{\printedmanual\unskip}}%
800305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %
800405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else\ifdim \wd\infofilenamebox > 0pt
800505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % Cross-manual reference with only an info filename (arg 4), no
800605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % printed manual name (arg 5).  This is essentially the same as
800705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % the case above; we output the filename, since we have nothing else.
800805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % 
800905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \crossmanualxref{\code{\infofilename\unskip}}%
8010cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8011cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
801205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % Reference within this manual.
801305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      %
8014cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % _ (for example) has to be the character _ for the purposes of the
8015cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % control sequence corresponding to the node, but it has to expand
8016cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % into the usual \leavevmode...\vrule stuff for purposes of
8017cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % printing. So we \turnoffactive for the \refx-snt, back on for the
8018cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % printing, back off for the \refx-pg.
8019cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {\turnoffactive
8020cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       % Only output a following space if the -snt ref is nonempty; for
8021cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       % @unnumbered and @anchor, it won't be.
8022cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
8023cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
8024cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }%
802505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      % output the `[mynode]' via the macro below so it can be overridden.
8026cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \xrefprintnodename\printedrefname
8027cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
8028cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % But we always want a comma and a space:
8029cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ,\space
8030cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
8031cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % output the `page 3'.
8032cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
803305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi\fi
8034cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8035cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \endlink
8036cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup}
8037cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
803805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Output a cross-manual xref to #1.  Used just above (twice).
803905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
804005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Only include the text "Section ``foo'' in" if the foo is neither
804105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
804205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% "see The Foo Manual", the idea being to refer to the whole manual.
804305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
804405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% But, this being TeX, we can't easily compare our node name against the
804505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% string "Top" while ignoring the possible spaces before and after in
804605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the input.  By adding the arbitrary 7sp below, we make it much less
804705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% likely that a real node name would have the same width as "Top" (e.g.,
804805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% in a monospaced font).  Hopefully it will never happen in practice.
804905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
805005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% For the same basic reason, we retypeset the "Top" at every
805105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% reference, since the current font is indeterminate.
805205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% 
805305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\crossmanualxref#1{%
805405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setbox\toprefbox = \hbox{Top\kern7sp}%
805505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
805605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifdim \wd2 > 7sp  % nonempty?
805705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifdim \wd2 = \wd\toprefbox \else  % same as Top?
805805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \putwordSection{} ``\printedrefname'' \putwordin{}\space
805905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi
806005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
806105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  #1%
806205436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
806305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This macro is called from \xrefX for the `[nodename]' part of xref
8065cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% output.  It's a separate macro only so it can be changed more easily,
8066cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% since square brackets don't work well in some documents.  Particularly
8067cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% one that Bob is working on :).
8068cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8069cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\xrefprintnodename#1{[#1]}
8070cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8071cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Things referred to by \setref.
8072cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8073cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Ynothing{}
8074cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Yomitfromtoc{}
8075cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Ynumbered{%
8076cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\secno=0
8077cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \putwordChapter@tie \the\chapno
8078cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else \ifnum\subsecno=0
8079cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \putwordSection@tie \the\chapno.\the\secno
8080cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else \ifnum\subsubsecno=0
8081cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
8082cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
8083cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
8084cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi\fi\fi
8085cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8086cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Yappendix{%
8087cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifnum\secno=0
8088cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \putwordAppendix@tie @char\the\appendixno{}%
8089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else \ifnum\subsecno=0
8090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     \putwordSection@tie @char\the\appendixno.\the\secno
8091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else \ifnum\subsubsecno=0
8092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
8093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
8094cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \putwordSection@tie
8095cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
8096cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi\fi\fi
8097cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8098cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8099cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
8100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If its value is nonempty, SUFFIX is output afterward.
8101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\refx#1#2{%
8103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
8104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \indexnofonts
8105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \otherbackslash
8106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\global\expandafter\let\expandafter\thisrefX
8107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \csname XR#1\endcsname
8108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
8109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\thisrefX\relax
8110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If not defined, say something at least.
8111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \angleleft un\-de\-fined\angleright
8112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \iflinks
8113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifhavexrefs
811405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {\toks0 = {#1}% avoid expansion of possibly-complex value
811505436638acc7c010349a69c3395f1a57c642dc62Ying Wang         \message{\linenumber Undefined cross reference `\the\toks0'.}}%
8116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \else
8117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \ifwarnedxrefs\else
8118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \global\warnedxrefstrue
8119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          \message{Cross reference values unknown; you must run TeX again.}%
8120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \fi
8121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
8122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
8124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % It's defined, so just use it.
8125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \thisrefX
8126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #2% Output the suffix in any case.
8128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This is the macro invoked by entries in the aux file.  Usually it's
8131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% just a \def (we prepend XR to the control sequence name to avoid
8132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% collisions).  But if this is a float type, we have more work to do.
8133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\xrdef#1#2{%
813505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {% The node name might contain 8-bit characters, which in our current
813605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   % implementation are changed to commands like @'e.  Don't let these
813705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   % mess up the control sequence name.
813805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \indexnofonts
813905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \turnoffactive
814005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \xdef\safexrefname{#1}%
814105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }%
814205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
814305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
8144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Was that xref control sequence that we just defined for a float?
814605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\iffloat\csname XR\safexrefname\endcsname
8147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % it was a float, and we have the (safe) float type in \iffloattype.
8148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\let\expandafter\floatlist
8149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \csname floatlist\iffloattype\endcsname
8150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Is this the first time we've seen this float type?
8152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \expandafter\ifx\floatlist\relax
8153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \toks0 = {\do}% yes, so just \do
8154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
8155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % had it before, so preserve previous elements in list.
8156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \toks0 = \expandafter{\floatlist\do}%
8157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Remember this xref in the control sequence \floatlistFLOATTYPE,
8160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % for later use in \listoffloats.
816105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
816205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      {\safexrefname}}%
8163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Read the last existing aux file, if any.  No error if none exists.
8167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\tryauxfile{%
8169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \openin 1 \jobname.aux
8170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifeof 1 \else
8171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \readdatafile{aux}%
8172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \global\havexrefstrue
8173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \closein 1
8175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setupdatafile{%
8178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^@=\other
8179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^A=\other
8180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^B=\other
8181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^C=\other
8182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^D=\other
8183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^E=\other
8184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^F=\other
8185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^G=\other
8186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^H=\other
8187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^K=\other
8188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^L=\other
8189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^N=\other
8190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^P=\other
8191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^Q=\other
8192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^R=\other
8193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^S=\other
8194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^T=\other
8195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^U=\other
8196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^V=\other
8197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^W=\other
8198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^X=\other
8199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^Z=\other
8200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^[=\other
8201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^\=\other
8202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^]=\other
8203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^^=\other
8204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^_=\other
8205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
8206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
8207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % supported in the main text, it doesn't seem desirable.  Furthermore,
8208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % that is not enough: for node names that actually contain a ^
8209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % character, we would end up writing a line like this: 'xrdef {'hat
8210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
8211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % argument, and \hat is not an expandable control sequence.  It could
8212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % all be worked out, but why?  Either we support ^^ or we don't.
8213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % The other change necessary for this was to define \auxhat:
8215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
8216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % and then to call \auxhat in \setq.
8217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^=\other
8219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Special characters.  Should be turned off anyway, but...
8221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\~=\other
8222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\[=\other
8223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\]=\other
8224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\"=\other
8225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\_=\other
8226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\|=\other
8227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\<=\other
8228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\>=\other
8229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\$=\other
8230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\#=\other
8231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\&=\other
8232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\%=\other
8233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
8234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % This is to support \ in node names and titles, since the \
8236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % characters end up in a \csname.  It's easier than
8237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % leaving it active and making its active definition an actual \
8238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % character.  What I don't understand is why it works in the *value*
8239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % of the xrdef.  Seems like it should be a catcode12 \, and that
8240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % should not typeset properly.  But it works, so I'm moving on for
8241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % now.  --karl, 15jan04.
8242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\\=\other
8243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Make the characters 128-255 be printing characters.
8245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
8246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \count1=128
8247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\loop{%
8248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \catcode\count1=\other
8249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \advance\count1 by 1
8250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifnum \count1<256 \loop \fi
8251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }%
8252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
8253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % @ is our escape character in .aux files, and we need braces.
8255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\{=1
8256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\}=2
8257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\@=0
8258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\readdatafile#1{%
8261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\begingroup
8262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setupdatafile
8263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \input\jobname.#1
8264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup}
8265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
826605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{insertions,}
8268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% including footnotes.
8269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newcount \footnoteno
8271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The trailing space in the following definition for supereject is
8273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% vital for proper filling; pages come out unaligned when you do a
8274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% pagealignmacro call if that space before the closing brace is
8275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% removed. (Generally, numeric constants should always be followed by a
8276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% space to prevent strange expansion errors.)
8277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\supereject{\par\penalty -20000\footnoteno =0 }
8278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
827905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @footnotestyle is meaningful for Info output only.
8280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\footnotestyle=\comment
8281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\catcode `\@=11
8283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Auto-number footnotes.  Otherwise like plain.
8285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\footnote{%
8286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\indent=\ptexindent
8287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\noindent=\ptexnoindent
8288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \global\advance\footnoteno by \@ne
8289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \edef\thisfootno{$^{\the\footnoteno}$}%
8290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % In case the footnote comes at the end of a sentence, preserve the
8292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % extra spacing after we do the footnote number.
8293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\@sf\empty
8294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
8295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Remove inadvertent blank space before typesetting the footnote number.
8297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \unskip
8298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \thisfootno\@sf
8299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dofootnote
8300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}%
8301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Don't bother with the trickery in plain.tex to not require the
8303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% footnote text as a parameter.  Our footnotes don't need to be so general.
8304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Oh yes, they do; otherwise, @ifset (and anything else that uses
8306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \parseargline) fails inside footnotes because the tokens are fixed when
8307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the footnote is read.  --karl, 16nov96.
8308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\gdef\dofootnote{%
8310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \insert\footins\bgroup
8311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We want to typeset this text as a normal paragraph, even if the
8312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % footnote reference occurs in (for example) a display environment.
8313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % So reset some parameters.
8314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hsize=\pagewidth
8315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \interlinepenalty\interfootnotelinepenalty
8316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \splittopskip\ht\strutbox % top baseline for broken footnotes
8317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \splitmaxdepth\dp\strutbox
8318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \floatingpenalty\@MM
8319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \leftskip\z@skip
8320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \rightskip\z@skip
8321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \spaceskip\z@skip
8322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \xspaceskip\z@skip
8323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parindent\defaultparindent
8324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \smallfonts \rm
8326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Because we use hanging indentation in footnotes, a @noindent appears
8328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % to exdent this text, so make it be a no-op.  makeinfo does not use
8329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % hanging indentation so @noindent can still be needed within footnote
8330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % text after an @example or the like (not that this is good style).
8331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\noindent = \relax
8332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Hang the footnote text off the number.  Use \everypar in case the
8334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % footnote extends for more than one paragraph.
8335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \everypar = {\hang}%
8336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \textindent{\thisfootno}%
8337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Don't crash into the line above the footnote text.  Since this
8339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % expands into a box, it must come within the paragraph, lest it
8340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % provide a place where TeX can split the footnote.
8341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \footstrut
834205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
834305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Invoke rest of plain TeX footnote routine.
8344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \futurelet\next\fo@t
8345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}%end \catcode `\@=11
8347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% In case a @footnote appears in a vbox, save the footnote text and create
8349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% the real \insert just after the vbox finished.  Otherwise, the insertion
8350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% would be lost.
835105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Similarly, if a @footnote appears inside an alignment, save the footnote
8352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% text to a box and make the \insert when a row of the table is finished.
8353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% And the same can be done for other insert classes.  --kasal, 16nov03.
8354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Replace the \insert primitive by a cheating macro.
8356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Deeper inside, just make sure that the saved insertions are not spilled
8357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% out prematurely.
8358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\startsavinginserts{%
8360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx \insert\ptexinsert
8361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\insert\saveinsert
8362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
8363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\checkinserts\relax
8364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This \insert replacement works for both \insert\footins{foo} and
8368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
8369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\saveinsert#1{%
8371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
8372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \afterassignment\next
8373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % swallow the left brace
8374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\temp =
8375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
8377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
8378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
8380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\placesaveins#1{%
8382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
8383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {\box#1}%
8384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% eat @SAVE -- beware, all of them have catcode \other:
8387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
8388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
8389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \gdef\gobblesave @SAVE{}
8390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% initialization:
8393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\newsaveins #1{%
8394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
8395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \next
8396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\newsaveinsX #1{%
8398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \csname newbox\endcsname #1%
8399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
8400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \checksaveins #1}%
8401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% initialize:
8404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\checkinserts\empty
8405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newsaveins\footins
8406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newsaveins\margin
8407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @image.  We use the macros from epsf.tex to support this.
8410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If epsf.tex is not installed and @image is used, we complain.
8411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Check for and read epsf.tex up front.  If we read it only at @image
8413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% time, we might be inside a group, and then its definitions would get
8414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% undone and the next image would fail.
8415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\openin 1 = epsf.tex
8416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\ifeof 1 \else
8417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Do not bother showing banner with epsf.tex v2.7k (available in
8418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % doc/epsf.tex and on ctan).
8419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\epsfannounce{\toks0 = }%
8420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \input epsf.tex
8421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\fi
8422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\closein 1
8423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We will only complain once about lack of epsf.tex.
8425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifwarnednoepsf
8426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newhelp\noepsfhelp{epsf.tex must be installed for images to
8427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  work.  It is also included in the Texinfo distribution, or you can get
8428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  it from ftp://tug.org/tex/epsf.tex.}
8429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\image#1{%
843105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\epsfbox\thisisundefined
8432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifwarnednoepsf \else
8433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \errhelp = \noepsfhelp
8434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \errmessage{epsf.tex not found, images will be ignored}%
8435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \global\warnednoepsftrue
8436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
8438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \imagexxx #1,,,,,\finish
8439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Arguments to @image:
8443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is (mandatory) image filename; we tack on .eps extension.
8444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #2 is (optional) width, #3 is (optional) height.
8445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #4 is (ignored optional) html alt text.
8446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #5 is (ignored optional) extension.
844705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% #6 is just the usual extra ignored arg for parsing stuff.
8448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newif\ifimagevmode
8449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
8450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \catcode`\^^M = 5     % in case we're inside an example
8451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \normalturnoffactive  % allow _ et al. in names
8452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % If the image is by itself, center it.
8453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifvmode
8454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \imagevmodetrue
845505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \ifx\centersub\centerV
845605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % for @center @image, we need a vbox so we can have our vertical space
845705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \imagevmodetrue
845805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \vbox\bgroup % vbox has better behavior than vtop herev
845905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi\fi
846005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
846105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifimagevmode
846205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \nobreak\medskip
8463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Usually we'll have text after the image which will insert
8464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \parskip glue, so insert it here too to equalize the space
8465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % above and below.
8466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \nobreak\vskip\parskip
8467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \nobreak
8468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
847005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Leave vertical mode so that indentation from an enclosing
847105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %  environment such as @quotation is respected.
847205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % However, if we're at the top level, we don't want the
847305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %  normal paragraph indentation.
847405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % On the other hand, if we are in the case of @center @image, we don't
847505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %  want to start a paragraph, which will create a hsize-width box and
847605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %  eradicate the centering.
847705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\centersub\centerV\else \noindent \fi
847805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
8479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Output the image.
8480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifpdf
8481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \dopdfimage{#1}{#2}{#3}%
8482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
8483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \epsfbox itself resets \epsf?size at each figure.
8484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
8485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
8486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \epsfbox{#1.eps}%
8487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
848905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifimagevmode
849005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \medskip  % space after a standalone image
849105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi  
849205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx\centersub\centerV \egroup \fi
8493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\endgroup}
8494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
8497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% etc.  We don't actually implement floating yet, we always include the
8498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% float "here".  But it seemed the best name for the future.
8499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
8501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% There may be a space before second and/or third parameter; delete it.
8503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\eatcommaspace#1, {#1,}
8504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is the optional FLOATTYPE, the text label for this float, typically
8506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
8507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% this float will not be numbered and cannot be referred to.
8508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #2 is the optional xref label.  Also must be present for the float to
8510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% be referable.
8511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #3 is the optional positioning argument; for now, it is ignored.  It
8513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% will somehow specify the positions allowed to float to (here, top, bottom).
8514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8515cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We keep a separate counter for each FLOATTYPE, which we reset at each
8516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% chapter-level command.
8517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\resetallfloatnos=\empty
8518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\dofloat#1,#2,#3,#4\finish{%
8520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\thiscaption=\empty
8521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\thisshortcaption=\empty
8522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % don't lose footnotes inside @float.
8524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % BEWARE: when the floats start float, we have to issue warning whenever an
8526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % insert appears inside a float which could possibly float. --kasal, 26may04
8527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \startsavinginserts
8529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % We can't be used inside a paragraph.
8531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \par
8532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vtop\bgroup
8534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\floattype{#1}%
8535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\floatlabel{#2}%
8536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\floatloc{#3}% we do nothing with this yet.
8537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\floattype\empty
8539cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \let\safefloattype=\empty
8540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
8541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {%
8542cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % the floattype might have accents or other special characters,
8543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % but we need to use it in a control sequence name.
8544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \indexnofonts
8545cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \turnoffactive
8546cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \xdef\safefloattype{\floattype}%
8547cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }%
8548cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If label is given but no type, we handle that as the empty type.
8551cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\floatlabel\empty \else
8552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % We want each FLOATTYPE to be numbered separately (Figure 1,
8553cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Table 1, Figure 2, ...).  (And if no label, no number.)
8554cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
8555cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
8556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \global\advance\floatno by 1
8557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
8558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {%
855905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        % This magic value for \lastsection is output by \setref as the
8560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % XREFLABEL-title value.  \xrefX uses it to distinguish float
8561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % labels (which have a completely different output format) from
8562cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % node and anchor labels.  And \xrdef uses it to construct the
8563cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % lists of floats.
8564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        %
856505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \edef\lastsection{\floatmagic=\safefloattype}%
8566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \setref{\floatlabel}{Yfloat}%
8567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }%
8568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % start with \parskip glue, I guess.
8571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \vskip\parskip
8572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Don't suppress indentation if a float happens to start a section.
8574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \restorefirstparagraphindent
8575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% we have these possibilities:
8578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
8579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @float Foo,lbl & no caption:    Foo 1.1
8580cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @float Foo & @caption{Cap}:     Foo: Cap
8581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @float Foo & no caption:        Foo
8582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @float ,lbl & Caption{Cap}:     1.1: Cap
8583cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @float ,lbl & no caption:       1.1
8584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @float & @caption{Cap}:         Cap
8585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @float & no caption:
8586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Efloat{%
8588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\floatident = \empty
8589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8590cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % In all cases, if we have a float type, it comes first.
8591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
8592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If we have an xref label, the number comes next.
8594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\floatlabel\empty \else
8595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifx\floattype\empty \else % if also had float type, need tie first.
8596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \appendtomacro\floatident{\tie}%
8597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
8598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % the number.
8599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
8600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Start the printed caption with what we've constructed in
8603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % \floatident, but keep it separate; we need \floatident again.
8604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \let\captionline = \floatident
8605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\thiscaption\empty \else
8607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \ifx\floatident\empty \else
8608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\appendtomacro\captionline{: }% had ident, so need a colon between
8609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \fi
8610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
8611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % caption text.
8612cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \appendtomacro\captionline{\scanexp\thiscaption}%
8613cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If we have anything to print, print it, with space before.
8616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Eventually this needs to become an \insert.
8617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\captionline\empty \else
8618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \vskip.5\parskip
8619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \captionline
8620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
8621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Space below caption.
8622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \vskip\parskip
8623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    %
8625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % If have an xref label, write the list of floats info.  Do this
8626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % after the caption, to avoid chance of it being a breakpoint.
8627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifx\floatlabel\empty \else
8628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Write the text that goes in the lof to the aux file as
8629cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % \floatlabel-lof.  Besides \floatident, we include the short
8630cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % caption if specified, else the full caption if specified, else nothing.
8631cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {%
8632cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \atdummies
863305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        %
8634cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % since we read the caption text in the macro world, where ^^M
8635cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % is turned into a normal character, we have to scan it back, so
8636cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        % we don't write the literal three characters "^^M" into the aux file.
8637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	\scanexp{%
8638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \xdef\noexpand\gtemp{%
8639cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    \ifx\thisshortcaption\empty
8640cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      \thiscaption
8641cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    \else
8642cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      \thisshortcaption
8643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    \fi
8644cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  }%
8645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	}%
8646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
8647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  \ifx\gtemp\empty \else : \gtemp \fi}}%
8648cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }%
8649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \egroup  % end of \vtop
8651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8652cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % place the captured inserts
8653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
865405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % BEWARE: when the floats start floating, we have to issue warning
865505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % whenever an insert appears inside a float which could possibly
865605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % float. --kasal, 26may04
8657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \checkinserts
8659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Append the tokens #2 to the definition of macro #1, not expanding either.
8662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8663cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\appendtomacro#1#2{%
8664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\def\expandafter#1\expandafter{#1#2}%
8665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @caption, @shortcaption
8668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\caption{\docaption\thiscaption}
8670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\shortcaption{\docaption\thisshortcaption}
8671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
8672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\defcaption#1#2{\egroup \def#1{#2}}
8673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8674cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% The parameter is the control sequence identifying the counter we are
8675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% going to use.  Create it if it doesn't exist and assign it to \floatno.
8676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\getfloatno#1{%
8677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx#1\relax
8678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Haven't seen this figure type before.
8679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \csname newcount\endcsname #1%
8680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      %
8681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % Remember to reset this floatno at the next chap.
8682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \expandafter\gdef\expandafter\resetallfloatnos
8683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        \expandafter{\resetallfloatnos #1=0 }%
8684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \let\floatno#1%
8686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
8689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
8690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% first read the @float command.
8691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
8693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Magic string used for the XREFLABEL-title value, so \xrefX can
8695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% distinguish floats from other xref types.
8696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\floatmagic{!!float!!}
8697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8698cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is the control sequence we are passed; we expand into a conditional
8699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% which is true if #1 represents a float ref.  That is, the magic
870005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \lastsection value which we \setref above.
8701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\iffloat#1{\expandafter\doiffloat#1==\finish}
8703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
8705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (safe) float type for this float.  We set \iffloattype to #2.
8706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\doiffloat#1=#2=#3\finish{%
8708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\temp{#1}%
8709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\iffloattype{#2}%
8710cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\temp\floatmagic
8711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
8714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\listoffloats{%
8716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \def\floattype{#1}% floattype
8717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {%
8718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % the floattype might have accents or other special characters,
8719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % but we need to use it in a control sequence name.
8720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \indexnofonts
8721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \turnoffactive
8722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \xdef\safefloattype{\floattype}%
8723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }%
8724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
8726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
8727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifhavexrefs
8728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      % if the user said @listoffloats foo but never @float foo.
8729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \message{\linenumber No `\safefloattype' floats to list.}%
8730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8731cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
8732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \begingroup
8733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \leftskip=\tocindent  % indent these entries like a toc
8734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \let\do=\listoffloatsdo
8735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \csname floatlist\safefloattype\endcsname
8736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \endgroup
8737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
8738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
8739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This is called on each entry in a list of floats.  We're passed the
8741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% xref label, in the form LABEL-title, which is how we save it in the
8742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% aux file.  We strip off the -title and look up \XRLABEL-lof, which
8743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% has the text we're supposed to typeset here.
8744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Figures without xref labels will not be included in the list (since
8746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% they won't appear in the aux file).
8747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
8748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
8749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\listoffloatsdoentry#1-title\finish{{%
8750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Can't fully expand XR#1-lof because it can contain anything.  Just
8751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % pass the control sequence.  On the other hand, XR#1-pg is just the
8752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % page number, and we want to fully expand that so we can get a link
8753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % in pdf output.
8754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
8755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
8756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % use the same \entry macro we use to generate the TOC and index.
8757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
8758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \writeentry
8759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
8760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
876105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{localization,}
8763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
876405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% For single-language documents, @documentlanguage is usually given very
876505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% early, just after @documentencoding.  Single argument is the language
876605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% (de) or locale (de_DE) abbreviation.
8767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
876805436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
876905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\_ = \active
877005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \globaldefs=1
877105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\documentlanguage{\begingroup
877205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \let_=\normalunderscore  % normal _ character for filenames
8773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tex % read txi-??.tex file in plain TeX.
877405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % Read the file by the name they passed if it exists.
8775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \openin 1 txi-#1.tex
8776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \ifeof 1
877705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \documentlanguagetrywithoutunderscore{#1_\finish}%
8778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \else
877905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \globaldefs = 1  % everything in the txi-LL files needs to persist
8780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      \input txi-#1.tex
8781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \fi
8782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \closein 1
878305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \endgroup % end raw TeX
878405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\endgroup}
878505436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
878605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% If they passed de_DE, and txi-de_DE.tex doesn't exist,
878705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% try txi-de.tex.
878805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
878905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
879005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \openin 1 txi-#1.tex
879105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifeof 1
879205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errhelp = \nolanghelp
879305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \errmessage{Cannot read language file txi-#1.tex}%
879405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
879505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \globaldefs = 1  % everything in the txi-LL files needs to persist
879605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \input txi-#1.tex
879705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
879805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \closein 1
8799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
880005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}% end of special _ catcode
880105436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
8802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newhelp\nolanghelp{The given language definition file cannot be found or
880305436638acc7c010349a69c3395f1a57c642dc62Ying Wangis empty.  Maybe you need to install it?  Putting it in the current
880405436638acc7c010349a69c3395f1a57c642dc62Ying Wangdirectory should work if nowhere else does.}
8805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
880605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This macro is called from txi-??.tex files; the first argument is the
880705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \language name to set (without the "\lang@" prefix), the second and
880805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% third args are \{left,right}hyphenmin.
880905436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
881005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% The language names to pass are determined when the format is built.
881105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% See the etex.log file created at that time, e.g.,
881205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
881305436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
881405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% With TeX Live 2008, etex now includes hyphenation patterns for all
881505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% available languages.  This means we can support hyphenation in
881605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Texinfo, at least to some extent.  (This still doesn't solve the
881705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% accented characters problem.)
881805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
881905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`@=11
882005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\txisetlanguage#1#2#3{%
882105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % do not set the language if the name is undefined in the current TeX.
882205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \expandafter\ifx\csname lang@#1\endcsname \relax
882305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \message{no patterns for #1}%
882405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
882505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \global\language = \csname lang@#1\endcsname
882605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
882705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % but there is no harm in adjusting the hyphenmin values regardless.
882805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\lefthyphenmin = #2\relax
882905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \global\righthyphenmin = #3\relax
883005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
8831cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
883205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Helpers for encodings.
883305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Set the catcode of characters 128 through 255 to the specified number.
883405436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
883505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\setnonasciicharscatcode#1{%
883605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \count255=128
883705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \loop\ifnum\count255<256
883805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \global\catcode\count255=#1\relax
883905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \advance\count255 by 1
884005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \repeat
884105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
8842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
884305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\setnonasciicharscatcodenonglobal#1{%
884405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \count255=128
884505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \loop\ifnum\count255<256
884605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \catcode\count255=#1\relax
884705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \advance\count255 by 1
884805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \repeat
884905436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
8850cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
885105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @documentencoding sets the definition of non-ASCII characters
885205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% according to the specified encoding.
8853cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
885405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\parseargdef\documentencoding{%
885505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Encoding being declared for the document.
885605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\declaredencoding{\csname #1.enc\endcsname}%
885705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
885805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Supported encodings: names converted to tokens in order to be able
885905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % to compare them with \ifx.
886005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\ascii{\csname US-ASCII.enc\endcsname}%
886105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
886205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\latone{\csname ISO-8859-1.enc\endcsname}%
886305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
886405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\utfeight{\csname UTF-8.enc\endcsname}%
886505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
886605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx \declaredencoding \ascii
886705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \asciichardefs
886805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
886905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \ifx \declaredencoding \lattwo
887005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \setnonasciicharscatcode\active
887105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \lattwochardefs
887205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
887305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \ifx \declaredencoding \latone
887405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \setnonasciicharscatcode\active
887505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \latonechardefs
887605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
887705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \ifx \declaredencoding \latnine
887805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \setnonasciicharscatcode\active
887905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \latninechardefs
888005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
888105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else \ifx \declaredencoding \utfeight
888205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \setnonasciicharscatcode\active
888305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     \utfeightchardefs
888405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
888505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
888605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \message{Unknown document encoding #1, ignoring.}%
888705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
888805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi % utfeight
888905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi % latnine
889005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi % latone
889105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi % lattwo
889205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi % ascii
889305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
889405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
889505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% A message to be logged when using a character that isn't available
889605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the default font encoding (OT1).
889705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
889805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
889905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
890005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Take account of \c (plain) vs. \, (Texinfo) difference.
890105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
890205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
890305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% First, make active non-ASCII characters in order for them to be
890405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% correctly categorized when TeX reads the replacement text of
890505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% macros containing the character definitions.
890605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setnonasciicharscatcode\active
890705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
890805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Latin1 (ISO-8859-1) character definitions.
890905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\latonechardefs{%
891005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a0{\tie}
891105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a1{\exclamdown}
891205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a2{\missingcharmsg{CENT SIGN}}
891305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a3{{\pounds}}
891405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
891505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a5{\missingcharmsg{YEN SIGN}}
891605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
891705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a7{\S}
891805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a8{\"{}}
891905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a9{\copyright}
892005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^aa{\ordf}
892105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ab{\guillemetleft}
892205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ac{$\lnot$}
892305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ad{\-}
892405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ae{\registeredsymbol}
892505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^af{\={}}
892605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
892705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b0{\textdegree}
892805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b1{$\pm$}
892905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b2{$^2$}
893005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b3{$^3$}
893105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b4{\'{}}
893205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b5{$\mu$}
893305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b6{\P}
893405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
893505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b7{$^.$}
893605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b8{\cedilla\ }
893705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b9{$^1$}
893805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ba{\ordm}
893905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
894005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bb{\guillemetright}
894105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bc{$1\over4$}
894205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bd{$1\over2$}
894305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^be{$3\over4$}
894405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bf{\questiondown}
894505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
894605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c0{\`A}
894705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c1{\'A}
894805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c2{\^A}
894905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c3{\~A}
895005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c4{\"A}
895105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c5{\ringaccent A}
895205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c6{\AE}
895305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c7{\cedilla C}
895405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c8{\`E}
895505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c9{\'E}
895605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ca{\^E}
895705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^cb{\"E}
895805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^cc{\`I}
895905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^cd{\'I}
896005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ce{\^I}
896105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^cf{\"I}
896205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
896305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d0{\DH}
896405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d1{\~N}
896505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d2{\`O}
896605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d3{\'O}
896705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d4{\^O}
896805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d5{\~O}
896905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d6{\"O}
897005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d7{$\times$}
897105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d8{\O}
897205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d9{\`U}
897305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^da{\'U}
897405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^db{\^U}
897505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^dc{\"U}
897605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^dd{\'Y}
897705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^de{\TH}
897805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^df{\ss}
897905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
898005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e0{\`a}
898105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e1{\'a}
898205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e2{\^a}
898305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e3{\~a}
898405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e4{\"a}
898505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e5{\ringaccent a}
898605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e6{\ae}
898705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e7{\cedilla c}
898805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e8{\`e}
898905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e9{\'e}
899005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ea{\^e}
899105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^eb{\"e}
899205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ec{\`{\dotless i}}
899305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ed{\'{\dotless i}}
899405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ee{\^{\dotless i}}
899505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ef{\"{\dotless i}}
899605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
899705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f0{\dh}
899805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f1{\~n}
899905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f2{\`o}
900005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f3{\'o}
900105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f4{\^o}
900205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f5{\~o}
900305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f6{\"o}
900405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f7{$\div$}
900505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f8{\o}
900605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f9{\`u}
900705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fa{\'u}
900805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fb{\^u}
900905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fc{\"u}
901005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fd{\'y}
901105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fe{\th}
901205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ff{\"y}
901305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
901405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
901505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Latin9 (ISO-8859-15) encoding character definitions.
901605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\latninechardefs{%
901705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  % Encoding is almost identical to Latin1.
901805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \latonechardefs
901905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
902005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a4{\euro}
902105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a6{\v S}
902205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a8{\v s}
902305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b4{\v Z}
902405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b8{\v z}
902505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bc{\OE}
902605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bd{\oe}
902705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^be{\"Y}
902805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
902905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
903005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Latin2 (ISO-8859-2) character definitions.
903105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\lattwochardefs{%
903205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a0{\tie}
903305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a1{\ogonek{A}}
903405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a2{\u{}}
903505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a3{\L}
903605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
903705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a5{\v L}
903805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a6{\'S}
903905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a7{\S}
904005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a8{\"{}}
904105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^a9{\v S}
904205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^aa{\cedilla S}
904305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ab{\v T}
904405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ac{\'Z}
904505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ad{\-}
904605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ae{\v Z}
904705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^af{\dotaccent Z}
904805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
904905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b0{\textdegree}
905005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b1{\ogonek{a}}
905105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b2{\ogonek{ }}
905205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b3{\l}
905305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b4{\'{}}
905405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b5{\v l}
905505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b6{\'s}
905605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b7{\v{}}
905705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b8{\cedilla\ }
905805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^b9{\v s}
905905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ba{\cedilla s}
906005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bb{\v t}
906105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bc{\'z}
906205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bd{\H{}}
906305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^be{\v z}
906405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^bf{\dotaccent z}
906505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
906605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c0{\'R}
906705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c1{\'A}
906805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c2{\^A}
906905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c3{\u A}
907005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c4{\"A}
907105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c5{\'L}
907205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c6{\'C}
907305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c7{\cedilla C}
907405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c8{\v C}
907505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^c9{\'E}
907605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ca{\ogonek{E}}
907705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^cb{\"E}
907805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^cc{\v E}
907905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^cd{\'I}
908005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ce{\^I}
908105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^cf{\v D}
908205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
908305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d0{\DH}
908405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d1{\'N}
908505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d2{\v N}
908605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d3{\'O}
908705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d4{\^O}
908805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d5{\H O}
908905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d6{\"O}
909005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d7{$\times$}
909105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d8{\v R}
909205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^d9{\ringaccent U}
909305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^da{\'U}
909405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^db{\H U}
909505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^dc{\"U}
909605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^dd{\'Y}
909705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^de{\cedilla T}
909805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^df{\ss}
909905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
910005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e0{\'r}
910105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e1{\'a}
910205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e2{\^a}
910305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e3{\u a}
910405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e4{\"a}
910505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e5{\'l}
910605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e6{\'c}
910705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e7{\cedilla c}
910805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e8{\v c}
910905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^e9{\'e}
911005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ea{\ogonek{e}}
911105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^eb{\"e}
911205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ec{\v e}
911305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ed{\'{\dotless{i}}}
911405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ee{\^{\dotless{i}}}
911505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ef{\v d}
911605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  %
911705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f0{\dh}
911805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f1{\'n}
911905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f2{\v n}
912005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f3{\'o}
912105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f4{\^o}
912205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f5{\H o}
912305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f6{\"o}
912405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f7{$\div$}
912505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f8{\v r}
912605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^f9{\ringaccent u}
912705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fa{\'u}
912805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fb{\H u}
912905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fc{\"u}
913005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fd{\'y}
913105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^fe{\cedilla t}
913205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef^^ff{\dotaccent{}}
913305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
913405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
913505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% UTF-8 character definitions.
913605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
913705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% This code to support UTF-8 is based on LaTeX's utf8.def, with some
913805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% changes for Texinfo conventions.  It is included here under the GPL by
913905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% permission from Frank Mittelbach and the LaTeX team.
914005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
914105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newcount\countUTFx
914205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newcount\countUTFy
914305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\newcount\countUTFz
914405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
914505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\UTFviiiTwoOctets#1#2{\expandafter
914605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
914705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
914805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
914905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
915005436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
915105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
915205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
915305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
915405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\gdef\UTFviiiDefined#1{%
915505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \ifx #1\relax
915605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
915705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \else
915805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \expandafter #1%
915905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \fi
916005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
916105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
916205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\begingroup
916305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\~13
916405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\"12
916505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
916605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\UTFviiiLoop{%
916705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \global\catcode\countUTFx\active
916805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \uccode`\~\countUTFx
916905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \uppercase\expandafter{\UTFviiiTmp}%
917005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\countUTFx by 1
917105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifnum\countUTFx < \countUTFy
917205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \expandafter\UTFviiiLoop
917305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi}
917405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
917505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \countUTFx = "C2
917605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \countUTFy = "E0
917705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\UTFviiiTmp{%
917805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
917905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \UTFviiiLoop
918005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
918105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \countUTFx = "E0
918205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \countUTFy = "F0
918305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\UTFviiiTmp{%
918405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
918505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \UTFviiiLoop
918605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
918705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \countUTFx = "F0
918805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \countUTFy = "F4
918905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \def\UTFviiiTmp{%
919005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
919105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \UTFviiiLoop
919205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\endgroup
919305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
919405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\begingroup
919505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\"=12
919605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\<=12
919705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\.=12
919805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\,=12
919905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\;=12
920005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\!=12
920105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \catcode`\~=13
920205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
920305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef\DeclareUnicodeCharacter#1#2{%
920405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \countUTFz = "#1\relax
920505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
920605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \begingroup
920705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseXMLCharref
920805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\UTFviiiTwoOctets##1##2{%
920905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \csname u8:##1\string ##2\endcsname}%
921005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\UTFviiiThreeOctets##1##2##3{%
921105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \csname u8:##1\string ##2\string ##3\endcsname}%
921205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \def\UTFviiiFourOctets##1##2##3##4{%
921305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
921405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \expandafter\expandafter\expandafter\expandafter
921505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \expandafter\expandafter\expandafter
921605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       \gdef\UTFviiiTmp{#2}%
921705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \endgroup}
921805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
921905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef\parseXMLCharref{%
922005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \ifnum\countUTFz < "A0\relax
922105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \errhelp = \EMsimple
922205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \errmessage{Cannot define Unicode char value < 00A0}%
922305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else\ifnum\countUTFz < "800\relax
922405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseUTFviiiA,%
922505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseUTFviiiB C\UTFviiiTwoOctets.,%
922605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else\ifnum\countUTFz < "10000\relax
922705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseUTFviiiA;%
922805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseUTFviiiA,%
922905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
923005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \else
923105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseUTFviiiA;%
923205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseUTFviiiA,%
923305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseUTFviiiA!%
923405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
923505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \fi\fi\fi
923605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
923705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
923805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef\parseUTFviiiA#1{%
923905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \countUTFx = \countUTFz
924005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \divide\countUTFz by 64
924105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \countUTFy = \countUTFz
924205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \multiply\countUTFz by 64
924305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\countUTFx by -\countUTFz
924405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\countUTFx by 128
924505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \uccode `#1\countUTFx
924605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \countUTFz = \countUTFy}
924705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
924805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \gdef\parseUTFviiiB#1#2#3#4{%
924905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \advance\countUTFz by "#10\relax
925005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \uccode `#3\countUTFz
925105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
925205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\endgroup
925305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
925405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\utfeightchardefs{%
925505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00A0}{\tie}
925605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00A1}{\exclamdown}
925705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00A3}{\pounds}
925805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00A8}{\"{ }}
925905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00A9}{\copyright}
926005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00AA}{\ordf}
926105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
926205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00AD}{\-}
926305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
926405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00AF}{\={ }}
926505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
926605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
926705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00B4}{\'{ }}
926805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
926905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00BA}{\ordm}
927005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00BB}{\guillemetright}
927105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00BF}{\questiondown}
927205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
927305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C0}{\`A}
927405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C1}{\'A}
927505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C2}{\^A}
927605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C3}{\~A}
927705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C4}{\"A}
927805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C5}{\AA}
927905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C6}{\AE}
928005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
928105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C8}{\`E}
928205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00C9}{\'E}
928305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00CA}{\^E}
928405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00CB}{\"E}
928505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00CC}{\`I}
928605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00CD}{\'I}
928705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00CE}{\^I}
928805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00CF}{\"I}
928905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
929005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00D0}{\DH}
929105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00D1}{\~N}
929205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00D2}{\`O}
929305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00D3}{\'O}
929405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00D4}{\^O}
929505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00D5}{\~O}
929605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00D6}{\"O}
929705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00D8}{\O}
929805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00D9}{\`U}
929905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00DA}{\'U}
930005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00DB}{\^U}
930105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00DC}{\"U}
930205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00DD}{\'Y}
930305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00DE}{\TH}
930405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00DF}{\ss}
930505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
930605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E0}{\`a}
930705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E1}{\'a}
930805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E2}{\^a}
930905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E3}{\~a}
931005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E4}{\"a}
931105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E5}{\aa}
931205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E6}{\ae}
931305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
931405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E8}{\`e}
931505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00E9}{\'e}
931605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00EA}{\^e}
931705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00EB}{\"e}
931805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
931905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
932005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
932105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
932205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
932305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00F0}{\dh}
932405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00F1}{\~n}
932505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00F2}{\`o}
932605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00F3}{\'o}
932705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00F4}{\^o}
932805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00F5}{\~o}
932905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00F6}{\"o}
933005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00F8}{\o}
933105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00F9}{\`u}
933205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00FA}{\'u}
933305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00FB}{\^u}
933405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00FC}{\"u}
933505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00FD}{\'y}
933605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00FE}{\th}
933705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{00FF}{\"y}
933805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
933905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0100}{\=A}
934005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0101}{\=a}
934105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0102}{\u{A}}
934205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0103}{\u{a}}
934305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0104}{\ogonek{A}}
934405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0105}{\ogonek{a}}
934505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0106}{\'C}
934605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0107}{\'c}
934705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0108}{\^C}
934805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0109}{\^c}
934905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0118}{\ogonek{E}}
935005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0119}{\ogonek{e}}
935105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
935205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
935305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{010C}{\v{C}}
935405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{010D}{\v{c}}
935505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{010E}{\v{D}}
935605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
935705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0112}{\=E}
935805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0113}{\=e}
935905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0114}{\u{E}}
936005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0115}{\u{e}}
936105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
936205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
936305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{011A}{\v{E}}
936405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{011B}{\v{e}}
936505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{011C}{\^G}
936605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{011D}{\^g}
936705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{011E}{\u{G}}
936805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{011F}{\u{g}}
936905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
937005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
937105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
937205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0124}{\^H}
937305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0125}{\^h}
937405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0128}{\~I}
937505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
937605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{012A}{\=I}
937705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
937805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{012C}{\u{I}}
937905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
938005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
938105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
938205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0131}{\dotless{i}}
938305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0132}{IJ}
938405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0133}{ij}
938505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0134}{\^J}
938605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
938705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0139}{\'L}
938805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{013A}{\'l}
938905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
939005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0141}{\L}
939105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0142}{\l}
939205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0143}{\'N}
939305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0144}{\'n}
939405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0147}{\v{N}}
939505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0148}{\v{n}}
939605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{014C}{\=O}
939705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{014D}{\=o}
939805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{014E}{\u{O}}
939905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{014F}{\u{o}}
940005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
940105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0150}{\H{O}}
940205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0151}{\H{o}}
940305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0152}{\OE}
940405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0153}{\oe}
940505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0154}{\'R}
940605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0155}{\'r}
940705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0158}{\v{R}}
940805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0159}{\v{r}}
940905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{015A}{\'S}
941005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{015B}{\'s}
941105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{015C}{\^S}
941205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{015D}{\^s}
941305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
941405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
941505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
941605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0160}{\v{S}}
941705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0161}{\v{s}}
941805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
941905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
942005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0164}{\v{T}}
942105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
942205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0168}{\~U}
942305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0169}{\~u}
942405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{016A}{\=U}
942505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{016B}{\=u}
942605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{016C}{\u{U}}
942705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{016D}{\u{u}}
942805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
942905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
943005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
943105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0170}{\H{U}}
943205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0171}{\H{u}}
943305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0174}{\^W}
943405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0175}{\^w}
943505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0176}{\^Y}
943605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0177}{\^y}
943705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0178}{\"Y}
943805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0179}{\'Z}
943905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{017A}{\'z}
944005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
944105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
944205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{017D}{\v{Z}}
944305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{017E}{\v{z}}
944405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
944505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
944605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01C5}{D\v{z}}
944705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01C6}{d\v{z}}
944805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01C7}{LJ}
944905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01C8}{Lj}
945005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01C9}{lj}
945105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01CA}{NJ}
945205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01CB}{Nj}
945305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01CC}{nj}
945405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01CD}{\v{A}}
945505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01CE}{\v{a}}
945605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01CF}{\v{I}}
945705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
945805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
945905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01D1}{\v{O}}
946005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01D2}{\v{o}}
946105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01D3}{\v{U}}
946205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01D4}{\v{u}}
946305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
946405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01E2}{\={\AE}}
946505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01E3}{\={\ae}}
946605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01E6}{\v{G}}
946705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01E7}{\v{g}}
946805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01E8}{\v{K}}
946905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01E9}{\v{k}}
947005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
947105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
947205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01F1}{DZ}
947305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01F2}{Dz}
947405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01F3}{dz}
947505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01F4}{\'G}
947605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01F5}{\'g}
947705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01F8}{\`N}
947805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01F9}{\`n}
947905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
948005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
948105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01FE}{\'{\O}}
948205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{01FF}{\'{\o}}
948305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
948405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{021E}{\v{H}}
948505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{021F}{\v{h}}
948605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
948705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
948805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
948905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
949005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
949105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
949205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
949305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
949405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0232}{\=Y}
949505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0233}{\=y}
949605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{0237}{\dotless{j}}
949705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
949805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
949905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
950005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
950105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
950205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
950305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
950405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
950505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
950605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
950705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
950805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
950905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
951005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
951105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
951205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
951305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
951405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
951505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
951605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E20}{\=G}
951705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E21}{\=g}
951805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
951905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
952005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
952105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
952205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E26}{\"H}
952305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E27}{\"h}
952405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
952505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E30}{\'K}
952605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E31}{\'k}
952705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
952805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
952905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
953005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
953105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
953205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
953305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
953405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
953505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E3E}{\'M}
953605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E3F}{\'m}
953705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
953805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
953905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
954005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
954105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
954205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
954305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
954405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
954505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
954605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
954705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
954805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
954905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E54}{\'P}
955005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E55}{\'p}
955105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
955205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
955305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
955405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
955505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
955605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
955705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
955805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
955905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
956005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
956105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
956205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
956305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
956405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
956505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
956605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
956705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
956805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
956905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
957005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
957105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E7C}{\~V}
957205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E7D}{\~v}
957305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
957405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
957505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
957605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E80}{\`W}
957705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E81}{\`w}
957805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E82}{\'W}
957905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E83}{\'w}
958005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E84}{\"W}
958105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E85}{\"w}
958205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
958305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
958405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
958505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
958605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
958705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
958805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E8C}{\"X}
958905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E8D}{\"x}
959005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
959105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
959205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
959305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E90}{\^Z}
959405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E91}{\^z}
959505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
959605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
959705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
959805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
959905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
960005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E97}{\"t}
960105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
960205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
960305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
960405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
960505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
960605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
960705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
960805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
960905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EBC}{\~E}
961005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EBD}{\~e}
961105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
961205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
961305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
961405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
961505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
961605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
961705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
961805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
961905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
962005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EF2}{\`Y}
962105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EF3}{\`y}
962205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
962305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
962405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EF8}{\~Y}
962505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{1EF9}{\~y}
962605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
962705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2013}{--}
962805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2014}{---}
962905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2018}{\quoteleft}
963005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2019}{\quoteright}
963105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
963205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{201C}{\quotedblleft}
963305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{201D}{\quotedblright}
963405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{201E}{\quotedblbase}
963505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2022}{\bullet}
963605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2026}{\dots}
963705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
963805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{203A}{\guilsinglright}
963905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{20AC}{\euro}
964005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
964105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2192}{\expansion}
964205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{21D2}{\result}
964305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
964405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2212}{\minus}
964505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2217}{\point}
964605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \DeclareUnicodeCharacter{2261}{\equiv}
964705436638acc7c010349a69c3395f1a57c642dc62Ying Wang}% end of \utfeightchardefs
964805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
964905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
965005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% US-ASCII character definitions.
965105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\asciichardefs{% nothing need be done
965205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   \relax
965305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
965405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
965505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Make non-ASCII characters printable again for compatibility with
965605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% existing Texinfo documents that may use them, even without declaring a
965705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% document encoding.
965805436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
965905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\setnonasciicharscatcode \other
966005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
966105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
966205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\message{formatting,}
966305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\newdimen\defaultparindent \defaultparindent = 15pt
9665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chapheadingskip = 15pt plus 4pt minus 2pt
9667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\secheadingskip = 12pt plus 3pt minus 2pt
9668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\subsecheadingskip = 9pt plus 2pt minus 2pt
9669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Prevent underfull vbox error messages.
9671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\vbadness = 10000
9672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
967305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Don't be very finicky about underfull hboxes, either.
967405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\hbadness = 6666
9675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
967605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Following George Bush, get rid of widows and orphans.
9677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\widowpenalty=10000
9678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\clubpenalty=10000
9679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
9681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% using an old version of TeX, don't do anything.  We want the amount of
9682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% stretch added to depend on the line length, hence the dependence on
9683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \hsize.  We call this whenever the paper size is set.
9684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
9685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\setemergencystretch{%
9686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifx\emergencystretch\thisisundefined
9687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    % Allow us to assign to \emergencystretch anyway.
9688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \def\emergencystretch{\dimen0}%
9689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \else
9690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \emergencystretch = .15\hsize
9691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
9692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
9693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Parameters in order: 1) textheight; 2) textwidth;
9695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
9696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% 7) physical page height; 8) physical page width.
9697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
9698cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% We also call \setleading{\textleading}, so the caller should define
9699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \textleading.  The caller should also set \parskip.
9700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
9701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\internalpagesizes#1#2#3#4#5#6#7#8{%
9702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \voffset = #3\relax
9703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \topskip = #6\relax
9704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \splittopskip = \topskip
9705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \vsize = #1\relax
9707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\vsize by \topskip
9708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \outervsize = \vsize
9709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\outervsize by 2\topandbottommargin
9710cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \pageheight = \vsize
9711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hsize = #2\relax
9713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \outerhsize = \hsize
9714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\outerhsize by 0.5in
9715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \pagewidth = \hsize
9716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \normaloffset = #4\relax
9718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \bindingoffset = #5\relax
9719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \ifpdf
9721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \pdfpageheight #7\relax
9722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    \pdfpagewidth #8\relax
972305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % if we don't reset these, they will remain at "1 true in" of
972405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    % whatever layout pdftex was dumped with.
972505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \pdfhorigin = 1 true in
972605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \pdfvorigin = 1 true in
9727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \fi
9728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setleading{\textleading}
9730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9731cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parindent = \defaultparindent
9732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setemergencystretch
9733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
9734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @letterpaper (the default).
9736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\letterpaper{{\globaldefs = 1
9737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip = 3pt plus 2pt minus 1pt
9738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \textleading = 13.2pt
9739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % If page is nothing but text, make it come out even.
974105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \internalpagesizes{607.2pt}{6in}% that's 46 lines
9742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\voffset}{.25in}%
9743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\bindingoffset}{36pt}%
9744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {11in}{8.5in}%
9745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
9746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Use @smallbook to reset parameters for 7x9.25 trim size.
9748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\smallbook{{\globaldefs = 1
9749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip = 2pt plus 1pt
9750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \textleading = 12pt
9751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \internalpagesizes{7.5in}{5in}%
975305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    {-.2in}{0in}%
9754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\bindingoffset}{16pt}%
9755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {9.25in}{7in}%
9756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \lispnarrowing = 0.3in
9758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tolerance = 700
9759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hfuzz = 1pt
9760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \contentsrightmargin = 0pt
9761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \defbodyindent = .5cm
9762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
9763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Use @smallerbook to reset parameters for 6x9 trim size.
9765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (Just testing, parameters still in flux.)
9766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\smallerbook{{\globaldefs = 1
9767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip = 1.5pt plus 1pt
9768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \textleading = 12pt
9769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \internalpagesizes{7.4in}{4.8in}%
9771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {-.2in}{-.4in}%
9772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {0pt}{14pt}%
9773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {9in}{6in}%
9774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \lispnarrowing = 0.25in
9776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tolerance = 700
9777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hfuzz = 1pt
9778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \contentsrightmargin = 0pt
9779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \defbodyindent = .4cm
9780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
9781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Use @afourpaper to print on European A4 paper.
9783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\afourpaper{{\globaldefs = 1
9784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip = 3pt plus 2pt minus 1pt
9785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \textleading = 13.2pt
9786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Double-side printing via postscript on Laserjet 4050
9788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
9789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % To change the settings for a different printer or situation, adjust
9790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \normaloffset until the front-side and back-side texts align.  Then
9791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % do the same for \bindingoffset.  You can set these for testing in
9792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % your texinfo source file like this:
9793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % @tex
9794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \global\normaloffset = -6mm
9795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % \global\bindingoffset = 10mm
9796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % @end tex
979705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
9798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\voffset}{\hoffset}%
9799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\bindingoffset}{44pt}%
9800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {297mm}{210mm}%
9801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tolerance = 700
9803cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hfuzz = 1pt
9804cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \contentsrightmargin = 0pt
9805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \defbodyindent = 5mm
9806cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
9807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Use @afivepaper to print on European A5 paper.
9809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% From romildo@urano.iceb.ufop.br, 2 July 2000.
9810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% He also recommends making @example and @lisp be small.
9811cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\afivepaper{{\globaldefs = 1
9812cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip = 2pt plus 1pt minus 0.1pt
9813cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \textleading = 12.5pt
9814cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9815cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \internalpagesizes{160mm}{120mm}%
9816cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\voffset}{\hoffset}%
9817cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\bindingoffset}{8pt}%
9818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {210mm}{148mm}%
9819cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \lispnarrowing = 0.2in
9821cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tolerance = 800
9822cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \hfuzz = 1.2pt
9823cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \contentsrightmargin = 0pt
9824cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \defbodyindent = 2mm
9825cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \tableindent = 12mm
9826cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
9827cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9828cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% A specific text layout, 24x15cm overall, intended for A4 paper.
9829cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\afourlatex{{\globaldefs = 1
9830cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \afourpaper
9831cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \internalpagesizes{237mm}{150mm}%
9832cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\voffset}{4.6mm}%
9833cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\bindingoffset}{7mm}%
9834cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {297mm}{210mm}%
9835cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9836cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  % Must explicitly reset to 0 because we call \afourpaper.
9837cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \globaldefs = 0
9838cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
9839cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9840cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Use @afourwide to print on A4 paper in landscape format.
9841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\afourwide{{\globaldefs = 1
9842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \afourpaper
9843cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \internalpagesizes{241mm}{165mm}%
9844cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\voffset}{-2.95mm}%
9845cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\bindingoffset}{7mm}%
9846cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {297mm}{210mm}%
9847cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \globaldefs = 0
9848cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
9849cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9850cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
9851cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Perhaps we should allow setting the margins, \topskip, \parskip,
9852cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% and/or leading, also. Or perhaps we should compute them somehow.
9853cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
9854cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
9855cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\pagesizesyyy#1,#2,#3\finish{{%
9856cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
9857cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \globaldefs = 1
9858cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9859cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \parskip = 3pt plus 2pt minus 1pt
9860cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \setleading{\textleading}%
9861cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
986205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \dimen0 = #1\relax
9863cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\dimen0 by \voffset
9864cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9865cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \dimen2 = \hsize
9866cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \advance\dimen2 by \normaloffset
9867cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  %
9868cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  \internalpagesizes{#1}{\hsize}%
9869cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\voffset}{\normaloffset}%
9870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\bindingoffset}{44pt}%
9871cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    {\dimen0}{\dimen2}%
9872cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}}
9873cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9874cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Set default to letter.
9875cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
9876cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\letterpaper
9877cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9878cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9879cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\message{and turning on texinfo input format.}
9880cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
988105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def^^L{\par} % remove \outer, so ^L can appear in an @comment
988205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
988305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% DEL is a comment character, in case @c does not suffice.
988405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\^^? = 14
988505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9886cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Define macros to output various characters with catcode for normal text.
988705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\"=\other \def\normaldoublequote{"}
988805436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
988905436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\+=\other \def\normalplus{+}
989005436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\<=\other \def\normalless{<}
989105436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\>=\other \def\normalgreater{>}
989205436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\^=\other \def\normalcaret{^}
989305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\_=\other \def\normalunderscore{_}
989405436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\|=\other \def\normalverticalbar{|}
989505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\~=\other \def\normaltilde{~}
9896cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9897cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This macro is used to make a character print one way in \tt
9898cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (where it can probably be output as-is), and another way in other fonts,
9899cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% where something hairier probably needs to be done.
9900cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
9901cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% #1 is what to print if we are indeed using \tt; #2 is what to print
9902cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% otherwise.  Since all the Computer Modern typewriter fonts have zero
9903cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% interword stretch (and shrink), and it is reasonable to expect all
9904cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% typewriter fonts to have this, we can check that font parameter.
9905cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
9906cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
9907cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9908cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Same as above, but check for italic font.  Actually this also catches
9909cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% non-italic slanted fonts since it is impossible to distinguish them from
9910cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% italic fonts.  But since this is only used by $ and it uses \sl anyway
9911cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% this is not a problem.
9912cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
9913cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9914cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Turn off all special characters except @
9915cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% (and those which the user can use as if they were ordinary).
9916cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Most of these we simply print from the \tt font, but for some, we can
9917cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% use math or other variants that look better in normal text.
9918cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9919cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\"=\active
9920cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\activedoublequote{{\tt\char34}}
9921cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let"=\activedoublequote
9922cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\~=\active
9923cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def~{{\tt\char126}}
9924cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef\hat=`\^
9925cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\^=\active
9926cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def^{{\tt \hat}}
9927cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\_=\active
9929cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def_{\ifusingtt\normalunderscore\_}
9930cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\let\realunder=_
9931cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Subroutine for the previous macro.
9932cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
9933cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9934cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\|=\active
9935cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def|{{\tt\char124}}
9936cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef \less=`\<
9937cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\<=\active
9938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def<{{\tt \less}}
9939cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\chardef \gtr=`\>
9940cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\>=\active
9941cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def>{{\tt \gtr}}
9942cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\+=\active
9943cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def+{{\tt \char 43}}
9944cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\$=\active
9945cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
9946cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9947cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If a .fmt file is being used, characters that might appear in a file
9948cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% name cannot be active until we have parsed the command line.
9949cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% So turn them off again, and have \everyjob (or @setfilename) turn them on.
9950cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \otherifyactive is called near the end of this file.
9951cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
9952cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
995305436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Used sometimes to turn off (effectively) the active characters even after
995405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% parsing them.
995505436638acc7c010349a69c3395f1a57c642dc62Ying Wang\def\turnoffactive{%
995605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \normalturnoffactive
995705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  \otherbackslash
995805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
995905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9960cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\catcode`\@=0
9961cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9962cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \backslashcurfont outputs one backslash character in current font,
9963cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% as in \char`\\.
9964cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\chardef\backslashcurfont=`\\
9965cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
9966cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9967cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \realbackslash is an actual character `\' with catcode other, and
9968cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% \doublebackslash is two of them (for the pdf outlines).
9969cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
9970cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
997105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% In texinfo, backslash is an active character; it prints the backslash
997205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% in fixed width font.
997305436638acc7c010349a69c3395f1a57c642dc62Ying Wang\catcode`\\=\active  % @ for escape char from now on.
997405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
997505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% The story here is that in math mode, the \char of \backslashcurfont
997605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% ends up printing the roman \ from the math symbol font (because \char
997705436638acc7c010349a69c3395f1a57c642dc62Ying Wang% in math mode uses the \mathcode, and plain.tex sets
997805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \mathcode`\\="026E).  It seems better for @backslashchar{} to always
997905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% print a typewriter backslash, hence we use an explicit \mathchar,
998005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
998105436638acc7c010349a69c3395f1a57c642dc62Ying Wang% ignored family value; char position "5C).  We can't use " for the
998205436638acc7c010349a69c3395f1a57c642dc62Ying Wang% usual hex value because it has already been made active.
998305436638acc7c010349a69c3395f1a57c642dc62Ying Wang@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
998405436638acc7c010349a69c3395f1a57c642dc62Ying Wang@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents.
998505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
998605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% On startup, @fixbackslash assigns:
998705436638acc7c010349a69c3395f1a57c642dc62Ying Wang%  @let \ = @normalbackslash
998805436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \rawbackslash defines an active \ to do \backslashcurfont.
998905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% \otherbackslash defines an active \ to be a literal `\' character with
999005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% catcode other.  We switch back and forth between these.
999105436638acc7c010349a69c3395f1a57c642dc62Ying Wang@gdef@rawbackslash{@let\=@backslashcurfont}
999205436638acc7c010349a69c3395f1a57c642dc62Ying Wang@gdef@otherbackslash{@let\=@realbackslash}
9993cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
999405436638acc7c010349a69c3395f1a57c642dc62Ying Wang% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
999505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the literal character `\'.
999605436638acc7c010349a69c3395f1a57c642dc62Ying Wang%
999705436638acc7c010349a69c3395f1a57c642dc62Ying Wang@def@normalturnoffactive{%
9998cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  @let"=@normaldoublequote
999905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  @let$=@normaldollar %$ font-lock fix
1000005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  @let+=@normalplus
1000105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  @let<=@normalless
1000205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  @let>=@normalgreater
1000305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  @let\=@normalbackslash
10004cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  @let^=@normalcaret
10005cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  @let_=@normalunderscore
10006cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  @let|=@normalverticalbar
1000705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  @let~=@normaltilde
1000805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  @markupsetuplqdefault
1000905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  @markupsetuprqdefault
10010cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  @unsepspaces
10011cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
10012cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10013cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Make _ and + \other characters, temporarily.
10014cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% This is canceled by @fixbackslash.
10015cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@otherifyactive
10016cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10017cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
10018cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% That is what \eatinput is for; after that, the `\' should revert to printing
10019cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% a backslash.
10020cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
10021cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@gdef@eatinput input texinfo{@fixbackslash}
10022cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@global@let\ = @eatinput
10023cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10024cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% On the other hand, perhaps the file did not have a `\input texinfo'. Then
1002505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% the first `\' in the file would cause an error. This macro tries to fix
10026cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% that, assuming it is called before the first `\' could plausibly occur.
10027cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Also turn back on active characters that might appear in the input
10028cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% file name, in case not using a pre-dumped format.
10029cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%
10030cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@gdef@fixbackslash{%
10031cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  @ifx\@eatinput @let\ = @normalbackslash @fi
10032cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  @catcode`+=@active
10033cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  @catcode`@_=@active
10034cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
10035cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10036cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project% Say @foo, not \foo, in error messages.
10037cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@escapechar = `@@
10038cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1003905436638acc7c010349a69c3395f1a57c642dc62Ying Wang% These (along with & and #) are made active for url-breaking, so need
1004005436638acc7c010349a69c3395f1a57c642dc62Ying Wang% active definitions as the normal characters.
1004105436638acc7c010349a69c3395f1a57c642dc62Ying Wang@def@normaldot{.}
1004205436638acc7c010349a69c3395f1a57c642dc62Ying Wang@def@normalquest{?}
1004305436638acc7c010349a69c3395f1a57c642dc62Ying Wang@def@normalslash{/}
10044cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1004505436638acc7c010349a69c3395f1a57c642dc62Ying Wang% These look ok in all fonts, so just make them not special.
1004605436638acc7c010349a69c3395f1a57c642dc62Ying Wang% @hashchar{} gets its own user-level command, because of #line.
1004705436638acc7c010349a69c3395f1a57c642dc62Ying Wang@catcode`@& = @other @def@normalamp{&}
1004805436638acc7c010349a69c3395f1a57c642dc62Ying Wang@catcode`@# = @other @def@normalhash{#}
1004905436638acc7c010349a69c3395f1a57c642dc62Ying Wang@catcode`@% = @other @def@normalpercent{%}
1005005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1005105436638acc7c010349a69c3395f1a57c642dc62Ying Wang@let @hashchar = @normalhash
1005205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1005305436638acc7c010349a69c3395f1a57c642dc62Ying Wang@c Finally, make ` and ' active, so that txicodequoteundirected and
1005405436638acc7c010349a69c3395f1a57c642dc62Ying Wang@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we
1005505436638acc7c010349a69c3395f1a57c642dc62Ying Wang@c don't make ` and ' active, @code will not get them as active chars.
1005605436638acc7c010349a69c3395f1a57c642dc62Ying Wang@c Do this last of all since we use ` in the previous @catcode assignments.
1005705436638acc7c010349a69c3395f1a57c642dc62Ying Wang@catcode`@'=@active
1005805436638acc7c010349a69c3395f1a57c642dc62Ying Wang@catcode`@`=@active
1005905436638acc7c010349a69c3395f1a57c642dc62Ying Wang@markupsetuplqdefault
1006005436638acc7c010349a69c3395f1a57c642dc62Ying Wang@markupsetuprqdefault
10061cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10062cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@c Local variables:
10063cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@c eval: (add-hook 'write-file-hooks 'time-stamp)
10064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@c page-delimiter: "^\\\\message"
10065cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@c time-stamp-start: "def\\\\texinfoversion{"
10066cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@c time-stamp-format: "%:y-%02m-%02d.%02H"
10067cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@c time-stamp-end: "}"
10068cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@c End:
10069cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10070cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@c vim:sw=2:
10071cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10072cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@ignore
10073cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
10074cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@end ignore
10075